gitlab-qa 8.7.0 → 8.8.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4a59adb2954b85b2adb1eddb1f0fbc568c01fa9d2d466a3a6c16fa4c5bb12e3b
4
- data.tar.gz: c362d1e370e23f891e9a23a785ee88e48431fd466fd2aa1b38d2596f68ceeabf
3
+ metadata.gz: e89c4046779c498fad14fac05a4cc8ab68deb9d4ccb62e8eabaaace6af8be17d
4
+ data.tar.gz: a0c72ba4f7278b82f59678133578e11f23cb7e39449a82c21ec7beb967a524cc
5
5
  SHA512:
6
- metadata.gz: 4de67f7a4bc50f6a28503ea6bfaf988f1ca18db321dba31006eac49de6cf5159c981862909ed57cef6f61126fa1d429843a912f59445ebab270e104dd5f0f382
7
- data.tar.gz: 956a7115f74b6b563289feb1e75cfcb0d4901c2b1bef1fd8480508c7197c2e0934f0dd812a3a3ced498a430ccad3eeabb49751d2253cc02955e34db358cd83d9
6
+ metadata.gz: 7847ac077692217f68224ca9fdd31bcdadb833aa4aca0ab16113caf1efe6e1013689bca536d2b4c2b5fb3cd5d6e77a58f36b31e2b7c62d00f49abc66c2d0e683
7
+ data.tar.gz: 97e98ce591bb8a7cc2a804b1d1326605df8f68e0561cff27e235ddc48420be385794d8dd02ce635adafabd443b1e3f8ab9f4e4d194949b0fb91aedc06e243f32
@@ -0,0 +1,22 @@
1
+ ee:chaos:
2
+ extends:
3
+ - .rules:ee-never-when-triggered-by-feature-flag-definition-change
4
+ - .test
5
+ - .high-capacity
6
+ - .ee-variables
7
+ - .rspec-report-opts
8
+ variables:
9
+ QA_SCENARIO: "Test::Integration::Chaos"
10
+ QA_RSPEC_TAGS: "--tag chaos"
11
+
12
+ ee:chaos-quarantine:
13
+ extends:
14
+ - .rules:ee-never-when-triggered-by-feature-flag-definition-change
15
+ - .test
16
+ - .high-capacity
17
+ - .ee-variables
18
+ - .quarantine
19
+ - .rspec-report-opts
20
+ variables:
21
+ QA_SCENARIO: "Test::Integration::Chaos"
22
+ QA_RSPEC_TAGS: "--tag quarantine --tag chaos"
@@ -4,7 +4,7 @@ ce:sanity-framework:
4
4
  QA_GENERATE_ALLURE_REPORT: "false"
5
5
  QA_EXPORT_TEST_METRICS: "false"
6
6
  script:
7
- - ./bin/expect_exit_code_and_text "bundle exec exe/gitlab-qa Test::Instance::Image ${RELEASE:=CE} -- --tag framework" 1 "2 examples, 1 failure"
7
+ - ./bin/expect_exit_code_and_text "bundle exec exe/gitlab-qa Test::Instance::Image ${RELEASE:=CE} -- --tag framework" 1 "1 failure"
8
8
  extends:
9
9
  - .rules:ce-never-when-triggered-by-feature-flag-definition-change
10
10
  - .test
@@ -16,7 +16,7 @@ ee:sanity-framework:
16
16
  QA_GENERATE_ALLURE_REPORT: "false"
17
17
  QA_EXPORT_TEST_METRICS: "false"
18
18
  script:
19
- - ./bin/expect_exit_code_and_text "bundle exec exe/gitlab-qa Test::Instance::Image ${RELEASE:=EE} -- --tag framework" 1 "2 examples, 1 failure"
19
+ - ./bin/expect_exit_code_and_text "bundle exec exe/gitlab-qa Test::Instance::Image ${RELEASE:=EE} -- --tag framework" 1 "1 failure"
20
20
  extends:
21
21
  - .rules:ee-never-when-triggered-by-feature-flag-definition-change
22
22
  - .test
data/Gemfile.lock CHANGED
@@ -1,14 +1,15 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- gitlab-qa (8.7.0)
4
+ gitlab-qa (8.8.0)
5
5
  activesupport (~> 6.1)
6
6
  gitlab (~> 4.18.0)
7
7
  http (~> 5.0)
8
8
  nokogiri (~> 1.10)
9
- rainbow (~> 3.0.0)
9
+ rainbow (>= 3, < 4)
10
10
  table_print (= 1.5.7)
