|
|
|
@ -15,6 +15,7 @@ import watch_dirs |
|
|
|
|
class SimpleConfig(object): |
|
|
|
|
def __init__(self, config): |
|
|
|
|
self.build_config = config |
|
|
|
|
self.maxjobs = 32 * multiprocessing.cpu_count() |
|
|
|
|
|
|
|
|
|
def run_command(self, binary): |
|
|
|
|
return [binary] |
|
|
|
@ -22,17 +23,20 @@ class SimpleConfig(object): |
|
|
|
|
|
|
|
|
|
# ValgrindConfig: compile with some CONFIG=config, but use valgrind to run |
|
|
|
|
class ValgrindConfig(object): |
|
|
|
|
def __init__(self, config): |
|
|
|
|
def __init__(self, config, tool): |
|
|
|
|
self.build_config = config |
|
|
|
|
self.tool = tool |
|
|
|
|
self.maxjobs = 4 * multiprocessing.cpu_count() |
|
|
|
|
|
|
|
|
|
def run_command(self, binary): |
|
|
|
|
return ['valgrind', binary] |
|
|
|
|
return ['valgrind', binary, '--tool=%s' % self.tool] |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# SanConfig: compile with CONFIG=config, filter out incompatible binaries |
|
|
|
|
class SanConfig(object): |
|
|
|
|
def __init__(self, config): |
|
|
|
|
self.build_config = config |
|
|
|
|
self.maxjobs = 16 * multiprocessing.cpu_count() |
|
|
|
|
|
|
|
|
|
def run_command(self, binary): |
|
|
|
|
if '_ssl_' in binary: |
|
|
|
@ -47,7 +51,8 @@ _CONFIGS = { |
|
|
|
|
'msan': SanConfig('msan'), |
|
|
|
|
'asan': SanConfig('asan'), |
|
|
|
|
'gcov': SimpleConfig('gcov'), |
|
|
|
|
'valgrind': ValgrindConfig('dbg'), |
|
|
|
|
'memcheck': ValgrindConfig('dbg', 'memcheck'), |
|
|
|
|
'helgrind': ValgrindConfig('dbg', 'helgrind') |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -91,15 +96,18 @@ def _build_and_run(check_cancelled): |
|
|
|
|
return 1 |
|
|
|
|
|
|
|
|
|
# run all the tests |
|
|
|
|
if not jobset.run(itertools.ifilter( |
|
|
|
|
lambda x: x is not None, ( |
|
|
|
|
config.run_command(x) |
|
|
|
|
for config in run_configs |
|
|
|
|
for filt in filters |
|
|
|
|
for x in itertools.chain.from_iterable(itertools.repeat( |
|
|
|
|
glob.glob('bins/%s/%s_test' % ( |
|
|
|
|
config.build_config, filt)), |
|
|
|
|
runs_per_test)))), check_cancelled): |
|
|
|
|
if not jobset.run( |
|
|
|
|
itertools.ifilter( |
|
|
|
|
lambda x: x is not None, ( |
|
|
|
|
config.run_command(x) |
|
|
|
|
for config in run_configs |
|
|
|
|
for filt in filters |
|
|
|
|
for x in itertools.chain.from_iterable(itertools.repeat( |
|
|
|
|
glob.glob('bins/%s/%s_test' % ( |
|
|
|
|
config.build_config, filt)), |
|
|
|
|
runs_per_test)))), |
|
|
|
|
check_cancelled, |
|
|
|
|
maxjobs=min(c.maxjobs for c in run_configs)): |
|
|
|
|
return 2 |
|
|
|
|
|
|
|
|
|
return 0 |
|
|
|
|