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.
Files changed (45) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -1
  3. data/.gitlab-ci.yml +3 -1
  4. data/.rubocop.yml +13 -2
  5. data/.rubocop_todo.yml +57 -85
  6. data/Gemfile.lock +44 -36
  7. data/docs/running_against_remote_grid.md +7 -5
  8. data/gitlab-qa.gemspec +4 -2
  9. data/lib/gitlab/qa/component/base.rb +9 -9
  10. data/lib/gitlab/qa/component/gitaly.rb +2 -2
  11. data/lib/gitlab/qa/component/gitaly_cluster.rb +14 -8
  12. data/lib/gitlab/qa/component/gitlab.rb +34 -14
  13. data/lib/gitlab/qa/component/mail_hog.rb +1 -0
  14. data/lib/gitlab/qa/component/praefect.rb +2 -2
  15. data/lib/gitlab/qa/component/selenoid.rb +6 -4
  16. data/lib/gitlab/qa/component/specs.rb +5 -2
  17. data/lib/gitlab/qa/component/staging.rb +4 -4
  18. data/lib/gitlab/qa/component/telegraf.rb +2 -1
  19. data/lib/gitlab/qa/docker/engine.rb +6 -3
  20. data/lib/gitlab/qa/docker/volumes.rb +1 -1
  21. data/lib/gitlab/qa/release.rb +4 -4
  22. data/lib/gitlab/qa/runner.rb +10 -3
  23. data/lib/gitlab/qa/runtime/env.rb +21 -19
  24. data/lib/gitlab/qa/runtime/logger.rb +1 -1
  25. data/lib/gitlab/qa/runtime/omnibus_configuration.rb +1 -0
  26. data/lib/gitlab/qa/runtime/omnibus_configurations/object_storage_gcs.rb +2 -1
  27. data/lib/gitlab/qa/runtime/scenario.rb +1 -5
  28. data/lib/gitlab/qa/scenario/actable.rb +4 -4
  29. data/lib/gitlab/qa/scenario/test/instance/airgapped.rb +2 -2
  30. data/lib/gitlab/qa/scenario/test/instance/deployment_base.rb +2 -1
  31. data/lib/gitlab/qa/scenario/test/integration/group_saml.rb +1 -1
  32. data/lib/gitlab/qa/scenario/test/integration/ldap.rb +5 -6
  33. data/lib/gitlab/qa/scenario/test/integration/oauth.rb +13 -4
  34. data/lib/gitlab/qa/scenario/test/omnibus/update_from_previous.rb +1 -1
  35. data/lib/gitlab/qa/scenario/test/omnibus/upgrade.rb +1 -3
  36. data/lib/gitlab/qa/scenario/test/sanity/version.rb +1 -1
  37. data/lib/gitlab/qa/support/config_scripts.rb +1 -1
  38. data/lib/gitlab/qa/support/gitlab_version_info.rb +3 -5
  39. data/lib/gitlab/qa/support/shell_command.rb +1 -0
  40. data/lib/gitlab/qa/test_logger.rb +2 -2
  41. data/lib/gitlab/qa/version.rb +1 -1
  42. data/support/data/admin_access_token_seed.rb +1 -0
  43. data/support/data/license_usage_seed.rb +3 -1
  44. metadata +13 -8
  45. 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
- :omnibus_configuration,
21
- :omnibus_gitlab_rails_env,
22
- :authority_volume,
23
- :ssl_volume
21
+ :omnibus_configuration,
22
+ :omnibus_gitlab_rails_env,
23
+ :authority_volume,
24
+ :ssl_volume
24
25
 
25
26
  attr_accessor :tls,
26
- :skip_availability_check,
27
- :runner_network,
28
- :seed_admin_token,
29
- :seed_db,
30
- :skip_server_hooks,
31
- :gitaly_tls,
32
- :secrets
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, wait|
186
+ @docker.attach(name) do |line, _wait|
186
187
  # TODO, workaround which allows to detach from the container
187
- break if /gitlab Reconfigured!/.match?(line)
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
- File.delete(path) if File.exist?(path)
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
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  # This component sets up the MailHog (https://github.com/mailhog/MailHog)
3
4
  # image with the proper configuration for SMTP email delivery from Gitlab
