68 lines
1.9 KiB
Ruby
68 lines
1.9 KiB
Ruby
|
# frozen_string_literal: true
|
||
|
|
||
|
require 'spec_helper'
|
||
|
|
||
|
describe Gitlab::Graphql::GenericTracing do
|
||
|
let(:graphql_duration_seconds_histogram) { double('Gitlab::Metrics::NullMetric') }
|
||
|
|
||
|
it 'updates graphql histogram with expected labels' do
|
||
|
query = 'query { users { id } }'
|
||
|
tracer = described_class.new
|
||
|
|
||
|
allow(tracer)
|
||
|
.to receive(:graphql_duration_seconds)
|
||
|
.and_return(graphql_duration_seconds_histogram)
|
||
|
|
||
|
expect_metric('graphql.lex', 'lex')
|
||
|
expect_metric('graphql.parse', 'parse')
|
||
|
expect_metric('graphql.validate', 'validate')
|
||
|
expect_metric('graphql.analyze', 'analyze_multiplex')
|
||
|
expect_metric('graphql.execute', 'execute_query_lazy')
|
||
|
expect_metric('graphql.execute', 'execute_multiplex')
|
||
|
|
||
|
GitlabSchema.execute(query, context: { tracers: [tracer] })
|
||
|
end
|
||
|
|
||
|
context "when labkit tracing is enabled" do
|
||
|
before do
|
||
|
expect(Labkit::Tracing).to receive(:enabled?).and_return(true)
|
||
|
end
|
||
|
|
||
|
it 'yields with labkit tracing' do
|
||
|
expected_tags = {
|
||
|
'component' => 'web',
|
||
|
'span.kind' => 'server',
|
||
|
'platform_key' => 'pkey',
|
||
|
'key' => 'key'
|
||
|
}
|
||
|
|
||
|
expect(Labkit::Tracing)
|
||
|
.to receive(:with_tracing)
|
||
|
.with(operation_name: "pkey.key", tags: expected_tags)
|
||
|
.and_yield
|
||
|
|
||
|
expect { |b| described_class.new.platform_trace('pkey', 'key', nil, &b) }.to yield_control
|
||
|
end
|
||
|
end
|
||
|
|
||
|
context "when labkit tracing is disabled" do
|
||
|
before do
|
||
|
expect(Labkit::Tracing).to receive(:enabled?).and_return(false)
|
||
|
end
|
||
|
|
||
|
it 'yields without measurement' do
|
||
|
expect(Labkit::Tracing).not_to receive(:with_tracing)
|
||
|
|
||
|
expect { |b| described_class.new.platform_trace('pkey', 'key', nil, &b) }.to yield_control
|
||
|
end
|
||
|
end
|
||
|
|
||
|
private
|
||
|
|
||
|
def expect_metric(platform_key, key)
|
||
|
expect(graphql_duration_seconds_histogram)
|
||
|
.to receive(:observe)
|
||
|
.with({ platform_key: platform_key, key: key }, be > 0.0)
|
||
|
end
|
||
|
end
|