Files
2026-07-20 11:06:57 -05:00

105 lines
3.0 KiB
Python

from unittest.mock import MagicMock
from openpilot.system.hardware.tici.hardware import (
MM_MODEM_ACCESS_TECHNOLOGY_LTE,
MM_MODEM_STATE,
NMActiveConnectionState,
Tici,
)
from cereal import log
def _make_connection(connection_type: str, state: int):
connection = MagicMock()
def get_side_effect(_iface, prop, **_kwargs):
values = {
"Type": connection_type,
"State": state,
}
return values[prop]
connection.Get.side_effect = get_side_effect
return connection
def test_reboot_modem_falls_back_to_direct_at(monkeypatch):
device = Tici()
direct_runner = MagicMock()
monkeypatch.setattr(device, "get_modem", MagicMock(side_effect=ModuleNotFoundError("dbus")))
monkeypatch.setattr(device, "_run_direct_modem_command", direct_runner)
device.reboot_modem()
assert direct_runner.call_args_list == [
(("AT+CFUN=0",), {}),
(("AT+CFUN=1",), {}),
]
def test_get_network_type_ignores_non_activated_cellular(monkeypatch):
device = Tici()
primary = _make_connection("gsm", NMActiveConnectionState.ACTIVATING)
bus = MagicMock()
bus.get_object.return_value = primary
nm = MagicMock()
nm.Get.return_value = "/primary"
monkeypatch.setattr(device, "bus", bus)
monkeypatch.setattr(device, "nm", nm)
assert device.get_network_type() == log.DeviceState.NetworkType.none
def test_get_network_type_requires_registered_modem(monkeypatch):
device = Tici()
primary = _make_connection("gsm", NMActiveConnectionState.ACTIVATED)
cellular = _make_connection("gsm", NMActiveConnectionState.ACTIVATED)
bus = MagicMock()
bus.get_object.side_effect = [primary, cellular]
nm = MagicMock()
nm.Get.side_effect = ["/primary", ["/cellular"]]
modem = MagicMock()
def modem_get_side_effect(_iface, prop, **_kwargs):
values = {
"State": MM_MODEM_STATE.SEARCHING,
"AccessTechnologies": MM_MODEM_ACCESS_TECHNOLOGY_LTE,
}
return values[prop]
modem.Get.side_effect = modem_get_side_effect
monkeypatch.setattr(device, "bus", bus)
monkeypatch.setattr(device, "nm", nm)
monkeypatch.setattr(device, "get_modem", MagicMock(return_value=modem))
assert device.get_network_type() == log.DeviceState.NetworkType.none
def test_get_network_type_reports_lte_for_registered_modem(monkeypatch):
device = Tici()
primary = _make_connection("gsm", NMActiveConnectionState.ACTIVATED)
cellular = _make_connection("gsm", NMActiveConnectionState.ACTIVATED)
bus = MagicMock()
bus.get_object.side_effect = [primary, cellular]
nm = MagicMock()
nm.Get.side_effect = ["/primary", ["/cellular"]]
modem = MagicMock()
def modem_get_side_effect(_iface, prop, **_kwargs):
values = {
"State": MM_MODEM_STATE.CONNECTED,
"AccessTechnologies": MM_MODEM_ACCESS_TECHNOLOGY_LTE,
}
return values[prop]
modem.Get.side_effect = modem_get_side_effect
monkeypatch.setattr(device, "bus", bus)
monkeypatch.setattr(device, "nm", nm)
monkeypatch.setattr(device, "get_modem", MagicMock(return_value=modem))
assert device.get_network_type() == log.DeviceState.NetworkType.cell4G