4
5
 
@@ -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 /gitlab Reconfigured!/.match?(line)
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 /All checks passed/.match?(line)
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
- QA::Runtime::Env.video_recorder_image,
33
- '-container-network',
34
- network]
35
- ) do |command|
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 `[..., "--disable-feature", "a", "--enable-feature", "b", "--set-feature-flags", "c=enable", ...]`
60
- # `feature_flag_sets` will be set to `[["--disable-feature", "a"], ["--enable-feature", "b"], ["--set-feature-flags", "c=enable"]]`
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 => ex
17
- warn ex.message
18
- warn "#{ex.response.code} #{ex.response.message}: #{ex.response.body}"
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 ||= # rubocop:disable Naming/MemoizedInstanceVariableName
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['CI_BUILDS_DIR'])}/telegraf.conf", 'w') do |file|
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}), mask_secrets: password)
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. The variable should be escaped \\\$
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('"', '\\"')}"), mask_secrets: mask_secrets)
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 Hash[@volumes.map { |k, v| ["#{dir}/#{k}", v] }]
23
+ yield @volumes.transform_keys { |k| "#{dir}/#{k}" }
24
24
  end
25
25
  end
26
26
  end
@@ -11,7 +11,7 @@ module Gitlab
11
11
  (-qa)?
12
12
  (:(?<tag>.+))?
13
13
  \z
14
- /xi.freeze
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.freeze
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.freeze
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.freeze
56
+ /xi
57
57
 
58
58
  DEFAULT_TAG = 'latest'
59
59
  DEFAULT_CANONICAL_TAG = 'nightly'
@@ -29,7 +29,8 @@ module Gitlab
29
29
  Runtime::Scenario.define(:teardown, false)
30
30
  end
31
31
 
32
- opts.on('--no-tests', 'Orchestrates the docker containers but does not run the tests. Implies --no-teardown') do
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('--qa-image QA_IMAGE', String, 'Specifies a QA image to be used instead of inferring it from the GitLab image. See Gitlab::QA::Release#qa_image') do |value|
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,...]', 'Seed application database with sample test data') do |file_pattern|
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, value), vars|
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['QA_DEBUG'], default: true)
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['COLORIZED_LOGS'], default: false)
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 GOOGLE_CDN_SIGNURL_KEY_NAME].each do |env_key|
285
- unless ENV.key?(env_key)
286
- raise ArgumentError, "Environment variable #{env_key} must be set to run GCS with CDN enabled scenario"
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
- QA_GITHUB_PASSWORD QA_1P_EMAIL QA_1P_PASSWORD QA_1P_SECRET QA_1P_GITHUB_UUID].each do |env_key|
294
- raise ArgumentError, "Environment variable #{env_key} must be set to run OAuth specs" unless ENV.key?(env_key)
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[variable] if env_var_value_valid?(variable)
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)
@@ -14,7 +14,7 @@ module Gitlab
14
14
  def self.logger
15
15
  @logger ||= begin
16
16
  log_path = Env.log_path
17
- ::FileUtils.mkdir_p(log_path) unless File.exist?(log_path)
17
+ ::FileUtils.mkdir_p(log_path)
18
18
 
19
19
  TestLogger.logger(level: Env.log_level, path: log_path)
20
20
  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
 
5
6
  module Gitlab
@@ -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['CI_PROJECT_DIR']) do |file|
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(*args, &block)
8
- instance_exec(*args, &block)
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(*args, &block)
21
- new.act(*args, &block)
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, 'Please define the Component for the deployment environment associated with this scenario.'
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, saml)
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 do
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 = { 'admin': File.join(Docker::Volumes::QA_CONTAINER_WORKDIR, 'qa/fixtures/ldap/admin'),
94
- 'non_admin': File.join(Docker::Volumes::QA_CONTAINER_WORKDIR, 'qa/fixtures/ldap/non_admin') }
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-oauth'
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? { |rel| rel == release }
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 [[ \\\$GL_PROJECT_PATH =~ 'reject-prereceive' ]]; then
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