Adjust ConnectionFailure logging in SamsungTV (#146044)

This commit is contained in:
epenet 2025-06-03 12:05:33 +02:00 committed by GitHub
parent d439bb68eb
commit d1e0225520
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 47 additions and 9 deletions

View File

@ -636,14 +636,21 @@ class SamsungTVWSBridge(
) )
self._remote = None self._remote = None
except ConnectionFailure as err: except ConnectionFailure as err:
LOGGER.warning( error_details = err.args[0]
( if "ms.channel.timeOut" in (error_details := repr(err)):
# The websocket was connected, but the TV is probably asleep
LOGGER.debug(
"Channel timeout occurred trying to get remote for %s: %s",
self.host,
error_details,
)
else:
LOGGER.warning(
"Unexpected ConnectionFailure trying to get remote for %s, " "Unexpected ConnectionFailure trying to get remote for %s, "
"please report this issue: %s" "please report this issue: %s",
), self.host,
self.host, error_details,
repr(err), )
)
self._remote = None self._remote = None
except (WebSocketException, AsyncioTimeoutError, OSError) as err: except (WebSocketException, AsyncioTimeoutError, OSError) as err:
LOGGER.debug("Failed to get remote for %s: %s", self.host, repr(err)) LOGGER.debug("Failed to get remote for %s: %s", self.host, repr(err))

View File

@ -409,7 +409,7 @@ async def test_update_ws_connection_failure(
patch.object( patch.object(
remote_websocket, remote_websocket,
"start_listening", "start_listening",
side_effect=ConnectionFailure('{"event": "ms.voiceApp.hide"}'), side_effect=ConnectionFailure({"event": "ms.voiceApp.hide"}),
), ),
patch.object(remote_websocket, "is_alive", return_value=False), patch.object(remote_websocket, "is_alive", return_value=False),
): ):
@ -419,7 +419,7 @@ async def test_update_ws_connection_failure(
assert ( assert (
"Unexpected ConnectionFailure trying to get remote for fake_host, please " "Unexpected ConnectionFailure trying to get remote for fake_host, please "
'report this issue: ConnectionFailure(\'{"event": "ms.voiceApp.hide"}\')' "report this issue: ConnectionFailure({'event': 'ms.voiceApp.hide'})"
in caplog.text in caplog.text
) )
@ -427,6 +427,37 @@ async def test_update_ws_connection_failure(
assert state.state == STATE_OFF assert state.state == STATE_OFF
@pytest.mark.usefixtures("rest_api")
async def test_update_ws_connection_failure_channel_timeout(
hass: HomeAssistant,
freezer: FrozenDateTimeFactory,
remote_websocket: Mock,
caplog: pytest.LogCaptureFixture,
) -> None:
"""Testing update tv connection failure exception."""
await setup_samsungtv_entry(hass, MOCK_CONFIGWS)
with (
patch.object(
remote_websocket,
"start_listening",
side_effect=ConnectionFailure({"event": "ms.channel.timeOut"}),
),
patch.object(remote_websocket, "is_alive", return_value=False),
):
freezer.tick(timedelta(minutes=5))
async_fire_time_changed(hass)
await hass.async_block_till_done(wait_background_tasks=True)
assert (
"Channel timeout occurred trying to get remote for fake_host: "
"ConnectionFailure({'event': 'ms.channel.timeOut'})" in caplog.text
)
state = hass.states.get(ENTITY_ID)
assert state.state == STATE_OFF
@pytest.mark.usefixtures("rest_api") @pytest.mark.usefixtures("rest_api")
async def test_update_ws_connection_closed( async def test_update_ws_connection_closed(
hass: HomeAssistant, freezer: FrozenDateTimeFactory, remote_websocket: Mock hass: HomeAssistant, freezer: FrozenDateTimeFactory, remote_websocket: Mock