IQ.Pilot Prebuilt Release @ 27f668a
This commit is contained in:
102
iqpilot/system/hardware/tici/tests/test_hardware.py
Normal file
102
iqpilot/system/hardware/tici/tests/test_hardware.py
Normal file
@@ -0,0 +1,102 @@
|
||||
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
|
||||
Reference in New Issue
Block a user