diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2020-10-28 09:08:37 +0000 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2020-10-28 09:08:37 +0000 |
commit | a2ee63d924727701913f1fc9572f1182f40fda23 (patch) | |
tree | b757c8ae53683954c1e450ad22d3be9bfda835cb /spec/lib/gitlab/ci | |
parent | b312c3d3b42ebf0f1daaa76fcb921c59a83f199d (diff) | |
download | gitlab-ce-a2ee63d924727701913f1fc9572f1182f40fda23.tar.gz |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'spec/lib/gitlab/ci')
-rw-r--r-- | spec/lib/gitlab/ci/pipeline/chain/populate_spec.rb | 19 | ||||
-rw-r--r-- | spec/lib/gitlab/ci/pipeline/chain/seed_block_spec.rb | 78 | ||||
-rw-r--r-- | spec/lib/gitlab/ci/pipeline/chain/seed_spec.rb | 66 |
3 files changed, 142 insertions, 21 deletions
diff --git a/spec/lib/gitlab/ci/pipeline/chain/populate_spec.rb b/spec/lib/gitlab/ci/pipeline/chain/populate_spec.rb index 8c02121857a..5506b079d0f 100644 --- a/spec/lib/gitlab/ci/pipeline/chain/populate_spec.rb +++ b/spec/lib/gitlab/ci/pipeline/chain/populate_spec.rb @@ -22,6 +22,7 @@ RSpec.describe Gitlab::Ci::Pipeline::Chain::Populate do [ Gitlab::Ci::Pipeline::Chain::Config::Content.new(pipeline, command), Gitlab::Ci::Pipeline::Chain::Config::Process.new(pipeline, command), + Gitlab::Ci::Pipeline::Chain::SeedBlock.new(pipeline, command), Gitlab::Ci::Pipeline::Chain::Seed.new(pipeline, command) ] end @@ -180,23 +181,21 @@ RSpec.describe Gitlab::Ci::Pipeline::Chain::Populate do ->(pipeline) { pipeline.variables.create!(key: 'VAR', value: '123') } end - it 'wastes pipeline iid' do - expect { run_chain }.to raise_error(ActiveRecord::RecordNotSaved) - - last_iid = InternalId.ci_pipelines - .where(project_id: project.id) - .last.last_value - - expect(last_iid).to be > 0 + it 'raises error' do + expect { run_chain }.to raise_error(ActiveRecord::RecordNotSaved, + 'You cannot call create unless the parent is saved') end end end context 'when pipeline gets persisted during the process' do - let(:pipeline) { create(:ci_pipeline, project: project) } + before do + dependencies.each(&:perform!) + pipeline.save! + end it 'raises error' do - expect { run_chain }.to raise_error(described_class::PopulateError) + expect { step.perform! }.to raise_error(described_class::PopulateError) end end diff --git a/spec/lib/gitlab/ci/pipeline/chain/seed_block_spec.rb b/spec/lib/gitlab/ci/pipeline/chain/seed_block_spec.rb new file mode 100644 index 00000000000..85c8e20767f --- /dev/null +++ b/spec/lib/gitlab/ci/pipeline/chain/seed_block_spec.rb @@ -0,0 +1,78 @@ +# frozen_string_literal: true + +require 'spec_helper' + +RSpec.describe Gitlab::Ci::Pipeline::Chain::SeedBlock do + let(:project) { create(:project, :repository) } + let(:user) { create(:user, developer_projects: [project]) } + let(:seeds_block) { } + + let(:command) do + Gitlab::Ci::Pipeline::Chain::Command.new( + project: project, + current_user: user, + origin_ref: 'master', + seeds_block: seeds_block) + end + + let(:pipeline) { build(:ci_pipeline, project: project) } + + describe '#perform!' do + before do + stub_ci_pipeline_yaml_file(YAML.dump(config)) + end + + subject(:run_chain) do + [ + Gitlab::Ci::Pipeline::Chain::Config::Content.new(pipeline, command), + Gitlab::Ci::Pipeline::Chain::Config::Process.new(pipeline, command) + ].map(&:perform!) + + described_class.new(pipeline, command).perform! + end + + let(:config) do + { rspec: { script: 'rake' } } + end + + context 'when there is not seeds_block' do + it 'does nothing' do + expect { run_chain }.not_to raise_error + end + end + + context 'when there is seeds_block' do + let(:seeds_block) do + ->(pipeline) { pipeline.variables.build(key: 'VAR', value: '123') } + end + + it 'executes the block' do + run_chain + + expect(pipeline.variables.size).to eq(1) + end + + context 'when FF ci_seed_block_run_before_workflow_rules is disabled' do + before do + stub_feature_flags(ci_seed_block_run_before_workflow_rules: false) + end + + it 'does not execute the block' do + run_chain + + expect(pipeline.variables.size).to eq(0) + end + end + end + + context 'when the seeds_block tries to save the pipelie' do + let(:seeds_block) do + ->(pipeline) { pipeline.save! } + end + + it 'raises error' do + expect { run_chain }.to raise_error('Pipeline cannot be persisted by `seeds_block`') + end + end + end +end diff --git a/spec/lib/gitlab/ci/pipeline/chain/seed_spec.rb b/spec/lib/gitlab/ci/pipeline/chain/seed_spec.rb index f83cd49d780..d849c768a3c 100644 --- a/spec/lib/gitlab/ci/pipeline/chain/seed_spec.rb +++ b/spec/lib/gitlab/ci/pipeline/chain/seed_spec.rb @@ -5,22 +5,14 @@ require 'spec_helper' RSpec.describe Gitlab::Ci::Pipeline::Chain::Seed do let(:project) { create(:project, :repository) } let(:user) { create(:user, developer_projects: [project]) } + let(:seeds_block) { } let(:command) do Gitlab::Ci::Pipeline::Chain::Command.new( project: project, current_user: user, origin_ref: 'master', - seeds_block: nil) - end - - def run_chain(pipeline, command) - [ - Gitlab::Ci::Pipeline::Chain::Config::Content.new(pipeline, command), - Gitlab::Ci::Pipeline::Chain::Config::Process.new(pipeline, command) - ].map(&:perform!) - - described_class.new(pipeline, command).perform! + seeds_block: seeds_block) end let(:pipeline) { build(:ci_pipeline, project: project) } @@ -28,22 +20,36 @@ RSpec.describe Gitlab::Ci::Pipeline::Chain::Seed do describe '#perform!' do before do stub_ci_pipeline_yaml_file(YAML.dump(config)) - run_chain(pipeline, command) end let(:config) do { rspec: { script: 'rake' } } end + subject(:run_chain) do + [ + Gitlab::Ci::Pipeline::Chain::Config::Content.new(pipeline, command), + Gitlab::Ci::Pipeline::Chain::Config::Process.new(pipeline, command) + ].map(&:perform!) + + described_class.new(pipeline, command).perform! + end + it 'allocates next IID' do + run_chain + expect(pipeline.iid).to be_present end it 'ensures ci_ref' do + run_chain + expect(pipeline.ci_ref).to be_present end it 'sets the seeds in the command object' do + run_chain + expect(command.stage_seeds).to all(be_a Gitlab::Ci::Pipeline::Seed::Base) expect(command.stage_seeds.count).to eq 1 end @@ -58,6 +64,8 @@ RSpec.describe Gitlab::Ci::Pipeline::Chain::Seed do end it 'correctly fabricates a stage seeds object' do + run_chain + seeds = command.stage_seeds expect(seeds.size).to eq 2 expect(seeds.first.attributes[:name]).to eq 'test' @@ -81,6 +89,8 @@ RSpec.describe Gitlab::Ci::Pipeline::Chain::Seed do end it 'returns stage seeds only assigned to master' do + run_chain + seeds = command.stage_seeds expect(seeds.size).to eq 1 @@ -100,6 +110,8 @@ RSpec.describe Gitlab::Ci::Pipeline::Chain::Seed do end it 'returns stage seeds only assigned to schedules' do + run_chain + seeds = command.stage_seeds expect(seeds.size).to eq 1 @@ -127,6 +139,8 @@ RSpec.describe Gitlab::Ci::Pipeline::Chain::Seed do let(:pipeline) { build(:ci_pipeline, project: project) } it 'returns seeds for kubernetes dependent job' do + run_chain + seeds = command.stage_seeds expect(seeds.size).to eq 2 @@ -138,6 +152,8 @@ RSpec.describe Gitlab::Ci::Pipeline::Chain::Seed do context 'when kubernetes is not active' do it 'does not return seeds for kubernetes dependent job' do + run_chain + seeds = command.stage_seeds expect(seeds.size).to eq 1 @@ -155,11 +171,39 @@ RSpec.describe Gitlab::Ci::Pipeline::Chain::Seed do end it 'returns stage seeds only when variables expression is truthy' do + run_chain + seeds = command.stage_seeds expect(seeds.size).to eq 1 expect(seeds.dig(0, 0, :name)).to eq 'unit' end end + + context 'when there is seeds_block' do + let(:seeds_block) do + ->(pipeline) { pipeline.variables.build(key: 'VAR', value: '123') } + end + + context 'when FF ci_seed_block_run_before_workflow_rules is enabled' do + it 'does not execute the block' do + run_chain + + expect(pipeline.variables.size).to eq(0) + end + end + + context 'when FF ci_seed_block_run_before_workflow_rules is disabled' do + before do + stub_feature_flags(ci_seed_block_run_before_workflow_rules: false) + end + + it 'executes the block' do + run_chain + + expect(pipeline.variables.size).to eq(1) + end + end + end end end |