aboutsummaryrefslogtreecommitdiff
path: root/mesonbuild/scripts/meson_test.py
diff options
context:
space:
mode:
authorJussi Pakkanen <jpakkane@gmail.com>2016-10-16 21:17:04 +0300
committerJussi Pakkanen <jpakkane@gmail.com>2016-11-18 22:04:29 +0200
commitdef68cbc50efe65af1b156d2d76fc09a457500b5 (patch)
tree227c90a8f1720dfe133a4e497859b115ca0061b2 /mesonbuild/scripts/meson_test.py
parent0d619df2f38590620d0576e6736b14b1f71ce8c8 (diff)
downloadmeson-def68cbc50efe65af1b156d2d76fc09a457500b5.zip
meson-def68cbc50efe65af1b156d2d76fc09a457500b5.tar.gz
meson-def68cbc50efe65af1b156d2d76fc09a457500b5.tar.bz2
Use the same code for tests and benchmarks.
Diffstat (limited to 'mesonbuild/scripts/meson_test.py')
-rwxr-xr-xmesonbuild/scripts/meson_test.py40
1 files changed, 28 insertions, 12 deletions
diff --git a/mesonbuild/scripts/meson_test.py b/mesonbuild/scripts/meson_test.py
index 3d0d957..24b8bac 100755
--- a/mesonbuild/scripts/meson_test.py
+++ b/mesonbuild/scripts/meson_test.py
@@ -41,6 +41,10 @@ parser.add_argument('--no-stdsplit', default=True, dest='split', action='store_f
help='Do not split stderr and stdout in test logs.')
parser.add_argument('--print-errorlogs', default=False, action='store_true',
help="Whether to print faling tests' logs.")
+parser.add_argument('--logbase', default='testlog',
+ help="Base name for log file.")
+parser.add_argument('--num-processes', default=None,
+ help='How many parallel processes to use.')
parser.add_argument('args', nargs='+')
@@ -198,9 +202,30 @@ def filter_tests(suite, tests):
return tests
return [x for x in tests if suite in x.suite]
-def run_tests(datafilename):
+def determine_worker_count():
+ varname = 'MESON_TESTTHREADS'
+ if varname in os.environ:
+ try:
+ num_workers = int(os.environ[varname])
+ except ValueError:
+ print('Invalid value in %s, using 1 thread.' % varname)
+ num_workers = 1
+ else:
+ try:
+ # Fails in some weird environments such as Debian
+ # reproducible build.
+ num_workers = multiprocessing.cpu_count()
+ except Exception:
+ num_workers = 1
+ return num_workers
+
+def run_tests(datafilename, log_base, num_workers=None):
global options
- logfile_base = 'meson-logs/testlog'
+ if num_workers is None:
+ num_workers = determine_worker_count()
+ else:
+ num_workers = int(num_workers)
+ logfile_base = os.path.join('meson-logs', log_base)
if options.wrapper is None:
wrap = []
logfilename = logfile_base + '.txt'
@@ -215,15 +240,6 @@ def run_tests(datafilename):
print('No tests defined.')
return
numlen = len('%d' % len(tests))
- varname = 'MESON_TESTTHREADS'
- if varname in os.environ:
- try:
- num_workers = int(os.environ[varname])
- except ValueError:
- print('Invalid value in %s, using 1 thread.' % varname)
- num_workers = 1
- else:
- num_workers = multiprocessing.cpu_count()
executor = conc.ThreadPoolExecutor(max_workers=num_workers)
futures = []
filtered_tests = filter_tests(options.suite, tests)
@@ -265,7 +281,7 @@ def run(args):
if options.wd is not None:
os.chdir(options.wd)
datafile = options.args[0]
- logfilename = run_tests(datafile)
+ logfilename = run_tests(datafile, options.logbase, options.num_processes)
if len(collected_logs) > 0:
if len(collected_logs) > 10:
print('\nThe output from 10 first failed tests:\n')