diff options
Diffstat (limited to 'spec/lib/gitlab/metrics/rails_slis_spec.rb')
-rw-r--r-- | spec/lib/gitlab/metrics/rails_slis_spec.rb | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/spec/lib/gitlab/metrics/rails_slis_spec.rb b/spec/lib/gitlab/metrics/rails_slis_spec.rb new file mode 100644 index 00000000000..16fcb9d46a2 --- /dev/null +++ b/spec/lib/gitlab/metrics/rails_slis_spec.rb @@ -0,0 +1,58 @@ +# frozen_string_literal: true +require 'spec_helper' + +RSpec.describe Gitlab::Metrics::RailsSlis do + # Limit what routes we'll initialize so we don't have to load the entire thing + before do + api_route = API::API.routes.find do |route| + API::Base.endpoint_id_for_route(route) == "GET /api/:version/version" + end + + allow(Gitlab::RequestEndpoints).to receive(:all_api_endpoints).and_return([api_route]) + allow(Gitlab::RequestEndpoints).to receive(:all_controller_actions).and_return([[ProjectsController, 'show']]) + end + + describe '.initialize_request_slis_if_needed!' do + it "initializes the SLI for all possible endpoints if they weren't" do + possible_labels = [ + { + endpoint_id: "GET /api/:version/version", + feature_category: :not_owned + }, + { + endpoint_id: "ProjectsController#show", + feature_category: :projects + } + ] + + expect(Gitlab::Metrics::Sli).to receive(:initialized?).with(:rails_request_apdex) { false } + expect(Gitlab::Metrics::Sli).to receive(:initialize_sli).with(:rails_request_apdex, array_including(*possible_labels)).and_call_original + + described_class.initialize_request_slis_if_needed! + end + + it 'does not initialize the SLI if they were initialized already' do + expect(Gitlab::Metrics::Sli).to receive(:initialized?).with(:rails_request_apdex) { true } + expect(Gitlab::Metrics::Sli).not_to receive(:initialize_sli) + + described_class.initialize_request_slis_if_needed! + end + + it 'does not initialize anything if the feature flag is disabled' do + stub_feature_flags(request_apdex_counters: false) + + expect(Gitlab::Metrics::Sli).not_to receive(:initialize_sli) + expect(Gitlab::Metrics::Sli).not_to receive(:initialized?) + + described_class.initialize_request_slis_if_needed! + end + end + + describe '.request_apdex' do + it 'returns the initialized request apdex SLI object' do + described_class.initialize_request_slis_if_needed! + + expect(described_class.request_apdex).to be_initialized + end + end +end |