gitlab-qa 7.27.1 → 7.29.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +0 -2
- data/.gitlab/ci/jobs/base.gitlab-ci.yml +5 -11
- data/.gitlab/ci/jobs/gitaly_cluster.gitlab-ci.yml +0 -4
- data/.gitlab-ci.yml +8 -3
- data/Gemfile.lock +248 -0
- data/docs/what_tests_can_be_run.md +77 -24
- data/lib/gitlab/qa/component/base.rb +1 -2
- data/lib/gitlab/qa/component/gitlab.rb +7 -4
- data/lib/gitlab/qa/component/specs.rb +1 -1
- data/lib/gitlab/qa/docker/command.rb +8 -2
- data/lib/gitlab/qa/docker/engine.rb +14 -3
- data/lib/gitlab/qa/docker/shellout.rb +32 -8
- data/lib/gitlab/qa/report/test_result.rb +7 -0
- data/lib/gitlab/qa/runtime/env.rb +8 -1
- data/lib/gitlab/qa/runtime/logger.rb +6 -1
- data/lib/gitlab/qa/runtime/omnibus_configurations/ci_decomposition.rb +2 -1
- data/lib/gitlab/qa/runtime/omnibus_configurations/object_storage.rb +8 -10
- data/lib/gitlab/qa/scenario/test/integration/registry_with_cdn.rb +1 -0
- data/lib/gitlab/qa/test_logger.rb +54 -8
- data/lib/gitlab/qa/version.rb +1 -1
- data/lib/gitlab/qa.rb +0 -1
- data/scripts/generate-qa-jobs.rb +0 -1
- data/tmp/.gitignore +3 -0
- metadata +4 -4
- data/.gitlab/ci/jobs/actioncable.gitlab-ci.yml +0 -41
- data/lib/gitlab/qa/scenario/test/integration/actioncable.rb +0 -34
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6f3a8d250f26a5899d776475ac349829311045b51aeed7b73f1a40fc41cd23dc
|
4
|
+
data.tar.gz: 2258303729505a302fe0a6d05b57f5deee6efe21f0d7cbfb2542e92febfe2dc7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2ad81f0b8d7bcb59ff76963f0463ae2d221be28b262455c22e6ee11ad91a9c6b768291639ed25b9ff756c9b319566f4aa596281ca2c09d470a5a1374174f3929
|
7
|
+
data.tar.gz: 6e5a9601b50167f4cae9c87fe1415b1a6a740c855e56580cc553559d481842f6ed9feced7760a0403bb7993ef5ba7e11c1fd5723d2812a06227d1a64b87aefd1
|
data/.gitignore
CHANGED
@@ -245,14 +245,12 @@ generate-allure-report:
|
|
245
245
|
cache:
|
246
246
|
policy: pull
|
247
247
|
before_script:
|
248
|
-
# Override allure variables for upstream triggers
|
249
|
-
# Override default before script and don't push cache
|
250
248
|
- export STORAGE_CREDENTIALS=$QA_ALLURE_REPORT_GCS_CREDENTIALS
|
251
249
|
- export GITLAB_AUTH_TOKEN=$GITLAB_QA_MR_ALLURE_REPORT_TOKEN
|
252
|
-
|
253
|
-
- export ALLURE_MERGE_REQUEST_IID=$TOP_UPSTREAM_MERGE_REQUEST_IID
|
254
|
-
- export
|
255
|
-
- export
|
250
|
+
# Set allure variables for merge request comment based on pipeline source
|
251
|
+
- export ALLURE_MERGE_REQUEST_IID=${TOP_UPSTREAM_MERGE_REQUEST_IID:-$CI_MERGE_REQUEST_IID}
|
252
|
+
- export ALLURE_PROJECT_PATH=${TOP_UPSTREAM_SOURCE_PROJECT:-$CI_MERGE_REQUEST_PROJECT_PATH}
|
253
|
+
- export ALLURE_COMMIT_SHA=${TOP_UPSTREAM_SOURCE_SHA:-$CI_MERGE_REQUEST_SOURCE_BRANCH_SHA}
|
256
254
|
rules:
|
257
255
|
# Don't run report generation on release pipelines
|
258
256
|
- if: '$CI_SERVER_HOST == "gitlab.com" && $CI_PROJECT_PATH == "gitlab-org/gitlab-qa" && $RELEASE == null'
|
@@ -260,11 +258,7 @@ generate-allure-report:
|
|
260
258
|
when: never
|
261
259
|
- if: '$CI_COMMIT_TAG'
|
262
260
|
when: never
|
263
|
-
- if: '$
|
264
|
-
variables:
|
265
|
-
ALLURE_JOB_NAME: gitlab-qa
|
266
|
-
when: always
|
267
|
-
- if: '$TOP_UPSTREAM_SOURCE_PROJECT != null && $TOP_UPSTREAM_SOURCE_PROJECT != "" && $TOP_UPSTREAM_SOURCE_SHA != null && $TOP_UPSTREAM_SOURCE_SHA != ""'
|
261
|
+
- if: '$ALLURE_JOB_NAME'
|
268
262
|
when: always
|
269
263
|
|
270
264
|
generate-knapsack-report:
|
@@ -7,7 +7,6 @@ ce:gitaly-cluster:
|
|
7
7
|
- .rspec-report-opts
|
8
8
|
variables:
|
9
9
|
QA_SCENARIO: "Test::Integration::GitalyCluster"
|
10
|
-
QA_LOG_PATH: "tmp/gitaly_cluster.log"
|
11
10
|
|
12
11
|
ce:gitaly-cluster-quarantine:
|
13
12
|
extends:
|
@@ -19,7 +18,6 @@ ce:gitaly-cluster-quarantine:
|
|
19
18
|
- .rspec-report-opts
|
20
19
|
variables:
|
21
20
|
QA_SCENARIO: "Test::Integration::GitalyCluster"
|
22
|
-
QA_LOG_PATH: "tmp/gitaly_cluster.log"
|
23
21
|
|
24
22
|
ee:gitaly-cluster:
|
25
23
|
extends:
|
@@ -30,7 +28,6 @@ ee:gitaly-cluster:
|
|
30
28
|
- .rspec-report-opts
|
31
29
|
variables:
|
32
30
|
QA_SCENARIO: "Test::Integration::GitalyCluster"
|
33
|
-
QA_LOG_PATH: "tmp/gitaly_cluster.log"
|
34
31
|
|
35
32
|
ee:gitaly-cluster-quarantine:
|
36
33
|
extends:
|
@@ -42,4 +39,3 @@ ee:gitaly-cluster-quarantine:
|
|
42
39
|
- .rspec-report-opts
|
43
40
|
variables:
|
44
41
|
QA_SCENARIO: "Test::Integration::GitalyCluster"
|
45
|
-
QA_LOG_PATH: "tmp/gitaly_cluster.log"
|
data/.gitlab-ci.yml
CHANGED
@@ -25,12 +25,18 @@ workflow:
|
|
25
25
|
rules:
|
26
26
|
# For merge requests, create a pipeline.
|
27
27
|
- if: '$CI_MERGE_REQUEST_IID'
|
28
|
+
variables:
|
29
|
+
ALLURE_JOB_NAME: gitlab-qa
|
28
30
|
# For the default branch, create a pipeline (this includes on schedules, pushes, merges, etc.).
|
29
31
|
- if: '$CI_COMMIT_BRANCH == "master"'
|
30
|
-
|
31
|
-
|
32
|
+
variables:
|
33
|
+
ALLURE_JOB_NAME: gitlab-qa
|
32
34
|
# For triggers from GitLab MR pipelines (and pipelines from other projects), create a pipeline
|
33
35
|
- if: '$CI_PIPELINE_SOURCE == "pipeline"'
|
36
|
+
variables:
|
37
|
+
ALLURE_JOB_NAME: package-and-qa
|
38
|
+
# For tags, create a pipeline.
|
39
|
+
- if: '$CI_COMMIT_TAG'
|
34
40
|
# When using Run pipeline button in the GitLab UI, from the project’s CI/CD > Pipelines section, create a pipeline.
|
35
41
|
- if: '$CI_PIPELINE_SOURCE == "web"'
|
36
42
|
|
@@ -94,7 +100,6 @@ generate-jobs:
|
|
94
100
|
- bundle exec bin/qa Test::Instance::All http://dummy.test --count-examples-only -- $QA_TESTS --tag repository_storage
|
95
101
|
- bundle exec bin/qa Test::Instance::All http://dummy.test --count-examples-only -- $QA_TESTS --tag packages
|
96
102
|
- bundle exec bin/qa Test::Instance::All http://dummy.test --count-examples-only -- $QA_TESTS --tag integrations
|
97
|
-
- bundle exec bin/qa Test::Instance::All http://dummy.test --count-examples-only -- $QA_TESTS --tag actioncable
|
98
103
|
- bundle exec bin/qa Test::Instance::All http://dummy.test --count-examples-only -- $QA_TESTS --tag mtls
|
99
104
|
- bundle exec bin/qa Test::Instance::All http://dummy.test --count-examples-only -- $QA_TESTS --tag jira
|
100
105
|
- bundle exec bin/qa Test::Instance::All http://dummy.test --count-examples-only -- $QA_TESTS --tag can_use_large_setup
|
data/Gemfile.lock
ADDED
@@ -0,0 +1,248 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
gitlab-qa (7.29.1)
|
5
|
+
activesupport (~> 6.1)
|
6
|
+
gitlab (~> 4.18.0)
|
7
|
+
http (~> 5.0)
|
8
|
+
nokogiri (~> 1.10)
|
9
|
+
rainbow (~> 3.0.0)
|
10
|
+
table_print (= 1.5.7)
|
11
|
+
|
12
|
+
GEM
|
13
|
+
remote: https://rubygems.org/
|
14
|
+
specs:
|
15
|
+
activesupport (6.1.6)
|
16
|
+
concurrent-ruby (~> 1.0, >= 1.0.2)
|
17
|
+
i18n (>= 1.6, < 2)
|
18
|
+
minitest (>= 5.1)
|
19
|
+
tzinfo (~> 2.0)
|
20
|
+
zeitwerk (~> 2.3)
|
21
|
+
addressable (2.8.0)
|
22
|
+
public_suffix (>= 2.0.2, < 5.0)
|
23
|
+
ast (2.4.2)
|
24
|
+
backport (1.2.0)
|
25
|
+
benchmark (0.2.0)
|
26
|
+
claide (1.1.0)
|
27
|
+
claide-plugins (0.9.2)
|
28
|
+
cork
|
29
|
+
nap
|
30
|
+
open4 (~> 1.3)
|
31
|
+
climate_control (1.0.1)
|
32
|
+
coderay (1.1.3)
|
33
|
+
colored2 (3.1.2)
|
34
|
+
concurrent-ruby (1.1.10)
|
35
|
+
cork (0.3.0)
|
36
|
+
colored2 (~> 3.1)
|
37
|
+
crack (0.4.5)
|
38
|
+
rexml
|
39
|
+
danger (8.6.1)
|
40
|
+
claide (~> 1.0)
|
41
|
+
claide-plugins (>= 0.9.2)
|
42
|
+
colored2 (~> 3.1)
|
43
|
+
cork (~> 0.1)
|
44
|
+
faraday (>= 0.9.0, < 2.0)
|
45
|
+
faraday-http-cache (~> 2.0)
|
46
|
+
git (~> 1.7)
|
47
|
+
kramdown (~> 2.3)
|
48
|
+
kramdown-parser-gfm (~> 1.0)
|
49
|
+
no_proxy_fix
|
50
|
+
octokit (~> 4.7)
|
51
|
+
terminal-table (>= 1, < 4)
|
52
|
+
danger-gitlab (8.0.0)
|
53
|
+
danger
|
54
|
+
gitlab (~> 4.2, >= 4.2.0)
|
55
|
+
diff-lcs (1.5.0)
|
56
|
+
domain_name (0.5.20190701)
|
57
|
+
unf (>= 0.0.5, < 1.0.0)
|
58
|
+
e2mmap (0.1.0)
|
59
|
+
faraday (1.10.0)
|
60
|
+
faraday-em_http (~> 1.0)
|
61
|
+
faraday-em_synchrony (~> 1.0)
|
62
|
+
faraday-excon (~> 1.1)
|
63
|
+
faraday-httpclient (~> 1.0)
|
64
|
+
faraday-multipart (~> 1.0)
|
65
|
+
faraday-net_http (~> 1.0)
|
66
|
+
faraday-net_http_persistent (~> 1.0)
|
67
|
+
faraday-patron (~> 1.0)
|
68
|
+
faraday-rack (~> 1.0)
|
69
|
+
faraday-retry (~> 1.0)
|
70
|
+
ruby2_keywords (>= 0.0.4)
|
71
|
+
faraday-em_http (1.0.0)
|
72
|
+
faraday-em_synchrony (1.0.0)
|
73
|
+
faraday-excon (1.1.0)
|
74
|
+
faraday-http-cache (2.2.0)
|
75
|
+
faraday (>= 0.8)
|
76
|
+
faraday-httpclient (1.0.1)
|
77
|
+
faraday-multipart (1.0.3)
|
78
|
+
multipart-post (>= 1.2, < 3)
|
79
|
+
faraday-net_http (1.0.1)
|
80
|
+
faraday-net_http_persistent (1.2.0)
|
81
|
+
faraday-patron (1.0.0)
|
82
|
+
faraday-rack (1.0.0)
|
83
|
+
faraday-retry (1.0.3)
|
84
|
+
ffi (1.15.5)
|
85
|
+
ffi-compiler (1.0.1)
|
86
|
+
ffi (>= 1.0.0)
|
87
|
+
rake
|
88
|
+
git (1.11.0)
|
89
|
+
rchardet (~> 1.8)
|
90
|
+
gitlab (4.18.0)
|
91
|
+
httparty (~> 0.18)
|
92
|
+
terminal-table (>= 1.5.1)
|
93
|
+
gitlab-dangerfiles (2.11.0)
|
94
|
+
danger (>= 8.4.5)
|
95
|
+
danger-gitlab (>= 8.0.0)
|
96
|
+
gitlab-styles (6.2.1)
|
97
|
+
rubocop (~> 0.91, >= 0.91.1)
|
98
|
+
rubocop-gitlab-security (~> 0.1.1)
|
99
|
+
rubocop-performance (~> 1.9.2)
|
100
|
+
rubocop-rails (~> 2.9)
|
101
|
+
rubocop-rspec (~> 1.44)
|
102
|
+
hashdiff (1.0.1)
|
103
|
+
http (5.0.4)
|
104
|
+
addressable (~> 2.8)
|
105
|
+
http-cookie (~> 1.0)
|
106
|
+
http-form_data (~> 2.2)
|
107
|
+
llhttp-ffi (~> 0.4.0)
|
108
|
+
http-cookie (1.0.5)
|
109
|
+
domain_name (~> 0.5)
|
110
|
+
http-form_data (2.3.0)
|
111
|
+
httparty (0.20.0)
|
112
|
+
mime-types (~> 3.0)
|
113
|
+
multi_xml (>= 0.5.2)
|
114
|
+
i18n (1.10.0)
|
115
|
+
concurrent-ruby (~> 1.0)
|
116
|
+
jaro_winkler (1.5.4)
|
117
|
+
kramdown (2.4.0)
|
118
|
+
rexml
|
119
|
+
kramdown-parser-gfm (1.1.0)
|
120
|
+
kramdown (~> 2.0)
|
121
|
+
llhttp-ffi (0.4.0)
|
122
|
+
ffi-compiler (~> 1.0)
|
123
|
+
rake (~> 13.0)
|
124
|
+
method_source (1.0.0)
|
125
|
+
mime-types (3.4.1)
|
126
|
+
mime-types-data (~> 3.2015)
|
127
|
+
mime-types-data (3.2022.0105)
|
128
|
+
mini_portile2 (2.8.0)
|
129
|
+
minitest (5.15.0)
|
130
|
+
multi_xml (0.6.0)
|
131
|
+
multipart-post (2.1.1)
|
132
|
+
nap (1.1.0)
|
133
|
+
no_proxy_fix (0.1.2)
|
134
|
+
nokogiri (1.13.6)
|
135
|
+
mini_portile2 (~> 2.8.0)
|
136
|
+
racc (~> 1.4)
|
137
|
+
octokit (4.22.0)
|
138
|
+
faraday (>= 0.9)
|
139
|
+
sawyer (~> 0.8.0, >= 0.5.3)
|
140
|
+
open4 (1.3.4)
|
141
|
+
parallel (1.22.1)
|
142
|
+
parser (3.1.2.0)
|
143
|
+
ast (~> 2.4.1)
|
144
|
+
pry (0.14.1)
|
145
|
+
coderay (~> 1.1)
|
146
|
+
method_source (~> 1.0)
|
147
|
+
public_suffix (4.0.7)
|
148
|
+
racc (1.6.0)
|
149
|
+
rack (2.2.3)
|
150
|
+
rainbow (3.0.0)
|
151
|
+
rake (13.0.6)
|
152
|
+
rchardet (1.8.0)
|
153
|
+
regexp_parser (2.4.0)
|
154
|
+
reverse_markdown (2.1.1)
|
155
|
+
nokogiri
|
156
|
+
rexml (3.2.5)
|
157
|
+
rspec (3.11.0)
|
158
|
+
rspec-core (~> 3.11.0)
|
159
|
+
rspec-expectations (~> 3.11.0)
|
160
|
+
rspec-mocks (~> 3.11.0)
|
161
|
+
rspec-core (3.11.0)
|
162
|
+
rspec-support (~> 3.11.0)
|
163
|
+
rspec-expectations (3.11.0)
|
164
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
165
|
+
rspec-support (~> 3.11.0)
|
166
|
+
rspec-mocks (3.11.1)
|
167
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
168
|
+
rspec-support (~> 3.11.0)
|
169
|
+
rspec-support (3.11.0)
|
170
|
+
rubocop (0.93.1)
|
171
|
+
parallel (~> 1.10)
|
172
|
+
parser (>= 2.7.1.5)
|
173
|
+
rainbow (>= 2.2.2, < 4.0)
|
174
|
+
regexp_parser (>= 1.8)
|
175
|
+
rexml
|
176
|
+
rubocop-ast (>= 0.6.0)
|
177
|
+
ruby-progressbar (~> 1.7)
|
178
|
+
unicode-display_width (>= 1.4.0, < 2.0)
|
179
|
+
rubocop-ast (1.18.0)
|
180
|
+
parser (>= 3.1.1.0)
|
181
|
+
rubocop-gitlab-security (0.1.1)
|
182
|
+
rubocop (>= 0.51)
|
183
|
+
rubocop-performance (1.9.2)
|
184
|
+
rubocop (>= 0.90.0, < 2.0)
|
185
|
+
rubocop-ast (>= 0.4.0)
|
186
|
+
rubocop-rails (2.9.1)
|
187
|
+
activesupport (>= 4.2.0)
|
188
|
+
rack (>= 1.1)
|
189
|
+
rubocop (>= 0.90.0, < 2.0)
|
190
|
+
rubocop-rspec (1.44.1)
|
191
|
+
rubocop (~> 0.87)
|
192
|
+
rubocop-ast (>= 0.7.1)
|
193
|
+
ruby-progressbar (1.11.0)
|
194
|
+
ruby2_keywords (0.0.5)
|
195
|
+
sawyer (0.8.2)
|
196
|
+
addressable (>= 2.3.5)
|
197
|
+
faraday (> 0.8, < 2.0)
|
198
|
+
solargraph (0.45.0)
|
199
|
+
backport (~> 1.2)
|
200
|
+
benchmark
|
201
|
+
bundler (>= 1.17.2)
|
202
|
+
diff-lcs (~> 1.4)
|
203
|
+
e2mmap
|
204
|
+
jaro_winkler (~> 1.5)
|
205
|
+
kramdown (~> 2.3)
|
206
|
+
kramdown-parser-gfm (~> 1.1)
|
207
|
+
parser (~> 3.0)
|
208
|
+
reverse_markdown (>= 1.0.5, < 3)
|
209
|
+
rubocop (>= 0.52)
|
210
|
+
thor (~> 1.0)
|
211
|
+
tilt (~> 2.0)
|
212
|
+
yard (~> 0.9, >= 0.9.24)
|
213
|
+
table_print (1.5.7)
|
214
|
+
terminal-table (3.0.2)
|
215
|
+
unicode-display_width (>= 1.1.1, < 3)
|
216
|
+
thor (1.2.1)
|
217
|
+
tilt (2.0.10)
|
218
|
+
tzinfo (2.0.4)
|
219
|
+
concurrent-ruby (~> 1.0)
|
220
|
+
unf (0.1.4)
|
221
|
+
unf_ext
|
222
|
+
unf_ext (0.0.8.2)
|
223
|
+
unicode-display_width (1.8.0)
|
224
|
+
webmock (3.7.0)
|
225
|
+
addressable (>= 2.3.6)
|
226
|
+
crack (>= 0.3.2)
|
227
|
+
hashdiff (>= 0.4.0, < 2.0.0)
|
228
|
+
webrick (1.7.0)
|
229
|
+
yard (0.9.27)
|
230
|
+
webrick (~> 1.7.0)
|
231
|
+
zeitwerk (2.5.4)
|
232
|
+
|
233
|
+
PLATFORMS
|
234
|
+
ruby
|
235
|
+
|
236
|
+
DEPENDENCIES
|
237
|
+
climate_control (~> 1.0.1)
|
238
|
+
gitlab-dangerfiles (~> 2.11)
|
239
|
+
gitlab-qa!
|
240
|
+
gitlab-styles (~> 6.2.1)
|
241
|
+
pry (~> 0.11)
|
242
|
+
rake (~> 13.0)
|
243
|
+
rspec (~> 3.7)
|
244
|
+
solargraph (~> 0.41)
|
245
|
+
webmock (= 3.7.0)
|
246
|
+
|
247
|
+
BUNDLED WITH
|
248
|
+
2.2.33
|
@@ -68,7 +68,7 @@ All environment variables used by GitLab QA should be defined in [`lib/gitlab/qa
|
|
68
68
|
| `QA_PRAEFECT_REPOSITORY_STORAGE` |- | The name of repository storage using Praefect. Note: Admin access is required to change repository storage. | No|
|
69
69
|
| `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|
|
70
70
|
| `QA_DEBUG` |- | Set to `true` to verbosely log page object actions. Note: if enabled be aware that sensitive data might be logged. If an input element has a QA selector with `password` in the name, data entered into the input element will be masked. If the element doesn't have `password` in its name it won't be masked. | No|
|
71
|
-
| `QA_LOG_PATH` |- | Path to output debug logging to.
|
71
|
+
| `QA_LOG_PATH` |- | Path to output debug logging to. By default `QA_ARTIFACTS_DIR` is used | No|
|
72
72
|
| `QA_CAN_TEST_GIT_PROTOCOL_V2` | `true` | Set to `false` to skip tests that require Git protocol v2 if your environment doesn't support it. | No|
|
73
73
|
| `QA_CAN_TEST_ADMIN_FEATURES` | `true` | Set to `false` to skip tests that require admin access. | No|
|
74
74
|
| `QA_CAN_TEST_PRAEFECT` | `true` | Set to `false` to skip tests that require Praefect to be running. | No|
|
@@ -651,23 +651,6 @@ $ export EE_LICENSE=$(cat /path/to/GitLab.gitlab_license)
|
|
651
651
|
$ gitlab-qa Test::Integration::Jira EE
|
652
652
|
```
|
653
653
|
|
654
|
-
### `Test::Integration::Actioncable CE|EE|<full image address>`
|
655
|
-
|
656
|
-
This tests the real-time assignees feature by setting
|
657
|
-
`actioncable['enable'] = true` in the Omnibus configuration
|
658
|
-
before starting the GitLab container.
|
659
|
-
|
660
|
-
To run tests against the GitLab container, a GitLab QA (`gitlab/gitlab-qa`)
|
661
|
-
container is spun up and tests are run from it by running the
|
662
|
-
`Test::Instance::All` scenario with the `--tag actioncable` RSpec parameter,
|
663
|
-
which runs only the tests with `:actioncable` metadata.
|
664
|
-
|
665
|
-
Example:
|
666
|
-
|
667
|
-
```
|
668
|
-
$ gitlab-qa Test::Integration::Actioncable CE
|
669
|
-
```
|
670
|
-
|
671
654
|
### `Test::Integration::Integrations CE|<full image address>`
|
672
655
|
|
673
656
|
This scenario is intended to test the different integrations that a GitLab instance can offer, such as WebHooks to an external service, Jenkins, etc.
|
@@ -729,6 +712,23 @@ in the GitLab project).
|
|
729
712
|
This is used to retrieve the version that staging is currently running.
|
730
713
|
This can be found in the shared 1Password vault.
|
731
714
|
|
715
|
+
- `GITLAB_USERNAME`: An existing user.
|
716
|
+
|
717
|
+
- `GITLAB_PASSWORD`: The user's password.
|
718
|
+
|
719
|
+
**Required by specific tests:**
|
720
|
+
|
721
|
+
- `QA_PRAEFECT_REPOSITORY_STORAGE`: The name of a Gitaly Cluster storage.
|
722
|
+
|
723
|
+
- `GITLAB_ADMIN_USERNAME`: An existing user with administrator access. Required by tests that set feature flags or
|
724
|
+
perform other admin actions.
|
725
|
+
|
726
|
+
- `GITLAB_ADMIN_PASSWORD`: The administrator user's password.
|
727
|
+
|
728
|
+
- `GITLAB_QA_USERNAME_X`: The username of a pre-generated test user, where `X` is `1` to `6`.
|
729
|
+
|
730
|
+
- `GITLAB_QA_PASSWORD_X`: The pre-generated test user's password.
|
731
|
+
|
732
732
|
**Optional environment variables:**
|
733
733
|
|
734
734
|
- `GITLAB_QA_DEV_ACCESS_TOKEN`: A valid personal access token for the
|
@@ -736,17 +736,24 @@ in the GitLab project).
|
|
736
736
|
This is used to pull the QA Docker image from the Omnibus GitLab `dev` Container Registry.
|
737
737
|
If the variable isn't present, the QA image from Docker Hub will be used.
|
738
738
|
This can be found in the shared 1Password vault.
|
739
|
+
Please note that this variable must be provided when you need to be sure the version of the
|
740
|
+
tests matches the version of GitLab on Staging. If the version from Docker Hub is used it might not include changes deployed to Staging very recently.
|
739
741
|
|
740
|
-
|
742
|
+
An example of how to run the smoke tests:
|
741
743
|
|
742
744
|
```
|
743
|
-
$ export GITLAB_QA_USER_AGENT="
|
744
|
-
$ export GITLAB_QA_ACCESS_TOKEN=
|
745
|
-
$ export GITLAB_QA_DEV_ACCESS_TOKEN=
|
745
|
+
$ export GITLAB_QA_USER_AGENT="<value from 1Password>"
|
746
|
+
$ export GITLAB_QA_ACCESS_TOKEN="<value from 1Password>"
|
747
|
+
$ export GITLAB_QA_DEV_ACCESS_TOKEN="<value from 1Password>"
|
746
748
|
$ export GITLAB_USERNAME="gitlab-qa"
|
747
|
-
$ export GITLAB_PASSWORD="
|
749
|
+
$ export GITLAB_PASSWORD="<value from 1Password>"
|
750
|
+
$ export GITLAB_ADMIN_USERNAME="<value from 1Password>"
|
751
|
+
$ export GITLAB_ADMIN_PASSWORD="<value from 1Password>"
|
752
|
+
$ export GITLAB_QA_USERNAME_1="gitlab-qa-user1"
|
753
|
+
$ export GITLAB_QA_PASSWORD_1="<value from 1Password>"
|
754
|
+
$ export QA_PRAEFECT_REPOSITORY_STORAGE="nfs-file22"
|
748
755
|
|
749
|
-
$ gitlab-qa Test::Instance::Staging
|
756
|
+
$ gitlab-qa Test::Instance::Staging -- --tag smoke
|
750
757
|
```
|
751
758
|
|
752
759
|
### `Test::Instance::StagingRef`
|
@@ -845,6 +852,52 @@ by setting `QA_COOKIES=gitlab_canary=true`. This adds a cookie
|
|
845
852
|
to all web requests which will result in them being routed
|
846
853
|
to the canary fleet.
|
847
854
|
|
855
|
+
**Required environment variables:**
|
856
|
+
|
857
|
+
- `GITLAB_QA_USER_AGENT`: The browser user-agent to use instead of the default Chrome user-agent.
|
858
|
+
This is needed for the automated tests to bypass the WAF
|
859
|
+
|
860
|
+
- `GITLAB_QA_ACCESS_TOKEN`: A valid personal access token with the `api` scope.
|
861
|
+
This is used to retrieve the version that staging is currently running.
|
862
|
+
This can be found in the shared 1Password vault.
|
863
|
+
|
864
|
+
- `GITLAB_USERNAME`: An existing user.
|
865
|
+
|
866
|
+
- `GITLAB_PASSWORD`: The user's password.
|
867
|
+
|
868
|
+
**Required by specific tests:**
|
869
|
+
|
870
|
+
- `GITLAB_QA_USERNAME_X`: The username of a pre-generated test user, where `X` is `1` to `6`.
|
871
|
+
|
872
|
+
- `GITLAB_QA_PASSWORD_X`: The pre-generated test user's password.
|
873
|
+
|
874
|
+
**Optional environment variables:**
|
875
|
+
|
876
|
+
- `GITLAB_QA_DEV_ACCESS_TOKEN`: A valid personal access token for the
|
877
|
+
`gitlab-qa-bot` on `dev.gitlab.org` with the `registry` scope.
|
878
|
+
This is used to pull the QA Docker image from the Omnibus GitLab `dev` Container Registry.
|
879
|
+
If the variable isn't present, the QA image from Docker Hub will be used.
|
880
|
+
This can be found in the shared 1Password vault.
|
881
|
+
Please note that this variable should be provided when you need to be sure the version of the
|
882
|
+
tests matches the version of GitLab on Staging. If the version from Docker Hub is used it might not include changes deployed to Staging very recently.
|
883
|
+
|
884
|
+
An example of how to run the smoke tests:
|
885
|
+
|
886
|
+
```
|
887
|
+
$ export GITLAB_QA_USER_AGENT="<value from 1Password>"
|
888
|
+
$ export GITLAB_QA_ACCESS_TOKEN="<value from 1Password>"
|
889
|
+
$ export GITLAB_QA_DEV_ACCESS_TOKEN="<value from 1Password>"
|
890
|
+
$ export GITLAB_USERNAME="gitlab-qa"
|
891
|
+
$ export GITLAB_PASSWORD="<value from 1Password>"
|
892
|
+
$ export GITLAB_QA_USERNAME_1="gitlab-qa-user1"
|
893
|
+
$ export GITLAB_QA_PASSWORD_1="<value from 1Password>"
|
894
|
+
$ export QA_CAN_TEST_GIT_PROTOCOL_V2="false"
|
895
|
+
$ export QA_CAN_TEST_ADMIN_FEATURES="false"
|
896
|
+
$ export QA_CAN_TEST_PRAEFECT="false"
|
897
|
+
|
898
|
+
$ gitlab-qa Test::Instance::Production -- --tag smoke
|
899
|
+
```
|
900
|
+
|
848
901
|
### `Test::Instance::Preprod`
|
849
902
|
|
850
903
|
This scenario functions the same as `Test::Instance::Staging`
|
@@ -155,7 +155,6 @@ module Gitlab
|
|
155
155
|
setup_omnibus
|
156
156
|
|
157
157
|
@docker.attach(name) do |line, wait|
|
158
|
-
puts line
|
159
158
|
# TODO, workaround which allows to detach from the container
|
160
159
|
break if /gitlab Reconfigured!/.match?(line)
|
161
160
|
end
|
@@ -174,11 +173,15 @@ module Gitlab
|
|
174
173
|
def process_exec_commands
|
175
174
|
@docker.copy(name, DATA_SEED_PATH, DATA_PATH) if seed_admin_token || seed_db
|
176
175
|
|
177
|
-
|
178
|
-
|
176
|
+
exec_commands << seed_admin_token_command if seed_admin_token
|
177
|
+
exec_commands << seed_test_data_command if seed_db
|
178
|
+
exec_commands << Runtime::Scenario.omnibus_exec_commands
|
179
|
+
|
180
|
+
commands = exec_commands.flatten.uniq
|
181
|
+
return if commands.empty?
|
179
182
|
|
180
183
|
Runtime::Logger.info("Running exec_commands...")
|
181
|
-
|
184
|
+
commands.each { |command| @docker.exec(name, command) }
|
182
185
|
end
|
183
186
|
|
184
187
|
def sha_version
|
@@ -11,7 +11,7 @@ module Gitlab
|
|
11
11
|
attr_accessor :suite, :release, :network, :args, :volumes, :env, :runner_network, :hostname
|
12
12
|
|
13
13
|
def initialize
|
14
|
-
@docker = Docker::Engine.new
|
14
|
+
@docker = Docker::Engine.new(stream_output: true) # stream test output directly instead of through logger
|
15
15
|
@volumes = {}
|
16
16
|
@env = {}
|
17
17
|
end
|
@@ -2,11 +2,17 @@ module Gitlab
|
|
2
2
|
module QA
|
3
3
|
module Docker
|
4
4
|
class Command
|
5
|
-
attr_reader :args
|
5
|
+
attr_reader :args, :stream_output
|
6
6
|
|
7
|
-
|
7
|
+
# Shell command
|
8
|
+
#
|
9
|
+
# @param [<String, Array>] cmd
|
10
|
+
# @param [<String, Array>] mask_secrets
|
11
|
+
# @param [Boolean] stream_output stream command output to stdout directly instead of logger
|
12
|
+
def initialize(cmd = nil, mask_secrets: nil, stream_output: false)
|
8
13
|
@args = Array(cmd)
|
9
14
|
@mask_secrets = Array(mask_secrets)
|
15
|
+
@stream_output = stream_output
|
10
16
|
end
|
11
17
|
|
12
18
|
def <<(*args)
|
@@ -7,6 +7,12 @@ module Gitlab
|
|
7
7
|
DOCKER_HOST = ENV['DOCKER_HOST'] || 'http://localhost'
|
8
8
|
PRIVILEGED_COMMANDS = [/^iptables.*/].freeze
|
9
9
|
|
10
|
+
attr_reader :stream_output
|
11
|
+
|
12
|
+
def initialize(stream_output: false)
|
13
|
+
@stream_output = stream_output
|
14
|
+
end
|
15
|
+
|
10
16
|
def hostname
|
11
17
|
URI(DOCKER_HOST).host
|
12
18
|
end
|
@@ -15,12 +21,17 @@ module Gitlab
|
|
15
21
|
Docker::Command.execute(%(login --username "#{username}" --password "#{password}" #{registry}), mask_secrets: password)
|
16
22
|
end
|
17
23
|
|
18
|
-
def pull(image:, tag: nil)
|
19
|
-
Docker::Command.
|
24
|
+
def pull(image:, tag: nil, quiet: true)
|
25
|
+
Docker::Command.new("pull").tap do |command|
|
26
|
+
command << "-q" if quiet
|
27
|
+
command << full_image_name(image, tag)
|
28
|
+
|
29
|
+
command.execute!
|
30
|
+
end
|
20
31
|
end
|
21
32
|
|
22
33
|
def run(image:, tag: nil, args: [])
|
23
|
-
Docker::Command.new('run').tap do |command|
|
34
|
+
Docker::Command.new('run', stream_output: stream_output).tap do |command|
|
24
35
|
yield command if block_given?
|
25
36
|
|
26
37
|
command << full_image_name(image, tag)
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'open3'
|
2
4
|
require 'rainbow/refinement'
|
3
5
|
|
@@ -6,35 +8,57 @@ module Gitlab
|
|
6
8
|
module Docker
|
7
9
|
class Shellout
|
8
10
|
using Rainbow
|
11
|
+
|
9
12
|
StatusError = Class.new(StandardError)
|
10
13
|
|
11
14
|
def initialize(command)
|
12
15
|
@command = command
|
13
16
|
@output = []
|
14
|
-
|
15
|
-
Rainbow.enabled = Runtime::Env.colorized_logs?
|
16
|
-
Runtime::Logger.info("Docker shell command: `#{@command.mask_secrets}`".cyan)
|
17
|
+
@logger = Runtime::Logger.logger
|
17
18
|
end
|
18
19
|
|
20
|
+
attr_reader :command, :logger
|
21
|
+
|
19
22
|
def execute! # rubocop:disable Metrics/AbcSize
|
20
23
|
raise StatusError, 'Command already executed' if @output.any?
|
21
24
|
|
25
|
+
logger.info("Docker shell command: `#{@command.mask_secrets.cyan}`")
|
26
|
+
|
22
27
|
Open3.popen2e(@command.to_s) do |_in, out, wait|
|
23
28
|
out.each do |line|
|
24
29
|
@output.push(line)
|
25
30
|
|
26
|
-
if
|
27
|
-
|
28
|
-
|
31
|
+
if stream_progress
|
32
|
+
print "."
|
33
|
+
elsif command.stream_output
|
29
34
|
puts line
|
30
35
|
end
|
36
|
+
|
37
|
+
yield line, wait if block_given?
|
31
38
|
end
|
39
|
+
puts if stream_progress
|
32
40
|
|
33
|
-
if wait.value.exited? && wait.value.exitstatus.nonzero?
|
34
|
-
|
41
|
+
if wait.value.exited? && wait.value.exitstatus.nonzero?
|
42
|
+
logger.error("Docker shell command output:\n#{output}") unless command.stream_output
|
43
|
+
raise StatusError, "Docker command `#{@command.mask_secrets[0..100]}` failed! ✘"
|
35
44
|
end
|
45
|
+
|
46
|
+
logger.debug("Docker shell command output:\n#{output}") unless command.stream_output || output.empty?
|
36
47
|
end
|
37
48
|
|
49
|
+
output
|
50
|
+
end
|
51
|
+
|
52
|
+
private
|
53
|
+
|
54
|
+
# Stream only command execution progress and log output when command finished
|
55
|
+
#
|
56
|
+
# @return [Boolean]
|
57
|
+
def stream_progress
|
58
|
+
!(Runtime::Env.ci || command.stream_output)
|
59
|
+
end
|
60
|
+
|
61
|
+
def output
|
38
62
|
@output.join.chomp
|
39
63
|
end
|
40
64
|
end
|
@@ -114,6 +114,9 @@ module Gitlab
|
|
114
114
|
line.include?(File.basename(report['file_path']))
|
115
115
|
end
|
116
116
|
|
117
|
+
exception['message'].gsub!(/(private_token=)[\w-]+/, '********')
|
118
|
+
exception['message_lines'].each { |line| line.gsub!(/(private_token=)([\w-]+)/, '********') }
|
119
|
+
|
117
120
|
{
|
118
121
|
'message' => "#{exception['class']}: #{exception['message']}",
|
119
122
|
'message_lines' => exception['message_lines'],
|
@@ -145,6 +148,7 @@ module Gitlab
|
|
145
148
|
|
146
149
|
private
|
147
150
|
|
151
|
+
# rubocop:disable Metrics/AbcSize
|
148
152
|
def failures_from_exceptions
|
149
153
|
failures = report.search('failure')
|
150
154
|
return [] if failures.empty?
|
@@ -155,12 +159,15 @@ module Gitlab
|
|
155
159
|
line.include?(File.basename(report['file']))
|
156
160
|
end
|
157
161
|
|
162
|
+
exception['message'].gsub!(/(private_token=)[\w-]+/, '********')
|
163
|
+
|
158
164
|
{
|
159
165
|
'message' => "#{exception['type']}: #{exception['message']}",
|
160
166
|
'stacktrace' => trace.slice(0..spec_file_first_index).join("\n")
|
161
167
|
}
|
162
168
|
end
|
163
169
|
end
|
170
|
+
# rubocop:enable Metrics/AbcSize
|
164
171
|
end
|
165
172
|
end
|
166
173
|
end
|
@@ -27,7 +27,6 @@ module Gitlab
|
|
27
27
|
'QA_COOKIES' => :qa_cookie,
|
28
28
|
'QA_DEBUG' => :qa_debug,
|
29
29
|
'QA_DEFAULT_BRANCH' => :qa_default_branch,
|
30
|
-
'QA_LOG_PATH' => :qa_log_path,
|
31
30
|
'QA_CAN_TEST_ADMIN_FEATURES' => :qa_can_test_admin_features,
|
32
31
|
'QA_CAN_TEST_GIT_PROTOCOL_V2' => :qa_can_test_git_protocol_v2,
|
33
32
|
'QA_CAN_TEST_PRAEFECT' => :qa_can_test_praefect,
|
@@ -168,6 +167,14 @@ module Gitlab
|
|
168
167
|
enabled?(ENV['QA_DEBUG'], default: true)
|
169
168
|
end
|
170
169
|
|
170
|
+
def log_level
|
171
|
+
env_var_value_if_defined('QA_LOG_LEVEL')&.upcase || 'INFO'
|
172
|
+
end
|
173
|
+
|
174
|
+
def log_path
|
175
|
+
env_var_value_if_defined('QA_LOG_PATH') || host_artifacts_dir
|
176
|
+
end
|
177
|
+
|
171
178
|
def default_branch
|
172
179
|
env_var_value_if_defined('QA_DEFAULT_BRANCH') || 'main'
|
173
180
|
end
|
@@ -11,7 +11,12 @@ module Gitlab
|
|
11
11
|
def_delegators :logger, :debug, :info, :warn, :error, :fatal, :unknown
|
12
12
|
|
13
13
|
def self.logger
|
14
|
-
@logger ||=
|
14
|
+
@logger ||= begin
|
15
|
+
log_path = Env.log_path
|
16
|
+
::FileUtils.mkdir_p(log_path) unless File.exist?(log_path)
|
17
|
+
|
18
|
+
TestLogger.logger(level: Env.debug? ? "DEBUG" : Env.log_level, path: log_path)
|
19
|
+
end
|
15
20
|
end
|
16
21
|
end
|
17
22
|
end
|
@@ -22,7 +22,8 @@ module Gitlab
|
|
22
22
|
"gitlab-psql -c 'create database gitlabhq_production_ci owner gitlab'",
|
23
23
|
"gitlab-psql -d gitlabhq_production_ci -c 'create extension btree_gist'",
|
24
24
|
"gitlab-psql -d gitlabhq_production_ci -c 'create extension pg_trgm'",
|
25
|
-
"gitlab-rake db:structure:load:ci"
|
25
|
+
"gitlab-rake db:structure:load:ci",
|
26
|
+
"gitlab-ctl restart"
|
26
27
|
].freeze
|
27
28
|
end
|
28
29
|
end
|
@@ -5,21 +5,19 @@ module Gitlab
|
|
5
5
|
module Runtime
|
6
6
|
module OmnibusConfigurations
|
7
7
|
class ObjectStorage < Default
|
8
|
-
TYPES = %w[artifacts external_diffs lfs uploads packages dependency_proxy].freeze
|
8
|
+
TYPES = %w[artifacts external_diffs lfs uploads packages dependency_proxy terraform_state pages].freeze
|
9
9
|
|
10
10
|
def configuration
|
11
|
-
TYPES.each_with_object(+'') do |object_type, omnibus|
|
11
|
+
config = TYPES.each_with_object(+'') do |object_type, omnibus|
|
12
12
|
omnibus << <<~OMNIBUS
|
13
|
-
gitlab_rails['#{object_type}
|
14
|
-
gitlab_rails['#{object_type}_storage_path'] = '/var/opt/gitlab/gitlab-rails/shared/#{object_type}'
|
15
|
-
gitlab_rails['#{object_type}_object_store_enabled'] = true
|
16
|
-
gitlab_rails['#{object_type}_object_store_remote_directory'] = '#{object_type}-bucket'
|
17
|
-
gitlab_rails['#{object_type}_object_store_background_upload'] = false
|
18
|
-
gitlab_rails['#{object_type}_object_store_direct_upload'] = true
|
19
|
-
gitlab_rails['#{object_type}_object_store_proxy_download'] = true
|
20
|
-
gitlab_rails['#{object_type}_object_store_connection'] = #{minio.to_config}
|
13
|
+
gitlab_rails['object_store']['objects']['#{object_type}']['bucket'] = '#{object_type}-bucket'
|
21
14
|
OMNIBUS
|
22
15
|
end
|
16
|
+
config << <<~OMNIBUS
|
17
|
+
gitlab_rails['object_store']['enabled'] = true
|
18
|
+
gitlab_rails['object_store']['proxy_download'] = true
|
19
|
+
gitlab_rails['object_store']['connection'] = #{minio.to_config}
|
20
|
+
OMNIBUS
|
23
21
|
end
|
24
22
|
|
25
23
|
def prepare
|
@@ -13,6 +13,7 @@ module Gitlab
|
|
13
13
|
gitlab.release = release
|
14
14
|
gitlab.network = 'test'
|
15
15
|
gitlab.name = 'gitlab'
|
16
|
+
gitlab.seed_admin_token = false
|
16
17
|
sign_url_key_path = gitlab.copy_key_file('GOOGLE_CDN_SIGNURL_KEY')
|
17
18
|
cdn_gcloud_path = gitlab.copy_key_file('GOOGLE_CDN_JSON_KEY')
|
18
19
|
|
@@ -1,13 +1,14 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require 'logger'
|
4
3
|
require 'rainbow'
|
4
|
+
require 'active_support/logger'
|
5
5
|
|
6
6
|
module Gitlab
|
7
7
|
module QA
|
8
8
|
# Common test logger implementation
|
9
9
|
#
|
10
10
|
class TestLogger
|
11
|
+
TIME_FORMAT = "%Y-%m-%d %H:%M:%S"
|
11
12
|
LEVEL_COLORS = {
|
12
13
|
"DEBUG" => :magenta,
|
13
14
|
"INFO" => :green,
|
@@ -18,17 +19,62 @@ module Gitlab
|
|
18
19
|
|
19
20
|
Rainbow.enabled = Runtime::Env.colorized_logs?
|
20
21
|
|
21
|
-
|
22
|
-
|
23
|
-
|
22
|
+
class << self
|
23
|
+
# Combined logger instance
|
24
|
+
#
|
25
|
+
# @param [<Symbol, String>] level
|
26
|
+
# @param [String] source
|
27
|
+
# @return [ActiveSupport::Logger]
|
28
|
+
def logger(level: :info, source: 'Gitlab QA', path: 'tmp')
|
29
|
+
console_log = console_logger(level: level, source: source)
|
30
|
+
file_log = file_logger(source: source, path: path)
|
24
31
|
|
25
|
-
|
26
|
-
|
27
|
-
|
32
|
+
console_log.extend(ActiveSupport::Logger.broadcast(file_log))
|
33
|
+
end
|
34
|
+
|
35
|
+
private
|
36
|
+
|
37
|
+
# Console logger instance
|
38
|
+
#
|
39
|
+
# @param [<Symbol, String>] level
|
40
|
+
# @param [String] source
|
41
|
+
# @return [ActiveSupport::Logger]
|
42
|
+
def console_logger(level:, source:)
|
43
|
+
ActiveSupport::Logger.new($stdout, level: level, datetime_format: TIME_FORMAT).tap do |logger|
|
44
|
+
logger.formatter = proc do |severity, datetime, progname, msg|
|
45
|
+
msg_prefix = message_prefix(datetime, source, severity)
|
46
|
+
|
47
|
+
Rainbow(msg_prefix).public_send(LEVEL_COLORS.fetch(severity, :silver)) + "#{msg}\n" # rubocop:disable GitlabSecurity/PublicSend
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
# File logger
|
53
|
+
#
|
54
|
+
# @param [String] source
|
55
|
+
# @param [String] path
|
56
|
+
# @return [ActiveSupport::Logger]
|
57
|
+
def file_logger(source:, path:)
|
58
|
+
log_file = "#{path}/#{source.downcase.tr(' ', '-')}.log"
|
59
|
+
|
60
|
+
ActiveSupport::Logger.new(log_file, level: :debug, datetime_format: TIME_FORMAT).tap do |logger|
|
61
|
+
logger.formatter = proc do |severity, datetime, progname, msg|
|
62
|
+
msg_prefix = message_prefix(datetime, source, severity)
|
28
63
|
|
29
|
-
|
64
|
+
"#{msg_prefix}#{msg}\n"
|
65
|
+
end
|
30
66
|
end
|
31
67
|
end
|
68
|
+
|
69
|
+
# Log message prefix
|
70
|
+
#
|
71
|
+
# @param [DateTime] date
|
72
|
+
# @param [String] source
|
73
|
+
# @param [String] severity
|
74
|
+
# @return [String]
|
75
|
+
def message_prefix(date, source, severity)
|
76
|
+
"[date=#{date} from=#{source}] #{severity.ljust(5)} -- "
|
77
|
+
end
|
32
78
|
end
|
33
79
|
end
|
34
80
|
end
|
data/lib/gitlab/qa/version.rb
CHANGED
data/lib/gitlab/qa.rb
CHANGED
@@ -55,7 +55,6 @@ module Gitlab
|
|
55
55
|
end
|
56
56
|
|
57
57
|
module Integration
|
58
|
-
autoload :Actioncable, 'gitlab/qa/scenario/test/integration/actioncable'
|
59
58
|
autoload :Geo, 'gitlab/qa/scenario/test/integration/geo'
|
60
59
|
autoload :LDAP, 'gitlab/qa/scenario/test/integration/ldap'
|
61
60
|
autoload :LDAPNoTLS, 'gitlab/qa/scenario/test/integration/ldap_no_tls'
|
data/scripts/generate-qa-jobs.rb
CHANGED
@@ -34,7 +34,6 @@ class GenerateQAJobs
|
|
34
34
|
jobs.concat(load_yml_contents('object_storage_registry_tls')) if should_run?('test_integration_registrytls')
|
35
35
|
jobs.concat(load_yml_contents('registry')) if should_run?('test_integration_registry')
|
36
36
|
jobs.concat(load_yml_contents('packages')) if should_run?('test_instance_all_packages')
|
37
|
-
jobs.concat(load_yml_contents('actioncable')) if should_run?('test_instance_all_actioncable')
|
38
37
|
jobs.concat(load_yml_contents('elasticsearch')) if should_run?('test_integration_elasticsearch')
|
39
38
|
jobs.concat(load_yml_contents('praefect')) if should_run?('test_instance_all')
|
40
39
|
jobs.concat(load_yml_contents('gitaly_cluster')) if should_run?('test_instance_all')
|
data/tmp/.gitignore
ADDED
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.29.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: 2022-05-
|
11
|
+
date: 2022-05-31 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: climate_control
|
@@ -218,7 +218,6 @@ files:
|
|
218
218
|
- ".dockerignore"
|
219
219
|
- ".gitignore"
|
220
220
|
- ".gitlab-ci.yml"
|
221
|
-
- ".gitlab/ci/jobs/actioncable.gitlab-ci.yml"
|
222
221
|
- ".gitlab/ci/jobs/base.gitlab-ci.yml"
|
223
222
|
- ".gitlab/ci/jobs/ci_decomposition.gitlab-ci.yml"
|
224
223
|
- ".gitlab/ci/jobs/cloud_activation.gitlab-ci.yml"
|
@@ -265,6 +264,7 @@ files:
|
|
265
264
|
- CONTRIBUTING.md
|
266
265
|
- Dangerfile
|
267
266
|
- Gemfile
|
267
|
+
- Gemfile.lock
|
268
268
|
- LICENSE
|
269
269
|
- README.md
|
270
270
|
- Rakefile
|
@@ -364,7 +364,6 @@ files:
|
|
364
364
|
- lib/gitlab/qa/scenario/test/instance/staging_geo.rb
|
365
365
|
- lib/gitlab/qa/scenario/test/instance/staging_ref.rb
|
366
366
|
- lib/gitlab/qa/scenario/test/instance/staging_ref_geo.rb
|
367
|
-
- lib/gitlab/qa/scenario/test/integration/actioncable.rb
|
368
367
|
- lib/gitlab/qa/scenario/test/integration/client_ssl.rb
|
369
368
|
- lib/gitlab/qa/scenario/test/integration/elasticsearch.rb
|
370
369
|
- lib/gitlab/qa/scenario/test/integration/geo.rb
|
@@ -411,6 +410,7 @@ files:
|
|
411
410
|
- tls_certificates/gitlab/gitlab.test.crt
|
412
411
|
- tls_certificates/gitlab/gitlab.test.csr
|
413
412
|
- tls_certificates/gitlab/gitlab.test.key
|
413
|
+
- tmp/.gitignore
|
414
414
|
homepage: http://about.gitlab.com/
|
415
415
|
licenses:
|
416
416
|
- MIT
|
@@ -1,41 +0,0 @@
|
|
1
|
-
ce:actioncable:
|
2
|
-
extends:
|
3
|
-
- .rules:ce-never-when-triggered-by-feature-flag-definition-change
|
4
|
-
- .test
|
5
|
-
- .high-capacity
|
6
|
-
- .ce-variables
|
7
|
-
- .rspec-report-opts
|
8
|
-
variables:
|
9
|
-
QA_SCENARIO: "Test::Integration::Actioncable"
|
10
|
-
|
11
|
-
ce:actioncable-quarantine:
|
12
|
-
extends:
|
13
|
-
- .rules:ce-never-when-triggered-by-feature-flag-definition-change
|
14
|
-
- .test
|
15
|
-
- .high-capacity
|
16
|
-
- .ce-variables
|
17
|
-
- .quarantine
|
18
|
-
- .rspec-report-opts
|
19
|
-
variables:
|
20
|
-
QA_SCENARIO: "Test::Integration::Actioncable"
|
21
|
-
|
22
|
-
ee:actioncable:
|
23
|
-
extends:
|
24
|
-
- .rules:ee-never-when-triggered-by-feature-flag-definition-change
|
25
|
-
- .test
|
26
|
-
- .high-capacity
|
27
|
-
- .ee-variables
|
28
|
-
- .rspec-report-opts
|
29
|
-
variables:
|
30
|
-
QA_SCENARIO: "Test::Integration::Actioncable"
|
31
|
-
|
32
|
-
ee:actioncable-quarantine:
|
33
|
-
extends:
|
34
|
-
- .rules:ee-never-when-triggered-by-feature-flag-definition-change
|
35
|
-
- .test
|
36
|
-
- .high-capacity
|
37
|
-
- .ee-variables
|
38
|
-
- .quarantine
|
39
|
-
- .rspec-report-opts
|
40
|
-
variables:
|
41
|
-
QA_SCENARIO: "Test::Integration::Actioncable"
|
@@ -1,34 +0,0 @@
|
|
1
|
-
module Gitlab
|
2
|
-
module QA
|
3
|
-
module Scenario
|
4
|
-
module Test
|
5
|
-
module Integration
|
6
|
-
class Actioncable < Scenario::Template
|
7
|
-
def perform(release, *rspec_args)
|
8
|
-
Component::Gitlab.perform do |gitlab|
|
9
|
-
gitlab.release = QA::Release.new(release)
|
10
|
-
gitlab.name = 'gitlab-actioncable'
|
11
|
-
gitlab.network = 'test'
|
12
|
-
gitlab.omnibus_configuration << "actioncable['enable'] = true"
|
13
|
-
|
14
|
-
gitlab.instance do
|
15
|
-
Runtime::Logger.info('Running actioncable specs!')
|
16
|
-
|
17
|
-
rspec_args << "--" unless rspec_args.include?('--')
|
18
|
-
rspec_args << %w[--tag actioncable]
|
19
|
-
|
20
|
-
Component::Specs.perform do |specs|
|
21
|
-
specs.suite = 'Test::Instance::All'
|
22
|
-
specs.release = gitlab.release
|
23
|
-
specs.network = gitlab.network
|
24
|
-
specs.args = [gitlab.address, *rspec_args]
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|