Test for both ci_disable_validates_dependencies true/false
This commit is contained in:
parent
85151ff6f6
commit
30bc983c34
2 changed files with 142 additions and 91 deletions
|
@ -1869,58 +1869,17 @@ describe Ci::Build do
|
|||
end
|
||||
|
||||
describe 'state transition: any => [:running]' do
|
||||
before do
|
||||
stub_feature_flags(ci_disable_validates_dependencies: true)
|
||||
end
|
||||
|
||||
let(:build) { create(:ci_build, :pending, pipeline: pipeline, stage_idx: 1, options: options) }
|
||||
|
||||
context 'when "dependencies" keyword is not defined' do
|
||||
let(:options) { {} }
|
||||
|
||||
it { expect { build.run! }.not_to raise_error }
|
||||
end
|
||||
|
||||
context 'when "dependencies" keyword is empty' do
|
||||
let(:options) { { dependencies: [] } }
|
||||
|
||||
it { expect { build.run! }.not_to raise_error }
|
||||
end
|
||||
|
||||
context 'when "dependencies" keyword is specified' do
|
||||
let(:options) { { dependencies: ['test'] } }
|
||||
|
||||
context 'when a depended job exists' do
|
||||
context 'when depended job has artifacts' do
|
||||
let!(:pre_stage_job) do
|
||||
create(:ci_build,
|
||||
:success,
|
||||
:artifacts,
|
||||
pipeline: pipeline,
|
||||
name: 'test',
|
||||
stage_idx: 0,
|
||||
options: { artifacts: { paths: ['binaries/'] } } )
|
||||
end
|
||||
|
||||
it { expect { build.run! }.not_to raise_error }
|
||||
end
|
||||
|
||||
context 'when depended job does not have artifacts' do
|
||||
let!(:pre_stage_job) { create(:ci_build, :success, pipeline: pipeline, name: 'test', stage_idx: 0) }
|
||||
|
||||
it { expect { build.run! }.not_to raise_error }
|
||||
end
|
||||
|
||||
shared_examples 'validation is active' do
|
||||
context 'when depended job has not been completed yet' do
|
||||
let!(:pre_stage_job) { create(:ci_build, :running, pipeline: pipeline, name: 'test', stage_idx: 0) }
|
||||
|
||||
it { expect { build.run! }.to raise_error(Ci::Build::MissingDependenciesError) }
|
||||
it { expect { job.run! }.to raise_error(Ci::Build::MissingDependenciesError) }
|
||||
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) }
|
||||
|
||||
it { expect { build.run! }.to raise_error(Ci::Build::MissingDependenciesError) }
|
||||
it { expect { job.run! }.to raise_error(Ci::Build::MissingDependenciesError) }
|
||||
end
|
||||
|
||||
context 'when artifacts of depended job has been erased' do
|
||||
|
@ -1930,9 +1889,70 @@ describe Ci::Build do
|
|||
pre_stage_job.erase
|
||||
end
|
||||
|
||||
it { expect { build.run! }.to raise_error(Ci::Build::MissingDependenciesError) }
|
||||
it { expect { job.run! }.to raise_error(Ci::Build::MissingDependenciesError) }
|
||||
end
|
||||
end
|
||||
|
||||
shared_examples 'validation is not active' do
|
||||
context 'when depended job has not been completed yet' do
|
||||
let!(:pre_stage_job) { create(:ci_build, :running, pipeline: pipeline, name: 'test', stage_idx: 0) }
|
||||
|
||||
it { expect { job.run! }.not_to raise_error }
|
||||
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) }
|
||||
|
||||
it { expect { job.run! }.not_to raise_error }
|
||||
end
|
||||
|
||||
context 'when artifacts of depended job has been erased' do
|
||||
let!(:pre_stage_job) { create(:ci_build, :success, pipeline: pipeline, name: 'test', stage_idx: 0, erased_at: 1.minute.ago) }
|
||||
|
||||
before do
|
||||
pre_stage_job.erase
|
||||
end
|
||||
|
||||
it { expect { job.run! }.not_to raise_error }
|
||||
end
|
||||
end
|
||||
|
||||
let!(:job) { create(:ci_build, :pending, pipeline: pipeline, stage_idx: 1, options: options) }
|
||||
|
||||
context 'when validates for dependencies is enabled' do
|
||||
before do
|
||||
stub_feature_flags(ci_disable_validates_dependencies: false)
|
||||
end
|
||||
|
||||
let!(:pre_stage_job) { create(:ci_build, :success, pipeline: pipeline, name: 'test', stage_idx: 0) }
|
||||
|
||||
context 'when "dependencies" keyword is not defined' do
|
||||
let(:options) { {} }
|
||||
|
||||
it { expect { job.run! }.not_to raise_error }
|
||||
end
|
||||
|
||||
context 'when "dependencies" keyword is empty' do
|
||||
let(:options) { { dependencies: [] } }
|
||||
|
||||
it { expect { job.run! }.not_to raise_error }
|
||||
end
|
||||
|
||||
context 'when "dependencies" keyword is specified' do
|
||||
let(:options) { { dependencies: ['test'] } }
|
||||
|
||||
it_behaves_like 'validation is active'
|
||||
end
|
||||
end
|
||||
|
||||
context 'when validates for dependencies is disabled' do
|
||||
let(:options) { { dependencies: ['test'] } }
|
||||
|
||||
before do
|
||||
stub_feature_flags(ci_disable_validates_dependencies: true)
|
||||
end
|
||||
|
||||
it_behaves_like 'validation is not active'
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -277,54 +277,85 @@ module Ci
|
|||
end
|
||||
|
||||
context 'when "dependencies" keyword is specified' do
|
||||
before do
|
||||
stub_feature_flags(ci_disable_validates_dependencies: false)
|
||||
end
|
||||
|
||||
let!(:pre_stage_job) { create(:ci_build, :success, pipeline: pipeline, name: job_name, stage_idx: 0) }
|
||||
|
||||
let!(:pending_job) do
|
||||
create(:ci_build, :pending, pipeline: pipeline, stage_idx: 1, options: { dependencies: ['spec'] } )
|
||||
end
|
||||
|
||||
let(:picked_job) { execute(specific_runner) }
|
||||
|
||||
context 'when a depended job exists' do
|
||||
let(:job_name) { 'spec' }
|
||||
|
||||
it "picks the build" do
|
||||
expect(picked_job).to eq(pending_job)
|
||||
end
|
||||
|
||||
context 'when "artifacts" keyword is specified on depended job' do
|
||||
let!(:pre_stage_job) do
|
||||
create(:ci_build,
|
||||
:success,
|
||||
:artifacts,
|
||||
pipeline: pipeline,
|
||||
name: job_name,
|
||||
stage_idx: 0,
|
||||
options: { artifacts: { paths: ['binaries/'] } } )
|
||||
end
|
||||
|
||||
context 'when artifacts of depended job has existsed' do
|
||||
it "picks the build" do
|
||||
expect(picked_job).to eq(pending_job)
|
||||
end
|
||||
end
|
||||
|
||||
context 'when artifacts of depended job has not existsed' do
|
||||
before do
|
||||
pre_stage_job.erase
|
||||
end
|
||||
|
||||
shared_examples 'not pick' do
|
||||
it 'does not pick the build and drops the build' do
|
||||
expect(picked_job).to be_nil
|
||||
expect(subject).to be_nil
|
||||
expect(pending_job.reload).to be_failed
|
||||
expect(pending_job).to be_missing_dependency_failure
|
||||
end
|
||||
end
|
||||
|
||||
shared_examples 'validation is active' do
|
||||
context 'when depended job has not been completed yet' do
|
||||
let!(:pre_stage_job) { create(:ci_build, :running, pipeline: pipeline, name: 'test', stage_idx: 0) }
|
||||
|
||||
it_behaves_like 'not pick'
|
||||
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) }
|
||||
|
||||
it_behaves_like 'not pick'
|
||||
end
|
||||
|
||||
context 'when artifacts of depended job has been erased' do
|
||||
let!(:pre_stage_job) { create(:ci_build, :success, pipeline: pipeline, name: 'test', stage_idx: 0, erased_at: 1.minute.ago) }
|
||||
|
||||
before do
|
||||
pre_stage_job.erase
|
||||
end
|
||||
|
||||
it_behaves_like 'not pick'
|
||||
end
|
||||
end
|
||||
|
||||
shared_examples 'validation is not active' do
|
||||
context 'when depended job has not been completed yet' do
|
||||
let!(:pre_stage_job) { create(:ci_build, :running, pipeline: pipeline, name: 'test', stage_idx: 0) }
|
||||
|
||||
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) }
|
||||
|
||||
it { expect(subject).to eq(pending_job) }
|
||||
end
|
||||
|
||||
context 'when artifacts of depended job has been erased' do
|
||||
let!(:pre_stage_job) { create(:ci_build, :success, pipeline: pipeline, name: 'test', stage_idx: 0, erased_at: 1.minute.ago) }
|
||||
|
||||
before do
|
||||
pre_stage_job.erase
|
||||
end
|
||||
|
||||
it { expect(subject).to eq(pending_job) }
|
||||
end
|
||||
end
|
||||
|
||||
before do
|
||||
stub_feature_flags(ci_disable_validates_dependencies: false)
|
||||
end
|
||||
|
||||
let!(:pre_stage_job) { create(:ci_build, :success, pipeline: pipeline, name: 'test', stage_idx: 0) }
|
||||
let!(:pending_job) { create(:ci_build, :pending, pipeline: pipeline, stage_idx: 1, options: { dependencies: ['test'] } ) }
|
||||
|
||||
subject { execute(specific_runner) }
|
||||
|
||||
context 'when validates for dependencies is enabled' do
|
||||
before do
|
||||
stub_feature_flags(ci_disable_validates_dependencies: false)
|
||||
end
|
||||
|
||||
it_behaves_like 'validation is active'
|
||||
end
|
||||
|
||||
context 'when validates for dependencies is disabled' do
|
||||
before do
|
||||
stub_feature_flags(ci_disable_validates_dependencies: true)
|
||||
end
|
||||
|
||||
it_behaves_like 'validation is not active'
|
||||
end
|
||||
end
|
||||
|
||||
|
|
Loading…
Reference in a new issue