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