Changeset 15a3e06 in rtems-tools


Ignore:
Timestamp:
Apr 4, 2017, 3:32:03 AM (2 years ago)
Author:
Chris Johns <chrisj@…>
Branches:
master
Children:
7d3350d
Parents:
5ca8bad
Message:

tester: Add support for expected-fail, user-input, and benchmarks.

Count the errors for the states listed and add running totals.

Kill the test process if the test state is user-input or benchmark.

Location:
tester/rt
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • tester/rt/config.py

    r5ca8bad r15a3e06  
    6767        self.name = name
    6868        self.timedout = False
     69        self.kill_good = False
    6970
    7071    def __del__(self):
     
    8485        self._unlock()
    8586        self.capture('*** TIMEOUT TIMEOUT')
     87
     88    def _ok_kill(self):
     89        self.kill_good = True
     90        try:
     91            self.process.kill()
     92        except:
     93            pass
    8694
    8795    def _dir_console(self, data):
     
    117125                                                    self._timeout))
    118126            self._lock()
    119             if ec > 0:
     127            if not self.kill_good and ec > 0:
    120128                self._error('execute failed: %s: exit-code:%d' % (' '.join(data), ec))
    121129            elif self.timedout:
     
    194202
    195203    def capture(self, text):
     204        ok_to_kill = '*** TEST STATE: USER_INPUT' in text or '*** TEST STATE: BENCHMARK' in text
    196205        text = [(']', l) for l in text.replace(chr(13), '').splitlines()]
    197206        self._lock()
     
    199208            self._realtime_trace(text)
    200209            self.output += text
     210        if ok_to_kill:
     211            self._ok_kill()
    201212        self._unlock()
    202213
     
    218229    def kill(self):
    219230        if self.process:
    220             self.process.kill()
     231            try:
     232                self.process.kill()
     233            except:
     234                pass
  • tester/rt/report.py

    r5ca8bad r15a3e06  
    4949        self.total_len = len(str(total))
    5050        self.passed = 0
     51        self.user_input = 0
    5152        self.failed = 0
     53        self.expected_fail = 0
     54        self.indeterminate = 0
     55        self.benchmark = 0
    5256        self.timeouts = 0
    5357        self.invalids = 0
    54         self.invalid_tests = 0
    5558        self.results = {}
    5659        self.name_max_len = 0
    5760
    5861    def __str__(self):
    59         msg  = 'Passed:   %*d%s' % (self.total_len, self.passed, os.linesep)
    60         msg += 'Failed:   %*d%s' % (self.total_len, self.failed, os.linesep)
    61         msg += 'Timeouts: %*d%s' % (self.total_len, self.timeouts, os.linesep)
    62         msg += 'Invalid:  %*d%s' % (self.total_len, self.invalids, os.linesep)
     62        msg  = 'Passed:        %*d%s' % (self.total_len, self.passed, os.linesep)
     63        msg += 'Failed:        %*d%s' % (self.total_len, self.failed, os.linesep)
     64        msg += 'User Input:    %*d%s' % (self.total_len, self.user_input, os.linesep)
     65        msg += 'Expected Fail: %*d%s' % (self.total_len, self.expected_fail, os.linesep)
     66        msg += 'Indeterminate: %*d%s' % (self.total_len, self.self.indeterminate, os.linesep)
     67        msg += 'Benchmark:     %*d%s' % (self.total_len, self.self.benchmark, os.linesep)
     68        msg += 'Timeout:       %*d%s' % (self.total_len, self.timeouts, os.linesep)
     69        msg += 'Invalid:       %*d%s' % (self.total_len, self.invalids, os.linesep)
    6370        return msg
    6471
    65     def set_invalid_tests(self, invalid_tests):
    66         self.invalid_tests = invalid_tests
    67 
    6872    def start(self, index, total, name, executable, bsp_arch, bsp):
    69         header = '[%*d/%*d] p:%-*d f:%-*d t:%-*d i:%-*d | %s/%s: %s' % \
     73        header = '[%*d/%*d] p:%-*d f:%-*d u:%-*d e:%-*d I:%-*d B:%-*d t:%-*d i:%-*d | %s/%s: %s' % \
    7074                 (len(str(total)), index,
    7175                  len(str(total)), total,
    7276                  len(str(total)), self.passed,
    7377                  len(str(total)), self.failed,
     78                  len(str(total)), self.user_input,
     79                  len(str(total)), self.expected_fail,
     80                  len(str(total)), self.indeterminate,
     81                  len(str(total)), self.benchmark,
    7482                  len(str(total)), self.timeouts,
    7583                  len(str(total)), self.invalids,
     
    97105        start = False
    98106        end = False
     107        state = None
    99108        timeout = False
    100109        prefixed_output = []
     
    104113                    if line[1][4:].startswith('END OF '):
    105114                        end = True
     115                    if line[1][4:].startswith('TEST STATE:'):
     116                        state = line[1][15:].strip()
    106117                    if line[1][4:].startswith('TIMEOUT TIMEOUT'):
    107118                        timeout = True
     
    117128            raise error.general('test already finished: %s' % (name))
    118129        self.results[name]['end'] = datetime.datetime.now()
    119         if start and end:
    120             status = 'passed'
    121             self.passed += 1
    122         elif timeout:
    123             status = 'timeout'
    124             self.timeouts += 1
    125         elif start:
    126             if not end:
    127                 status = 'failed'
    128                 self.failed += 1
    129         else:
    130             if self.invalid_tests and path.basename(name) in self.invalid_tests:
    131                 status = 'passed'
    132                 self.passed += 1
     130        if state is None:
     131            if start and end:
     132                if state is None:
     133                    status = 'passed'
     134                    self.passed += 1
     135            elif timeout:
     136                status = 'timeout'
     137                self.timeouts += 1
     138            elif start:
     139                if not end:
     140                    status = 'failed'
     141                    self.failed += 1
    133142            else:
    134143                status = 'invalid'
    135144                self.invalids += 1
     145        else:
     146            if state == 'EXPECTED_FAIL':
     147                if start and end:
     148                    status = 'passed'
     149                    self.passed += 1
     150                else:
     151                    status = 'expected-fail'
     152                    self.expected_fail += 1
     153            elif state == 'USER_INPUT':
     154                status = 'user-input'
     155                self.user_input += 1
     156            elif state == 'INDETERMINATE':
     157                if start and end:
     158                    status = 'passed'
     159                    self.passed += 1
     160                else:
     161                    status = 'indeterminate'
     162                    self.indeterminate += 1
     163            elif state == 'BENCHMARK':
     164                status = 'benchmark'
     165                self.benchmark += 1
     166            else:
     167                raise error.general('invalid test state: %s: %s' % (name, state))
    136168        self.results[name]['result'] = status
    137169        self.results[name]['output'] = prefixed_output
     
    151183            if mode != 'none':
    152184                header = self.results[name]['header']
    153             if mode == 'all' or result != 'passed':
     185            if mode == 'all' or result in ['failed', 'timeout', 'invalid']:
    154186                output = self.results[name]['output']
    155187            else:
     
    168200                    log.output(' %s' % (path.basename(name)))
    169201        log.output()
    170         log.notice('Passed:   %*d' % (self.total_len, self.passed))
    171         log.notice('Failed:   %*d' % (self.total_len, self.failed))
    172         log.notice('Timeouts: %*d' % (self.total_len, self.timeouts))
    173         log.notice('Invalid:  %*d' % (self.total_len, self.invalids))
    174         log.output('----------%s' % ('-' * self.total_len))
    175         log.notice('Total:    %*d' % (self.total_len, self.total))
     202        log.notice('Passed:        %*d' % (self.total_len, self.passed))
     203        log.notice('Failed:        %*d' % (self.total_len, self.failed))
     204        log.notice('User Input:    %*d' % (self.total_len, self.user_input))
     205        log.notice('Expected Fail: %*d' % (self.total_len, self.expected_fail))
     206        log.notice('Indeterminate: %*d' % (self.total_len, self.indeterminate))
     207        log.notice('Benchmark:     %*d' % (self.total_len, self.benchmark))
     208        log.notice('Timeout:       %*d' % (self.total_len, self.timeouts))
     209        log.notice('Invalid:       %*d' % (self.total_len, self.invalids))
     210        log.output('---------------%s' % ('-' * self.total_len))
     211        log.notice('Total:         %*d' % (self.total_len, self.total))
    176212        log.output()
    177213        if self.failed:
    178214            log.output('Failures:')
    179215            show_state(self.results, 'failed', self.name_max_len)
     216        if self.user_input:
     217            log.output('User Input:')
     218            show_state(self.results, 'user-input', self.name_max_len)
     219        if self.expected_fail:
     220            log.output('Expected Fail:')
     221            show_state(self.results, 'expected-fail', self.name_max_len)
     222        if self.indeterminate:
     223            log.output('Indeterminate:')
     224            show_state(self.results, 'indeterminate', self.name_max_len)
     225        if self.benchmark:
     226            log.output('Benchmark:')
     227            show_state(self.results, 'benchmark', self.name_max_len)
    180228        if self.timeouts:
    181229            log.output('Timeouts:')
  • tester/rt/test.py

    r5ca8bad r15a3e06  
    304304        total = len(executables)
    305305        reports = report.report(total)
    306         invalid_tests = opts.defaults['invalid_tests']
    307         if invalid_tests:
    308             reports.set_invalid_tests([l.strip() for l in invalid_tests.splitlines()])
    309306        reporting = 1
    310307        jobs = int(opts.jobs(opts.defaults['_ncpus']))
Note: See TracChangeset for help on using the changeset viewer.