diff --git a/test/mavsdk_tests/mavsdk_test_runner.py b/test/mavsdk_tests/mavsdk_test_runner.py index bac477e2d7d5..cff7a8862e16 100755 --- a/test/mavsdk_tests/mavsdk_test_runner.py +++ b/test/mavsdk_tests/mavsdk_test_runner.py @@ -1,8 +1,10 @@ #!/usr/bin/env python3 import argparse +import atexit import datetime import os +import psutil import subprocess import sys @@ -51,6 +53,8 @@ def start(self, config): stdout=f, stderr=f ) + atexit.register(self.stop) + def wait(self, timeout_s): try: return self.process.wait(timeout=timeout_s) @@ -58,6 +62,8 @@ def wait(self, timeout_s): self.stop() def stop(self): + atexit.unregister(self.stop) + returncode = self.process.poll() if returncode is not None: return returncode @@ -117,6 +123,21 @@ def __init__(self, workspace_dir, log_dir, config): self.log_prefix = "test_runner" +def is_everything_ready(): + result = True + for proc in psutil.process_iter(attrs=['name']): + if proc.info['name'] == 'gzserver': + print("gzserver process already running\n" + "run `killall gzserver` and try again") + result = False + elif proc.info['name'] == 'px4': + print("px4 process already running\n" + "run `killall px4` and try again") + result = False + + return result + + def main(): parser = argparse.ArgumentParser() @@ -124,6 +145,9 @@ def main(): help="Directory for log files, stdout if not provided") args = parser.parse_args() + if not is_everything_ready(): + return + for group in test_matrix: print("Running test group for '{}' with filter '{}'" .format(group['model'], group['test_filter']))