gitlab-qa 2.4.0 → 2.5.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1dc61ff76fb45f254e883b53575de7e09482348b52f7b72a0e840f8b8024302e
4
- data.tar.gz: 656af151c59ce81cfed572c9d3c73a4425234155b2f48da6dda7f633b3b2be20
3
+ metadata.gz: 8ecae34a82e75238783d46d9099fdf98e0215ac93b0dde2dd043cf37779565a0
4
+ data.tar.gz: 118aa1a47570a26ab84f4cb138f9a65ff29f30412dbb54f6d599a2f31528dadf
5
5
  SHA512:
6
- metadata.gz: cb409def7c5f6db99941f2632ffa51c58ccd42b862bbc65e61ab56d80988184e29950da6a62023225982472318bf367eafae57c3dbec733d202d87eed86ad86d
7
- data.tar.gz: '0089c9e722eadfdb095b1fbbf60333d6e0ff7f19a8b18cba4bcc772c9b3765823e297eea19b8fce8b63577089ed53ab96a27ff0d9e6b58c4442ee6d5997138f2'
6
+ metadata.gz: 990bf38a0d1a5eb1c805f010f94aa045dab39ffe72aa884318f24e9953bc1f8bb1b4a2cbe7d14580348091b717e0cfe4d01e1443a59c7414872531390daa5ae5
7
+ data.tar.gz: 3f4272fdf695dbf93565a4cde155d382fbcdcc556d0e36bd7c4b79969af04b0689a672710b49d4c53205475180f6a2c15a6c01596e6836461de84c64e3e76624
data/.gitlab-ci.yml CHANGED
@@ -70,6 +70,20 @@ check:rspec:
70
70
  - 7gb
71
71
  - triggered-packages
72
72
 
73
+ ce:sanity-framework:
74
+ script:
75
+ - ./bin/expect_exit_code_and_text "bin/qa Test::Instance::Image ${RELEASE:=CE} --tag framework" 1 "2 examples, 1 failure"
76
+ <<: *test
77
+ <<: *high-capacity
78
+ <<: *ce-qa
79
+
80
+ ee:sanity-framework:
81
+ script:
82
+ - ./bin/expect_exit_code_and_text "bin/qa Test::Instance::Image ${RELEASE:=EE} --tag framework" 1 "2 examples, 1 failure"
83
+ <<: *test
84
+ <<: *high-capacity
85
+ <<: *ee-qa
86
+
73
87
  ce:instance:
74
88
  script:
75
89
  - bin/qa Test::Instance::Image ${RELEASE:=CE}
@@ -84,6 +98,20 @@ ee:instance:
84
98
  <<: *high-capacity
85
99
  <<: *ee-qa
86
100
 
101
+ ce:relative_url:
102
+ script:
103
+ - bin/qa Test::Instance::RelativeUrl ${RELEASE:=CE}
104
+ <<: *test
105
+ <<: *high-capacity
106
+ <<: *ce-qa
107
+
108
+ ee:relative_url:
109
+ script:
110
+ - bin/qa Test::Instance::RelativeUrl ${RELEASE:=EE}
111
+ <<: *test
112
+ <<: *high-capacity
113
+ <<: *ee-qa
114
+
87
115
  ce:image:
88
116
  script:
89
117
  - bin/qa Test::Omnibus::Image ${RELEASE:=CE}
@@ -159,6 +187,13 @@ ee:ldap:
159
187
  <<: *high-capacity
160
188
  <<: *ee-qa
161
189
 
190
+ ee:saml:
191
+ script:
192
+ - bin/qa Test::Integration::GroupSAML ${RELEASE:=EE}
193
+ <<: *test
194
+ <<: *high-capacity
195
+ <<: *ee-qa
196
+
162
197
  ce:kubernetes:
163
198
  script:
164
199
  - bin/qa Test::Integration::Kubernetes ${RELEASE:=CE}
@@ -172,3 +207,17 @@ ee:kubernetes:
172
207
  <<: *test
173
208
  <<: *high-capacity
