Merge branch '340869_add_different_auth_tokens_in_maven_scenario' into 'master'
Update maven repository QA spec See merge request gitlab-org/gitlab!74067
This commit is contained in:
commit
5078f4b054
|
@ -43,7 +43,7 @@ def duplicates_enabled?
|
|||
|
||||
def with_allow_duplicates_button
|
||||
within_element :allow_duplicates_toggle do
|
||||
toggle = find('button.gl-toggle')
|
||||
toggle = find('button.gl-toggle:not(.is-disabled)')
|
||||
yield(toggle)
|
||||
end
|
||||
end
|
||||
|
|
|
@ -3,77 +3,56 @@
|
|||
module QA
|
||||
RSpec.describe 'Package', :orchestrated, :packages, :object_storage do
|
||||
describe 'Maven Repository' do
|
||||
using RSpec::Parameterized::TableSyntax
|
||||
include Runtime::Fixtures
|
||||
include_context 'packages registry qa scenario'
|
||||
|
||||
let(:group_id) { 'com.gitlab.qa' }
|
||||
let(:artifact_id) { "maven-#{SecureRandom.hex(8)}" }
|
||||
let(:another_artifact_id) { "maven-#{SecureRandom.hex(8)}" }
|
||||
let(:package_name) { "#{group_id}/#{artifact_id}".tr('.', '/') }
|
||||
let(:auth_token) do
|
||||
unless Page::Main::Menu.perform(&:signed_in?)
|
||||
Flow::Login.sign_in
|
||||
let(:package_version) { '1.3.7' }
|
||||
let(:package_type) { 'maven' }
|
||||
|
||||
let(:package_gitlab_ci_file) do
|
||||
{
|
||||
file_path: '.gitlab-ci.yml',
|
||||
content:
|
||||
<<~YAML
|
||||
deploy:
|
||||
image: maven:3.6-jdk-11
|
||||
script:
|
||||
- 'mvn deploy -s settings.xml'
|
||||
only:
|
||||
- "#{package_project.default_branch}"
|
||||
tags:
|
||||
- "runner-for-#{package_project.group.name}"
|
||||
YAML
|
||||
}
|
||||
end
|
||||
|
||||
Resource::PersonalAccessToken.fabricate!.token
|
||||
end
|
||||
|
||||
let(:project) do
|
||||
Resource::Project.fabricate_via_api! do |project|
|
||||
project.name = 'maven-package-project'
|
||||
end
|
||||
end
|
||||
|
||||
let(:another_project) do
|
||||
Resource::Project.fabricate_via_api! do |another_project|
|
||||
another_project.name = 'another-maven-package-project'
|
||||
another_project.group = project.group
|
||||
end
|
||||
end
|
||||
|
||||
let(:package) do
|
||||
Resource::Package.init do |package|
|
||||
package.name = package_name
|
||||
package.project = project
|
||||
end
|
||||
end
|
||||
|
||||
let!(:runner) do
|
||||
Resource::Runner.fabricate! do |runner|
|
||||
runner.name = "qa-runner-#{Time.now.to_i}"
|
||||
runner.tags = ["runner-for-#{project.group.name}"]
|
||||
runner.executor = :docker
|
||||
runner.token = project.group.runners_token
|
||||
end
|
||||
end
|
||||
|
||||
let!(:gitlab_address_with_port) do
|
||||
uri = URI.parse(Runtime::Scenario.gitlab_address)
|
||||
"#{uri.scheme}://#{uri.host}:#{uri.port}"
|
||||
end
|
||||
|
||||
let(:pom_xml) do
|
||||
let(:package_pom_file) do
|
||||
{
|
||||
file_path: 'pom.xml',
|
||||
content: <<~XML
|
||||
<project>
|
||||
<groupId>#{group_id}</groupId>
|
||||
<artifactId>#{artifact_id}</artifactId>
|
||||
<version>1.0</version>
|
||||
<version>#{package_version}</version>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<repositories>
|
||||
<repository>
|
||||
<id>#{project.name}</id>
|
||||
<url>#{gitlab_address_with_port}/api/v4/groups/#{project.group.id}/-/packages/maven</url>
|
||||
<id>#{package_project.name}</id>
|
||||
<url>#{gitlab_address_with_port}/api/v4/groups/#{package_project.group.id}/-/packages/maven</url>
|
||||
</repository>
|
||||
</repositories>
|
||||
<distributionManagement>
|
||||
<repository>
|
||||
<id>#{project.name}</id>
|
||||
<url>#{gitlab_address_with_port}/api/v4/projects/#{project.id}/packages/maven</url>
|
||||
<id>#{package_project.name}</id>
|
||||
<url>#{gitlab_address_with_port}/api/v4/projects/#{package_project.id}/packages/maven</url>
|
||||
</repository>
|
||||
<snapshotRepository>
|
||||
<id>#{project.name}</id>
|
||||
<url>#{gitlab_address_with_port}/api/v4/projects/#{project.id}/packages/maven</url>
|
||||
<id>#{package_project.name}</id>
|
||||
<url>#{gitlab_address_with_port}/api/v4/projects/#{package_project.id}/packages/maven</url>
|
||||
</snapshotRepository>
|
||||
</distributionManagement>
|
||||
</project>
|
||||
|
@ -81,36 +60,43 @@ module QA
|
|||
}
|
||||
end
|
||||
|
||||
let(:pom_xml_another_project) do
|
||||
let(:client_gitlab_ci_file) do
|
||||
{
|
||||
file_path: '.gitlab-ci.yml',
|
||||
content:
|
||||
<<~YAML
|
||||
install:
|
||||
image: maven:3.6-jdk-11
|
||||
script:
|
||||
- "mvn install -s settings.xml"
|
||||
only:
|
||||
- "#{client_project.default_branch}"
|
||||
tags:
|
||||
- "runner-for-#{client_project.group.name}"
|
||||
YAML
|
||||
}
|
||||
end
|
||||
|
||||
let(:client_pom_file) do
|
||||
{
|
||||
file_path: 'pom.xml',
|
||||
content: <<~XML
|
||||
<project>
|
||||
<groupId>#{group_id}</groupId>
|
||||
<artifactId>#{another_artifact_id}</artifactId>
|
||||
<artifactId>maven_client</artifactId>
|
||||
<version>1.0</version>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<repositories>
|
||||
<repository>
|
||||
<id>#{another_project.name}</id>
|
||||
<url>#{gitlab_address_with_port}/api/v4/groups/#{another_project.group.id}/-/packages/maven</url>
|
||||
<id>#{package_project.name}</id>
|
||||
<url>#{gitlab_address_with_port}/api/v4/groups/#{package_project.group.id}/-/packages/maven</url>
|
||||
</repository>
|
||||
</repositories>
|
||||
<distributionManagement>
|
||||
<repository>
|
||||
<id>#{another_project.name}</id>
|
||||
<url>#{gitlab_address_with_port}/api/v4/projects/#{another_project.id}/packages/maven</url>
|
||||
</repository>
|
||||
<snapshotRepository>
|
||||
<id>#{another_project.name}</id>
|
||||
<url>#{gitlab_address_with_port}/api/v4/projects/#{another_project.id}/packages/maven</url>
|
||||
</snapshotRepository>
|
||||
</distributionManagement>
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>#{group_id}</groupId>
|
||||
<artifactId>#{artifact_id}</artifactId>
|
||||
<version>1.0</version>
|
||||
<version>#{package_version}</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</project>
|
||||
|
@ -118,7 +104,7 @@ module QA
|
|||
}
|
||||
end
|
||||
|
||||
let(:settings_xml) do
|
||||
let(:settings_xml_with_pat) do
|
||||
{
|
||||
file_path: 'settings.xml',
|
||||
content: <<~XML
|
||||
|
@ -126,12 +112,12 @@ module QA
|
|||
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.1.0 http://maven.apache.org/xsd/settings-1.1.0.xsd">
|
||||
<servers>
|
||||
<server>
|
||||
<id>#{project.name}</id>
|
||||
<id>#{package_project.name}</id>
|
||||
<configuration>
|
||||
<httpHeaders>
|
||||
<property>
|
||||
<name>Private-Token</name>
|
||||
<value>#{auth_token}</value>
|
||||
<value>#{personal_access_token}</value>
|
||||
</property>
|
||||
</httpHeaders>
|
||||
</configuration>
|
||||
|
@ -142,59 +128,62 @@ module QA
|
|||
}
|
||||
end
|
||||
|
||||
let(:gitlab_ci_deploy_yml) do
|
||||
where(:authentication_token_type, :maven_header_name) do
|
||||
:personal_access_token | 'Private-Token'
|
||||
:ci_job_token | 'Job-Token'
|
||||
:project_deploy_token | 'Deploy-Token'
|
||||
end
|
||||
|
||||
with_them do
|
||||
let(:token) do
|
||||
case authentication_token_type
|
||||
when :personal_access_token
|
||||
personal_access_token
|
||||
when :ci_job_token
|
||||
'${env.CI_JOB_TOKEN}'
|
||||
when :project_deploy_token
|
||||
project_deploy_token.password
|
||||
end
|
||||
end
|
||||
|
||||
let(:settings_xml) do
|
||||
{
|
||||
file_path: '.gitlab-ci.yml',
|
||||
content:
|
||||
<<~YAML
|
||||
deploy:
|
||||
image: maven:3.6-jdk-11
|
||||
script:
|
||||
- 'mvn deploy -s settings.xml'
|
||||
- "mvn dependency:get -Dartifact=#{group_id}:#{artifact_id}:1.0"
|
||||
only:
|
||||
- "#{project.default_branch}"
|
||||
tags:
|
||||
- "runner-for-#{project.group.name}"
|
||||
YAML
|
||||
file_path: 'settings.xml',
|
||||
content: <<~XML
|
||||
<settings xmlns="http://maven.apache.org/SETTINGS/1.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.1.0 http://maven.apache.org/xsd/settings-1.1.0.xsd">
|
||||
<servers>
|
||||
<server>
|
||||
<id>#{package_project.name}</id>
|
||||
<configuration>
|
||||
<httpHeaders>
|
||||
<property>
|
||||
<name>#{maven_header_name}</name>
|
||||
<value>#{token}</value>
|
||||
</property>
|
||||
</httpHeaders>
|
||||
</configuration>
|
||||
</server>
|
||||
</servers>
|
||||
</settings>
|
||||
XML
|
||||
}
|
||||
end
|
||||
|
||||
let(:gitlab_ci_install_yml) do
|
||||
{
|
||||
file_path: '.gitlab-ci.yml',
|
||||
content:
|
||||
<<~YAML
|
||||
install:
|
||||
image: maven:3.6-jdk-11
|
||||
script:
|
||||
- "mvn install"
|
||||
only:
|
||||
- "#{project.default_branch}"
|
||||
tags:
|
||||
- "runner-for-#{another_project.group.name}"
|
||||
YAML
|
||||
}
|
||||
end
|
||||
|
||||
after do
|
||||
runner.remove_via_api!
|
||||
project.remove_via_api!
|
||||
another_project.remove_via_api!
|
||||
end
|
||||
|
||||
it 'pushes and pulls a Maven package via CI and deletes it', testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/quality/test_cases/1627' do
|
||||
it "pushes and pulls a maven package via maven using #{params[:authentication_token_type]}" do
|
||||
# pushing
|
||||
Resource::Repository::Commit.fabricate_via_api! do |commit|
|
||||
commit.project = project
|
||||
commit.project = package_project
|
||||
commit.commit_message = 'Add .gitlab-ci.yml'
|
||||
commit.add_files([
|
||||
gitlab_ci_deploy_yml,
|
||||
settings_xml,
|
||||
pom_xml
|
||||
package_gitlab_ci_file,
|
||||
package_pom_file,
|
||||
settings_xml
|
||||
])
|
||||
end
|
||||
|
||||
project.visit!
|
||||
package_project.visit!
|
||||
|
||||
Flow::Pipeline.visit_latest_pipeline
|
||||
|
||||
Page::Project::Pipeline::Show.perform do |pipeline|
|
||||
|
@ -205,28 +194,6 @@ module QA
|
|||
expect(job).to be_successful(timeout: 800)
|
||||
end
|
||||
|
||||
Resource::Repository::Commit.fabricate_via_api! do |commit|
|
||||
commit.project = another_project
|
||||
commit.commit_message = 'Add .gitlab-ci.yml'
|
||||
commit.add_files([
|
||||
gitlab_ci_install_yml,
|
||||
pom_xml_another_project
|
||||
])
|
||||
end
|
||||
|
||||
another_project.visit!
|
||||
Flow::Pipeline.visit_latest_pipeline
|
||||
|
||||
Page::Project::Pipeline::Show.perform do |pipeline|
|
||||
pipeline.click_job('install')
|
||||
end
|
||||
|
||||
Page::Project::Job::Show.perform do |job|
|
||||
expect(job).to be_successful(timeout: 800)
|
||||
end
|
||||
|
||||
project.visit!
|
||||
|
||||
Page::Project::Menu.perform(&:click_packages_link)
|
||||
|
||||
Page::Project::Packages::Index.perform do |index|
|
||||
|
@ -236,105 +203,115 @@ module QA
|
|||
end
|
||||
|
||||
Page::Project::Packages::Show.perform do |show|
|
||||
expect(show).to have_package_info(package_name, "1.0")
|
||||
show.click_delete
|
||||
end
|
||||
|
||||
Page::Project::Packages::Index.perform do |index|
|
||||
expect(index).to have_content("Package deleted successfully")
|
||||
expect(index).not_to have_package(package_name)
|
||||
end
|
||||
end
|
||||
|
||||
context 'when "allow duplicate" setting is disabled' do
|
||||
before do
|
||||
Flow::Login.sign_in
|
||||
|
||||
project.group.visit!
|
||||
|
||||
Page::Group::Menu.perform(&:go_to_package_settings)
|
||||
Page::Group::Settings::PackageRegistries.perform(&:set_allow_duplicates_disabled)
|
||||
end
|
||||
|
||||
it 'prevents users from publishing duplicate Maven packages at the group level', testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/quality/test_cases/1830' do
|
||||
with_fixtures([pom_xml, settings_xml]) do |dir|
|
||||
Service::DockerRun::Maven.new(dir).publish!
|
||||
end
|
||||
|
||||
project.visit!
|
||||
Page::Project::Menu.perform(&:click_packages_link)
|
||||
|
||||
Page::Project::Packages::Index.perform do |index|
|
||||
expect(index).to have_package(package_name)
|
||||
expect(show).to have_package_info(package_name, package_version)
|
||||
end
|
||||
|
||||
# pulling
|
||||
Resource::Repository::Commit.fabricate_via_api! do |commit|
|
||||
commit.project = another_project
|
||||
commit.project = client_project
|
||||
commit.commit_message = 'Add .gitlab-ci.yml'
|
||||
commit.add_files([
|
||||
gitlab_ci_deploy_yml,
|
||||
settings_xml,
|
||||
pom_xml
|
||||
client_gitlab_ci_file,
|
||||
client_pom_file,
|
||||
settings_xml
|
||||
])
|
||||
end
|
||||
|
||||
another_project.visit!
|
||||
client_project.visit!
|
||||
|
||||
Flow::Pipeline.visit_latest_pipeline
|
||||
|
||||
Page::Project::Pipeline::Show.perform do |pipeline|
|
||||
pipeline.click_job('deploy')
|
||||
pipeline.click_job('install')
|
||||
end
|
||||
|
||||
Page::Project::Job::Show.perform do |job|
|
||||
expect(job).to be_successful(timeout: 800)
|
||||
end
|
||||
end
|
||||
|
||||
context 'duplication setting' do
|
||||
before do
|
||||
package_project.group.visit!
|
||||
|
||||
Page::Group::Menu.perform(&:go_to_package_settings)
|
||||
end
|
||||
|
||||
context 'when disabled' do
|
||||
before do
|
||||
Page::Group::Settings::PackageRegistries.perform(&:set_allow_duplicates_disabled)
|
||||
end
|
||||
|
||||
it "prevents users from publishing group level Maven packages duplicates using #{params[:authentication_token_type]}" do
|
||||
create_duplicated_package
|
||||
|
||||
push_duplicated_package
|
||||
|
||||
client_project.visit!
|
||||
|
||||
show_latest_deploy_job
|
||||
|
||||
Page::Project::Job::Show.perform do |job|
|
||||
expect(job).not_to be_successful(timeout: 800)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
context 'when "allow duplicate" setting is enabled' do
|
||||
context 'when enabled' do
|
||||
before do
|
||||
Flow::Login.sign_in
|
||||
|
||||
project.group.visit!
|
||||
|
||||
Page::Group::Menu.perform(&:go_to_package_settings)
|
||||
Page::Group::Settings::PackageRegistries.perform(&:set_allow_duplicates_enabled)
|
||||
end
|
||||
|
||||
it 'allows users to publish duplicate Maven packages at the group level', testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/quality/test_cases/1829' do
|
||||
with_fixtures([pom_xml, settings_xml]) do |dir|
|
||||
Service::DockerRun::Maven.new(dir).publish!
|
||||
end
|
||||
it "allows users to publish group level Maven packages duplicates using #{params[:authentication_token_type]}" do
|
||||
create_duplicated_package
|
||||
|
||||
project.visit!
|
||||
Page::Project::Menu.perform(&:click_packages_link)
|
||||
push_duplicated_package
|
||||
|
||||
Page::Project::Packages::Index.perform do |index|
|
||||
expect(index).to have_package(package_name)
|
||||
end
|
||||
|
||||
Resource::Repository::Commit.fabricate_via_api! do |commit|
|
||||
commit.project = another_project
|
||||
commit.commit_message = 'Add .gitlab-ci.yml'
|
||||
commit.add_files([
|
||||
gitlab_ci_deploy_yml,
|
||||
settings_xml,
|
||||
pom_xml
|
||||
])
|
||||
end
|
||||
|
||||
another_project.visit!
|
||||
Flow::Pipeline.visit_latest_pipeline
|
||||
|
||||
Page::Project::Pipeline::Show.perform do |pipeline|
|
||||
pipeline.click_job('deploy')
|
||||
end
|
||||
show_latest_deploy_job
|
||||
|
||||
Page::Project::Job::Show.perform do |job|
|
||||
expect(job).to be_successful(timeout: 800)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def create_duplicated_package
|
||||
with_fixtures([package_pom_file, settings_xml_with_pat]) do |dir|
|
||||
Service::DockerRun::Maven.new(dir).publish!
|
||||
end
|
||||
|
||||
package_project.visit!
|
||||
|
||||
Page::Project::Menu.perform(&:click_packages_link)
|
||||
|
||||
Page::Project::Packages::Index.perform do |index|
|
||||
expect(index).to have_package(package_name)
|
||||
end
|
||||
end
|
||||
|
||||
def push_duplicated_package
|
||||
Resource::Repository::Commit.fabricate_via_api! do |commit|
|
||||
commit.project = client_project
|
||||
commit.commit_message = 'Add .gitlab-ci.yml'
|
||||
commit.add_files([
|
||||
package_gitlab_ci_file,
|
||||
package_pom_file,
|
||||
settings_xml
|
||||
])
|
||||
end
|
||||
end
|
||||
|
||||
def show_latest_deploy_job
|
||||
client_project.visit!
|
||||
|
||||
Flow::Pipeline.visit_latest_pipeline
|
||||
|
||||
Page::Project::Pipeline::Show.perform do |pipeline|
|
||||
pipeline.click_job('deploy')
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -43,7 +43,7 @@ module QA
|
|||
|
||||
let(:project_deploy_token) do
|
||||
Resource::DeployToken.fabricate_via_browser_ui! do |deploy_token|
|
||||
deploy_token.name = 'helm-package-deploy-token'
|
||||
deploy_token.name = 'package-deploy-token'
|
||||
deploy_token.project = package_project
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in a new issue