gitlab-qa 5.9.0 → 5.10.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: 9dd97ce9a6062883099379592097771554a0d5d832cf4a3a120e73ef5808a31d
4
- data.tar.gz: 171854be80b7576152c6d5324eb404e17ee825b7f58fe01e3f2790cd0208efab
3
+ metadata.gz: 391e977cce68dfe2121221a474f716594ba841f639e49b9c0e4e37f273141b0c
4
+ data.tar.gz: af9e8913c4ecfe5d365ba18222f1dd15a0370c2efaed6d94c91af89b0dcd5e3e
5
5
  SHA512:
6
- metadata.gz: 514c8f72a97243719ebd46cf586076f1c996c45de222f6e7ce9690270b8a7c6e16785f81e82a74b2b208571edae8b5dcf7fd79ab0047ccb43938849ad3d81ae8
7
- data.tar.gz: 8bf6ec756fcd9f9d4175b6887db7fb962242bb5c77bd949028a62844fd7e41f2f4320055fb54d9a87a4334a2d4095a17516e9f75d2e2d52f7938ee7399f8dcbc
6
+ metadata.gz: 13946f0f1404490edff6465ca7e46a1e748e6cffc2d742e6fd9eb0c20f9ebbcf4c36217f863c07d21a3be622c2e4d45734ae3810b098ead1e1cad0dbdfbde9bc
7
+ data.tar.gz: b52d3e85cde22d8aa4819f4597e5146b7629287daeafda81bcf168e22cd833c2b7e3db5b1936503df2f3c4fbcdf20b87955c2d8bdcc084cf8e8d5076f13fd56a
@@ -51,6 +51,7 @@ module Gitlab
51
51
  autoload :Praefect, 'gitlab/qa/scenario/test/integration/praefect'
52
52
  autoload :Elasticsearch, 'gitlab/qa/scenario/test/integration/elasticsearch'
53
53
  autoload :SMTP, 'gitlab/qa/scenario/test/integration/smtp'
54
+ autoload :GitalyHA, 'gitlab/qa/scenario/test/integration/gitaly_ha'
54
55
  end
55
56
 
56
57
  module Sanity
@@ -71,6 +72,7 @@ module Gitlab
71
72
  autoload :Preprod, 'gitlab/qa/component/preprod'
72
73
  autoload :Elasticsearch, 'gitlab/qa/component/elasticsearch'
73
74
  autoload :MailHog, 'gitlab/qa/component/mail_hog'
75
+ autoload :PostgreSQL, 'gitlab/qa/component/postgresql'
74
76
  end
75
77
 
76
78
  module Support
@@ -13,7 +13,7 @@ module Gitlab
13
13
 
14
14
  attr_reader :release, :docker
15
15
  attr_accessor :volumes, :network, :environment, :tls, :disable_animations
16
- attr_writer :name, :relative_path, :exec_commands
16
+ attr_writer :name, :relative_path, :exec_commands, :skip_check
17
17
 
18
18
  def_delegators :release, :tag, :image, :edition
19
19
 
@@ -26,6 +26,7 @@ module Gitlab
26
26
  @volumes = {}
27
27
  @network_aliases = []
28
28
  @disable_animations = true
29
+ @skip_check = false
29
30
 
30
31
  @volumes[CERTIFICATES_PATH] = SSL_PATH
31
32
 
@@ -87,7 +88,7 @@ module Gitlab
87
88
  prepare
88
89
  start
89
90
  reconfigure
90
- wait
91
+ wait unless @skip_check
91
92
  process_exec_commands
92
93
 
93
94
  yield self if block_given?
@@ -98,11 +99,23 @@ module Gitlab
98
99
  alias_method :launch_and_teardown_instance, :instance
99
100
 
100
101
  def prepare
102
+ prepare_gitlab_omnibus_config
103
+ prepare_docker_image
104
+ prepare_network
105
+ end
106
+
107
+ def prepare_gitlab_omnibus_config
101
108
  setup_disable_animations if disable_animations
