You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
74 lines
2.1 KiB
74 lines
2.1 KiB
#!/usr/bin/env python3
|
|
import unittest
|
|
|
|
import opendbc.safety.tests.common as common
|
|
from opendbc.car.structs import CarParams
|
|
from opendbc.safety.tests.libsafety import libsafety_py
|
|
|
|
|
|
class TestDefaultRxHookBase(common.PandaSafetyTest):
|
|
FWD_BUS_LOOKUP = {}
|
|
|
|
def test_rx_hook(self):
|
|
# default rx hook allows all msgs
|
|
for bus in range(4):
|
|
for addr in self.SCANNED_ADDRS:
|
|
self.assertTrue(self._rx(common.make_msg(bus, addr, 8)), f"failed RX {addr=}")
|
|
|
|
|
|
class TestNoOutput(TestDefaultRxHookBase):
|
|
TX_MSGS = []
|
|
|
|
def setUp(self):
|
|
self.safety = libsafety_py.libsafety
|
|
self.safety.set_safety_hooks(CarParams.SafetyModel.noOutput, 0)
|
|
self.safety.init_tests()
|
|
|
|
|
|
class TestSilent(TestNoOutput):
|
|
"""SILENT uses same hooks as NOOUTPUT"""
|
|
|
|
def setUp(self):
|
|
self.safety = libsafety_py.libsafety
|
|
self.safety.set_safety_hooks(CarParams.SafetyModel.silent, 0)
|
|
self.safety.init_tests()
|
|
|
|
|
|
class TestAllOutput(TestDefaultRxHookBase):
|
|
# Allow all messages
|
|
TX_MSGS = [[addr, bus] for addr in common.PandaSafetyTest.SCANNED_ADDRS
|
|
for bus in range(4)]
|
|
|
|
def setUp(self):
|
|
self.safety = libsafety_py.libsafety
|
|
self.safety.set_safety_hooks(CarParams.SafetyModel.allOutput, 0)
|
|
self.safety.init_tests()
|
|
|
|
def test_spam_can_buses(self):
|
|
# asserts tx allowed for all scanned addrs
|
|
for bus in range(4):
|
|
for addr in self.SCANNED_ADDRS:
|
|
should_tx = [addr, bus] in self.TX_MSGS
|
|
self.assertEqual(should_tx, self._tx(common.make_msg(bus, addr, 8)), f"allowed TX {addr=} {bus=}")
|
|
|
|
def test_default_controls_not_allowed(self):
|
|
# controls always allowed
|
|
self.assertTrue(self.safety.get_controls_allowed())
|
|
|
|
def test_tx_hook_on_wrong_safety_mode(self):
|
|
# No point, since we allow all messages
|
|
pass
|
|
|
|
|
|
class TestAllOutputPassthrough(TestAllOutput):
|
|
FWD_BLACKLISTED_ADDRS = {}
|
|
FWD_BUS_LOOKUP = {0: 2, 2: 0}
|
|
|
|
def setUp(self):
|
|
self.safety = libsafety_py.libsafety
|
|
self.safety.set_safety_hooks(CarParams.SafetyModel.allOutput, 1)
|
|
self.safety.init_tests()
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|
|
|