diff options
Diffstat (limited to 'spec/support/shared_contexts/jobs/handling_retried_jobs_shared_context.rb')
-rw-r--r-- | spec/support/shared_contexts/jobs/handling_retried_jobs_shared_context.rb | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/spec/support/shared_contexts/jobs/handling_retried_jobs_shared_context.rb b/spec/support/shared_contexts/jobs/handling_retried_jobs_shared_context.rb new file mode 100644 index 00000000000..428eff77373 --- /dev/null +++ b/spec/support/shared_contexts/jobs/handling_retried_jobs_shared_context.rb @@ -0,0 +1,26 @@ +# 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 |