fix(runtime): recover awake ownership and batch model failures
This commit is contained in:
1 parent
6b2c0f199d
commit
baf069854b
17 files changed
+477
-32
No files matched your search
@@ -24,6 +24,66 @@ def completed(stdout="", returncode=0, stderr=""):
|
||||
return MagicMock(returncode=returncode, stdout=stdout, stderr=stderr)
|
||||
|
||||
|
||||
@pytest.mark.parametrize("stage", ["directory", "acquire"])
|
||||
def test_inaccessible_awake_lock_skips_actions_and_can_recover(stage, monkeypatch, tmp_path):
|
||||
owner = FileLock(tmp_path / "recovered.lock", thread_local=False)
|
||||
denied_owner = MagicMock()
|
||||
denied_owner.acquire.side_effect = PermissionError("awake lock access denied")
|
||||
factory = MagicMock(
|
||||
side_effect=[
|
||||
PermissionError("awake directory denied") if stage == "directory" else denied_owner,
|
||||
owner,
|
||||
]
|
||||
)
|
||||
configure = MagicMock(return_value=AWAKE_STRATEGY_USB)
|
||||
monkeypatch.setattr("artemis.runtime.awake_service._owner_lock", factory)
|
||||
monkeypatch.setattr("artemis.runtime.awake_service._configure_usb_stay_awake", configure)
|
||||
service = ScreenAwakeService()
|
||||
try:
|
||||
assert service.ensure_device("device") is None
|
||||
configure.assert_not_called()
|
||||
assert service.device_ids == ()
|
||||
assert service.ensure_device("device") == AWAKE_STRATEGY_USB
|
||||
configure.assert_called_once_with("device")
|
||||
finally:
|
||||
service.shutdown()
|
||||
|
||||
|
||||
def test_awake_monitor_continues_to_other_devices_after_access_denied(monkeypatch, tmp_path):
|
||||
def owner(device):
|
||||
if device == "denied":
|
||||
raise PermissionError("denied")
|
||||
return FileLock(tmp_path / f"{device}.lock", thread_local=False)
|
||||
|
||||
monkeypatch.setattr("artemis.runtime.awake_service._owner_lock", owner)
|
||||
configure = MagicMock(return_value=AWAKE_STRATEGY_USB)
|
||||
monkeypatch.setattr("artemis.runtime.awake_service._configure_usb_stay_awake", configure)
|
||||
service = ScreenAwakeService()
|
||||
try:
|
||||
service._reconcile_connected_devices({"denied", "healthy"})
|
||||
service._reconcile_connected_devices({"denied", "healthy"})
|
||||
assert service.device_ids == ("healthy",)
|
||||
configure.assert_called_once_with("healthy")
|
||||
finally:
|
||||
service.shutdown()
|
||||
|
||||
|
||||
@patch(
|
||||
"artemis.runtime.awake_service.ScreenAwakeLease",
|
||||
side_effect=PermissionError("legacy directory denied"),
|
||||
)
|
||||
@patch("artemis.runtime.awake_service.subprocess.run")
|
||||
def test_optional_legacy_directory_failure_does_not_abort_usb_policy(mock_run, _lease):
|
||||
mock_run.side_effect = [
|
||||
completed(),
|
||||
completed(),
|
||||
completed(),
|
||||
completed("2"),
|
||||
completed("mStayOn=true"),
|
||||
]
|
||||
assert _configure_usb_stay_awake("device") == AWAKE_STRATEGY_USB
|
||||
|
||||
|
||||
@patch(
|
||||
"artemis.runtime.awake_service._configure_usb_stay_awake", return_value=AWAKE_STRATEGY_HEARTBEAT
|
||||
)
|
||||
|
||||
Reference in new issue
Block a user