174
209
  <<: *ee-qa
210
+
211
+ ce:object_storage:
212
+ script:
213
+ - bin/qa Test::Integration::ObjectStorage ${RELEASE:=CE}
214
+ <<: *test
215
+ <<: *high-capacity
216
+ <<: *ce-qa
217
+
218
+ ee:object_storage:
219
+ script:
220
+ - bin/qa Test::Integration::ObjectStorage ${RELEASE:=EE}
221
+ <<: *test
222
+ <<: *high-capacity
223
+ <<: *ee-qa
@@ -0,0 +1,36 @@
1
+ #!/usr/bin/env bash
2
+ # Run the given SCRIPT and expect its exit code to be EXPECTED_EXIT_CODE and its
3
+ # output to include the given EXPECTED_TEXT.
4
+ # If the expectation succeeds, exit with 0, otherwise exit with 1.
5
+ # This is useful when you want don't care about a script's exit code but only
6
+ # care about its output.
7
+
8
+ SCRIPT=$1
9
+ EXPECTED_EXIT_CODE=$2
10
+ EXPECTED_TEXT=$3
11
+
12
+ mkdir -p gitlab-qa-run-expect_text
13
+ log_file="gitlab-qa-run-expect_text/log.txt"
14
+
15
+ if [ -z "$SCRIPT" ] || [ -z "$EXPECTED_EXIT_CODE" ] || [ -z "$EXPECTED_TEXT" ]; then
16
+ echo "Missing argument(s) - Use: $0 script expected_exit_code expected_text"
17
+ else
18
+ $SCRIPT > $log_file
19
+ SCRIPT_EXIT_CODE=$?
20
+
21
+ if [ "$SCRIPT_EXIT_CODE" -eq "$EXPECTED_EXIT_CODE" ]
22
+ then
23
+ echo "'$SCRIPT' exited with '$SCRIPT_EXIT_CODE', as expected!"
24
+ grep "$EXPECTED_TEXT" $log_file > /dev/null
25
+
26
+ if [ "$?" -eq "0" ]; then
27
+ echo "'$SCRIPT' outputted '$EXPECTED_TEXT', as expected!"
28
+ else
29
+ echo "'$SCRIPT' was expected to output '$EXPECTED_TEXT', but did not!"
30
+ exit 1
31
+ fi
32
+ else
33
+ echo "'$SCRIPT' was expected to exit with '$EXPECTED_EXIT_CODE', but exited with '$SCRIPT_EXIT_CODE' instead!"
34
+ exit 1
35
+ fi
36
+ fi
@@ -4,8 +4,13 @@ To run the `Test::Instance::Any` scenario against your local GDK, you'll need to
4
4
  make a few changes to your `gdk/gitlab/config/gitlab.yml` file.
5
5
 
6
6
  1. Retrieve your current local IP with `ifconfig`, e.g. `192.168.0.12`.
7
- 1. Edit `gdk/gitlab/config/gitlab.yml` and replace `host: localhost` with
8
- `host: 192.168.0.12`.
7
+ 1. Edit `gdk/gitlab/config/gitlab.yml` and replace `host: localhost` with
8
+ `host: 192.168.0.12`.
9
+ 1. Also replace `ssh_host: localhost` (found under `gitlab_shell`) with
10
+ `ssh_host: 192.168.0.12`.
11
+ 1. Enable the `sshd` service by uncommenting the relevant line in your
12
+ `Procfile`.
13
+ 1. Edit `openssh/sshd_config` and set `ListenAddress` to `192.168.0.12`.
9
14
  1. Restart your GDK
10
15
  1. Run the QA scenario as follows:
11
16
 
@@ -32,9 +32,10 @@ For more details on the internals, please read the
32
32
  * `GITLAB_PASSWORD` - password to use when signing into GitLab
33
33
  * `GITLAB_FORKER_USERNAME` - username to use for forking a project
34
34
  * `GITLAB_FORKER_PASSWORD` - password to use for forking a project
