62 lines
2.1 KiB
Ruby
62 lines
2.1 KiB
Ruby
# frozen_string_literal: true
|
|
require "spec_helper"
|
|
|
|
RSpec.describe Gitlab::Graphql::Tracers::LoggerTracer do
|
|
let(:dummy_schema) do
|
|
Class.new(GraphQL::Schema) do
|
|
# LoggerTracer depends on TimerTracer
|
|
use Gitlab::Graphql::Tracers::LoggerTracer
|
|
use Gitlab::Graphql::Tracers::TimerTracer
|
|
|
|
query_analyzer Gitlab::Graphql::QueryAnalyzers::LoggerAnalyzer.new
|
|
|
|
query Graphql::FakeQueryType
|
|
end
|
|
end
|
|
|
|
around do |example|
|
|
Gitlab::ApplicationContext.with_context(caller_id: 'caller_a', feature_category: 'feature_a') do
|
|
example.run
|
|
end
|
|
end
|
|
|
|
it "logs every query", :aggregate_failures do
|
|
variables = { name: "Ada Lovelace" }
|
|
query_string = 'query fooOperation($name: String) { helloWorld(message: $name) }'
|
|
|
|
# Build an actual query so we don't have to hardocde the "fingerprint" calculations
|
|
query = GraphQL::Query.new(dummy_schema, query_string, variables: variables)
|
|
|
|
expect(::Gitlab::GraphqlLogger).to receive(:info).with({
|
|
"correlation_id" => anything,
|
|
"meta.caller_id" => "caller_a",
|
|
"meta.feature_category" => "feature_a",
|
|
"query_analysis.duration_s" => kind_of(Numeric),
|
|
"query_analysis.complexity" => 1,
|
|
"query_analysis.depth" => 1,
|
|
"query_analysis.used_deprecated_fields" => [],
|
|
"query_analysis.used_fields" => ["FakeQuery.helloWorld"],
|
|
duration_s: be > 0,
|
|
is_mutation: false,
|
|
operation_fingerprint: query.operation_fingerprint,
|
|
operation_name: 'fooOperation',
|
|
query_fingerprint: query.fingerprint,
|
|
query_string: query_string,
|
|
trace_type: "execute_query",
|
|
variables: variables.to_s
|
|
})
|
|
|
|
dummy_schema.execute(query_string, variables: variables)
|
|
end
|
|
|
|
it 'logs exceptions for breaking queries' do
|
|
query_string = "query fooOperation { breakingField }"
|
|
|
|
expect(::Gitlab::GraphqlLogger).to receive(:info).with(a_hash_including({
|
|
'exception.message' => 'This field is supposed to break',
|
|
'exception.class' => 'RuntimeError'
|
|
}))
|
|
|
|
expect { dummy_schema.execute(query_string) }.to raise_error(/This field is supposed to break/)
|
|
end
|
|
end
|