mesa_test 1.0.1 → 1.1.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/bin/mesa_test +2 -1
 - data/lib/mesa_test.rb +220 -27
 - metadata +3 -3
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA256:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: 2c6b3c8632cb3efbbabbcbd9534f5519a317a0f80d991227dde9c7acc1257946
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: 81ac0670ba6f3e7799bd3f07ea571f9cee317a8cb2cc230fe8d7b2fa96837622
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: f23b4cb696c153072d2890d4c6ec1c412ed6e9ce723568367ae731ca8b4189ada86dfcaca27d04899f14ec175971beafe2e15c91488ac777181200de8bf54f0a
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: 5d4c7559f31733ad12c88bec794663ac873b36fa2166129ceac9d17cb29ac8db019110f853360b0b60a6067a9ca469b3c26e35e1e44581b16be514df8297a544
         
     | 
    
        data/bin/mesa_test
    CHANGED
    
    | 
         @@ -138,7 +138,8 @@ class MesaTest < Thor 
     | 
|
| 
       138 
138 
     | 
    
         
             
                    m.check_installation
         
     | 
| 
       139 
139 
     | 
    
         
             
                  rescue MesaDirError
         
     | 
| 
       140 
140 
     | 
    
         
             
                    shell.say %q{This MESA installation doesn't seem to be compiled } \
         
     | 
| 
       141 
     | 
    
         
            -
                      'properly.  
     | 
| 
      
 141 
     | 
    
         
            +
                      'properly. Attempting to submit a compilation failure to '\
         
     | 
| 
      
 142 
     | 
    
         
            +
                      'MESATestHub.', :red
         
     | 
| 
       142 
143 
     | 
    
         
             
                    empty = true
         
     | 
| 
       143 
144 
     | 
    
         
             
                  ensure
         
     | 
| 
       144 
145 
     | 
    
         
             
                    # submit all tests
         
     | 
    
        data/lib/mesa_test.rb
    CHANGED
    
    | 
         @@ -7,6 +7,7 @@ require 'net/http' 
     | 
|
| 
       7 
7 
     | 
    
         
             
            require 'net/https'
         
     | 
| 
       8 
8 
     | 
    
         
             
            require 'thor'
         
     | 
| 
       9 
9 
     | 
    
         
             
            require 'json'
         
     | 
| 
      
 10 
     | 
    
         
            +
            require 'base64'
         
     | 
| 
       10 
11 
     | 
    
         | 
| 
       11 
12 
     | 
    
         
             
            MesaDirError = Class.new(StandardError)
         
     | 
| 
       12 
13 
     | 
    
         
             
            TestCaseDirError = Class.new(StandardError)
         
     | 
| 
         @@ -48,9 +49,14 @@ e-mail and password will be stored in plain text.' 
     | 
|
| 
       48 
49 
     | 
    
         
             
                    "#{s.email} (required)? (#{s.password})", :blue
         
     | 
| 
       49 
50 
     | 
    
         
             
                  s.password = response unless response.empty?
         
     | 
| 
       50 
51 
     | 
    
         | 
| 
      
 52 
     | 
    
         
            +
                  # Get API key for submitting failure logs
         
     | 
| 
      
 53 
     | 
    
         
            +
                  response = shell.ask 'What is the logs submission API token associated '\
         
     | 
| 
      
 54 
     | 
    
         
            +
                    "with the email #{s.email} (required)? (#{s.logs_token})", :blue
         
     | 
| 
      
 55 
     | 
    
         
            +
                  s.logs_token = response unless response.empty?
         
     | 
| 
      
 56 
     | 
    
         
            +
             
     | 
| 
       51 
57 
     | 
    
         
             
                  # Determine if we'll use ssh or https to access github
         
     | 
| 
       52 
58 
     | 
    
         
             
                  response = shell.ask 'When accessing GitHub, which protocol do you '\
         
     | 
| 
       53 
     | 
    
         
            -
                    'want to use? 
     | 
| 
      
 59 
     | 
    
         
            +
                    'want to use?', :blue, limited_to: %w[ssh https]
         
     | 
| 
       54 
60 
     | 
    
         
             
                  s.github_protocol = response.strip.downcase.to_sym
         
     | 
| 
       55 
61 
     | 
    
         | 
| 
       56 
62 
     | 
    
         
             
                  # Get location of source MESA repo (the mirror)
         
     | 
| 
         @@ -75,10 +81,12 @@ e-mail and password will be stored in plain text.' 
     | 
|
| 
       75 
81 
     | 
    
         
             
                    "Ubuntu 16.04)? (#{s.platform_version}):", :blue
         
     | 
| 
       76 
82 
     | 
    
         
             
                  s.platform_version = response unless response.empty?
         
     | 
| 
       77 
83 
     | 
    
         | 
| 
       78 
     | 
    
         
            -
                  #  
     | 
| 
       79 
     | 
    
         
            -
                   
     | 
| 
       80 
     | 
    
         
            -
             
     | 
| 
       81 
     | 
    
         
            -
                  s.config_file  
     | 
| 
      
 84 
     | 
    
         
            +
                  # we are powerless to do change the location for now, so stop asking
         
     | 
| 
      
 85 
     | 
    
         
            +
                  # about it
         
     | 
| 
      
 86 
     | 
    
         
            +
                  # # Confirm save location
         
     | 
| 
      
 87 
     | 
    
         
            +
                  # response = shell.ask "This will be saved in #{s.config_file}. Press " \
         
     | 
| 
      
 88 
     | 
    
         
            +
                  #   'enter to accept or enter a new location:', :blue, path: true
         
     | 
| 
      
 89 
     | 
    
         
            +
                  # s.config_file = response unless response.empty?
         
     | 
| 
       82 
90 
     | 
    
         
             
                end
         
     | 
| 
       83 
91 
     | 
    
         | 
| 
       84 
92 
     | 
    
         
             
                # Confirm data. If not confirmed, restart whole wizard.
         
     | 
| 
         @@ -108,7 +116,7 @@ e-mail and password will be stored in plain text.' 
     | 
|
| 
       108 
116 
     | 
    
         | 
| 
       109 
117 
     | 
    
         
             
              attr_accessor :computer_name, :user_name, :email, :password, :platform,
         
     | 
| 
       110 
118 
     | 
    
         
             
                            :mesa_mirror, :mesa_work, :platform_version, :processor,
         
     | 
| 
       111 
     | 
    
         
            -
                            :config_file, :base_uri, : 
     | 
| 
      
 119 
     | 
    
         
            +
                            :config_file, :base_uri, :github_protocol, :logs_token
         
     | 
| 
       112 
120 
     | 
    
         | 
| 
       113 
121 
     | 
    
         
             
              attr_reader :shell
         
     | 
| 
       114 
122 
     | 
    
         | 
| 
         @@ -116,7 +124,7 @@ e-mail and password will be stored in plain text.' 
     | 
|
| 
       116 
124 
     | 
    
         
             
              def initialize(
         
     | 
| 
       117 
125 
     | 
    
         
             
                  computer_name: nil, user_name: nil, email: nil, github_protocol: nil,
         
     | 
| 
       118 
126 
     | 
    
         
             
                  mesa_mirror: nil, platform: nil, platform_version: nil, processor: nil,
         
     | 
| 
       119 
     | 
    
         
            -
                  config_file: nil, base_uri: nil,  
     | 
| 
      
 127 
     | 
    
         
            +
                  config_file: nil, base_uri: nil, logs_token: nil
         
     | 
| 
       120 
128 
     | 
    
         
             
              )
         
     | 
| 
       121 
129 
     | 
    
         
             
                @computer_name = computer_name || Socket.gethostname.scan(/^[^\.]+\.?/)[0]
         
     | 
| 
       122 
130 
     | 
    
         
             
                @computer_name.chomp!('.') if @computer_name
         
     | 
| 
         @@ -144,6 +152,7 @@ e-mail and password will be stored in plain text.' 
     | 
|
| 
       144 
152 
     | 
    
         
             
                @config_file = config_file || File.join(ENV['HOME'], '.mesa_test',
         
     | 
| 
       145 
153 
     | 
    
         
             
                                                        'config.yml')
         
     | 
| 
       146 
154 
     | 
    
         
             
                @base_uri = base_uri
         
     | 
| 
      
 155 
     | 
    
         
            +
                @logs_token = logs_token || ENV['MESA_LOGS_TOKEN']
         
     | 
| 
       147 
156 
     | 
    
         | 
| 
       148 
157 
     | 
    
         
             
                # set up thor-proof way to get responses from user. Thor hijacks the
         
     | 
| 
       149 
158 
     | 
    
         
             
                # gets command, so we have to use its built-in "ask" method, which is
         
     | 
| 
         @@ -164,11 +173,12 @@ e-mail and password will be stored in plain text.' 
     | 
|
| 
       164 
173 
     | 
    
         
             
                puts "Computer Name           #{computer_name}"
         
     | 
| 
       165 
174 
     | 
    
         
             
                puts "User email              #{email}"
         
     | 
| 
       166 
175 
     | 
    
         
             
                puts 'Password                ***********'
         
     | 
| 
      
 176 
     | 
    
         
            +
                puts "logs API token          #{logs_token}"
         
     | 
| 
       167 
177 
     | 
    
         
             
                puts "GitHub Protocol         #{github_protocol}"
         
     | 
| 
       168 
178 
     | 
    
         
             
                puts "MESA Mirror Location    #{mesa_mirror}"
         
     | 
| 
       169 
179 
     | 
    
         
             
                puts "MESA Work Location      #{mesa_work}"
         
     | 
| 
       170 
180 
     | 
    
         
             
                puts "Platform                #{platform} #{platform_version}"
         
     | 
| 
       171 
     | 
    
         
            -
                puts "Config location         #{config_file}"
         
     | 
| 
      
 181 
     | 
    
         
            +
                # puts "Config location         #{config_file}"
         
     | 
| 
       172 
182 
     | 
    
         
             
                puts '-------------------------------------------------------'
         
     | 
| 
       173 
183 
     | 
    
         
             
                puts ''
         
     | 
| 
       174 
184 
     | 
    
         
             
                response = shell.ask 'Is this correct? (y/Y = Yes, anything else = No):'
         
     | 
| 
         @@ -186,6 +196,7 @@ e-mail and password will be stored in plain text.' 
     | 
|
| 
       186 
196 
     | 
    
         
             
                  'computer_name' => computer_name,
         
     | 
| 
       187 
197 
     | 
    
         
             
                  'email' => email,
         
     | 
| 
       188 
198 
     | 
    
         
             
                  'password' => password,
         
     | 
| 
      
 199 
     | 
    
         
            +
                  'logs_token' => logs_token,
         
     | 
| 
       189 
200 
     | 
    
         
             
                  'github_protocol' => github_protocol,
         
     | 
| 
       190 
201 
     | 
    
         
             
                  'mesa_mirror' => mesa_mirror,
         
     | 
| 
       191 
202 
     | 
    
         
             
                  'mesa_work' => mesa_work,
         
     | 
| 
         @@ -204,6 +215,7 @@ e-mail and password will be stored in plain text.' 
     | 
|
| 
       204 
215 
     | 
    
         
             
                @computer_name = data_hash['computer_name']
         
     | 
| 
       205 
216 
     | 
    
         
             
                @email = data_hash['email']
         
     | 
| 
       206 
217 
     | 
    
         
             
                @password = data_hash['password']
         
     | 
| 
      
 218 
     | 
    
         
            +
                @logs_token = data_hash['logs_token']
         
     | 
| 
       207 
219 
     | 
    
         
             
                @github_protocol = data_hash['github_protocol'].to_sym
         
     | 
| 
       208 
220 
     | 
    
         
             
                @mesa_mirror = data_hash['mesa_mirror']
         
     | 
| 
       209 
221 
     | 
    
         
             
                @mesa_work = data_hash['mesa_work']
         
     | 
| 
         @@ -271,6 +283,28 @@ e-mail and password will be stored in plain text.' 
     | 
|
| 
       271 
283 
     | 
    
         
             
                res
         
     | 
| 
       272 
284 
     | 
    
         
             
              end
         
     | 
| 
       273 
285 
     | 
    
         | 
| 
      
 286 
     | 
    
         
            +
              # Parameters for reporting a failed compilation to the logs server
         
     | 
| 
      
 287 
     | 
    
         
            +
              def build_log_params(mesa)
         
     | 
| 
      
 288 
     | 
    
         
            +
                {
         
     | 
| 
      
 289 
     | 
    
         
            +
                  'computer_name' => computer_name,
         
     | 
| 
      
 290 
     | 
    
         
            +
                  'commit' => mesa.sha,
         
     | 
| 
      
 291 
     | 
    
         
            +
                  'build.log' => mesa.build_log_64
         
     | 
| 
      
 292 
     | 
    
         
            +
                }
         
     | 
| 
      
 293 
     | 
    
         
            +
              end
         
     | 
| 
      
 294 
     | 
    
         
            +
             
     | 
| 
      
 295 
     | 
    
         
            +
              # Parameters for reporting a failed test to the logs server
         
     | 
| 
      
 296 
     | 
    
         
            +
              def test_log_params(test_case)
         
     | 
| 
      
 297 
     | 
    
         
            +
                res = {
         
     | 
| 
      
 298 
     | 
    
         
            +
                  'computer_name' => computer_name,
         
     | 
| 
      
 299 
     | 
    
         
            +
                  'commit' => test_case.mesa.sha, 
         
     | 
| 
      
 300 
     | 
    
         
            +
                  'test_case' => test_case.test_name     
         
     | 
| 
      
 301 
     | 
    
         
            +
                }
         
     | 
| 
      
 302 
     | 
    
         
            +
                res['mk.txt'] = test_case.mk_64 unless test_case.mk_64.empty?
         
     | 
| 
      
 303 
     | 
    
         
            +
                res['out.txt'] = test_case.out_64 unless test_case.out_64.empty?
         
     | 
| 
      
 304 
     | 
    
         
            +
                res['err.txt'] = test_case.err_64 unless test_case.err_64.empty?
         
     | 
| 
      
 305 
     | 
    
         
            +
                res
         
     | 
| 
      
 306 
     | 
    
         
            +
              end
         
     | 
| 
      
 307 
     | 
    
         
            +
             
     | 
| 
       274 
308 
     | 
    
         
             
              # Parameters for a single test case. +mesa+ is an instance of +Mesa+, and
         
     | 
| 
       275 
309 
     | 
    
         
             
              # +test_case+ is an instance of MesaTestCase representing the test case to
         
     | 
| 
       276 
310 
     | 
    
         
             
              # be submitted
         
     | 
| 
         @@ -287,7 +321,7 @@ e-mail and password will be stored in plain text.' 
     | 
|
| 
       287 
321 
     | 
    
         
             
                https.use_ssl = base_uri.include? 'https'
         
     | 
| 
       288 
322 
     | 
    
         | 
| 
       289 
323 
     | 
    
         
             
                request = Net::HTTP::Post.new(
         
     | 
| 
       290 
     | 
    
         
            -
                  uri, initheader = { 'Content-Type' => 'application/json' }
         
     | 
| 
      
 324 
     | 
    
         
            +
                  uri, initheader = { 'Accept' => 'application/json', 'Content-Type' => 'application/json' }
         
     | 
| 
       291 
325 
     | 
    
         
             
                )
         
     | 
| 
       292 
326 
     | 
    
         
             
                request.body = {
         
     | 
| 
       293 
327 
     | 
    
         
             
                  email: email,
         
     | 
| 
         @@ -300,20 +334,26 @@ e-mail and password will be stored in plain text.' 
     | 
|
| 
       300 
334 
     | 
    
         
             
              # submit entire commit's worth of test cases, OR submit compilation status
         
     | 
| 
       301 
335 
     | 
    
         
             
              # and NO test cases
         
     | 
| 
       302 
336 
     | 
    
         
             
              def submit_commit(mesa, empty: false)
         
     | 
| 
      
 337 
     | 
    
         
            +
                unless mesa.install_attempted?
         
     | 
| 
      
 338 
     | 
    
         
            +
                  raise MesaDirError, 'No testhub.yml file found in installation; '\
         
     | 
| 
      
 339 
     | 
    
         
            +
                                      'must attempt to install before subitting.'
         
     | 
| 
      
 340 
     | 
    
         
            +
                end
         
     | 
| 
       303 
341 
     | 
    
         
             
                uri = URI.parse(base_uri + '/submissions/create.json')
         
     | 
| 
       304 
342 
     | 
    
         
             
                https = Net::HTTP.new(uri.hostname, uri.port)
         
     | 
| 
       305 
343 
     | 
    
         
             
                https.use_ssl = true if base_uri.include? 'https'
         
     | 
| 
       306 
344 
     | 
    
         | 
| 
       307 
345 
     | 
    
         
             
                request = Net::HTTP::Post.new(
         
     | 
| 
       308 
346 
     | 
    
         
             
                  uri,
         
     | 
| 
       309 
     | 
    
         
            -
                  initheader = { 'Content-Type' => 'application/json' }
         
     | 
| 
      
 347 
     | 
    
         
            +
                  initheader = { 'Accept' => 'application/json', 'Content-Type' => 'application/json' }
         
     | 
| 
       310 
348 
     | 
    
         
             
                )
         
     | 
| 
       311 
349 
     | 
    
         | 
| 
       312 
350 
     | 
    
         
             
                # create the request body for submission to the submissions API
         
     | 
| 
       313 
351 
     | 
    
         
             
                # 
         
     | 
| 
       314 
352 
     | 
    
         
             
                # if we have an empty submission, then it is necessarily not entire.
         
     | 
| 
       315 
353 
     | 
    
         
             
                # Similarly, a non-empty submission is necessarily entire (otherwise one
         
     | 
| 
       316 
     | 
    
         
            -
                # would use +submit_instance+)
         
     | 
| 
      
 354 
     | 
    
         
            +
                # would use +submit_instance+). Also, make a "nonempty" submission be
         
     | 
| 
      
 355 
     | 
    
         
            +
                # empty if there was an overall build error
         
     | 
| 
      
 356 
     | 
    
         
            +
                empty ||= !mesa.installed?
         
     | 
| 
       317 
357 
     | 
    
         
             
                request_data = {submitter: submitter_params,
         
     | 
| 
       318 
358 
     | 
    
         
             
                                commit: commit_params(mesa, empty: empty, entire: !empty)}
         
     | 
| 
       319 
359 
     | 
    
         
             
                # don't need test instances if it's an empty submission or if compilation
         
     | 
| 
         @@ -332,20 +372,47 @@ e-mail and password will be stored in plain text.' 
     | 
|
| 
       332 
372 
     | 
    
         
             
                  false
         
     | 
| 
       333 
373 
     | 
    
         
             
                else
         
     | 
| 
       334 
374 
     | 
    
         
             
                  shell.say "\nSuccessfully submitted commit #{mesa.sha}.", :green
         
     | 
| 
       335 
     | 
    
         
            -
                   
     | 
| 
      
 375 
     | 
    
         
            +
                  # commit submitted to testhub, now submit build log if compilation failed
         
     | 
| 
      
 376 
     | 
    
         
            +
                  # and exit
         
     | 
| 
      
 377 
     | 
    
         
            +
                  unless mesa.installed?
         
     | 
| 
      
 378 
     | 
    
         
            +
                    return submit_build_log(mesa)
         
     | 
| 
      
 379 
     | 
    
         
            +
                  end
         
     | 
| 
      
 380 
     | 
    
         
            +
             
     | 
| 
      
 381 
     | 
    
         
            +
                  # compilation succeded, so submit any logs for failing tests
         
     | 
| 
      
 382 
     | 
    
         
            +
                  res = true
         
     | 
| 
      
 383 
     | 
    
         
            +
                  unless empty
         
     | 
| 
      
 384 
     | 
    
         
            +
                    mesa.test_cases.each do |mod, test_case_hash|
         
     | 
| 
      
 385 
     | 
    
         
            +
                      test_case_hash.each do |tc_name, test_case|
         
     | 
| 
      
 386 
     | 
    
         
            +
                        # get at each individual test case, see if it failed, and if it
         
     | 
| 
      
 387 
     | 
    
         
            +
                        # did, submit its log files
         
     | 
| 
      
 388 
     | 
    
         
            +
                        unless test_case.passed?
         
     | 
| 
      
 389 
     | 
    
         
            +
                          res &&= submit_test_log(test_case)
         
     | 
| 
      
 390 
     | 
    
         
            +
                        end
         
     | 
| 
      
 391 
     | 
    
         
            +
                      end
         
     | 
| 
      
 392 
     | 
    
         
            +
                    end
         
     | 
| 
      
 393 
     | 
    
         
            +
                  end
         
     | 
| 
      
 394 
     | 
    
         
            +
             
     | 
| 
      
 395 
     | 
    
         
            +
                  # a true return value means that any and all log submission were
         
     | 
| 
      
 396 
     | 
    
         
            +
                  # successful
         
     | 
| 
      
 397 
     | 
    
         
            +
                  res
         
     | 
| 
       336 
398 
     | 
    
         
             
                end
         
     | 
| 
       337 
399 
     | 
    
         
             
              end
         
     | 
| 
       338 
400 
     | 
    
         | 
| 
       339 
401 
     | 
    
         
             
              # submit results for a single test case instance. Does *not* report overall
         
     | 
| 
       340 
402 
     | 
    
         
             
              # compilation status to testhub. Use an empty commit submission for that
         
     | 
| 
       341 
403 
     | 
    
         
             
              def submit_instance(mesa, test_case)
         
     | 
| 
      
 404 
     | 
    
         
            +
                unless mesa.install_attempted?
         
     | 
| 
      
 405 
     | 
    
         
            +
                  raise MesaDirError, 'No testhub.yml file found in installation; '\
         
     | 
| 
      
 406 
     | 
    
         
            +
                                      'must attempt to install before subitting.'
         
     | 
| 
      
 407 
     | 
    
         
            +
                end
         
     | 
| 
      
 408 
     | 
    
         
            +
             
     | 
| 
       342 
409 
     | 
    
         
             
                uri = URI.parse(base_uri + '/submissions/create.json')
         
     | 
| 
       343 
410 
     | 
    
         
             
                https = Net::HTTP.new(uri.hostname, uri.port)
         
     | 
| 
       344 
411 
     | 
    
         
             
                https.use_ssl = true if base_uri.include? 'https'
         
     | 
| 
       345 
412 
     | 
    
         | 
| 
       346 
413 
     | 
    
         
             
                request = Net::HTTP::Post.new(
         
     | 
| 
       347 
414 
     | 
    
         
             
                  uri,
         
     | 
| 
       348 
     | 
    
         
            -
                  initheader = { 'Content-Type' => 'application/json' }
         
     | 
| 
      
 415 
     | 
    
         
            +
                  initheader = { 'Accept' => 'application/json', 'Content-Type' => 'application/json' }
         
     | 
| 
       349 
416 
     | 
    
         
             
                )
         
     | 
| 
       350 
417 
     | 
    
         | 
| 
       351 
418 
     | 
    
         
             
                # create the request body for submission to the submissions API
         
     | 
| 
         @@ -367,9 +434,80 @@ e-mail and password will be stored in plain text.' 
     | 
|
| 
       367 
434 
     | 
    
         
             
                else
         
     | 
| 
       368 
435 
     | 
    
         
             
                  shell.say "\nSuccessfully submitted instance of #{test_case.test_name} "\
         
     | 
| 
       369 
436 
     | 
    
         
             
                            "for commit #{mesa.sha}.", :green
         
     | 
| 
      
 437 
     | 
    
         
            +
                  # submit logs if test failed
         
     | 
| 
      
 438 
     | 
    
         
            +
                  return submit_test_log(test_case) unless test_case.passed?
         
     | 
| 
      
 439 
     | 
    
         
            +
                  true
         
     | 
| 
      
 440 
     | 
    
         
            +
                end
         
     | 
| 
      
 441 
     | 
    
         
            +
              end
         
     | 
| 
      
 442 
     | 
    
         
            +
             
     | 
| 
      
 443 
     | 
    
         
            +
              # make generic request to LOGS server
         
     | 
| 
      
 444 
     | 
    
         
            +
              # +params+ is a hash of data to be encoded as JSON and sent off
         
     | 
| 
      
 445 
     | 
    
         
            +
              def submit_logs(params)
         
     | 
| 
      
 446 
     | 
    
         
            +
                uri = URI('https://logs.mesastar.org/uploads')
         
     | 
| 
      
 447 
     | 
    
         
            +
                https = Net::HTTP.new(uri.host, uri.port)
         
     | 
| 
      
 448 
     | 
    
         
            +
                https.use_ssl = true
         
     | 
| 
      
 449 
     | 
    
         
            +
                req = Net::HTTP::Post.new(uri.path, 'Content-Type' => 'application/json',
         
     | 
| 
      
 450 
     | 
    
         
            +
                                          'X-Api-Key' => logs_token)
         
     | 
| 
      
 451 
     | 
    
         
            +
                req.body = params.to_json
         
     | 
| 
      
 452 
     | 
    
         
            +
                https.request(req)
         
     | 
| 
      
 453 
     | 
    
         
            +
              end
         
     | 
| 
      
 454 
     | 
    
         
            +
             
     | 
| 
      
 455 
     | 
    
         
            +
              # send build log to the logs server
         
     | 
| 
      
 456 
     | 
    
         
            +
              def submit_build_log(mesa)
         
     | 
| 
      
 457 
     | 
    
         
            +
                # intercept and don't send if mesa was properly installed
         
     | 
| 
      
 458 
     | 
    
         
            +
                return true if mesa.installed?
         
     | 
| 
      
 459 
     | 
    
         
            +
             
     | 
| 
      
 460 
     | 
    
         
            +
                # don't even try unless we have a logs token set
         
     | 
| 
      
 461 
     | 
    
         
            +
                unless logs_token
         
     | 
| 
      
 462 
     | 
    
         
            +
                  shell.say 'Cannot submit to logs server; need to set mesa_logs_token '\
         
     | 
| 
      
 463 
     | 
    
         
            +
                            'in the mesa_test config file.'
         
     | 
| 
      
 464 
     | 
    
         
            +
                  return false
         
     | 
| 
      
 465 
     | 
    
         
            +
                end
         
     | 
| 
      
 466 
     | 
    
         
            +
             
     | 
| 
      
 467 
     | 
    
         
            +
                # do submission
         
     | 
| 
      
 468 
     | 
    
         
            +
                res = submit_logs(build_log_params(mesa))
         
     | 
| 
      
 469 
     | 
    
         
            +
             
     | 
| 
      
 470 
     | 
    
         
            +
                # report out results
         
     | 
| 
      
 471 
     | 
    
         
            +
                if !res.is_a? Net::HTTPOK
         
     | 
| 
      
 472 
     | 
    
         
            +
                  shell.say "\nFailed to submit build.log to the LOGS server for commit "\
         
     | 
| 
      
 473 
     | 
    
         
            +
                            "#{mesa.sha}.", :red
         
     | 
| 
      
 474 
     | 
    
         
            +
                  false
         
     | 
| 
      
 475 
     | 
    
         
            +
                else
         
     | 
| 
      
 476 
     | 
    
         
            +
                  shell.say "\nSuccessfully submitted build.log to the LOGS server for "\
         
     | 
| 
      
 477 
     | 
    
         
            +
                            "#{mesa.sha}.", :green
         
     | 
| 
       370 
478 
     | 
    
         
             
                  true
         
     | 
| 
       371 
479 
     | 
    
         
             
                end
         
     | 
| 
       372 
480 
     | 
    
         
             
              end
         
     | 
| 
      
 481 
     | 
    
         
            +
             
     | 
| 
      
 482 
     | 
    
         
            +
              # send build log to the logs server
         
     | 
| 
      
 483 
     | 
    
         
            +
              def submit_test_log(test_case)
         
     | 
| 
      
 484 
     | 
    
         
            +
                # skip submission if mesa was never installed or if the test passed
         
     | 
| 
      
 485 
     | 
    
         
            +
                return true if !test_case.mesa.installed? || test_case.passed?
         
     | 
| 
      
 486 
     | 
    
         
            +
             
     | 
| 
      
 487 
     | 
    
         
            +
                # don't even try unless we have a logs token set
         
     | 
| 
      
 488 
     | 
    
         
            +
                unless logs_token
         
     | 
| 
      
 489 
     | 
    
         
            +
                  shell.say 'Cannot submit to logs server; need to set mesa_logs_token '\
         
     | 
| 
      
 490 
     | 
    
         
            +
                            'in the mesa_test config file..'
         
     | 
| 
      
 491 
     | 
    
         
            +
                  return false
         
     | 
| 
      
 492 
     | 
    
         
            +
                end
         
     | 
| 
      
 493 
     | 
    
         
            +
              
         
     | 
| 
      
 494 
     | 
    
         
            +
                # do submission
         
     | 
| 
      
 495 
     | 
    
         
            +
                res = submit_logs(test_log_params(test_case))
         
     | 
| 
      
 496 
     | 
    
         
            +
             
     | 
| 
      
 497 
     | 
    
         
            +
                # report out results
         
     | 
| 
      
 498 
     | 
    
         
            +
                if !res.is_a? Net::HTTPOK
         
     | 
| 
      
 499 
     | 
    
         
            +
                  shell.say "Failed to submit out.txt and mk.txt to the LOGS server for "\
         
     | 
| 
      
 500 
     | 
    
         
            +
                            "test case #{test_case.test_name} in commit "\
         
     | 
| 
      
 501 
     | 
    
         
            +
                            "#{test_case.mesa.sha}.", :red
         
     | 
| 
      
 502 
     | 
    
         
            +
                  false
         
     | 
| 
      
 503 
     | 
    
         
            +
                else
         
     | 
| 
      
 504 
     | 
    
         
            +
                  shell.say "Successfully submitted out.txt and mk.txt to the LOGS "\
         
     | 
| 
      
 505 
     | 
    
         
            +
                            "server for test case #{test_case.test_name} in commit "\
         
     | 
| 
      
 506 
     | 
    
         
            +
                            "#{test_case.mesa.sha}.", :green
         
     | 
| 
      
 507 
     | 
    
         
            +
                  true
         
     | 
| 
      
 508 
     | 
    
         
            +
                end
         
     | 
| 
      
 509 
     | 
    
         
            +
              end
         
     | 
| 
      
 510 
     | 
    
         
            +
             
     | 
| 
       373 
511 
     | 
    
         
             
            end
         
     | 
| 
       374 
512 
     | 
    
         | 
| 
       375 
513 
     | 
    
         
             
            class Mesa
         
     | 
| 
         @@ -551,18 +689,29 @@ class Mesa 
     | 
|
| 
       551 
689 
     | 
    
         
             
                                    'show a successful installation).'
         
     | 
| 
       552 
690 
     | 
    
         
             
              end
         
     | 
| 
       553 
691 
     | 
    
         | 
| 
      
 692 
     | 
    
         
            +
              # base 64-encoded contents of build.log
         
     | 
| 
      
 693 
     | 
    
         
            +
              def build_log_64
         
     | 
| 
      
 694 
     | 
    
         
            +
                build_log = File.join(mesa_dir, 'build.log')
         
     | 
| 
      
 695 
     | 
    
         
            +
                return '' unless File.exist?(build_log)
         
     | 
| 
      
 696 
     | 
    
         
            +
             
     | 
| 
      
 697 
     | 
    
         
            +
                b64_file(build_log)
         
     | 
| 
      
 698 
     | 
    
         
            +
              end
         
     | 
| 
      
 699 
     | 
    
         
            +
             
     | 
| 
       554 
700 
     | 
    
         
             
              # sourced from $MESA_DIR/testhub.yml, which should be created after
         
     | 
| 
       555 
701 
     | 
    
         
             
              # installation
         
     | 
| 
       556 
702 
     | 
    
         
             
              def compiler_hash
         
     | 
| 
       557 
703 
     | 
    
         
             
                data_file = File.join(mesa_dir, 'testhub.yml')
         
     | 
| 
       558 
     | 
    
         
            -
                 
     | 
| 
       559 
     | 
    
         
            -
             
     | 
| 
      
 704 
     | 
    
         
            +
                res = {
         
     | 
| 
      
 705 
     | 
    
         
            +
                        compiler: 'Unknown',
         
     | 
| 
      
 706 
     | 
    
         
            +
                        sdk_version: 'Unknown',
         
     | 
| 
      
 707 
     | 
    
         
            +
                        math_backend: 'Unknown'
         
     | 
| 
      
 708 
     | 
    
         
            +
                      }
         
     | 
| 
      
 709 
     | 
    
         
            +
                if File.exist? data_file
         
     | 
| 
      
 710 
     | 
    
         
            +
                  res = res.merge(YAML.safe_load(File.read(data_file)) || {})
         
     | 
| 
      
 711 
     | 
    
         
            +
                  # currently version_number is reported, but we don't need that in Git land
         
     | 
| 
      
 712 
     | 
    
         
            +
                  res.delete('version_number') # returns the value, not the updated hash
         
     | 
| 
      
 713 
     | 
    
         
            +
                  res
         
     | 
| 
       560 
714 
     | 
    
         
             
                end
         
     | 
| 
       561 
     | 
    
         
            -
             
     | 
| 
       562 
     | 
    
         
            -
                res = YAML.safe_load(File.read(data_file))
         
     | 
| 
       563 
     | 
    
         
            -
                # currently version_number is reported, but we don't need that in Git land
         
     | 
| 
       564 
     | 
    
         
            -
                res.delete('version_number') # returns the value, not the updated hash
         
     | 
| 
       565 
     | 
    
         
            -
                res
         
     | 
| 
       566 
715 
     | 
    
         
             
              end
         
     | 
| 
       567 
716 
     | 
    
         | 
| 
       568 
717 
     | 
    
         
             
              ## TEST SUITE METHODS
         
     | 
| 
         @@ -600,12 +749,16 @@ class Mesa 
     | 
|
| 
       600 
749 
     | 
    
         
             
                      num, tc_name = line.strip.split
         
     | 
| 
       601 
750 
     | 
    
         
             
                      @names_to_numbers[mod][tc_name.strip] = num.to_i
         
     | 
| 
       602 
751 
     | 
    
         
             
                      @test_case_names[mod] << tc_name.strip
         
     | 
| 
       603 
     | 
    
         
            -
                       
     | 
| 
       604 
     | 
    
         
            -
                         
     | 
| 
       605 
     | 
    
         
            -
             
     | 
| 
       606 
     | 
    
         
            -
             
     | 
| 
       607 
     | 
    
         
            -
             
     | 
| 
       608 
     | 
    
         
            -
             
     | 
| 
      
 752 
     | 
    
         
            +
                      begin
         
     | 
| 
      
 753 
     | 
    
         
            +
                        @test_cases[mod][tc_name.strip] = MesaTestCase.new(
         
     | 
| 
      
 754 
     | 
    
         
            +
                          test: tc_name.strip,
         
     | 
| 
      
 755 
     | 
    
         
            +
                          mod: mod,
         
     | 
| 
      
 756 
     | 
    
         
            +
                          position: num.to_i,
         
     | 
| 
      
 757 
     | 
    
         
            +
                          mesa: self
         
     | 
| 
      
 758 
     | 
    
         
            +
                        )
         
     | 
| 
      
 759 
     | 
    
         
            +
                      rescue TestCaseDirError
         
     | 
| 
      
 760 
     | 
    
         
            +
                        shell.say "No such test case #{tc_name.strip}. Skipping loading it.", :red
         
     | 
| 
      
 761 
     | 
    
         
            +
                      end
         
     | 
| 
       609 
762 
     | 
    
         
             
                    end
         
     | 
| 
       610 
763 
     | 
    
         
             
                  end
         
     | 
| 
       611 
764 
     | 
    
         
             
                end
         
     | 
| 
         @@ -645,11 +798,16 @@ class Mesa 
     | 
|
| 
       645 
798 
     | 
    
         
             
              def installed?
         
     | 
| 
       646 
799 
     | 
    
         
             
                # assume build log reflects installation status; does not account for
         
     | 
| 
       647 
800 
     | 
    
         
             
                # mucking with modules after the fact
         
     | 
| 
       648 
     | 
    
         
            -
                 
     | 
| 
      
 801 
     | 
    
         
            +
                build_log = File.join(mesa_dir, 'build.log')
         
     | 
| 
      
 802 
     | 
    
         
            +
                downloaded? && File.exist?(build_log) && File.read(build_log).include?(
         
     | 
| 
       649 
803 
     | 
    
         
             
                  'MESA installation was successful'
         
     | 
| 
       650 
804 
     | 
    
         
             
                )
         
     | 
| 
       651 
805 
     | 
    
         
             
              end
         
     | 
| 
       652 
806 
     | 
    
         | 
| 
      
 807 
     | 
    
         
            +
              def install_attempted?
         
     | 
| 
      
 808 
     | 
    
         
            +
                File.exist? File.join(mesa_dir, 'testhub.yml')
         
     | 
| 
      
 809 
     | 
    
         
            +
              end
         
     | 
| 
      
 810 
     | 
    
         
            +
             
     | 
| 
       653 
811 
     | 
    
         
             
              private
         
     | 
| 
       654 
812 
     | 
    
         | 
| 
       655 
813 
     | 
    
         
             
              # verify that mesa_dir is valid by checking for existence of test_suite
         
     | 
| 
         @@ -834,6 +992,36 @@ class MesaTestCase 
     | 
|
| 
       834 
992 
     | 
    
         
             
                YAML.safe_load(File.read(testhub_file), [Symbol])
         
     | 
| 
       835 
993 
     | 
    
         
             
              end
         
     | 
| 
       836 
994 
     | 
    
         | 
| 
      
 995 
     | 
    
         
            +
              # whether or not a test case has passed; only has meaning
         
     | 
| 
      
 996 
     | 
    
         
            +
              # if we can load the results hash, though
         
     | 
| 
      
 997 
     | 
    
         
            +
              def passed?
         
     | 
| 
      
 998 
     | 
    
         
            +
                results_hash['outcome'] == :pass
         
     | 
| 
      
 999 
     | 
    
         
            +
              end
         
     | 
| 
      
 1000 
     | 
    
         
            +
             
     | 
| 
      
 1001 
     | 
    
         
            +
              # Base-64 encoded contents of mk.txt file
         
     | 
| 
      
 1002 
     | 
    
         
            +
              def mk_64
         
     | 
| 
      
 1003 
     | 
    
         
            +
                mk_file = File.join(test_case_dir, 'mk.txt')
         
     | 
| 
      
 1004 
     | 
    
         
            +
                return '' unless File.exist?(mk_file)
         
     | 
| 
      
 1005 
     | 
    
         
            +
             
     | 
| 
      
 1006 
     | 
    
         
            +
                b64_file(mk_file)
         
     | 
| 
      
 1007 
     | 
    
         
            +
              end
         
     | 
| 
      
 1008 
     | 
    
         
            +
             
     | 
| 
      
 1009 
     | 
    
         
            +
              # Base-64 encoded contents of err.txt file
         
     | 
| 
      
 1010 
     | 
    
         
            +
              def err_64
         
     | 
| 
      
 1011 
     | 
    
         
            +
                err_file = File.join(test_case_dir, 'err.txt')
         
     | 
| 
      
 1012 
     | 
    
         
            +
                return '' unless File.exist?(err_file)
         
     | 
| 
      
 1013 
     | 
    
         
            +
             
     | 
| 
      
 1014 
     | 
    
         
            +
                b64_file(err_file)
         
     | 
| 
      
 1015 
     | 
    
         
            +
              end
         
     | 
| 
      
 1016 
     | 
    
         
            +
             
     | 
| 
      
 1017 
     | 
    
         
            +
              # Base-64 encoded contents of out.txt file
         
     | 
| 
      
 1018 
     | 
    
         
            +
              def out_64
         
     | 
| 
      
 1019 
     | 
    
         
            +
                out_file = File.join(test_case_dir, 'out.txt')
         
     | 
| 
      
 1020 
     | 
    
         
            +
                return '' unless File.exist?(out_file)
         
     | 
| 
      
 1021 
     | 
    
         
            +
             
     | 
| 
      
 1022 
     | 
    
         
            +
                b64_file(out_file)
         
     | 
| 
      
 1023 
     | 
    
         
            +
              end
         
     | 
| 
      
 1024 
     | 
    
         
            +
             
     | 
| 
       837 
1025 
     | 
    
         
             
              private
         
     | 
| 
       838 
1026 
     | 
    
         | 
| 
       839 
1027 
     | 
    
         
             
              # cd into the test case directory, do something in a block, then cd back
         
     | 
| 
         @@ -932,3 +1120,8 @@ end 
     | 
|
| 
       932 
1120 
     | 
    
         
             
            def bashticks(command)
         
     | 
| 
       933 
1121 
     | 
    
         
             
              `bash -c "#{command}"`.chomp
         
     | 
| 
       934 
1122 
     | 
    
         
             
            end
         
     | 
| 
      
 1123 
     | 
    
         
            +
             
     | 
| 
      
 1124 
     | 
    
         
            +
            # encode the contents of a file as base-64
         
     | 
| 
      
 1125 
     | 
    
         
            +
            def b64_file(filename)
         
     | 
| 
      
 1126 
     | 
    
         
            +
              Base64.encode64(File.open(filename).read)
         
     | 
| 
      
 1127 
     | 
    
         
            +
            end
         
     | 
    
        metadata
    CHANGED
    
    | 
         @@ -1,14 +1,14 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: mesa_test
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 1.0 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 1.1.0
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
7 
     | 
    
         
             
            - William Wolf
         
     | 
| 
       8 
8 
     | 
    
         
             
            autorequire:
         
     | 
| 
       9 
9 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       10 
10 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       11 
     | 
    
         
            -
            date:  
     | 
| 
      
 11 
     | 
    
         
            +
            date: 2021-05-18 00:00:00.000000000 Z
         
     | 
| 
       12 
12 
     | 
    
         
             
            dependencies:
         
     | 
| 
       13 
13 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       14 
14 
     | 
    
         
             
              name: json
         
     | 
| 
         @@ -81,7 +81,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement 
     | 
|
| 
       81 
81 
     | 
    
         
             
                - !ruby/object:Gem::Version
         
     | 
| 
       82 
82 
     | 
    
         
             
                  version: '0'
         
     | 
| 
       83 
83 
     | 
    
         
             
            requirements: []
         
     | 
| 
       84 
     | 
    
         
            -
            rubygems_version: 3. 
     | 
| 
      
 84 
     | 
    
         
            +
            rubygems_version: 3.2.3
         
     | 
| 
       85 
85 
     | 
    
         
             
            signing_key:
         
     | 
| 
       86 
86 
     | 
    
         
             
            specification_version: 4
         
     | 
| 
       87 
87 
     | 
    
         
             
            summary: Command line tool for running and reporting the MESA test suites.
         
     |