diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2021-07-14 15:09:23 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2021-07-14 15:09:23 +0300 |
commit | 0b194c4854f312e36616fccf7c610cb2b0ec6957 (patch) | |
tree | f4c3d8ed1cd799e50b979035506675a1d90ad4a9 /spec/workers | |
parent | c1e7698dff17b737299127ecf484443e676cdd4f (diff) |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'spec/workers')
-rw-r--r-- | spec/workers/every_sidekiq_worker_spec.rb | 1 | ||||
-rw-r--r-- | spec/workers/merge_request_cleanup_refs_worker_spec.rb | 89 | ||||
-rw-r--r-- | spec/workers/schedule_merge_request_cleanup_refs_worker_spec.rb | 25 |
3 files changed, 78 insertions, 37 deletions
diff --git a/spec/workers/every_sidekiq_worker_spec.rb b/spec/workers/every_sidekiq_worker_spec.rb index 8c1667e5b4d..c75b9b43ef4 100644 --- a/spec/workers/every_sidekiq_worker_spec.rb +++ b/spec/workers/every_sidekiq_worker_spec.rb @@ -418,6 +418,7 @@ RSpec.describe 'Every Sidekiq worker' do 'ScanSecurityReportSecretsWorker' => 17, 'Security::AutoFixWorker' => 3, 'Security::StoreScansWorker' => 3, + 'Security::TrackSecureScansWorker' => 1, 'SelfMonitoringProjectCreateWorker' => 3, 'SelfMonitoringProjectDeleteWorker' => 3, 'ServiceDeskEmailReceiverWorker' => 3, diff --git a/spec/workers/merge_request_cleanup_refs_worker_spec.rb b/spec/workers/merge_request_cleanup_refs_worker_spec.rb index 7401c6dd4d7..1de927a81e4 100644 --- a/spec/workers/merge_request_cleanup_refs_worker_spec.rb +++ b/spec/workers/merge_request_cleanup_refs_worker_spec.rb @@ -3,18 +3,41 @@ require 'spec_helper' RSpec.describe MergeRequestCleanupRefsWorker do - describe '#perform' do - context 'when merge request exists' do - let(:merge_request) { create(:merge_request) } - let(:job_args) { merge_request.id } - - include_examples 'an idempotent worker' do - it 'calls MergeRequests::CleanupRefsService#execute' do - expect_next_instance_of(MergeRequests::CleanupRefsService, merge_request) do |svc| - expect(svc).to receive(:execute).and_call_original - end.twice - - subject + let(:worker) { described_class.new } + + describe '#perform_work' do + context 'when next cleanup schedule is found' do + let(:failed_count) { 0 } + let!(:cleanup_schedule) { create(:merge_request_cleanup_schedule, failed_count: failed_count) } + + it 'marks the cleanup schedule as completed on success' do + stub_cleanup_service(status: :success) + worker.perform_work + + expect(cleanup_schedule.reload).to be_completed + expect(cleanup_schedule.completed_at).to be_present + end + + context 'when service fails' do + before do + stub_cleanup_service(status: :error) + worker.perform_work + end + + it 'marks the cleanup schedule as unstarted and track the failure' do + expect(cleanup_schedule.reload).to be_unstarted + expect(cleanup_schedule.failed_count).to eq(1) + expect(cleanup_schedule.completed_at).to be_nil + end + + context "and cleanup schedule has already failed #{described_class::FAILURE_THRESHOLD} times" do + let(:failed_count) { described_class::FAILURE_THRESHOLD } + + it 'marks the cleanup schedule as failed and track the failure' do + expect(cleanup_schedule.reload).to be_failed + expect(cleanup_schedule.failed_count).to eq(described_class::FAILURE_THRESHOLD + 1) + expect(cleanup_schedule.completed_at).to be_nil + end end end @@ -23,20 +46,52 @@ RSpec.describe MergeRequestCleanupRefsWorker do stub_feature_flags(merge_request_refs_cleanup: false) end - it 'does not clean up the merge request' do + it 'does nothing' do expect(MergeRequests::CleanupRefsService).not_to receive(:new) - perform_multiple(1) + worker.perform_work end end end - context 'when merge request does not exist' do - it 'does not call MergeRequests::CleanupRefsService' do + context 'when there is no next cleanup schedule found' do + it 'does nothing' do expect(MergeRequests::CleanupRefsService).not_to receive(:new) - perform_multiple(1) + worker.perform_work + end + end + end + + describe '#remaining_work_count' do + let_it_be(:unstarted) { create_list(:merge_request_cleanup_schedule, 2) } + let_it_be(:running) { create_list(:merge_request_cleanup_schedule, 2, :running) } + let_it_be(:completed) { create_list(:merge_request_cleanup_schedule, 2, :completed) } + + it 'returns number of scheduled and unstarted cleanup schedule records' do + expect(worker.remaining_work_count).to eq(unstarted.count) + end + + context 'when count exceeds max_running_jobs' do + before do + create_list(:merge_request_cleanup_schedule, worker.max_running_jobs) + end + + it 'gets capped at max_running_jobs' do + expect(worker.remaining_work_count).to eq(worker.max_running_jobs) end end end + + describe '#max_running_jobs' do + it 'returns the value of MAX_RUNNING_JOBS' do + expect(worker.max_running_jobs).to eq(described_class::MAX_RUNNING_JOBS) + end + end + + def stub_cleanup_service(result) + expect_next_instance_of(MergeRequests::CleanupRefsService, cleanup_schedule.merge_request) do |svc| + expect(svc).to receive(:execute).and_return(result) + end + end end diff --git a/spec/workers/schedule_merge_request_cleanup_refs_worker_spec.rb b/spec/workers/schedule_merge_request_cleanup_refs_worker_spec.rb index 869818b257e..ef515e43474 100644 --- a/spec/workers/schedule_merge_request_cleanup_refs_worker_spec.rb +++ b/spec/workers/schedule_merge_request_cleanup_refs_worker_spec.rb @@ -6,16 +6,9 @@ RSpec.describe ScheduleMergeRequestCleanupRefsWorker do subject(:worker) { described_class.new } describe '#perform' do - before do - allow(MergeRequest::CleanupSchedule) - .to receive(:scheduled_merge_request_ids) - .with(described_class::LIMIT) - .and_return([1, 2, 3, 4]) - end - it 'does nothing if the database is read-only' do allow(Gitlab::Database).to receive(:read_only?).and_return(true) - expect(MergeRequestCleanupRefsWorker).not_to receive(:bulk_perform_in) + expect(MergeRequestCleanupRefsWorker).not_to receive(:perform_with_capacity) worker.perform end @@ -26,25 +19,17 @@ RSpec.describe ScheduleMergeRequestCleanupRefsWorker do end it 'does not schedule any merge request clean ups' do - expect(MergeRequestCleanupRefsWorker).not_to receive(:bulk_perform_in) + expect(MergeRequestCleanupRefsWorker).not_to receive(:perform_with_capacity) worker.perform end end include_examples 'an idempotent worker' do - it 'schedules MergeRequestCleanupRefsWorker to be performed by batch' do - expect(MergeRequestCleanupRefsWorker) - .to receive(:bulk_perform_in) - .with( - described_class::DELAY, - [[1], [2], [3], [4]], - batch_size: described_class::BATCH_SIZE - ) + it 'schedules MergeRequestCleanupRefsWorker to be performed with capacity' do + expect(MergeRequestCleanupRefsWorker).to receive(:perform_with_capacity).twice - expect(worker).to receive(:log_extra_metadata_on_done).with(:merge_requests_count, 4) - - worker.perform + subject end end end |