gitlab-qa 7.24.2 → 7.24.3
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/lib/gitlab/qa/component/base.rb +2 -0
- data/lib/gitlab/qa/component/gitlab.rb +26 -8
- data/lib/gitlab/qa/component/ldap.rb +38 -12
- data/lib/gitlab/qa/report/report_as_issue.rb +8 -6
- data/lib/gitlab/qa/report/results_in_issues.rb +0 -1
- data/lib/gitlab/qa/report/results_in_testcases.rb +22 -1
- data/lib/gitlab/qa/report/test_result.rb +8 -0
- data/lib/gitlab/qa/version.rb +1 -1
- metadata +2 -2
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: e2b176f3463abe8bce6879fad13baf9053f8d51175ce9b4c2994b2ad72a308b5
         | 
| 4 | 
            +
              data.tar.gz: a93d60ad2678d98b2e94e89e2c97cc24c1a81b42e5e838f5eaa20285a92a92a1
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: a6739f73c98c6fc9e044915632a747d990d1f1bb354eaaf77bb0de4d6c6c5abbaffda10a8f60927757a16ca48affc3dca2b8aa8a6bf4f4e6b6977eda9c3b4c20
         | 
| 7 | 
            +
              data.tar.gz: 17379496d96c009b6c96ea8953a38bacb253eb6ac80006889557bb068a6270991100926601936dcddd92cf02dca6ea7c3159990a6f3264e601803d5460394259
         | 
| @@ -18,9 +18,7 @@ module Gitlab | |
| 18 18 |  | 
| 19 19 | 
             
                    def_delegators :release, :tag, :image, :edition
         | 
| 20 20 |  | 
| 21 | 
            -
                     | 
| 22 | 
            -
                    GITLAB_CERTIFICATES_PATH = File.expand_path('../../../../tls_certificates/gitlab', __dir__)
         | 
| 23 | 
            -
                    GITALY_CERTIFICATES_PATH = File.expand_path('../../../../tls_certificates/gitaly', __dir__)
         | 
| 21 | 
            +
                    CERTIFICATES_PATH = File.expand_path('../../../../tls_certificates', __dir__)
         | 
| 24 22 |  | 
| 25 23 | 
             
                    SSL_PATH = '/etc/gitlab/ssl'
         | 
| 26 24 | 
             
                    TRUSTED_PATH = '/etc/gitlab/trusted-certs'
         | 
| @@ -31,10 +29,15 @@ module Gitlab | |
| 31 29 | 
             
                      @skip_availability_check = false
         | 
| 32 30 | 
             
                      @omnibus_gitlab_rails_env = {}
         | 
| 33 31 |  | 
| 34 | 
            -
                      @ | 
| 35 | 
            -
                      @volumes[AUTHORITY_CERTIFICATES_PATH] = TRUSTED_PATH
         | 
| 32 | 
            +
                      @omnibus_configuration = Runtime::OmnibusConfiguration.new(Runtime::Scenario.omnibus_configuration)
         | 
| 36 33 |  | 
| 37 | 
            -
                      @ | 
| 34 | 
            +
                      @working_dir_tmp_cert_path = Dir.mktmpdir('certs', FileUtils.mkdir_p("#{Dir.pwd}/tmp"))
         | 
| 35 | 
            +
                      @authority_cert_path = "#{@working_dir_tmp_cert_path}/authority"
         | 
| 36 | 
            +
                      @gitlab_cert_path = "#{@working_dir_tmp_cert_path}/gitlab"
         | 
| 37 | 
            +
                      @gitaly_cert_path = "#{@working_dir_tmp_cert_path}/gitaly"
         | 
| 38 | 
            +
             | 
| 39 | 
            +
                      @volumes[@gitlab_cert_path] = SSL_PATH
         | 
| 40 | 
            +
                      @volumes[@authority_cert_path] = TRUSTED_PATH
         | 
| 38 41 |  | 
| 39 42 | 
             
                      self.release = 'CE'
         | 
| 40 43 | 
             
                    end
         | 
| @@ -77,8 +80,8 @@ module Gitlab | |
| 77 80 | 
             
                    end
         | 
| 78 81 |  | 
| 79 82 | 
             
                    def gitaly_tls
         | 
