Files
IQ.Pilot/selfdrive/car/tests/test_car_specific_events.py
2026-07-21 13:43:46 -05:00

118 lines
3.2 KiB
Python

from types import SimpleNamespace
from cereal import log
from iqdbc.car import structs
from openpilot.selfdrive.car.car_specific import CarSpecificEvents
EventName = log.OnroadEvent.EventName
GearShifter = structs.CarState.GearShifter
def make_car_state(**overrides):
base = dict(
doorOpen=False,
seatbeltUnlatched=False,
gearShifter=GearShifter.drive,
cruiseState=SimpleNamespace(available=True, enabled=False, nonAdaptive=False),
cruiseFaultLateralMode=False,
espDisabled=False,
espActive=False,
stockFcw=False,
stockAeb=False,
stockLkas=False,
vEgo=15.0,
brakeHoldActive=False,
parkingBrake=False,
accFaulted=False,
steeringPressed=False,
steeringDisengage=False,
brakePressed=False,
standstill=False,
gasPressed=False,
vehicleSensorsInvalid=False,
invalidLkasSetting=False,
lowSpeedAlert=False,
buttonEnable=False,
buttonEvents=[],
steerFaultTemporary=False,
steerFaultPermanent=False,
blockPcmEnable=False,
)
base.update(overrides)
return SimpleNamespace(**base)
def test_pcm_disable_suppressed_during_cruise_fault_lateral_mode():
cp = SimpleNamespace(
brand="volkswagen",
openpilotLongitudinalControl=False,
minEnableSpeed=0.0,
pcmCruise=True,
carFingerprint="MOCK",
)
events = CarSpecificEvents(cp)
cs = make_car_state(cruiseFaultLateralMode=True)
cs_prev = make_car_state(cruiseState=SimpleNamespace(available=True, enabled=True, nonAdaptive=False))
out = events.update(cs, cs_prev, SimpleNamespace(actuators=SimpleNamespace(accel=0.0)))
assert not out.has(EventName.pcmDisable)
def test_cruise_fault_lateral_mode_replaces_acc_faulted_alert():
cp = SimpleNamespace(
brand="volkswagen",
openpilotLongitudinalControl=False,
minEnableSpeed=0.0,
pcmCruise=True,
carFingerprint="MOCK",
)
events = CarSpecificEvents(cp)
cs = make_car_state(accFaulted=True, cruiseFaultLateralMode=True)
cs_prev = make_car_state()
out = events.update(cs, cs_prev, SimpleNamespace(actuators=SimpleNamespace(accel=0.0)))
assert out.has(EventName.cruiseFaultLateralAllowed)
assert not out.has(EventName.accFaulted)
def test_acc_faulted_still_emitted_without_cruise_fault_lateral_mode():
cp = SimpleNamespace(
brand="volkswagen",
openpilotLongitudinalControl=False,
minEnableSpeed=0.0,
pcmCruise=True,
carFingerprint="MOCK",
)
events = CarSpecificEvents(cp)
cs = make_car_state(accFaulted=True)
cs_prev = make_car_state()
out = events.update(cs, cs_prev, SimpleNamespace(actuators=SimpleNamespace(accel=0.0)))
assert out.has(EventName.accFaulted)
assert not out.has(EventName.cruiseFaultLateralAllowed)
def test_pcm_disable_still_emitted_without_cruise_fault_lateral_mode():
cp = SimpleNamespace(
brand="volkswagen",
openpilotLongitudinalControl=False,
minEnableSpeed=0.0,
pcmCruise=True,
carFingerprint="MOCK",
)
events = CarSpecificEvents(cp)
cs = make_car_state()
cs_prev = make_car_state(cruiseState=SimpleNamespace(available=True, enabled=True, nonAdaptive=False))
out = events.update(cs, cs_prev, SimpleNamespace(actuators=SimpleNamespace(accel=0.0)))
assert out.has(EventName.pcmDisable)