diff options
author | Kamil Trzciński <ayufan@ayufan.eu> | 2019-01-25 10:48:50 +0000 |
---|---|---|
committer | Kamil Trzciński <ayufan@ayufan.eu> | 2019-01-25 10:48:50 +0000 |
commit | ca52a1254edc89fdb195f5d10fbf7cbd233644a9 (patch) | |
tree | 7cb982258c5fefba5573c4ee0738452dff66b943 /spec/lib | |
parent | 15a7f3c6af5286dee5188af045d3e80f95323472 (diff) | |
parent | 1b90ffc57336a74ba3417e8f7c0f75718d930dda (diff) | |
download | gitlab-ce-ca52a1254edc89fdb195f5d10fbf7cbd233644a9.tar.gz |
Merge branch 'an-opentracing-active-record-tracing' into 'master'
Adds tracing support for ActiveRecord notifications
See merge request gitlab-org/gitlab-ce!24604
Diffstat (limited to 'spec/lib')
-rw-r--r-- | spec/lib/gitlab/tracing/rails/active_record_subscriber_spec.rb | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/spec/lib/gitlab/tracing/rails/active_record_subscriber_spec.rb b/spec/lib/gitlab/tracing/rails/active_record_subscriber_spec.rb new file mode 100644 index 00000000000..5eb5c044f84 --- /dev/null +++ b/spec/lib/gitlab/tracing/rails/active_record_subscriber_spec.rb @@ -0,0 +1,73 @@ +# frozen_string_literal: true + +require 'fast_spec_helper' +require 'rspec-parameterized' + +describe Gitlab::Tracing::Rails::ActiveRecordSubscriber do + using RSpec::Parameterized::TableSyntax + + describe '.instrument' do + it 'is unsubscribable' do + subscription = described_class.instrument + + expect(subscription).not_to be_nil + expect { ActiveSupport::Notifications.unsubscribe(subscription) }.not_to raise_error + end + end + + describe '#notify' do + subject { described_class.new } + let(:start) { Time.now } + let(:finish) { Time.now } + + where(:name, :operation_name, :exception, :connection_id, :cached, :cached_response, :sql) do + nil | "active_record:sqlquery" | nil | nil | nil | false | nil + "" | "active_record:sqlquery" | nil | nil | nil | false | nil + "User Load" | "active_record:User Load" | nil | nil | nil | false | nil + "Repo Load" | "active_record:Repo Load" | StandardError.new | nil | nil | false | nil + nil | "active_record:sqlquery" | nil | 123 | nil | false | nil + nil | "active_record:sqlquery" | nil | nil | false | false | nil + nil | "active_record:sqlquery" | nil | nil | true | true | nil + nil | "active_record:sqlquery" | nil | nil | true | true | "SELECT * FROM users" + end + + with_them do + def payload + { + name: name, + exception: exception, + connection_id: connection_id, + cached: cached, + sql: sql + } + end + + def expected_tags + { + "component" => "ActiveRecord", + "span.kind" => "client", + "db.type" => "sql", + "db.connection_id" => connection_id, + "db.cached" => cached_response, + "db.statement" => sql + } + end + + it 'should notify the tracer when the hash contains null values' do + expect(subject).to receive(:postnotify_span).with(operation_name, start, finish, tags: expected_tags, exception: exception) + + subject.notify(start, finish, payload) + end + + it 'should notify the tracer when the payload is missing values' do + expect(subject).to receive(:postnotify_span).with(operation_name, start, finish, tags: expected_tags, exception: exception) + + subject.notify(start, finish, payload.compact) + end + + it 'should not throw exceptions when with the default tracer' do + expect { subject.notify(start, finish, payload) }.not_to raise_error + end + end + end +end |