Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
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.rb26
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