diff options
Diffstat (limited to 'spec/lib/gitlab/usage_data_counters/hll_redis_counter_spec.rb')
-rw-r--r-- | spec/lib/gitlab/usage_data_counters/hll_redis_counter_spec.rb | 165 |
1 files changed, 29 insertions, 136 deletions
diff --git a/spec/lib/gitlab/usage_data_counters/hll_redis_counter_spec.rb b/spec/lib/gitlab/usage_data_counters/hll_redis_counter_spec.rb index fc1d66d1d62..7bef14d5f7a 100644 --- a/spec/lib/gitlab/usage_data_counters/hll_redis_counter_spec.rb +++ b/spec/lib/gitlab/usage_data_counters/hll_redis_counter_spec.rb @@ -8,9 +8,6 @@ RSpec.describe Gitlab::UsageDataCounters::HLLRedisCounter, :clean_gitlab_redis_s let(:entity3) { '34rfjuuy-ce56-sa35-ds34-dfer567dfrf2' } let(:entity4) { '8b9a2671-2abf-4bec-a682-22f6a8f7bf31' } - let(:default_context) { 'default' } - let(:invalid_context) { 'invalid' } - around do |example| # We need to freeze to a reference time # because visits are grouped by the week number in the year @@ -27,62 +24,39 @@ RSpec.describe Gitlab::UsageDataCounters::HLLRedisCounter, :clean_gitlab_redis_s describe '.known_events' do let(:ce_event) { { "name" => "ce_event" } } - - context 'with use_metric_definitions_for_events_list disabled' do - let(:ce_temp_dir) { Dir.mktmpdir } - let(:ce_temp_file) { Tempfile.new(%w[common .yml], ce_temp_dir) } - - before do - stub_feature_flags(use_metric_definitions_for_events_list: false) - stub_const("#{described_class}::KNOWN_EVENTS_PATH", File.expand_path('*.yml', ce_temp_dir)) - File.open(ce_temp_file.path, "w+b") { |f| f.write [ce_event].to_yaml } - end - - after do - ce_temp_file.unlink - FileUtils.remove_entry(ce_temp_dir) if Dir.exist?(ce_temp_dir) - end - - it 'returns ce events' do - expect(described_class.known_events).to include(ce_event) - end + let(:removed_ce_event) { { "name" => "removed_ce_event" } } + let(:metric_definition) do + Gitlab::Usage::MetricDefinition.new('ce_metric', + { + key_path: 'ce_metric_weekly', + status: 'active', + options: { + events: [ce_event['name']] + } + }) end - context 'with use_metric_definitions_for_events_list enabled' do - let(:removed_ce_event) { { "name" => "removed_ce_event" } } - let(:metric_definition) do - Gitlab::Usage::MetricDefinition.new('ce_metric', - { - key_path: 'ce_metric_weekly', - status: 'active', - options: { - events: [ce_event['name']] - } - }) - end - - let(:removed_metric_definition) do - Gitlab::Usage::MetricDefinition.new('removed_ce_metric', - { - key_path: 'removed_ce_metric_weekly', - status: 'removed', - options: { - events: [removed_ce_event['name']] - } - }) - end + let(:removed_metric_definition) do + Gitlab::Usage::MetricDefinition.new('removed_ce_metric', + { + key_path: 'removed_ce_metric_weekly', + status: 'removed', + options: { + events: [removed_ce_event['name']] + } + }) + end - before do - allow(Gitlab::Usage::MetricDefinition).to receive(:all).and_return([metric_definition, removed_metric_definition]) - end + before do + allow(Gitlab::Usage::MetricDefinition).to receive(:all).and_return([metric_definition, removed_metric_definition]) + end - it 'returns ce events' do - expect(described_class.known_events).to include(ce_event) - end + it 'returns ce events' do + expect(described_class.known_events).to include(ce_event) + end - it 'does not return removed events' do - expect(described_class.known_events).not_to include(removed_ce_event) - end + it 'does not return removed events' do + expect(described_class.known_events).not_to include(removed_ce_event) end end @@ -96,7 +70,6 @@ RSpec.describe Gitlab::UsageDataCounters::HLLRedisCounter, :clean_gitlab_redis_s let(:no_slot) { 'no_slot' } let(:different_aggregation) { 'different_aggregation' } let(:custom_daily_event) { 'g_analytics_custom' } - let(:context_event) { 'context_event' } let(:global_category) { 'global' } let(:compliance_category) { 'compliance' } @@ -111,8 +84,7 @@ RSpec.describe Gitlab::UsageDataCounters::HLLRedisCounter, :clean_gitlab_redis_s { name: category_productivity_event }, { name: compliance_slot_event }, { name: no_slot }, - { name: different_aggregation }, - { name: context_event } + { name: different_aggregation } ].map(&:with_indifferent_access) end @@ -214,43 +186,6 @@ RSpec.describe Gitlab::UsageDataCounters::HLLRedisCounter, :clean_gitlab_redis_s end end - describe '.track_event_in_context' do - context 'with valid contex' do - it 'increments context event counter' do - expect(Gitlab::Redis::HLL).to receive(:add) do |kwargs| - expect(kwargs[:key]).to match(/^#{default_context}_.*/) - end - - described_class.track_event_in_context(context_event, values: entity1, context: default_context) - end - - it 'tracks events with multiple values' do - values = [entity1, entity2] - expect(Gitlab::Redis::HLL).to receive(:add).with(key: /g_analytics_contribution/, - value: values, - expiry: described_class::KEY_EXPIRY_LENGTH) - - described_class.track_event_in_context(:g_analytics_contribution, values: values, context: default_context) - end - end - - context 'with empty context' do - it 'does not increment a counter' do - expect(Gitlab::Redis::HLL).not_to receive(:add) - - described_class.track_event_in_context(context_event, values: entity1, context: '') - end - end - - context 'when sending invalid context' do - it 'does not increment a counter' do - expect(Gitlab::Redis::HLL).not_to receive(:add) - - described_class.track_event_in_context(context_event, values: entity1, context: invalid_context) - end - end - end - describe '.unique_events' do before do # events in current week, should not be counted as week is not complete @@ -360,48 +295,6 @@ RSpec.describe Gitlab::UsageDataCounters::HLLRedisCounter, :clean_gitlab_redis_s end end - describe 'context level tracking' do - using RSpec::Parameterized::TableSyntax - - let(:known_events) do - [ - { name: 'event_name_1' }, - { name: 'event_name_2' }, - { name: 'event_name_3' } - ].map(&:with_indifferent_access) - end - - before do - allow(described_class).to receive(:known_events).and_return(known_events) - allow(described_class).to receive(:categories).and_return(%w(category1 category2)) - - described_class.track_event_in_context('event_name_1', values: [entity1, entity3], context: default_context, time: 2.days.ago) - described_class.track_event_in_context('event_name_1', values: entity3, context: default_context, time: 2.days.ago) - described_class.track_event_in_context('event_name_1', values: entity3, context: invalid_context, time: 2.days.ago) - described_class.track_event_in_context('event_name_2', values: [entity1, entity2], context: '', time: 2.weeks.ago) - end - - subject(:unique_events) { described_class.unique_events(event_names: event_names, start_date: 4.weeks.ago, end_date: Date.current, context: context) } - - context 'with correct arguments' do - where(:event_names, :context, :value) do - ['event_name_1'] | 'default' | 2 - ['event_name_1'] | '' | 0 - ['event_name_2'] | '' | 0 - end - - with_them do - it { is_expected.to eq value } - end - end - - context 'with invalid context' do - it 'raise error' do - expect { described_class.unique_events(event_names: 'event_name_1', start_date: 4.weeks.ago, end_date: Date.current, context: invalid_context) }.to raise_error(Gitlab::UsageDataCounters::HLLRedisCounter::InvalidContext) - end - end - end - describe '.calculate_events_union' do let(:time_range) { { start_date: 7.days.ago, end_date: DateTime.current } } let(:known_events) do |