diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2020-03-09 21:07:59 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2020-03-09 21:07:59 +0300 |
commit | 7ebcead8cfd2edb810dd0cbda816b6cfbd170fe3 (patch) | |
tree | 11880c4059c89149cf997e9b958fb6d32c7dbdad /spec/lib/gitlab/sidekiq_middleware | |
parent | f1a40d0db939dfe8ff95d385e652ff72566be765 (diff) |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'spec/lib/gitlab/sidekiq_middleware')
-rw-r--r-- | spec/lib/gitlab/sidekiq_middleware/duplicate_jobs/duplicate_job_spec.rb | 32 | ||||
-rw-r--r-- | spec/lib/gitlab/sidekiq_middleware/duplicate_jobs/strategies/until_executing_spec.rb | 34 |
2 files changed, 66 insertions, 0 deletions
diff --git a/spec/lib/gitlab/sidekiq_middleware/duplicate_jobs/duplicate_job_spec.rb b/spec/lib/gitlab/sidekiq_middleware/duplicate_jobs/duplicate_job_spec.rb index 2334439461e..058e0737a25 100644 --- a/spec/lib/gitlab/sidekiq_middleware/duplicate_jobs/duplicate_job_spec.rb +++ b/spec/lib/gitlab/sidekiq_middleware/duplicate_jobs/duplicate_job_spec.rb @@ -3,6 +3,8 @@ require 'spec_helper' describe Gitlab::SidekiqMiddleware::DuplicateJobs::DuplicateJob, :clean_gitlab_redis_queues do + using RSpec::Parameterized::TableSyntax + subject(:duplicate_job) do described_class.new(job, queue) end @@ -110,6 +112,36 @@ describe Gitlab::SidekiqMiddleware::DuplicateJobs::DuplicateJob, :clean_gitlab_r end end + describe 'droppable?' do + where(:idempotent, :duplicate, :feature_enabled) do + # [true, false].repeated_permutation(3) + [[true, true, true], + [true, true, false], + [true, false, true], + [true, false, false], + [false, true, true], + [false, true, false], + [false, false, true], + [false, false, false]] + end + + with_them do + before do + allow(AuthorizedProjectsWorker).to receive(:idempotent?).and_return(idempotent) + allow(duplicate_job).to receive(:duplicate?).and_return(duplicate) + stub_feature_flags(drop_duplicate_sidekiq_jobs: feature_enabled) + end + + it 'is droppable when all conditions are met' do + if idempotent && duplicate && feature_enabled + expect(duplicate_job).to be_droppable + else + expect(duplicate_job).not_to be_droppable + end + end + end + end + def set_idempotency_key(key, value = '1') Sidekiq.redis { |r| r.set(key, value) } end diff --git a/spec/lib/gitlab/sidekiq_middleware/duplicate_jobs/strategies/until_executing_spec.rb b/spec/lib/gitlab/sidekiq_middleware/duplicate_jobs/strategies/until_executing_spec.rb index f40e829f9a5..31b51260ebd 100644 --- a/spec/lib/gitlab/sidekiq_middleware/duplicate_jobs/strategies/until_executing_spec.rb +++ b/spec/lib/gitlab/sidekiq_middleware/duplicate_jobs/strategies/until_executing_spec.rb @@ -10,14 +10,21 @@ describe Gitlab::SidekiqMiddleware::DuplicateJobs::Strategies::UntilExecuting do subject(:strategy) { described_class.new(fake_duplicate_job) } describe '#schedule' do + before do + allow(Gitlab::SidekiqLogging::DeduplicationLogger.instance).to receive(:log) + end + it 'checks for duplicates before yielding' do expect(fake_duplicate_job).to receive(:check!).ordered.and_return('a jid') expect(fake_duplicate_job).to receive(:duplicate?).ordered.and_return(false) + expect(fake_duplicate_job).to receive(:droppable?).ordered.and_return(false) + expect { |b| strategy.schedule({}, &b) }.to yield_control end it 'adds the jid of the existing job to the job hash' do allow(fake_duplicate_job).to receive(:check!).and_return('the jid') + allow(fake_duplicate_job).to receive(:droppable?).and_return(true) job_hash = {} expect(fake_duplicate_job).to receive(:duplicate?).and_return(true) @@ -27,6 +34,33 @@ describe Gitlab::SidekiqMiddleware::DuplicateJobs::Strategies::UntilExecuting do expect(job_hash).to include('duplicate-of' => 'the jid') end + + context "when the job is droppable" do + before do + allow(fake_duplicate_job).to receive(:check!).and_return('the jid') + allow(fake_duplicate_job).to receive(:duplicate?).and_return(true) + allow(fake_duplicate_job).to receive(:existing_jid).and_return('the jid') + allow(fake_duplicate_job).to receive(:droppable?).and_return(true) + end + + it 'drops the job' do + schedule_result = nil + + expect(fake_duplicate_job).to receive(:droppable?).and_return(true) + + expect { |b| schedule_result = strategy.schedule({}, &b) }.not_to yield_control + expect(schedule_result).to be(false) + end + + it 'logs that the job wass dropped' do + fake_logger = instance_double(Gitlab::SidekiqLogging::DeduplicationLogger) + + expect(Gitlab::SidekiqLogging::DeduplicationLogger).to receive(:instance).and_return(fake_logger) + expect(fake_logger).to receive(:log).with(a_hash_including({ 'jid' => 'new jid' }), 'dropped until executing') + + strategy.schedule({ 'jid' => 'new jid' }) {} + end + end end describe '#perform' do |