gitlab-qa 8.14.1 → 8.15.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +5 -3
- data/docs/developer/http_mocking.md +28 -0
- data/docs/developer/ssl.md +32 -0
- data/docs/developer/style_guide.md +29 -0
- data/docs/what_tests_can_be_run.md +9 -0
- data/gitlab-qa.gemspec +1 -0
- data/lefthook.yml +12 -0
- data/lib/gitlab/qa/component/alpine.rb +36 -0
- data/lib/gitlab/qa/component/base.rb +21 -4
- data/lib/gitlab/qa/component/gitlab.rb +37 -33
- data/lib/gitlab/qa/component/mock_server.rb +39 -2
- data/lib/gitlab/qa/runtime/env.rb +2 -3
- data/lib/gitlab/qa/scenario/test/integration/import.rb +26 -12
- data/lib/gitlab/qa/scenario/test/integration/mtls.rb +48 -35
- data/lib/gitlab/qa/version.rb +1 -1
- data/tls_certificates/smocker/smocker.crt +31 -0
- data/tls_certificates/smocker/smocker.csr +29 -0
- data/tls_certificates/smocker/smocker.key +51 -0
- metadata +24 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 152cd35b57e1bbf009afe181668f3a6e649f817c722ff6307ef9f556191151d7
|
4
|
+
data.tar.gz: 83ea90cac64da14866e36233a43d787236df0e345512de7599ed0f6546cea0ed
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8dbacb3d78dae237acb357bca6e36c271aea9fd0a06bfba6adaec924a62045afa16d4f94299a2a262af0682dcd52feb701bd69ca1b893242ae456976d954a3d3
|
7
|
+
data.tar.gz: 226b3b3639a998ad756849ab41937afcee5e1265586f61a1ef3113cee6a2325def40c457a64a2c2445129816d959e7ebd3591fc35f462f70807941414bd844eb
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
gitlab-qa (8.
|
4
|
+
gitlab-qa (8.15.1)
|
5
5
|
activesupport (~> 6.1)
|
6
6
|
gitlab (~> 4.18.0)
|
7
7
|
http (~> 5.0)
|
@@ -102,7 +102,7 @@ GEM
|
|
102
102
|
rubocop-rails (~> 2.9)
|
103
103
|
rubocop-rspec (~> 1.44)
|
104
104
|
hashdiff (1.0.1)
|
105
|
-
http (5.1.
|
105
|
+
http (5.1.1)
|
106
106
|
addressable (~> 2.8)
|
107
107
|
http-cookie (~> 1.0)
|
108
108
|
http-form_data (~> 2.2)
|
@@ -120,6 +120,7 @@ GEM
|
|
120
120
|
rexml
|
121
121
|
kramdown-parser-gfm (1.1.0)
|
122
122
|
kramdown (~> 2.0)
|
123
|
+
lefthook (1.2.6)
|
123
124
|
llhttp-ffi (0.4.0)
|
124
125
|
ffi-compiler (~> 1.0)
|
125
126
|
rake (~> 13.0)
|
@@ -240,6 +241,7 @@ DEPENDENCIES
|
|
240
241
|
gitlab-dangerfiles (~> 2.11)
|
241
242
|
gitlab-qa!
|
242
243
|
gitlab-styles (~> 6.2.1)
|
244
|
+
lefthook (~> 1.2.6)
|
243
245
|
pry (~> 0.11)
|
244
246
|
rake (~> 13.0)
|
245
247
|
rspec (~> 3.7)
|
@@ -247,4 +249,4 @@ DEPENDENCIES
|
|
247
249
|
webmock (= 3.7.0)
|
248
250
|
|
249
251
|
BUNDLED WITH
|
250
|
-
2.
|
252
|
+
2.4.2
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# HTTP mocking
|
2
|
+
|
3
|
+
Some scenario types might require mocking third party services. [Mock server](../../lib/gitlab/qa/component/mock_server.rb) component
|
4
|
+
can be used for that. It is based on simple http mock server called [smocker](https://smocker.dev/).
|
5
|
+
|
6
|
+
## Using
|
7
|
+
|
8
|
+
Simple usage example:
|
9
|
+
|
10
|
+
```ruby
|
11
|
+
Component::Gitlab.perform do |gitlab|
|
12
|
+
gitlab.network = 'test'
|
13
|
+
gitlab.instance do
|
14
|
+
Component::MockServer.perform do |mock|
|
15
|
+
mock.network = gitlab.network
|
16
|
+
mock.instance do
|
17
|
+
Component::Specs.perform do
|
18
|
+
...
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
```
|
25
|
+
|
26
|
+
Mock server will be accessible from within gitlab or qa test container via `http://smocker.test` url and admin interface will be
|
27
|
+
accessible via `http://smocker.test:8081`. Refer to [Getting Started](https://smocker.dev/guide/getting-started.html) guide on
|
28
|
+
how to use the server and define mocked requests and responses.
|
@@ -0,0 +1,32 @@
|
|
1
|
+
# SSL
|
2
|
+
|
3
|
+
## Enabling https for services
|
4
|
+
|
5
|
+
In order to test services with ssl enabled, `certificate authority (CA)` certs as well as applicant key pairs have been created and are
|
6
|
+
located in [tls_certificates/](../../tls_certificates/) folder.
|
7
|
+
|
8
|
+
**All certificates are used for testing purposes only and are not present in any of release images.**
|
9
|
+
|
10
|
+
## Generating new key pairs
|
11
|
+
|
12
|
+
To create new key pair for a new service, following commands can be used:
|
13
|
+
|
14
|
+
* creating new private key:
|
15
|
+
|
16
|
+
```console
|
17
|
+
$ cd tls_certificates && mkdir service && cd service
|
18
|
+
```
|
19
|
+
|
20
|
+
```console
|
21
|
+
$ openssl genrsa -out service.key 4096
|
22
|
+
```
|
23
|
+
|
24
|
+
* creating public key and `certificate signing request (CSR)`
|
25
|
+
|
26
|
+
```console
|
27
|
+
$ openssl req -new -key service.key -out service.csr -subj "/C=US/ST=California/L=San Francisco/O=Gitlab Authors/CN=service.test" -addext "subjectAltName=DNS:service.test,DNS:extra.service.test"
|
28
|
+
```
|
29
|
+
|
30
|
+
```console
|
31
|
+
$ openssl x509 -req -days 3650 -in service.csr -CA ../authority/ca.crt -CAkey ../authority/ca.key -set_serial 1 -out service.crt -extfile <(printf "subjectAltName=DNS:service.test,DNS:extra.service.test")
|
32
|
+
```
|
@@ -0,0 +1,29 @@
|
|
1
|
+
# Style Guide
|
2
|
+
|
3
|
+
## RuboCop rule development guide
|
4
|
+
|
5
|
+
Our codebase style is defined and enforced by [RuboCop](https://github.com/rubocop/rubocop).
|
6
|
+
|
7
|
+
You can check for any offenses locally with `bundle exec rubocop --parallel`.
|
8
|
+
On the CI, this is automatically checked by the `rubocop` jobs in the `check` stage.
|
9
|
+
|
10
|
+
### Lefthook
|
11
|
+
|
12
|
+
[Lefthook](https://github.com/evilmartians/lefthook) is a Git hooks manager that allows
|
13
|
+
custom logic to be executed prior to Git committing or pushing. GitLab comes with
|
14
|
+
Lefthook configuration (`lefthook.yml`), but it must be installed.
|
15
|
+
|
16
|
+
We have a `lefthook.yml` checked in but it is ignored until Lefthook is installed.
|
17
|
+
|
18
|
+
### Install Lefthook
|
19
|
+
|
20
|
+
```shell
|
21
|
+
# Install the `lefthook` Ruby gem:
|
22
|
+
bundle install
|
23
|
+
# Initialize the lefthook config and adds to .git/hooks dir
|
24
|
+
bundle exec lefthook install
|
25
|
+
# Verify hook execution works as expected
|
26
|
+
bundle exec lefthook run pre-push
|
27
|
+
```
|
28
|
+
|
29
|
+
For a detailed guide on left hook configuration see https://github.com/evilmartians/lefthook/blob/master/docs/configuration.md
|
@@ -1114,3 +1114,12 @@ $ gitlab-qa Test::Instance::Chaos
|
|
1114
1114
|
|
1115
1115
|
[test-instance]: https://gitlab.com/gitlab-org/gitlab/blob/master/qa/qa/scenario/test/instance/all.rb
|
1116
1116
|
[smoke-instance]: https://gitlab.com/gitlab-org/gitlab/blob/master/qa/qa/scenario/test/instance/smoke.rb
|
1117
|
+
|
1118
|
+
### `Test::Integration::Import`
|
1119
|
+
|
1120
|
+
This scenario will run specs tagged with `:import` tags.
|
1121
|
+
|
1122
|
+
These tests are designed to validate import functionality by importing projects from `GitHub` or another `GitLab` instance.
|
1123
|
+
This scenario type spins up 2 gitlab instances and additionally an instance with simple http mock server.
|
1124
|
+
|
1125
|
+
If environment variable `QA_MOCK_GITHUB` is set to `true`, all calls to `github.com` are rerouted to mock server.
|
data/gitlab-qa.gemspec
CHANGED
@@ -23,6 +23,7 @@ Gem::Specification.new do |spec|
|
|
23
23
|
spec.add_development_dependency 'climate_control', '~> 1.0.1'
|
24
24
|
spec.add_development_dependency 'gitlab-dangerfiles', '~> 2.11'
|
25
25
|
spec.add_development_dependency 'gitlab-styles', '~> 6.2.1'
|
26
|
+
spec.add_development_dependency 'lefthook', '~> 1.2.6'
|
26
27
|
spec.add_development_dependency 'pry', '~> 0.11'
|
27
28
|
spec.add_development_dependency 'rake', '~> 13.0'
|
28
29
|
spec.add_development_dependency 'rspec', '~> 3.7'
|
data/lefthook.yml
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
# EXAMPLE USAGE:
|
2
|
+
|
3
|
+
# Refer for explanation to following link:
|
4
|
+
# https://github.com/evilmartians/lefthook/blob/master/docs/configuration.md
|
5
|
+
#
|
6
|
+
pre-push:
|
7
|
+
commands:
|
8
|
+
rubocop:
|
9
|
+
tags: backend style
|
10
|
+
files: git diff --name-only --diff-filter=d $(git merge-base origin/master HEAD)..HEAD
|
11
|
+
glob: '*.{rb,rake}'
|
12
|
+
run: REVEAL_RUBOCOP_TODO=0 bundle exec rubocop --parallel --force-exclusion {files}
|
@@ -0,0 +1,36 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "securerandom"
|
4
|
+
|
5
|
+
module Gitlab
|
6
|
+
module QA
|
7
|
+
module Component
|
8
|
+
# Generic helper component running alpine linux image
|
9
|
+
# Useful for populating volumes beforehand or running any other action that requires a running container
|
10
|
+
# and has to be performed before main component containers are started
|
11
|
+
#
|
12
|
+
class Alpine < Base
|
13
|
+
DOCKER_IMAGE = "alpine"
|
14
|
+
DOCKER_IMAGE_TAG = "latest"
|
15
|
+
|
16
|
+
def name
|
17
|
+
@name ||= "alpine-#{SecureRandom.hex(4)}"
|
18
|
+
end
|
19
|
+
|
20
|
+
def start
|
21
|
+
docker.run(image: image, tag: tag, args: ["tail", "-f", "/dev/null"]) do |command|
|
22
|
+
command << "-d"
|
23
|
+
command << "--name #{name}"
|
24
|
+
|
25
|
+
volumes.each { |to, from| command.volume(to, from, 'Z') }
|
26
|
+
environment.each { |key, value| command.env(key, value) }
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def prepare
|
31
|
+
prepare_docker_container
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -6,9 +6,18 @@ module Gitlab
|
|
6
6
|
class Base
|
7
7
|
include Scenario::Actable
|
8
8
|
|
9
|
+
CERTIFICATES_PATH = File.expand_path('../../../../tls_certificates', __dir__)
|
10
|
+
|
9
11
|
attr_reader :docker
|
10
|
-
attr_accessor :volumes, :ports, :network, :environment, :runner_network, :airgapped_network
|
11
12
|
attr_writer :name, :exec_commands
|
13
|
+
attr_accessor :volumes,
|
14
|
+
:ports,
|
15
|
+
:network,
|
16
|
+
:network_aliases,
|
17
|
+
:environment,
|
18
|
+
:runner_network,
|
19
|
+
:airgapped_network,
|
20
|
+
:additional_hosts
|
12
21
|
|
13
22
|
def initialize
|
14
23
|
@docker = Docker::Engine.new
|
@@ -17,6 +26,7 @@ module Gitlab
|
|
17
26
|
@ports = []
|
18
27
|
@network_aliases = []
|
19
28
|
@exec_commands = []
|
29
|
+
@additional_hosts = []
|
20
30
|
end
|
21
31
|
|
22
32
|
def add_network_alias(name)
|
@@ -74,18 +84,21 @@ module Gitlab
|
|
74
84
|
def prepare_network
|
75
85
|
prepare_airgapped_network
|
76
86
|
prepare_runner_network
|
77
|
-
|
78
87
|
return if docker.network_exists?(network)
|
79
88
|
|
80
89
|
docker.network_create(network)
|
81
90
|
end
|
82
91
|
|
83
92
|
def prepare_airgapped_network
|
84
|
-
|
93
|
+
return unless airgapped_network && !docker.network_exists?(network)
|
94
|
+
|
95
|
+
docker.network_create("--driver=bridge --internal #{network}")
|
85
96
|
end
|
86
97
|
|
87
98
|
def prepare_runner_network
|
88
|
-
|
99
|
+
return unless runner_network && !docker.network_exists?(runner_network)
|
100
|
+
|
101
|
+
docker.network_create("--driver=bridge --internal #{runner_network}")
|
89
102
|
end
|
90
103
|
|
91
104
|
def prepare_docker_container
|
@@ -118,6 +131,10 @@ module Gitlab
|
|
118
131
|
@network_aliases.to_a.each do |network_alias|
|
119
132
|
command << "--network-alias #{network_alias}"
|
120
133
|
end
|
134
|
+
|
135
|
+
@additional_hosts.each do |host|
|
136
|
+
command << "--add-host=#{host}"
|
137
|
+
end
|
121
138
|
end
|
122
139
|
end
|
123
140
|
|
@@ -16,17 +16,28 @@ module Gitlab
|
|
16
16
|
extend Forwardable
|
17
17
|
using Rainbow
|
18
18
|
|
19
|
-
attr_reader :release,
|
20
|
-
|
19
|
+
attr_reader :release,
|
20
|
+
:omnibus_configuration,
|
21
|
+
:omnibus_gitlab_rails_env,
|
22
|
+
:authority_volume,
|
23
|
+
:ssl_volume
|
24
|
+
|
25
|
+
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
|
+
|
21
33
|
attr_writer :name, :relative_path
|
22
34
|
|
23
35
|
def_delegators :release, :tag, :image, :edition
|
24
36
|
|
25
|
-
CERTIFICATES_PATH = File.expand_path('../../../../tls_certificates', __dir__)
|
26
37
|
DATA_SEED_PATH = File.expand_path('../../../../support/data', __dir__)
|
27
38
|
|
28
|
-
SSL_PATH = '/etc/gitlab/ssl'
|
29
39
|
TRUSTED_PATH = '/etc/gitlab/trusted-certs'
|
40
|
+
SSL_PATH = '/etc/gitlab/ssl'
|
30
41
|
DATA_PATH = '/tmp/data-seeds'
|
31
42
|
|
32
43
|
def initialize
|
@@ -34,17 +45,8 @@ module Gitlab
|
|
34
45
|
|
35
46
|
@skip_availability_check = false
|
36
47
|
@omnibus_gitlab_rails_env = {}
|
37
|
-
|
38
48
|
@omnibus_configuration = Runtime::OmnibusConfiguration.new(Runtime::Scenario.omnibus_configuration)
|
39
|
-
|
40
|
-
@working_dir_tmp_cert_path = Dir.mktmpdir('certs', FileUtils.mkdir_p("#{Dir.pwd}/tmp"))
|
41
|
-
@authority_cert_path = "#{@working_dir_tmp_cert_path}/authority"
|
42
|
-
@gitlab_cert_path = "#{@working_dir_tmp_cert_path}/gitlab"
|
43
|
-
@gitaly_cert_path = "#{@working_dir_tmp_cert_path}/gitaly"
|
44
|
-
|
45
|
-
@volumes[@gitlab_cert_path] = SSL_PATH
|
46
|
-
@volumes[@authority_cert_path] = TRUSTED_PATH
|
47
|
-
|
49
|
+
@cert_volumes = { "authority" => TRUSTED_PATH, "gitlab-ssl" => SSL_PATH }
|
48
50
|
@seed_admin_token = Runtime::Scenario.seed_admin_token
|
49
51
|
@seed_db = Runtime::Scenario.seed_db
|
50
52
|
@skip_server_hooks = Runtime::Scenario.skip_server_hooks
|
@@ -89,11 +91,6 @@ module Gitlab
|
|
89
91
|
tls ? ["443:443"] : ["80"]
|
90
92
|
end
|
91
93
|
|
92
|
-
def gitaly_tls
|
93
|
-
@volumes.delete(@gitlab_cert_path)
|
94
|
-
@volumes[@gitaly_cert_path] = SSL_PATH
|
95
|
-
end
|
96
|
-
|
97
94
|
def relative_path
|
98
95
|
@relative_path ||= ''
|
99
96
|
end
|
@@ -109,12 +106,6 @@ module Gitlab
|
|
109
106
|
super
|
110
107
|
end
|
111
108
|
|
112
|
-
def teardown!
|
113
|
-
FileUtils.rm_rf(@working_dir_tmp_cert_path)
|
114
|
-
|
115
|
-
super
|
116
|
-
end
|
117
|
-
|
118
109
|
def pull
|
119
110
|
docker.login(**release.login_params) if release.login_params
|
120
111
|
|
@@ -146,7 +137,7 @@ module Gitlab
|
|
146
137
|
command.port(mapping)
|
147
138
|
end
|
148
139
|
|
149
|
-
@volumes.to_h.each do |to, from|
|
140
|
+
@volumes.to_h.merge(cert_volumes).each do |to, from|
|
150
141
|
command.volume(to, from, 'Z')
|
151
142
|
end
|
152
143
|
|
@@ -159,6 +150,10 @@ module Gitlab
|
|
159
150
|
@network_aliases.to_a.each do |network_alias|
|
160
151
|
command << "--network-alias #{network_alias}"
|
161
152
|
end
|
153
|
+
|
154
|
+
@additional_hosts.each do |host|
|
155
|
+
command << "--add-host=#{host}"
|
156
|
+
end
|
162
157
|
end
|
163
158
|
|
164
159
|
return unless runner_network
|
@@ -239,19 +234,28 @@ module Gitlab
|
|
239
234
|
|
240
235
|
private
|
241
236
|
|
237
|
+
attr_reader :cert_volumes
|
238
|
+
|
242
239
|
def read_package_manifest
|
243
|
-
@docker.read_file(
|
244
|
-
@release.image, @release.tag,
|
245
|
-
'/opt/gitlab/version-manifest.json'
|
246
|
-
)
|
240
|
+
@docker.read_file(@release.image, @release.tag, '/opt/gitlab/version-manifest.json')
|
247
241
|
end
|
248
242
|
|
249
|
-
#
|
250
|
-
#
|
243
|
+
# Create cert files in separate volumes
|
244
|
+
#
|
245
|
+
# tls_certificates folder can't be mounted directly when remote docker context is used
|
246
|
+
# due to not having access to local dir
|
251
247
|
#
|
252
248
|
# @return [void]
|
253
249
|
def copy_certificates
|
254
|
-
|
250
|
+
Alpine.perform do |alpine|
|
251
|
+
alpine.volumes = cert_volumes
|
252
|
+
|
253
|
+
alpine.start_instance
|
254
|
+
docker.copy(alpine.name, "#{CERTIFICATES_PATH}/authority/.", TRUSTED_PATH)
|
255
|
+
docker.copy(alpine.name, "#{CERTIFICATES_PATH}/#{gitaly_tls ? 'gitaly' : 'gitlab'}/.", SSL_PATH)
|
256
|
+
ensure
|
257
|
+
alpine.teardown! # always remove container, even when global `--no-tests` flag was provided
|
258
|
+
end
|
255
259
|
end
|
256
260
|
|
257
261
|
def ensure_configured!
|
@@ -3,6 +3,9 @@
|
|
3
3
|
module Gitlab
|
4
4
|
module QA
|
5
5
|
module Component
|
6
|
+
# General purpose http mock server
|
7
|
+
# see: https://smocker.dev/
|
8
|
+
#
|
6
9
|
class MockServer < Base
|
7
10
|
DOCKER_IMAGE = "thiht/smocker"
|
8
11
|
DOCKER_IMAGE_TAG = "0.18.2"
|
@@ -10,11 +13,45 @@ module Gitlab
|
|
10
13
|
def initialize
|
11
14
|
super
|
12
15
|
|
13
|
-
@
|
14
|
-
@name = "smocker
|
16
|
+
@tls = false
|
17
|
+
@name = "smocker"
|
18
|
+
@tls_path = "/etc/smocker/tls"
|
19
|
+
@ports = [80, 8081]
|
20
|
+
@environment = { "SMOCKER_MOCK_SERVER_LISTEN_PORT" => 80 }
|
15
21
|
end
|
16
22
|
|
17
23
|
attr_reader :name
|
24
|
+
attr_writer :tls
|
25
|
+
|
26
|
+
def prepare
|
27
|
+
super
|
28
|
+
|
29
|
+
setup_tls if tls
|
30
|
+
end
|
31
|
+
|
32
|
+
private
|
33
|
+
|
34
|
+
attr_reader :tls_path, :tls
|
35
|
+
|
36
|
+
def setup_tls
|
37
|
+
@volumes = { "smocker-ssl" => tls_path }
|
38
|
+
@ports = [443, 8081]
|
39
|
+
@environment = {
|
40
|
+
"SMOCKER_MOCK_SERVER_LISTEN_PORT" => 443,
|
41
|
+
"SMOCKER_TLS_ENABLE" => "true",
|
42
|
+
"SMOCKER_TLS_CERT_FILE" => "#{@tls_path}/smocker.crt",
|
43
|
+
"SMOCKER_TLS_PRIVATE_KEY_FILE" => "#{@tls_path}/smocker.key"
|
44
|
+
}
|
45
|
+
|
46
|
+
Alpine.perform do |alpine|
|
47
|
+
alpine.volumes = volumes
|
48
|
+
|
49
|
+
alpine.start_instance
|
50
|
+
docker.copy(alpine.name, "#{CERTIFICATES_PATH}/smocker/.", tls_path)
|
51
|
+
ensure
|
52
|
+
alpine.teardown! # always remove container, even when global `--no-tests` flag was provided
|
53
|
+
end
|
54
|
+
end
|
18
55
|
end
|
19
56
|
end
|
20
57
|
end
|
@@ -39,7 +39,6 @@ module Gitlab
|
|
39
39
|
'QA_EXPORT_TEST_METRICS' => :qa_export_test_metrics,
|
40
40
|
'QA_INFLUXDB_URL' => :qa_influxdb_url,
|
41
41
|
'QA_INFLUXDB_TOKEN' => :qa_influxdb_token,
|
42
|
-
'QA_RUN_TYPE' => :qa_run_type,
|
43
42
|
'QA_SKIP_PULL' => :qa_skip_pull,
|
44
43
|
'QA_VALIDATE_RESOURCE_REUSE' => :qa_validate_resource_reuse,
|
45
44
|
'GITLAB_API_BASE' => :api_base,
|
@@ -370,14 +369,14 @@ module Gitlab
|
|
370
369
|
env_var_value_if_defined('QA_COM_REGISTRY') || 'registry.gitlab.com'
|
371
370
|
end
|
372
371
|
|
373
|
-
private
|
374
|
-
|
375
372
|
def enabled?(value, default: true)
|
376
373
|
return default if value.nil?
|
377
374
|
|
378
375
|
(value =~ /^(false|no|0)$/i) != 0
|
379
376
|
end
|
380
377
|
|
378
|
+
private
|
379
|
+
|
381
380
|
def env_var_value_valid?(variable)
|
382
381
|
!ENV[variable].blank?
|
383
382
|
end
|
@@ -14,10 +14,13 @@ module Gitlab
|
|
14
14
|
#
|
15
15
|
class Import < Scenario::Template
|
16
16
|
def initialize
|
17
|
-
@source_gitlab = Component::Gitlab.new
|
18
|
-
@target_gitlab = Component::Gitlab.new
|
19
|
-
@mock_server = Component::MockServer.new
|
20
17
|
@network = "test"
|
18
|
+
@source_gitlab = Component::Gitlab.new.tap { |gitlab| gitlab.network = @network }
|
19
|
+
@target_gitlab = Component::Gitlab.new.tap { |gitlab| gitlab.network = @network }
|
20
|
+
@mock_server = Component::MockServer.new.tap do |server|
|
21
|
+
server.network = @network
|
22
|
+
server.tls = true
|
23
|
+
end
|
21
24
|
end
|
22
25
|
|
23
26
|
attr_reader :source_gitlab, :target_gitlab, :mock_server, :network
|
@@ -39,11 +42,7 @@ module Gitlab
|
|
39
42
|
#
|
40
43
|
# @return [void]
|
41
44
|
def start_mock_server
|
42
|
-
mock_server.
|
43
|
-
server.network = network
|
44
|
-
|
45
|
-
server.start_instance
|
46
|
-
end
|
45
|
+
mock_server.start_instance
|
47
46
|
end
|
48
47
|
|
49
48
|
# Start gitlab instance
|
@@ -52,14 +51,15 @@ module Gitlab
|
|
52
51
|
# @return [void]
|
53
52
|
def start_gitlab_instances(release)
|
54
53
|
instances = [
|
55
|
-
{ instance: source_gitlab, name: "import-source" },
|
56
|
-
{ instance: target_gitlab, name: "import-target" }
|
54
|
+
{ instance: source_gitlab, name: "import-source", additional_hosts: [] },
|
55
|
+
{ instance: target_gitlab, name: "import-target", additional_hosts: mocked_hosts }
|
57
56
|
]
|
57
|
+
|
58
58
|
::Parallel.each(instances, in_threads: 2) do |gitlab_instance|
|
59
59
|
gitlab_instance[:instance].tap do |gitlab|
|
60
60
|
gitlab.name = gitlab_instance[:name]
|
61
|
-
gitlab.network = network
|
62
61
|
gitlab.release = release
|
62
|
+
gitlab.additional_hosts = gitlab_instance[:additional_hosts]
|
63
63
|
gitlab.seed_admin_token = true
|
64
64
|
|
65
65
|
gitlab.start_instance
|
@@ -76,10 +76,24 @@ module Gitlab
|
|
76
76
|
specs.suite = "Test::Integration::Import"
|
77
77
|
specs.release = target_gitlab.release
|
78
78
|
specs.network = network
|
79
|
-
specs.env = { "QA_IMPORT_SOURCE_URL" => source_gitlab.address, "QA_ALLOW_LOCAL_REQUESTS" => "true" }
|
80
79
|
specs.args = [target_gitlab.address, *rspec_args]
|
80
|
+
specs.env = {
|
81
|
+
"QA_ALLOW_LOCAL_REQUESTS" => "true",
|
82
|
+
"QA_IMPORT_SOURCE_URL" => source_gitlab.address,
|
83
|
+
"QA_SMOCKER_HOST" => mock_server.hostname
|
84
|
+
}
|
81
85
|
end
|
82
86
|
end
|
87
|
+
|
88
|
+
# List of hosts that should be redirected to mock server
|
89
|
+
#
|
90
|
+
# @return [Array]
|
91
|
+
def mocked_hosts
|
92
|
+
hosts = []
|
93
|
+
hosts << "api.github.com:#{mock_server.ip_address}" if Runtime::Env.enabled?(ENV["QA_MOCK_GITHUB"])
|
94
|
+
|
95
|
+
hosts
|
96
|
+
end
|
83
97
|
end
|
84
98
|
end
|
85
99
|
end
|
@@ -16,44 +16,57 @@ module Gitlab
|
|
16
16
|
end
|
17
17
|
|
18
18
|
def perform(release, *rspec_args)
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
19
|
+
# You can create 2 networks with the same 'human friendly' name if you run network create in parallel
|
20
|
+
# However this causes 'ambiguous network' errors, so lets just create network manually earlier
|
21
|
+
# see https://github.com/moby/moby/issues/18864#issuecomment-167006094
|
22
|
+
# and also api docs https://github.com/moby/moby/blob/master/docs/api/v1.42.yaml#L9932-L9941
|
23
|
+
docker = Docker::Engine.new
|
24
|
+
docker.network_create(@network) unless docker.network_exists?(@network)
|
25
|
+
|
26
|
+
gitaly_thread = Thread.new do
|
27
|
+
Thread.current.abort_on_exception = true
|
28
|
+
@gitaly_node = Component::Gitlab.perform do |gitaly|
|
29
|
+
gitaly.release = QA::Release.new(release)
|
30
|
+
gitaly.name = @gitaly_name
|
31
|
+
gitaly.network = @network
|
32
|
+
gitaly.skip_availability_check = true
|
33
|
+
gitaly.seed_admin_token = false
|
34
|
+
|
35
|
+
gitaly.omnibus_configuration << gitaly_omnibus
|
36
|
+
gitaly.gitaly_tls = true
|
37
|
+
|
38
|
+
gitaly.instance(skip_teardown: true)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
Component::Gitlab.perform do |gitlab|
|
43
|
+
gitlab.release = QA::Release.new(release)
|
44
|
+
gitlab.name = @gitlab_name
|
45
|
+
gitlab.network = @network
|
46
|
+
|
47
|
+
gitlab.omnibus_configuration << gitlab_omnibus
|
48
|
+
gitlab.tls = true
|
49
|
+
|
50
|
+
gitlab.instance do
|
51
|
+
gitaly_thread.join
|
52
|
+
Runtime::Logger.info("Running mTLS specs!")
|
53
|
+
|
54
|
+
if @tag
|
55
|
+
rspec_args << "--" unless rspec_args.include?('--')
|
56
|
+
rspec_args << "--tag" << @tag
|
57
|
+
end
|
58
|
+
|
59
|
+
Component::Specs.perform do |specs|
|
60
|
+
specs.suite = @spec_suite
|
61
|
+
specs.release = gitlab.release
|
62
|
+
specs.network = gitlab.network
|
63
|
+
specs.args = [gitlab.address, *rspec_args]
|
64
|
+
specs.env = @env
|
54
65
|
end
|
55
66
|
end
|
56
67
|
end
|
68
|
+
ensure
|
69
|
+
@gitaly_node&.teardown
|
57
70
|
end
|
58
71
|
|
59
72
|
def gitlab_omnibus
|
data/lib/gitlab/qa/version.rb
CHANGED
@@ -0,0 +1,31 @@
|
|
1
|
+
-----BEGIN CERTIFICATE-----
|
2
|
+
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
|
31
|
+
-----END CERTIFICATE-----
|
@@ -0,0 +1,29 @@
|
|
1
|
+
-----BEGIN CERTIFICATE REQUEST-----
|
2
|
+
MIIE6zCCAtMCAQAwbDELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWEx
|
3
|
+
FjAUBgNVBAcMDVNhbiBGcmFuY2lzY28xFzAVBgNVBAoMDkdpdGxhYiBBdXRob3Jz
|
4
|
+
MRcwFQYDVQQDDA5hcGkuZ2l0aHViLmNvbTCCAiIwDQYJKoZIhvcNAQEBBQADggIP
|
5
|
+
ADCCAgoCggIBALxwrEgBMPwRoxJSgow2EtOxD+JrBcFdH6vQEpaPMXpPF1hiXJT+
|
6
|
+
2cflMkDje5QgkOs7WXm90Uytn1d6bM3yoX+VSlNzd+cVA0T33w3NnN0bcOjeE5Nr
|
7
|
+
JNFiWN7s/EHdjx6SlsKpbmUmRH18L9PwJMCiDTArzAifTAKAHCK4zUg/My61gZRm
|
8
|
+
DECfDaHMgcIXryZ9mGqIobdlwpLBBy3YUvn/1lwLvUCTGikrRgE4ufutF4SELw/A
|
9
|
+
4hZ3EPgTIHcd3izHNP1k45LDJc78UBAUGKgeZ4joLFLgE44ErwoMYZnWC8hCrY4d
|
10
|
+
g3GrNcGInnNgQypev11XTMpnT7QS41kQQ7tPBbZaduIUOUHMYheMFVI9zbqlCMWc
|
11
|
+
LlieI9twoL4numRm1uJaWjn1YW+0t78VFOI37rik1cqIx4YFsp25g4A1w2PUg7tW
|
12
|
+
LqjmWfyzi2KUB7hMk2IgzIoEag/tf5SIR9rV8KBnypUGoNbE26mNTUrdPxUIfWsF
|
13
|
+
ElRqi0k3fLDjW6FU+MunHocE3V9tepgSQOgSkNFUJa2gjFVBG70m1Ufcoe9FJ2a3
|
14
|
+
Uq/68Evu4Rst4PqE2sLkakuKKRXojUdBTEzu/MCUGbPV2g5VPKn/1WlBs+ux3YXq
|
15
|
+
S4vf/E7spQPdTTFmHp1FQTH4+4J6cZhlVxCi3ir3h2/ehx2jUnrSfYOTAgMBAAGg
|
16
|
+
OjA4BgkqhkiG9w0BCQ4xKzApMCcGA1UdEQQgMB6CDmFwaS5naXRodWIuY29tggxz
|
17
|
+
bW9ja2VyLnRlc3QwDQYJKoZIhvcNAQELBQADggIBAENNxApAwNQsxmHa+q4ZjPax
|
18
|
+
4uUb3Q2sQUqRZN2IAP+HDmlKy8scuhvvCkxuxC7rxZhupoEUR3MJoDAURLfIQLPu
|
19
|
+
S3zj1H7iIsi1sY+HDaMKmgK22IudIV3WuVgYcs1bdYHUc+lp1k8Y+KHp80f/hzpU
|
20
|
+
nkFVMsddzLglA8Kgt9zqER05iTxBoJfZYbLBzI31aPtmm/DUkAccU19ututbmmtk
|
21
|
+
7XDcDp3FbsgbR/XtkrbuMJGvbs3nyQ6JXK9Mj4AHn+Iucs+mYBULyMYtNbGGCY5h
|
22
|
+
AmJdScWAxCxDXEelUpml29dytqZCRBcvcdLwM4srP+VE5lbAkLcR0aETDeRAEshO
|
23
|
+
wB8QMZXql8Tc1quKNOr0pxoJZSA0dIjv/tUap8HiuNeEYN0F938uWTb1TQHSs9Dt
|
24
|
+
8d6/SXZZNZNw9xWoeBwdJE1TdcozGnXp6W93+BmGHkOib98FYRWO581Tv12v/x8V
|
25
|
+
9Jys/wzTmH8xrjjHWYlRx+m3yFGMY+Ou0Ee0Tw3lSAOj5tY5IEliVm+c67K57HDY
|
26
|
+
zhXajuiRfAXe4bsQN/FjvOJmLGxltEX1q01xWD9kP513LMLJSHQXOj/Iw9WZIBul
|
27
|
+
zKVAWqpN4XyvPzu/QAymW95tYUb9ZmByUi9OXpfMuTipN6ogvI3XBEpGkPGVzbgR
|
28
|
+
6ypgdzU8dPZyrsdb0A8s
|
29
|
+
-----END CERTIFICATE REQUEST-----
|
@@ -0,0 +1,51 @@
|
|
1
|
+
-----BEGIN RSA PRIVATE KEY-----
|
2
|
+
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
|
51
|
+
-----END RSA PRIVATE KEY-----
|
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: 8.
|
4
|
+
version: 8.15.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:
|
11
|
+
date: 2023-01-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: climate_control
|
@@ -52,6 +52,20 @@ dependencies:
|
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: 6.2.1
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: lefthook
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 1.2.6
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: 1.2.6
|
55
69
|
- !ruby/object:Gem::Dependency
|
56
70
|
name: pry
|
57
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -310,6 +324,9 @@ files:
|
|
310
324
|
- docs/README.md
|
311
325
|
- docs/architecture.md
|
312
326
|
- docs/configuring_omnibus.md
|
327
|
+
- docs/developer/http_mocking.md
|
328
|
+
- docs/developer/ssl.md
|
329
|
+
- docs/developer/style_guide.md
|
313
330
|
- docs/how_it_works.md
|
314
331
|
- docs/omnibus_configurations/license_mode.md
|
315
332
|
- docs/release_process.md
|
@@ -325,7 +342,9 @@ files:
|
|
325
342
|
- fixtures/ldap/3_add_groups.ldif
|
326
343
|
- fixtures/ldap/tanuki.ldif
|
327
344
|
- gitlab-qa.gemspec
|
345
|
+
- lefthook.yml
|
328
346
|
- lib/gitlab/qa.rb
|
347
|
+
- lib/gitlab/qa/component/alpine.rb
|
329
348
|
- lib/gitlab/qa/component/base.rb
|
330
349
|
- lib/gitlab/qa/component/chaos.rb
|
331
350
|
- lib/gitlab/qa/component/elasticsearch.rb
|
@@ -467,6 +486,9 @@ files:
|
|
467
486
|
- tls_certificates/gitlab/gitlab.test.crt
|
468
487
|
- tls_certificates/gitlab/gitlab.test.csr
|
469
488
|
- tls_certificates/gitlab/gitlab.test.key
|
489
|
+
- tls_certificates/smocker/smocker.crt
|
490
|
+
- tls_certificates/smocker/smocker.csr
|
491
|
+
- tls_certificates/smocker/smocker.key
|
470
492
|
- tmp/.gitignore
|
471
493
|
homepage: http://about.gitlab.com/
|
472
494
|
licenses:
|