1# frozen_string_literal: true
2
3require 'sidekiq/testing'
4
5# rubocop:disable RSpec/ModifySidekiqMiddleware
6module SidekiqMiddleware
7  def with_sidekiq_server_middleware(&block)
8    Sidekiq::Testing.server_middleware.clear
9    Sidekiq::Testing.server_middleware(&block)
10  ensure
11    Sidekiq::Testing.server_middleware.clear
12  end
13end
14# rubocop:enable RSpec/ModifySidekiqMiddleware
15
16# If Sidekiq::Testing.inline! is used, SQL transactions done inside
17# Sidekiq worker are included in the SQL query limit (in a real
18# deployment sidekiq worker is executed separately). To avoid increasing
19# SQL limit counter, query limiting is disabled during Sidekiq block
20class DisableQueryLimit
21  def call(worker_instance, msg, queue)
22    ::Gitlab::QueryLimiting.disable!('https://mock-issue')
23    yield
24  ensure
25    ::Gitlab::QueryLimiting.enable!
26  end
27end
28
29# When running `Sidekiq::Testing.inline!` each job is using a request-store.
30# This middleware makes sure the values don't leak into eachother.
31class IsolatedRequestStore
32  def call(_worker, msg, queue)
33    old_store = RequestStore.store.dup
34    RequestStore.clear!
35
36    yield
37
38    RequestStore.store = old_store
39  end
40end
41