no tolerance

pull/29759/head
Shane Smiskol 2 years ago
parent 6ec8ee20ff
commit 41b1c7e8be
  1. 33
      selfdrive/car/tests/test_models.py

@ -26,6 +26,8 @@ from openpilot.selfdrive.test.helpers import SKIP_ENV_VAR
PandaType = log.PandaState.PandaType PandaType = log.PandaState.PandaType
SafetyModel = car.CarParams.SafetyModel SafetyModel = car.CarParams.SafetyModel
RELAY_CLOSED_MODES = (SafetyModel.silent, SafetyModel.elm327, SafetyModel.noOutput)
NUM_JOBS = int(os.environ.get("NUM_JOBS", "1")) NUM_JOBS = int(os.environ.get("NUM_JOBS", "1"))
JOB_ID = int(os.environ.get("JOB_ID", "0")) JOB_ID = int(os.environ.get("JOB_ID", "0"))
INTERNAL_SEG_LIST = os.environ.get("INTERNAL_SEG_LIST", "") INTERNAL_SEG_LIST = os.environ.get("INTERNAL_SEG_LIST", "")
@ -72,6 +74,7 @@ class TestCarModelBase(unittest.TestCase):
can_msgs: List[capnp.lib.capnp._DynamicStructReader] can_msgs: List[capnp.lib.capnp._DynamicStructReader]
elm_frame: Optional[int] elm_frame: Optional[int]
relay_open_frame: Optional[int]
@unittest.skipIf(SKIP_ENV_VAR in os.environ, f"Long running test skipped. Unset {SKIP_ENV_VAR} to run") @unittest.skipIf(SKIP_ENV_VAR in os.environ, f"Long running test skipped. Unset {SKIP_ENV_VAR} to run")
@classmethod @classmethod
@ -107,11 +110,11 @@ class TestCarModelBase(unittest.TestCase):
car_fw = [] car_fw = []
can_msgs = [] can_msgs = []
cls.elm_frame = None cls.elm_frame = None # can frame when bus 1 is not multiplexed (from fingerprinting)
cls.relay_open_frame = None # can frame when/if relay opens
fingerprint = defaultdict(dict) fingerprint = defaultdict(dict)
experimental_long = False experimental_long = False
enabled_toggle = True safety_models: List[SafetyModel] = [SafetyModel.elm327]
dashcam_only = False
for msg in lr: for msg in lr:
if msg.which() == "can": if msg.which() == "can":
can_msgs.append(msg) can_msgs.append(msg)
@ -120,37 +123,31 @@ class TestCarModelBase(unittest.TestCase):
if m.src < 64: if m.src < 64:
fingerprint[m.src][m.address] = len(m.dat) fingerprint[m.src][m.address] = len(m.dat)
# Log which can frame the panda safety mode left ELM327, for CAN validity checks.
# And when the relay opened for the relay malfunction check
if cls.elm_frame is None and any(model != SafetyModel.elm327 for model in safety_models):
cls.elm_frame = len(can_msgs)
if cls.relay_open_frame is None and any(model not in RELAY_CLOSED_MODES for model in safety_models):
cls.relay_open_frame = len(can_msgs)
elif msg.which() == "carParams": elif msg.which() == "carParams":
car_fw = msg.carParams.carFw car_fw = msg.carParams.carFw
dashcam_only = msg.carParams.dashcamOnly
if msg.carParams.openpilotLongitudinalControl: if msg.carParams.openpilotLongitudinalControl:
experimental_long = True experimental_long = True
if cls.car_model is None and not cls.ci: if cls.car_model is None and not cls.ci:
cls.car_model = msg.carParams.carFingerprint cls.car_model = msg.carParams.carFingerprint
elif msg.which() == 'initData':
for param in msg.initData.params.entries:
if param.key == 'OpenpilotEnabledToggle':
enabled_toggle = param.value.strip(b'\x00') == b'1'
# Log which can frame the panda safety mode left ELM327, for CAN validity checks
if msg.which() == 'pandaStates': if msg.which() == 'pandaStates':
for ps in msg.pandaStates: safety_models = [ps.safetyModel for ps in msg.pandaStates]
if cls.elm_frame is None and ps.safetyModel != SafetyModel.elm327:
cls.elm_frame = len(can_msgs)
elif msg.which() == 'pandaStateDEPRECATED': elif msg.which() == 'pandaStateDEPRECATED':
if cls.elm_frame is None and msg.pandaStateDEPRECATED.safetyModel != SafetyModel.elm327: safety_models = [msg.pandaStateDEPRECATED.safetyModel]
cls.elm_frame = len(can_msgs)
if len(can_msgs) > int(50 / DT_CTRL): if len(can_msgs) > int(50 / DT_CTRL):
break break
else: else:
raise Exception(f"Route: {repr(cls.test_route.route)} with segments: {test_segs} not found or no CAN msgs found. Is it uploaded?") raise Exception(f"Route: {repr(cls.test_route.route)} with segments: {test_segs} not found or no CAN msgs found. Is it uploaded?")
# if relay is expected to be open in the route
cls.openpilot_enabled = enabled_toggle and not dashcam_only
cls.can_msgs = sorted(can_msgs, key=lambda msg: msg.logMonoTime) cls.can_msgs = sorted(can_msgs, key=lambda msg: msg.logMonoTime)
cls.CarInterface, cls.CarController, cls.CarState = interfaces[cls.car_model] cls.CarInterface, cls.CarController, cls.CarState = interfaces[cls.car_model]

Loading…
Cancel
Save