#!/usr/bin/env python3 # type: ignore import subprocess import os import sys import argparse import tempfile from selfdrive.locationd.test.ubloxd_py_test import parser_test from selfdrive.locationd.test.ubloxd_regression_test import compare_results def mkdirs_exists_ok(path): try: os.makedirs(path) except OSError: if not os.path.isdir(path): raise def main(args): cur_dir = os.path.dirname(os.path.realpath(__file__)) ubloxd_dir = os.path.join(cur_dir, '../') cc_output_dir = os.path.join(args.output_dir, 'cc') mkdirs_exists_ok(cc_output_dir) py_output_dir = os.path.join(args.output_dir, 'py') mkdirs_exists_ok(py_output_dir) archive_file = os.path.join(cur_dir, args.stream_gz_file) try: print('Extracting stream file') subprocess.check_call(['tar', 'zxf', archive_file], cwd=tempfile.gettempdir()) stream_file_path = os.path.join(tempfile.gettempdir(), 'ubloxRaw.stream') if not os.path.isfile(stream_file_path): print('Extract file failed') sys.exit(-3) print('Run regression test - CC parser...') if args.valgrind: subprocess.check_call(["valgrind", "--leak-check=full", os.path.join(ubloxd_dir, 'ubloxd_test'), stream_file_path, cc_output_dir]) else: subprocess.check_call([os.path.join(ubloxd_dir, 'ubloxd_test'), stream_file_path, cc_output_dir]) print('Running regression test - py parser...') parser_test(stream_file_path, py_output_dir) print('Running regression test - compare result...') r = compare_results(cc_output_dir, py_output_dir) print('All done!') subprocess.check_call(["rm", stream_file_path]) subprocess.check_call(["rm", '-rf', cc_output_dir]) subprocess.check_call(["rm", '-rf', py_output_dir]) sys.exit(r) except subprocess.CalledProcessError as e: print('CI test failed with {}'.format(e.returncode)) sys.exit(e.returncode) if __name__ == "__main__": parser = argparse.ArgumentParser(description="Ubloxd CI test", formatter_class=argparse.ArgumentDefaultsHelpFormatter) parser.add_argument("stream_gz_file", nargs='?', default='ubloxRaw.tar.gz', help="UbloxRaw data stream zip file") parser.add_argument("output_dir", nargs='?', default='out', help="Output events temp directory") parser.add_argument("--valgrind", default=False, action='store_true', help="Run in valgrind") args = parser.parse_args() main(args)