summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--tester/rt/report.py68
-rw-r--r--tester/rt/test.py41
2 files changed, 79 insertions, 30 deletions
diff --git a/tester/rt/report.py b/tester/rt/report.py
index 97eb80f..1a7d8ba 100644
--- a/tester/rt/report.py
+++ b/tester/rt/report.py
@@ -208,41 +208,53 @@ class report(object):
log.output(result)
log.output(output)
- def summary(self):
+ def score_card(self):
+ l = []
+ l += ['Passed: %*d' % (self.total_len, self.passed)]
+ l += ['Failed: %*d' % (self.total_len, self.failed)]
+ l += ['User Input: %*d' % (self.total_len, self.user_input)]
+ l += ['Expected Fail: %*d' % (self.total_len, self.expected_fail)]
+ l += ['Indeterminate: %*d' % (self.total_len, self.indeterminate)]
+ l += ['Benchmark: %*d' % (self.total_len, self.benchmark)]
+ l += ['Timeout: %*d' % (self.total_len, self.timeouts)]
+ l += ['Invalid: %*d' % (self.total_len, self.invalids)]
+ l += ['---------------%s' % ('-' * self.total_len)]
+ l += ['Total: %*d' % (self.total_len, self.total)]
+ return os.linesep.join(l)
+
+ def failures(self):
def show_state(results, state, max_len):
+ l = []
for name in results:
if results[name]['result'] == state:
- log.output(' %s' % (path.basename(name)))
- log.output()
- log.notice('Passed: %*d' % (self.total_len, self.passed))
- log.notice('Failed: %*d' % (self.total_len, self.failed))
- log.notice('User Input: %*d' % (self.total_len, self.user_input))
- log.notice('Expected Fail: %*d' % (self.total_len, self.expected_fail))
- log.notice('Indeterminate: %*d' % (self.total_len, self.indeterminate))
- log.notice('Benchmark: %*d' % (self.total_len, self.benchmark))
- log.notice('Timeout: %*d' % (self.total_len, self.timeouts))
- log.notice('Invalid: %*d' % (self.total_len, self.invalids))
- log.output('---------------%s' % ('-' * self.total_len))
- log.notice('Total: %*d' % (self.total_len, self.total))
- log.output()
+ l += [' %s' % (path.basename(name))]
+ return l
+ l = []
if self.failed:
- log.output('Failures:')
- show_state(self.results, 'failed', self.name_max_len)
+ l += ['Failures:']
+ l += show_state(self.results, 'failed', self.name_max_len)
if self.user_input:
- log.output('User Input:')
- show_state(self.results, 'user-input', self.name_max_len)
+ l += ['User Input:']
+ l += show_state(self.results, 'user-input', self.name_max_len)
if self.expected_fail:
- log.output('Expected Fail:')
- show_state(self.results, 'expected-fail', self.name_max_len)
+ l += ['Expected Fail:']
+ l += show_state(self.results, 'expected-fail', self.name_max_len)
if self.indeterminate:
- log.output('Indeterminate:')
- show_state(self.results, 'indeterminate', self.name_max_len)
+ l += ['Indeterminate:']
+ l += show_state(self.results, 'indeterminate', self.name_max_len)
if self.benchmark:
- log.output('Benchmark:')
- show_state(self.results, 'benchmark', self.name_max_len)
+ l += ['Benchmark:']
+ l += show_state(self.results, 'benchmark', self.name_max_len)
if self.timeouts:
- log.output('Timeouts:')
- show_state(self.results, 'timeout', self.name_max_len)
+ l += ['Timeouts:']
+ l += show_state(self.results, 'timeout', self.name_max_len)
if self.invalids:
- log.output('Invalid:')
- show_state(self.results, 'invalid', self.name_max_len)
+ l += ['Invalid:']
+ l += show_state(self.results, 'invalid', self.name_max_len)
+ return os.linesep.join(l)
+
+ def summary(self):
+ log.output()
+ log.notice(self.score_card())
+ log.output()
+ log.output(self.failures())
diff --git a/tester/rt/test.py b/tester/rt/test.py
index 8a1eb9c..c67bb54 100644
--- a/tester/rt/test.py
+++ b/tester/rt/test.py
@@ -41,6 +41,7 @@ import time
from rtemstoolkit import error
from rtemstoolkit import log
from rtemstoolkit import path
+from rtemstoolkit import mailer
from rtemstoolkit import reraise
from rtemstoolkit import stacktraces
from rtemstoolkit import version
@@ -51,6 +52,20 @@ from . import console
from . import options
from . import report
+class log_capture(object):
+ def __init__(self):
+ self.log = []
+ log.capture = self.capture
+
+ def __str__(self):
+ return os.linesep.join(self.log)
+
+ def capture(self, text):
+ self.log += [l for l in text.replace(chr(13), '').splitlines()]
+
+ def get(self):
+ return self.log
+
class test(object):
def __init__(self, index, total, report, executable, rtems_tools, bsp, bsp_config, opts):
self.index = index
@@ -201,9 +216,15 @@ def run(command_path = None):
'--filter': 'Glob that executables must match to run (default: ' +
default_exefilter + ')',
'--stacktrace': 'Dump a stack trace on a user termination (^C)' }
+ mailer.append_options(optargs)
opts = options.load(sys.argv,
optargs = optargs,
command_path = command_path)
+ mail = None
+ output = None
+ if opts.find_arg('--mail'):
+ mail = mailer.mail(opts)
+ output = log_capture()
log.notice('RTEMS Testing - Tester, %s' % (version.str()))
if opts.find_arg('--list-bsps'):
bsps.list(opts)
@@ -303,8 +324,24 @@ def run(command_path = None):
report_finished(reports, report_mode, -1, finished, job_trace)
reports.summary()
end_time = datetime.datetime.now()
- log.notice('Average test time: %s' % (str((end_time - start_time) / total)))
- log.notice('Testing time : %s' % (str(end_time - start_time)))
+ average_time = 'Average test time: %s' % (str((end_time - start_time) / total))
+ total_time = 'Testing time : %s' % (str(end_time - start_time))
+ log.notice(average_time)
+ log.notice(total_time)
+ if mail is not None and output is not None:
+ to_addr = opts.find_arg('--mail-to')
+ if to_addr:
+ to_addr = to_addr[1]
+ else:
+ to_addr = 'build@rtems.org'
+ subject = '[rtems-test] %s: %s' % (str(start_time).split('.')[0], bsp)
+ body = [total_time, average_time,
+ '', 'Summary', '=======', '',
+ reports.score_card(), '',
+ reports.failures(),
+ '', 'Log', '===', ''] + output.get()
+ mail.send(to_addr, subject, os.linesep.join(body))
+
except error.general as gerr:
print(gerr)
sys.exit(1)