From 25247f09ba9560d1fe4a03ae6274fcbb093d704b Mon Sep 17 00:00:00 2001 From: firestar5683 <168790843+firestar5683@users.noreply.github.com> Date: Mon, 2 Nov 2026 09:17:59 -0600 Subject: [PATCH] Test Radar Publication Fault Semantics --- .../car/tests/test_radar_validity.py | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 openpilot/selfdrive/car/tests/test_radar_validity.py diff --git a/openpilot/selfdrive/car/tests/test_radar_validity.py b/openpilot/selfdrive/car/tests/test_radar_validity.py new file mode 100644 index 0000000000..e079a13129 --- /dev/null +++ b/openpilot/selfdrive/car/tests/test_radar_validity.py @@ -0,0 +1,30 @@ +from itertools import product +from types import SimpleNamespace +from unittest.mock import Mock + +import pytest + +from opendbc.car.structs import car +from openpilot.selfdrive.car.card import Car + + +@pytest.mark.parametrize("can_error,radar_fault,wrong_config,unavailable", list(product((False, True), repeat=4))) +def test_radar_publication_retains_faults(can_error, radar_fault, wrong_config, unavailable): + rd = car.RadarData() + rd.errors.canError = can_error + rd.errors.radarFault = radar_fault + rd.errors.wrongConfig = wrong_config + rd.errors.radarUnavailableTemporary = unavailable + owner = SimpleNamespace(pm=SimpleNamespace(send=Mock())) + Car.radar_publish(owner, rd) + owner.pm.send.assert_called_once() + service, message = owner.pm.send.call_args.args + assert service == 'radarTracks' + assert message.valid == (not can_error) + assert message.radarTracks.to_dict() == rd.to_dict() + + +def test_no_completed_radar_batch_does_not_publish(): + owner = SimpleNamespace(pm=SimpleNamespace(send=Mock())) + Car.radar_publish(owner, None) + owner.pm.send.assert_not_called()