gitlab-qa 8.6.0 → 8.8.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 +4 -4
- data/.gitlab/ci/jobs/chaos.gitlab-ci.yml +22 -0
- data/.gitlab/ci/jobs/sanity_framework.gitlab-ci.yml +2 -2
- data/Gemfile.lock +5 -3
- data/bin/expect_exit_code_and_text +1 -1
- data/docs/what_tests_can_be_run.md +27 -0
- data/gitlab-qa.gemspec +3 -2
- data/lib/gitlab/qa/component/chaos.rb +79 -0
- data/lib/gitlab/qa/component/specs.rb +1 -1
- data/lib/gitlab/qa/scenario/test/integration/chaos.rb +39 -0
- data/lib/gitlab/qa/scenario/test/integration/gitaly_cluster.rb +44 -24
- data/lib/gitlab/qa/scenario/test/integration/praefect.rb +5 -5
- data/lib/gitlab/qa/scenario/test/omnibus/update_from_previous.rb +2 -0
- data/lib/gitlab/qa/version.rb +1 -1
- data/scripts/generate-qa-jobs.rb +1 -0
- metadata +38 -9
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: e89c4046779c498fad14fac05a4cc8ab68deb9d4ccb62e8eabaaace6af8be17d
         | 
| 4 | 
            +
              data.tar.gz: a0c72ba4f7278b82f59678133578e11f23cb7e39449a82c21ec7beb967a524cc
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 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 " | 
| 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 " | 
| 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. | 
| 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 ( | 
| 9 | 
            +
                  rainbow (>= 3, < 4)
         | 
| 10 10 | 
             
                  table_print (= 1.5.7)
         | 
| 11 | 
            -
                   | 
| 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', ' | 
| 35 | 
            +
              spec.add_runtime_dependency 'rainbow', '>= 3', '< 4'
         | 
| 36 36 | 
             
              spec.add_runtime_dependency 'table_print', '1.5.7'
         | 
| 37 | 
            -
              spec.add_runtime_dependency ' | 
| 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 | 
| 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'] = '#{@ | 
| 124 | 
            +
                            praefect['database_host'] = '#{@database_addr}';
         | 
| 105 125 | 
             
                            praefect['database_user'] = 'postgres';
         | 
| 106 | 
            -
                            praefect['database_port'] =  | 
| 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'] = '#{@ | 
| 111 | 
            -
                            praefect['database_direct_port'] =  | 
| 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://#{@ | 
| 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://#{@ | 
| 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://#{@ | 
| 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 | 
| 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://#{@ | 
| 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 | 
            -
                                    '#{@ | 
| 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://#{@ | 
| 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 | 
            -
                                    '#{@ | 
| 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 | 
            -
                                    '#{@ | 
| 57 | 
            -
                                    '#{@ | 
| 58 | 
            -
                                    '#{@ | 
| 56 | 
            +
                                    '#{@primary_node_addr}:9236',
         | 
| 57 | 
            +
                                    '#{@secondary_node_addr}:9236',
         | 
| 58 | 
            +
                                    '#{@tertiary_node_addr}:9236'
         | 
| 59 59 | 
             
                                  ]
         | 
| 60 60 | 
             
                                ]
         | 
| 61 61 | 
             
                              }
         | 
| @@ -93,6 +93,8 @@ module Gitlab | |
| 93 93 | 
             
                            specs.hostname = "qa-e2e-specs.#{gitlab.network}"
         | 
| 94 94 | 
             
                            specs.network = gitlab.network
         | 
| 95 95 | 
             
                            specs.args = [gitlab.address, *rspec_args]
         | 
| 96 | 
            +
                            # do not generate reports for non release runs
         | 
| 97 | 
            +
                            specs.env = { 'QA_GENERATE_ALLURE_REPORT' => false } unless release == current_release
         | 
| 96 98 | 
             
                          end
         | 
| 97 99 | 
             
                        rescue Support::ShellCommand::StatusError => e
         | 
| 98 100 | 
             
                          raise e if release == current_release # only fail on current release
         | 
    
        data/lib/gitlab/qa/version.rb
    CHANGED
    
    
    
        data/scripts/generate-qa-jobs.rb
    CHANGED
    
    | @@ -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. | 
| 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- | 
| 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:  | 
| 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 | 
| 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:  | 
| 216 | 
            +
              name: toxiproxy
         | 
| 211 217 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 212 218 | 
             
                requirements:
         | 
| 213 219 | 
             
                - - "~>"
         | 
| 214 220 | 
             
                  - !ruby/object:Gem::Version
         | 
| 215 | 
            -
                    version:  | 
| 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:  | 
| 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
         |