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