more clean up

pull/30443/head
Shane Smiskol 1 year ago
parent e8353802d9
commit b916cf297b
  1. 32
      selfdrive/car/tests/test_models.py

@ -2,7 +2,6 @@
import capnp import capnp
import os import os
import importlib import importlib
import time
import pytest import pytest
import random import random
import unittest import unittest
@ -10,7 +9,7 @@ from collections import defaultdict, Counter
from typing import List, Optional, Tuple from typing import List, Optional, Tuple
from parameterized import parameterized_class from parameterized import parameterized_class
import hypothesis.strategies as st import hypothesis.strategies as st
from hypothesis import HealthCheck, Phase, assume, given, settings, seed from hypothesis import HealthCheck, Phase, given, settings, seed
from cereal import messaging, log, car from cereal import messaging, log, car
from openpilot.common.basedir import BASEDIR from openpilot.common.basedir import BASEDIR
@ -158,8 +157,6 @@ class TestCarModelBase(unittest.TestCase):
assert cls.CP assert cls.CP
assert cls.CP.carFingerprint == cls.car_model assert cls.CP.carFingerprint == cls.car_model
cls.car_state_dict = {'panda': {'gas_pressed': False}, 'CS': {'gasPressed': False}}
@classmethod @classmethod
def tearDownClass(cls): def tearDownClass(cls):
del cls.can_msgs del cls.can_msgs
@ -178,8 +175,6 @@ class TestCarModelBase(unittest.TestCase):
self.assertEqual(0, set_status, f"failed to set safetyModel {cfg}") self.assertEqual(0, set_status, f"failed to set safetyModel {cfg}")
self.safety.init_tests() self.safety.init_tests()
self.CS_prev = car.CarState.new_message()
def test_car_params(self): def test_car_params(self):
if self.CP.dashcamOnly: if self.CP.dashcamOnly:
self.skipTest("no need to check carParams for dashcamOnly") self.skipTest("no need to check carParams for dashcamOnly")
@ -319,20 +314,18 @@ class TestCarModelBase(unittest.TestCase):
checking for panda state mismatches. checking for panda state mismatches.
""" """
# TODO: how much of test_panda_safety_carstate can we re-use?
if self.CP.dashcamOnly: if self.CP.dashcamOnly:
self.skipTest("no need to check panda safety for dashcamOnly") self.skipTest("no need to check panda safety for dashcamOnly")
valid_addrs = [(addr, bus, size) for bus, addrs in self.fingerprint.items() for addr, size in addrs.items()] valid_addrs = [(addr, bus, size) for bus, addrs in self.fingerprint.items() for addr, size in addrs.items()]
address, bus, size = data.draw(st.sampled_from(valid_addrs)) address, bus, size = data.draw(st.sampled_from(valid_addrs))
# address = 0x201
# bus = 0
# print('addr, bus:', address, bus)
# size = self.fingerprint[bus][address]
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=20)) msgs = data.draw(st.lists(msg_strategy, min_size=20))
# due to panda updating state selectively, only edges are expected to match
# TODO: warm up CarState with real CAN messages to check edge of both sources
# (toyota's gasPressed is the inverse of a signal being set)
prev_panda_gas = self.safety.get_gas_pressed_prev() prev_panda_gas = self.safety.get_gas_pressed_prev()
prev_panda_brake = self.safety.get_brake_pressed_prev() prev_panda_brake = self.safety.get_brake_pressed_prev()
prev_panda_regen_braking = self.safety.get_regen_braking_prev() prev_panda_regen_braking = self.safety.get_regen_braking_prev()
@ -341,13 +334,11 @@ class TestCarModelBase(unittest.TestCase):
prev_panda_acc_main_on = self.safety.get_acc_main_on() prev_panda_acc_main_on = self.safety.get_acc_main_on()
for dat in msgs: for dat in msgs:
to_send = libpanda_py.make_CANPacket(address, bus, dat) to_send = libpanda_py.make_CANPacket(address, bus, dat)
self.safety.safety_rx_hook(to_send) self.safety.safety_rx_hook(to_send)
can = messaging.new_message('can', 1) can = messaging.new_message('can', 1)
can.can = [log.CanData(address=address, dat=dat, src=bus)] can.can = [log.CanData(address=address, dat=dat, src=bus)]
# print('rxing', dict(address=address, dat=dat, 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(),))
@ -361,18 +352,17 @@ class TestCarModelBase(unittest.TestCase):
# 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(),))
# due to panda updating state selectively, only edges are expected to match
# 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.gasPressed, self.safety.get_gas_pressed_prev(), 'int') # print('both', CS.gasPressed, self.safety.get_gas_pressed_prev(), 'int')
if self.safety.get_gas_pressed_prev() != prev_panda_gas:# or CS.gasPressed != self.CS_prev.gasPressed: 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())
print('both', CS.gasPressed, self.safety.get_gas_pressed_prev(), 'int') print('both', CS.gasPressed, self.safety.get_gas_pressed_prev(), 'int')
print('can.can', can.can) print('can.can', can.can)
self.assertEqual(CS.gasPressed, self.safety.get_gas_pressed_prev()) self.assertEqual(CS.gasPressed, self.safety.get_gas_pressed_prev())
if self.safety.get_brake_pressed_prev() != prev_panda_brake:# or CS.brakePressed != self.CS_prev.brakePressed: if self.safety.get_brake_pressed_prev() != prev_panda_brake:
brake_pressed = CS.brakePressed brake_pressed = CS.brakePressed
if CS.brakePressed and not self.safety.get_brake_pressed_prev(): if CS.brakePressed and not self.safety.get_brake_pressed_prev():
if self.CP.carFingerprint in (HONDA.PILOT, HONDA.RIDGELINE) and CS.brake > 0.05: if self.CP.carFingerprint in (HONDA.PILOT, HONDA.RIDGELINE) and CS.brake > 0.05:
@ -383,21 +373,21 @@ class TestCarModelBase(unittest.TestCase):
# print('both', CS.brakePressed, self.safety.get_brake_pressed_prev()) # print('both', CS.brakePressed, self.safety.get_brake_pressed_prev())
self.assertEqual(brake_pressed, self.safety.get_brake_pressed_prev()) self.assertEqual(brake_pressed, self.safety.get_brake_pressed_prev())
if self.safety.get_regen_braking_prev() != prev_panda_regen_braking:# or CS.regenBraking != self.CS_prev.regenBraking: if self.safety.get_regen_braking_prev() != prev_panda_regen_braking:
print('regen change!') print('regen change!')
print('both', CS.regenBraking, self.safety.get_regen_braking_prev()) print('both', CS.regenBraking, self.safety.get_regen_braking_prev())
self.assertEqual(CS.regenBraking, self.safety.get_regen_braking_prev()) self.assertEqual(CS.regenBraking, self.safety.get_regen_braking_prev())
# print('both', not CS.standstill, 'safety moving', self.safety.get_vehicle_moving()) # print('both', not CS.standstill, 'safety moving', self.safety.get_vehicle_moving())
if self.safety.get_vehicle_moving() != prev_panda_vehicle_moving:# or CS.standstill != self.CS_prev.standstill: if self.safety.get_vehicle_moving() != prev_panda_vehicle_moving:
self.assertEqual(not CS.standstill, self.safety.get_vehicle_moving()) self.assertEqual(not CS.standstill, self.safety.get_vehicle_moving())
if not (self.CP.carName == "honda" and self.CP.carFingerprint not in HONDA_BOSCH): if not (self.CP.carName == "honda" and self.CP.carFingerprint not in HONDA_BOSCH):
if self.safety.get_cruise_engaged_prev() != prev_panda_cruise_engaged:# or CS.cruiseState.enabled != self.CS_prev.cruiseState.enabled: if self.safety.get_cruise_engaged_prev() != prev_panda_cruise_engaged:
self.assertEqual(CS.cruiseState.enabled, self.safety.get_cruise_engaged_prev()) self.assertEqual(CS.cruiseState.enabled, self.safety.get_cruise_engaged_prev())
if self.CP.carName == "honda": if self.CP.carName == "honda":
if self.safety.get_acc_main_on() != prev_panda_acc_main_on:# or CS.cruiseState.available != self.CS_prev.cruiseState.available: if self.safety.get_acc_main_on() != prev_panda_acc_main_on:
self.assertEqual(CS.cruiseState.available, self.safety.get_acc_main_on()) self.assertEqual(CS.cruiseState.available, self.safety.get_acc_main_on())
prev_panda_gas = self.safety.get_gas_pressed_prev() prev_panda_gas = self.safety.get_gas_pressed_prev()
@ -407,8 +397,6 @@ class TestCarModelBase(unittest.TestCase):
prev_panda_cruise_engaged = self.safety.get_cruise_engaged_prev() prev_panda_cruise_engaged = self.safety.get_cruise_engaged_prev()
prev_panda_acc_main_on = self.safety.get_acc_main_on() prev_panda_acc_main_on = self.safety.get_acc_main_on()
self.CS_prev = CS
def test_panda_safety_carstate(self): def test_panda_safety_carstate(self):
""" """
Assert that panda safety matches openpilot's carState Assert that panda safety matches openpilot's carState

Loading…
Cancel
Save