35
- * `GITLAB_USER_TYPE` - type of user to use when signing into GitLab: standard (default), ldap
36
35
  * `GITLAB_LDAP_USERNAME` - LDAP username to use when signing into GitLab
37
36
  * `GITLAB_LDAP_PASSWORD` - LDAP password to use when signing into GitLab
37
+ * `GITLAB_ADMIN_USERNAME` - Admin username to use when adding a license
38
+ * `GITLAB_ADMIN_PASSWORD` - Admin password to use when adding a license
38
39
  * `GITLAB_SANDBOX_NAME` - The sandbox group name the test suite is going to use (default: `gitlab-qa-sandbox`)
39
40
  * `EE_LICENSE` - Enterprise Edition license
40
41
  * `QA_ARTIFACTS_DIR` - Path to a directory where artifacts (logs and screenshots)
@@ -272,8 +273,26 @@ $ export GITLAB_PASSWORD="$GITLAB_QA_PASSWORD"
272
273
  $ gitlab-qa Test::Instance::Staging
273
274
  ```
274
275
 
275
- [test-instance]: https://gitlab.com/gitlab-org/gitlab-ce/blob/master/qa/qa/scenario/test/instance.rb
276
+ ### `Test::Instance::Smoke`
277
+
278
+ This scenario will run a limited amount of tests selected from the test suite tagged by `:smoke`.
279
+ Smoke tests are quick tests that ensure that some basic functionality of GitLab works.
280
+
281
+ To run tests against the GitLab instance, a GitLab QA (`gitlab/gitlab-qa`)
282
+ container is spun up and tests are run from it by running the
283
+ `Test::Instance::Smoke` scenario (located under
284
+ [`gitlab-org/gitlab-ce@qa/qa/scenario/test/smoke.rb`][smoke-instance] in the
285
+ in the GitLab CE project).
286
+
287
+ Example:
288
+
289
+ ```
290
+ $ gitlab-qa Test::Instance::Smoke ee:<tag> https://staging.gitlab.com
291
+ ```
276
292
 
277
293
  ----
278
294
 
279
295
  [Back to README.md](../README.md)
296
+
297
+ [test-instance]: https://gitlab.com/gitlab-org/gitlab-ce/blob/master/qa/qa/scenario/test/instance/all.rb
298
+ [smoke-instance]: https://gitlab.com/gitlab-org/gitlab-ce/blob/master/qa/qa/scenario/test/instance/smoke.rb
data/exe/gitlab-qa CHANGED
@@ -1,7 +1,30 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
3
  require 'gitlab/qa'
4
+ require 'optparse'
4
5
 
5
- Gitlab::QA::Scenario
6
- .const_get(ARGV.shift)
7
- .perform(*ARGV)
6
+ options = OptionParser.new do |opts|
7
+ opts.banner = 'Usage: gitlab-qa [options] Scenario URL [[--] path] [rspec_options]'
8
+
9
+ opts.on('-v', '--version', 'Show the version') do
10
+ require 'gitlab/qa/version'
11
+ puts "#{$PROGRAM_NAME} : #{Gitlab::QA::VERSION}"
12
+ exit
13
+ end
14
+
15
+ opts.on('-h', '--help', 'Show the usage') do
16
+ puts opts
17
+ exit
18
+ end
19
+
20
+ opts.parse!
21
+ end
22
+
23
+ if ARGV.size >= 1
24
+ Gitlab::QA::Scenario
25
+ .const_get(ARGV.shift)
26
+ .perform(*ARGV)
27
+ else
28
+ puts options
29
+ exit 1
30
+ end
data/lib/gitlab/qa.rb CHANGED
@@ -16,6 +16,7 @@ module Gitlab
16
16
  module Instance
17
17
  autoload :Any, 'qa/scenario/test/instance/any'
18
18
  autoload :Image, 'qa/scenario/test/instance/image'
19
+ autoload :RelativeUrl, 'qa/scenario/test/instance/relative_url'
19
20
  autoload :Staging, 'qa/scenario/test/instance/staging'
20
21
  autoload :Smoke, 'qa/scenario/test/instance/smoke'
21
22
  end
@@ -29,8 +30,10 @@ module Gitlab
29
30
  module Integration
30
31
  autoload :Geo, 'qa/scenario/test/integration/geo'
31
32
  autoload :LDAP, 'qa/scenario/test/integration/ldap'
33
+ autoload :GroupSAML, 'qa/scenario/test/integration/group_saml'
32
34
  autoload :Mattermost, 'qa/scenario/test/integration/mattermost'
33
35
  autoload :Kubernetes, 'qa/scenario/test/integration/kubernetes'
36
+ autoload :ObjectStorage, 'qa/scenario/test/integration/object_storage'
34
37
  end
35
38
 
36
39
  module Sanity
@@ -43,8 +46,10 @@ module Gitlab
43
46
  autoload :Gitlab, 'qa/component/gitlab'
44
47
  autoload :InternetTunnel, 'qa/component/internet_tunnel'
45
48
  autoload :LDAP, 'qa/component/ldap'
49
+ autoload :SAML, 'qa/component/saml'
46
50
  autoload :Specs, 'qa/component/specs'
47
51
  autoload :Staging, 'qa/component/staging'
52
+ autoload :Minio, 'qa/component/minio'
48
53
  end
49
54
 
50
55
  module Docker
@@ -12,7 +12,7 @@ module Gitlab
12
12
 
13
13
  attr_reader :release, :docker
14
14
  attr_accessor :volumes, :network, :environment
15
- attr_writer :name
15
+ attr_writer :name, :relative_path
16
16
 
17
17
  def_delegators :release, :tag, :image, :edition
18
18
 
@@ -42,13 +42,17 @@ module Gitlab
42
42
  end
43
43
 
44
44
  def address
45
- "http://#{hostname}"
45
+ "http://#{hostname}#{relative_path}"
46
46
  end
47
47
 
48
48
  def hostname
49
49
  "#{name}.#{network}"
50
50
  end
51
51
 
52
+ def relative_path
53
+ @relative_path ||= ''
54
+ end
55
+
52
56
  def instance
53
57
  raise 'Please provide a block!' unless block_given?
54
58
 
@@ -116,7 +120,7 @@ module Gitlab
116
120
  end
117
121
 
118
122
  def wait
119
- if Availability.new(name).check(180)
123
+ if Availability.new(name, relative_path: relative_path).check(180)
120
124
  sleep 12 # TODO, handle that better
121
125
  puts ' -> GitLab is available.'
122
126
  else
@@ -145,13 +149,13 @@ module Gitlab
145
149
  end
146
150
 
147
151
  class Availability
148
- def initialize(name)
152
+ def initialize(name, relative_path: '')
149
153
  @docker = Docker::Engine.new
150
154
 
151
155
  host = @docker.hostname
152
156
  port = @docker.port(name, 80).split(':').last
153
157
 
154
- @uri = URI.join("http://#{host}:#{port}", '/help')
158
+ @uri = URI.join("http://#{host}:#{port}", "#{relative_path}/", 'help')
155
159
  end
156
160
 
157
161
  def check(retries)
@@ -0,0 +1,125 @@
1
+ require 'securerandom'
2
+ require 'fileutils'
3
+
4
+ # This component sets up the Minio (https://hub.docker.com/r/minio/minio)
5
+ # image with the proper configuration for GitLab users to use object storage.
6
+ module Gitlab
7
+ module QA
8
+ module Component
9
+ class Minio
10
+ include Scenario::Actable
11
+
12
+ MINIO_IMAGE = 'minio/minio'.freeze
13
+ MINIO_IMAGE_TAG = 'latest'.freeze
14
+ AWS_ACCESS_KEY = 'AKIAIOSFODNN7EXAMPLE'.freeze
15
+ AWS_SECRET_KEY = 'wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY'.freeze
16
+ DATA_DIR = '/data'.freeze
17
+ DEFAULT_PORT = 9000
18
+
19
+ attr_reader :docker
20
+ attr_accessor :volumes, :network, :environment
21
+ attr_writer :name
22
+
23
+ def initialize
24
+ @docker = Docker::Engine.new
25
+ @environment = { MINIO_ACCESS_KEY: AWS_ACCESS_KEY, MINIO_SECRET_KEY: AWS_SECRET_KEY }
26
+ @volumes = { host_data_dir => DATA_DIR }
27
+ @buckets = []
28
+ end
29
+
30
+ def instance
31
+ raise 'Please provide a block!' unless block_given?
32
+
33
+ prepare
34
+ start
35
+
36
+ yield self
37
+
38
+ teardown
39
+ end
40
+
41
+ def add_bucket(name)
42
+ @buckets << name
43
+ end
44
+
45
+ def to_config
46
+ config = YAML.safe_load <<~CFG
47
+ provider: AWS
48
+ aws_access_key_id: #{AWS_ACCESS_KEY}
49
+ aws_secret_access_key: #{AWS_SECRET_KEY}
50
+ aws_signature_version: 4
51
+ host: #{hostname}
52
+ endpoint: http://#{hostname}:#{port}
53
+ path_style: true
54
+ CFG
55
+
56
+ # Quotes get eaten up when the string is set in the environment
57
+ config.to_s.gsub('"', '\\"')
58
+ end
59
+
60
+ private
61
+
62
+ def host_data_dir
63
+ base_dir = ENV['CI_PROJECT_DIR'] || '/tmp'
64
+
65
+ File.join(base_dir, 'minio')
66
+ end
67
+
68
+ def name
69
+ @name ||= "minio-#{SecureRandom.hex(4)}"
70
+ end
71
+
72
+ def hostname
73
+ "#{name}.#{network}"
74
+ end
75
+
76
+ def port
77
+ DEFAULT_PORT
78
+ end
79
+
80
+ def prepare
81
+ @docker.pull(MINIO_IMAGE, MINIO_IMAGE_TAG)
82
+
83
+ FileUtils.mkdir_p(host_data_dir)
84
+
85
+ @buckets.each do |bucket|
86
+ puts "Creating Minio bucket: #{bucket}"
87
+ FileUtils.mkdir_p(File.join(host_data_dir, bucket))
88
+ end
89
+
90
+ return if @docker.network_exists?(network)
91
+
92
+ @docker.network_create(network)
93
+ end
94
+
95
+ def start
96
+ docker.run(MINIO_IMAGE, MINIO_IMAGE_TAG, "server", DATA_DIR) do |command|
97
+ command << '-d '
98
+ command << "--name #{name}"
99
+ command << "--net #{network}"
100
+ command << "--hostname #{hostname}"
101
+
102
+ @volumes.to_h.each do |to, from|
103
+ command.volume(to, from, 'Z')
104
+ end
105
+
106
+ @environment.to_h.each do |key, value|
107
+ command.env(key, value)
108
+ end
109
+
110
+ @network_aliases.to_a.each do |network_alias|
111
+ command << "--network-alias #{network_alias}"
112
+ end
113
+ end
114
+ end
115
+
116
+ def teardown
117
+ raise 'Invalid instance name!' unless name
118
+
119
+ @docker.stop(name)
120
+ @docker.remove(name)
121
+ end
122
+ end
123
+ end
124
+ end
125
+ end
@@ -0,0 +1,123 @@
1
+ require 'securerandom'
2
+
3
+ # This component sets up the docker-test-saml-idp (https://github.com/kristophjunge/docker-test-saml-idp)
4
+ # image with the proper configuration for SAML integration.
5
+
6
+ module Gitlab
7
+ module QA
8
+ module Component
9
+ class SAML
10
+ include Scenario::Actable
11
+
12
+ SAML_IMAGE = 'jamedjo/test-saml-idp'.freeze
13
+ SAML_IMAGE_TAG = 'latest'.freeze
14
+
15
+ attr_reader :docker
16
+ attr_accessor :volumes, :network, :environment
17
+ attr_writer :name
18
+
19
+ def initialize
20
+ @docker = Docker::Engine.new
21
+ @environment = {}
22
+ @volumes = {}
23
+ @network_aliases = []
24
+ end
25
+
26
+ def set_entity_id(entity_id)
27
+ @environment['SIMPLESAMLPHP_SP_ENTITY_ID'] = entity_id
28
+ end
29
+
30
+ def set_assertion_consumer_service(assertion_con_service)
31
+ @environment['SIMPLESAMLPHP_SP_ASSERTION_CONSUMER_SERVICE'] = assertion_con_service
32
+ end
33
+
34
+ def add_network_alias(name)
35
+ @network_aliases.push(name)
36
+ end
37
+
38
+ def name
39
+ @name ||= "saml-qa-idp"
40
+ end
41
+
42
+ def hostname
43
+ "#{name}.#{network}"
44
+ end
45
+
46
+ def group_name
47
+ @group_name ||= "saml_sso_group-#{SecureRandom.hex(4)}"
48
+ end
49
+
50
+ def instance
51
+ raise 'Please provide a block!' unless block_given?
52
+
53
+ prepare
54
+ start
55
+
56
+ yield self
57
+
58
+ teardown
59
+ end
60
+
61
+ def prepare
62
+ pull
63
+
64
+ return if @docker.network_exists?(network)
65
+
66
+ @docker.network_create(network)
67
+ end
68
+
69
+ # rubocop:disable Metrics/AbcSize
70
+ def start
71
+ docker.run(SAML_IMAGE, SAML_IMAGE_TAG) do |command|
72
+ command << '-d '
73
+ command << "--name #{name}"
74
+ command << "--net #{network}"
75
+ command << "--hostname #{hostname}"
76
+ command << "--publish 8080:8080"
77
+ command << "--publish 8443:8443"
78
+
79
+ @volumes.to_h.each do |to, from|
80
+ command.volume(to, from, 'Z')
81
+ end
82
+
83
+ @environment.to_h.each do |key, value|
84
+ command.env(key, value)
85
+ end
86
+
87
+ @network_aliases.to_a.each do |network_alias|
88
+ command << "--network-alias #{network_alias}"
89
+ end
90
+ end
91
+ end
92
+ # rubocop:enable Metrics/AbcSize
93
+
94
+ def restart
95
+ @docker.restart(name)
96
+ end
97
+
98
+ def teardown
99
+ raise 'Invalid instance name!' unless name
100
+
101
+ @docker.stop(name)
102
+ @docker.remove(name)
103
+ end
104
+
105
+ def pull
106
+ @docker.pull(SAML_IMAGE, SAML_IMAGE_TAG)
107
+ end
108
+
109
+ def set_sandbox_name(sandbox_name)
110
+ ::Gitlab::QA::Runtime::Env.gitlab_sandbox_name = sandbox_name
111
+ end
112
+
113
+ def set_simple_saml_hostname
114
+ ::Gitlab::QA::Runtime::Env.simple_saml_hostname = hostname
115
+ end
116
+
117
+ def set_accept_insecure_certs
118
+ ::Gitlab::QA::Runtime::Env.accept_insecure_certs = 'true'
119
+ end
120
+ end
121
+ end
122
+ end
123
+ end
@@ -7,6 +7,8 @@ module Gitlab
7
7
  extend self
8
8
 
9
9
  ENV_VARIABLES = {
10
+ 'GITLAB_ADMIN_USERNAME' => :admin_username,
11
+ 'GITLAB_ADMIN_PASSWORD' => :admin_password,
10
12
  'GITLAB_USERNAME' => :user_username,
11
13
  'GITLAB_PASSWORD' => :user_password,
12
14
  'GITLAB_LDAP_USERNAME' => :ldap_username,
@@ -18,6 +20,8 @@ module Gitlab
18
20
  'GITLAB_QA_ACCESS_TOKEN' => :qa_access_token,
19
21
  'GITHUB_ACCESS_TOKEN' => :github_access_token,
20
22
  'GITLAB_URL' => :gitlab_url,
23
+ 'SIMPLE_SAML_HOSTNAME' => :simple_saml_hostname,
24
+ 'ACCEPT_INSECURE_CERTS' => :accept_insecure_certs,
21
25
  'EE_LICENSE' => :ee_license,
22
26
  'GCLOUD_ACCOUNT_EMAIL' => :gcloud_account_email,
23
27
  'GCLOUD_ACCOUNT_KEY' => :gcloud_account_key,
@@ -10,7 +10,7 @@ module Gitlab
10
10
  @volumes = {}
11
11
  end
12
12
 
13
- def perform(release)
13
+ def perform(release, *rspec_args)
14
14
  Component::Gitlab.perform do |gitlab|
15
15
  gitlab.release = release
16
16
  gitlab.volumes = @volumes
@@ -21,7 +21,7 @@ module Gitlab
21
21
  specs.suite = 'Test::Instance'
22
22
  specs.release = gitlab.release
23
23
  specs.network = gitlab.network
24
- specs.args = [gitlab.address]
24
+ specs.args = [gitlab.address, *rspec_args]
25
25
  end
26
26
  end
27
27
  end
@@ -0,0 +1,32 @@
1
+ module Gitlab
2
+ module QA
3
+ module Scenario
4
+ module Test
5
+ module Instance
6
+ class RelativeUrl < Image
7
+ def perform(release)
8
+ Component::Gitlab.perform do |gitlab|
9
+ gitlab.release = release
10
+ gitlab.network = 'test'
11
+ gitlab.relative_path = '/relative'
12
+
13
+ gitlab.omnibus_config = <<~OMNIBUS
14
+ external_url '#{gitlab.address}'
15
+ OMNIBUS
16
+
17
+ gitlab.instance do
18
+ Component::Specs.perform do |specs|
19
+ specs.suite = 'Test::Instance'
20
+ specs.release = gitlab.release
21
+ specs.network = gitlab.network
22
+ specs.args = [gitlab.address]
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,54 @@
1
+ require 'yaml'
2
+
3
+ module Gitlab
4
+ module QA
5
+ module Scenario
6
+ module Test
7
+ module Integration
8
+ class GroupSAML < Scenario::Template
9
+ # rubocop:disable Metrics/AbcSize
10
+ def perform(release)
11
+ release = Release.new(release)
12
+
13
+ raise ArgumentError, 'Group SAML is EE only feature!' unless release.ee?
14
+
15
+ Component::Gitlab.perform do |gitlab|
16
+ gitlab.release = release.edition
17
+ gitlab.name = 'gitlab-saml'
18
+ gitlab.network = 'test'
19
+
20
+ Component::SAML.perform do |saml|
21
+ saml.network = 'test'
22
+ saml.set_entity_id("#{gitlab.address}/groups/#{saml.group_name}")
23
+ saml.set_assertion_consumer_service("#{gitlab.address}/groups/#{saml.group_name}/-/saml/callback")
24
+ saml.set_sandbox_name(saml.group_name)
25
+ saml.set_simple_saml_hostname
26
+ saml.set_accept_insecure_certs
27
+
28
+ gitlab.omnibus_config = <<~OMNIBUS
29
+ gitlab_rails['omniauth_enabled'] = true;
30
+ gitlab_rails['omniauth_providers'] = [{ name: 'group_saml' }];
31
+ OMNIBUS
32
+
33
+ saml.instance do
34
+ gitlab.instance do
35
+ puts 'Running SAML specs!'
36
+
37
+ Component::Specs.perform do |specs|
38
+ specs.suite = 'QA::EE::Scenario::Test::Integration::GroupSAML'
39
+ specs.release = release
40
+ specs.network = gitlab.network
41
+ specs.args = [gitlab.address]
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
48
+ # rubocop:enable Metrics/AbcSize
49
+ end
50
+ end
51
+ end
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,50 @@
1
+ require 'yaml'
2
+
3
+ module Gitlab
4
+ module QA
5
+ module Scenario
6
+ module Test
7
+ module Integration
8
+ class ObjectStorage < Scenario::Template
9
+ # rubocop:disable Metrics/AbcSize
10
+ def perform(release)
11
+ Component::Gitlab.perform do |gitlab|
12
+ gitlab.release = release
13
+ gitlab.name = 'gitlab-object-storage'
14
+ gitlab.network = 'test'
15
+
16
+ Component::Minio.perform do |minio|
17
+ minio.network = 'test'
18
+ minio.add_bucket('upload-bucket')
19
+
20
+ gitlab.omnibus_config = <<~OMNIBUS
21
+ gitlab_rails['uploads_object_store_enabled'] = true;
22
+ gitlab_rails['uploads_object_store_remote_directory'] = 'upload-bucket';
23
+ gitlab_rails['uploads_object_store_background_upload'] = false;
24
+ gitlab_rails['uploads_object_store_direct_upload'] = true;
25
+ gitlab_rails['uploads_object_store_proxy_download'] = true;
26
+ gitlab_rails['uploads_object_store_connection'] = #{minio.to_config};
27
+ OMNIBUS
28
+
29
+ minio.instance do
30
+ gitlab.instance do
31
+ puts 'Running object store specs!'
32
+
33
+ Component::Specs.perform do |specs|
34
+ specs.suite = 'Test::Integration::ObjectStorage'
35
+ specs.release = gitlab.release
36
+ specs.network = gitlab.network
37
+ specs.args = [gitlab.address]
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end
44
+ # rubocop:enable Metrics/AbcSize
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end
@@ -1,5 +1,5 @@
1
1
  module Gitlab
2
2
  module QA
3
- VERSION = '2.4.0'.freeze
3
+ VERSION = '2.5.0'.freeze
4
4
  end
5
5
  end
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: 2.4.0
4
+ version: 2.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Grzegorz Bizon
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-08-29 00:00:00.000000000 Z
11
+ date: 2018-10-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: climate_control
@@ -128,6 +128,7 @@ files:
128
128
  - README.md
129
129
  - Rakefile
130
130
  - bin/console
131
+ - bin/expect_exit_code_and_text
131
132
  - bin/qa
132
133
  - bin/setup
133
134
  - docs/README.md
@@ -144,6 +145,8 @@ files:
144
145
  - lib/gitlab/qa/component/gitlab.rb
145
146
  - lib/gitlab/qa/component/internet_tunnel.rb
146
147
  - lib/gitlab/qa/component/ldap.rb
148
+ - lib/gitlab/qa/component/minio.rb
149
+ - lib/gitlab/qa/component/saml.rb
147
150
  - lib/gitlab/qa/component/specs.rb
148
151
  - lib/gitlab/qa/component/staging.rb
149
152
  - lib/gitlab/qa/docker/command.rb
@@ -156,12 +159,15 @@ files:
156
159
  - lib/gitlab/qa/scenario/template.rb
157
160
  - lib/gitlab/qa/scenario/test/instance/any.rb
158
161
  - lib/gitlab/qa/scenario/test/instance/image.rb
162
+ - lib/gitlab/qa/scenario/test/instance/relative_url.rb
159
163
  - lib/gitlab/qa/scenario/test/instance/smoke.rb
160
164
  - lib/gitlab/qa/scenario/test/instance/staging.rb
161
165
  - lib/gitlab/qa/scenario/test/integration/geo.rb
166
+ - lib/gitlab/qa/scenario/test/integration/group_saml.rb
162
167
  - lib/gitlab/qa/scenario/test/integration/kubernetes.rb
163
168
  - lib/gitlab/qa/scenario/test/integration/ldap.rb
164
169
  - lib/gitlab/qa/scenario/test/integration/mattermost.rb
170
+ - lib/gitlab/qa/scenario/test/integration/object_storage.rb
165
171
  - lib/gitlab/qa/scenario/test/omnibus/image.rb
166
172
  - lib/gitlab/qa/scenario/test/omnibus/update.rb
167
173
  - lib/gitlab/qa/scenario/test/omnibus/upgrade.rb