From dcf09d11447c264f4b4028ea80eea2be913c2f5b Mon Sep 17 00:00:00 2001 From: Shinya Maeda Date: Thu, 31 Aug 2017 03:20:54 +0900 Subject: Implement `failure_reason` on `ci_builds` --- spec/models/ci/build_spec.rb | 20 ++++++++++++++++++++ spec/requests/api/commit_statuses_spec.rb | 3 +++ spec/requests/api/runner_spec.rb | 2 ++ spec/services/projects/update_pages_service_spec.rb | 1 + spec/workers/stuck_ci_jobs_worker_spec.rb | 1 + 5 files changed, 27 insertions(+) (limited to 'spec') diff --git a/spec/models/ci/build_spec.rb b/spec/models/ci/build_spec.rb index 3fe3ec17d36..2f39a9b4b0f 100644 --- a/spec/models/ci/build_spec.rb +++ b/spec/models/ci/build_spec.rb @@ -1710,4 +1710,24 @@ describe Ci::Build do end end end + + describe 'set failure_reason when drop' do + let(:build) { create(:ci_build, :created) } + + before do + build.drop!(reason) + end + + context 'when failure_reason is nil' do + let(:reason) { } + + it { expect(build).to be_no_error } + end + + context 'when failure_reason is script_error' do + let(:reason) { :script_error } + + it { expect(build).to be_failed_by_missing_dependency } + end + end end diff --git a/spec/requests/api/commit_statuses_spec.rb b/spec/requests/api/commit_statuses_spec.rb index cc71865e1f3..ce54a5702e3 100644 --- a/spec/requests/api/commit_statuses_spec.rb +++ b/spec/requests/api/commit_statuses_spec.rb @@ -142,6 +142,9 @@ describe API::CommitStatuses do expect(json_response['ref']).not_to be_empty expect(json_response['target_url']).to be_nil expect(json_response['description']).to be_nil + if status == 'failed' + expect(CommitStatus.find(json_response['id'])).to be_failed_by_api + end end end end diff --git a/spec/requests/api/runner_spec.rb b/spec/requests/api/runner_spec.rb index 993164aa8fe..23c2e7aa978 100644 --- a/spec/requests/api/runner_spec.rb +++ b/spec/requests/api/runner_spec.rb @@ -627,12 +627,14 @@ describe API::Runner do update_job(state: 'success') expect(job.reload.status).to eq 'success' + expect(job).to be_no_error end it 'mark job as failed' do update_job(state: 'failed') expect(job.reload.status).to eq 'failed' + expect(job).to be_failed_by_failed_job_state end end diff --git a/spec/services/projects/update_pages_service_spec.rb b/spec/services/projects/update_pages_service_spec.rb index aa6ad6340f5..0cc7dde3e4d 100644 --- a/spec/services/projects/update_pages_service_spec.rb +++ b/spec/services/projects/update_pages_service_spec.rb @@ -116,6 +116,7 @@ describe Projects::UpdatePagesService do expect(deploy_status.description) .to match(/artifacts for pages are too large/) + expect(deploy_status).to be_failed_by_page end end diff --git a/spec/workers/stuck_ci_jobs_worker_spec.rb b/spec/workers/stuck_ci_jobs_worker_spec.rb index 549635f7f33..f0691813e77 100644 --- a/spec/workers/stuck_ci_jobs_worker_spec.rb +++ b/spec/workers/stuck_ci_jobs_worker_spec.rb @@ -20,6 +20,7 @@ describe StuckCiJobsWorker do it 'changes status' do worker.perform is_expected.to eq('failed') + expect(job).to be_failed_by_stuck_and_timeout end end -- cgit v1.2.1 From b1af1f268b97c8518bf2806bca48f49174a8aead Mon Sep 17 00:00:00 2001 From: Shinya Maeda Date: Thu, 31 Aug 2017 03:36:15 +0900 Subject: Fix enum wording --- spec/requests/api/runner_spec.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'spec') diff --git a/spec/requests/api/runner_spec.rb b/spec/requests/api/runner_spec.rb index 23c2e7aa978..48220058c88 100644 --- a/spec/requests/api/runner_spec.rb +++ b/spec/requests/api/runner_spec.rb @@ -634,7 +634,7 @@ describe API::Runner do update_job(state: 'failed') expect(job.reload.status).to eq 'failed' - expect(job).to be_failed_by_failed_job_state + expect(job).to be_failed_by_job_state end end -- cgit v1.2.1 From 1d7c0390722c96aa66af5b26f5a826b97293dcd6 Mon Sep 17 00:00:00 2001 From: Shinya Maeda Date: Thu, 31 Aug 2017 22:03:41 +0900 Subject: Fix enum lists --- spec/models/ci/build_spec.rb | 20 -------------------- spec/models/commit_status_spec.rb | 20 ++++++++++++++++++++ spec/requests/api/commit_statuses_spec.rb | 2 +- spec/requests/api/runner_spec.rb | 4 ++-- spec/services/projects/update_pages_service_spec.rb | 2 +- spec/workers/stuck_ci_jobs_worker_spec.rb | 2 +- 6 files changed, 25 insertions(+), 25 deletions(-) (limited to 'spec') diff --git a/spec/models/ci/build_spec.rb b/spec/models/ci/build_spec.rb index 2f39a9b4b0f..3fe3ec17d36 100644 --- a/spec/models/ci/build_spec.rb +++ b/spec/models/ci/build_spec.rb @@ -1710,24 +1710,4 @@ describe Ci::Build do end end end - - describe 'set failure_reason when drop' do - let(:build) { create(:ci_build, :created) } - - before do - build.drop!(reason) - end - - context 'when failure_reason is nil' do - let(:reason) { } - - it { expect(build).to be_no_error } - end - - context 'when failure_reason is script_error' do - let(:reason) { :script_error } - - it { expect(build).to be_failed_by_missing_dependency } - end - end end diff --git a/spec/models/commit_status_spec.rb b/spec/models/commit_status_spec.rb index f7583645e69..4fd330ab7dc 100644 --- a/spec/models/commit_status_spec.rb +++ b/spec/models/commit_status_spec.rb @@ -443,4 +443,24 @@ describe CommitStatus do end end end + + describe 'set failure_reason when drop' do + let(:build) { create(:ci_build, :created) } + + before do + build.drop!(reason) + end + + context 'when failure_reason is nil' do + let(:reason) { } + + it { expect(build).to be_unknown_failure } + end + + context 'when failure_reason is job_failure' do + let(:reason) { :job_failure } + + it { expect(build).to be_job_failure } + end + end end diff --git a/spec/requests/api/commit_statuses_spec.rb b/spec/requests/api/commit_statuses_spec.rb index ce54a5702e3..e4c73583545 100644 --- a/spec/requests/api/commit_statuses_spec.rb +++ b/spec/requests/api/commit_statuses_spec.rb @@ -143,7 +143,7 @@ describe API::CommitStatuses do expect(json_response['target_url']).to be_nil expect(json_response['description']).to be_nil if status == 'failed' - expect(CommitStatus.find(json_response['id'])).to be_failed_by_api + expect(CommitStatus.find(json_response['id'])).to be_api_failure end end end diff --git a/spec/requests/api/runner_spec.rb b/spec/requests/api/runner_spec.rb index 48220058c88..386e76c6300 100644 --- a/spec/requests/api/runner_spec.rb +++ b/spec/requests/api/runner_spec.rb @@ -627,14 +627,14 @@ describe API::Runner do update_job(state: 'success') expect(job.reload.status).to eq 'success' - expect(job).to be_no_error + expect(job).to be_unknown_failure end it 'mark job as failed' do update_job(state: 'failed') expect(job.reload.status).to eq 'failed' - expect(job).to be_failed_by_job_state + expect(job).to be_job_failure end end diff --git a/spec/services/projects/update_pages_service_spec.rb b/spec/services/projects/update_pages_service_spec.rb index 0cc7dde3e4d..5fc69c7e4e5 100644 --- a/spec/services/projects/update_pages_service_spec.rb +++ b/spec/services/projects/update_pages_service_spec.rb @@ -116,7 +116,7 @@ describe Projects::UpdatePagesService do expect(deploy_status.description) .to match(/artifacts for pages are too large/) - expect(deploy_status).to be_failed_by_page + expect(deploy_status).to be_job_failure end end diff --git a/spec/workers/stuck_ci_jobs_worker_spec.rb b/spec/workers/stuck_ci_jobs_worker_spec.rb index f0691813e77..41549a77495 100644 --- a/spec/workers/stuck_ci_jobs_worker_spec.rb +++ b/spec/workers/stuck_ci_jobs_worker_spec.rb @@ -20,7 +20,7 @@ describe StuckCiJobsWorker do it 'changes status' do worker.perform is_expected.to eq('failed') - expect(job).to be_failed_by_stuck_and_timeout + expect(job).to be_stuck_or_timeout_failure end end -- cgit v1.2.1 From 68f6c61cf621db82ac98d561782590b1866fcf6f Mon Sep 17 00:00:00 2001 From: Shinya Maeda Date: Fri, 1 Sep 2017 16:52:11 +0900 Subject: - Allow runner API to pass failure_reason - Fix spec --- spec/lib/gitlab/import_export/safe_model_attributes.yml | 1 + spec/models/commit_status_spec.rb | 10 ++++------ spec/requests/api/commit_statuses_spec.rb | 2 +- spec/requests/api/runner_spec.rb | 9 +++++++++ spec/services/ci/retry_build_service_spec.rb | 2 +- 5 files changed, 16 insertions(+), 8 deletions(-) (limited to 'spec') diff --git a/spec/lib/gitlab/import_export/safe_model_attributes.yml b/spec/lib/gitlab/import_export/safe_model_attributes.yml index 27f2ce60084..b852ac570a3 100644 --- a/spec/lib/gitlab/import_export/safe_model_attributes.yml +++ b/spec/lib/gitlab/import_export/safe_model_attributes.yml @@ -278,6 +278,7 @@ CommitStatus: - auto_canceled_by_id - retried - protected +- failure_reason Ci::Variable: - id - project_id diff --git a/spec/models/commit_status_spec.rb b/spec/models/commit_status_spec.rb index 4fd330ab7dc..f5c1db79823 100644 --- a/spec/models/commit_status_spec.rb +++ b/spec/models/commit_status_spec.rb @@ -445,22 +445,20 @@ describe CommitStatus do end describe 'set failure_reason when drop' do - let(:build) { create(:ci_build, :created) } + let(:commit_status) { create(:commit_status, :created) } - before do - build.drop!(reason) - end + subject { commit_status.drop!(reason); commit_status } context 'when failure_reason is nil' do let(:reason) { } - it { expect(build).to be_unknown_failure } + it { is_expected.to be_unknown_failure } end context 'when failure_reason is job_failure' do let(:reason) { :job_failure } - it { expect(build).to be_job_failure } + it { is_expected.to be_job_failure } end end end diff --git a/spec/requests/api/commit_statuses_spec.rb b/spec/requests/api/commit_statuses_spec.rb index e4c73583545..ed1962ede42 100644 --- a/spec/requests/api/commit_statuses_spec.rb +++ b/spec/requests/api/commit_statuses_spec.rb @@ -143,7 +143,7 @@ describe API::CommitStatuses do expect(json_response['target_url']).to be_nil expect(json_response['description']).to be_nil if status == 'failed' - expect(CommitStatus.find(json_response['id'])).to be_api_failure + expect(json_response['failure_reason']).to eq('api_failure') end end end diff --git a/spec/requests/api/runner_spec.rb b/spec/requests/api/runner_spec.rb index 386e76c6300..f9dcd9d07cb 100644 --- a/spec/requests/api/runner_spec.rb +++ b/spec/requests/api/runner_spec.rb @@ -636,6 +636,15 @@ describe API::Runner do expect(job.reload.status).to eq 'failed' expect(job).to be_job_failure end + + context 'when failure_reason is given' do + it 'mark job as failed' do + update_job(state: 'failed', failure_reason: 'stuck_or_timeout_failure') + + expect(job.reload.status).to eq 'failed' + expect(job).to be_stuck_or_timeout_failure + end + end end context 'when tace is given' do diff --git a/spec/services/ci/retry_build_service_spec.rb b/spec/services/ci/retry_build_service_spec.rb index 7c9c117bf71..f5ed9ff608f 100644 --- a/spec/services/ci/retry_build_service_spec.rb +++ b/spec/services/ci/retry_build_service_spec.rb @@ -22,7 +22,7 @@ describe Ci::RetryBuildService do %i[type lock_version target_url base_tags commit_id deployments erased_by_id last_deployment project_id runner_id tag_taggings taggings tags trigger_request_id - user_id auto_canceled_by_id retried].freeze + user_id auto_canceled_by_id retried failure_reason].freeze shared_examples 'build duplication' do let(:stage) do -- cgit v1.2.1 From e8e8ae4d7df1de71d9f52e774607ac1ba4cce1cc Mon Sep 17 00:00:00 2001 From: Shinya Maeda Date: Fri, 1 Sep 2017 22:01:26 +0900 Subject: Fix spec --- spec/models/commit_status_spec.rb | 5 ++++- spec/requests/api/commit_statuses_spec.rb | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) (limited to 'spec') diff --git a/spec/models/commit_status_spec.rb b/spec/models/commit_status_spec.rb index f5c1db79823..0a6b0023dea 100644 --- a/spec/models/commit_status_spec.rb +++ b/spec/models/commit_status_spec.rb @@ -447,7 +447,10 @@ describe CommitStatus do describe 'set failure_reason when drop' do let(:commit_status) { create(:commit_status, :created) } - subject { commit_status.drop!(reason); commit_status } + subject do + commit_status.drop!(reason) + commit_status + end context 'when failure_reason is nil' do let(:reason) { } diff --git a/spec/requests/api/commit_statuses_spec.rb b/spec/requests/api/commit_statuses_spec.rb index ed1962ede42..e4c73583545 100644 --- a/spec/requests/api/commit_statuses_spec.rb +++ b/spec/requests/api/commit_statuses_spec.rb @@ -143,7 +143,7 @@ describe API::CommitStatuses do expect(json_response['target_url']).to be_nil expect(json_response['description']).to be_nil if status == 'failed' - expect(json_response['failure_reason']).to eq('api_failure') + expect(CommitStatus.find(json_response['id'])).to be_api_failure end end end -- cgit v1.2.1 From 69df47c7e43e1661faf97eb6d2b287a346215c31 Mon Sep 17 00:00:00 2001 From: Shinya Maeda Date: Sat, 2 Sep 2017 17:06:25 +0900 Subject: Improve spec --- spec/workers/stuck_ci_jobs_worker_spec.rb | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) (limited to 'spec') diff --git a/spec/workers/stuck_ci_jobs_worker_spec.rb b/spec/workers/stuck_ci_jobs_worker_spec.rb index 41549a77495..ac6f4fefb4e 100644 --- a/spec/workers/stuck_ci_jobs_worker_spec.rb +++ b/spec/workers/stuck_ci_jobs_worker_spec.rb @@ -6,28 +6,31 @@ describe StuckCiJobsWorker do let(:worker) { described_class.new } let(:exclusive_lease_uuid) { SecureRandom.uuid } - subject do - job.reload - job.status - end - before do job.update!(status: status, updated_at: updated_at) allow_any_instance_of(Gitlab::ExclusiveLease).to receive(:try_obtain).and_return(exclusive_lease_uuid) end shared_examples 'job is dropped' do - it 'changes status' do + before do worker.perform - is_expected.to eq('failed') + job.reload + end + + it "changes status" do + expect(job).to be_failed expect(job).to be_stuck_or_timeout_failure end end shared_examples 'job is unchanged' do - it "doesn't change status" do + before do worker.perform - is_expected.to eq(status) + job.reload + end + + it "doesn't change status" do + expect(job.status).to eq(status) end end -- cgit v1.2.1 From 38d9b4d77d85e26f827ff9640243494adc8597ed Mon Sep 17 00:00:00 2001 From: Shinya Maeda Date: Tue, 5 Sep 2017 15:10:34 +0900 Subject: Use script_failure. Add runner_system_failure. Improve spec. --- spec/models/commit_status_spec.rb | 6 ++--- spec/requests/api/runner_spec.rb | 28 +++++++++++++++------- .../services/projects/update_pages_service_spec.rb | 2 +- 3 files changed, 23 insertions(+), 13 deletions(-) (limited to 'spec') diff --git a/spec/models/commit_status_spec.rb b/spec/models/commit_status_spec.rb index 0a6b0023dea..858ec831200 100644 --- a/spec/models/commit_status_spec.rb +++ b/spec/models/commit_status_spec.rb @@ -458,10 +458,10 @@ describe CommitStatus do it { is_expected.to be_unknown_failure } end - context 'when failure_reason is job_failure' do - let(:reason) { :job_failure } + context 'when failure_reason is script_failure' do + let(:reason) { :script_failure } - it { is_expected.to be_job_failure } + it { is_expected.to be_script_failure } end end end diff --git a/spec/requests/api/runner_spec.rb b/spec/requests/api/runner_spec.rb index f9dcd9d07cb..419a65c69b5 100644 --- a/spec/requests/api/runner_spec.rb +++ b/spec/requests/api/runner_spec.rb @@ -626,24 +626,34 @@ describe API::Runner do it 'mark job as succeeded' do update_job(state: 'success') - expect(job.reload.status).to eq 'success' - expect(job).to be_unknown_failure + job.reload + expect(job).to be_success end it 'mark job as failed' do update_job(state: 'failed') - expect(job.reload.status).to eq 'failed' - expect(job).to be_job_failure + job.reload + expect(job).to be_failed + expect(job).to be_unknown_failure end - context 'when failure_reason is given' do - it 'mark job as failed' do - update_job(state: 'failed', failure_reason: 'stuck_or_timeout_failure') + context 'when failure_reason is script_failure' do + before do + update_job(state: 'failed', failure_reason: 'script_failure') + job.reload + end + + it { expect(job).to be_script_failure } + end - expect(job.reload.status).to eq 'failed' - expect(job).to be_stuck_or_timeout_failure + context 'when failure_reason is runner_system_failure' do + before do + update_job(state: 'failed', failure_reason: 'runner_system_failure') + job.reload end + + it { expect(job).to be_runner_system_failure } end end diff --git a/spec/services/projects/update_pages_service_spec.rb b/spec/services/projects/update_pages_service_spec.rb index 5fc69c7e4e5..031366d1825 100644 --- a/spec/services/projects/update_pages_service_spec.rb +++ b/spec/services/projects/update_pages_service_spec.rb @@ -116,7 +116,7 @@ describe Projects::UpdatePagesService do expect(deploy_status.description) .to match(/artifacts for pages are too large/) - expect(deploy_status).to be_job_failure + expect(deploy_status).to be_script_failure end end -- cgit v1.2.1