From bfb8bd0c68ac5aaeb29e44bdd9d834e0ec3ac70f Mon Sep 17 00:00:00 2001 From: Quang-Minh Nguyen <qmnguyen@gitlab.com> Date: Fri, 4 Jun 2021 11:30:58 +0000 Subject: [PATCH] Revert "Merge branch 'qmnguyen0711/849-sentry-upgrade-sentry-raven-gem' into 'master'" This reverts merge request !62387 --- Gemfile | 4 +- Gemfile.lock | 16 +--- lib/gitlab/error_tracking.rb | 24 +++-- lib/gitlab/error_tracking/log_formatter.rb | 18 +--- .../processor/grpc_error_processor.rb | 9 +- .../processor/sanitizer_processor.rb | 33 ------- .../context_payload_generator_spec.rb | 2 +- .../error_tracking/log_formatter_spec.rb | 8 +- .../context_payload_processor_spec.rb | 18 ++-- .../processor/grpc_error_processor_spec.rb | 19 ++-- .../processor/sanitizer_processor_spec.rb | 96 ------------------- .../processor/sidekiq_processor_spec.rb | 18 ++-- spec/lib/gitlab/error_tracking_spec.rb | 70 ++++++-------- spec/requests/api/helpers_spec.rb | 2 +- 14 files changed, 86 insertions(+), 251 deletions(-) delete mode 100644 lib/gitlab/error_tracking/processor/sanitizer_processor.rb delete mode 100644 spec/lib/gitlab/error_tracking/processor/sanitizer_processor_spec.rb diff --git a/Gemfile b/Gemfile index d41bdfa036190..e97348f17e88e 100644 --- a/Gemfile +++ b/Gemfile @@ -301,9 +301,7 @@ gem 'gitlab-license', '~> 1.5' gem 'rack-attack', '~> 6.3.0' # Sentry integration -gem 'sentry-ruby', '~> 4.4.0' -gem 'sentry-sidekiq', '~> 4.4.0' -gem 'sentry-rails', '~> 4.4.0' +gem 'sentry-raven', '~> 3.1' # PostgreSQL query parsing # diff --git a/Gemfile.lock b/Gemfile.lock index 837edfffdf0cf..59cbd84a3e608 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1172,18 +1172,8 @@ GEM selenium-webdriver (3.142.7) childprocess (>= 0.5, < 4.0) rubyzip (>= 1.2.2) - sentry-rails (4.4.0) - railties (>= 5.0) - sentry-ruby-core (~> 4.4.0.pre.beta) - sentry-ruby (4.4.2) - concurrent-ruby (~> 1.0, >= 1.0.2) + sentry-raven (3.1.2) faraday (>= 1.0) - sentry-ruby-core (= 4.4.2) - sentry-ruby-core (4.4.2) - concurrent-ruby - faraday - sentry-sidekiq (4.4.0) - sentry-ruby-core (~> 4.4.0.pre.beta) settingslogic (2.0.9) sexp_processor (4.15.1) shellany (0.0.1) @@ -1629,9 +1619,7 @@ DEPENDENCIES sassc-rails (~> 2.1.0) seed-fu (~> 2.3.7) selenium-webdriver (~> 3.142) - sentry-rails (~> 4.4.0) - sentry-ruby (~> 4.4.0) - sentry-sidekiq (~> 4.4.0) + sentry-raven (~> 3.1) settingslogic (~> 2.0.9) shoulda-matchers (~> 4.0.1) sidekiq (~> 5.2.7) diff --git a/lib/gitlab/error_tracking.rb b/lib/gitlab/error_tracking.rb index 635e84d799fac..38ac5d9af74e4 100644 --- a/lib/gitlab/error_tracking.rb +++ b/lib/gitlab/error_tracking.rb @@ -19,21 +19,22 @@ module ErrorTracking PROCESSORS = [ ::Gitlab::ErrorTracking::Processor::SidekiqProcessor, ::Gitlab::ErrorTracking::Processor::GrpcErrorProcessor, - ::Gitlab::ErrorTracking::Processor::ContextPayloadProcessor, - # IMPORTANT: this processor must stay at the bottom, right before - # sending the event to Sentry. - ::Gitlab::ErrorTracking::Processor::SanitizerProcessor + ::Gitlab::ErrorTracking::Processor::ContextPayloadProcessor ].freeze class << self def configure - Sentry.init do |config| + Raven.configure do |config| config.dsn = sentry_dsn config.release = Gitlab.revision - config.environment = Gitlab.config.sentry.environment + config.current_environment = Gitlab.config.sentry.environment + + # Sanitize fields based on those sanitized from Rails. + config.sanitize_fields = Rails.application.config.filter_parameters.map(&:to_s) + + # Sanitize authentication headers + config.sanitize_http_headers = %w[Authorization Private-Token] config.before_send = method(:before_send) - config.background_worker_threads = 0 - config.send_default_pii = true yield config if block_given? end @@ -107,11 +108,8 @@ def before_send(event, hint) def process_exception(exception, sentry: false, logging: true, extra:) context_payload = Gitlab::ErrorTracking::ContextPayloadGenerator.generate(exception, extra) - # There is a possibility that this method is called before Sentry is - # configured. Since Sentry 4.0, some methods of Sentry are forwarded to - # to `nil`, hence we have to check the client as well. - if sentry && ::Sentry.get_current_client && ::Sentry.configuration.dsn - ::Sentry.capture_exception(exception, **context_payload) + if sentry && Raven.configuration.server + Raven.capture_exception(exception, **context_payload) end if logging diff --git a/lib/gitlab/error_tracking/log_formatter.rb b/lib/gitlab/error_tracking/log_formatter.rb index 92ef4d957f3e3..d004c4e20bbcc 100644 --- a/lib/gitlab/error_tracking/log_formatter.rb +++ b/lib/gitlab/error_tracking/log_formatter.rb @@ -3,7 +3,7 @@ module Gitlab module ErrorTracking class LogFormatter - # Note: all the accesses to Sentry's contexts here are to keep the + # Note: all the accesses to Raven's contexts here are to keep the # backward-compatibility to Sentry's built-in integrations. In future, # they can be removed. def generate_log(exception, context_payload) @@ -20,27 +20,21 @@ def generate_log(exception, context_payload) private def append_user_to_log!(payload, context_payload) - return if current_scope.blank? - - user_context = current_scope.user.merge(context_payload[:user]) + user_context = Raven.context.user.merge(context_payload[:user]) user_context.each do |key, value| payload["user.#{key}"] = value end end def append_tags_to_log!(payload, context_payload) - return if current_scope.blank? - - tags_context = current_scope.tags.merge(context_payload[:tags]) + tags_context = Raven.context.tags.merge(context_payload[:tags]) tags_context.each do |key, value| payload["tags.#{key}"] = value end end def append_extra_to_log!(payload, context_payload) - return if current_scope.blank? - - extra = current_scope.extra.merge(context_payload[:extra]) + extra = Raven.context.extra.merge(context_payload[:extra]) extra = extra.except(:server) # The extra value for sidekiq is a hash whose keys are strings. @@ -56,10 +50,6 @@ def append_extra_to_log!(payload, context_payload) payload["extra.#{key}"] = value end end - - def current_scope - Sentry.get_current_scope - end end end end diff --git a/lib/gitlab/error_tracking/processor/grpc_error_processor.rb b/lib/gitlab/error_tracking/processor/grpc_error_processor.rb index 0c2f1b2be6744..e2a9192806f9f 100644 --- a/lib/gitlab/error_tracking/processor/grpc_error_processor.rb +++ b/lib/gitlab/error_tracking/processor/grpc_error_processor.rb @@ -17,7 +17,8 @@ def call(event) # Sentry can report multiple exceptions in an event. Sanitize # only the first one since that's what is used for grouping. def process_first_exception_value(event) - exceptions = event.exception&.instance_variable_get(:@values) + # Better in new version, will be event.exception.values + exceptions = event.instance_variable_get(:@interfaces)[:exception]&.values return unless exceptions.is_a?(Array) @@ -32,7 +33,9 @@ def process_first_exception_value(event) message, debug_str = split_debug_error_string(raw_message) - exception.instance_variable_set(:@value, message) if message + # Worse in new version, no setter! Have to poke at the + # instance variable + exception.value = message if message event.extra[:grpc_debug_error_string] = debug_str if debug_str end @@ -63,7 +66,7 @@ def split_debug_error_string(message) def valid_exception?(exception) case exception - when Sentry::SingleExceptionInterface + when Raven::SingleExceptionInterface exception&.value else false diff --git a/lib/gitlab/error_tracking/processor/sanitizer_processor.rb b/lib/gitlab/error_tracking/processor/sanitizer_processor.rb deleted file mode 100644 index 32d441fcdef77..0000000000000 --- a/lib/gitlab/error_tracking/processor/sanitizer_processor.rb +++ /dev/null @@ -1,33 +0,0 @@ -# frozen_string_literal: true - -module Gitlab - module ErrorTracking - module Processor - module SanitizerProcessor - SANITIZED_HTTP_HEADERS = %w[Authorization Private-Token].freeze - SANITIZED_ATTRIBUTES = %i[user contexts extra tags].freeze - - # This processor removes sensitive fields or headers from the event - # before sending. Sentry versions above 4.0 don't support - # sanitized_fields and sanitized_http_headers anymore. The official - # document recommends using before_send instead. - # - # For more information, please visit: - # https://docs.sentry.io/platforms/ruby/guides/rails/configuration/filtering/#using-beforesend - def self.call(event) - if event.request.present? && event.request.headers.is_a?(Hash) - header_filter = ActiveSupport::ParameterFilter.new(SANITIZED_HTTP_HEADERS) - event.request.headers = header_filter.filter(event.request.headers) - end - - attribute_filter = ActiveSupport::ParameterFilter.new(Rails.application.config.filter_parameters) - SANITIZED_ATTRIBUTES.each do |attribute| - event.send("#{attribute}=", attribute_filter.filter(event.send(attribute))) # rubocop:disable GitlabSecurity/PublicSend - end - - event - end - end - end - end -end diff --git a/spec/lib/gitlab/error_tracking/context_payload_generator_spec.rb b/spec/lib/gitlab/error_tracking/context_payload_generator_spec.rb index dffa7e6522e19..0e72dd7ec5e2c 100644 --- a/spec/lib/gitlab/error_tracking/context_payload_generator_spec.rb +++ b/spec/lib/gitlab/error_tracking/context_payload_generator_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'spec_helper' +require 'fast_spec_helper' require 'rspec-parameterized' RSpec.describe Gitlab::ErrorTracking::ContextPayloadGenerator do diff --git a/spec/lib/gitlab/error_tracking/log_formatter_spec.rb b/spec/lib/gitlab/error_tracking/log_formatter_spec.rb index c97aebf5cd347..188ccd000a11b 100644 --- a/spec/lib/gitlab/error_tracking/log_formatter_spec.rb +++ b/spec/lib/gitlab/error_tracking/log_formatter_spec.rb @@ -27,9 +27,9 @@ end before do - Sentry.set_user(user_flag: 'flag') - Sentry.set_tags(shard: 'catchall') - Sentry.set_extras(some_info: 'info') + Raven.context.user[:user_flag] = 'flag' + Raven.context.tags[:shard] = 'catchall' + Raven.context.extra[:some_info] = 'info' allow(exception).to receive(:backtrace).and_return( [ @@ -40,7 +40,7 @@ end after do - ::Sentry.get_current_scope.clear + ::Raven::Context.clear! end it 'appends error-related log fields and filters sensitive Sidekiq arguments' do diff --git a/spec/lib/gitlab/error_tracking/processor/context_payload_processor_spec.rb b/spec/lib/gitlab/error_tracking/processor/context_payload_processor_spec.rb index 8b83d073e45fa..210829056c8d4 100644 --- a/spec/lib/gitlab/error_tracking/processor/context_payload_processor_spec.rb +++ b/spec/lib/gitlab/error_tracking/processor/context_payload_processor_spec.rb @@ -4,14 +4,18 @@ RSpec.describe Gitlab::ErrorTracking::Processor::ContextPayloadProcessor do describe '.call' do - let(:exception) { StandardError.new('Test exception') } - let(:event) { Sentry.get_current_client.event_from_exception(exception) } + let(:required_options) do + { + configuration: Raven.configuration, + context: Raven.context, + breadcrumbs: Raven.breadcrumbs + } + end + + let(:event) { Raven::Event.new(required_options.merge(payload)) } let(:result_hash) { described_class.call(event).to_hash } before do - Sentry.get_current_scope.update_from_options(**payload) - Sentry.get_current_scope.apply_to_event(event) - allow_next_instance_of(Gitlab::ErrorTracking::ContextPayloadGenerator) do |generator| allow(generator).to receive(:generate).and_return( user: { username: 'root' }, @@ -21,10 +25,6 @@ end end - after do - Sentry.get_current_scope.clear - end - let(:payload) do { user: { ip_address: '127.0.0.1' }, diff --git a/spec/lib/gitlab/error_tracking/processor/grpc_error_processor_spec.rb b/spec/lib/gitlab/error_tracking/processor/grpc_error_processor_spec.rb index 20fa5e2dacfbd..6076e525f0646 100644 --- a/spec/lib/gitlab/error_tracking/processor/grpc_error_processor_spec.rb +++ b/spec/lib/gitlab/error_tracking/processor/grpc_error_processor_spec.rb @@ -4,17 +4,16 @@ RSpec.describe Gitlab::ErrorTracking::Processor::GrpcErrorProcessor do describe '.call' do - let(:event) { Sentry.get_current_client.event_from_exception(exception) } - let(:result_hash) { described_class.call(event).to_hash } - - before do - Sentry.get_current_scope.update_from_options(**data) - Sentry.get_current_scope.apply_to_event(event) + let(:required_options) do + { + configuration: Raven.configuration, + context: Raven.context, + breadcrumbs: Raven.breadcrumbs + } end - after do - Sentry.get_current_scope.clear - end + let(:event) { Raven::Event.from_exception(exception, required_options.merge(data)) } + let(:result_hash) { described_class.call(event).to_hash } context 'when there is no GRPC exception' do let(:exception) { RuntimeError.new } @@ -57,7 +56,7 @@ end it 'removes the debug error string and stores it as an extra field' do - expect(result_hash[:fingerprint]).to be_empty + expect(result_hash).not_to include(:fingerprint) expect(result_hash[:exception][:values].first) .to include(type: 'GRPC::DeadlineExceeded', value: '4:Deadline Exceeded.') diff --git a/spec/lib/gitlab/error_tracking/processor/sanitizer_processor_spec.rb b/spec/lib/gitlab/error_tracking/processor/sanitizer_processor_spec.rb deleted file mode 100644 index 7e7d836f1d21f..0000000000000 --- a/spec/lib/gitlab/error_tracking/processor/sanitizer_processor_spec.rb +++ /dev/null @@ -1,96 +0,0 @@ -# frozen_string_literal: true - -require 'spec_helper' - -RSpec.describe Gitlab::ErrorTracking::Processor::SanitizerProcessor do - describe '.call' do - let(:event) { Sentry.get_current_client.event_from_exception(exception) } - let(:result_hash) { described_class.call(event).to_hash } - - before do - data.each do |key, value| - event.send("#{key}=", value) - end - end - - after do - Sentry.get_current_scope.clear - end - - context 'when event attributes contains sensitive information' do - let(:exception) { RuntimeError.new } - let(:data) do - { - contexts: { - jwt: 'abcdef', - controller: 'GraphController#execute' - }, - tags: { - variables: %w[some sensitive information'], - deep_hash: { - sharedSecret: 'secret123' - } - }, - user: { - email: 'a@a.com', - password: 'nobodyknows' - }, - extra: { - issue_url: 'http://gitlab.com/gitlab-org/gitlab-foss/-/issues/1', - my_token: '[FILTERED]', - another_token: '[FILTERED]' - } - } - end - - it 'filters sensitive attributes' do - expect_next_instance_of(ActiveSupport::ParameterFilter) do |instance| - expect(instance).to receive(:filter).exactly(4).times.and_call_original - end - - expect(result_hash).to include( - contexts: { - jwt: '[FILTERED]', - controller: 'GraphController#execute' - }, - tags: { - variables: '[FILTERED]', - deep_hash: { - sharedSecret: '[FILTERED]' - } - }, - user: { - email: 'a@a.com', - password: '[FILTERED]' - }, - extra: { - issue_url: 'http://gitlab.com/gitlab-org/gitlab-foss/-/issues/1', - my_token: '[FILTERED]', - another_token: '[FILTERED]' - } - ) - end - end - - context 'when request headers contains sensitive information' do - let(:exception) { RuntimeError.new } - let(:data) { {} } - - before do - event.rack_env = { - 'HTTP_AUTHORIZATION' => 'Bearer 123456', - 'HTTP_PRIVATE_TOKEN' => 'abcdef', - 'HTTP_GITLAB_WORKHORSE_PROXY_START' => 123456 - } - end - - it 'filters sensitive headers' do - expect(result_hash[:request][:headers]).to include( - 'Authorization' => '[FILTERED]', - 'Private-Token' => '[FILTERED]', - 'Gitlab-Workhorse-Proxy-Start' => '123456' - ) - end - end - end -end diff --git a/spec/lib/gitlab/error_tracking/processor/sidekiq_processor_spec.rb b/spec/lib/gitlab/error_tracking/processor/sidekiq_processor_spec.rb index bf8d31822a6b7..af5f11c93622a 100644 --- a/spec/lib/gitlab/error_tracking/processor/sidekiq_processor_spec.rb +++ b/spec/lib/gitlab/error_tracking/processor/sidekiq_processor_spec.rb @@ -95,18 +95,16 @@ end describe '.call' do - let(:exception) { StandardError.new('Test exception') } - let(:event) { Sentry.get_current_client.event_from_exception(exception) } - let(:result_hash) { described_class.call(event).to_hash } - - before do - Sentry.get_current_scope.update_from_options(**wrapped_value) - Sentry.get_current_scope.apply_to_event(event) + let(:required_options) do + { + configuration: Raven.configuration, + context: Raven.context, + breadcrumbs: Raven.breadcrumbs + } end - after do - Sentry.get_current_scope.clear - end + let(:event) { Raven::Event.new(required_options.merge(wrapped_value)) } + let(:result_hash) { described_class.call(event).to_hash } context 'when there is Sidekiq data' do let(:wrapped_value) { { extra: { sidekiq: value } } } diff --git a/spec/lib/gitlab/error_tracking_spec.rb b/spec/lib/gitlab/error_tracking_spec.rb index 50c85f76ce8f1..7ad1f52780a94 100644 --- a/spec/lib/gitlab/error_tracking_spec.rb +++ b/spec/lib/gitlab/error_tracking_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -require 'sentry/transport/dummy_transport' +require 'raven/transports/dummy' RSpec.describe Gitlab::ErrorTracking do let(:exception) { RuntimeError.new('boom') } @@ -43,7 +43,7 @@ } end - let(:sentry_event) { Sentry.get_current_client.transport.events.last } + let(:sentry_event) { Gitlab::Json.parse(Raven.client.transport.events.last[1]) } before do stub_sentry_settings @@ -53,7 +53,7 @@ allow(I18n).to receive(:locale).and_return('en') described_class.configure do |config| - config.transport.transport_class = Sentry::DummyTransport + config.encoding = 'json' end end @@ -63,10 +63,6 @@ end end - after do - ::Sentry.get_current_scope.clear - end - describe '.track_and_raise_for_dev_exception' do context 'when exceptions for dev should be raised' do before do @@ -74,7 +70,7 @@ end it 'raises the exception' do - expect(Sentry).to receive(:capture_exception).with(exception, sentry_payload) + expect(Raven).to receive(:capture_exception).with(exception, sentry_payload) expect do described_class.track_and_raise_for_dev_exception( @@ -92,7 +88,7 @@ end it 'logs the exception with all attributes passed' do - expect(Sentry).to receive(:capture_exception).with(exception, sentry_payload) + expect(Raven).to receive(:capture_exception).with(exception, sentry_payload) described_class.track_and_raise_for_dev_exception( exception, @@ -115,7 +111,7 @@ describe '.track_and_raise_exception' do it 'always raises the exception' do - expect(Sentry).to receive(:capture_exception).with(exception, sentry_payload) + expect(Raven).to receive(:capture_exception).with(exception, sentry_payload) expect do described_class.track_and_raise_for_dev_exception( @@ -143,14 +139,14 @@ subject(:track_exception) { described_class.track_exception(exception, extra) } before do - allow(Sentry).to receive(:capture_exception).and_call_original + allow(Raven).to receive(:capture_exception).and_call_original allow(Gitlab::ErrorTracking::Logger).to receive(:error) end - it 'calls Sentry.capture_exception' do + it 'calls Raven.capture_exception' do track_exception - expect(Sentry).to have_received(:capture_exception).with( + expect(Raven).to have_received(:capture_exception).with( exception, sentry_payload ) @@ -176,31 +172,25 @@ context 'the exception implements :sentry_extra_data' do let(:extra_info) { { event: 'explosion', size: :massive } } - - before do - allow(exception).to receive(:sentry_extra_data).and_return(extra_info) - end + let(:exception) { double(message: 'bang!', sentry_extra_data: extra_info, backtrace: caller, cause: nil) } it 'includes the extra data from the exception in the tracking information' do track_exception - expect(Sentry).to have_received(:capture_exception).with( + expect(Raven).to have_received(:capture_exception).with( exception, a_hash_including(extra: a_hash_including(extra_info)) ) end end context 'the exception implements :sentry_extra_data, which returns nil' do + let(:exception) { double(message: 'bang!', sentry_extra_data: nil, backtrace: caller, cause: nil) } let(:extra) { { issue_url: issue_url } } - before do - allow(exception).to receive(:sentry_extra_data).and_return(nil) - end - it 'just includes the other extra info' do track_exception - expect(Sentry).to have_received(:capture_exception).with( + expect(Raven).to have_received(:capture_exception).with( exception, a_hash_including(extra: a_hash_including(extra)) ) end @@ -212,7 +202,7 @@ it 'injects the normalized sql query into extra' do track_exception - expect(sentry_event.extra[:sql]).to eq('SELECT "users".* FROM "users" WHERE "users"."id" = $2 AND "users"."foo" = $1') + expect(sentry_event.dig('extra', 'sql')).to eq('SELECT "users".* FROM "users" WHERE "users"."id" = $2 AND "users"."foo" = $1') end end @@ -222,7 +212,7 @@ track_exception - expect(sentry_event.extra[:sql]).to eq('SELECT "users".* FROM "users" WHERE "users"."id" = $2 AND "users"."foo" = $1') + expect(sentry_event.dig('extra', 'sql')).to eq('SELECT "users".* FROM "users" WHERE "users"."id" = $2 AND "users"."foo" = $1') end end end @@ -231,27 +221,27 @@ subject(:track_exception) { described_class.track_exception(exception, extra) } before do - allow(Sentry).to receive(:capture_exception).and_call_original + allow(Raven).to receive(:capture_exception).and_call_original allow(Gitlab::ErrorTracking::Logger).to receive(:error) end - context 'custom GitLab context when using Sentry.capture_exception directly' do - subject(:track_exception) { Sentry.capture_exception(exception) } + context 'custom GitLab context when using Raven.capture_exception directly' do + subject(:raven_capture_exception) { Raven.capture_exception(exception) } it 'merges a default set of tags into the existing tags' do - Sentry.set_tags(foo: 'bar') + allow(Raven.context).to receive(:tags).and_return(foo: 'bar') - track_exception + raven_capture_exception - expect(sentry_event.tags).to include(:correlation_id, :feature_category, :foo, :locale, :program) + expect(sentry_event['tags']).to include('correlation_id', 'feature_category', 'foo', 'locale', 'program') end it 'merges the current user information into the existing user information' do - Sentry.set_user(id: -1) + Raven.user_context(id: -1) - track_exception + raven_capture_exception - expect(sentry_event.user).to eq(id: -1, username: user.username) + expect(sentry_event['user']).to eq('id' => -1, 'username' => user.username) end end @@ -275,7 +265,7 @@ it 'does not filter parameters when sending to Sentry' do track_exception - expect(sentry_event.extra[:sidekiq]['args']).to eq([1, { 'id' => 2, 'name' => 'hello' }, 'some-value', 'another-value']) + expect(sentry_event.dig('extra', 'sidekiq', 'args')).to eq([1, { 'id' => 2, 'name' => 'hello' }, 'some-value', 'another-value']) end end @@ -285,7 +275,7 @@ it 'filters sensitive arguments before sending and logging' do track_exception - expect(sentry_event.extra[:sidekiq]['args']).to eq(['[FILTERED]', 1, 2]) + expect(sentry_event.dig('extra', 'sidekiq', 'args')).to eq(['[FILTERED]', 1, 2]) expect(Gitlab::ErrorTracking::Logger).to have_received(:error).with( hash_including( 'extra.sidekiq' => { @@ -305,8 +295,8 @@ it 'sets the GRPC debug error string in the Sentry event and adds a custom fingerprint' do track_exception - expect(sentry_event.extra[:grpc_debug_error_string]).to eq('{"hello":1}') - expect(sentry_event.fingerprint).to eq(['GRPC::DeadlineExceeded', '4:unknown cause.']) + expect(sentry_event.dig('extra', 'grpc_debug_error_string')).to eq('{"hello":1}') + expect(sentry_event['fingerprint']).to eq(['GRPC::DeadlineExceeded', '4:unknown cause.']) end end @@ -316,8 +306,8 @@ it 'does not do any processing on the event' do track_exception - expect(sentry_event.extra).not_to include(:grpc_debug_error_string) - expect(sentry_event.fingerprint).to eq(['GRPC::DeadlineExceeded', '4:unknown cause']) + expect(sentry_event['extra']).not_to include('grpc_debug_error_string') + expect(sentry_event['fingerprint']).to eq(['GRPC::DeadlineExceeded', '4:unknown cause']) end end end diff --git a/spec/requests/api/helpers_spec.rb b/spec/requests/api/helpers_spec.rb index 3c690a767a69f..ce0018d6d0da7 100644 --- a/spec/requests/api/helpers_spec.rb +++ b/spec/requests/api/helpers_spec.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true require 'spec_helper' -require 'sentry/transport/dummy_transport' +require 'raven/transports/dummy' require_relative '../../../config/initializers/sentry' RSpec.describe API::Helpers do -- GitLab