#!/usr/bin/env python3 import os import signal import subprocess import time import unittest from common.basedir import BASEDIR from common.timeout import Timeout from selfdrive.test.openpilotci import get_url class TestPlotJuggler(unittest.TestCase): def test_install(self): exit_code = os.system(os.path.join(BASEDIR, "tools/plotjuggler/install.sh")) self.assertEqual(exit_code, 0) def test_run(self): test_url = get_url("ffccc77938ddbc44|2021-01-04--16-55-41", 0) # Launch PlotJuggler with the executable in the bin directory os.environ["PLOTJUGGLER_PATH"] = f'{os.path.join(BASEDIR, "tools/plotjuggler/bin/plotjuggler")}' p = subprocess.Popen(f'QT_QPA_PLATFORM=offscreen {os.path.join(BASEDIR, "tools/plotjuggler/juggle.py")} \ "{test_url}"', stderr=subprocess.PIPE, shell=True, start_new_session=True) # Wait max 60 seconds for the "Done reading Rlog data" signal from the plugin output = "\n" with Timeout(120, error_msg=output): while output.splitlines()[-1] != "Done reading Rlog data": output += p.stderr.readline().decode("utf-8") # ensure plotjuggler didn't crash after exiting the plugin time.sleep(15) self.assertEqual(p.poll(), None) os.killpg(os.getpgid(p.pid), signal.SIGTERM) if __name__ == "__main__": unittest.main()