diff options
Diffstat (limited to 'spec/lib/gitlab/usage/service_ping_report_spec.rb')
-rw-r--r-- | spec/lib/gitlab/usage/service_ping_report_spec.rb | 137 |
1 files changed, 52 insertions, 85 deletions
diff --git a/spec/lib/gitlab/usage/service_ping_report_spec.rb b/spec/lib/gitlab/usage/service_ping_report_spec.rb index 1f62ddd0bbb..b6119ab52ec 100644 --- a/spec/lib/gitlab/usage/service_ping_report_spec.rb +++ b/spec/lib/gitlab/usage/service_ping_report_spec.rb @@ -7,119 +7,86 @@ RSpec.describe Gitlab::Usage::ServicePingReport, :use_clean_rails_memory_store_c let(:usage_data) { { uuid: "1111", counts: { issue: 0 } } } - context 'when feature merge_service_ping_instrumented_metrics enabled' do - before do - stub_feature_flags(merge_service_ping_instrumented_metrics: true) + before do + allow_next_instance_of(Gitlab::Usage::ServicePing::PayloadKeysProcessor) do |instance| + allow(instance).to receive(:missing_key_paths).and_return([]) + end - allow_next_instance_of(Gitlab::Usage::ServicePing::PayloadKeysProcessor) do |instance| - allow(instance).to receive(:missing_key_paths).and_return([]) - end + allow_next_instance_of(Gitlab::Usage::ServicePing::InstrumentedPayload) do |instance| + allow(instance).to receive(:build).and_return({}) + end + end - allow_next_instance_of(Gitlab::Usage::ServicePing::InstrumentedPayload) do |instance| - allow(instance).to receive(:build).and_return({}) - end + context 'all_metrics_values' do + it 'generates the service ping when there are no missing values' do + expect(Gitlab::UsageData).to receive(:data).and_return(usage_data) + expect(described_class.for(output: :all_metrics_values)).to eq({ uuid: "1111", counts: { issue: 0 } }) end - context 'all_metrics_values' do - it 'generates the service ping when there are no missing values' do - expect(Gitlab::UsageData).to receive(:data).and_return(usage_data) - expect(described_class.for(output: :all_metrics_values)).to eq({ uuid: "1111", counts: { issue: 0 } }) + it 'generates the service ping with the missing values' do + expect_next_instance_of(Gitlab::Usage::ServicePing::PayloadKeysProcessor, usage_data) do |instance| + expect(instance).to receive(:missing_instrumented_metrics_key_paths).and_return(['counts.boards']) end - it 'generates the service ping with the missing values' do - expect_next_instance_of(Gitlab::Usage::ServicePing::PayloadKeysProcessor, usage_data) do |instance| - expect(instance).to receive(:missing_instrumented_metrics_key_paths).and_return(['counts.boards']) - end - - expect_next_instance_of(Gitlab::Usage::ServicePing::InstrumentedPayload, ['counts.boards'], :with_value) do |instance| - expect(instance).to receive(:build).and_return({ counts: { boards: 1 } }) - end - - expect(Gitlab::UsageData).to receive(:data).and_return(usage_data) - expect(described_class.for(output: :all_metrics_values)).to eq({ uuid: "1111", counts: { issue: 0, boards: 1 } }) + expect_next_instance_of(Gitlab::Usage::ServicePing::InstrumentedPayload, ['counts.boards'], :with_value) do |instance| + expect(instance).to receive(:build).and_return({ counts: { boards: 1 } }) end - end - - context 'for output: :metrics_queries' do - it 'generates the service ping' do - expect(Gitlab::UsageData).to receive(:data).and_return(usage_data) - described_class.for(output: :metrics_queries) - end + expect(Gitlab::UsageData).to receive(:data).and_return(usage_data) + expect(described_class.for(output: :all_metrics_values)).to eq({ uuid: "1111", counts: { issue: 0, boards: 1 } }) end + end - context 'for output: :non_sql_metrics_values' do - it 'generates the service ping' do - expect(Gitlab::UsageData).to receive(:data).and_return(usage_data) + context 'for output: :metrics_queries' do + it 'generates the service ping' do + expect(Gitlab::UsageData).to receive(:data).and_return(usage_data) - described_class.for(output: :non_sql_metrics_values) - end + described_class.for(output: :metrics_queries) end + end - context 'when using cached' do - context 'for cached: true' do - let(:new_usage_data) { { uuid: "1112" } } - - it 'caches the values' do - allow(Gitlab::UsageData).to receive(:data).and_return(usage_data, new_usage_data) + context 'for output: :non_sql_metrics_values' do + it 'generates the service ping' do + expect(Gitlab::UsageData).to receive(:data).and_return(usage_data) - expect(described_class.for(output: :all_metrics_values)).to eq(usage_data) - expect(described_class.for(output: :all_metrics_values, cached: true)).to eq(usage_data) + described_class.for(output: :non_sql_metrics_values) + end + end - expect(Rails.cache.fetch('usage_data')).to eq(usage_data) - end + context 'when using cached' do + context 'for cached: true' do + let(:new_usage_data) { { uuid: "1112" } } - it 'writes to cache and returns fresh data' do - allow(Gitlab::UsageData).to receive(:data).and_return(usage_data, new_usage_data) + it 'caches the values' do + allow(Gitlab::UsageData).to receive(:data).and_return(usage_data, new_usage_data) - expect(described_class.for(output: :all_metrics_values)).to eq(usage_data) - expect(described_class.for(output: :all_metrics_values)).to eq(new_usage_data) - expect(described_class.for(output: :all_metrics_values, cached: true)).to eq(new_usage_data) + expect(described_class.for(output: :all_metrics_values)).to eq(usage_data) + expect(described_class.for(output: :all_metrics_values, cached: true)).to eq(usage_data) - expect(Rails.cache.fetch('usage_data')).to eq(new_usage_data) - end + expect(Rails.cache.fetch('usage_data')).to eq(usage_data) end - context 'when no caching' do - let(:new_usage_data) { { uuid: "1112" } } - - it 'returns fresh data' do - allow(Gitlab::UsageData).to receive(:data).and_return(usage_data, new_usage_data) - - expect(described_class.for(output: :all_metrics_values)).to eq(usage_data) - expect(described_class.for(output: :all_metrics_values)).to eq(new_usage_data) - - expect(Rails.cache.fetch('usage_data')).to eq(new_usage_data) - end - end - end - end + it 'writes to cache and returns fresh data' do + allow(Gitlab::UsageData).to receive(:data).and_return(usage_data, new_usage_data) - context 'when feature merge_service_ping_instrumented_metrics disabled' do - before do - stub_feature_flags(merge_service_ping_instrumented_metrics: false) - end + expect(described_class.for(output: :all_metrics_values)).to eq(usage_data) + expect(described_class.for(output: :all_metrics_values)).to eq(new_usage_data) + expect(described_class.for(output: :all_metrics_values, cached: true)).to eq(new_usage_data) - context 'all_metrics_values' do - it 'generates the service ping when there are no missing values' do - expect(Gitlab::UsageData).to receive(:data).and_return(usage_data) - expect(described_class.for(output: :all_metrics_values)).to eq({ uuid: "1111", counts: { issue: 0 } }) + expect(Rails.cache.fetch('usage_data')).to eq(new_usage_data) end end - context 'for output: :metrics_queries' do - it 'generates the service ping' do - expect(Gitlab::UsageData).to receive(:data).and_return(usage_data) + context 'when no caching' do + let(:new_usage_data) { { uuid: "1112" } } - described_class.for(output: :metrics_queries) - end - end + it 'returns fresh data' do + allow(Gitlab::UsageData).to receive(:data).and_return(usage_data, new_usage_data) - context 'for output: :non_sql_metrics_values' do - it 'generates the service ping' do - expect(Gitlab::UsageData).to receive(:data).and_return(usage_data) + expect(described_class.for(output: :all_metrics_values)).to eq(usage_data) + expect(described_class.for(output: :all_metrics_values)).to eq(new_usage_data) - described_class.for(output: :non_sql_metrics_values) + expect(Rails.cache.fetch('usage_data')).to eq(new_usage_data) end end end |