gitlab-qa 11.3.0 → 12.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.gitignore +1 -1
- data/.gitlab-ci.yml +3 -1
- data/.rubocop.yml +13 -2
- data/.rubocop_todo.yml +57 -85
- data/Gemfile.lock +44 -36
- data/docs/running_against_remote_grid.md +7 -5
- data/gitlab-qa.gemspec +4 -2
- data/lib/gitlab/qa/component/base.rb +9 -9
- data/lib/gitlab/qa/component/gitaly.rb +2 -2
- data/lib/gitlab/qa/component/gitaly_cluster.rb +14 -8
- data/lib/gitlab/qa/component/gitlab.rb +34 -14
- data/lib/gitlab/qa/component/mail_hog.rb +1 -0
- data/lib/gitlab/qa/component/praefect.rb +2 -2
- data/lib/gitlab/qa/component/selenoid.rb +6 -4
- data/lib/gitlab/qa/component/specs.rb +5 -2
- data/lib/gitlab/qa/component/staging.rb +4 -4
- data/lib/gitlab/qa/component/telegraf.rb +2 -1
- data/lib/gitlab/qa/docker/engine.rb +6 -3
- data/lib/gitlab/qa/docker/volumes.rb +1 -1
- data/lib/gitlab/qa/release.rb +4 -4
- data/lib/gitlab/qa/runner.rb +10 -3
- data/lib/gitlab/qa/runtime/env.rb +21 -19
- data/lib/gitlab/qa/runtime/logger.rb +1 -1
- data/lib/gitlab/qa/runtime/omnibus_configuration.rb +1 -0
- data/lib/gitlab/qa/runtime/omnibus_configurations/object_storage_gcs.rb +2 -1
- data/lib/gitlab/qa/runtime/scenario.rb +1 -5
- data/lib/gitlab/qa/scenario/actable.rb +4 -4
- data/lib/gitlab/qa/scenario/test/instance/airgapped.rb +2 -2
- data/lib/gitlab/qa/scenario/test/instance/deployment_base.rb +2 -1
- data/lib/gitlab/qa/scenario/test/integration/group_saml.rb +1 -1
- data/lib/gitlab/qa/scenario/test/integration/ldap.rb +5 -6
- data/lib/gitlab/qa/scenario/test/integration/oauth.rb +13 -4
- data/lib/gitlab/qa/scenario/test/omnibus/update_from_previous.rb +1 -1
- data/lib/gitlab/qa/scenario/test/omnibus/upgrade.rb +1 -3
- data/lib/gitlab/qa/scenario/test/sanity/version.rb +1 -1
- data/lib/gitlab/qa/support/config_scripts.rb +1 -1
- data/lib/gitlab/qa/support/gitlab_version_info.rb +3 -5
- data/lib/gitlab/qa/support/shell_command.rb +1 -0
- data/lib/gitlab/qa/test_logger.rb +2 -2
- data/lib/gitlab/qa/version.rb +1 -1
- data/support/data/admin_access_token_seed.rb +1 -0
- data/support/data/license_usage_seed.rb +3 -1
- metadata +13 -8
- data/lib/gitlab/qa/runtime/omnibus_configurations/packages.rb +0 -17
@@ -1,4 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
# rubocop:disable Metrics/AbcSize
|
3
4
|
|
4
5
|
require 'securerandom'
|
@@ -17,19 +18,19 @@ module Gitlab
|
|
17
18
|
using Rainbow
|
18
19
|
|
19
20
|
attr_reader :release,
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
21
|
+
:omnibus_configuration,
|
22
|
+
:omnibus_gitlab_rails_env,
|
23
|
+
:authority_volume,
|
24
|
+
:ssl_volume
|
24
25
|
|
25
26
|
attr_accessor :tls,
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
27
|
+
:skip_availability_check,
|
28
|
+
:runner_network,
|
29
|
+
:seed_admin_token,
|
30
|
+
:seed_db,
|
31
|
+
:skip_server_hooks,
|
32
|
+
:gitaly_tls,
|
33
|
+
:secrets
|
33
34
|
|
34
35
|
attr_writer :name, :relative_path
|
35
36
|
|
@@ -182,9 +183,9 @@ module Gitlab
|
|
182
183
|
def reconfigure
|
183
184
|
setup_omnibus
|
184
185
|
|
185
|
-
@docker.attach(name) do |line,
|
186
|
+
@docker.attach(name) do |line, _wait|
|
186
187
|
# TODO, workaround which allows to detach from the container
|
187
|
-
break if
|
188
|
+
break if line.include?('gitlab Reconfigured!')
|
188
189
|
end
|
189
190
|
end
|
190
191
|
|
@@ -252,7 +253,13 @@ module Gitlab
|
|
252
253
|
end
|
253
254
|
|
254
255
|
def delete_key_file(path)
|
255
|
-
|
256
|
+
FileUtils.rm_f(path)
|
257
|
+
end
|
258
|
+
|
259
|
+
def teardown!
|
260
|
+
log_pg_stats
|
261
|
+
|
262
|
+
super
|
256
263
|
end
|
257
264
|
|
258
265
|
private
|
@@ -307,6 +314,19 @@ module Gitlab
|
|
307
314
|
["gitlab-rails runner #{DATA_PATH}/admin_access_token_seed.rb"]
|
308
315
|
end
|
309
316
|
|
317
|
+
def log_pg_stats
|
318
|
+
Runtime::Logger.debug('Fetching pg statistics')
|
319
|
+
File.open("#{Runtime::Env.host_artifacts_dir}/pg_stats.log", 'a') do |file|
|
320
|
+
file << "#{Time.now.strftime('%Y-%m-%d %H:%M:%S')} -- #{name} -- Postgres statistics after test run:\n"
|
321
|
+
file << "Live and dead row counts:\n"
|
322
|
+
file << @docker.exec(name, %(gitlab-psql -c 'select n_live_tup, n_dead_tup, relname from pg_stat_all_tables order by n_live_tup DESC, n_dead_tup DESC;'))
|
323
|
+
file << "Cumulative user table statistics:\n"
|
324
|
+
file << @docker.exec(name, %(gitlab-psql -c 'select * from pg_stat_user_tables;'))
|
325
|
+
end
|
326
|
+
rescue StandardError => e
|
327
|
+
Runtime::Logger.error("Error getting pg statistics: #{e}")
|
328
|
+
end
|
329
|
+
|
310
330
|
class Availability
|
311
331
|
def initialize(name, relative_path: '', scheme: 'http', protocol_port: 80)
|
312
332
|
@docker = Docker::Engine.new
|
@@ -37,7 +37,7 @@ module Gitlab
|
|
37
37
|
setup_omnibus
|
38
38
|
@docker.attach(name) do |line|
|
39
39
|
# TODO, workaround which allows to detach from the container
|
40
|
-
break if
|
40
|
+
break if line.include?('gitlab Reconfigured!')
|
41
41
|
end
|
42
42
|
end
|
43
43
|
|
@@ -50,7 +50,7 @@ module Gitlab
|
|
50
50
|
def wait_until_ready
|
51
51
|
@docker.exec(name, 'praefect -config /var/opt/gitlab/praefect/cluster_config.toml check || true') do |resp|
|
52
52
|
Runtime::Logger.info(resp)
|
53
|
-
break if
|
53
|
+
break if line.include?('All checks passed')
|
54
54
|
end
|
55
55
|
end
|
56
56
|
|
@@ -29,10 +29,12 @@ module Gitlab
|
|
29
29
|
pull_images
|
30
30
|
docker.run(image: image, tag: tag, args:
|
31
31
|
['-video-recorder-image',
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
32
|
+
QA::Runtime::Env.video_recorder_image,
|
33
|
+
'-container-network',
|
34
|
+
network,
|
35
|
+
'-timeout',
|
36
|
+
'10m0s']
|
37
|
+
) do |command|
|
36
38
|
set_command_args(command)
|
37
39
|
set_volumes(command)
|
38
40
|
end
|
@@ -1,4 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
# rubocop:disable Metrics/CyclomaticComplexity
|
3
4
|
# rubocop:disable Metrics/AbcSize
|
4
5
|
|
@@ -56,8 +57,10 @@ module Gitlab
|
|
56
57
|
|
57
58
|
feature_flag_sets = []
|
58
59
|
|
59
|
-
# When `args` includes
|
60
|
-
#
|
60
|
+
# When `args` includes:
|
61
|
+
# `[..., "--disable-feature", "a", "--enable-feature", "b", "--set-feature-flags", "c=enable", ...]`
|
62
|
+
# `feature_flag_sets` will be set to:
|
63
|
+
# `[["--disable-feature", "a"], ["--enable-feature", "b"], ["--set-feature-flags", "c=enable"]]`
|
61
64
|
# This will result in tests running three times, once with each feature flag option.
|
62
65
|
while (index = args&.index { |x| x =~ /--.*-feature/ })
|
63
66
|
feature_flag_sets << args.slice!(index, 2)
|
@@ -13,9 +13,9 @@ module Gitlab
|
|
13
13
|
|
14
14
|
def self.release
|
15
15
|
QA::Release.new(image)
|
16
|
-
rescue Support::InvalidResponseError =>
|
17
|
-
warn
|
18
|
-
warn "#{
|
16
|
+
rescue Support::InvalidResponseError => e
|
17
|
+
warn e.message
|
18
|
+
warn "#{e.response.code} #{e.response.message}: #{e.response.body}"
|
19
19
|
exit 1
|
20
20
|
end
|
21
21
|
|
@@ -81,7 +81,7 @@ module Gitlab
|
|
81
81
|
end
|
82
82
|
|
83
83
|
def api_get!
|
84
|
-
@response_body ||=
|
84
|
+
@response_body ||=
|
85
85
|
begin
|
86
86
|
response = Support::GetRequest.new(uri, Runtime::Env.qa_access_token).execute!
|
87
87
|
JSON.parse(response.body)
|
@@ -43,7 +43,8 @@ module Gitlab
|
|
43
43
|
#
|
44
44
|
# @return [void]
|
45
45
|
def prepare
|
46
|
-
@telegraf_config = File.open("#{Dir.mktmpdir(nil, ENV
|
46
|
+
@telegraf_config = File.open("#{Dir.mktmpdir(nil, ENV.fetch('CI_BUILDS_DIR', nil))}/telegraf.conf",
|
47
|
+
'w') do |file|
|
47
48
|
file.write(config)
|
48
49
|
file.path
|
49
50
|
end
|
@@ -18,7 +18,8 @@ module Gitlab
|
|
18
18
|
end
|
19
19
|
|
20
20
|
def login(username:, password:, registry:)
|
21
|
-
Docker::Command.execute(%(login --username "#{username}" --password "#{password}" #{registry}),
|
21
|
+
Docker::Command.execute(%(login --username "#{username}" --password "#{password}" #{registry}),
|
22
|
+
mask_secrets: password)
|
22
23
|
end
|
23
24
|
|
24
25
|
def pull(image:, tag: nil, quiet: true)
|
@@ -63,7 +64,8 @@ module Gitlab
|
|
63
64
|
Class.new do
|
64
65
|
# @param file The name of the file
|
65
66
|
# @param contents The content of the file to write
|
66
|
-
# @param expand_vars Set false if you need to write an environment variable '$' to a file.
|
67
|
+
# @param expand_vars Set false if you need to write an environment variable '$' to a file.
|
68
|
+
# The variable should be escaped \\\$
|
67
69
|
def self.write(file, contents, expand_vars = true)
|
68
70
|
if expand_vars
|
69
71
|
%(echo "#{contents}" > #{file};)
|
@@ -82,7 +84,8 @@ module Gitlab
|
|
82
84
|
def exec(name, command, mask_secrets: nil)
|
83
85
|
cmd = ['exec']
|
84
86
|
cmd << '--privileged' if privileged_command?(command)
|
85
|
-
Docker::Command.execute(%(#{cmd.join(' ')} #{name} bash -c "#{command.gsub('"', '\\"')}"),
|
87
|
+
Docker::Command.execute(%(#{cmd.join(' ')} #{name} bash -c "#{command.gsub('"', '\\"')}"),
|
88
|
+
mask_secrets: mask_secrets)
|
86
89
|
end
|
87
90
|
|
88
91
|
def read_file(image, tag, path, &block)
|
@@ -20,7 +20,7 @@ module Gitlab
|
|
20
20
|
# but Docker on macOS exposes /private and disallow exposing /var/
|
21
21
|
# so we need to get the real tmpdir path
|
22
22
|
Dir.mktmpdir('gitlab-qa-', File.realpath(Dir.tmpdir)).tap do |dir|
|
23
|
-
yield
|
23
|
+
yield @volumes.transform_keys { |k| "#{dir}/#{k}" }
|
24
24
|
end
|
25
25
|
end
|
26
26
|
end
|
data/lib/gitlab/qa/release.rb
CHANGED
@@ -11,7 +11,7 @@ module Gitlab
|
|
11
11
|
(-qa)?
|
12
12
|
(:(?<tag>.+))?
|
13
13
|
\z
|
14
|
-
/xi
|
14
|
+
/xi
|
15
15
|
CUSTOM_GITLAB_IMAGE_REGEX = %r{
|
16
16
|
\A
|
17
17
|
(?<image_without_tag>
|
@@ -23,7 +23,7 @@ module Gitlab
|
|
23
23
|
(-qa)?
|
24
24
|
(:(?<tag>.+))?
|
25
25
|
\z
|
26
|
-
}xi
|
26
|
+
}xi
|
27
27
|
|
28
28
|
delegate :ci_project_path, to: Gitlab::QA::Runtime::Env
|
29
29
|
|
@@ -39,7 +39,7 @@ module Gitlab
|
|
39
39
|
\A
|
40
40
|
(?<version>\d+\.\d+.\d+(?:-rc\d+)?)-(?<edition>ce|ee|jh)
|
41
41
|
\z
|
42
|
-
/xi
|
42
|
+
/xi
|
43
43
|
|
44
44
|
# Dev tag example:
|
45
45
|
# 12.1.201906121026-325a6632895.b340d0bd35d
|
@@ -53,7 +53,7 @@ module Gitlab
|
|
53
53
|
\A
|
54
54
|
(?<version>\d+\.\d+(.\d+)?)\.(?<timestamp>\d+)-(?<gitlab_ref>[A-Za-z0-9]+)\.(?<omnibus_ref>[A-Za-z0-9]+)
|
55
55
|
\z
|
56
|
-
/xi
|
56
|
+
/xi
|
57
57
|
|
58
58
|
DEFAULT_TAG = 'latest'
|
59
59
|
DEFAULT_CANONICAL_TAG = 'nightly'
|
data/lib/gitlab/qa/runner.rb
CHANGED
@@ -29,7 +29,8 @@ module Gitlab
|
|
29
29
|
Runtime::Scenario.define(:teardown, false)
|
30
30
|
end
|
31
31
|
|
32
|
-
opts.on('--no-tests',
|
32
|
+
opts.on('--no-tests',
|
33
|
+
'Orchestrates the docker containers but does not run the tests. Implies --no-teardown') do
|
33
34
|
Runtime::Scenario.define(:run_tests, false)
|
34
35
|
Runtime::Scenario.define(:teardown, false)
|
35
36
|
end
|
@@ -42,7 +43,12 @@ module Gitlab
|
|
42
43
|
Runtime::Scenario.define(:skip_server_hooks, true)
|
43
44
|
end
|
44
45
|
|
45
|
-
opts.on(
|
46
|
+
opts.on(
|
47
|
+
'--qa-image QA_IMAGE',
|
48
|
+
String,
|
49
|
+
"Specifies a QA image to be used instead of inferring it from the GitLab image." \
|
50
|
+
"See Gitlab::QA::Release#qa_image"
|
51
|
+
) do |value|
|
46
52
|
Runtime::Scenario.define(:qa_image, value)
|
47
53
|
end
|
48
54
|
|
@@ -58,7 +64,8 @@ module Gitlab
|
|
58
64
|
end
|
59
65
|
end
|
60
66
|
|
61
|
-
opts.on('--seed-db search_pattern1[,search_pattern2,...]',
|
67
|
+
opts.on('--seed-db search_pattern1[,search_pattern2,...]',
|
68
|
+
'Seed application database with sample test data') do |file_pattern|
|
62
69
|
file_pattern.split(',').each do |pattern|
|
63
70
|
@seed_scripts << pattern
|
64
71
|
end
|
@@ -1,5 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require 'active_support'
|
3
4
|
require 'active_support/core_ext/object/blank'
|
4
5
|
require 'securerandom'
|
5
6
|
|
@@ -78,6 +79,8 @@ module Gitlab
|
|
78
79
|
'GITLAB_QA_PASSWORD_2' => :gitlab_qa_password_2,
|
79
80
|
'QA_GITHUB_USERNAME' => :qa_github_username,
|
80
81
|
'QA_GITHUB_PASSWORD' => :qa_github_password,
|
82
|
+
'QA_FACEBOOK_USERNAME' => :qa_facebook_username,
|
83
|
+
'QA_FACEBOOK_PASSWORD' => :qa_facebook_password,
|
81
84
|
'KNAPSACK_GENERATE_REPORT' => :knapsack_generate_report,
|
82
85
|
'KNAPSACK_REPORT_PATH' => :knapsack_report_path,
|
83
86
|
'KNAPSACK_TEST_FILE_PATTERN' => :knapsack_test_file_pattern,
|
@@ -140,6 +143,8 @@ module Gitlab
|
|
140
143
|
'JH_ENV' => :jh_env,
|
141
144
|
'QA_GITHUB_OAUTH_APP_ID' => :github_oauth_app_id,
|
142
145
|
'QA_GITHUB_OAUTH_APP_SECRET' => :github_oauth_app_secret,
|
146
|
+
'QA_FACEBOOK_OAUTH_APP_ID' => :facebook_oauth_app_id,
|
147
|
+
'QA_FACEBOOK_OAUTH_APP_SECRET' => :facebook_oauth_app_secret,
|
143
148
|
'QA_1P_EMAIL' => :qa_1p_email,
|
144
149
|
'QA_1P_PASSWORD' => :qa_1p_password,
|
145
150
|
'QA_1P_SECRET' => :qa_1p_secret,
|
@@ -157,9 +162,7 @@ module Gitlab
|
|
157
162
|
attr_writer(method_name)
|
158
163
|
|
159
164
|
define_method(method_name) do
|
160
|
-
env_var_value_if_defined(env_name) || (if instance_variable_defined?("@#{method_name}")
|
161
|
-
instance_variable_get("@#{method_name}")
|
162
|
-
end)
|
165
|
+
env_var_value_if_defined(env_name) || (instance_variable_get("@#{method_name}") if instance_variable_defined?("@#{method_name}"))
|
163
166
|
end
|
164
167
|
end
|
165
168
|
|
@@ -170,7 +173,7 @@ module Gitlab
|
|
170
173
|
value = env_var_name_if_defined(name) || send(attribute) # rubocop:disable GitlabSecurity/PublicSend
|
171
174
|
vars[name] = value if value
|
172
175
|
end
|
173
|
-
qa_variables = ENV.each_with_object({}) do |(name,
|
176
|
+
qa_variables = ENV.each_with_object({}) do |(name, _value), vars|
|
174
177
|
next unless name.start_with?('QA_')
|
175
178
|
|
176
179
|
var_name = env_var_name_if_defined(name)
|
@@ -181,7 +184,7 @@ module Gitlab
|
|
181
184
|
end
|
182
185
|
|
183
186
|
def debug?
|
184
|
-
enabled?(ENV
|
187
|
+
enabled?(ENV.fetch('QA_DEBUG', nil), default: true)
|
185
188
|
end
|
186
189
|
|
187
190
|
def log_level
|
@@ -209,7 +212,7 @@ module Gitlab
|
|
209
212
|
end
|
210
213
|
|
211
214
|
def colorized_logs?
|
212
|
-
enabled?(ENV
|
215
|
+
enabled?(ENV.fetch('COLORIZED_LOGS', nil), default: false)
|
213
216
|
end
|
214
217
|
|
215
218
|
def dev_access_token_variable
|
@@ -266,32 +269,31 @@ module Gitlab
|
|
266
269
|
|
267
270
|
def require_aws_s3_environment!
|
268
271
|
%w[AWS_S3_REGION AWS_S3_KEY_ID AWS_S3_ACCESS_KEY AWS_S3_BUCKET_NAME].each do |env_key|
|
269
|
-
unless ENV.key?(env_key)
|
270
|
-
raise ArgumentError, "Environment variable #{env_key} must be set to run AWS S3 object storage specs"
|
271
|
-
end
|
272
|
+
raise ArgumentError, "Environment variable #{env_key} must be set to run AWS S3 object storage specs" unless ENV.key?(env_key)
|
272
273
|
end
|
273
274
|
end
|
274
275
|
|
275
276
|
def require_gcs_environment!
|
276
277
|
%w[GOOGLE_PROJECT GOOGLE_CLIENT_EMAIL GOOGLE_JSON_KEY GCS_BUCKET_NAME].each do |env_key|
|
277
|
-
unless ENV.key?(env_key)
|
278
|
-
raise ArgumentError, "Environment variable #{env_key} must be set to run GCS object storage specs"
|
279
|
-
end
|
278
|
+
raise ArgumentError, "Environment variable #{env_key} must be set to run GCS object storage specs" unless ENV.key?(env_key)
|
280
279
|
end
|
281
280
|
end
|
282
281
|
|
283
282
|
def require_gcs_with_cdn_environment!
|
284
|
-
%w[GOOGLE_CDN_JSON_KEY GCS_CDN_BUCKET_NAME GOOGLE_CDN_LB GOOGLE_CDN_SIGNURL_KEY
|
285
|
-
|
286
|
-
|
287
|
-
end
|
283
|
+
%w[GOOGLE_CDN_JSON_KEY GCS_CDN_BUCKET_NAME GOOGLE_CDN_LB GOOGLE_CDN_SIGNURL_KEY
|
284
|
+
GOOGLE_CDN_SIGNURL_KEY_NAME].each do |env_key|
|
285
|
+
raise ArgumentError, "Environment variable #{env_key} must be set to run GCS with CDN enabled scenario" unless ENV.key?(env_key)
|
288
286
|
end
|
289
287
|
end
|
290
288
|
|
291
289
|
def require_oauth_environment!
|
292
290
|
%w[QA_GITHUB_OAUTH_APP_ID QA_GITHUB_OAUTH_APP_SECRET QA_GITHUB_USERNAME
|
293
|
-
|
294
|
-
|
291
|
+
QA_GITHUB_PASSWORD QA_1P_EMAIL QA_1P_PASSWORD QA_1P_SECRET QA_1P_GITHUB_UUID QA_FACEBOOK_USERNAME
|
292
|
+
QA_FACEBOOK_PASSWORD QA_FACEBOOK_OAUTH_APP_SECRET QA_FACEBOOK_OAUTH_APP_ID].each do |env_key|
|
293
|
+
unless ENV.key?(env_key)
|
294
|
+
raise ArgumentError,
|
295
|
+
"Environment variable #{env_key} must be set to run OAuth specs"
|
296
|
+
end
|
295
297
|
end
|
296
298
|
end
|
297
299
|
|
@@ -441,7 +443,7 @@ module Gitlab
|
|
441
443
|
end
|
442
444
|
|
443
445
|
def env_var_value_if_defined(variable)
|
444
|
-
return ENV
|
446
|
+
return ENV.fetch(variable, nil) if env_var_value_valid?(variable)
|
445
447
|
end
|
446
448
|
|
447
449
|
def env_var_name_if_defined(variable)
|
@@ -1,4 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
require 'tempfile'
|
3
4
|
|
4
5
|
module Gitlab
|
@@ -26,7 +27,7 @@ module Gitlab
|
|
26
27
|
end
|
27
28
|
|
28
29
|
def setup_json_key
|
29
|
-
Tempfile.open('gcs-json-key', ENV
|
30
|
+
Tempfile.open('gcs-json-key', ENV.fetch('CI_PROJECT_DIR', nil)) do |file|
|
30
31
|
file.write(ENV.fetch('GOOGLE_JSON_KEY'))
|
31
32
|
|
32
33
|
file
|
@@ -18,18 +18,14 @@ module Gitlab
|
|
18
18
|
|
19
19
|
define_singleton_method(attribute) do
|
20
20
|
attributes[attribute.to_sym].tap do |value|
|
21
|
-
if value.to_s.empty?
|
22
|
-
raise ArgumentError, "Empty `#{attribute}` attribute!"
|
23
|
-
end
|
21
|
+
raise ArgumentError, "Empty `#{attribute}` attribute!" if value.to_s.empty?
|
24
22
|
end
|
25
23
|
end
|
26
24
|
end
|
27
25
|
|
28
|
-
# rubocop:disable Style/MethodMissing
|
29
26
|
def method_missing(name, *)
|
30
27
|
raise ArgumentError, "Scenario attribute `#{name}` not defined!"
|
31
28
|
end
|
32
|
-
# rubocop:enable Style/MethodMissing
|
33
29
|
end
|
34
30
|
end
|
35
31
|
end
|
@@ -4,8 +4,8 @@ module Gitlab
|
|
4
4
|
module QA
|
5
5
|
module Scenario
|
6
6
|
module Actable
|
7
|
-
def act(
|
8
|
-
instance_exec(
|
7
|
+
def act(...)
|
8
|
+
instance_exec(...)
|
9
9
|
end
|
10
10
|
|
11
11
|
def self.included(base)
|
@@ -17,8 +17,8 @@ module Gitlab
|
|
17
17
|
yield new if block_given?
|
18
18
|
end
|
19
19
|
|
20
|
-
def act(
|
21
|
-
new.act(
|
20
|
+
def act(...)
|
21
|
+
new.act(...)
|
22
22
|
end
|
23
23
|
end
|
24
24
|
end
|
@@ -80,10 +80,10 @@ module Gitlab
|
|
80
80
|
iptables -A OUTPUT -p tcp -m tcp --sport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
|
81
81
|
iptables -A INPUT -p tcp -m tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
|
82
82
|
|
83
|
-
# some exceptions to allow runners access network https://gitlab.com/gitlab-org/gitlab-qa/-/issues/700
|
83
|
+
# some exceptions to allow runners access network https://gitlab.com/gitlab-org/gitlab-qa/-/issues/700#{' '}
|
84
84
|
iptables -A OUTPUT -p tcp -d #{gitlab_registry_ip} -j ACCEPT
|
85
85
|
iptables -A OUTPUT -p tcp -d #{dev_gitlab_registry_ip} -j ACCEPT
|
86
|
-
# allow access to praefect node
|
86
|
+
# allow access to praefect node#{' '}
|
87
87
|
iptables -A OUTPUT -p tcp -d #{praefect_ip} -j ACCEPT
|
88
88
|
|
89
89
|
# Should now fail to ping gitlab_ip, port 22/80 should be open
|
@@ -37,7 +37,8 @@ module Gitlab
|
|
37
37
|
end
|
38
38
|
|
39
39
|
def deployment_component
|
40
|
-
raise NotImplementedError,
|
40
|
+
raise NotImplementedError,
|
41
|
+
'Please define the Component for the deployment environment associated with this scenario.'
|
41
42
|
end
|
42
43
|
end
|
43
44
|
end
|
@@ -18,7 +18,7 @@ module Gitlab
|
|
18
18
|
raise ArgumentError, 'Group SAML is EE only feature!' unless release.ee?
|
19
19
|
end
|
20
20
|
|
21
|
-
def configure(gitlab,
|
21
|
+
def configure(gitlab, _saml)
|
22
22
|
gitlab.omnibus_configuration << <<~OMNIBUS
|
23
23
|
gitlab_rails['omniauth_enabled'] = true;
|
24
24
|
gitlab_rails['omniauth_providers'] = [{ name: 'group_saml' }];
|
@@ -66,16 +66,14 @@ module Gitlab
|
|
66
66
|
end
|
67
67
|
end
|
68
68
|
|
69
|
-
def orchestrate_ldap
|
69
|
+
def orchestrate_ldap(&block)
|
70
70
|
Component::LDAP.perform do |ldap|
|
71
71
|
ldap.name = 'ldap-server'
|
72
72
|
ldap.network = 'test'
|
73
73
|
ldap.set_gitlab_credentials
|
74
74
|
ldap.tls = tls
|
75
75
|
|
76
|
-
ldap.instance
|
77
|
-
yield
|
78
|
-
end
|
76
|
+
ldap.instance(&block)
|
79
77
|
end
|
80
78
|
end
|
81
79
|
|
@@ -90,8 +88,9 @@ module Gitlab
|
|
90
88
|
if orchestrate_ldap_server
|
91
89
|
orchestrate_ldap { run_specs(gitlab, {}, *rspec_args) }
|
92
90
|
else
|
93
|
-
volumes = {
|
94
|
-
|
91
|
+
volumes = { admin: File.join(Docker::Volumes::QA_CONTAINER_WORKDIR, 'qa/fixtures/ldap/admin'),
|
92
|
+
non_admin: File.join(Docker::Volumes::QA_CONTAINER_WORKDIR,
|
93
|
+
'qa/fixtures/ldap/non_admin') }
|
95
94
|
run_specs(gitlab, volumes, *rspec_args)
|
96
95
|
end
|
97
96
|
end
|
@@ -11,7 +11,7 @@ module Gitlab
|
|
11
11
|
attr_reader :gitlab_name
|
12
12
|
|
13
13
|
def initialize
|
14
|
-
@gitlab_name = 'gitlab
|
14
|
+
@gitlab_name = 'gitlab'
|
15
15
|
end
|
16
16
|
|
17
17
|
def perform(release, *rspec_args)
|
@@ -23,8 +23,9 @@ module Gitlab
|
|
23
23
|
gitlab.release = release
|
24
24
|
gitlab.network = 'test'
|
25
25
|
gitlab.name = gitlab_name
|
26
|
+
gitlab.tls = true
|
26
27
|
|
27
|
-
gitlab.omnibus_configuration << gitlab_omnibus_configuration
|
28
|
+
gitlab.omnibus_configuration << gitlab_omnibus_configuration(gitlab.address)
|
28
29
|
|
29
30
|
gitlab.instance do
|
30
31
|
Runtime::Logger.info('Running OAuth specs!')
|
@@ -43,10 +44,10 @@ module Gitlab
|
|
43
44
|
|
44
45
|
private
|
45
46
|
|
46
|
-
def gitlab_omnibus_configuration
|
47
|
+
def gitlab_omnibus_configuration(gitlab_address)
|
47
48
|
<<~OMNIBUS
|
48
49
|
gitlab_rails['omniauth_enabled'] = true;
|
49
|
-
gitlab_rails['omniauth_allow_single_sign_on'] = ['github'];
|
50
|
+
gitlab_rails['omniauth_allow_single_sign_on'] = ['github', 'facebook'];
|
50
51
|
gitlab_rails['omniauth_block_auto_created_users'] = false;
|
51
52
|
gitlab_rails['omniauth_providers'] = [
|
52
53
|
{
|
@@ -56,8 +57,16 @@ module Gitlab
|
|
56
57
|
url: 'https://github.com/',
|
57
58
|
verify_ssl: false,
|
58
59
|
args: { scope: 'user:email' }
|
60
|
+
},
|
61
|
+
{
|
62
|
+
name: 'facebook',
|
63
|
+
app_id: '$QA_FACEBOOK_OAUTH_APP_ID',
|
64
|
+
app_secret: '$QA_FACEBOOK_OAUTH_APP_SECRET',
|
65
|
+
verify_ssl: false
|
59
66
|
}
|
60
67
|
];
|
68
|
+
letsencrypt['enable'] = false;
|
69
|
+
external_url '#{gitlab_address}';
|
61
70
|
OMNIBUS
|
62
71
|
end
|
63
72
|
end
|
@@ -115,7 +115,7 @@ module Gitlab
|
|
115
115
|
# @param [Gitlab::QA::Release] release
|
116
116
|
# @return [Boolean]
|
117
117
|
def run_specs?(release)
|
118
|
-
[upgrade_path.first, current_release].any?
|
118
|
+
[upgrade_path.first, current_release].any?(release)
|
119
119
|
end
|
120
120
|
end
|
121
121
|
end
|
@@ -12,9 +12,7 @@ module Gitlab
|
|
12
12
|
def perform(image = 'CE', *rspec_args)
|
13
13
|
ce_release = QA::Release.new(image)
|
14
14
|
|
15
|
-
if ce_release.ee?
|
16
|
-
raise ArgumentError, 'Only CE can be upgraded to EE!'
|
17
|
-
end
|
15
|
+
raise ArgumentError, 'Only CE can be upgraded to EE!' if ce_release.ee?
|
18
16
|
|
19
17
|
Docker::Volumes.new.with_temporary_volumes do |volumes|
|
20
18
|
Scenario::Test::Instance::Image
|
@@ -71,7 +71,7 @@ module Gitlab
|
|
71
71
|
end
|
72
72
|
|
73
73
|
def commit_within_hours?(commit_time_string, hours)
|
74
|
-
Time.at(Time.parse(commit_time_string).utc).to_datetime > Time.at((Time.now - hours * 60 * 60).utc).to_datetime
|
74
|
+
Time.at(Time.parse(commit_time_string).utc).to_datetime > Time.at((Time.now - (hours * 60 * 60)).utc).to_datetime
|
75
75
|
end
|
76
76
|
|
77
77
|
def api_commit_detail(host, project, sha)
|
@@ -10,7 +10,7 @@ module Gitlab
|
|
10
10
|
global_server_prereceive_hook = <<~SCRIPT
|
11
11
|
#!/usr/bin/env bash
|
12
12
|
|
13
|
-
if [[
|
13
|
+
if [[ \\$GL_PROJECT_PATH =~ 'reject-prereceive' ]]; then
|
14
14
|
echo 'GL-HOOK-ERR: Custom error message rejecting prereceive hook for projects with GL_PROJECT_PATH matching pattern reject-prereceive'
|
15
15
|
exit 1
|
16
16
|
fi
|