From a5f4bba440d7f9ea47046a0a561d49adf0a1e6d4 Mon Sep 17 00:00:00 2001 From: GitLab Bot Date: Wed, 16 Jun 2021 18:25:58 +0000 Subject: Add latest changes from gitlab-org/gitlab@14-0-stable-ee --- spec/workers/stuck_ci_jobs_worker_spec.rb | 132 ++++++++++++++++++++++++++---- 1 file changed, 116 insertions(+), 16 deletions(-) (limited to 'spec/workers/stuck_ci_jobs_worker_spec.rb') diff --git a/spec/workers/stuck_ci_jobs_worker_spec.rb b/spec/workers/stuck_ci_jobs_worker_spec.rb index 24d3b6fadf5..84b2d87494e 100644 --- a/spec/workers/stuck_ci_jobs_worker_spec.rb +++ b/spec/workers/stuck_ci_jobs_worker_spec.rb @@ -9,12 +9,17 @@ RSpec.describe StuckCiJobsWorker do let!(:job) { create :ci_build, runner: runner } let(:worker_lease_key) { StuckCiJobsWorker::EXCLUSIVE_LEASE_KEY } let(:worker_lease_uuid) { SecureRandom.uuid } + let(:created_at) { } + let(:updated_at) { } subject(:worker) { described_class.new } before do stub_exclusive_lease(worker_lease_key, worker_lease_uuid) - job.update!(status: status, updated_at: updated_at) + job_attributes = { status: status } + job_attributes[:created_at] = created_at if created_at + job_attributes[:updated_at] = updated_at if updated_at + job.update!(job_attributes) end shared_examples 'job is dropped' do @@ -63,22 +68,70 @@ RSpec.describe StuckCiJobsWorker do allow_any_instance_of(Ci::Build).to receive(:stuck?).and_return(false) end - context 'when job was not updated for more than 1 day ago' do - let(:updated_at) { 2.days.ago } + context 'when job was updated_at more than 1 day ago' do + let(:updated_at) { 1.5.days.ago } - it_behaves_like 'job is dropped' + context 'when created_at is the same as updated_at' do + let(:created_at) { 1.5.days.ago } + + it_behaves_like 'job is dropped' + end + + context 'when created_at is before updated_at' do + let(:created_at) { 3.days.ago } + + it_behaves_like 'job is dropped' + end + + context 'when created_at is outside lookback window' do + let(:created_at) { described_class::BUILD_LOOKBACK - 1.day } + + it_behaves_like 'job is unchanged' + end end - context 'when job was updated in less than 1 day ago' do + context 'when job was updated less than 1 day ago' do let(:updated_at) { 6.hours.ago } - it_behaves_like 'job is unchanged' + context 'when created_at is the same as updated_at' do + let(:created_at) { 1.5.days.ago } + + it_behaves_like 'job is unchanged' + end + + context 'when created_at is before updated_at' do + let(:created_at) { 3.days.ago } + + it_behaves_like 'job is unchanged' + end + + context 'when created_at is outside lookback window' do + let(:created_at) { described_class::BUILD_LOOKBACK - 1.day } + + it_behaves_like 'job is unchanged' + end end - context 'when job was not updated for more than 1 hour ago' do + context 'when job was updated more than 1 hour ago' do let(:updated_at) { 2.hours.ago } - it_behaves_like 'job is unchanged' + context 'when created_at is the same as updated_at' do + let(:created_at) { 2.hours.ago } + + it_behaves_like 'job is unchanged' + end + + context 'when created_at is before updated_at' do + let(:created_at) { 3.days.ago } + + it_behaves_like 'job is unchanged' + end + + context 'when created_at is outside lookback window' do + let(:created_at) { described_class::BUILD_LOOKBACK - 1.day } + + it_behaves_like 'job is unchanged' + end end end @@ -87,17 +140,48 @@ RSpec.describe StuckCiJobsWorker do allow_any_instance_of(Ci::Build).to receive(:stuck?).and_return(true) end - context 'when job was not updated for more than 1 hour ago' do - let(:updated_at) { 2.hours.ago } + context 'when job was updated_at more than 1 hour ago' do + let(:updated_at) { 1.5.hours.ago } + + context 'when created_at is the same as updated_at' do + let(:created_at) { 1.5.hours.ago } + + it_behaves_like 'job is dropped' + end + + context 'when created_at is before updated_at' do + let(:created_at) { 3.days.ago } - it_behaves_like 'job is dropped' + it_behaves_like 'job is dropped' + end + + context 'when created_at is outside lookback window' do + let(:created_at) { described_class::BUILD_LOOKBACK - 1.day } + + it_behaves_like 'job is unchanged' + end end - context 'when job was updated in less than 1 - hour ago' do + context 'when job was updated in less than 1 hour ago' do let(:updated_at) { 30.minutes.ago } - it_behaves_like 'job is unchanged' + context 'when created_at is the same as updated_at' do + let(:created_at) { 30.minutes.ago } + + it_behaves_like 'job is unchanged' + end + + context 'when created_at is before updated_at' do + let(:created_at) { 2.days.ago } + + it_behaves_like 'job is unchanged' + end + + context 'when created_at is outside lookback window' do + let(:created_at) { described_class::BUILD_LOOKBACK - 1.day } + + it_behaves_like 'job is unchanged' + end end end end @@ -105,7 +189,7 @@ RSpec.describe StuckCiJobsWorker do context 'when job is running' do let(:status) { 'running' } - context 'when job was not updated for more than 1 hour ago' do + context 'when job was updated_at more than an hour ago' do let(:updated_at) { 2.hours.ago } it_behaves_like 'job is dropped' @@ -123,7 +207,23 @@ RSpec.describe StuckCiJobsWorker do let(:status) { status } let(:updated_at) { 2.days.ago } - it_behaves_like 'job is unchanged' + context 'when created_at is the same as updated_at' do + let(:created_at) { 2.days.ago } + + it_behaves_like 'job is unchanged' + end + + context 'when created_at is before updated_at' do + let(:created_at) { 3.days.ago } + + it_behaves_like 'job is unchanged' + end + + context 'when created_at is outside lookback window' do + let(:created_at) { described_class::BUILD_LOOKBACK - 1.day } + + it_behaves_like 'job is unchanged' + end end end -- cgit v1.2.3