Changeset a4fbd16 in rtems-tools


Ignore:
Timestamp:
Nov 26, 2018, 3:38:37 AM (5 months ago)
Author:
Chris Johns <chrisj@…>
Branches:
master
Children:
bf5fdab
Parents:
29f9e10
git-author:
Chris Johns <chrisj@…> (11/26/18 03:38:37)
git-committer:
Chris Johns <chrisj@…> (11/27/18 00:23:36)
Message:

tester: Fix the handling of the version and tools recs when running parallel jobs

Location:
tester/rt
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • tester/rt/config.py

    r29f9e10 ra4fbd16  
    350350
    351351    def capture(self, text):
    352         if not self.test_started:
    353             s = text.find('*** BEGIN OF TEST ')
    354             if s >= 0:
    355                 self.test_started = True
    356                 e = text[s + 3:].find('***')
    357                 if e >= 0:
    358                     self.test_label = text[s + len('*** BEGIN OF TEST '):s + e + 3 - 1]
    359                 self.capture_console('test start: %s' % (self.test_label))
    360         ok_to_kill = '*** TEST STATE: USER_INPUT' in text or \
    361                      '*** TEST STATE: BENCHMARK' in text
    362         if ok_to_kill:
    363             reset_target = True
    364         else:
    365             reset_target = False
    366         if self.test_started and self.target_start_regx is not None:
    367             if self.target_start_regx.match(text):
    368                 self.capture_console('target start detected')
    369                 ok_to_kill = True
    370         if not reset_target and self.target_reset_regx is not None:
    371             if self.target_reset_regx.match(text):
    372                 self.capture_console('target reset condition detected')
    373                 self._target_command('reset')
    374         if self.kill_on_end:
    375             if not ok_to_kill and '*** END OF TEST ' in text:
    376                 self.capture_console('test end: %s' % (self.test_label))
    377                 if self.test_label is not None:
    378                     ok_to_kill = '*** END OF TEST %s ***' % (self.test_label) in text
    379         text = [(self.console_prefix, l) for l in text.replace(chr(13), '').splitlines()]
    380352        self._lock()
    381         if self.output is not None:
    382             if self.realtime_trace:
    383                 self._realtime_trace(text)
    384             self.output += text
    385         if reset_target:
    386             if self.index == self.total:
    387                 self._target_command('off')
     353        try:
     354            if not self.test_started:
     355                s = text.find('*** BEGIN OF TEST ')
     356                if s >= 0:
     357                    self.test_started = True
     358                    e = text[s + 3:].find('***')
     359                    if e >= 0:
     360                        self.test_label = text[s + len('*** BEGIN OF TEST '):s + e + 3 - 1]
     361                    self._capture_console('test start: %s' % (self.test_label))
     362            ok_to_kill = '*** TEST STATE: USER_INPUT' in text or \
     363                         '*** TEST STATE: BENCHMARK' in text
     364            if ok_to_kill:
     365                reset_target = True
    388366            else:
    389                 self._target_command('reset')
    390         self._unlock()
     367                reset_target = False
     368            if self.test_started and self.target_start_regx is not None:
     369                if self.target_start_regx.match(text):
     370                    self._capture_console('target start detected')
     371                    ok_to_kill = True
     372            if not reset_target and self.target_reset_regx is not None:
     373                if self.target_reset_regx.match(text):
     374                    self._capture_console('target reset condition detected')
     375                    self._target_command('reset')
     376            if self.kill_on_end:
     377                if not ok_to_kill and '*** END OF TEST ' in text:
     378                    self._capture_console('test end: %s' % (self.test_label))
     379                    if self.test_label is not None:
     380                        ok_to_kill = '*** END OF TEST %s ***' % (self.test_label) in text
     381            text = [(self.console_prefix, l) for l in text.replace(chr(13), '').splitlines()]
     382            if self.output is not None:
     383                if self.realtime_trace:
     384                    self._realtime_trace(text)
     385                self.output += text
     386            if reset_target:
     387                if self.index == self.total:
     388                    self._target_command('off')
     389                else:
     390                    self._target_command('reset')
     391        finally:
     392            self._unlock()
    391393        if ok_to_kill:
    392394            self._ok_kill()
     
    394396    def capture_console(self, text):
    395397        self._lock()
    396         self._capture_console(text)
    397         self._unlock()
     398        try:
     399            self._capture_console(text)
     400        finally:
     401            self._unlock()
    398402
    399403    def exe_trace(self, flag):
  • tester/rt/report.py

    r29f9e10 ra4fbd16  
    3232# RTEMS Testing Reports
    3333#
     34
     35from __future__ import print_function
    3436
    3537import datetime
     
    148150            prefixed_output += [line[0] + ' ' + line[1]]
    149151        self.lock.acquire()
    150         if name not in self.results:
     152        try:
     153            if name not in self.results:
     154                raise error.general('test report missing: %s' % (name))
     155            if self.results[name]['end'] is not None:
     156                raise error.general('test already finished: %s' % (name))
     157            self.results[name]['end'] = datetime.datetime.now()
     158            if state is not None and state not in ['BENCHMARK',
     159                                                   'EXPECTED_FAIL',
     160                                                   'INDETERMINATE',
     161                                                   'USER_INPUT']:
     162                if version:
     163                    if 'version' not in self.config:
     164                        self.config['version'] = version
     165                    else:
     166                        if version != self.config['version']:
     167                            state = 'WRONG-VERSION'
     168                if build:
     169                    if 'build' not in self.config:
     170                        self.config['build'] = build
     171                    else:
     172                        if build != self.config['build']:
     173                            state = 'WRONG-BUILD'
     174                if tools:
     175                    if 'tools' not in self.config:
     176                        self.config['tools'] = tools
     177                    else:
     178                        if tools != self.config['tools']:
     179                            state = 'WRONG-TOOLS'
     180            if state is None or state == 'EXPECTED-PASS':
     181                if start and end:
     182                    if state is None or state == 'EXPECTED-PASS':
     183                        status = 'passed'
     184                        self.passed += 1
     185                elif timeout:
     186                    status = 'timeout'
     187                    self.timeouts += 1
     188                elif start:
     189                    if not end:
     190                        status = 'failed'
     191                        self.failed += 1
     192                else:
     193                    exe_name = path.basename(name).split('.')[0]
     194                    if exe_name in test_fail_excludes:
     195                        status = 'passed'
     196                        self.passed += 1
     197                    else:
     198                        status = 'invalid'
     199                        self.invalids += 1
     200            else:
     201                if state == 'EXPECTED_FAIL':
     202                    if start and end:
     203                        status = 'passed'
     204                        self.passed += 1
     205                    else:
     206                        status = 'expected-fail'
     207                        self.expected_fail += 1
     208                elif state == 'USER_INPUT':
     209                    status = 'user-input'
     210                    self.user_input += 1
     211                elif state == 'INDETERMINATE':
     212                    if start and end:
     213                        status = 'passed'
     214                        self.passed += 1
     215                    else:
     216                        status = 'indeterminate'
     217                        self.indeterminate += 1
     218                elif state == 'BENCHMARK':
     219                    status = 'benchmark'
     220                    self.benchmark += 1
     221                elif state == 'WRONG-VERSION':
     222                    status = 'wrong-version'
     223                    self.wrong_version += 1
     224                elif state == 'WRONG-BUILD':
     225                    status = 'wrong-build'
     226                    self.wrong_build += 1
     227                elif state == 'WRONG-TOOLS':
     228                    status = 'wrong-tools'
     229                    self.wrong_tools += 1
     230                else:
     231                    raise error.general('invalid test state: %s: %s' % (name, state))
     232            self.results[name]['result'] = status
     233            self.results[name]['output'] = prefixed_output
     234            if self.name_max_len < len(path.basename(name)):
     235                self.name_max_len = len(path.basename(name))
     236        finally:
    151237            self.lock.release()
    152             raise error.general('test report missing: %s' % (name))
    153         if self.results[name]['end'] is not None:
    154             self.lock.release()
    155             raise error.general('test already finished: %s' % (name))
    156         self.results[name]['end'] = datetime.datetime.now()
    157         if version:
    158             if 'version' not in self.config:
    159                 self.config['version'] = version
    160             else:
    161                 if version != self.config['version']:
    162                     state = 'WRONG-VERSION'
    163         if build:
    164             if 'build' not in self.config:
    165                 self.config['build'] = build
    166             else:
    167                 if build != self.config['build']:
    168                     state = 'WRONG-BUILD'
    169         if tools:
    170             if 'tools' not in self.config:
    171                 self.config['tools'] = tools
    172             else:
    173                 if tools != self.config['tools']:
    174                     state = 'WRONG-TOOLS'
    175         if state is None or state == 'EXPECTED-PASS':
    176             if start and end:
    177                 if state is None or state == 'EXPECTED-PASS':
    178                     status = 'passed'
    179                     self.passed += 1
    180             elif timeout:
    181                 status = 'timeout'
    182                 self.timeouts += 1
    183             elif start:
    184                 if not end:
    185                     status = 'failed'
    186                     self.failed += 1
    187             else:
    188                 exe_name = path.basename(name).split('.')[0]
    189                 if exe_name in test_fail_excludes:
    190                     status = 'passed'
    191                     self.passed += 1
    192                 else:
    193                     status = 'invalid'
    194                     self.invalids += 1
    195         else:
    196             if state == 'EXPECTED_FAIL':
    197                 if start and end:
    198                     status = 'passed'
    199                     self.passed += 1
    200                 else:
    201                     status = 'expected-fail'
    202                     self.expected_fail += 1
    203             elif state == 'USER_INPUT':
    204                 status = 'user-input'
    205                 self.user_input += 1
    206             elif state == 'INDETERMINATE':
    207                 if start and end:
    208                     status = 'passed'
    209                     self.passed += 1
    210                 else:
    211                     status = 'indeterminate'
    212                     self.indeterminate += 1
    213             elif state == 'BENCHMARK':
    214                 status = 'benchmark'
    215                 self.benchmark += 1
    216             elif state == 'WRONG-VERSION':
    217                 status = 'wrong-version'
    218                 self.wrong_version += 1
    219             elif state == 'WRONG-BUILD':
    220                 status = 'wrong-build'
    221                 self.wrong_build += 1
    222             elif state == 'WRONG-TOOLS':
    223                 status = 'wrong-tools'
    224                 self.wrong_tools += 1
    225             else:
    226                 raise error.general('invalid test state: %s: %s' % (name, state))
    227         self.results[name]['result'] = status
    228         self.results[name]['output'] = prefixed_output
    229         if self.name_max_len < len(path.basename(name)):
    230             self.name_max_len = len(path.basename(name))
    231         self.lock.release()
    232238        return status
    233239
Note: See TracChangeset for help on using the changeset viewer.