mirror of
https://github.com/home-assistant/core.git
synced 2025-07-27 15:17:35 +00:00
Do not report tplink discovery failures as legacy connection failures (#124432)
* Do not report discovery failures as legacy connection failures * Fix catching BaseException
This commit is contained in:
parent
fd57931cc9
commit
61cee043e6
@ -410,9 +410,18 @@ class TPLinkConfigFlow(ConfigFlow, domain=DOMAIN):
|
|||||||
self._discovered_device = await Discover.discover_single(
|
self._discovered_device = await Discover.discover_single(
|
||||||
host, credentials=credentials
|
host, credentials=credentials
|
||||||
)
|
)
|
||||||
except TimeoutError:
|
except TimeoutError as ex:
|
||||||
# Try connect() to legacy devices if discovery fails
|
# Try connect() to legacy devices if discovery fails. This is a
|
||||||
self._discovered_device = await Device.connect(config=DeviceConfig(host))
|
# fallback mechanism for legacy that can handle connections without
|
||||||
|
# discovery info but if it fails raise the original error which is
|
||||||
|
# applicable for newer devices.
|
||||||
|
try:
|
||||||
|
self._discovered_device = await Device.connect(
|
||||||
|
config=DeviceConfig(host)
|
||||||
|
)
|
||||||
|
except Exception: # noqa: BLE001
|
||||||
|
# Raise the original error instead of the fallback error
|
||||||
|
raise ex from ex
|
||||||
else:
|
else:
|
||||||
if self._discovered_device.config.uses_http:
|
if self._discovered_device.config.uses_http:
|
||||||
self._discovered_device.config.http_client = (
|
self._discovered_device.config.http_client = (
|
||||||
|
@ -1289,6 +1289,33 @@ async def test_discovery_timeout_connect(
|
|||||||
assert mock_connect["connect"].call_count == 1
|
assert mock_connect["connect"].call_count == 1
|
||||||
|
|
||||||
|
|
||||||
|
async def test_discovery_timeout_connect_legacy_error(
|
||||||
|
hass: HomeAssistant,
|
||||||
|
mock_discovery: AsyncMock,
|
||||||
|
mock_connect: AsyncMock,
|
||||||
|
mock_init,
|
||||||
|
) -> None:
|
||||||
|
"""Test discovery tries legacy connect on timeout."""
|
||||||
|
result = await hass.config_entries.flow.async_init(
|
||||||
|
DOMAIN, context={"source": config_entries.SOURCE_USER}
|
||||||
|
)
|
||||||
|
mock_discovery["discover_single"].side_effect = TimeoutError
|
||||||
|
mock_connect["connect"].side_effect = KasaException
|
||||||
|
await hass.async_block_till_done()
|
||||||
|
assert result["type"] is FlowResultType.FORM
|
||||||
|
assert result["step_id"] == "user"
|
||||||
|
assert not result["errors"]
|
||||||
|
assert mock_connect["connect"].call_count == 0
|
||||||
|
|
||||||
|
result2 = await hass.config_entries.flow.async_configure(
|
||||||
|
result["flow_id"], {CONF_HOST: IP_ADDRESS}
|
||||||
|
)
|
||||||
|
await hass.async_block_till_done()
|
||||||
|
assert result2["type"] is FlowResultType.FORM
|
||||||
|
assert result2["errors"] == {"base": "cannot_connect"}
|
||||||
|
assert mock_connect["connect"].call_count == 1
|
||||||
|
|
||||||
|
|
||||||
async def test_reauth_update_other_flows(
|
async def test_reauth_update_other_flows(
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
mock_discovery: AsyncMock,
|
mock_discovery: AsyncMock,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user