124 lines
3.4 KiB
Ruby
124 lines
3.4 KiB
Ruby
# 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.000321, { name: "open" })
|
|
expect(transaction).to receive(:observe)
|
|
.with(:gitlab_net_ldap_duration_seconds, 0.00012, { name: "search" })
|
|
expect(transaction).to receive(:observe)
|
|
.with(:gitlab_net_ldap_duration_seconds, 0.0053, { 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(0.005741) # (0.321 + 0.12 + 5.3) / 1000
|
|
end
|
|
end
|
|
end
|