Tests / Test apps.device-host-agent.tests.test_mcp_token.test_load_or_create_concurrent_calls_do_not_corrupt failed
75 lines
2.3 KiB
Python
75 lines
2.3 KiB
Python
from __future__ import annotations
|
|
|
|
import pytest
|
|
|
|
from device.manager import DeviceManager
|
|
from core.errors import DeviceOfflineError
|
|
from tests.fakes import FakeDriver
|
|
|
|
|
|
def test_device_manager_connect_disconnect_transitions() -> None:
|
|
driver = FakeDriver()
|
|
manager = DeviceManager()
|
|
manager.register_device("iphone-1", lambda: driver, connection_info={"wda_port": 8100})
|
|
|
|
assert manager.list_devices()[0].status == "idle"
|
|
assert manager.connect("iphone-1", max_retries=1) is driver
|
|
assert manager.status("iphone-1") == "busy"
|
|
|
|
manager.disconnect("iphone-1")
|
|
assert manager.status("iphone-1") == "idle"
|
|
assert driver.calls[0] == ("connect", ())
|
|
assert driver.calls[-1] == ("disconnect", ())
|
|
|
|
|
|
def test_device_manager_marks_unreachable_device_offline() -> None:
|
|
manager = DeviceManager()
|
|
manager.register_device("iphone-1", lambda: FakeDriver(fail_connect=True))
|
|
|
|
with pytest.raises(DeviceOfflineError):
|
|
manager.connect("iphone-1", max_retries=2, retry_backoff_seconds=0)
|
|
|
|
assert manager.status("iphone-1") == "offline"
|
|
|
|
|
|
def test_probe_marks_connected_device_offline_when_driver_is_unreachable() -> None:
|
|
class BrokenDriver:
|
|
def connect(self) -> None:
|
|
return None
|
|
|
|
def screenshot(self) -> bytes:
|
|
raise RuntimeError("WDA disconnected")
|
|
|
|
manager = DeviceManager()
|
|
manager.register_device("iphone-1", lambda: BrokenDriver()) # type: ignore[arg-type]
|
|
manager.connect("iphone-1")
|
|
|
|
assert manager.probe("iphone-1") is False
|
|
assert manager.status("iphone-1") == "offline"
|
|
|
|
|
|
def test_probe_uses_health_check_without_capturing_screen() -> None:
|
|
class HealthCheckedDriver:
|
|
def __init__(self) -> None:
|
|
self.health_checks = 0
|
|
self.screenshots = 0
|
|
|
|
def connect(self) -> None:
|
|
return None
|
|
|
|
def screenshot(self) -> bytes:
|
|
self.screenshots += 1
|
|
return b"screen"
|
|
|
|
def health_check(self) -> None:
|
|
self.health_checks += 1
|
|
|
|
driver = HealthCheckedDriver()
|
|
manager = DeviceManager()
|
|
manager.register_device("iphone-1", lambda: driver) # type: ignore[arg-type]
|
|
manager.connect("iphone-1")
|
|
|
|
assert manager.probe("iphone-1") is True
|
|
assert driver.health_checks == 1
|
|
assert driver.screenshots == 0
|