def load(self): """ Load test results """ super().load() try: results = tmt.utils.yaml_to_dict(self.read('results.yaml')) self._results = [ tmt.Result(data, test) for test, data in results.items()] except tmt.utils.FileError as error: self.debug('Test results not found.', level=2)
def check_shell(self, test): """ Check result of a shell test """ # Prepare the log path data = {'log': self.log(test, 'out.log')} # Process the exit code try: data['result'] = {0: 'pass', 1: 'fail'}[test.returncode] except KeyError: data['result'] = 'error' return tmt.Result(data, test.name)
def check_beakerlib(self, test): """ Check result of a beakerlib test """ # Initialize data, prepare log paths data = {'result': 'error', 'log': [], 'duration': test.real_duration} for log in [TEST_OUTPUT_FILENAME, 'journal.txt']: if os.path.isfile(self.data_path(test, log, full=True)): data['log'].append(self.data_path(test, log)) # Check beakerlib log for the result try: beakerlib_results_file = self.data_path( test, 'TestResults', full=True) results = self.read(beakerlib_results_file, level=3) except tmt.utils.FileError: self.debug(f"Unable to read '{beakerlib_results_file}'.", level=3) data['note'] = 'beakerlib: TestResults FileError' return tmt.Result(data, test.name) try: result = re.search( 'TESTRESULT_RESULT_STRING=(.*)', results).group(1) # States are: started, incomplete and complete # FIXME In quotes until beakerlib/beakerlib/pull/92 is merged state = re.search(r'TESTRESULT_STATE="?(\w+)"?', results).group(1) except AttributeError: self.debug( f"No result or state found in '{beakerlib_results_file}'.", level=3) data['note'] = 'beakerlib: Result/State missing' return tmt.Result(data, test.name) # Check if it was killed by timeout (set by tmt executor) if test.returncode == tmt.utils.PROCESS_TIMEOUT: data['result'] = 'error' data['note'] = 'timeout' self.timeout_hint(test) # Test results should be in complete state elif state != 'complete': data['result'] = 'error' data['note'] = f"beakerlib: State '{state}'" # Finally we have a valid result else: data['result'] = result.lower() return tmt.Result(data, test.name)
def load(self, extra_keys=None): """ Load test results """ extra_keys = extra_keys or [] extra_keys.append(REBOOT_TOKEN_KEY) super().load(extra_keys) try: results = tmt.utils.yaml_to_dict(self.read('results.yaml')) self._results = [ tmt.Result(data, test) for test, data in results.items()] except tmt.utils.FileError as error: self.debug('Test results not found.', level=2)
def check_shell(self, test): """ Check result of a shell test """ # Prepare the log path data = {'log': self.data_path(test, TEST_OUTPUT_FILENAME)} # Process the exit code try: data['result'] = {0: 'pass', 1: 'fail'}[test.returncode] except KeyError: data['result'] = 'error' # Add note about the exceeded duration if test.returncode == tmt.utils.PROCESS_TIMEOUT: data['note'] = 'timeout' return tmt.Result(data, test.name)
def check_beakerlib(self, test): """ Check result of a beakerlib test """ # Initialize data, prepare log paths data = {'result': 'error', 'log': []} for log in ['out.log', 'journal.txt']: if os.path.isfile(self.log(test, log, full=True)): data['log'].append(self.log(test, log)) # Check beakerlib log for the result try: beakerlib_results_file = self.log(test, 'TestResults', full=True) results = self.read(beakerlib_results_file, level=3) except tmt.utils.FileError: self.debug(f"Unable to read '{beakerlib_results_file}'.", level=3) return tmt.Result(data, test.name) try: matched = re.search('TESTRESULT_RESULT_STRING=(.*)', results) result = matched.group(1) except AttributeError: self.debug(f"No result in '{beakerlib_results_file}'.", level=3) return tmt.Result(data, test.name) data['result'] = result.lower() return tmt.Result(data, test.name)