11
- zeitwerk (~> 2.4)
11
+ toxiproxy (~> 2.0.2)
12
+ zeitwerk (>= 2, < 3)
12
13
 
13
14
  GEM
14
15
  remote: https://rubygems.org/
@@ -216,6 +217,7 @@ GEM
216
217
  unicode-display_width (>= 1.1.1, < 3)
217
218
  thor (1.2.1)
218
219
  tilt (2.0.11)
220
+ toxiproxy (2.0.2)
219
221
  tzinfo (2.0.5)
220
222
  concurrent-ruby (~> 1.0)
221
223
  unf (0.1.4)
@@ -26,7 +26,7 @@ else
26
26
  if [ "$?" -eq "0" ]; then
27
27
  echo "'$SCRIPT' outputted '$EXPECTED_TEXT', as expected!"
28
28
  else
29
- echo "'$SCRIPT' was expected to output '$EXPECTED_TEXT', but did not!"
29
+ echo "'$SCRIPT' was expected to match output '$EXPECTED_TEXT', but did not!"
30
30
  exit 1
31
31
  fi
32
32
  else
@@ -1035,6 +1035,33 @@ $ export GITLAB_PASSWORD="$GITLAB_QA_PASSWORD"
1035
1035
 
1036
1036
  $ gitlab-qa Test::Instance::Geo EE https://primary.gitlab.com https://secondary.gitlab.com
