Add specs for unsupported runner

This commit is contained in:
Kamil Trzciński 2018-08-01 12:23:43 +02:00
parent c944e22d50
commit 7bb99c2105
4 changed files with 107 additions and 2 deletions

View file

@ -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

View file

@ -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

View file

@ -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|

View file

@ -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) }