diff options
Diffstat (limited to 'spec/lib/gitlab/metrics/subscribers/ldap_spec.rb')
-rw-r--r-- | spec/lib/gitlab/metrics/subscribers/ldap_spec.rb | 124 |
1 files changed, 124 insertions, 0 deletions
diff --git a/spec/lib/gitlab/metrics/subscribers/ldap_spec.rb b/spec/lib/gitlab/metrics/subscribers/ldap_spec.rb new file mode 100644 index 00000000000..b81000be62a --- /dev/null +++ b/spec/lib/gitlab/metrics/subscribers/ldap_spec.rb @@ -0,0 +1,124 @@ +# frozen_string_literal: true + +require "spec_helper" + +RSpec.describe Gitlab::Metrics::Subscribers::Ldap, :request_store, feature_category: :logging do + let(:transaction) { Gitlab::Metrics::WebTransaction.new({}) } + let(:subscriber) { described_class.new } + + let(:attributes) do + [ + :altServer, :namingContexts, :supportedCapabilities, :supportedControl, + :supportedExtension, :supportedFeatures, :supportedLdapVersion, :supportedSASLMechanisms + ] + end + + let(:event_1) do + instance_double( + ActiveSupport::Notifications::Event, + name: "open.net_ldap", + payload: { + ignore_server_caps: true, + base: "", + scope: 0, + attributes: attributes, + result: nil + }, + time: Time.current, + duration: 0.321 + ) + end + + let(:event_2) do + instance_double( + ActiveSupport::Notifications::Event, + name: "search.net_ldap", + payload: { + ignore_server_caps: true, + base: "", + scope: 0, + attributes: attributes, + result: nil + }, + time: Time.current, + duration: 0.12 + ) + end + + let(:event_3) do + instance_double( + ActiveSupport::Notifications::Event, + name: "search.net_ldap", + payload: { + ignore_server_caps: true, + base: "", + scope: 0, + attributes: attributes, + result: nil + }, + time: Time.current, + duration: 5.3 + ) + end + + around do |example| + freeze_time { example.run } + end + + describe ".payload" do + context "when SafeRequestStore is empty" do + it "returns an empty array" do + expect(described_class.payload).to eql(net_ldap_count: 0, net_ldap_duration_s: 0.0) + end + end + + context "when LDAP recorded some values" do + before do + Gitlab::SafeRequestStore[:net_ldap_count] = 7 + Gitlab::SafeRequestStore[:net_ldap_duration_s] = 1.2 + end + + it "returns the populated payload" do + expect(described_class.payload).to eql(net_ldap_count: 7, net_ldap_duration_s: 1.2) + end + end + end + + describe "#observe_event" do + before do + allow(subscriber).to receive(:current_transaction).and_return(transaction) + end + + it "tracks LDAP request count" do + expect(transaction).to receive(:increment) + .with(:gitlab_net_ldap_total, 1, { name: "open" }) + expect(transaction).to receive(:increment) + .with(:gitlab_net_ldap_total, 1, { name: "search" }) + + subscriber.observe_event(event_1) + subscriber.observe_event(event_2) + end + + it "tracks LDAP request duration" do + expect(transaction).to receive(:observe) + .with(:gitlab_net_ldap_duration_seconds, 0.321, { name: "open" }) + expect(transaction).to receive(:observe) + .with(:gitlab_net_ldap_duration_seconds, 0.12, { name: "search" }) + expect(transaction).to receive(:observe) + .with(:gitlab_net_ldap_duration_seconds, 5.3, { name: "search" }) + + subscriber.observe_event(event_1) + subscriber.observe_event(event_2) + subscriber.observe_event(event_3) + end + + it "stores per-request counters" do + subscriber.observe_event(event_1) + subscriber.observe_event(event_2) + subscriber.observe_event(event_3) + + expect(Gitlab::SafeRequestStore[:net_ldap_count]).to eq(3) + expect(Gitlab::SafeRequestStore[:net_ldap_duration_s]).to eq(5.741) # 0.321 + 0.12 + 5.3 + end + end +end |