| 80 | 
            -
                      @volumes.delete( | 
| 81 | 
            -
                      @volumes[ | 
| 83 | 
            +
                      @volumes.delete(@gitlab_cert_path)
         | 
| 84 | 
            +
                      @volumes[@gitaly_cert_path] = SSL_PATH
         | 
| 82 85 | 
             
                    end
         | 
| 83 86 |  | 
| 84 87 | 
             
                    def relative_path
         | 
| @@ -91,6 +94,13 @@ module Gitlab | |
| 91 94 |  | 
| 92 95 | 
             
                    def prepare
         | 
| 93 96 | 
             
                      prepare_gitlab_omnibus_config
         | 
| 97 | 
            +
                      copy_certificates
         | 
| 98 | 
            +
             | 
| 99 | 
            +
                      super
         | 
| 100 | 
            +
                    end
         | 
| 101 | 
            +
             | 
| 102 | 
            +
                    def teardown!
         | 
| 103 | 
            +
                      FileUtils.rm_rf(@working_dir_tmp_cert_path)
         | 
| 94 104 |  | 
| 95 105 | 
             
                      super
         | 
| 96 106 | 
             
                    end
         | 
| @@ -168,6 +178,14 @@ module Gitlab | |
| 168 178 |  | 
| 169 179 | 
             
                    private
         | 
| 170 180 |  | 
| 181 | 
            +
                    # Copy certs to a temporary directory in current working directory.
         | 
| 182 | 
            +
                    # This is needed for docker-in-docker ci environments where mount points outside of build dir are not accessible
         | 
| 183 | 
            +
                    #
         | 
| 184 | 
            +
                    # @return [void]
         | 
| 185 | 
            +
                    def copy_certificates
         | 
| 186 | 
            +
                      FileUtils.cp_r("#{CERTIFICATES_PATH}/.", @working_dir_tmp_cert_path)
         | 
| 187 | 
            +
                    end
         | 
| 188 | 
            +
             | 
| 171 189 | 
             
                    def ensure_configured!
         | 
| 172 190 | 
             
                      raise 'Please configure an instance first!' unless [name, release, network].all?
         | 
| 173 191 | 
             
                    end
         | 
| @@ -1,3 +1,5 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 1 3 | 
             
            require 'securerandom'
         | 
| 2 4 |  | 
| 3 5 | 
             
            # This component sets up the docker-openldap (https://github.com/osixia/docker-openldap)
         | 
| @@ -16,18 +18,12 @@ module Gitlab | |
| 16 18 | 
             
              module QA
         | 
| 17 19 | 
             
                module Component
         | 
| 18 20 | 
             
                  class LDAP < Base
         | 
| 19 | 
            -
                    DOCKER_IMAGE = 'osixia/openldap' | 
| 20 | 
            -
                    DOCKER_IMAGE_TAG = 'latest' | 
| 21 | 
            -
                    LDAP_USER = 'tanuki' | 
| 22 | 
            -
                    LDAP_PASSWORD = 'password' | 
| 23 | 
            -
                    BOOTSTRAP_LDIF = '/container/service/slapd/assets/config/bootstrap/ldif/custom' | 
| 24 | 
            -
                    FIXTURE_PATH = File.expand_path('../../../../fixtures/ldap' | 
| 25 | 
            -
             | 
| 26 | 
            -
                    def initialize
         | 
| 27 | 
            -
                      super
         | 
| 28 | 
            -
             | 
| 29 | 
            -
                      @volumes[FIXTURE_PATH] = BOOTSTRAP_LDIF
         | 
| 30 | 
            -
                    end
         | 
| 21 | 
            +
                    DOCKER_IMAGE = 'osixia/openldap'
         | 
| 22 | 
            +
                    DOCKER_IMAGE_TAG = 'latest'
         | 
| 23 | 
            +
                    LDAP_USER = 'tanuki'
         | 
| 24 | 
            +
                    LDAP_PASSWORD = 'password'
         | 
| 25 | 
            +
                    BOOTSTRAP_LDIF = '/container/service/slapd/assets/config/bootstrap/ldif/custom'
         | 
| 26 | 
            +
                    FIXTURE_PATH = File.expand_path('../../../../fixtures/ldap', __dir__)
         | 
| 31 27 |  | 
| 32 28 | 
             
                    # LDAP_TLS is true by default
         | 
| 33 29 | 
             
                    def tls=(status)
         | 
| @@ -59,6 +55,19 @@ module Gitlab | |
| 59 55 | 
             
                      super
         | 
| 60 56 | 
             
                    end
         | 
| 61 57 |  | 
| 58 | 
            +
                    def prepare
         | 
| 59 | 
            +
                      copy_fixtures
         | 
| 60 | 
            +
                      @volumes["#{working_dir_tmp_fixture_path}/ldap"] = BOOTSTRAP_LDIF
         | 
| 61 | 
            +
             | 
| 62 | 
            +
                      super
         | 
| 63 | 
            +
                    end
         | 
| 64 | 
            +
             | 
| 65 | 
            +
                    def teardown!
         | 
| 66 | 
            +
                      FileUtils.rm_rf(working_dir_tmp_fixture_path)
         | 
| 67 | 
            +
             | 
| 68 | 
            +
                      super
         | 
| 69 | 
            +
                    end
         | 
| 70 | 
            +
             | 
| 62 71 | 
             
                    # rubocop:disable Metrics/AbcSize
         | 
| 63 72 | 
             
                    def start
         | 
| 64 73 | 
             
                      # copy-service needed for bootstraping LDAP user:
         | 
| @@ -88,6 +97,23 @@ module Gitlab | |
| 88 97 | 
             
                      ::Gitlab::QA::Runtime::Env.ldap_username = username
         | 
| 89 98 | 
             
                      ::Gitlab::QA::Runtime::Env.ldap_password = password
         | 
| 90 99 | 
             
                    end
         | 
| 100 | 
            +
             | 
| 101 | 
            +
                    private
         | 
| 102 | 
            +
             | 
| 103 | 
            +
                    # Temporary fixture dir in working directory
         | 
| 104 | 
            +
                    #
         | 
| 105 | 
            +
                    # @return [String]
         | 
| 106 | 
            +
                    def working_dir_tmp_fixture_path
         | 
| 107 | 
            +
                      @local_fixture_path ||= Dir.mktmpdir('ldap', FileUtils.mkdir_p("#{Dir.pwd}/tmp"))
         | 
| 108 | 
            +
                    end
         | 
| 109 | 
            +
             | 
| 110 | 
            +
                    # Copy fixtures to current working directory
         | 
| 111 | 
            +
                    # This is needed for docker-in-docker ci environments where mount points outside of build dir are not accessible
         | 
| 112 | 
            +
                    #
         | 
| 113 | 
            +
                    # @return [void]
         | 
| 114 | 
            +
                    def copy_fixtures
         | 
| 115 | 
            +
                      FileUtils.cp_r(FIXTURE_PATH, working_dir_tmp_fixture_path)
         | 
| 116 | 
            +
                    end
         | 
| 91 117 | 
             
                  end
         | 
| 92 118 | 
             
                end
         | 
| 93 119 | 
             
              end
         | 
| @@ -106,8 +106,14 @@ module Gitlab | |
| 106 106 | 
             
                    def up_to_date_labels(test:, issue: nil, new_labels: Set.new)
         | 
| 107 107 | 
             
                      labels = issue_labels(issue)
         | 
| 108 108 | 
             
                      labels |= new_labels
         | 
| 109 | 
            -
                      ee_test?(test) ? labels <<  | 
| 110 | 
            -
             | 
| 109 | 
            +
                      ee_test?(test) ? labels << 'Enterprise Edition' : labels.delete('Enterprise Edition')
         | 
| 110 | 
            +
             | 
| 111 | 
            +
                      if test.quarantine?
         | 
| 112 | 
            +
                        labels << 'quarantine'
         | 
| 113 | 
            +
                        labels << "quarantine::#{test.quarantine_type}"
         | 
| 114 | 
            +
                      else
         | 
| 115 | 
            +
                        labels.delete_if { |label| label.include?('quarantine') }
         | 
| 116 | 
            +
                      end
         | 
| 111 117 |  | 
| 112 118 | 
             
                      labels
         | 
| 113 119 | 
             
                    end
         | 
| @@ -133,10 +139,6 @@ module Gitlab | |
| 133 139 | 
             
                      test.file =~ %r{features/ee/(api|browser_ui)}
         | 
| 134 140 | 
             
                    end
         | 
| 135 141 |  | 
| 136 | 
            -
                    def quarantine_job?
         | 
| 137 | 
            -
                      Runtime::Env.ci_job_name&.include?('quarantine')
         | 
| 138 | 
            -
                    end
         | 
| 139 | 
            -
             | 
| 140 142 | 
             
                    def partial_file_path(path)
         | 
| 141 143 | 
             
                      path.match(/((api|browser_ui).*)/i)[1]
         | 
| 142 144 | 
             
                    end
         | 
| @@ -100,7 +100,6 @@ module Gitlab | |
| 100 100 |  | 
| 101 101 | 
             
                    def failure_summary
         | 
| 102 102 | 
             
                      summary = [":x: ~\"#{pipeline}::failed\""]
         | 
| 103 | 
            -
                      summary << "~\"quarantine\"" if quarantine_job?
         | 
| 104 103 | 
             
                      summary << "in job `#{Runtime::Env.ci_job_name}` in #{Runtime::Env.ci_job_url}"
         | 
| 105 104 | 
             
                      summary.join(' ')
         | 
| 106 105 | 
             
                    end
         | 
| @@ -30,6 +30,7 @@ module Gitlab | |
| 30 30 |  | 
| 31 31 | 
             
                    def update_testcase(testcase, test)
         | 
| 32 32 | 
             
                      puts "Test case labels updated." if update_labels(testcase, test)
         | 
| 33 | 
            +
                      puts "Test case quarantine section updated." if update_quarantine_link(testcase, test)
         | 
| 33 34 | 
             
                    end
         | 
| 34 35 |  | 
| 35 36 | 
             
                    private
         | 
| @@ -61,7 +62,9 @@ module Gitlab | |
| 61 62 | 
             
                    end
         | 
| 62 63 |  | 
| 63 64 | 
             
                    def new_issue_description(test)
         | 
| 64 | 
            -
                      " | 
| 65 | 
            +
                      quarantine_section = test.quarantine? && test.quarantine_issue ? "\n\n### Quarantine issue\n\n#{test.quarantine_issue}" : ''
         | 
| 66 | 
            +
             | 
| 67 | 
            +
                      "#{super}#{quarantine_section}\n\n#{execution_graph_section(test)}"
         | 
| 65 68 | 
             
                    end
         | 
| 66 69 |  | 
| 67 70 | 
             
                    def execution_graph_section(test)
         | 
| @@ -84,6 +87,24 @@ module Gitlab | |
| 84 87 | 
             
                    def issue_title_needs_updating?(testcase, test)
         | 
| 85 88 | 
             
                      super || !testcase.description.include?(execution_graph_section(test)) && !%w[canary production preprod release].include?(pipeline)
         | 
| 86 89 | 
             
                    end
         | 
| 90 | 
            +
             | 
| 91 | 
            +
                    def quarantine_link_needs_updating?(testcase, test)
         | 
| 92 | 
            +
                      if test.quarantine? && test.quarantine_issue
         | 
| 93 | 
            +
                        return false if testcase.description.include?(test.quarantine_issue)
         | 
| 94 | 
            +
                      else
         | 
| 95 | 
            +
                        return false unless testcase.description.include?('Quarantine issue')
         | 
| 96 | 
            +
                      end
         | 
| 97 | 
            +
             | 
| 98 | 
            +
                      true
         | 
| 99 | 
            +
                    end
         | 
| 100 | 
            +
             | 
| 101 | 
            +
                    def update_quarantine_link(testcase, test)
         | 
| 102 | 
            +
                      return unless quarantine_link_needs_updating?(testcase, test)
         | 
| 103 | 
            +
             | 
| 104 | 
            +
                      new_description = updated_description(testcase, test)
         | 
| 105 | 
            +
             | 
| 106 | 
            +
                      gitlab.edit_issue(iid: testcase.iid, options: { description: new_description })
         | 
| 107 | 
            +
                    end
         | 
| 87 108 | 
             
                  end
         | 
| 88 109 | 
             
                end
         | 
| 89 110 | 
             
              end
         | 
| @@ -87,6 +87,14 @@ module Gitlab | |
| 87 87 | 
             
                        report['quarantine'].present?
         | 
| 88 88 | 
             
                      end
         | 
| 89 89 |  | 
| 90 | 
            +
                      def quarantine_type
         | 
| 91 | 
            +
                        report['quarantine']['type'] if quarantine?
         | 
| 92 | 
            +
                      end
         | 
| 93 | 
            +
             | 
| 94 | 
            +
                      def quarantine_issue
         | 
| 95 | 
            +
                        report['quarantine']['issue'] if quarantine?
         | 
| 96 | 
            +
                      end
         | 
| 97 | 
            +
             | 
| 90 98 | 
             
                      private
         | 
| 91 99 |  | 
| 92 100 | 
             
                      # rubocop:disable Metrics/AbcSize
         | 
    
        data/lib/gitlab/qa/version.rb
    CHANGED
    
    
    
        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: 7.24. | 
| 4 | 
            +
              version: 7.24.3
         | 
| 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-03- | 
| 11 | 
            +
            date: 2022-03-11 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: climate_control
         |