gitlab-qa 7.4.0 → 7.7.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitlab-ci.yml +68 -69
- data/bin/notify_upstream_commit +8 -1
- data/docs/run_qa_against_gdk.md +5 -5
- data/docs/what_tests_can_be_run.md +10 -1
- data/gitlab-qa.gemspec +1 -0
- data/lib/gitlab/qa.rb +2 -0
- data/lib/gitlab/qa/report/generate_test_session.rb +4 -1
- data/lib/gitlab/qa/runtime/env.rb +28 -5
- data/lib/gitlab/qa/runtime/omnibus_configurations/object_storage_aws.rb +30 -0
- data/lib/gitlab/qa/scenario/test/instance/airgapped.rb +5 -5
- data/lib/gitlab/qa/scenario/test/integration/gitaly_cluster.rb +16 -15
- data/lib/gitlab/qa/scenario/test/integration/praefect.rb +1 -0
- data/lib/gitlab/qa/scenario/test/integration/registry.rb +44 -0
- data/lib/gitlab/qa/version.rb +1 -1
- metadata +19 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b1ca7555b9f98741e143d9fc7e4a0b2cf222dc6f09358f39d23a793ff0e68afa
|
4
|
+
data.tar.gz: 1a114120fb17750c0e3a1ecdb64e0e04a1aba706df0677ae245887e2a67558cb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: '04937666da2a6ebbdc99a5f4f121eff130dbf1540447a51691736243c93e1eb3ce5bbd63f17ede7d293fe77789f6f72bf5c9ab2ca556217d4c34821f40ba4ac0'
|
7
|
+
data.tar.gz: 6dac435397a5de6d3aba5596dc7b3faa0eba15076f957d6d268d5be88547e670ee97db24f00b58d33fc48547d9eda4c0eb0769fada06f2837cebdd947573c00c
|
data/.gitlab-ci.yml
CHANGED
@@ -44,6 +44,7 @@ variables:
|
|
44
44
|
QA_ARTIFACTS_DIR: $CI_PROJECT_DIR
|
45
45
|
QA_CAN_TEST_GIT_PROTOCOL_V2: "true"
|
46
46
|
QA_CAN_TEST_PRAEFECT: "false"
|
47
|
+
QA_GENERATE_ALLURE_REPORT: "true"
|
47
48
|
QA_TESTCASES_REPORTING_PROJECT: "gitlab-org/quality/testcases"
|
48
49
|
QA_TESTCASE_SESSIONS_PROJECT: "gitlab-org/quality/testcase-sessions"
|
49
50
|
# QA_DEFAULT_BRANCH is the default branch name of the instance under test.
|
@@ -153,7 +154,10 @@ rspec:
|
|
153
154
|
variables:
|
154
155
|
QA_RSPEC_TAGS: "--tag quarantine"
|
155
156
|
|
157
|
+
# Do not generate allure report since it always adds a failed test to the report. The job runs a test where 1 example would always fail and assert exit code via custom script bin/expect_exit_code_and_text
|
156
158
|
ce:sanity-framework:
|
159
|
+
variables:
|
160
|
+
QA_GENERATE_ALLURE_REPORT: "false"
|
157
161
|
script:
|
158
162
|
- ./bin/expect_exit_code_and_text "bundle exec exe/gitlab-qa Test::Instance::Image ${RELEASE:=CE} -- --tag framework" 1 "2 examples, 1 failure"
|
159
163
|
extends:
|
@@ -162,6 +166,8 @@ ce:sanity-framework:
|
|
162
166
|
- .ce-qa
|
163
167
|
|
164
168
|
ee:sanity-framework:
|
169
|
+
variables:
|
170
|
+
QA_GENERATE_ALLURE_REPORT: "false"
|
165
171
|
script:
|
166
172
|
- ./bin/expect_exit_code_and_text "bundle exec exe/gitlab-qa Test::Instance::Image ${RELEASE:=EE} -- --tag framework" 1 "2 examples, 1 failure"
|
167
173
|
extends:
|
@@ -634,57 +640,16 @@ ee:group_saml-quarantine:
|
|
634
640
|
variables:
|
635
641
|
QA_SCENARIO: "Test::Integration::GroupSAML"
|
636
642
|
|
637
|
-
ce:
|
638
|
-
extends:
|
639
|
-
- .test
|
640
|
-
- .high-capacity
|
641
|
-
- .ce-qa
|
642
|
-
- .rspec-report-opts
|
643
|
-
allow_failure: true
|
644
|
-
variables:
|
645
|
-
QA_SCENARIO: "Test::Integration::Kubernetes"
|
646
|
-
|
647
|
-
ce:kubernetes-quarantine:
|
648
|
-
extends:
|
649
|
-
- .test
|
650
|
-
- .high-capacity
|
651
|
-
- .ce-qa
|
652
|
-
- .quarantine
|
653
|
-
- .rspec-report-opts
|
654
|
-
variables:
|
655
|
-
QA_SCENARIO: "Test::Integration::Kubernetes"
|
656
|
-
|
657
|
-
ee:kubernetes:
|
658
|
-
extends:
|
659
|
-
- .test
|
660
|
-
- .high-capacity
|
661
|
-
- .ee-qa
|
662
|
-
- .rspec-report-opts
|
663
|
-
allow_failure: true
|
664
|
-
variables:
|
665
|
-
QA_SCENARIO: "Test::Integration::Kubernetes"
|
666
|
-
|
667
|
-
ee:kubernetes-quarantine:
|
668
|
-
extends:
|
669
|
-
- .test
|
670
|
-
- .high-capacity
|
671
|
-
- .ee-qa
|
672
|
-
- .quarantine
|
673
|
-
- .rspec-report-opts
|
674
|
-
variables:
|
675
|
-
QA_SCENARIO: "Test::Integration::Kubernetes"
|
676
|
-
|
677
|
-
ce:ssh_tunnel:
|
643
|
+
ce:object_storage:
|
678
644
|
extends:
|
679
645
|
- .test
|
680
646
|
- .high-capacity
|
681
647
|
- .ce-qa
|
682
648
|
- .rspec-report-opts
|
683
|
-
allow_failure: true
|
684
649
|
variables:
|
685
|
-
|
650
|
+
GITLAB_QA_OPTS: "--omnibus-config object_storage"
|
686
651
|
|
687
|
-
ce:
|
652
|
+
ce:object_storage-quarantine:
|
688
653
|
extends:
|
689
654
|
- .test
|
690
655
|
- .high-capacity
|
@@ -692,19 +657,19 @@ ce:ssh_tunnel-quarantine:
|
|
692
657
|
- .quarantine
|
693
658
|
- .rspec-report-opts
|
694
659
|
variables:
|
695
|
-
|
660
|
+
GITLAB_QA_OPTS: "--omnibus-config object_storage"
|
696
661
|
|
697
|
-
ee:
|
662
|
+
ee:object_storage_aws:
|
698
663
|
extends:
|
699
664
|
- .test
|
700
665
|
- .high-capacity
|
701
666
|
- .ee-qa
|
702
667
|
- .rspec-report-opts
|
703
|
-
allow_failure: true
|
704
668
|
variables:
|
705
|
-
|
669
|
+
GITLAB_QA_OPTS: "--omnibus-config object_storage_aws"
|
670
|
+
QA_RSPEC_TAGS: "--tag object_storage"
|
706
671
|
|
707
|
-
ee:
|
672
|
+
ee:object_storage_aws-quarantine:
|
708
673
|
extends:
|
709
674
|
- .test
|
710
675
|
- .high-capacity
|
@@ -712,26 +677,8 @@ ee:ssh_tunnel-quarantine:
|
|
712
677
|
- .quarantine
|
713
678
|
- .rspec-report-opts
|
714
679
|
variables:
|
715
|
-
|
716
|
-
|
717
|
-
ce:object_storage:
|
718
|
-
extends:
|
719
|
-
- .test
|
720
|
-
- .high-capacity
|
721
|
-
- .ce-qa
|
722
|
-
- .rspec-report-opts
|
723
|
-
variables:
|
724
|
-
GITLAB_QA_OPTS: "--omnibus-config object_storage"
|
725
|
-
|
726
|
-
ce:object_storage-quarantine:
|
727
|
-
extends:
|
728
|
-
- .test
|
729
|
-
- .high-capacity
|
730
|
-
- .ce-qa
|
731
|
-
- .quarantine
|
732
|
-
- .rspec-report-opts
|
733
|
-
variables:
|
734
|
-
GITLAB_QA_OPTS: "--omnibus-config object_storage"
|
680
|
+
GITLAB_QA_OPTS: "--omnibus-config object_storage_aws"
|
681
|
+
QA_RSPEC_TAGS: "--tag quarantine --tag object_storage"
|
735
682
|
|
736
683
|
ee:object_storage:
|
737
684
|
extends:
|
@@ -1030,6 +977,24 @@ ee:jira-quarantine:
|
|
1030
977
|
variables:
|
1031
978
|
QA_SCENARIO: "Test::Integration::Jira"
|
1032
979
|
|
980
|
+
ce:large-setup:
|
981
|
+
extends:
|
982
|
+
- .test
|
983
|
+
- .high-capacity
|
984
|
+
- .ce-qa
|
985
|
+
- .rspec-report-opts
|
986
|
+
variables:
|
987
|
+
QA_RSPEC_TAGS: "--tag can_use_large_setup"
|
988
|
+
|
989
|
+
ee:large-setup:
|
990
|
+
extends:
|
991
|
+
- .test
|
992
|
+
- .high-capacity
|
993
|
+
- .ee-qa
|
994
|
+
- .rspec-report-opts
|
995
|
+
variables:
|
996
|
+
QA_RSPEC_TAGS: "--tag can_use_large_setup"
|
997
|
+
|
1033
998
|
# This job requires the `GITLAB_QA_ACCESS_TOKEN` and `GITLAB_QA_DEV_ACCESS_TOKEN`
|
1034
999
|
# variable to be passed when triggered.
|
1035
1000
|
staging:
|
@@ -1126,3 +1091,37 @@ notify_slack:
|
|
1126
1091
|
include:
|
1127
1092
|
- project: 'gitlab-org/quality/pipeline-common'
|
1128
1093
|
file: '/ci/gem-release.yml'
|
1094
|
+
- project: 'gitlab-org/quality/pipeline-common'
|
1095
|
+
file: '/ci/allure-report.yml'
|
1096
|
+
|
1097
|
+
generate-allure-report:
|
1098
|
+
extends: .generate-allure-report-base
|
1099
|
+
stage: report
|
1100
|
+
variables:
|
1101
|
+
STORAGE_CREDENTIALS: $QA_ALLURE_REPORT_GCS_CREDENTIALS
|
1102
|
+
GITLAB_AUTH_TOKEN: $GITLAB_QA_MR_ALLURE_REPORT_TOKEN
|
1103
|
+
ALLURE_RESULTS_GLOB: gitlab-qa-run-*/**/allure-results/*
|
1104
|
+
# Override allure variables for upstream triggers
|
1105
|
+
ALLURE_PROJECT_PATH: $TOP_UPSTREAM_SOURCE_PROJECT
|
1106
|
+
ALLURE_MERGE_REQUEST_IID: $TOP_UPSTREAM_MERGE_REQUEST_IID
|
1107
|
+
ALLURE_COMMIT_SHA: $TOP_UPSTREAM_SOURCE_SHA
|
1108
|
+
# Override default before script and don't push cache
|
1109
|
+
cache:
|
1110
|
+
policy: pull
|
1111
|
+
before_script:
|
1112
|
+
- echo "Generating and publishing allure test report"
|
1113
|
+
rules:
|
1114
|
+
# Don't run report generation on release pipelines
|
1115
|
+
- if: '$CI_SERVER_HOST == "gitlab.com" && $CI_PROJECT_PATH == "gitlab-org/gitlab-qa" && $RELEASE == null'
|
1116
|
+
changes: ["lib/**/version.rb"]
|
1117
|
+
when: never
|
1118
|
+
- if: '$CI_COMMIT_TAG'
|
1119
|
+
when: never
|
1120
|
+
- if: '$CI_PIPELINE_SOURCE == "merge_request_event" || ($CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_REF_NAME == $CI_DEFAULT_BRANCH)'
|
1121
|
+
variables:
|
1122
|
+
ALLURE_JOB_NAME: gitlab-qa
|
1123
|
+
when: always
|
1124
|
+
- if: '$TOP_UPSTREAM_SOURCE_PROJECT && $TOP_UPSTREAM_SOURCE_SHA'
|
1125
|
+
variables:
|
1126
|
+
ALLURE_JOB_NAME: package-and-qa
|
1127
|
+
when: always
|
data/bin/notify_upstream_commit
CHANGED
@@ -3,10 +3,17 @@
|
|
3
3
|
|
4
4
|
require 'gitlab'
|
5
5
|
|
6
|
+
# Default to "Multi-pipeline (from 'gitlab-org/gitlab-qa' 'notify_upstream_commit:*' jobs)" from current project
|
7
|
+
api_token = ENV.fetch('GITLAB_QA_PROJECT_ACCESS_TOKEN') do
|
8
|
+
puts "The $GITLAB_BOT_MULTI_PROJECT_PIPELINE_POLLING_TOKEN variable is deprecated in favor of a dedicated project access token: $GITLAB_QA_PROJECT_ACCESS_TOKEN."
|
9
|
+
puts "See https://gitlab.com/groups/gitlab-org/quality/-/epics/17 for more details."
|
10
|
+
ENV['GITLAB_BOT_MULTI_PROJECT_PIPELINE_POLLING_TOKEN']
|
11
|
+
end
|
12
|
+
|
6
13
|
# Configure credentials to be used with gitlab gem
|
7
14
|
Gitlab.configure do |config|
|
8
15
|
config.endpoint = 'https://gitlab.com/api/v4'
|
9
|
-
config.private_token =
|
16
|
+
config.private_token = api_token
|
10
17
|
end
|
11
18
|
|
12
19
|
class CommitComment
|
data/docs/run_qa_against_gdk.md
CHANGED
@@ -37,18 +37,18 @@ make a few changes to your `gdk/gitlab/config/gitlab.yml` file.
|
|
37
37
|
# build the QA image first
|
38
38
|
# In gdk/gitlab:
|
39
39
|
$ docker build -t gitlab/gitlab-ce-qa:your-custom-tag --file ./qa/Dockerfile ./
|
40
|
-
|
41
|
-
# Note: You will also need a corresponding GitLab image.
|
40
|
+
|
41
|
+
# Note: You will also need a corresponding GitLab image.
|
42
42
|
# For example, if you haven't changed any application code (e.g., no new elements), you could tag the current nightly build:
|
43
43
|
$ docker tag gitlab/gitlab-ce:nightly gitlab/gitlab-ce:your-custom-tag
|
44
44
|
|
45
45
|
# Then in gitlab-qa:
|
46
46
|
$ exe/gitlab-qa Test::Instance::Any gitlab/gitlab-ce:your-custom-tag http://192.168.0.12:3000 -- qa/specs/features/browser_ui/1_manage/login/log_in_spec.rb
|
47
47
|
```
|
48
|
-
|
48
|
+
|
49
49
|
**Note:** The hostname of the URL provided to `gitlab-qa` must match the hostname configured for GDK.
|
50
50
|
If they do not match, a test will be signed out when it visits a page directly because the hostname of the URL visited will be different from the hostname that was used when signing in.
|
51
|
-
|
51
|
+
|
52
52
|
### Running EE tests
|
53
53
|
|
54
54
|
When running EE tests you'll need to have a license available. GitLab engineers can [request a license](https://about.gitlab.com/handbook/developer-onboarding/#working-on-gitlab-ee).
|
@@ -68,7 +68,7 @@ Run from the `gdk-ee/gitlab/qa` directory with GDK primary and secondary running
|
|
68
68
|
$ bundle exec bin/qa QA::EE::Scenario::Test::Geo --primary-address http://localhost:3001 --secondary-address http://localhost:3002 --primary-name primary --secondary-name secondary --without-setup
|
69
69
|
|
70
70
|
# Run in visible Chrome browser
|
71
|
-
$
|
71
|
+
$ WEBDRIVER_HEADLESS=0 bundle exec bin/qa QA::EE::Scenario::Test::Geo --primary-address http://localhost:3001 --secondary-address http://localhost:3002 --primary-name primary --secondary-name secondary --without-setup
|
72
72
|
```
|
73
73
|
|
74
74
|
### QA Tool support on macOS
|
@@ -59,7 +59,7 @@ All environment variables used by GitLab QA should be defined in [`lib/gitlab/qa
|
|
59
59
|
| `EE_LICENSE` |- | Enterprise Edition license. | No|
|
60
60
|
| `QA_ARTIFACTS_DIR` |`/tmp/gitlab-qa`| Path to a directory where artifacts (logs and screenshots) for failing tests will be saved. | No|
|
61
61
|
| `DOCKER_HOST` |`http://localhost`| Docker host to run tests against. | No|
|
62
|
-
| `
|
62
|
+
| `WEBDRIVER_HEADLESS` |- | When running locally, set to `false` to allow Chrome tests to be visible - watch your tests being run. | No|
|
63
63
|
| `QA_ADDITIONAL_REPOSITORY_STORAGE` |- | The name of additional, non-default storage to be used with tests tagged `repository_storage`, run via the `Test::Instance::RepositoryStorage` scenario. Note: Admin access is required to change repository storage. | No|
|
64
64
|
| `QA_PRAEFECT_REPOSITORY_STORAGE` |- | The name of repository storage using Praefect. Note: Admin access is required to change repository storage. | No|
|
65
65
|
| `QA_COOKIES` |- | Optionally set to "cookie1=value;cookie2=value" in order to add a cookie to every request. This can be used to set the canary cookie by setting it to "gitlab_canary=true". | No|
|
@@ -813,6 +813,15 @@ $ export EE_LICENSE=$(cat /path/to/gitlab_license)
|
|
813
813
|
$ gitlab-qa Test::Instance::Airgapped EE -- --tag smoke
|
814
814
|
```
|
815
815
|
|
816
|
+
### `Test::Instance::Image CE|EE|<full image address> --omnibus-config object_storage`
|
817
|
+
|
818
|
+
This orchestrated scenario runs tests from the test suite against a GitLab instance which has object storage configured instead of using local storage. The omnibus configuration `object_storage` ([configurator](configuring_omnibus.md)), uses Minio and `object_storage_aws` uses an AWS S3 account with credentials configured in the pipeline as CI Variables (available on 1Password). Requires:
|
819
|
+
|
820
|
+
* `AWS_S3_REGION` - Region where the bucket is created. To optimize latency, minimize costs, or address regulatory requirements, choose any AWS Region that is geographically close to you.
|
821
|
+
* `AWS_S3_KEY_ID` - Key ID for the user accessing the bucket.
|
822
|
+
* `AWS_S3_ACCESS_KEY` - Access Key for the user accessing the bucket.
|
823
|
+
* `AWS_S3_BUCKET_NAME` - The name of the bucket where objects are stored. After a bucket is created, the name of that bucket cannot be used by another AWS account in any AWS Region until the bucket is deleted.
|
824
|
+
|
816
825
|
### `Test::Instance::Geo EE|<full image address>:nightly|latest|any_tag http://geo-primary.gitlab http://geo-secondary.gitlab`
|
817
826
|
|
818
827
|
This scenario will run tests tagged `:geo` against a live Geo deployment, by spinning up a GitLab QA (`gitlab/gitlab-qa`)
|
data/gitlab-qa.gemspec
CHANGED
@@ -28,6 +28,7 @@ Gem::Specification.new do |spec|
|
|
28
28
|
spec.add_development_dependency 'rspec', '~> 3.7'
|
29
29
|
spec.add_development_dependency 'rubocop', '~> 0.82.0'
|
30
30
|
spec.add_development_dependency 'rubocop-rspec', '~> 1.36'
|
31
|
+
spec.add_development_dependency 'solargraph', '~> 0.41'
|
31
32
|
spec.add_development_dependency 'webmock', '3.7.0'
|
32
33
|
spec.add_runtime_dependency 'activesupport', '~> 6.0.2'
|
33
34
|
spec.add_runtime_dependency 'gitlab', '~> 4.16.1'
|
data/lib/gitlab/qa.rb
CHANGED
@@ -14,6 +14,7 @@ module Gitlab
|
|
14
14
|
autoload :Default, 'gitlab/qa/runtime/omnibus_configurations/default'
|
15
15
|
autoload :Packages, 'gitlab/qa/runtime/omnibus_configurations/packages'
|
16
16
|
autoload :ObjectStorage, 'gitlab/qa/runtime/omnibus_configurations/object_storage'
|
17
|
+
autoload :ObjectStorageAws, 'gitlab/qa/runtime/omnibus_configurations/object_storage_aws'
|
17
18
|
autoload :LicenseMode, 'gitlab/qa/runtime/omnibus_configurations/license_mode'
|
18
19
|
end
|
19
20
|
end
|
@@ -66,6 +67,7 @@ module Gitlab
|
|
66
67
|
autoload :SSHTunnel, 'gitlab/qa/scenario/test/integration/ssh_tunnel'
|
67
68
|
autoload :MTLS, 'gitlab/qa/scenario/test/integration/mtls'
|
68
69
|
autoload :ClientSSL, 'gitlab/qa/scenario/test/integration/client_ssl'
|
70
|
+
autoload :Registry, 'gitlab/qa/scenario/test/integration/registry'
|
69
71
|
end
|
70
72
|
|
71
73
|
module Sanity
|
@@ -1,5 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require 'erb'
|
4
|
+
|
3
5
|
module Gitlab
|
4
6
|
module QA
|
5
7
|
module Report
|
@@ -189,11 +191,12 @@ module Gitlab
|
|
189
191
|
|
190
192
|
def generate_test_text(testcase, tests_with_same_testcase, passed)
|
191
193
|
text = tests_with_same_testcase.map(&:name).uniq.join(', ')
|
194
|
+
encoded_text = ERB::Util.url_encode(text)
|
192
195
|
|
193
196
|
if testcase && !passed
|
194
197
|
# Workaround for reducing system notes on testcase issues
|
195
198
|
# The first regex extracts the link to the issues list page from a link to a single issue show page by removing the issue id.
|
196
|
-
"[#{text}](#{testcase.match(%r{[\s\S]+\/[^\/\d]+})}?state=opened&search=#{
|
199
|
+
"[#{text}](#{testcase.match(%r{[\s\S]+\/[^\/\d]+})}?state=opened&search=#{encoded_text}) (testcase_id=#{testcase.match(/\d+/)})"
|
197
200
|
else
|
198
201
|
text
|
199
202
|
end
|
@@ -92,7 +92,12 @@ module Gitlab
|
|
92
92
|
'DEPLOY_VERSION' => :deploy_version,
|
93
93
|
'GITLAB_QA_USER_AGENT' => :gitlab_qa_user_agent,
|
94
94
|
'GEO_FAILOVER' => :geo_failover,
|
95
|
-
'GITLAB_INITIAL_ROOT_PASSWORD' => :initial_root_password
|
95
|
+
'GITLAB_INITIAL_ROOT_PASSWORD' => :initial_root_password,
|
96
|
+
'GITLAB_TLS_CERTIFICATE' => :gitlab_tls_certificate,
|
97
|
+
'AWS_S3_REGION' => :aws_s3_region,
|
98
|
+
'AWS_S3_KEY_ID' => :aws_s3_key_id,
|
99
|
+
'AWS_S3_ACCESS_KEY' => :aws_s3_access_key,
|
100
|
+
'AWS_S3_BUCKET_NAME' => :aws_s3_bucket_name
|
96
101
|
}.freeze
|
97
102
|
|
98
103
|
ENV_VARIABLES.each do |env_name, method_name|
|
@@ -126,10 +131,6 @@ module Gitlab
|
|
126
131
|
ENV['GITLAB_API_BASE'] || 'https://gitlab.com/api/v4'
|
127
132
|
end
|
128
133
|
|
129
|
-
def gitlab_bot_multi_project_pipeline_polling_token
|
130
|
-
ENV['GITLAB_BOT_MULTI_PROJECT_PIPELINE_POLLING_TOKEN']
|
131
|
-
end
|
132
|
-
|
133
134
|
def gitlab_ci_api_token
|
134
135
|
ENV['GITLAB_CI_API_TOKEN']
|
135
136
|
end
|
@@ -214,6 +215,22 @@ module Gitlab
|
|
214
215
|
ENV['ELASTIC_VERSION'] || '6.4.2'.freeze
|
215
216
|
end
|
216
217
|
|
218
|
+
def aws_s3_region
|
219
|
+
ENV['AWS_S3_REGION']
|
220
|
+
end
|
221
|
+
|
222
|
+
def aws_s3_key_id
|
223
|
+
ENV['AWS_S3_KEY_ID']
|
224
|
+
end
|
225
|
+
|
226
|
+
def aws_s3_access_key
|
227
|
+
ENV['AWS_S3_ACCESS_KEY']
|
228
|
+
end
|
229
|
+
|
230
|
+
def aws_s3_bucket_name
|
231
|
+
ENV['AWS_S3_BUCKET_NAME']
|
232
|
+
end
|
233
|
+
|
217
234
|
def variables
|
218
235
|
vars = {}
|
219
236
|
|
@@ -269,6 +286,12 @@ module Gitlab
|
|
269
286
|
end
|
270
287
|
end
|
271
288
|
|
289
|
+
def require_aws_s3_environment!
|
290
|
+
%w[AWS_S3_REGION AWS_S3_KEY_ID AWS_S3_ACCESS_KEY AWS_S3_BUCKET_NAME].each do |env_key|
|
291
|
+
raise ArgumentError, "Environment variable #{env_key} must be set to run AWS S3 object storage specs" unless ENV.key?(env_key)
|
292
|
+
end
|
293
|
+
end
|
294
|
+
|
272
295
|
def require_initial_password!
|
273
296
|
return unless ENV['GITLAB_INITIAL_ROOT_PASSWORD'].to_s.strip.empty?
|
274
297
|
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Gitlab
|
4
|
+
module QA
|
5
|
+
module Runtime
|
6
|
+
module OmnibusConfigurations
|
7
|
+
class ObjectStorageAws < Default
|
8
|
+
def configuration
|
9
|
+
Runtime::Env.require_aws_s3_environment!
|
10
|
+
|
11
|
+
<<~OMNIBUS
|
12
|
+
gitlab_rails['object_store']['enabled'] = true
|
13
|
+
gitlab_rails['object_store']['proxy_download'] = true
|
14
|
+
gitlab_rails['object_store']['connection'] = { 'provider' => 'AWS', 'region' => '#{Runtime::Env.aws_s3_region}', 'aws_access_key_id' => '#{Runtime::Env.aws_s3_key_id}', 'aws_secret_access_key' => '#{Runtime::Env.aws_s3_access_key}' }
|
15
|
+
|
16
|
+
gitlab_rails['object_store']['objects']['artifacts']['bucket'] = '#{Runtime::Env.aws_s3_bucket_name}'
|
17
|
+
gitlab_rails['object_store']['objects']['external_diffs']['bucket'] = '#{Runtime::Env.aws_s3_bucket_name}'
|
18
|
+
gitlab_rails['object_store']['objects']['lfs']['bucket'] = '#{Runtime::Env.aws_s3_bucket_name}'
|
19
|
+
gitlab_rails['object_store']['objects']['uploads']['bucket'] = '#{Runtime::Env.aws_s3_bucket_name}'
|
20
|
+
gitlab_rails['object_store']['objects']['packages']['bucket'] = '#{Runtime::Env.aws_s3_bucket_name}'
|
21
|
+
gitlab_rails['object_store']['objects']['dependency_proxy']['bucket'] = '#{Runtime::Env.aws_s3_bucket_name}'
|
22
|
+
gitlab_rails['object_store']['objects']['pages']['bucket'] = '#{Runtime::Env.aws_s3_bucket_name}'
|
23
|
+
gitlab_rails['object_store']['objects']['terraform_state']['bucket'] = '#{Runtime::Env.aws_s3_bucket_name}'
|
24
|
+
OMNIBUS
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -12,8 +12,8 @@ module Gitlab
|
|
12
12
|
@commands = <<~AIRGAP_AND_VERIFY_COMMAND.split(/\n+/)
|
13
13
|
# Should not fail before airgapping due to eg. DNS failure
|
14
14
|
# Ping and wget check
|
15
|
-
apt-get update && apt-get install -y iptables
|
16
|
-
|
15
|
+
apt-get update && apt-get install -y iptables nmap
|
16
|
+
nmap -sT #{gitlab_ip} -p 80 && (echo \"Regular connectivity nmap check passed.\" && exit 0) || (echo \"Regular connectivity nmap check failed.\" && exit 1)
|
17
17
|
echo "Checking regular connectivity..." \
|
18
18
|
&& wget --retry-connrefused --waitretry=1 --read-timeout=15 --timeout=10 -t 2 http://registry.gitlab.com > /dev/null 2>&1 \
|
19
19
|
&& (echo "Regular connectivity wget check passed." && exit 0) || (echo "Regular connectivity wget check failed." && exit 1)
|
@@ -32,9 +32,9 @@ module Gitlab
|
|
32
32
|
iptables -A INPUT -p tcp -m tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
|
33
33
|
|
34
34
|
# Should now fail to ping and wget, port 80 should be open
|
35
|
-
|
36
|
-
|
37
|
-
|
35
|
+
nmap -sT #{gitlab_ip} -p 80 && (echo \"Airgapped network faulty. Connectivity nmap check failed.\" && exit 1) || (echo \"Connectivity nmap check passed.\" && exit 0)
|
36
|
+
nmap -sT 127.0.0.1 -p 22 && (echo "Airgapped connectivity port 22 check passed." && exit 0) || (echo "Airgapped connectivity port 22 check failed." && exit 1)
|
37
|
+
nmap -sT 10 127.0.0.1 -p 80 && (echo "Airgapped connectivity port 80 check passed." && exit 0) || (echo "Airgapped connectivity port 80 check failed." && exit 1)
|
38
38
|
echo "Checking airgapped connectivity..." \
|
39
39
|
&& wget --retry-connrefused --waitretry=1 --read-timeout=15 --timeout=10 -t 2 http://registry.gitlab.com > /dev/null 2>&1 \
|
40
40
|
&& (echo "Airgapped network faulty. Connectivity wget check failed." && exit 1) || (echo "Airgapped network confirmed. Connectivity wget check passed." && exit 0)
|
@@ -107,23 +107,24 @@ module Gitlab
|
|
107
107
|
praefect['database_password'] = 'SQL_PASSWORD';
|
108
108
|
praefect['database_dbname'] = 'praefect_production';
|
109
109
|
praefect['database_sslmode'] = 'disable';
|
110
|
-
praefect['
|
111
|
-
praefect['
|
110
|
+
praefect['database_host_no_proxy'] = '#{@database}.#{@network}';
|
111
|
+
praefect['database_port_no_proxy'] = 5432;
|
112
112
|
praefect['failover_election_strategy'] = 'per_repository';
|
113
113
|
praefect['virtual_storages'] = {
|
114
114
|
'default' => {
|
115
|
-
'
|
116
|
-
'
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
115
|
+
'nodes' => {
|
116
|
+
'#{@primary_node_name}' => {
|
117
|
+
'address' => 'tcp://#{@primary_node_name}.#{@network}:8075',
|
118
|
+
'token' => 'PRAEFECT_INTERNAL_TOKEN'
|
119
|
+
},
|
120
|
+
'#{@secondary_node_name}' => {
|
121
|
+
'address' => 'tcp://#{@secondary_node_name}.#{@network}:8075',
|
122
|
+
'token' => 'PRAEFECT_INTERNAL_TOKEN'
|
123
|
+
},
|
124
|
+
'#{@tertiary_node_name}' => {
|
125
|
+
'address' => 'tcp://#{@tertiary_node_name}.#{@network}:8075',
|
126
|
+
'token' => 'PRAEFECT_INTERNAL_TOKEN'
|
127
|
+
}
|
127
128
|
}
|
128
129
|
}
|
129
130
|
};
|
@@ -164,7 +165,7 @@ module Gitlab
|
|
164
165
|
'gitaly_token' => 'PRAEFECT_EXTERNAL_TOKEN'
|
165
166
|
}
|
166
167
|
});
|
167
|
-
gitaly['
|
168
|
+
gitaly['enable'] = false;
|
168
169
|
gitlab_shell['secret_token'] = 'GITLAB_SHELL_SECRET_TOKEN';
|
169
170
|
prometheus['scrape_configs'] = [
|
170
171
|
{
|
@@ -0,0 +1,44 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Gitlab
|
4
|
+
module QA
|
5
|
+
module Scenario
|
6
|
+
module Test
|
7
|
+
module Integration
|
8
|
+
class Registry < Scenario::Template
|
9
|
+
def perform(release, *rspec_args)
|
10
|
+
Component::Gitlab.perform do |gitlab|
|
11
|
+
gitlab.release = release
|
12
|
+
gitlab.network = 'test'
|
13
|
+
gitlab.name = 'gitlab'
|
14
|
+
gitlab.tls = true
|
15
|
+
|
16
|
+
gitlab.omnibus_configuration << <<~OMNIBUS
|
17
|
+
external_url 'https://#{gitlab.name}.#{gitlab.network}';
|
18
|
+
registry_external_url 'https://#{gitlab.name}.#{gitlab.network}:5050';
|
19
|
+
|
20
|
+
letsencrypt['enable'] = false;
|
21
|
+
|
22
|
+
nginx['redirect_http_to_https'] = true;
|
23
|
+
nginx['ssl_certificate'] = "/etc/gitlab/ssl/gitlab.test.crt";
|
24
|
+
nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/gitlab.test.key";
|
25
|
+
registry_nginx['ssl_certificate'] = "/etc/gitlab/ssl/gitlab.test.crt";
|
26
|
+
registry_nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/gitlab.test.key";
|
27
|
+
OMNIBUS
|
28
|
+
|
29
|
+
gitlab.instance do
|
30
|
+
Component::Specs.perform do |specs|
|
31
|
+
specs.suite = 'Test::Integration::Registry'
|
32
|
+
specs.release = gitlab.release
|
33
|
+
specs.network = gitlab.network
|
34
|
+
specs.args = [gitlab.address, *rspec_args]
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
data/lib/gitlab/qa/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gitlab-qa
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 7.
|
4
|
+
version: 7.7.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- GitLab Quality
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-08-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: climate_control
|
@@ -108,6 +108,20 @@ dependencies:
|
|
108
108
|
- - "~>"
|
109
109
|
- !ruby/object:Gem::Version
|
110
110
|
version: '1.36'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: solargraph
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - "~>"
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0.41'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - "~>"
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0.41'
|
111
125
|
- !ruby/object:Gem::Dependency
|
112
126
|
name: webmock
|
113
127
|
requirement: !ruby/object:Gem::Requirement
|
@@ -279,6 +293,7 @@ files:
|
|
279
293
|
- lib/gitlab/qa/runtime/omnibus_configurations/default.rb
|
280
294
|
- lib/gitlab/qa/runtime/omnibus_configurations/license_mode.rb
|
281
295
|
- lib/gitlab/qa/runtime/omnibus_configurations/object_storage.rb
|
296
|
+
- lib/gitlab/qa/runtime/omnibus_configurations/object_storage_aws.rb
|
282
297
|
- lib/gitlab/qa/runtime/omnibus_configurations/packages.rb
|
283
298
|
- lib/gitlab/qa/runtime/scenario.rb
|
284
299
|
- lib/gitlab/qa/runtime/token_finder.rb
|
@@ -314,6 +329,7 @@ files:
|
|
314
329
|
- lib/gitlab/qa/scenario/test/integration/mattermost.rb
|
315
330
|
- lib/gitlab/qa/scenario/test/integration/mtls.rb
|
316
331
|
- lib/gitlab/qa/scenario/test/integration/praefect.rb
|
332
|
+
- lib/gitlab/qa/scenario/test/integration/registry.rb
|
317
333
|
- lib/gitlab/qa/scenario/test/integration/saml.rb
|
318
334
|
- lib/gitlab/qa/scenario/test/integration/smtp.rb
|
319
335
|
- lib/gitlab/qa/scenario/test/integration/ssh_tunnel.rb
|
@@ -355,7 +371,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
355
371
|
- !ruby/object:Gem::Version
|
356
372
|
version: '0'
|
357
373
|
requirements: []
|
358
|
-
rubygems_version: 3.1.
|
374
|
+
rubygems_version: 3.1.6
|
359
375
|
signing_key:
|
360
376
|
specification_version: 4
|
361
377
|
summary: Integration tests for GitLab
|