diff options
Diffstat (limited to 'spec/workers/pipeline_process_worker_spec.rb')
-rw-r--r-- | spec/workers/pipeline_process_worker_spec.rb | 52 |
1 files changed, 49 insertions, 3 deletions
diff --git a/spec/workers/pipeline_process_worker_spec.rb b/spec/workers/pipeline_process_worker_spec.rb index ac677e3b555..aaa37b7f464 100644 --- a/spec/workers/pipeline_process_worker_spec.rb +++ b/spec/workers/pipeline_process_worker_spec.rb @@ -2,11 +2,16 @@ require 'spec_helper' -describe PipelineProcessWorker do +describe PipelineProcessWorker, :clean_gitlab_redis_shared_state do + include ExclusiveLeaseHelpers + describe '#perform' do - context 'when pipeline exists' do - let(:pipeline) { create(:ci_pipeline) } + subject { worker.perform(pipeline.id) } + + let(:pipeline) { create(:ci_pipeline) } + let(:worker) { described_class.new } + context 'when pipeline exists' do it 'processes pipeline' do expect_any_instance_of(Ci::Pipeline).to receive(:process!) @@ -21,6 +26,35 @@ describe PipelineProcessWorker do .with([build.id]) described_class.new.perform(pipeline.id, [build.id]) + end + + context 'when the other sidekiq job has already been processing on the pipeline' do + before do + stub_exclusive_lease_taken("batch_pop_queueing:lock:pipeline_process_worker:#{pipeline.id}") + end + + it 'enqueues the pipeline id to the queue and does not process' do + expect_next_instance_of(Gitlab::BatchPopQueueing) do |queue| + expect(queue).to receive(:enqueue).with([pipeline.id], anything) + end + + expect_any_instance_of(Ci::Pipeline).not_to receive(:process!) + + subject + end + end + + context 'when there are some items are enqueued during the current process' do + before do + allow_any_instance_of(Gitlab::BatchPopQueueing).to receive(:safe_execute) do + { status: :finished, new_items: [pipeline.id] } + end + end + + it 're-executes PipelineProcessWorker asynchronously' do + expect(PipelineProcessWorker).to receive(:perform_async).with(pipeline.id) + + subject end end end @@ -31,5 +65,17 @@ describe PipelineProcessWorker do .not_to raise_error end end + + context 'when pipeline_process_worker_efficient_perform feature flag is disabled' do + before do + stub_feature_flags(enable_deduplicater_for_pipeline_process_worker: false) + end + + it 'processes without SidekiqJobDeduplicater' do + expect(Gitlab::BatchPopQueueing).not_to receive(:new) + + subject + end + end end end |