diff options
Diffstat (limited to 'qa/qa/specs/features/api')
11 files changed, 357 insertions, 10 deletions
diff --git a/qa/qa/specs/features/api/3_create/gitaly/automatic_failover_and_recovery_spec.rb b/qa/qa/specs/features/api/3_create/gitaly/automatic_failover_and_recovery_spec.rb index aa06947e93b..90f58090ccd 100644 --- a/qa/qa/specs/features/api/3_create/gitaly/automatic_failover_and_recovery_spec.rb +++ b/qa/qa/specs/features/api/3_create/gitaly/automatic_failover_and_recovery_spec.rb @@ -22,7 +22,7 @@ module QA end end - after(:context) do + after(:context, quarantine: { issue: 'https://gitlab.com/gitlab-org/gitlab/-/issues/238187', type: :stale }) do # Leave the cluster in a suitable state for subsequent tests, # if there was a problem during the tests here praefect_manager.reset_primary_to_original diff --git a/qa/qa/specs/features/api/3_create/gitaly/backend_node_recovery_spec.rb b/qa/qa/specs/features/api/3_create/gitaly/backend_node_recovery_spec.rb index 4515e76539b..6654a35915f 100644 --- a/qa/qa/specs/features/api/3_create/gitaly/backend_node_recovery_spec.rb +++ b/qa/qa/specs/features/api/3_create/gitaly/backend_node_recovery_spec.rb @@ -3,7 +3,7 @@ module QA RSpec.describe 'Create' do context 'Gitaly' do - describe 'Backend node recovery', :orchestrated, :gitaly_cluster, :skip_live_env do + describe 'Backend node recovery', :orchestrated, :gitaly_cluster, :skip_live_env, quarantine: { issue: 'https://gitlab.com/gitlab-org/gitlab/-/issues/238186', type: :investigating } do let(:praefect_manager) { Service::PraefectManager.new } let(:project) do Resource::Project.fabricate! do |project| @@ -22,7 +22,7 @@ module QA praefect_manager.reset_primary_to_original end - it 'recovers from dataloss', quarantine: { issue: 'https://gitlab.com/gitlab-org/gitlab/-/issues/238186', type: :investigating }, testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/978' do + it 'recovers from dataloss', testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/978' do # Create a new project with a commit and wait for it to replicate praefect_manager.wait_for_replication(project.id) diff --git a/qa/qa/specs/features/api/3_create/gitaly/changing_repository_storage_spec.rb b/qa/qa/specs/features/api/3_create/gitaly/changing_repository_storage_spec.rb index 758ba582929..e96b9ad9258 100644 --- a/qa/qa/specs/features/api/3_create/gitaly/changing_repository_storage_spec.rb +++ b/qa/qa/specs/features/api/3_create/gitaly/changing_repository_storage_spec.rb @@ -4,7 +4,6 @@ module QA RSpec.describe 'Create' do describe 'Changing Gitaly repository storage', :requires_admin do praefect_manager = Service::PraefectManager.new - praefect_manager.gitlab = 'gitlab' shared_examples 'repository storage move' do it 'confirms a `finished` status after moving project repository storage' do @@ -28,7 +27,6 @@ module QA context 'when moving from one Gitaly storage to another', :orchestrated, :repository_storage, testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/973' do let(:source_storage) { { type: :gitaly, name: 'default' } } let(:destination_storage) { { type: :gitaly, name: QA::Runtime::Env.additional_repository_storage } } - let(:project) do Resource::Project.fabricate_via_api! do |project| project.name = 'repo-storage-move-status' @@ -37,6 +35,10 @@ module QA end end + before do + praefect_manager.gitlab = 'gitlab' + end + it_behaves_like 'repository storage move' end @@ -46,7 +48,6 @@ module QA context 'when moving from Gitaly to Gitaly Cluster', :requires_praefect, testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/974' do let(:source_storage) { { type: :gitaly, name: QA::Runtime::Env.non_cluster_repository_storage } } let(:destination_storage) { { type: :praefect, name: QA::Runtime::Env.praefect_repository_storage } } - let(:project) do Resource::Project.fabricate_via_api! do |project| project.name = 'repo-storage-move' @@ -56,6 +57,10 @@ module QA end end + before do + praefect_manager.gitlab = 'gitlab-gitaly-cluster' + end + it_behaves_like 'repository storage move' end end diff --git a/qa/qa/specs/features/api/3_create/gitaly/distributed_reads_spec.rb b/qa/qa/specs/features/api/3_create/gitaly/distributed_reads_spec.rb index 29f131ac322..c3cb503ed3f 100644 --- a/qa/qa/specs/features/api/3_create/gitaly/distributed_reads_spec.rb +++ b/qa/qa/specs/features/api/3_create/gitaly/distributed_reads_spec.rb @@ -17,12 +17,12 @@ module QA end before do - Runtime::Feature.enable_and_verify('gitaly_distributed_reads') + Runtime::Feature.enable(:gitaly_distributed_reads) praefect_manager.wait_for_replication(project.id) end after do - Runtime::Feature.disable_and_verify('gitaly_distributed_reads') + Runtime::Feature.disable(:gitaly_distributed_reads) end it 'reads from each node', testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/979' do diff --git a/qa/qa/specs/features/api/3_create/merge_request/push_options_labels_spec.rb b/qa/qa/specs/features/api/3_create/merge_request/push_options_labels_spec.rb new file mode 100644 index 00000000000..82a06780830 --- /dev/null +++ b/qa/qa/specs/features/api/3_create/merge_request/push_options_labels_spec.rb @@ -0,0 +1,64 @@ +# frozen_string_literal: true + +module QA + RSpec.describe 'Create' do + describe 'Merge request push options' do + # If run locally on GDK, push options need to be enabled on the host with the following command: + # + # git config --global receive.advertisepushoptions true + + branch = "push-options-test-#{SecureRandom.hex(8)}" + title = "MR push options test #{SecureRandom.hex(8)}" + commit_message = 'Add README.md' + + project = Resource::Project.fabricate_via_api! do |project| + project.name = 'merge-request-push-options' + project.initialize_with_readme = true + end + + it 'sets labels', testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/1032' do + Resource::Repository::ProjectPush.fabricate! do |push| + push.project = project + push.commit_message = commit_message + push.branch_name = branch + push.merge_request_push_options = { + create: true, + title: title, + label: %w[one two three] + } + end + + merge_request = project.merge_request_with_title(title) + + expect(merge_request).not_to be_nil, "There was a problem creating the merge request" + expect(merge_request[:labels]).to include('one').and include('two').and include('three') + end + + context 'when labels are set already' do + it 'removes them', testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/1033' do + Resource::Repository::ProjectPush.fabricate! do |push| + push.project = project + push.file_content = "Unlabel test #{SecureRandom.hex(8)}" + push.commit_message = commit_message + push.branch_name = branch + push.new_branch = false + push.merge_request_push_options = { + title: title, + unlabel: %w[one three] + } + end + + merge_request = project.merge_request_with_title(title) + + expect(merge_request).not_to be_nil, "There was a problem creating the merge request" + + aggregate_failures do + expect(merge_request[:labels]).to include('two') + expect(merge_request[:labels]).not_to include('one') + expect(merge_request[:labels]).not_to include('three') + end + end + end + end + end +end diff --git a/qa/qa/specs/features/api/3_create/merge_request/push_options_mwps_spec.rb b/qa/qa/specs/features/api/3_create/merge_request/push_options_mwps_spec.rb new file mode 100644 index 00000000000..dde4708874d --- /dev/null +++ b/qa/qa/specs/features/api/3_create/merge_request/push_options_mwps_spec.rb @@ -0,0 +1,124 @@ +# frozen_string_literal: true + +module QA + RSpec.describe 'Create' do + describe 'Merge request push options' do + # If run locally on GDK, push options need to be enabled on the host with the following command: + # + # git config --global receive.advertisepushoptions true + + let(:branch) { "push-options-test-#{SecureRandom.hex(8)}" } + let(:title) { "MR push options test #{SecureRandom.hex(8)}" } + + let(:project) do + Resource::Project.fabricate_via_api! do |project| + project.name = 'merge-request-push-options' + project.initialize_with_readme = true + end + end + + let!(:runner) do + Resource::Runner.fabricate! do |runner| + runner.project = project + runner.name = "runner-for-#{project.name}" + runner.tags = ["runner-for-#{project.name}"] + end + end + + after do + runner.remove_via_api! + end + + it 'sets merge when pipeline succeeds', testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/1037' do + Resource::Repository::Commit.fabricate_via_api! do |commit| + commit.project = project + commit.commit_message = 'Add .gitlab-ci.yml' + commit.add_files( + [ + { + file_path: '.gitlab-ci.yml', + content: <<~YAML + no-op: + tags: + - "runner-for-#{project.name}" + script: sleep 999 # Leave the pipeline pending + YAML + } + ] + ) + end + + Resource::Repository::ProjectPush.fabricate! do |push| + push.project = project + push.branch_name = branch + push.merge_request_push_options = { + create: true, + merge_when_pipeline_succeeds: true, + title: title + } + end + + merge_request = project.merge_request_with_title(title) + + expect(merge_request).not_to be_nil, "There was a problem creating the merge request" + + merge_request = Resource::MergeRequest.fabricate_via_api! do |mr| + mr.project = project + mr.id = merge_request[:iid] + end + + expect(merge_request.state).to eq('opened') + expect(merge_request.merge_status).to eq('checking') + expect(merge_request.merge_when_pipeline_succeeds).to be true + end + + it 'merges when pipeline succeeds', testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/1036' do + Resource::Repository::Commit.fabricate_via_api! do |commit| + commit.project = project + commit.commit_message = 'Add .gitlab-ci.yml' + commit.add_files( + [ + { + file_path: '.gitlab-ci.yml', + content: <<~YAML + no-op: + tags: + - "runner-for-#{project.name}" + script: echo 'OK' + YAML + } + ] + ) + end + + Resource::Repository::ProjectPush.fabricate! do |push| + push.project = project + push.branch_name = branch + push.merge_request_push_options = { + create: true, + merge_when_pipeline_succeeds: true, + title: title + } + end + + merge_request = project.merge_request_with_title(title) + + expect(merge_request).not_to be_nil, "There was a problem creating the merge request" + expect(merge_request[:merge_when_pipeline_succeeds]).to be true + + merge_request = Support::Waiter.wait_until(sleep_interval: 5) do + mr = Resource::MergeRequest.fabricate_via_api! do |mr| + mr.project = project + mr.id = merge_request[:iid] + end + + next unless mr.state == 'merged' + + mr + end + + expect(merge_request.state).to eq('merged') + end + end + end +end diff --git a/qa/qa/specs/features/api/3_create/merge_request/push_options_remove_source_branch_spec.rb b/qa/qa/specs/features/api/3_create/merge_request/push_options_remove_source_branch_spec.rb new file mode 100644 index 00000000000..d6bd668fa8a --- /dev/null +++ b/qa/qa/specs/features/api/3_create/merge_request/push_options_remove_source_branch_spec.rb @@ -0,0 +1,45 @@ +# frozen_string_literal: true + +module QA + RSpec.describe 'Create' do + describe 'Merge request push options' do + # If run locally on GDK, push options need to be enabled on the host with the following command: + # + # git config --global receive.advertisepushoptions true + + let(:branch) { "push-options-test-#{SecureRandom.hex(8)}" } + let(:title) { "MR push options test #{SecureRandom.hex(8)}" } + + let(:project) do + Resource::Project.fabricate_via_api! do |project| + project.name = 'merge-request-push-options' + project.initialize_with_readme = true + end + end + + it 'removes the source branch', testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/1035' do + Resource::Repository::ProjectPush.fabricate! do |push| + push.project = project + push.branch_name = branch + push.merge_request_push_options = { + create: true, + remove_source_branch: true, + title: title + } + end + + merge_request = project.merge_request_with_title(title) + + expect(merge_request).not_to be_nil, "There was a problem creating the merge request" + + merge_request = Resource::MergeRequest.fabricate_via_api! do |mr| + mr.project = project + mr.id = merge_request[:iid] + end.merge_via_api! + + expect(merge_request[:state]).to eq('merged') + expect(project).not_to have_branch(branch) + end + end + end +end diff --git a/qa/qa/specs/features/api/3_create/merge_request/push_options_target_branch_spec.rb b/qa/qa/specs/features/api/3_create/merge_request/push_options_target_branch_spec.rb new file mode 100644 index 00000000000..6072fd8c1a2 --- /dev/null +++ b/qa/qa/specs/features/api/3_create/merge_request/push_options_target_branch_spec.rb @@ -0,0 +1,53 @@ +# frozen_string_literal: true + +module QA + RSpec.describe 'Create' do + describe 'Merge request push options' do + # If run locally on GDK, push options need to be enabled on the host with the following command: + # + # git config --global receive.advertisepushoptions true + + let(:title) { "MR push options test #{SecureRandom.hex(8)}" } + + let(:project) do + Resource::Project.fabricate_via_api! do |project| + project.name = 'merge-request-push-options' + project.initialize_with_readme = true + end + end + + it 'sets a target branch', testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/1034' do + target_branch = "push-options-test-target-#{SecureRandom.hex(8)}" + + Resource::Repository::ProjectPush.fabricate! do |push| + push.project = project + push.branch_name = target_branch + push.file_content = "Target branch test target branch #{SecureRandom.hex(8)}" + end + + Resource::Repository::ProjectPush.fabricate! do |push| + push.project = project + push.branch_name = "push-options-test-#{SecureRandom.hex(8)}" + push.file_content = "Target branch test source branch #{SecureRandom.hex(8)}" + push.merge_request_push_options = { + create: true, + title: title, + target: target_branch + } + end + + merge_request = project.merge_request_with_title(title) + + expect(merge_request).not_to be_nil, "There was a problem creating the merge request" + expect(merge_request[:target_branch]).to eq(target_branch) + + merge_request = Resource::MergeRequest.fabricate_via_api! do |mr| + mr.project = project + mr.id = merge_request[:iid] + end.merge_via_api! + + expect(merge_request[:state]).to eq('merged') + end + end + end +end diff --git a/qa/qa/specs/features/api/3_create/merge_request/push_options_title_description_spec.rb b/qa/qa/specs/features/api/3_create/merge_request/push_options_title_description_spec.rb new file mode 100644 index 00000000000..f49a8a229dc --- /dev/null +++ b/qa/qa/specs/features/api/3_create/merge_request/push_options_title_description_spec.rb @@ -0,0 +1,49 @@ +# frozen_string_literal: true + +module QA + RSpec.describe 'Create' do + describe 'Merge request push options' do + # If run locally on GDK, push options need to be enabled on the host with the following command: + # + # git config --global receive.advertisepushoptions true + + let(:project) do + Resource::Project.fabricate_via_api! do |project| + project.name = 'merge-request-push-options' + project.initialize_with_readme = true + end + end + + it 'sets title and description', testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/1038' do + description = "This is a test of MR push options" + title = "MR push options test #{SecureRandom.hex(8)}" + + Resource::Repository::ProjectPush.fabricate! do |push| + push.project = project + push.branch_name = "push-options-test-#{SecureRandom.hex(8)}" + push.merge_request_push_options = { + create: true, + title: title, + description: description + } + end + + merge_request = project.merge_request_with_title(title) + + expect(merge_request).not_to be_nil, "There was a problem creating the merge request" + + aggregate_failures do + expect(merge_request[:title]).to eq(title) + expect(merge_request[:description]).to eq(description) + end + + merge_request = Resource::MergeRequest.fabricate_via_api! do |mr| + mr.project = project + mr.id = merge_request[:iid] + end.merge_via_api! + + expect(merge_request[:state]).to eq('merged') + end + end + end +end diff --git a/qa/qa/specs/features/api/3_create/repository/default_branch_name_setting_spec.rb b/qa/qa/specs/features/api/3_create/repository/default_branch_name_setting_spec.rb index af155b22618..f86bbee05c2 100644 --- a/qa/qa/specs/features/api/3_create/repository/default_branch_name_setting_spec.rb +++ b/qa/qa/specs/features/api/3_create/repository/default_branch_name_setting_spec.rb @@ -13,7 +13,7 @@ module QA Runtime::ApplicationSettings.restore_application_settings(:default_branch_name) end - it 'sets the default branch name for a new project' do + it 'sets the default branch name for a new project', testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/1018' do project = Resource::Project.fabricate_via_api! do |project| project.name = "default-branch-name" project.initialize_with_readme = true @@ -32,7 +32,7 @@ module QA end end - it 'allows a project to be created via the CLI with a different default branch name' do + it 'allows a project to be created via the CLI with a different default branch name', testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/1019' do project_name = "default-branch-name-via-cli-#{SecureRandom.hex(8)}" group = Resource::Group.fabricate_via_api! diff --git a/qa/qa/specs/features/api/3_create/repository/project_archive_compare_spec.rb b/qa/qa/specs/features/api/3_create/repository/project_archive_compare_spec.rb index 4bd99b4820e..548933d2cde 100644 --- a/qa/qa/specs/features/api/3_create/repository/project_archive_compare_spec.rb +++ b/qa/qa/specs/features/api/3_create/repository/project_archive_compare_spec.rb @@ -28,6 +28,13 @@ module QA end end + after do + # Delete the .netrc file created during this test so that subsequent tests don't try to use the logins + Git::Repository.perform do |repository| + repository.delete_netrc + end + end + it 'download archives of each user project then check they are different', testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/427' do archive_checksums = {} |