Commit c418bf27 authored by Denis Bilenko's avatar Denis Bilenko

move report() from util.py to testrunner.py

parent 60c7bcf9
......@@ -6,9 +6,11 @@ import os
import glob
import traceback
import time
from datetime import timedelta
from multiprocessing.pool import ThreadPool
import util
from util import log
TIMEOUT = 180
......@@ -70,12 +72,12 @@ def run_many(tests, expected=None, failfast=False):
pool.join()
except KeyboardInterrupt:
try:
util.log('Waiting for currently running to finish...')
log('Waiting for currently running to finish...')
reap_all()
except KeyboardInterrupt:
pool.terminate()
util.report(total, failed, exit=False, took=time.time() - start, expected=expected)
util.log('(partial results)\n')
report(total, failed, exit=False, took=time.time() - start, expected=expected)
log('(partial results)\n')
raise
except:
traceback.print_exc()
......@@ -88,15 +90,15 @@ def run_many(tests, expected=None, failfast=False):
failed_then_succeeded = []
if NWORKERS > 1 and toretry:
util.log('\nWill retry %s failed tests sequentially:\n- %s\n', len(toretry), '\n- '.join(toretry))
log('\nWill retry %s failed tests sequentially:\n- %s\n', len(toretry), '\n- '.join(toretry))
for name, (cmd, kwargs, _ignore) in list(failed.items()):
if not util.run(cmd, buffer_output=False, **kwargs):
failed.pop(name)
failed_then_succeeded.append(name)
if failed_then_succeeded:
util.log('\n%s tests failed during concurrent run but succeeded when ran sequentially:', len(failed_then_succeeded))
util.log('- ' + '\n- '.join(failed_then_succeeded))
log('\n%s tests failed during concurrent run but succeeded when ran sequentially:', len(failed_then_succeeded))
log('- ' + '\n- '.join(failed_then_succeeded))
util.report(total, failed, took=time.time() - start, expected=expected)
......@@ -143,6 +145,66 @@ def load_list_from_file(filename):
return result
def matches(expected, command):
for line in expected:
if command.endswith(' ' + line):
return True
return False
def format_seconds(seconds):
if seconds < 20:
return '%.1fs' % seconds
seconds = str(timedelta(seconds=round(seconds)))
if seconds.startswith('0:'):
seconds = seconds[2:]
return seconds
def report(total, failed, exit=True, took=None, expected=None):
runtimelog = util.runtimelog
if runtimelog:
log('\nLongest-running tests:')
runtimelog.sort()
length = len('%.1f' % -runtimelog[0][0])
frmt = '%' + str(length) + '.1f seconds: %s'
for delta, name in runtimelog[:5]:
log(frmt, -delta, name)
if took:
took = ' in %s' % format_seconds(took)
else:
took = ''
failed_expected = []
failed_unexpected = []
if failed:
log('\n%s/%s tests failed%s', len(failed), total, took)
expected = set(expected or [])
for name in failed:
if matches(expected, name):
failed_expected.append(name)
else:
failed_unexpected.append(name)
if failed_expected:
log('\n%s/%s expected failures', len(failed_expected), total)
for name in failed_expected:
log(' - %s', name)
if failed_unexpected:
log('\n%s/%s unexpected failures', len(failed_unexpected), total)
for name in failed_unexpected:
log(' - %s', name)
else:
log('\n%s tests passed%s', total, took)
if exit:
if failed_unexpected:
sys.exit(min(100, len(failed_unexpected)))
if total <= 0:
sys.exit('No tests found.')
def main():
import optparse
parser = optparse.OptionParser()
......
......@@ -6,7 +6,6 @@ import unittest
import threading
import subprocess
import time
from datetime import timedelta
runtimelog = []
......@@ -202,65 +201,6 @@ def run(command, **kwargs):
return RunResult(result, out, name)
def matches(expected, command):
for line in expected:
if command.endswith(' ' + line):
return True
return False
def format_seconds(seconds):
if seconds < 20:
return '%.1fs' % seconds
seconds = str(timedelta(seconds=round(seconds)))
if seconds.startswith('0:'):
seconds = seconds[2:]
return seconds
def report(total, failed, exit=True, took=None, expected=None):
if runtimelog:
log('\nLongest-running tests:')
runtimelog.sort()
length = len('%.1f' % -runtimelog[0][0])
frmt = '%' + str(length) + '.1f seconds: %s'
for delta, name in runtimelog[:5]:
log(frmt, -delta, name)
if took:
took = ' in %s' % format_seconds(took)
else:
took = ''
failed_expected = []
failed_unexpected = []
if failed:
log('\n%s/%s tests failed%s', len(failed), total, took)
expected = set(expected or [])
for name in failed:
if matches(expected, name):
failed_expected.append(name)
else:
failed_unexpected.append(name)
if failed_expected:
log('\n%s/%s expected failures', len(failed_expected), total)
for name in failed_expected:
log(' - %s', name)
if failed_unexpected:
log('\n%s/%s unexpected failures', len(failed_unexpected), total)
for name in failed_unexpected:
log(' - %s', name)
else:
log('\n%s tests passed%s', total, took)
if exit:
if failed_unexpected:
sys.exit(min(100, len(failed_unexpected)))
if total <= 0:
sys.exit('No tests found.')
class TestServer(unittest.TestCase):
cwd = '../examples/'
args = []
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment