Changeset 30218f5 in rtems-tools


Ignore:
Timestamp:
Nov 5, 2017, 7:48:20 AM (18 months ago)
Author:
Chris Johns <chrisj@…>
Branches:
master
Children:
3a32d15
Parents:
9f34b38
git-author:
Chris Johns <chrisj@…> (11/05/17 07:48:20)
git-committer:
Chris Johns <chrisj@…> (11/11/17 05:21:52)
Message:

tester: Add reporting the RTEMS version, build and tools.

Update #3217.

Location:
tester/rt
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • tester/rt/config.py

    r9f34b38 r30218f5  
    6868        self.console_trace = self.exe_trace('console')
    6969        self.console_prefix = console_prefix
     70        self.show_header = not self.defined('test_disable_header')
    7071        self.process = None
    7172        self.console = None
     
    302303                    bsp = self.expand('%{bsp}')
    303304                    fexe = self._target_exe_filter(exe)
    304                     if self.report is not None:
    305                         self.report.start(index, total, exe, fexe, bsp_arch, bsp)
     305                    self.report.start(index, total, exe, fexe,
     306                                      bsp_arch, bsp, self.show_header)
    306307                    if self.index == 1:
    307308                        self._target_command('on', bsp_arch, bsp, exe, fexe)
     
    322323                self._target_command('posttest', bsp_arch, bsp, exe, fexe)
    323324                try:
    324                     status = ''
    325                     if self.report is not None:
    326                         status = self.report.end(exe, self.output)
    327                         self._capture_console('test result: %s' % (status))
     325                    status = self.report.end(exe, self.output, self.console_prefix)
     326                    version = self.report.get_config('version', not_found = 'n/p')
     327                    build = self.report.get_config('build', not_found = 'n/p')
     328                    tools = self.report.get_config('tools', not_found = 'n/p')
     329                    self._capture_console('test result: %s' % (status))
     330                    self._capture_console('test version: %s' % (version))
     331                    self._capture_console('test build: %s' % (build))
     332                    self._capture_console('test tools: %s' % (tools))
    328333                    if status == 'timeout':
    329334                        if self.index != self.total:
     
    337342    def _realtime_trace(self, text):
    338343        for l in text:
    339             print(l)
     344            print(''.join(l))
    340345
    341346    def run(self):
  • tester/rt/report.py

    r9f34b38 r30218f5  
    5656        self.total_len = len(str(total))
    5757        self.passed = 0
     58        self.failed = 0
    5859        self.user_input = 0
    59         self.failed = 0
    6060        self.expected_fail = 0
    6161        self.indeterminate = 0
     
    6363        self.timeouts = 0
    6464        self.invalids = 0
     65        self.wrong_version = 0
     66        self.wrong_build = 0
     67        self.wrong_tools = 0
    6568        self.results = {}
     69        self.config = {}
    6670        self.name_max_len = 0
    6771
     
    7579        msg += 'Timeout:       %*d%s' % (self.total_len, self.timeouts, os.linesep)
    7680        msg += 'Invalid:       %*d%s' % (self.total_len, self.invalids, os.linesep)
     81        msg += 'Wrong Version  %*d%s' % (self.total_len, self.wrong_version, os.linesep)
     82        msg += 'Wrong Build    %*d%s' % (self.total_len, self.wrong_build, os.linesep)
     83        msg += 'Wrong Tools    %*d%s' % (self.total_len, self.wrong_tools, os.linesep)
    7784        return msg
    7885
    79     def start(self, index, total, name, executable, bsp_arch, bsp):
    80         header = '[%*d/%*d] p:%-*d f:%-*d u:%-*d e:%-*d I:%-*d B:%-*d t:%-*d i:%-*d | %s/%s: %s' % \
     86    def start(self, index, total, name, executable, bsp_arch, bsp, show_header):
     87        header = '[%*d/%*d] p:%-*d f:%-*d u:%-*d e:%-*d I:%-*d B:%-*d ' \
     88                 't:%-*d i:%-*d W:%-*d | %s/%s: %s' % \
    8189                 (len(str(total)), index,
    8290                  len(str(total)), total,
     
    8997                  len(str(total)), self.timeouts,
    9098                  len(str(total)), self.invalids,
     99                  len(str(total)), self.wrong_version + self.wrong_build + self.wrong_tools,
    91100                  bsp_arch,
    92101                  bsp,
     
    107116
    108117        self.lock.release()
    109         log.notice(header, stdout_only = True)
    110 
    111     def end(self, name, output):
     118        if show_header:
     119            log.notice(header, stdout_only = True)
     120
     121    def end(self, name, output, output_prefix):
    112122        start = False
    113123        end = False
    114124        state = None
     125        version = None
     126        build = None
     127        tools = None
    115128        timeout = False
    116129        prefixed_output = []
    117130        for line in output:
    118             if line[0] == ']':
     131            if line[0] == output_prefix:
    119132                if line[1].startswith('*** '):
    120                     if line[1][4:].startswith('BEGIN OF '):
     133                    banner = line[1][4:]
     134                    if banner.startswith('BEGIN OF '):
    121135                        start = True
    122                     if line[1][4:].startswith('END OF '):
     136                    elif line[1][4:].startswith('END OF '):
    123137                        end = True
    124                     if line[1][4:].startswith('TEST STATE:'):
    125                         state = line[1][15:].strip()
    126                     if line[1][4:].startswith('TIMEOUT TIMEOUT'):
     138                    elif banner.startswith('TIMEOUT TIMEOUT'):
    127139                        timeout = True
     140                    elif banner.startswith('TEST VERSION:'):
     141                        version = banner[13:].strip()
     142                    elif banner.startswith('TEST STATE:'):
     143                        state = banner[11:].strip()
     144                    elif banner.startswith('TEST BUILD:'):
     145                        build = ','.join(banner[11:].strip().split(' '))
     146                    elif banner.startswith('TEST TOOLS:'):
     147                        tools = banner[11:].strip()
    128148            prefixed_output += [line[0] + ' ' + line[1]]
    129149        self.lock.acquire()
     
    135155            raise error.general('test already finished: %s' % (name))
    136156        self.results[name]['end'] = datetime.datetime.now()
    137         if state is None:
     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':
    138176            if start and end:
    139                 if state is None:
     177                if state is None or state == 'EXPECTED-PASS':
    140178                    status = 'passed'
    141179                    self.passed += 1
     
    176214                status = 'benchmark'
    177215                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
    178225            else:
    179226                raise error.general('invalid test state: %s: %s' % (name, state))
     
    186233
    187234    def log(self, name, mode):
     235        status_fails = ['failed', 'timeout', 'invalid',
     236                        'wrong-version', 'wrong-build', 'wrong-tools']
    188237        if mode != 'none':
    189238            self.lock.acquire()
     
    194243            result = self.results[name]['result']
    195244            time = self.results[name]['end'] - self.results[name]['start']
    196             failed = result in ['failed', 'timeout', 'invalid']
     245            failed = result in status_fails
    197246            result = 'Result: %-10s Time: %s %s' % (result, str(time), exe)
    198247            if mode != 'none':
     
    209258                log.output(output)
    210259
     260    def get_config(self, config, not_found = None):
     261        if config in self.config:
     262            return self.config[config]
     263        return not_found
     264
    211265    def score_card(self, mode = 'full'):
    212266        if mode == 'short':
    213             return 'Passed:%d Failed:%d Timeout:%d Invalid:%d' % (self.passed,
    214                                                                   self.failed,
    215                                                                   self.timeouts,
    216                                                                   self.invalids)
     267            wrongs = self.wrong_version + self.wrong_build + self.wrong_tools
     268            return 'Passed:%d Failed:%d Timeout:%d Invalid:%d Wrong:%d' % \
     269                (self.passed, self.failed, self.timeouts, self.invalids, wrongs)
    217270        elif mode == 'full':
    218271            l = []
     
    225278            l += ['Timeout:       %*d' % (self.total_len, self.timeouts)]
    226279            l += ['Invalid:       %*d' % (self.total_len, self.invalids)]
     280            l += ['Wrong Version: %*d' % (self.total_len, self.wrong_version)]
     281            l += ['Wrong Build:   %*d' % (self.total_len, self.wrong_build)]
     282            l += ['Wrong Tools:   %*d' % (self.total_len, self.wrong_tools)]
    227283            l += ['---------------%s' % ('-' * self.total_len)]
    228284            l += ['Total:         %*d' % (self.total_len, self.total)]
     
    259315            l += ['Invalid:']
    260316            l += show_state(self.results, 'invalid', self.name_max_len)
     317        if self.wrong_version:
     318            l += ['Wrong Version:']
     319            l += show_state(self.results, 'wrong-version', self.name_max_len)
     320        if self.wrong_build:
     321            l += ['Wrong Build:']
     322            l += show_state(self.results, 'wrong-build', self.name_max_len)
     323        if self.wrong_tools:
     324            l += ['Wrong Tools:']
     325            l += show_state(self.results, 'wrong-tools', self.name_max_len)
    261326        return os.linesep.join(l)
    262327
     
    264329        log.output()
    265330        log.notice(self.score_card())
    266         log.output()
    267331        log.output(self.failures())
  • tester/rt/run.py

    r9f34b38 r30218f5  
    144144        if len(executables) != 1:
    145145            raise error.general('one executable required, found %d' % (len(executables)))
     146        opts.defaults['test_disable_header'] = '1'
     147        reports = report.report(1)
    146148        start_time = datetime.datetime.now()
    147149        opts.defaults['exe_trace'] = debug_trace
    148         tst = test(1, 1, None, executables[0], rtems_tools, bsp, bsp_config, opts)
     150        tst = test(1, 1, reports, executables[0], rtems_tools, bsp, bsp_config, opts)
    149151        tst.run()
    150152        end_time = datetime.datetime.now()
  • tester/rt/test.py

    r9f34b38 r30218f5  
    352352            m_arch = opts.defaults.expand('%{arch}')
    353353            m_bsp = opts.defaults.expand('%{bsp}')
    354             subject = '[rtems-test] %s/%s: %s' % (m_arch,
    355                                                   m_bsp,
    356                                                   reports.score_card('short'))
     354            build = ' %s:' % (reports.get_config('build', not_found = ''))
     355            subject = '[rtems-test] %s/%s:%s %s' % (m_arch,
     356                                                    m_bsp,
     357                                                    build,
     358                                                    reports.score_card('short'))
     359            np = 'Not present in test'
     360            ver = reports.get_config('version', not_found = np)
     361            build = reports.get_config('build', not_found = np)
     362            tools = reports.get_config('tools', not_found = np)
    357363            body = [total_time, average_time,
    358364                    '', 'Host', '====', host.label(mode = 'all'),
     365                    '', 'Configuration', '=============',
     366                    'Version: %s' % (ver),
     367                    'Build  : %s' % (build),
     368                    'Tools  : %s' % (tools),
    359369                    '', 'Summary', '=======', '',
    360370                    reports.score_card(), '',
    361371                    reports.failures(),
    362                     '', 'Log', '===', ''] + output.get()
     372                    'Log', '===', ''] + output.get()
    363373            mail.send(to_addr, subject, os.linesep.join(body))
    364374
Note: See TracChangeset for help on using the changeset viewer.