Merge branch 'qa-dd-refactor-autodevops-spec' into 'master'
Pare down create_project_with_auto_devops_spec See merge request gitlab-org/gitlab-ce!25577
This commit is contained in:
commit
f6453eca99
|
@ -9,7 +9,7 @@ module QA
|
|||
|
||||
attr_reader :api_url, :ca_certificate, :token, :rbac
|
||||
|
||||
def initialize(rbac: false)
|
||||
def initialize(rbac: true)
|
||||
@rbac = rbac
|
||||
end
|
||||
|
||||
|
|
|
@ -11,163 +11,148 @@ module QA
|
|||
end
|
||||
|
||||
describe 'Auto DevOps support', :orchestrated, :kubernetes, :quarantine do
|
||||
[true, false].each do |rbac|
|
||||
context "when rbac is #{rbac ? 'enabled' : 'disabled'}" do
|
||||
before(:all) do
|
||||
login
|
||||
context 'when rbac is enabled' do
|
||||
before(:all) do
|
||||
login
|
||||
|
||||
@project = Resource::Project.fabricate! do |p|
|
||||
p.name = Runtime::Env.auto_devops_project_name || 'project-with-autodevops'
|
||||
p.description = 'Project with Auto DevOps'
|
||||
end
|
||||
|
||||
# Disable code_quality check in Auto DevOps pipeline as it takes
|
||||
# too long and times out the test
|
||||
Resource::CiVariable.fabricate! do |resource|
|
||||
resource.project = @project
|
||||
resource.key = 'CODE_QUALITY_DISABLED'
|
||||
resource.value = '1'
|
||||
end
|
||||
|
||||
# Create Auto DevOps compatible repo
|
||||
Resource::Repository::ProjectPush.fabricate! do |push|
|
||||
push.project = @project
|
||||
push.directory = Pathname
|
||||
.new(__dir__)
|
||||
.join('../../../../../fixtures/auto_devops_rack')
|
||||
push.commit_message = 'Create Auto DevOps compatible rack application'
|
||||
end
|
||||
|
||||
# Create and connect K8s cluster
|
||||
@cluster = Service::KubernetesCluster.new(rbac: rbac).create!
|
||||
Resource::KubernetesCluster.fabricate! do |cluster|
|
||||
cluster.project = @project
|
||||
cluster.cluster = @cluster
|
||||
cluster.install_helm_tiller = true
|
||||
cluster.install_ingress = true
|
||||
cluster.install_prometheus = true
|
||||
cluster.install_runner = true
|
||||
end
|
||||
|
||||
@project.visit!
|
||||
Page::Project::Menu.perform(&:click_ci_cd_settings)
|
||||
Page::Project::Settings::CICD.perform do |p|
|
||||
p.enable_auto_devops
|
||||
end
|
||||
@project = Resource::Project.fabricate! do |p|
|
||||
p.name = Runtime::Env.auto_devops_project_name || 'project-with-autodevops'
|
||||
p.description = 'Project with Auto DevOps'
|
||||
end
|
||||
|
||||
after(:all) do
|
||||
@cluster&.remove!
|
||||
# Disable code_quality check in Auto DevOps pipeline as it takes
|
||||
# too long and times out the test
|
||||
Resource::CiVariable.fabricate! do |resource|
|
||||
resource.project = @project
|
||||
resource.key = 'CODE_QUALITY_DISABLED'
|
||||
resource.value = '1'
|
||||
end
|
||||
|
||||
before do
|
||||
login
|
||||
# Create Auto DevOps compatible repo
|
||||
Resource::Repository::ProjectPush.fabricate! do |push|
|
||||
push.project = @project
|
||||
push.directory = Pathname
|
||||
.new(__dir__)
|
||||
.join('../../../../../fixtures/auto_devops_rack')
|
||||
push.commit_message = 'Create Auto DevOps compatible rack application'
|
||||
end
|
||||
|
||||
it 'runs auto devops' do
|
||||
@project.visit!
|
||||
Page::Project::Menu.perform(&:click_ci_cd_pipelines)
|
||||
Page::Project::Pipeline::Index.perform(&:go_to_latest_pipeline)
|
||||
# Create and connect K8s cluster
|
||||
@cluster = Service::KubernetesCluster.new.create!
|
||||
Resource::KubernetesCluster.fabricate! do |cluster|
|
||||
cluster.project = @project
|
||||
cluster.cluster = @cluster
|
||||
cluster.install_helm_tiller = true
|
||||
cluster.install_ingress = true
|
||||
cluster.install_prometheus = true
|
||||
cluster.install_runner = true
|
||||
end
|
||||
end
|
||||
|
||||
Page::Project::Pipeline::Show.perform do |pipeline|
|
||||
pipeline.go_to_job('build')
|
||||
end
|
||||
Page::Project::Job::Show.perform do |job|
|
||||
expect(job).to be_successful(timeout: 600)
|
||||
after(:all) do
|
||||
@cluster&.remove!
|
||||
end
|
||||
|
||||
job.click_element(:pipeline_path)
|
||||
end
|
||||
it 'runs auto devops' do
|
||||
@project.visit!
|
||||
Page::Project::Menu.perform(&:click_ci_cd_pipelines)
|
||||
Page::Project::Pipeline::Index.perform(&:go_to_latest_pipeline)
|
||||
|
||||
Page::Project::Pipeline::Show.perform do |pipeline|
|
||||
pipeline.go_to_job('test')
|
||||
end
|
||||
Page::Project::Job::Show.perform do |job|
|
||||
expect(job).to be_successful(timeout: 600)
|
||||
Page::Project::Pipeline::Show.perform do |pipeline|
|
||||
pipeline.go_to_job('build')
|
||||
end
|
||||
Page::Project::Job::Show.perform do |job|
|
||||
expect(job).to be_successful(timeout: 600)
|
||||
|
||||
job.click_element(:pipeline_path)
|
||||
end
|
||||
|
||||
Page::Project::Pipeline::Show.perform do |pipeline|
|
||||
pipeline.go_to_job('production')
|
||||
end
|
||||
Page::Project::Job::Show.perform do |job|
|
||||
expect(job).to be_successful(timeout: 1200)
|
||||
|
||||
job.click_element(:pipeline_path)
|
||||
end
|
||||
|
||||
Page::Project::Menu.perform(&:click_operations_environments)
|
||||
Page::Project::Operations::Environments::Index.perform do |index|
|
||||
index.go_to_environment('production')
|
||||
end
|
||||
Page::Project::Operations::Environments::Show.perform do |show|
|
||||
show.view_deployment do
|
||||
expect(page).to have_content('Hello World!')
|
||||
end
|
||||
end
|
||||
job.click_element(:pipeline_path)
|
||||
end
|
||||
|
||||
it 'user sets application secret variable and Auto DevOps passes it to container' do
|
||||
# Set an application secret CI variable (prefixed with K8S_SECRET_)
|
||||
Resource::CiVariable.fabricate! do |resource|
|
||||
resource.project = @project
|
||||
resource.key = 'K8S_SECRET_OPTIONAL_MESSAGE'
|
||||
resource.value = 'You can see this application secret'
|
||||
Page::Project::Pipeline::Show.perform do |pipeline|
|
||||
pipeline.go_to_job('test')
|
||||
end
|
||||
Page::Project::Job::Show.perform do |job|
|
||||
expect(job).to be_successful(timeout: 600)
|
||||
|
||||
job.click_element(:pipeline_path)
|
||||
end
|
||||
|
||||
Page::Project::Pipeline::Show.perform do |pipeline|
|
||||
pipeline.go_to_job('production')
|
||||
end
|
||||
Page::Project::Job::Show.perform do |job|
|
||||
expect(job).to be_successful(timeout: 1200)
|
||||
|
||||
job.click_element(:pipeline_path)
|
||||
end
|
||||
|
||||
Page::Project::Menu.perform(&:click_operations_environments)
|
||||
Page::Project::Operations::Environments::Index.perform do |index|
|
||||
index.go_to_environment('production')
|
||||
end
|
||||
Page::Project::Operations::Environments::Show.perform do |show|
|
||||
show.view_deployment do
|
||||
expect(page).to have_content('Hello World!')
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
# Our current Auto DevOps implementation won't update the production
|
||||
# app if we only update a CI variable with no code change.
|
||||
#
|
||||
# Workaround: push new code and use the resultant pipeline.
|
||||
Resource::Repository::ProjectPush.fabricate! do |push|
|
||||
push.project = @project
|
||||
push.commit_message = 'Force a Deployment change by pushing new code'
|
||||
push.file_name = 'new_file.txt'
|
||||
push.file_content = 'new file contents'
|
||||
end
|
||||
it 'user sets application secret variable and Auto DevOps passes it to container' do
|
||||
# Set an application secret CI variable (prefixed with K8S_SECRET_)
|
||||
Resource::CiVariable.fabricate! do |resource|
|
||||
resource.project = @project
|
||||
resource.key = 'K8S_SECRET_OPTIONAL_MESSAGE'
|
||||
resource.value = 'You can see this application secret'
|
||||
end
|
||||
|
||||
@project.visit!
|
||||
Page::Project::Menu.perform(&:click_ci_cd_pipelines)
|
||||
Page::Project::Pipeline::Index.perform(&:go_to_latest_pipeline)
|
||||
# Our current Auto DevOps implementation won't update the production
|
||||
# app if we only update a CI variable with no code change.
|
||||
#
|
||||
# Workaround: push new code and use the resultant pipeline.
|
||||
Resource::Repository::ProjectPush.fabricate! do |push|
|
||||
push.project = @project
|
||||
push.commit_message = 'Force a Deployment change by pushing new code'
|
||||
push.file_name = 'new_file.txt'
|
||||
push.file_content = 'new file contents'
|
||||
end
|
||||
|
||||
Page::Project::Pipeline::Show.perform do |pipeline|
|
||||
pipeline.go_to_job('build')
|
||||
end
|
||||
Page::Project::Job::Show.perform do |job|
|
||||
expect(job).to be_successful(timeout: 600)
|
||||
Page::Project::Menu.perform(&:click_ci_cd_pipelines)
|
||||
Page::Project::Pipeline::Index.perform(&:go_to_latest_pipeline)
|
||||
|
||||
job.click_element(:pipeline_path)
|
||||
end
|
||||
Page::Project::Pipeline::Show.perform do |pipeline|
|
||||
pipeline.go_to_job('build')
|
||||
end
|
||||
Page::Project::Job::Show.perform do |job|
|
||||
expect(job).to be_successful(timeout: 600)
|
||||
|
||||
Page::Project::Pipeline::Show.perform do |pipeline|
|
||||
pipeline.go_to_job('test')
|
||||
end
|
||||
Page::Project::Job::Show.perform do |job|
|
||||
expect(job).to be_successful(timeout: 600)
|
||||
job.click_element(:pipeline_path)
|
||||
end
|
||||
|
||||
job.click_element(:pipeline_path)
|
||||
end
|
||||
Page::Project::Pipeline::Show.perform do |pipeline|
|
||||
pipeline.go_to_job('test')
|
||||
end
|
||||
Page::Project::Job::Show.perform do |job|
|
||||
expect(job).to be_successful(timeout: 600)
|
||||
|
||||
Page::Project::Pipeline::Show.perform do |pipeline|
|
||||
pipeline.go_to_job('production')
|
||||
end
|
||||
Page::Project::Job::Show.perform do |job|
|
||||
expect(job).to be_successful(timeout: 1200)
|
||||
job.click_element(:pipeline_path)
|
||||
end
|
||||
|
||||
job.click_element(:pipeline_path)
|
||||
end
|
||||
Page::Project::Pipeline::Show.perform do |pipeline|
|
||||
pipeline.go_to_job('production')
|
||||
end
|
||||
Page::Project::Job::Show.perform do |job|
|
||||
expect(job).to be_successful(timeout: 1200)
|
||||
end
|
||||
|
||||
Page::Project::Menu.perform(&:click_operations_environments)
|
||||
Page::Project::Menu.perform(&:click_operations_environments)
|
||||
|
||||
Page::Project::Operations::Environments::Index.perform do |index|
|
||||
index.go_to_environment('production')
|
||||
end
|
||||
Page::Project::Operations::Environments::Index.perform do |index|
|
||||
index.go_to_environment('production')
|
||||
end
|
||||
|
||||
Page::Project::Operations::Environments::Show.perform do |show|
|
||||
show.view_deployment do
|
||||
expect(page).to have_content('Hello World!')
|
||||
expect(page).to have_content('You can see this application secret')
|
||||
end
|
||||
Page::Project::Operations::Environments::Show.perform do |show|
|
||||
show.view_deployment do
|
||||
expect(page).to have_content('Hello World!')
|
||||
expect(page).to have_content('You can see this application secret')
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in New Issue