diff --git a/src/pipecat/services/websocket_service.py b/src/pipecat/services/websocket_service.py index d7d3cd505..5540f1be0 100644 --- a/src/pipecat/services/websocket_service.py +++ b/src/pipecat/services/websocket_service.py @@ -76,7 +76,9 @@ class WebsocketService(ABC): logger.warning(f"{self} reconnecting (attempt: {attempt_number})") await self._disconnect_websocket() await self._connect_websocket() - return await self._verify_connection() + if not await self._verify_connection(): + raise ConnectionError(f"{self} websocket reconnection failed verification") + return True async def _try_reconnect( self, diff --git a/tests/test_websocket_service.py b/tests/test_websocket_service.py index 2cffbce97..d5f17297b 100644 --- a/tests/test_websocket_service.py +++ b/tests/test_websocket_service.py @@ -165,6 +165,19 @@ async def test_reconnect_exhausted_emits_non_fatal_error(service, report_error): assert "Connection refused" in final_error.error +@pytest.mark.asyncio +async def test_reconnect_exhausted_when_connect_does_not_raise(service, report_error): + """A non-raising failed connect is treated as a failed reconnect attempt.""" + result = await service._try_reconnect(report_error=report_error) + + assert result is False + assert report_error.call_count == 4 + final_error = report_error.call_args_list[-1][0][0] + assert isinstance(final_error, ErrorFrame) + assert final_error.fatal is False + assert "websocket reconnection failed verification" in final_error.error + + # --------------------------------------------------------------------------- # Quick failure detection — accept then immediately close # ---------------------------------------------------------------------------