diff --git a/validate/launcher/apps/gstcheck.py b/validate/launcher/apps/gstcheck.py index 7cd5a9445e..8b29fb8cf3 100644 --- a/validate/launcher/apps/gstcheck.py +++ b/validate/launcher/apps/gstcheck.py @@ -372,6 +372,7 @@ class GstCheckTestsManager(MesonTestsManager): to_inspect.append(test) if to_inspect: + assert self.options.num_jobs >= 0 executor = conc.ThreadPoolExecutor( max_workers=self.options.num_jobs) tmp = [] diff --git a/validate/launcher/baseclasses.py b/validate/launcher/baseclasses.py index 67c48425a7..00832bc89a 100644 --- a/validate/launcher/baseclasses.py +++ b/validate/launcher/baseclasses.py @@ -2091,7 +2091,8 @@ class _TestsLauncher(Loggable): else: alone_tests.append(test) - max_num_jobs = min(self.options.num_jobs, len(tests)) + # use max to defend against the case where all tests are alone_tests + max_num_jobs = max(min(self.options.num_jobs, len(tests)), 1) jobs_running = 0 if self.options.forever and len(tests) < self.options.num_jobs and len(tests): diff --git a/validate/launcher/main.py b/validate/launcher/main.py index 9214b80c89..745a7740d1 100644 --- a/validate/launcher/main.py +++ b/validate/launcher/main.py @@ -181,6 +181,13 @@ class PrintUsage(argparse.Action): parser.exit() +def _positive_integer_type(value): + cast = int(value) + if cast <= 0: + raise argparse.ArgumentTypeError(f'`{value}\' is not a positive integer') + return cast + + class LauncherConfig(Loggable): def __init__(self): @@ -210,7 +217,7 @@ class LauncherConfig(Loggable): self.logsdir = None self.privatedir = None self.redirect_logs = False - self.num_jobs = int(multiprocessing.cpu_count() / 2) + self.num_jobs = max(multiprocessing.cpu_count(), 1) self.dest = None self._using_default_paths = False # paths passed with --media-path, and not defined by a testsuite @@ -543,8 +550,8 @@ class LauncherConfig(Loggable): help="Redirect logs to stdout.") dir_group.add_argument("-j", "--jobs", dest="num_jobs", help="Number of tests to execute simultaneously" - " (Defaults to number of cores of the processor)", - type=int) + " (Defaults to the number of cores of the processor)", + type=_positive_integer_type) dir_group.add_argument("--ignore-numfailures", dest="ignore_numfailures", help="Ignore the number of failed test in exit code", default=False, action='store_true')