Source code for panda.tests.safety.test_defaults

#!/usr/bin/env python3
import unittest

import panda.tests.safety.common as common

from panda import Panda
from panda.tests.libpanda import libpanda_py


[docs] class TestDefaultRxHookBase(common.PandaSafetyTest):
[docs] 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=}")
[docs] class TestNoOutput(TestDefaultRxHookBase): TX_MSGS = []
[docs] def setUp(self): self.safety = libpanda_py.libpanda self.safety.set_safety_hooks(Panda.SAFETY_NOOUTPUT, 0) self.safety.init_tests()
[docs] class TestSilent(TestNoOutput): """SILENT uses same hooks as NOOUTPUT"""
[docs] def setUp(self): self.safety = libpanda_py.libpanda self.safety.set_safety_hooks(Panda.SAFETY_SILENT, 0) self.safety.init_tests()
[docs] class TestAllOutput(TestDefaultRxHookBase): # Allow all messages TX_MSGS = [[addr, bus] for addr in common.PandaSafetyTest.SCANNED_ADDRS for bus in range(4)]
[docs] def setUp(self): self.safety = libpanda_py.libpanda self.safety.set_safety_hooks(Panda.SAFETY_ALLOUTPUT, 0) self.safety.init_tests()
[docs] 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=}")
[docs] def test_default_controls_not_allowed(self): # controls always allowed self.assertTrue(self.safety.get_controls_allowed())
[docs] def test_tx_hook_on_wrong_safety_mode(self): # No point, since we allow all messages pass
[docs] class TestAllOutputPassthrough(TestAllOutput): FWD_BLACKLISTED_ADDRS = {} FWD_BUS_LOOKUP = {0: 2, 2: 0}
[docs] def setUp(self): self.safety = libpanda_py.libpanda self.safety.set_safety_hooks(Panda.SAFETY_ALLOUTPUT, 1) self.safety.init_tests()
if __name__ == "__main__": unittest.main()