Add specs for unsupported runner
This commit is contained in:
parent
c944e22d50
commit
7bb99c2105
4 changed files with 107 additions and 2 deletions
|
@ -22,6 +22,6 @@ class CommitStatusPresenter < Gitlab::View::Presenter::Delegated
|
|||
end
|
||||
|
||||
def unrecoverable?
|
||||
script_failure? || missing_dependency_failure? || runner_unsupported?
|
||||
script_failure? || missing_dependency_failure?
|
||||
end
|
||||
end
|
||||
|
|
|
@ -2813,4 +2813,76 @@ describe Ci::Build do
|
|||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe '#publishes_artifacts_reports?' do
|
||||
let(:build) { create(:ci_build, options: options) }
|
||||
|
||||
subject { build.publishes_artifacts_reports? }
|
||||
|
||||
context 'when artifacts reports are defined' do
|
||||
let(:options) do
|
||||
{ artifacts: { reports: { junit: "junit.xml" } } }
|
||||
end
|
||||
|
||||
it { is_expected.to be_truthy }
|
||||
end
|
||||
|
||||
context 'when artifacts reports missing defined' do
|
||||
let(:options) do
|
||||
{ artifacts: { paths: ["file.txt"] } }
|
||||
end
|
||||
|
||||
it { is_expected.to be_falsey }
|
||||
end
|
||||
|
||||
context 'when options are missing' do
|
||||
let(:options) { nil }
|
||||
|
||||
it { is_expected.to be_falsey }
|
||||
end
|
||||
end
|
||||
|
||||
describe '#runner_required_feature_names' do
|
||||
let(:build) { create(:ci_build, options: options) }
|
||||
|
||||
subject { build.runner_required_feature_names }
|
||||
|
||||
context 'when artifacts reports are defined' do
|
||||
let(:options) do
|
||||
{ artifacts: { reports: { junit: "junit.xml" } } }
|
||||
end
|
||||
|
||||
it { is_expected.to include(:upload_multiple_artifacts) }
|
||||
end
|
||||
end
|
||||
|
||||
describe '#supported_runner?' do
|
||||
set(:build) { create(:ci_build) }
|
||||
|
||||
subject { build.supported_runner?(runner_features) }
|
||||
|
||||
context 'when feature is required by build' do
|
||||
before do
|
||||
expect(build).to receive(:runner_required_feature_names) do
|
||||
[:upload_multiple_artifacts]
|
||||
end
|
||||
end
|
||||
|
||||
context 'when runner provides given feature' do
|
||||
let(:runner_features) do
|
||||
{ upload_multiple_artifacts: true }
|
||||
end
|
||||
|
||||
it { is_expected.to be_truthy }
|
||||
end
|
||||
|
||||
context 'when runner does not provide given feature' do
|
||||
let(:runner_features) do
|
||||
{}
|
||||
end
|
||||
|
||||
it { is_expected.to be_falsey }
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -231,7 +231,7 @@ describe Ci::BuildPresenter do
|
|||
let(:build) { create(:ci_build, :failed, :script_failure) }
|
||||
|
||||
context 'when is a script or missing dependency failure' do
|
||||
let(:failure_reasons) { %w(script_failure missing_dependency_failure runner_unsupported) }
|
||||
let(:failure_reasons) { %w(script_failure missing_dependency_failure) }
|
||||
|
||||
it 'should return false' do
|
||||
failure_reasons.each do |failure_reason|
|
||||
|
|
|
@ -351,6 +351,38 @@ module Ci
|
|||
end
|
||||
end
|
||||
|
||||
context 'runner feature set is verified' do
|
||||
set(:pending_job) { create(:ci_build, :pending, pipeline: pipeline) }
|
||||
|
||||
before do
|
||||
expect_any_instance_of(Ci::Build).to receive(:runner_required_feature_names) do
|
||||
[:runner_required_feature]
|
||||
end
|
||||
end
|
||||
|
||||
subject { execute(specific_runner, params) }
|
||||
|
||||
context 'when feature is missing by runner' do
|
||||
let(:params) { {} }
|
||||
|
||||
it 'does not pick the build and drops the build' do
|
||||
expect(subject).to be_nil
|
||||
expect(pending_job.reload).to be_failed
|
||||
expect(pending_job).to be_runner_unsupported
|
||||
end
|
||||
end
|
||||
|
||||
context 'when feature is supported by runner' do
|
||||
let(:params) do
|
||||
{ info: { features: { runner_required_feature: true } } }
|
||||
end
|
||||
|
||||
it 'does pick job' do
|
||||
expect(subject).not_to be_nil
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
context 'when "dependencies" keyword is specified' do
|
||||
shared_examples 'not pick' do
|
||||
it 'does not pick the build and drops the build' do
|
||||
|
@ -403,6 +435,7 @@ module Ci
|
|||
|
||||
it { expect(subject).to eq(pending_job) }
|
||||
end
|
||||
|
||||
context 'when artifacts of depended job has been expired' do
|
||||
let!(:pre_stage_job) { create(:ci_build, :success, :expired, pipeline: pipeline, name: 'test', stage_idx: 0) }
|
||||
|
||||
|
|
Loading…
Reference in a new issue