mirror of
https://github.com/home-assistant/core.git
synced 2025-04-25 01:38:02 +00:00
Fix missing timeout exception check in powerwall config flow (#107899)
* Fix missing timeout exception check in powerwall config flow powerwall recently switched to asyncio, and every place we check for unreachable we need to check for timeout error. There was one missed ``` 09:08 homeassistant homeassistant[546]: 2024-01-12 10:09:08.899 ERROR (MainThread) [homeassistant.components.powerwall.config_flow] Unexpected exception Jan 12 20:09:08 homeassistant homeassistant[546]: Traceback (most recent call last): Jan 12 20:09:08 homeassistant homeassistant[546]: File "/usr/src/homeassistant/homeassistant/components/powerwall/config_flow.py", line 168, in _async_try_connect Jan 12 20:09:08 homeassistant homeassistant[546]: info = await validate_input(self.hass, user_input) Jan 12 20:09:08 homeassistant homeassistant[546]: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Jan 12 20:09:08 homeassistant homeassistant[546]: File "/usr/src/homeassistant/homeassistant/components/powerwall/config_flow.py", line 76, in validate_input Jan 12 20:09:08 homeassistant homeassistant[546]: site_info, gateway_din = await _login_and_fetch_site_info( Jan 12 20:09:08 homeassistant homeassistant[546]: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Jan 12 20:09:08 homeassistant homeassistant[546]: File "/usr/src/homeassistant/homeassistant/components/powerwall/config_flow.py", line 43, in _login_and_fetch_site_info Jan 12 20:09:08 homeassistant homeassistant[546]: await power_wall.login(password) Jan 12 20:09:08 homeassistant homeassistant[546]: File "/usr/local/lib/python3.12/site-packages/tesla_powerwall/powerwall.py", line 58, in login Jan 12 20:09:08 homeassistant homeassistant[546]: return await self.login_as(User.CUSTOMER, password, email, force_sm_off) Jan 12 20:09:08 homeassistant homeassistant[546]: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Jan 12 20:09:08 homeassistant homeassistant[546]: File "/usr/local/lib/python3.12/site-packages/tesla_powerwall/powerwall.py", line 49, in login_as Jan 12 20:09:08 homeassistant homeassistant[546]: response = await self._api.login(user, email, password, force_sm_off) Jan 12 20:09:08 homeassistant homeassistant[546]: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Jan 12 20:09:08 homeassistant homeassistant[546]: File "/usr/local/lib/python3.12/site-packages/tesla_powerwall/api.py", line 172, in login Jan 12 20:09:08 homeassistant homeassistant[546]: return await self.post( Jan 12 20:09:08 homeassistant homeassistant[546]: ^^^^^^^^^^^^^^^^ Jan 12 20:09:08 homeassistant homeassistant[546]: File "/usr/local/lib/python3.12/site-packages/tesla_powerwall/api.py", line 146, in post Jan 12 20:09:08 homeassistant homeassistant[546]: response = await self._http_session.post( Jan 12 20:09:08 homeassistant homeassistant[546]: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Jan 12 20:09:08 homeassistant homeassistant[546]: File "/usr/local/lib/python3.12/site-packages/aiohttp/client.py", line 601, in _request Jan 12 20:09:08 homeassistant homeassistant[546]: await resp.start(conn) Jan 12 20:09:08 homeassistant homeassistant[546]: File "/usr/local/lib/python3.12/site-packages/aiohttp/client_reqrep.py", line 960, in start Jan 12 20:09:08 homeassistant homeassistant[546]: with self._timer: Jan 12 20:09:08 homeassistant homeassistant[546]: File "/usr/local/lib/python3.12/site-packages/aiohttp/helpers.py", line 735, in __exit__ Jan 12 20:09:08 homeassistant homeassistant[546]: raise asyncio.TimeoutError from None Jan 12 20:09:08 homeassistant homeassistant[546]: TimeoutError ``` * cov
This commit is contained in:
parent
86e608d04f
commit
3a4c64b0a7
@ -166,7 +166,7 @@ class ConfigFlow(config_entries.ConfigFlow, domain=DOMAIN):
|
||||
description_placeholders: dict[str, str] = {}
|
||||
try:
|
||||
info = await validate_input(self.hass, user_input)
|
||||
except PowerwallUnreachableError as ex:
|
||||
except (PowerwallUnreachableError, asyncio.TimeoutError) as ex:
|
||||
errors[CONF_IP_ADDRESS] = "cannot_connect"
|
||||
description_placeholders = {"error": str(ex)}
|
||||
except WrongVersion as ex:
|
||||
|
@ -4,6 +4,7 @@ import asyncio
|
||||
from datetime import timedelta
|
||||
from unittest.mock import MagicMock, patch
|
||||
|
||||
import pytest
|
||||
from tesla_powerwall import (
|
||||
AccessDeniedError,
|
||||
MissingAttributeError,
|
||||
@ -60,15 +61,14 @@ async def test_form_source_user(hass: HomeAssistant) -> None:
|
||||
assert len(mock_setup_entry.mock_calls) == 1
|
||||
|
||||
|
||||
async def test_form_cannot_connect(hass: HomeAssistant) -> None:
|
||||
@pytest.mark.parametrize("exc", (PowerwallUnreachableError, asyncio.TimeoutError))
|
||||
async def test_form_cannot_connect(hass: HomeAssistant, exc: Exception) -> None:
|
||||
"""Test we handle cannot connect error."""
|
||||
result = await hass.config_entries.flow.async_init(
|
||||
DOMAIN, context={"source": config_entries.SOURCE_USER}
|
||||
)
|
||||
|
||||
mock_powerwall = await _mock_powerwall_side_effect(
|
||||
site_info=PowerwallUnreachableError
|
||||
)
|
||||
mock_powerwall = await _mock_powerwall_side_effect(site_info=exc)
|
||||
|
||||
with patch(
|
||||
"homeassistant.components.powerwall.config_flow.Powerwall",
|
||||
|
Loading…
x
Reference in New Issue
Block a user