diff options
Diffstat (limited to 'spec/models/merge_request/cleanup_schedule_spec.rb')
-rw-r--r-- | spec/models/merge_request/cleanup_schedule_spec.rb | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/spec/models/merge_request/cleanup_schedule_spec.rb b/spec/models/merge_request/cleanup_schedule_spec.rb index 85208f901fd..9c50b64f2bd 100644 --- a/spec/models/merge_request/cleanup_schedule_spec.rb +++ b/spec/models/merge_request/cleanup_schedule_spec.rb @@ -120,6 +120,41 @@ RSpec.describe MergeRequest::CleanupSchedule do end end + describe '.stuck' do + let!(:cleanup_schedule_1) { create(:merge_request_cleanup_schedule, updated_at: 1.day.ago) } + let!(:cleanup_schedule_2) { create(:merge_request_cleanup_schedule, :running, updated_at: 5.hours.ago) } + let!(:cleanup_schedule_3) { create(:merge_request_cleanup_schedule, :running, updated_at: 7.hours.ago) } + let!(:cleanup_schedule_4) { create(:merge_request_cleanup_schedule, :completed, updated_at: 1.day.ago) } + let!(:cleanup_schedule_5) { create(:merge_request_cleanup_schedule, :failed, updated_at: 1.day.ago) } + + it 'returns records that has been in running state for more than 6 hours' do + expect(described_class.stuck).to match_array([cleanup_schedule_3]) + end + end + + describe '.stuck_retry!' do + let!(:cleanup_schedule_1) { create(:merge_request_cleanup_schedule, :running, updated_at: 5.hours.ago) } + let!(:cleanup_schedule_2) { create(:merge_request_cleanup_schedule, :running, updated_at: 7.hours.ago) } + + it 'sets stuck records to unstarted' do + expect { described_class.stuck_retry! }.to change { cleanup_schedule_2.reload.unstarted? }.from(false).to(true) + end + + context 'when there are more than 5 stuck schedules' do + before do + create_list(:merge_request_cleanup_schedule, 5, :running, updated_at: 1.day.ago) + end + + it 'only retries 5 stuck schedules at once' do + expect(described_class.stuck.count).to eq 6 + + described_class.stuck_retry! + + expect(described_class.stuck.count).to eq 1 + end + end + end + describe '.start_next' do let!(:cleanup_schedule_1) { create(:merge_request_cleanup_schedule, :completed, scheduled_at: 1.day.ago) } let!(:cleanup_schedule_2) { create(:merge_request_cleanup_schedule, scheduled_at: 2.days.ago) } |