1037
1037
  ```
1038
+
1039
+ ### `Test::Instance::Chaos`
1040
+
1041
+ This scenario will run a limited number of tests that are tagged with `:chaos`.
1042
+
1043
+ These tests are designed to verify that our systems can gracefully handle scenarios which may occur if
1044
+ networking or connectivity type issues occur in various Gitlab components.
1045
+ They make use of [toxiproxy(https://github.com/Shopify/toxiproxy)] to act as a proxy allowing us to introduce
1046
+ connectivity issues, via the [toxiproxy ruby client](https://github.com/Shopify/toxiproxy-ruby) in an E2E spec.
1047
+
1048
+ Sample Test:
1049
+
1050
+ ```ruby
1051
+ context 'when a gitaly node is experiencing high latency' do
1052
+ it 'can create a project' do
1053
+ Toxiproxy[:gitaly1].toxic(:latency, latency: 30000).apply do
1054
+ expect(create_a_project).to be true
1055
+ end
1056
+ end
1057
+ end
1058
+ ```
1059
+
1060
+ Example:
1061
+
1062
+ ```
1063
+ $ gitlab-qa Test::Instance::Chaos
1064
+ ```
1038
1065
  ----
1039
1066
 
1040
1067
  [Back to README.md](../README.md)
data/gitlab-qa.gemspec CHANGED
@@ -32,7 +32,8 @@ Gem::Specification.new do |spec|
32
32
  spec.add_runtime_dependency 'gitlab', '~> 4.18.0'
33
33
  spec.add_runtime_dependency 'http', '~> 5.0'
34
34
  spec.add_runtime_dependency 'nokogiri', '~> 1.10'
35
- spec.add_runtime_dependency 'rainbow', '~> 3.0.0'
35
+ spec.add_runtime_dependency 'rainbow', '>= 3', '< 4'
36
36
  spec.add_runtime_dependency 'table_print', '1.5.7'
37
- spec.add_runtime_dependency 'zeitwerk', '~> 2.4'
37
+ spec.add_runtime_dependency 'toxiproxy', '~> 2.0.2'
38
+ spec.add_runtime_dependency 'zeitwerk', '>= 2', '< 3'
38
39
  end
@@ -0,0 +1,79 @@
1
+ # frozen_string_literal: true
2
+ require 'toxiproxy'
3
+
4
+ module Gitlab
5
+ module QA
6
+ module Component
7
+ class Chaos < Base
8
+ DOCKER_IMAGE = 'ghcr.io/shopify/toxiproxy'
9
+ DOCKER_IMAGE_TAG = '2.5.0'
10
+
11
+ def initialize
12
+ super
13
+ @network = "test"
14
+ end
15
+
16
+ def name
17
+ @name ||= "chaos"
18
+ end
19
+
20
+ def start
21
+ prepare
22
+ docker.run(image: image, tag: tag) do |command|
23
+ command << '-d '
24
+ command << "--name #{name}"
25
+ command << "--network #{@network}"
26
+ command << "--publish 8474:8474"
27
+ end
28
+
29
+ Toxiproxy.host = "http://localhost:8474"
30
+
31
+ begin
32
+ attempts ||= 1
33
+ Toxiproxy.populate([
34
+ {
35
+ name: "postgres",
36
+ listen: "[::]:5432",
37
+ upstream: "postgres.test:5432",
38
+ "enabled": true
39
+ },
40
+ {
41
+ name: "praefect",
42
+ listen: "[::]:2305",
43
+ upstream: "praefect.test:2305",
44
+ "enabled": true
45
+ },
46
+ {
47
+ name: "gitaly1",
48
+ listen: "[::]:8076",
49
+ upstream: "gitaly1.test:8076",
50
+ "enabled": true
51
+ },
52
+ {
53
+ name: "gitaly2",
54
+ listen: "[::]:8077",
55
+ upstream: "gitaly2.test:8077",
56
+ "enabled": true
57
+ },
58
+ {
59
+ name: "gitaly3",
60
+ listen: "[::]:8078",
61
+ upstream: "gitaly3.test:8078",
62
+ "enabled": true
63
+ }
64
+ ])
65
+ rescue StandardError => e
66
+ Runtime::Logger.warn e.message
67
+
68
+ # This should resolve within seconds, but give some leeway for the toxiproxy container to start
69
+ if (attempts += 1) < 10
70
+ Runtime::Logger.info "Waiting #{attempts} seconds before retrying setting toxiproxy config"
71
+ sleep attempts
72
+ retry
73
+ end
74
+ end
75
+ end
76
+ end
77
+ end
78
+ end
79
+ end
@@ -0,0 +1,39 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Gitlab
4
+ module QA
5
+ module Scenario
6
+ module Test
7
+ module Integration
8
+ class Chaos < Praefect
9
+ def initialize
10
+ super
11
+
12
+ @praefect_addr = "chaos.test"
13
+ @database_addr = "chaos.test"
14
+ @primary_node_addr = "chaos.test"
15
+ @primary_node_port = 8076
16
+ @secondary_node_addr = "chaos.test"
17
+ @secondary_node_port = 8077
18
+ @tertiary_node_addr = "chaos.test"
19
+ @tertiary_node_port = 8078
20
+ end
21
+
22
+ def perform(release, *rspec_args)
23
+ @chaos_node = Component::Chaos.new.tap(&:start)
24
+
25
+ run_gitaly_cluster(release, rspec_args)
26
+ ensure
27
+ @chaos_node&.teardown
28
+ @praefect_node&.teardown
29
+ @sql_node&.teardown
30
+ @gitaly_primary_node&.teardown
31
+ @gitaly_secondary_node&.teardown
32
+ @gitaly_tertiary_node&.teardown
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
@@ -8,13 +8,29 @@ module Gitlab
8
8
  class GitalyCluster < Scenario::Template
9
9
  attr_reader :gitlab_name, :spec_suite
10
10
 
11
- def initialize
11
+ def initialize # rubocop:disable Metrics/AbcSize
12
12
  @gitlab_name = 'gitlab-gitaly-cluster'
13
+
13
14
  @primary_node_name = 'gitaly1'
15
+ @primary_node_addr = "#{@primary_node_name}.#{@network}"
16
+ @primary_node_port = 8075
17
+
14
18
  @secondary_node_name = 'gitaly2'
19
+ @secondary_node_addr = "#{@secondary_node_name}.#{@network}"
20
+ @secondary_node_port = 8075
21
+
15
22
  @tertiary_node_name = 'gitaly3'
23
+ @tertiary_node_addr = "#{@tertiary_node_name}.#{@network}"
24
+ @tertiary_node_port = 8075
25
+
16
26
  @praefect_node_name = 'praefect'
27
+ @praefect_port = 2305
28
+ @praefect_addr = "#{@praefect_node_name}.#{@network}"
29
+
17
30
  @database = 'postgres'
31
+ @database_port = 5432
32
+ @database_addr = "#{@database}.#{@network}"
33
+
18
34
  @spec_suite = 'Test::Instance::All'
19
35
  @network = 'test'
20
36
  @env = {}
@@ -22,6 +38,16 @@ module Gitlab
22
38
  end
23
39
 
24
40
  def perform(release, *rspec_args)
41
+ run_gitaly_cluster(release, rspec_args)
42
+ ensure
43
+ @praefect_node&.teardown
44
+ @sql_node&.teardown
45
+ @gitaly_primary_node&.teardown
46
+ @gitaly_secondary_node&.teardown
47
+ @gitaly_tertiary_node&.teardown
48
+ end
49
+
50
+ def run_gitaly_cluster(release, rspec_args) # rubocop:disable Metrics/AbcSize
25
51
  # The postgres container starts in seconds so not essential to parallelize it
26
52
  # This also ensure that the docker network is created here, avoiding any potential race conditions later
27
53
  # if the gitaly-cluster and GitLab containers attempt to create a network in parallel
@@ -57,21 +83,15 @@ module Gitlab
57
83
  end
58
84
  end
59
85
  end
60
- ensure
61
- @praefect_node&.teardown
62
- @sql_node&.teardown
63
- @gitaly_primary_node&.teardown
64
- @gitaly_secondary_node&.teardown
65
- @gitaly_tertiary_node&.teardown
66
86
  end
67
87
 
68
88
  private
69
89
 
70
90
  def start_gitaly_cluster(release)
71
91
  Runtime::Logger.info("Starting Gitaly Cluster")
72
- @gitaly_primary_node = gitaly(@primary_node_name, release)
73
- @gitaly_secondary_node = gitaly(@secondary_node_name, release)
74
- @gitaly_tertiary_node = gitaly(@tertiary_node_name, release)
92
+ @gitaly_primary_node = gitaly(@primary_node_name, @primary_node_port, release)
93
+ @gitaly_secondary_node = gitaly(@secondary_node_name, @secondary_node_port, release)
94
+ @gitaly_tertiary_node = gitaly(@tertiary_node_name, @tertiary_node_port, release)
75
95
 
76
96
  @praefect_node = praefect(@praefect_node_name, release)
77
97
  Runtime::Logger.info("Gitaly Cluster Ready")
@@ -97,31 +117,31 @@ module Gitlab
97
117
  #{disable_other_services}
98
118
  gitaly['enable'] = false;
99
119
  praefect['enable'] = true;
100
- praefect['listen_addr'] = '0.0.0.0:2305';
120
+ praefect['listen_addr'] = '0.0.0.0:#{@praefect_port}';
101
121
  praefect['prometheus_listen_addr'] = '0.0.0.0:9652';
102
122
  praefect['auth_token'] = 'PRAEFECT_EXTERNAL_TOKEN';
103
123
  praefect['reconciliation_scheduling_interval'] = '10s';
104
- praefect['database_host'] = '#{@database}.#{@network}';
124
+ praefect['database_host'] = '#{@database_addr}';
105
125
  praefect['database_user'] = 'postgres';
106
- praefect['database_port'] = 5432;
126
+ praefect['database_port'] = #{@database_port};
107
127
  praefect['database_password'] = 'SQL_PASSWORD';
108
128
  praefect['database_dbname'] = 'praefect_production';
109
129
  praefect['database_sslmode'] = 'disable';
110
- praefect['database_direct_host'] = '#{@database}.#{@network}';
111
- praefect['database_direct_port'] = 5432;
130
+ praefect['database_direct_host'] = '#{@database_addr}';
131
+ praefect['database_direct_port'] = #{@database_port};
112
132
  praefect['virtual_storages'] = {
113
133
  'default' => {
114
134
  'nodes' => {
115
135
  '#{@primary_node_name}' => {
116
- 'address' => 'tcp://#{@primary_node_name}.#{@network}:8075',
136
+ 'address' => 'tcp://#{@primary_node_addr}:#{@primary_node_port}',
117
137
  'token' => 'PRAEFECT_INTERNAL_TOKEN'
118
138
  },
119
139
  '#{@secondary_node_name}' => {
120
- 'address' => 'tcp://#{@secondary_node_name}.#{@network}:8075',
140
+ 'address' => 'tcp://#{@secondary_node_addr}:#{@secondary_node_port}',
121
141
  'token' => 'PRAEFECT_INTERNAL_TOKEN'
122
142
  },
123
143
  '#{@tertiary_node_name}' => {
124
- 'address' => 'tcp://#{@tertiary_node_name}.#{@network}:8075',
144
+ 'address' => 'tcp://#{@tertiary_node_addr}:#{@tertiary_node_port}',
125
145
  'token' => 'PRAEFECT_INTERNAL_TOKEN'
126
146
  }
127
147
  }
@@ -130,12 +150,12 @@ module Gitlab
130
150
  OMNIBUS
131
151
  end
132
152
 
133
- def gitaly_omnibus_configuration
153
+ def gitaly_omnibus_configuration(listen_port)
134
154
  <<~OMNIBUS
135
155
  #{disable_other_services.sub(/(prometheus\['enable'\]) = false/, '\1 = true')}
136
156
  prometheus_monitoring['enable'] = false;
137
157
  gitaly['enable'] = true;
138
- gitaly['listen_addr'] = '0.0.0.0:8075';
158
+ gitaly['listen_addr'] = '0.0.0.0:#{listen_port}';
139
159
  gitaly['prometheus_listen_addr'] = '0.0.0.0:9236';
140
160
  gitaly['auth_token'] = 'PRAEFECT_INTERNAL_TOKEN';
141
161
  gitlab_shell['secret_token'] = 'GITLAB_SHELL_SECRET_TOKEN';
@@ -160,7 +180,7 @@ module Gitlab
160
180
 
161
181
  git_data_dirs({
162
182
  'default' => {
163
- 'gitaly_address' => 'tcp://#{@praefect_node_name}.#{@network}:2305',
183
+ 'gitaly_address' => 'tcp://#{@praefect_addr}:#{@praefect_port}',
164
184
  'gitaly_token' => 'PRAEFECT_EXTERNAL_TOKEN'
165
185
  }
166
186
  });
@@ -171,7 +191,7 @@ module Gitlab
171
191
  'job_name' => 'praefect',
172
192
  'static_configs' => [
173
193
  'targets' => [
174
- '#{@praefect_node_name}.#{@network}:9652'
194
+ '#{@praefect_addr}:#{@praefect_port}'
175
195
  ]
176
196
  ]
177
197
  },
@@ -215,14 +235,14 @@ module Gitlab
215
235
  end
216
236
  end
217
237
 
218
- def gitaly(name, release)
238
+ def gitaly(name, port, release)
219
239
  Component::Gitlab.new.tap do |gitaly|
220
240
  gitaly.release = QA::Release.new(release)
221
241
  gitaly.name = name
222
242
  gitaly.network = @network
223
243
  gitaly.skip_availability_check = true
224
244
  gitaly.seed_admin_token = false
225
- gitaly.omnibus_configuration << gitaly_omnibus_configuration
245
+ gitaly.omnibus_configuration << gitaly_omnibus_configuration(port)
226
246
  gitaly.instance(skip_teardown: true)
227
247
  end
228
248
  end
@@ -21,7 +21,7 @@ module Gitlab
21
21
 
22
22
  git_data_dirs({
23
23
  'default' => {
24
- 'gitaly_address' => 'tcp://#{@praefect_node_name}.#{@network}:2305',
24
+ 'gitaly_address' => 'tcp://#{@praefect_addr}:#{@praefect_port}',
25
25
  'gitaly_token' => 'PRAEFECT_EXTERNAL_TOKEN'
26
26
  },
27
27
  'gitaly' => {
@@ -45,7 +45,7 @@ module Gitlab
45
45
  'job_name' => 'praefect',
46
46
  'static_configs' => [
47
47
  'targets' => [
48
- '#{@praefect_node_name}.#{@network}:9652'
48
+ '#{@praefect_addr}:9652'
49
49
  ]
50
50
  ]
51
51
  },
@@ -53,9 +53,9 @@ module Gitlab
53
53
  'job_name' => 'praefect-gitaly',
54
54
  'static_configs' => [
55
55
  'targets' => [
56
- '#{@primary_node_name}.#{@network}:9236',
57
- '#{@secondary_node_name}.#{@network}:9236',
58
- '#{@tertiary_node_name}.#{@network}:9236'
56
+ '#{@primary_node_addr}:9236',
57
+ '#{@secondary_node_addr}:9236',
58
+ '#{@tertiary_node_addr}:9236'
59
59
  ]
60
60
  ]
61
61
  }
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Gitlab
4
4
  module QA
5
- VERSION = '8.7.0'
5
+ VERSION = '8.8.0'
6
6
  end
7
7
  end
@@ -47,6 +47,7 @@ class GenerateQAJobs
47
47
  jobs.merge!(load_yml_contents('large_setup', should_automatically_run?('test_instance_all_can_use_large_setup')))
48
48
  jobs.merge!(load_yml_contents('cloud_activation', should_automatically_run?('test_instance_all_cloud_activation')))
49
49
  jobs.merge!(load_yml_contents('registry_with_cdn', should_automatically_run?('test_integration_registrywithcdn')))
50
+ jobs.merge!(load_yml_contents('chaos', should_automatically_run?('test_integration_chaos')))
50
51
  jobs.merge!(load_yml_contents('staging'))
51
52
  jobs.merge!(load_yml_contents('metrics', should_automatically_run?('test_instance_all_metrics')))
52
53
 
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.7.0
4
+ version: 8.8.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - GitLab Quality
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-10-12 00:00:00.000000000 Z
11
+ date: 2022-10-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: climate_control
@@ -182,16 +182,22 @@ dependencies:
182
182
  name: rainbow
183
183
  requirement: !ruby/object:Gem::Requirement
184
184
  requirements:
185
- - - "~>"
185
+ - - ">="
186
+ - !ruby/object:Gem::Version
187
+ version: '3'
188
+ - - "<"
186
189
  - !ruby/object:Gem::Version
187
- version: 3.0.0
190
+ version: '4'
188
191
  type: :runtime
189
192
  prerelease: false
190
193
  version_requirements: !ruby/object:Gem::Requirement
191
194
  requirements:
192
- - - "~>"
195
+ - - ">="
193
196
  - !ruby/object:Gem::Version
194
- version: 3.0.0
197
+ version: '3'
198
+ - - "<"
199
+ - !ruby/object:Gem::Version
200
+ version: '4'
195
201
  - !ruby/object:Gem::Dependency
196
202
  name: table_print
197
203
  requirement: !ruby/object:Gem::Requirement
@@ -207,19 +213,39 @@ dependencies:
207
213
  - !ruby/object:Gem::Version
208
214
  version: 1.5.7
209
215
  - !ruby/object:Gem::Dependency
210
- name: zeitwerk
216
+ name: toxiproxy
211
217
  requirement: !ruby/object:Gem::Requirement
212
218
  requirements:
213
219
  - - "~>"
214
220
  - !ruby/object:Gem::Version
215
- version: '2.4'
221
+ version: 2.0.2
216
222
  type: :runtime
217
223
  prerelease: false
218
224
  version_requirements: !ruby/object:Gem::Requirement
219
225
  requirements:
220
226
  - - "~>"
221
227
  - !ruby/object:Gem::Version
222
- version: '2.4'
228
+ version: 2.0.2
229
+ - !ruby/object:Gem::Dependency
230
+ name: zeitwerk
231
+ requirement: !ruby/object:Gem::Requirement
232
+ requirements:
233
+ - - ">="
234
+ - !ruby/object:Gem::Version
235
+ version: '2'
236
+ - - "<"
237
+ - !ruby/object:Gem::Version
238
+ version: '3'
239
+ type: :runtime
240
+ prerelease: false
241
+ version_requirements: !ruby/object:Gem::Requirement
242
+ requirements:
243
+ - - ">="
244
+ - !ruby/object:Gem::Version
245
+ version: '2'
246
+ - - "<"
247
+ - !ruby/object:Gem::Version
248
+ version: '3'
223
249
  description:
224
250
  email:
225
251
  - gitlab-qa@gmail.com
@@ -233,6 +259,7 @@ files:
233
259
  - ".gitignore"
234
260
  - ".gitlab-ci.yml"
235
261
  - ".gitlab/ci/jobs/base.gitlab-ci.yml"
262
+ - ".gitlab/ci/jobs/chaos.gitlab-ci.yml"
236
263
  - ".gitlab/ci/jobs/cloud_activation.gitlab-ci.yml"
237
264
  - ".gitlab/ci/jobs/custom_parallel.gitlab-ci.yml"
238
265
  - ".gitlab/ci/jobs/decomposition_multiple_db.gitlab-ci.yml"
@@ -311,6 +338,7 @@ files:
311
338
  - gitlab-qa.gemspec
312
339
  - lib/gitlab/qa.rb
313
340
  - lib/gitlab/qa/component/base.rb
341
+ - lib/gitlab/qa/component/chaos.rb
314
342
  - lib/gitlab/qa/component/elasticsearch.rb
315
343
  - lib/gitlab/qa/component/gitlab.rb
316
344
  - lib/gitlab/qa/component/jira.rb
@@ -383,6 +411,7 @@ files:
383
411
  - lib/gitlab/qa/scenario/test/instance/staging_geo.rb
384
412
  - lib/gitlab/qa/scenario/test/instance/staging_ref.rb
385
413
  - lib/gitlab/qa/scenario/test/instance/staging_ref_geo.rb
414
+ - lib/gitlab/qa/scenario/test/integration/chaos.rb
386
415
  - lib/gitlab/qa/scenario/test/integration/client_ssl.rb
387
416
  - lib/gitlab/qa/scenario/test/integration/elasticsearch.rb
388
417
  - lib/gitlab/qa/scenario/test/integration/geo.rb