102
109
  set_formless_login_token
110
+ end
103
111
 
104
- @docker.pull(image, tag) unless Runtime::Env.skip_pull?
112
+ def prepare_docker_image
113
+ return if Runtime::Env.skip_pull?
114
+
115
+ @docker.pull(image, tag)
116
+ end
105
117
 
118
+ def prepare_network
106
119
  return if @docker.network_exists?(network)
107
120
 
108
121
  @docker.network_create(network)
@@ -0,0 +1,72 @@
1
+ module Gitlab
2
+ module QA
3
+ module Component
4
+ class PostgreSQL
5
+ include Scenario::Actable
6
+
7
+ POSTGRES_IMAGE = 'postgres'.freeze
8
+ POSTGRES_IMAGE_TAG = '11'.freeze
9
+
10
+ attr_reader :docker
11
+ attr_accessor :environment, :network
12
+ attr_writer :name
13
+
14
+ def initialize
15
+ @docker = Docker::Engine.new
16
+ @environment = {}
17
+ end
18
+
19
+ def name
20
+ @name ||= "postgres"
21
+ end
22
+
23
+ def instance
24
+ prepare
25
+ start
26
+ wait_until_ready
27
+ yield self
28
+ ensure
29
+ teardown
30
+ end
31
+
32
+ def prepare
33
+ @docker.pull(POSTGRES_IMAGE, POSTGRES_IMAGE_TAG)
34
+ return if @docker.network_exists?(network)
35
+
36
+ @docker.network_create(network)
37
+ end
38
+
39
+ def start
40
+ @docker.run(POSTGRES_IMAGE, POSTGRES_IMAGE_TAG) do |command|
41
+ command << "-d"
42
+ command << "--name #{name}"
43
+ command << "--net #{network}"
44
+
45
+ command.env("POSTGRES_PASSWORD", "SQL_PASSWORD")
46
+ end
47
+ end
48
+
49
+ def teardown
50
+ @docker.stop(name)
51
+ @docker.remove(name)
52
+ end
53
+
54
+ def run_psql(command)
55
+ @docker.exec(name, %(psql -U postgres #{command}))
56
+ end
57
+
58
+ private
59
+
60
+ def wait_until_ready
61
+ start = Time.now
62
+ begin
63
+ run_psql 'template1'
64
+ rescue StandardError
65
+ retry if Time.now - start < 30
66
+ raise
67
+ end
68
+ end
69
+ end
70
+ end
71
+ end
72
+ end
@@ -0,0 +1,166 @@
1
+ module Gitlab
2
+ module QA
3
+ module Scenario
4
+ module Test
5
+ module Integration
6
+ class GitalyHA < Scenario::Template
7
+ attr_reader :gitlab_name, :spec_suite
8
+
9
+ def initialize
10
+ @gitlab_name = 'gitlab-gitaly-ha'
11
+ @primary_node = 'gitaly1'
12
+ @secondary_node = 'gitaly2'
13
+ @praefect_node = 'praefect'
14
+ @database = 'postgres'
15
+ @spec_suite = 'Test::Integration::GitalyHA'
16
+ @network = 'test'
17
+ end
18
+
19
+ # rubocop:disable Metrics/AbcSize
20
+ def perform(release, *rspec_args)
21
+ gitaly(@primary_node, release) do
22
+ gitaly(@secondary_node, release) do
23
+ Component::PostgreSQL.perform do |sql|
24
+ sql.name = @database
25
+ sql.network = @network
26
+
27
+ sql.instance do
28
+ sql.run_psql '-d template1 -c "CREATE DATABASE praefect_production OWNER postgres"'
29
+
30
+ Component::Gitlab.perform do |praefect|
31
+ praefect.release = Release.new(release)
32
+ praefect.name = @praefect_node
33
+ praefect.network = @network
34
+ praefect.skip_check = true
35
+
36
+ praefect.omnibus_config = praefect_omnibus_configuration
37
+
38
+ praefect.instance do
39
+ Component::Gitlab.perform do |gitlab|
40
+ gitlab.release = Release.new(release)
41
+ gitlab.name = gitlab_name
42
+ gitlab.network = @network
43
+
44
+ gitlab.omnibus_config = gitlab_omnibus_configuration
45
+ gitlab.instance do
46
+ puts "Running Gitaly HA specs!"
47
+
48
+ Component::Specs.perform do |specs|
49
+ specs.suite = spec_suite
50
+ specs.release = gitlab.release
51
+ specs.network = gitlab.network
52
+ specs.args = [gitlab.address, *rspec_args]
53
+ end
54
+ end
55
+ end
56
+ end
57
+ end
58
+ end
59
+ end
60
+ end
61
+ end
62
+ end
63
+ # rubocop:enable Metrics/AbcSize
64
+
65
+ private
66
+
67
+ def disable_other_services
68
+ <<~OMNIBUS
69
+ postgresql['enable'] = false;
70
+ redis['enable'] = false;
71
+ nginx['enable'] = false;
72
+ prometheus['enable'] = false;
73
+ grafana['enable'] = false;
74
+ unicorn['enable'] = false;
75
+ sidekiq['enable'] = false;
76
+ gitlab_workhorse['enable'] = false;
77
+ gitlab_rails['rake_cache_clear'] = false;
78
+ gitlab_rails['auto_migrate'] = false;
79
+ OMNIBUS
80
+ end
81
+
82
+ def praefect_omnibus_configuration
83
+ <<~OMNIBUS
84
+ #{disable_other_services}
85
+ gitaly['enable'] = false;
86
+ praefect['enable'] = true;
87
+ praefect['listen_addr'] = '0.0.0.0:2305';
88
+ praefect['prometheus_listen_addr'] = '0.0.0.0:9652';
89
+ praefect['auth_token'] = 'PRAEFECT_EXTERNAL_TOKEN';
90
+ praefect['database_host'] = '#{@database}.#{@network}';
91
+ praefect['database_user'] = 'postgres';
92
+ praefect['database_port'] = 5432;
93
+ praefect['database_password'] = 'SQL_PASSWORD';
94
+ praefect['database_dbname'] = 'praefect_production';
95
+ praefect['database_sslmode'] = 'disable';
96
+ praefect['postgres_queue_enabled'] = true;
97
+ praefect['failover_enabled'] = true;
98
+ praefect['virtual_storages'] = {
99
+ 'default' => {
100
+ '#{@primary_node}' => {
101
+ 'address' => 'tcp://#{@primary_node}.#{@network}:8075',
102
+ 'token' => 'PRAEFECT_INTERNAL_TOKEN',
103
+ 'primary' => true
104
+ },
105
+ '#{@secondary_node}' => {
106
+ 'address' => 'tcp://#{@secondary_node}.#{@network}:8075',
107
+ 'token' => 'PRAEFECT_INTERNAL_TOKEN'
108
+ }
109
+ }
110
+ };
111
+ OMNIBUS
112
+ end
113
+
114
+ def gitaly_omnibus_configuration
115
+ <<~OMNIBUS
116
+ #{disable_other_services}
117
+ prometheus_monitoring['enable'] = false;
118
+ gitaly['enable'] = true;
119
+ gitaly['listen_addr'] = '0.0.0.0:8075';
120
+ gitaly['prometheus_listen_addr'] = '0.0.0.0:9236';
121
+ gitaly['auth_token'] = 'PRAEFECT_INTERNAL_TOKEN';
122
+ gitlab_shell['secret_token'] = 'GITLAB_SHELL_SECRET_TOKEN';
123
+ gitlab_rails['internal_api_url'] = 'http://#{@gitlab_name}.#{@network}';
124
+ git_data_dirs({
125
+ '#{@primary_node}' => {
126
+ 'path' => '/var/opt/gitlab/git-data'
127
+ },
128
+ '#{@secondary_node}' => {
129
+ 'path' => '/var/opt/gitlab/git-data'
130
+ }
131
+ });
132
+ OMNIBUS
133
+ end
134
+
135
+ def gitlab_omnibus_configuration
136
+ <<~OMNIBUS
137
+ git_data_dirs({
138
+ 'default' => {
139
+ 'gitaly_address' => 'tcp://#{@praefect_node}.#{@network}:2305',
140
+ 'gitaly_token' => 'PRAEFECT_EXTERNAL_TOKEN'
141
+ }
142
+ });
143
+ gitlab_shell['secret_token'] = 'GITLAB_SHELL_SECRET_TOKEN';
144
+ OMNIBUS
145
+ end
146
+
147
+ def gitaly(name, release)
148
+ Component::Gitlab.perform do |gitaly|
149
+ gitaly.release = Release.new(release)
150
+ gitaly.name = name
151
+ gitaly.network = @network
152
+ gitaly.skip_check = true
153
+
154
+ gitaly.omnibus_config = gitaly_omnibus_configuration
155
+
156
+ gitaly.instance do
157
+ yield self
158
+ end
159
+ end
160
+ end
161
+ end
162
+ end
163
+ end
164
+ end
165
+ end
166
+ end
@@ -15,7 +15,7 @@ module Gitlab
15
15
  gitlab.volumes = volumes
16
16
  gitlab.exec_commands = ['gitlab-psql -d template1 -c "CREATE DATABASE praefect_production OWNER gitlab"']
17
17
 
18
- gitlab.act(omnibus_config_with_praefect) do |new_config|
18
+ gitlab.act do
19
19
  prepare
20
20
  start
21
21
  reconfigure
@@ -34,6 +34,7 @@ module Gitlab
34
34
  gitlab.omnibus_config = omnibus_config_with_praefect
35
35
 
36
36
  gitlab.act do
37
+ prepare_gitlab_omnibus_config
37
38
  start
38
39
  reconfigure
39
40
  wait
@@ -1,5 +1,5 @@
1
1
  module Gitlab
2
2
  module QA
3
- VERSION = '5.9.0'.freeze
3
+ VERSION = '5.10.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: 5.9.0
4
+ version: 5.10.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: 2020-04-30 00:00:00.000000000 Z
11
+ date: 2020-05-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: climate_control
@@ -243,6 +243,7 @@ files:
243
243
  - lib/gitlab/qa/component/ldap.rb
244
244
  - lib/gitlab/qa/component/mail_hog.rb
245
245
  - lib/gitlab/qa/component/minio.rb
246
+ - lib/gitlab/qa/component/postgresql.rb
246
247
  - lib/gitlab/qa/component/preprod.rb
247
248
  - lib/gitlab/qa/component/production.rb
248
249
  - lib/gitlab/qa/component/saml.rb
@@ -277,6 +278,7 @@ files:
277
278
  - lib/gitlab/qa/scenario/test/instance/staging_geo.rb
278
279
  - lib/gitlab/qa/scenario/test/integration/elasticsearch.rb
279
280
  - lib/gitlab/qa/scenario/test/integration/geo.rb
281
+ - lib/gitlab/qa/scenario/test/integration/gitaly_ha.rb
280
282
  - lib/gitlab/qa/scenario/test/integration/group_saml.rb
281
283
  - lib/gitlab/qa/scenario/test/integration/instance_saml.rb
282
284
  - lib/gitlab/qa/scenario/test/integration/kubernetes.rb
@@ -321,7 +323,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
321
323
  - !ruby/object:Gem::Version
322
324
  version: '0'
323
325
  requirements: []
324
- rubygems_version: 3.1.2
326
+ rubygems_version: 3.1.3
325
327
  signing_key:
326
328
  specification_version: 4
327
329
  summary: Integration tests for GitLab