Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'spec/lib/gitlab/exception_log_formatter_spec.rb')
-rw-r--r--spec/lib/gitlab/exception_log_formatter_spec.rb57
1 files changed, 57 insertions, 0 deletions
diff --git a/spec/lib/gitlab/exception_log_formatter_spec.rb b/spec/lib/gitlab/exception_log_formatter_spec.rb
new file mode 100644
index 00000000000..beeeeb2b64c
--- /dev/null
+++ b/spec/lib/gitlab/exception_log_formatter_spec.rb
@@ -0,0 +1,57 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+RSpec.describe Gitlab::ExceptionLogFormatter do
+ describe '.format!' do
+ let(:exception) { RuntimeError.new('bad request') }
+ let(:backtrace) { caller }
+
+ let(:payload) { {} }
+
+ before do
+ allow(exception).to receive(:backtrace).and_return(backtrace)
+ end
+
+ it 'adds exception data to log' do
+ described_class.format!(exception, payload)
+
+ expect(payload['exception.class']).to eq('RuntimeError')
+ expect(payload['exception.message']).to eq('bad request')
+ expect(payload['exception.backtrace']).to eq(Gitlab::BacktraceCleaner.clean_backtrace(backtrace))
+ expect(payload['exception.sql']).to be_nil
+ end
+
+ context 'when exception is ActiveRecord::StatementInvalid' do
+ let(:exception) { ActiveRecord::StatementInvalid.new(sql: 'SELECT "users".* FROM "users" WHERE "users"."id" = 1 AND "users"."foo" = $1') }
+
+ it 'adds the normalized SQL query to payload' do
+ described_class.format!(exception, payload)
+
+ expect(payload['exception.sql']).to eq('SELECT "users".* FROM "users" WHERE "users"."id" = $2 AND "users"."foo" = $1')
+ end
+ end
+
+ context 'when the ActiveRecord::StatementInvalid is wrapped in another exception' do
+ before do
+ allow(exception).to receive(:cause).and_return(ActiveRecord::StatementInvalid.new(sql: 'SELECT "users".* FROM "users" WHERE "users"."id" = 1 AND "users"."foo" = $1'))
+ end
+
+ it 'adds the normalized SQL query to payload' do
+ described_class.format!(exception, payload)
+
+ expect(payload['exception.sql']).to eq('SELECT "users".* FROM "users" WHERE "users"."id" = $2 AND "users"."foo" = $1')
+ end
+ end
+
+ context 'when the ActiveRecord::StatementInvalid is a bad query' do
+ let(:exception) { ActiveRecord::StatementInvalid.new(sql: 'SELECT SELECT FROM SELECT') }
+
+ it 'adds the query as-is to payload' do
+ described_class.format!(exception, payload)
+
+ expect(payload['exception.sql']).to eq('SELECT SELECT FROM SELECT')
+ end
+ end
+ end
+end