diff options
Diffstat (limited to 'spec/lib/gitlab/metrics/global_search_slis_spec.rb')
-rw-r--r-- | spec/lib/gitlab/metrics/global_search_slis_spec.rb | 173 |
1 files changed, 173 insertions, 0 deletions
diff --git a/spec/lib/gitlab/metrics/global_search_slis_spec.rb b/spec/lib/gitlab/metrics/global_search_slis_spec.rb new file mode 100644 index 00000000000..28496eff2fc --- /dev/null +++ b/spec/lib/gitlab/metrics/global_search_slis_spec.rb @@ -0,0 +1,173 @@ +# frozen_string_literal: true + +require 'spec_helper' + +RSpec.describe Gitlab::Metrics::GlobalSearchSlis do + using RSpec::Parameterized::TableSyntax + + let(:apdex_feature_flag_enabled) { true } + let(:error_rate_feature_flag_enabled) { true } + + before do + stub_feature_flags(global_search_custom_slis: apdex_feature_flag_enabled) + stub_feature_flags(global_search_error_rate_sli: error_rate_feature_flag_enabled) + end + + describe '#initialize_slis!' do + context 'when global_search_custom_slis feature flag is enabled' do + let(:apdex_feature_flag_enabled) { true } + + it 'initializes Apdex SLIs for global_search' do + expect(Gitlab::Metrics::Sli::Apdex).to receive(:initialize_sli).with( + :global_search, + a_kind_of(Array) + ) + + described_class.initialize_slis! + end + end + + context 'when global_search_error_rate_sli feature flag is enabled' do + let(:error_rate_feature_flag_enabled) { true } + + it 'initializes ErrorRate SLIs for global_search' do + expect(Gitlab::Metrics::Sli::ErrorRate).to receive(:initialize_sli).with( + :global_search, + a_kind_of(Array) + ) + + described_class.initialize_slis! + end + end + + context 'when global_search_custom_slis feature flag is disabled' do + let(:apdex_feature_flag_enabled) { false } + + it 'does not initialize the Apdex SLIs for global_search' do + expect(Gitlab::Metrics::Sli::Apdex).not_to receive(:initialize_sli) + + described_class.initialize_slis! + end + end + + context 'when global_search_error_rate_sli feature flag is disabled' do + let(:error_rate_feature_flag_enabled) { false } + + it 'does not initialize the ErrorRate SLIs for global_search' do + expect(Gitlab::Metrics::Sli::ErrorRate).not_to receive(:initialize_sli) + + described_class.initialize_slis! + end + end + end + + describe '#record_apdex' do + context 'when global_search_custom_slis feature flag is enabled' do + let(:apdex_feature_flag_enabled) { true } + + where(:search_type, :code_search, :duration_target) do + 'basic' | false | 7.031 + 'basic' | true | 21.903 + 'advanced' | false | 4.865 + 'advanced' | true | 13.546 + end + + with_them do + before do + allow(::Gitlab::ApplicationContext).to receive(:current_context_attribute).with(:caller_id).and_return('end') + end + + let(:search_scope) { code_search ? 'blobs' : 'issues' } + + it 'increments the global_search SLI as a success if the elapsed time is within the target' do + duration = duration_target - 0.1 + + expect(Gitlab::Metrics::Sli::Apdex[:global_search]).to receive(:increment).with( + labels: { + search_type: search_type, + search_level: 'global', + search_scope: search_scope, + endpoint_id: 'end' + }, + success: true + ) + + described_class.record_apdex( + elapsed: duration, + search_type: search_type, + search_level: 'global', + search_scope: search_scope + ) + end + + it 'increments the global_search SLI as a failure if the elapsed time is not within the target' do + duration = duration_target + 0.1 + + expect(Gitlab::Metrics::Sli::Apdex[:global_search]).to receive(:increment).with( + labels: { + search_type: search_type, + search_level: 'global', + search_scope: search_scope, + endpoint_id: 'end' + }, + success: false + ) + + described_class.record_apdex( + elapsed: duration, + search_type: search_type, + search_level: 'global', + search_scope: search_scope + ) + end + end + end + + context 'when global_search_custom_slis feature flag is disabled' do + let(:apdex_feature_flag_enabled) { false } + + it 'does not call increment on the apdex SLI' do + expect(Gitlab::Metrics::Sli::Apdex[:global_search]).not_to receive(:increment) + + described_class.record_apdex( + elapsed: 1, + search_type: 'basic', + search_level: 'global', + search_scope: 'issues' + ) + end + end + end + + describe '#record_error_rate' do + context 'when global_search_error_rate_sli feature flag is enabled' do + let(:error_rate_feature_flag_enabled) { true } + + it 'calls increment on the error rate SLI' do + expect(Gitlab::Metrics::Sli::ErrorRate[:global_search]).to receive(:increment) + + described_class.record_error_rate( + error: true, + search_type: 'basic', + search_level: 'global', + search_scope: 'issues' + ) + end + end + + context 'when global_search_error_rate_sli feature flag is disabled' do + let(:error_rate_feature_flag_enabled) { false } + + it 'does not call increment on the error rate SLI' do + expect(Gitlab::Metrics::Sli::ErrorRate[:global_search]).not_to receive(:increment) + + described_class.record_error_rate( + error: true, + search_type: 'basic', + search_level: 'global', + search_scope: 'issues' + ) + end + end + end +end |