fix(k1): stabilize live recovery and media admission
This commit is contained in:
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user