Changeset 89e8c2a in rtems-tools


Ignore:
Timestamp:
Oct 11, 2017, 7:13:47 PM (20 months ago)
Author:
Chris Johns <chrisj@…>
Branches:
master
Children:
5e40b4a
Parents:
fce29b0
Message:

tester: Add support to email results.

Location:
tester/rt
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • tester/rt/report.py

    rfce29b0 r89e8c2a  
    209209                log.output(output)
    210210
    211     def summary(self):
     211    def score_card(self):
     212        l = []
     213        l += ['Passed:        %*d' % (self.total_len, self.passed)]
     214        l += ['Failed:        %*d' % (self.total_len, self.failed)]
     215        l += ['User Input:    %*d' % (self.total_len, self.user_input)]
     216        l += ['Expected Fail: %*d' % (self.total_len, self.expected_fail)]
     217        l += ['Indeterminate: %*d' % (self.total_len, self.indeterminate)]
     218        l += ['Benchmark:     %*d' % (self.total_len, self.benchmark)]
     219        l += ['Timeout:       %*d' % (self.total_len, self.timeouts)]
     220        l += ['Invalid:       %*d' % (self.total_len, self.invalids)]
     221        l += ['---------------%s' % ('-' * self.total_len)]
     222        l += ['Total:         %*d' % (self.total_len, self.total)]
     223        return os.linesep.join(l)
     224
     225    def failures(self):
    212226        def show_state(results, state, max_len):
     227            l = []
    213228            for name in results:
    214229                if results[name]['result'] == state:
    215                     log.output(' %s' % (path.basename(name)))
     230                    l += [' %s' % (path.basename(name))]
     231            return l
     232        l = []
     233        if self.failed:
     234            l += ['Failures:']
     235            l += show_state(self.results, 'failed', self.name_max_len)
     236        if self.user_input:
     237            l += ['User Input:']
     238            l += show_state(self.results, 'user-input', self.name_max_len)
     239        if self.expected_fail:
     240            l += ['Expected Fail:']
     241            l += show_state(self.results, 'expected-fail', self.name_max_len)
     242        if self.indeterminate:
     243            l += ['Indeterminate:']
     244            l += show_state(self.results, 'indeterminate', self.name_max_len)
     245        if self.benchmark:
     246            l += ['Benchmark:']
     247            l += show_state(self.results, 'benchmark', self.name_max_len)
     248        if self.timeouts:
     249            l += ['Timeouts:']
     250            l += show_state(self.results, 'timeout', self.name_max_len)
     251        if self.invalids:
     252            l += ['Invalid:']
     253            l += show_state(self.results, 'invalid', self.name_max_len)
     254        return os.linesep.join(l)
     255
     256    def summary(self):
    216257        log.output()
    217         log.notice('Passed:        %*d' % (self.total_len, self.passed))
    218         log.notice('Failed:        %*d' % (self.total_len, self.failed))
    219         log.notice('User Input:    %*d' % (self.total_len, self.user_input))
    220         log.notice('Expected Fail: %*d' % (self.total_len, self.expected_fail))
    221         log.notice('Indeterminate: %*d' % (self.total_len, self.indeterminate))
    222         log.notice('Benchmark:     %*d' % (self.total_len, self.benchmark))
    223         log.notice('Timeout:       %*d' % (self.total_len, self.timeouts))
    224         log.notice('Invalid:       %*d' % (self.total_len, self.invalids))
    225         log.output('---------------%s' % ('-' * self.total_len))
    226         log.notice('Total:         %*d' % (self.total_len, self.total))
     258        log.notice(self.score_card())
    227259        log.output()
    228         if self.failed:
    229             log.output('Failures:')
    230             show_state(self.results, 'failed', self.name_max_len)
    231         if self.user_input:
    232             log.output('User Input:')
    233             show_state(self.results, 'user-input', self.name_max_len)
    234         if self.expected_fail:
    235             log.output('Expected Fail:')
    236             show_state(self.results, 'expected-fail', self.name_max_len)
    237         if self.indeterminate:
    238             log.output('Indeterminate:')
    239             show_state(self.results, 'indeterminate', self.name_max_len)
    240         if self.benchmark:
    241             log.output('Benchmark:')
    242             show_state(self.results, 'benchmark', self.name_max_len)
    243         if self.timeouts:
    244             log.output('Timeouts:')
    245             show_state(self.results, 'timeout', self.name_max_len)
    246         if self.invalids:
    247             log.output('Invalid:')
    248             show_state(self.results, 'invalid', self.name_max_len)
     260        log.output(self.failures())
  • tester/rt/test.py

    rfce29b0 r89e8c2a  
    4242from rtemstoolkit import log
    4343from rtemstoolkit import path
     44from rtemstoolkit import mailer
    4445from rtemstoolkit import reraise
    4546from rtemstoolkit import stacktraces
     
    5152from . import options
    5253from . import report
     54
     55class log_capture(object):
     56    def __init__(self):
     57        self.log = []
     58        log.capture = self.capture
     59
     60    def __str__(self):
     61        return os.linesep.join(self.log)
     62
     63    def capture(self, text):
     64        self.log += [l for l in text.replace(chr(13), '').splitlines()]
     65
     66    def get(self):
     67        return self.log
    5368
    5469class test(object):
     
    202217                              default_exefilter + ')',
    203218                    '--stacktrace':  'Dump a stack trace on a user termination (^C)' }
     219        mailer.append_options(optargs)
    204220        opts = options.load(sys.argv,
    205221                            optargs = optargs,
    206222                            command_path = command_path)
     223        mail = None
     224        output = None
     225        if opts.find_arg('--mail'):
     226            mail = mailer.mail(opts)
     227            output = log_capture()
    207228        log.notice('RTEMS Testing - Tester, %s' % (version.str()))
    208229        if opts.find_arg('--list-bsps'):
     
    304325        reports.summary()
    305326        end_time = datetime.datetime.now()
    306         log.notice('Average test time: %s' % (str((end_time - start_time) / total)))
    307         log.notice('Testing time     : %s' % (str(end_time - start_time)))
     327        average_time = 'Average test time: %s' % (str((end_time - start_time) / total))
     328        total_time = 'Testing time     : %s' % (str(end_time - start_time))
     329        log.notice(average_time)
     330        log.notice(total_time)
     331        if mail is not None and output is not None:
     332            to_addr = opts.find_arg('--mail-to')
     333            if to_addr:
     334                to_addr = to_addr[1]
     335            else:
     336                to_addr = 'build@rtems.org'
     337            subject = '[rtems-test] %s: %s' % (str(start_time).split('.')[0], bsp)
     338            body = [total_time, average_time,
     339                    '', 'Summary', '=======', '',
     340                    reports.score_card(), '',
     341                    reports.failures(),
     342                    '', 'Log', '===', ''] + output.get()
     343            mail.send(to_addr, subject, os.linesep.join(body))
     344
    308345    except error.general as gerr:
    309346        print(gerr)
Note: See TracChangeset for help on using the changeset viewer.