gitlab-org--gitlab-foss/spec/workers/pipeline_schedule_worker_spec.rb
Shinya Maeda d56d419a79 Squashed commit of the following:
commit 0c00e52d339f8471a6ea425d5a4a59751a3f4a35
Author: Shinya Maeda <shinya@gitlab.com>
Date:   Fri Nov 30 15:41:46 2018 +0900

    Update schedules.md

commit 0ae56bf5a0ba9254d2ebd4c846395113ae72d686
Merge: c143777c9f2 9ce28bf08b
Author: Shinya Maeda <shinya@gitlab.com>
Date:   Fri Nov 30 15:38:01 2018 +0900

    Merge branch 'master-ce' into ignore-failed-pipeline-creation-on-pipeline-schedule

commit c143777c9f250c8075355ac07e9bae7b074665c3
Author: Shinya Maeda <shinya@gitlab.com>
Date:   Thu Nov 29 17:18:07 2018 +0900

    Fix coding offence

commit 7c816dfa634b5911310c67c285fc3c37d5f03517
Author: Shinya Maeda <shinya@gitlab.com>
Date:   Thu Nov 29 16:12:06 2018 +0900

    Improve spec quality

commit f78eed45e991123f8af4a7b24f041529bbb35e91
Merge: 96d20ce9144 a5f4627857
Author: Shinya Maeda <shinya@gitlab.com>
Date:   Thu Nov 29 15:20:16 2018 +0900

    Merge branch 'master-ce' into ignore-failed-pipeline-creation-on-pipeline-schedule

commit 96d20ce914458f86e68b57bc1bb88ab8d27f010b
Author: Shinya Maeda <shinya@gitlab.com>
Date:   Tue Nov 27 16:25:42 2018 +0900

    Print pipeline error

commit 97842068b6cf1432cd400ead749843946b4f51ee
Merge: c2b015949af 2ee8c40fc1
Author: Shinya Maeda <shinya@gitlab.com>
Date:   Tue Nov 27 15:51:49 2018 +0900

    Merge branch 'master-ce' into ignore-failed-pipeline-creation-on-pipeline-schedule

commit c2b015949afb3ecc70cb057e2d13672f378c0d03
Merge: 3435137c17b fbbe5ccd1b
Author: Shinya Maeda <shinya@gitlab.com>
Date:   Mon Nov 26 15:26:17 2018 +0900

    Merge branch 'master-ce' into ignore-failed-pipeline-creation-on-pipeline-schedule

commit 3435137c17b0ef03003e39dd08c7370fe916c626
Author: Shinya Maeda <shinya@gitlab.com>
Date:   Tue Nov 20 17:45:38 2018 +0900

    Track exception with Sentry

commit 3f01f10d3b7380f0e8ceb3a379d8b6c602e9d6ca
Merge: 5749c62355f 8a581d531b
Author: Shinya Maeda <shinya@gitlab.com>
Date:   Tue Nov 20 17:12:41 2018 +0900

    Merge branch 'master-ce' into ignore-failed-pipeline-creation-on-pipeline-schedule

commit 5749c62355f8de62bb4e36ba1e351a78350607c1
Author: Shinya Maeda <shinya@gitlab.com>
Date:   Thu Nov 1 11:14:26 2018 +0900

    Create a pipeline even if it is corrupted

commit e01789890b6949b346d40fadef41aa133191cc43
Author: Shinya Maeda <shinya@gitlab.com>
Date:   Wed Oct 31 14:26:09 2018 +0900

    Improve production log message

commit f20d698a535f1dc70d5437c20b629fd1d956fb27
Author: Shinya Maeda <shinya@gitlab.com>
Date:   Fri Oct 19 17:11:20 2018 +0900

    Fix typo

commit 01323b02ac41ec50bcf237409f2e3c5c214bbfc1
Author: Shinya Maeda <shinya@gitlab.com>
Date:   Thu Oct 18 14:46:44 2018 +0900

    Update documents

commit 460337bf4a7e67a35d6c342678b4cfe66710ad56
Author: Shinya Maeda <shinya@gitlab.com>
Date:   Wed Oct 10 13:21:26 2018 +0900

    Add changelog

