no more multi can msgs

pull/30443/head
Shane Smiskol 2 years ago
parent 012e7b94cb
commit 0d6c50f606
  1. 2
      opendbc
  2. 2
      panda
  3. 35
      selfdrive/car/tests/test_models.py

@ -1 +1 @@
Subproject commit f3eaf877a65f5323d431ec434d19c83f2e1ffea6 Subproject commit ceea5a4bcb11b2c05f8fa8a291c6ad8127f194c4

@ -1 +1 @@
Subproject commit 0f40708e248121ff0843a753081c618e919760c2 Subproject commit 7fcc5b8dadbd44f253068dffd4b7f9e43ec05c5a

@ -192,7 +192,7 @@ class TestCarModelBase(unittest.TestCase):
suppress_health_check=[HealthCheck.filter_too_much, HealthCheck.too_slow, HealthCheck.large_base_example], suppress_health_check=[HealthCheck.filter_too_much, HealthCheck.too_slow, HealthCheck.large_base_example],
) )
@given(data=st.data()) @given(data=st.data())
@seed(0) # for reproduction # @seed(0) # for reproduction
def test_panda_safety_carstate_fuzzy(self, data): def test_panda_safety_carstate_fuzzy(self, data):
state_has_changed = lambda prev_state, new_state: prev_state != new_state state_has_changed = lambda prev_state, new_state: prev_state != new_state
# cfg = self.CP.safetyConfigs[-1] # cfg = self.CP.safetyConfigs[-1]
@ -217,14 +217,13 @@ class TestCarModelBase(unittest.TestCase):
# print(self.fingerprint) # print(self.fingerprint)
# address = data.draw(st.integers(0x201, 0x226)) # address = data.draw(st.integers(0x201, 0x226))
bus = 0
# ORIG: # ORIG:
# msg_strategy = st.tuples(st.integers(min_value=0, max_value=0), st.integers(min_value=0x100, max_value=0x400), st.binary(min_size=8, max_size=8)) # msg_strategy = st.tuples(st.integers(min_value=0, max_value=0), st.integers(min_value=0x100, max_value=0x400), st.binary(min_size=8, max_size=8))
# msg_strategy = st.tuples(st.integers(min_value=0xaa, max_value=0xaa), st.binary(min_size=8, max_size=8)) # msg_strategy = st.tuples(st.integers(min_value=0xaa, max_value=0xaa), st.binary(min_size=8, max_size=8))
msg_strategy = st.binary(min_size=size, max_size=size) msg_strategy = st.binary(min_size=size, max_size=size)
msgs = data.draw(st.lists(msg_strategy, min_size=50)) msgs = data.draw(st.lists(msg_strategy, min_size=20))
# print(len(msgs)) # print(len(msgs))
prev_panda_gas = self.safety.get_gas_pressed_prev() prev_panda_gas = self.safety.get_gas_pressed_prev()
@ -239,25 +238,31 @@ class TestCarModelBase(unittest.TestCase):
# for bus, address, dat in msgs: # for bus, address, dat in msgs:
# since all toyotas can detect fake interceptor, but we want to test PCM gas too # since all toyotas can detect fake interceptor, but we want to test PCM gas too
for dat1, dat2, dat3, dat4 in zip(*[iter(msgs)] * 4): for dat in msgs:
# set interceptor detected so we don't accidentally trigger gas_pressed with other message # set interceptor detected so we don't accidentally trigger gas_pressed with other message
self.safety.set_gas_interceptor_detected(self.CP.enableGasInterceptor) self.safety.set_gas_interceptor_detected(self.CP.enableGasInterceptor)
# if not self.CP.enableGasInterceptor: # if not self.CP.enableGasInterceptor:
# self.safety.set_gas_interceptor_detected(False) # self.safety.set_gas_interceptor_detected(False)
print() print()
for dat in (dat1, dat2, dat3, dat4): to_send = libpanda_py.make_CANPacket(address, bus, dat)
to_send = libpanda_py.make_CANPacket(address, bus, dat) did_rx = self.safety.safety_rx_hook(to_send)
did_rx = self.safety.safety_rx_hook(to_send)
# test multiple CAN packets as well as multiple messages per CAN packet can = messaging.new_message('can', 1)
for (_dat1, _dat2) in ((dat1, dat2), (dat3, dat4)): can.can = [log.CanData(address=address, dat=dat, src=bus)]
can = messaging.new_message('can', 2) print('rxing', dict(address=address, dat=dat, src=bus))
can.can = [log.CanData(address=address, dat=_dat1, src=bus), log.CanData(address=address, dat=_dat2, src=bus)]
print('rxing', dict(address=address, _dat1=_dat1, _dat2=_dat2, src=bus))
CC = car.CarControl.new_message() CC = car.CarControl.new_message()
CS = self.CI.update(CC, (can.to_bytes(),)) CS = self.CI.update(CC, (can.to_bytes(),))
# test multiple CAN packets as well as multiple messages per CAN packet
# for (_dat1, _dat2) in ((dat1, dat2), (dat3, dat4)):
# can = messaging.new_message('can', 2)
# can.can = [log.CanData(address=address, dat=_dat1, src=bus), log.CanData(address=address, dat=_dat2, src=bus)]
# print('rxing', dict(address=address, _dat1=_dat1, _dat2=_dat2, src=bus))
#
# CC = car.CarControl.new_message()
# CS = self.CI.update(CC, (can.to_bytes(),))
if self.safety.get_gas_pressed_prev(): if self.safety.get_gas_pressed_prev():
self.init_gas_pressed = True self.init_gas_pressed = True
@ -266,7 +271,7 @@ class TestCarModelBase(unittest.TestCase):
# if self.safety.get_gas_interceptor_detected():# and state_has_changed(start_gas, self.safety.get_gas_pressed_prev()): # if self.safety.get_gas_interceptor_detected():# and state_has_changed(start_gas, self.safety.get_gas_pressed_prev()):
# print('ret.gas', CS.gas, 'safety gas', self.safety.get_gas_interceptor_prev()) # print('ret.gas', CS.gas, 'safety gas', self.safety.get_gas_interceptor_prev())
print('both', CS.brakePressed, 'safety brake', self.safety.get_brake_pressed_prev()) # print('both', CS.gasPressed, self.safety.get_gas_pressed_prev(), 'int')
if self.safety.get_gas_pressed_prev() != prev_panda_gas: if self.safety.get_gas_pressed_prev() != prev_panda_gas:
print() print()
print('ret.gas', CS.gas, 'safety gas', self.safety.get_gas_interceptor_prev()) print('ret.gas', CS.gas, 'safety gas', self.safety.get_gas_interceptor_prev())

Loading…
Cancel
Save