Files
IQ.Pilot/selfdrive/monitoring/test_dmonitoringd.py
2026-07-26 18:52:41 -05:00

62 lines
2.0 KiB
Python

from types import SimpleNamespace
import pytest
from cereal import log
from openpilot.selfdrive.monitoring.dmonitoringd import create_driver_monitoring, get_dm_inputs, use_legacy_dm
from openpilot.selfdrive.monitoring.legacy_policy import DriverMonitoring as LegacyDriverMonitoring
from openpilot.selfdrive.monitoring.policy import DriverMonitoring as UpstreamDriverMonitoring
@pytest.mark.parametrize("device_type, expected_type", [
("mici", LegacyDriverMonitoring),
("tici", UpstreamDriverMonitoring),
("tizi", UpstreamDriverMonitoring),
])
def test_policy_selection(device_type, expected_type):
assert use_legacy_dm(device_type) == (device_type == "mici")
assert isinstance(create_driver_monitoring(device_type, False, False), expected_type)
def test_mici_uses_legacy_thresholds():
dm = create_driver_monitoring("mici", False, False)
assert dm.settings._DISTRACTED_TIME == 11.
assert dm.settings._AWARENESS_TIME == 30.
assert dm.settings._PHONE_THRESH == 0.75
@pytest.mark.parametrize("enabled, lat_active, expected", [
(False, False, False),
(True, False, True),
(False, True, True),
(True, True, True),
])
def test_iq_enabled_adapter(enabled, lat_active, expected):
sm = {
'driverStateV2': object(),
'liveCalibration': object(),
'carState': object(),
'selfdriveState': SimpleNamespace(enabled=enabled),
'modelV2': object(),
'carControl': SimpleNamespace(latActive=lat_active),
}
assert get_dm_inputs(sm)['selfdriveState'].enabled == expected
def test_legacy_policy_packet_uses_shared_schema():
dm = create_driver_monitoring("mici", False, False)
dm.awareness = 0.
dm.terminal_alert_cnt = 2
dm.terminal_time = dm.settings._MAX_TERMINAL_DURATION
dm.too_distracted = True
state = dm.get_state_packet().driverMonitoringState
assert state.lockout
assert state.alert3Count == 2
assert state.noResponseCount == 1
assert state.noResponseForceDecel
assert state.alertLevel == log.DriverMonitoringState.AlertLevel.three