commit a3c4711752fedebfacbdf52da94058524af3c9f4
Author: Shinya Maeda <shinya@gitlab.com>
Date:   Wed Oct 10 09:20:06 2018 +0900

    Ignore failed pipeline creation in pipeline schedule worker. Instead, logging the event.
2018-11-30 16:32:52 +09:00

144 lines
4 KiB
Ruby

require 'spec_helper'
describe PipelineScheduleWorker do
subject { described_class.new.perform }
set(:project) { create(:project, :repository) }
set(:user) { create(:user) }
let!(:pipeline_schedule) do
create(:ci_pipeline_schedule, :nightly, project: project, owner: user)
end
before do
stub_ci_pipeline_to_return_yaml_file
pipeline_schedule.update_column(:next_run_at, 1.day.ago)
end
context 'when the schedule is runnable by the user' do
before do
project.add_maintainer(user)
end
context 'when there is a scheduled pipeline within next_run_at' do
shared_examples 'successful scheduling' do
it 'creates a new pipeline' do
expect { subject }.to change { project.pipelines.count }.by(1)
expect(Ci::Pipeline.last).to be_schedule
pipeline_schedule.reload
expect(pipeline_schedule.next_run_at).to be > Time.now
expect(pipeline_schedule).to eq(project.pipelines.last.pipeline_schedule)
expect(pipeline_schedule).to be_active
end
end
it_behaves_like 'successful scheduling'
context 'when the latest commit contains [ci skip]' do
before do
allow_any_instance_of(Ci::Pipeline)
.to receive(:git_commit_message)
.and_return('some commit [ci skip]')
end
it_behaves_like 'successful scheduling'
end
end
context 'when the schedule is deactivated' do
before do
pipeline_schedule.deactivate!
end
it 'does not creates a new pipeline' do
expect { subject }.not_to change { project.pipelines.count }
end
end
context 'when gitlab-ci.yml is corrupted' do
before do
stub_ci_pipeline_yaml_file(YAML.dump(rspec: { variables: 'rspec' } ))
end
it 'creates a failed pipeline with the reason' do
expect { subject }.to change { project.pipelines.count }.by(1)
expect(Ci::Pipeline.last).to be_config_error
expect(Ci::Pipeline.last.yaml_errors).not_to be_nil
end
end
end
context 'when the schedule is not runnable by the user' do
before do
expect(Gitlab::Sentry)
.to receive(:track_exception)
.with(Ci::CreatePipelineService::CreateError,
issue_url: 'https://gitlab.com/gitlab-org/gitlab-ce/issues/41231',
extra: { schedule_id: pipeline_schedule.id } ).once
end
it 'does not deactivate the schedule' do
subject
expect(pipeline_schedule.reload.active).to be_truthy
end
it 'increments Prometheus counter' do
expect(Gitlab::Metrics)
.to receive(:counter)
.with(:pipeline_schedule_creation_failed_total, "Counter of failed attempts of pipeline schedule creation")
.and_call_original
subject
end
it 'logging a pipeline error' do
expect(Rails.logger)
.to receive(:error)
.with(a_string_matching("Insufficient permissions to create a new pipeline"))
.and_call_original
subject
end
it 'does not create a pipeline' do
expect { subject }.not_to change { project.pipelines.count }
end
it 'does not raise an exception' do
expect { subject }.not_to raise_error
end
end
context 'when .gitlab-ci.yml is missing in the project' do
before do
stub_ci_pipeline_yaml_file(nil)
project.add_maintainer(user)
expect(Gitlab::Sentry)
.to receive(:track_exception)
.with(Ci::CreatePipelineService::CreateError,
issue_url: 'https://gitlab.com/gitlab-org/gitlab-ce/issues/41231',
extra: { schedule_id: pipeline_schedule.id } ).once
end
it 'logging a pipeline error' do
expect(Rails.logger)
.to receive(:error)
.with(a_string_matching("Missing .gitlab-ci.yml file"))
.and_call_original
subject
end
it 'does not create a pipeline' do
expect { subject }.not_to change { project.pipelines.count }
end
it 'does not raise an exception' do
expect { subject }.not_to raise_error
end
end
end