fix(k1): stabilize live recovery and media admission

This commit is contained in:
DCCONSTRUCTIONS
2026-08-22 00:03:01 +03:00
parent 7217244886
commit eaad9deda1
29 changed files with 1645 additions and 199 deletions
+37
View File
@@ -40,6 +40,24 @@ class _FailingSendWebSocket:
del code, reason
class _DisconnectAfterSecondSendWebSocket:
def __init__(self) -> None:
self.accepted = False
self.send_count = 0
async def accept(self) -> None:
self.accepted = True
async def send_json(self, payload: dict[str, Any]) -> None:
del payload
self.send_count += 1
if self.send_count == 2:
raise WebSocketDisconnect(code=1001)
async def close(self, *, code: int, reason: str) -> None:
del code, reason
async def _post_json(path: str, payload: dict[str, Any]) -> tuple[int, str]:
body = json.dumps(payload).encode()
request_sent = False
@@ -198,6 +216,25 @@ def test_device_plugin_events_treats_proven_transport_disconnect_as_completion(
assert websocket.accepted is True
def test_device_plugin_events_keeps_heavy_state_poll_off_live_media_cadence(
monkeypatch: pytest.MonkeyPatch,
) -> None:
websocket = _DisconnectAfterSecondSendWebSocket()
sleeps: list[float] = []
async def record_sleep(delay: float) -> None:
sleeps.append(delay)
monkeypatch.setattr(app_module, "plugin_dispatcher", _StateDispatcher())
monkeypatch.setattr(app_module.asyncio, "sleep", record_sleep)
asyncio.run(app_module.device_plugin_events(websocket, "test.plugin"))
assert websocket.accepted is True
assert sleeps == [app_module.DEVICE_PLUGIN_EVENT_POLL_INTERVAL_SECONDS]
assert sleeps[0] == 2.0
def test_device_plugin_events_propagates_arbitrary_send_runtime_error(
monkeypatch: pytest.MonkeyPatch,
) -> None: