f78cd68ddf
This approach is able to cope with `%` characters in the URL template, which is important since `%` is a valid URL character. Additionally this approach is less likely to fail on an invalid string. This is important since the distributed tracing infrastructure is designed to degrade gracefully when not properly configured, and a small mistake in the configuration of the URL template could have led to a production outage.
69 lines
3.1 KiB
Ruby
69 lines
3.1 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require 'fast_spec_helper'
|
|
require 'rspec-parameterized'
|
|
|
|
describe Gitlab::Tracing do
|
|
using RSpec::Parameterized::TableSyntax
|
|
|
|
describe '.enabled?' do
|
|
where(:connection_string, :enabled_state) do
|
|
nil | false
|
|
"" | false
|
|
"opentracing://jaeger" | true
|
|
end
|
|
|
|
with_them do
|
|
it 'should return the correct state for .enabled?' do
|
|
expect(described_class).to receive(:connection_string).and_return(connection_string)
|
|
|
|
expect(described_class.enabled?).to eq(enabled_state)
|
|
end
|
|
end
|
|
end
|
|
|
|
describe '.tracing_url_enabled?' do
|
|
where(:enabled?, :tracing_url_template, :tracing_url_enabled_state) do
|
|
false | nil | false
|
|
false | "" | false
|
|
false | "http://localhost" | false
|
|
true | nil | false
|
|
true | "" | false
|
|
true | "http://localhost" | true
|
|
end
|
|
|
|
with_them do
|
|
it 'should return the correct state for .tracing_url_enabled?' do
|
|
expect(described_class).to receive(:enabled?).and_return(enabled?)
|
|
allow(described_class).to receive(:tracing_url_template).and_return(tracing_url_template)
|
|
|
|
expect(described_class.tracing_url_enabled?).to eq(tracing_url_enabled_state)
|
|
end
|
|
end
|
|
end
|
|
|
|
describe '.tracing_url' do
|
|
where(:tracing_url_enabled?, :tracing_url_template, :correlation_id, :process_name, :tracing_url) do
|
|
false | "https://localhost" | "123" | "web" | nil
|
|
true | "https://localhost" | "123" | "web" | "https://localhost"
|
|
true | "https://localhost?service={{ service }}" | "123" | "web" | "https://localhost?service=web"
|
|
true | "https://localhost?c={{ correlation_id }}" | "123" | "web" | "https://localhost?c=123"
|
|
true | "https://localhost?c={{ correlation_id }}&s={{ service }}" | "123" | "web" | "https://localhost?c=123&s=web"
|
|
true | "https://localhost?c={{ correlation_id }}" | nil | "web" | "https://localhost?c="
|
|
true | "https://localhost?c={{ correlation_id }}&s=%22{{ service }}%22" | "123" | "web" | "https://localhost?c=123&s=%22web%22"
|
|
true | "https://localhost?c={{correlation_id}}&s={{service}}" | "123" | "web" | "https://localhost?c=123&s=web"
|
|
true | "https://localhost?c={{correlation_id }}&s={{ service}}" | "123" | "web" | "https://localhost?c=123&s=web"
|
|
end
|
|
|
|
with_them do
|
|
it 'should return the correct state for .tracing_url' do
|
|
expect(described_class).to receive(:tracing_url_enabled?).and_return(tracing_url_enabled?)
|
|
allow(described_class).to receive(:tracing_url_template).and_return(tracing_url_template)
|
|
allow(Gitlab::CorrelationId).to receive(:current_id).and_return(correlation_id)
|
|
allow(Gitlab).to receive(:process_name).and_return(process_name)
|
|
|
|
expect(described_class.tracing_url).to eq(tracing_url)
|
|
end
|
|
end
|
|
end
|
|
end
|