diff --git a/test/mavsdk_tests/mavsdk_test_runner.py b/test/mavsdk_tests/mavsdk_test_runner.py index 33b186cf39..9f0a5be8b7 100755 --- a/test/mavsdk_tests/mavsdk_test_runner.py +++ b/test/mavsdk_tests/mavsdk_test_runner.py @@ -415,10 +415,21 @@ class Tester: self.verbose) self.active_runners.append(mavsdk_tests_runner) + abort = False for runner in self.active_runners: runner.set_log_filename( self.determine_logfile_path(log_dir, runner.name)) - runner.start() + try: + runner.start() + except TimeoutError: + abort = True + print("A timeout happened for runner: {}" + .format(runner.name)) + break + + if abort: + self.stop_runners() + sys.exit(1) def stop_runners(self) -> None: for runner in self.active_runners: diff --git a/test/mavsdk_tests/process_helper.py b/test/mavsdk_tests/process_helper.py index 3e286d572b..27c305063b 100644 --- a/test/mavsdk_tests/process_helper.py +++ b/test/mavsdk_tests/process_helper.py @@ -8,7 +8,7 @@ import subprocess import threading import pathlib import errno -from typing import Dict, List, TextIO, Optional +from typing import Any, Dict, List, TextIO, Optional class Runner: @@ -32,6 +32,7 @@ class Runner: self.log_dir = log_dir self.log_filename = "" self.wait_until_complete = False + self.stop_thread: Any[threading.Event] = None def set_log_filename(self, log_filename: str) -> None: self.log_filename = log_filename @@ -97,6 +98,9 @@ class Runner: def stop(self) -> int: atexit.unregister(self.stop) + if not self.stop_thread: + return 0 + self.stop_thread.set() returncode = self.process.poll()