Add test that shows problem with pipeline processing
This commit is contained in:
parent
71db3b1ce7
commit
b18afa835b
1 changed files with 43 additions and 3 deletions
|
@ -3,8 +3,6 @@ require 'spec_helper'
|
||||||
describe Ci::ProcessPipelineService, services: true do
|
describe Ci::ProcessPipelineService, services: true do
|
||||||
let(:pipeline) { create(:ci_pipeline, ref: 'master') }
|
let(:pipeline) { create(:ci_pipeline, ref: 'master') }
|
||||||
let(:user) { create(:user) }
|
let(:user) { create(:user) }
|
||||||
let(:all_builds) { pipeline.builds }
|
|
||||||
let(:builds) { all_builds.where.not(status: [:created, :skipped]) }
|
|
||||||
let(:config) { nil }
|
let(:config) { nil }
|
||||||
|
|
||||||
before do
|
before do
|
||||||
|
@ -12,6 +10,14 @@ describe Ci::ProcessPipelineService, services: true do
|
||||||
end
|
end
|
||||||
|
|
||||||
describe '#execute' do
|
describe '#execute' do
|
||||||
|
def all_builds
|
||||||
|
pipeline.builds
|
||||||
|
end
|
||||||
|
|
||||||
|
def builds
|
||||||
|
all_builds.where.not(status: [:created, :skipped])
|
||||||
|
end
|
||||||
|
|
||||||
def create_builds
|
def create_builds
|
||||||
described_class.new(pipeline.project, user).execute(pipeline)
|
described_class.new(pipeline.project, user).execute(pipeline)
|
||||||
end
|
end
|
||||||
|
@ -224,6 +230,40 @@ describe Ci::ProcessPipelineService, services: true do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
context 'when failed build in the middle stage is retried' do
|
||||||
|
context 'when failed build is the only unsuccessful build in the stage' do
|
||||||
|
before do
|
||||||
|
create(:ci_build, :created, pipeline: pipeline, name: 'build:1', stage_idx: 0)
|
||||||
|
create(:ci_build, :created, pipeline: pipeline, name: 'build:2', stage_idx: 0)
|
||||||
|
create(:ci_build, :created, pipeline: pipeline, name: 'test:1', stage_idx: 1)
|
||||||
|
create(:ci_build, :created, pipeline: pipeline, name: 'test:2', stage_idx: 1)
|
||||||
|
create(:ci_build, :created, pipeline: pipeline, name: 'deploy:1', stage_idx: 2)
|
||||||
|
create(:ci_build, :created, pipeline: pipeline, name: 'deploy:2', stage_idx: 2)
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'does trigger builds in the next stage' do
|
||||||
|
expect(create_builds).to be_truthy
|
||||||
|
expect(builds.pluck(:name)).to contain_exactly('build:1', 'build:2')
|
||||||
|
|
||||||
|
pipeline.builds.running_or_pending.each(&:success)
|
||||||
|
|
||||||
|
expect(builds.pluck(:name))
|
||||||
|
.to contain_exactly('build:1', 'build:2', 'test:1', 'test:2')
|
||||||
|
|
||||||
|
pipeline.builds.find_by(name: 'test:1').success
|
||||||
|
pipeline.builds.find_by(name: 'test:2').drop
|
||||||
|
|
||||||
|
expect(builds.pluck(:name))
|
||||||
|
.to contain_exactly('build:1', 'build:2', 'test:1', 'test:2')
|
||||||
|
|
||||||
|
Ci::Build.retry(pipeline.builds.find_by(name: 'test:2'))
|
||||||
|
|
||||||
|
expect(builds.pluck(:name)).to contain_exactly(
|
||||||
|
'build:1', 'build:2', 'test:1', 'test:2', 'test:2', 'deploy:1', 'deploy:2')
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
context 'creates a builds from .gitlab-ci.yml' do
|
context 'creates a builds from .gitlab-ci.yml' do
|
||||||
let(:config) do
|
let(:config) do
|
||||||
YAML.dump({
|
YAML.dump({
|
||||||
|
|
Loading…
Reference in a new issue