@ -9,7 +9,6 @@ from parameterized import parameterized_class
from cereal import log , car
from cereal import log , car
from common . realtime import DT_CTRL
from common . realtime import DT_CTRL
from selfdrive . boardd . boardd import can_capnp_to_can_list
from selfdrive . car . fingerprints import all_known_cars
from selfdrive . car . fingerprints import all_known_cars
from selfdrive . car . car_helpers import interfaces
from selfdrive . car . car_helpers import interfaces
from selfdrive . car . gm . values import CAR as GM
from selfdrive . car . gm . values import CAR as GM
@ -20,8 +19,7 @@ from selfdrive.test.openpilotci import get_url
from tools . lib . logreader import LogReader
from tools . lib . logreader import LogReader
from tools . lib . route import Route
from tools . lib . route import Route
from panda . tests . safety import libpandasafety_py
from panda . tests . libpanda import libpanda_py
from panda . tests . safety . common import package_can_msg
PandaType = log . PandaState . PandaType
PandaType = log . PandaState . PandaType
@ -118,7 +116,7 @@ class TestCarModelBase(unittest.TestCase):
assert self . CI
assert self . CI
# TODO: check safetyModel is in release panda build
# TODO: check safetyModel is in release panda build
self . safety = libpandasafety _py . libpandasafety
self . safety = libpanda_py . libpanda
cfg = self . CP . safetyConfigs [ - 1 ]
cfg = self . CP . safetyConfigs [ - 1 ]
set_status = self . safety . set_safety_hooks ( cfg . safetyModel . raw , cfg . safetyParam )
set_status = self . safety . set_safety_hooks ( cfg . safetyModel . raw , cfg . safetyParam )
@ -192,7 +190,7 @@ class TestCarModelBase(unittest.TestCase):
if msg . src > = 64 :
if msg . src > = 64 :
continue
continue
to_send = package_can_msg ( [ msg . address , 0 , msg . dat , msg . src % 4 ] )
to_send = libpanda_py . make_CANPacket ( msg . address , msg . src % 4 , msg . dat )
if self . safety . safety_rx_hook ( to_send ) != 1 :
if self . safety . safety_rx_hook ( to_send ) != 1 :
failed_addrs [ hex ( msg . address ) ] + = 1
failed_addrs [ hex ( msg . address ) ] + = 1
@ -215,8 +213,8 @@ class TestCarModelBase(unittest.TestCase):
# warm up pass, as initial states may be different
# warm up pass, as initial states may be different
for can in self . can_msgs [ : 300 ] :
for can in self . can_msgs [ : 300 ] :
self . CI . update ( CC , ( can . as_builder ( ) . to_bytes ( ) , ) )
self . CI . update ( CC , ( can . as_builder ( ) . to_bytes ( ) , ) )
for msg in can_capnp_to_can_list ( can . can , src_filter = range ( 64 ) ) :
for msg in filter ( lambda m : m . src in range ( 64 ) , can . can ) :
to_send = package_can_msg ( msg )
to_send = libpanda_py . make_CANPacket ( msg . address , msg . src , msg . dat )
self . safety . safety_rx_hook ( to_send )
self . safety . safety_rx_hook ( to_send )
controls_allowed_prev = False
controls_allowed_prev = False
@ -224,10 +222,8 @@ class TestCarModelBase(unittest.TestCase):
checks = defaultdict ( lambda : 0 )
checks = defaultdict ( lambda : 0 )
for idx , can in enumerate ( self . can_msgs ) :
for idx , can in enumerate ( self . can_msgs ) :
CS = self . CI . update ( CC , ( can . as_builder ( ) . to_bytes ( ) , ) )
CS = self . CI . update ( CC , ( can . as_builder ( ) . to_bytes ( ) , ) )
for msg in can_capnp_to_can_list ( can . can , src_filter = range ( 64 ) ) :
for msg in filter ( lambda m : m . src in range ( 64 ) , can . can ) :
msg = list ( msg )
to_send = libpanda_py . make_CANPacket ( msg . address , msg . src % 4 , msg . dat )
msg [ 3 ] % = 4
to_send = package_can_msg ( msg )
ret = self . safety . safety_rx_hook ( to_send )
ret = self . safety . safety_rx_hook ( to_send )
self . assertEqual ( 1 , ret , f " safety rx failed ( { ret =} ): { to_send } " )
self . assertEqual ( 1 , ret , f " safety rx failed ( { ret =} ): { to_send } " )