diff --git a/selfdrive/car/tests/test_models.py b/selfdrive/car/tests/test_models.py index cce5979899..a66bd180b4 100755 --- a/selfdrive/car/tests/test_models.py +++ b/selfdrive/car/tests/test_models.py @@ -21,9 +21,10 @@ from openpilot.selfdrive.car.car_helpers import FRAME_FINGERPRINT, interfaces from openpilot.selfdrive.car.honda.values import CAR as HONDA, HONDA_BOSCH from openpilot.selfdrive.car.tests.routes import non_tested_cars, routes, CarTestRoute from openpilot.selfdrive.controls.controlsd import Controls -from openpilot.selfdrive.test.helpers import read_segment_list, sanitize +from openpilot.selfdrive.test.helpers import read_segment_list from openpilot.tools.lib.openpilotci import get_url from openpilot.tools.lib.logreader import LogReader +from openpilot.tools.lib.sanitizer import sanitize from openpilot.tools.lib.route import Route, SegmentName, RouteName from panda.tests.libpanda import libpanda_py diff --git a/selfdrive/test/helpers.py b/selfdrive/test/helpers.py index af6390d749..a8b7ca0c4d 100644 --- a/selfdrive/test/helpers.py +++ b/selfdrive/test/helpers.py @@ -8,7 +8,6 @@ from openpilot.common.params import Params from openpilot.selfdrive.manager.process_config import managed_processes from openpilot.system.hardware import PC from openpilot.system.version import training_version, terms_version -from openpilot.tools.lib.logreader import LogIterable def set_params_enabled(): @@ -78,11 +77,3 @@ def read_segment_list(segment_list_path): seg_list = f.read().splitlines() return [(platform[2:], segment) for platform, segment in zip(seg_list[::2], seg_list[1::2], strict=True)] - - -# Utilities for sanitizing routes of only essential data for testing car ports and doing validation. - -PRESERVE_SERVICES = ["can", "carParams", "pandaStates", "pandaStateDEPRECATED"] - -def sanitize(lr: LogIterable) -> LogIterable: - return filter(lambda msg: msg.which() in PRESERVE_SERVICES, lr) diff --git a/tools/lib/logreader.py b/tools/lib/logreader.py index 36d099de50..c7f9f9fae0 100755 --- a/tools/lib/logreader.py +++ b/tools/lib/logreader.py @@ -12,7 +12,7 @@ import sys import urllib.parse import warnings -from typing import Iterable, Iterator, List +from typing import Iterable, Iterator, List, Type from urllib.parse import parse_qs, urlparse from cereal import log as capnp_log @@ -21,7 +21,8 @@ from openpilot.tools.lib.filereader import FileReader, file_exists from openpilot.tools.lib.helpers import RE from openpilot.tools.lib.route import Route, SegmentRange -LogIterable = Iterable[capnp._DynamicStructReader] +LogMessage = Type[capnp._DynamicStructReader] +LogIterable = Iterable[LogMessage] class _LogFileReader: diff --git a/tools/lib/sanitizer.py b/tools/lib/sanitizer.py new file mode 100644 index 0000000000..b4a97a3792 --- /dev/null +++ b/tools/lib/sanitizer.py @@ -0,0 +1,26 @@ +# Utilities for sanitizing routes of only essential data for testing car ports and doing validation. + +from openpilot.tools.lib.logreader import LogIterable, LogMessage + + +def sanitize_vin(vin: str): + # (last 6 digits of vin are serial number https://en.wikipedia.org/wiki/Vehicle_identification_number) + VIN_SENSITIVE = 6 + return vin[:-VIN_SENSITIVE] + "X" * VIN_SENSITIVE + + +def sanitize_msg(msg: LogMessage) -> LogMessage: + if msg.which() == "carParams": + msg = msg.as_builder() + msg.carParams.carVin = sanitize_vin(msg.carParams.carVin) + msg = msg.as_reader() + return msg + + +PRESERVE_SERVICES = ["can", "carParams", "pandaStates", "pandaStateDEPRECATED"] + + +def sanitize(lr: LogIterable) -> LogIterable: + filtered = filter(lambda msg: msg.which() in PRESERVE_SERVICES, lr) + sanitized = map(sanitize_msg, filtered) + return sanitized