diff --git a/util/test/rdtest/runner.py b/util/test/rdtest/runner.py index 63f86cec1f..8907981d94 100644 --- a/util/test/rdtest/runner.py +++ b/util/test/rdtest/runner.py @@ -30,7 +30,6 @@ def get_tests(): return testcases -RUNNER_TIMEOUT = 90 # Require output every X seconds RUNNER_DEBUG = False # Debug test runner running by printing messages to track it @@ -45,7 +44,7 @@ def _enqueue_output(process: subprocess.Popen, out, q: queue.Queue): pass -def _run_test(testclass, failedcases: list): +def _run_test(testclass, runner_timeout, failedcases: list): name = testclass.__name__ # Fork the interpreter to run the test, in case it crashes we can catch it. @@ -88,7 +87,7 @@ def _run_test(testclass, failedcases: list): print("Checking runner output...") try: - out = test_stdout.get(timeout=RUNNER_TIMEOUT) + out = test_stdout.get(timeout=runner_timeout) while not test_stdout.empty(): out += test_stdout.get_nowait() @@ -144,10 +143,10 @@ def _run_test(testclass, failedcases: list): break if out is None and err is None and test_run.poll() is None: - log.error('Timed out, no output within {}s elapsed'.format(RUNNER_TIMEOUT)) + log.error('Timed out, no output within {}s elapsed'.format(runner_timeout)) test_run.kill() test_run.communicate() - raise subprocess.TimeoutExpired(' '.join(args), RUNNER_TIMEOUT) + raise subprocess.TimeoutExpired(' '.join(args), runner_timeout) if RUNNER_DEBUG: print("Test runner has finished") @@ -189,7 +188,7 @@ def fetch_tests(): return { x[0]: (x[1] == 'True', x[2]) for x in split_tests } -def run_tests(test_include: str, test_exclude: str, in_process: bool, slow_tests: bool, debugger: bool): +def run_tests(test_include: str, test_exclude: str, in_process: bool, slow_tests: bool, debugger: bool, test_timeout: int): start_time = datetime.datetime.now(datetime.timezone.utc) rd.InitialiseReplay(rd.GlobalEnvironment(), []) @@ -348,7 +347,7 @@ def do(debugMode): if in_process: instance.invoketest(debugMode) else: - _run_test(testclass, failedcases) + _run_test(testclass, test_timeout, failedcases) if debugger: do(True) diff --git a/util/test/run_tests.py b/util/test/run_tests.py index f258980f9e..bbd72a7427 100644 --- a/util/test/run_tests.py +++ b/util/test/run_tests.py @@ -19,6 +19,8 @@ help="Run test code in the same process as test runner", action="store_true") parser.add_argument('--slow-tests', help="Run potentially slow tests", action="store_true") +parser.add_argument('--test-timeout', + help="Timeout for output from tests", default=90, type=int) parser.add_argument('--data', default=os.path.join(script_dir, "data"), help="The folder that reference data is in. Will not be modified.", type=str) parser.add_argument('--demos-binary', default="", @@ -137,4 +139,4 @@ elif args.internal_run_test is not None: rdtest.internal_run_test(args.internal_run_test) else: - rdtest.run_tests(args.test_include, args.test_exclude, args.in_process, args.slow_tests, args.debugger) + rdtest.run_tests(args.test_include, args.test_exclude, args.in_process, args.slow_tests, args.debugger, args.test_timeout)