625bdc5ade
During the review process for adding opentracing factories, a bug was introduced which caused Jaeger to initialize an invalid tracer. The bug was due to use sending nil through as a kwarg when the Jaeger initializer used a non-nil default value. This is fairly insidious as, the tracer looks like a tracer, but, when methods are invoked, it throws `NoMethodError` errors. To ensure that this issue does not happen in future, the tests have been changed to ensure that the tracer works as expected. This could avoid problems in future when upgrading to newer versions of Jaeger.
71 lines
2.3 KiB
Ruby
71 lines
2.3 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require 'fast_spec_helper'
|
|
|
|
describe Gitlab::Tracing::JaegerFactory do
|
|
describe '.create_tracer' do
|
|
let(:service_name) { 'rspec' }
|
|
|
|
shared_examples_for 'a jaeger tracer' do
|
|
it 'responds to active_span methods' do
|
|
expect(tracer).to respond_to(:active_span)
|
|
end
|
|
|
|
it 'yields control' do
|
|
expect { |b| tracer.start_active_span('operation_name', &b) }.to yield_control
|
|
end
|
|
end
|
|
|
|
context 'processes default connections' do
|
|
it_behaves_like 'a jaeger tracer' do
|
|
let(:tracer) { described_class.create_tracer(service_name, {}) }
|
|
end
|
|
end
|
|
|
|
context 'handles debug options' do
|
|
it_behaves_like 'a jaeger tracer' do
|
|
let(:tracer) { described_class.create_tracer(service_name, { debug: "1" }) }
|
|
end
|
|
end
|
|
|
|
context 'handles const sampler' do
|
|
it_behaves_like 'a jaeger tracer' do
|
|
let(:tracer) { described_class.create_tracer(service_name, { sampler: "const", sampler_param: "1" }) }
|
|
end
|
|
end
|
|
|
|
context 'handles probabilistic sampler' do
|
|
it_behaves_like 'a jaeger tracer' do
|
|
let(:tracer) { described_class.create_tracer(service_name, { sampler: "probabilistic", sampler_param: "0.5" }) }
|
|
end
|
|
end
|
|
|
|
context 'handles http_endpoint configurations' do
|
|
it_behaves_like 'a jaeger tracer' do
|
|
let(:tracer) { described_class.create_tracer(service_name, { http_endpoint: "http://localhost:1234" }) }
|
|
end
|
|
end
|
|
|
|
context 'handles udp_endpoint configurations' do
|
|
it_behaves_like 'a jaeger tracer' do
|
|
let(:tracer) { described_class.create_tracer(service_name, { udp_endpoint: "localhost:4321" }) }
|
|
end
|
|
end
|
|
|
|
context 'ignores invalid parameters' do
|
|
it_behaves_like 'a jaeger tracer' do
|
|
let(:tracer) { described_class.create_tracer(service_name, { invalid: "true" }) }
|
|
end
|
|
end
|
|
|
|
context 'accepts the debug parameter when strict_parser is set' do
|
|
it_behaves_like 'a jaeger tracer' do
|
|
let(:tracer) { described_class.create_tracer(service_name, { debug: "1", strict_parsing: "1" }) }
|
|
end
|
|
end
|
|
|
|
it 'rejects invalid parameters when strict_parser is set' do
|
|
expect { described_class.create_tracer(service_name, { invalid: "true", strict_parsing: "1" }) }.to raise_error(StandardError)
|
|
end
|
|
end
|
|
end
|