debian-mirror-gitlab/spec/support/shared_contexts/jobs/handling_retried_jobs_shared_context.rb
2023-01-12 18:35:48 +00:00

26 lines
823 B
Ruby

# frozen_string_literal: true
RSpec.shared_context 'when handling retried jobs' do |url|
let(:set_name) { 'retry' }
# Account for Sidekiq retry jitter
# https://github.com/mperham/sidekiq/blob/3575ccb44c688dd08bfbfd937696260b12c622fb/lib/sidekiq/job_retry.rb#L217
let(:schedule_jitter) { 10 }
# Try to mimic as closely as possible what Sidekiq will actually
# do to retry a job.
def retry_in(klass, time, args = 0)
message = Gitlab::Json.generate(
'class' => klass.name,
'args' => [args],
'retry' => true
)
allow(klass).to receive(:sidekiq_retry_in_block).and_return(proc { time.to_i })
begin
Sidekiq::JobRetry.new(Sidekiq).local(klass, message, klass.queue) { raise 'boom' }
rescue Sidekiq::JobRetry::Skip
# Sidekiq scheduled the retry
end
end
end