Files
IQ.Pilot/iqpilot/system/hardware/tici/tests/test_hardware.py
2026-09-03 18:23:24 -05:00

103 lines
3.1 KiB
Python

from iqpilot.system.hardware.tici.hardware import (
MM_MODEM_ACCESS_TECHNOLOGY_LTE,
MM_MODEM_STATE,
NMActiveConnectionState,
Tici,
)
from iqpilot.cereal import log
def _make_connection(mocker, connection_type: str, state: int):
connection = mocker.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, mocker):
device = Tici()
direct_runner = mocker.MagicMock()
monkeypatch.setattr(device, "get_modem", mocker.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(mocker):
device = Tici()
primary = _make_connection(mocker, "gsm", NMActiveConnectionState.ACTIVATING)
bus = mocker.MagicMock()
bus.get_object.return_value = primary
nm = mocker.MagicMock()
nm.Get.return_value = "/primary"
device.__dict__["bus"] = bus
device.__dict__["nm"] = nm
assert device.get_network_type() == log.DeviceState.NetworkType.none
def test_get_network_type_requires_registered_modem(monkeypatch, mocker):
device = Tici()
primary = _make_connection(mocker, "gsm", NMActiveConnectionState.ACTIVATED)
cellular = _make_connection(mocker, "gsm", NMActiveConnectionState.ACTIVATED)
bus = mocker.MagicMock()
bus.get_object.side_effect = [primary, cellular]
nm = mocker.MagicMock()
nm.Get.side_effect = ["/primary", ["/cellular"]]
modem = mocker.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
device.__dict__["bus"] = bus
device.__dict__["nm"] = nm
monkeypatch.setattr(device, "get_modem", mocker.MagicMock(return_value=modem))
assert device.get_network_type() == log.DeviceState.NetworkType.none
def test_get_network_type_reports_lte_for_registered_modem(monkeypatch, mocker):
device = Tici()
primary = _make_connection(mocker, "gsm", NMActiveConnectionState.ACTIVATED)
cellular = _make_connection(mocker, "gsm", NMActiveConnectionState.ACTIVATED)
bus = mocker.MagicMock()
bus.get_object.side_effect = [primary, cellular]
nm = mocker.MagicMock()
nm.Get.side_effect = ["/primary", ["/cellular"]]
modem = mocker.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
device.__dict__["bus"] = bus
device.__dict__["nm"] = nm
monkeypatch.setattr(device, "get_modem", mocker.MagicMock(return_value=modem))
assert device.get_network_type() == log.DeviceState.NetworkType.cell4G