26 lines
823 B
Ruby
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
|