From 0ab30ece68cd49694d0ab5abb106d292fdfe52ce Mon Sep 17 00:00:00 2001 From: starkillerOG Date: Wed, 8 Feb 2023 22:38:44 +0100 Subject: [PATCH] Netgear ssdp discovery abort if no serial (#87532) fixes undefined --- .../components/netgear/config_flow.py | 3 +++ homeassistant/components/netgear/strings.json | 4 +++- tests/components/netgear/test_config_flow.py | 19 +++++++++++++++++++ 3 files changed, 25 insertions(+), 1 deletion(-) diff --git a/homeassistant/components/netgear/config_flow.py b/homeassistant/components/netgear/config_flow.py index 9516314431a..da260a2559e 100644 --- a/homeassistant/components/netgear/config_flow.py +++ b/homeassistant/components/netgear/config_flow.py @@ -135,6 +135,9 @@ class NetgearFlowHandler(config_entries.ConfigFlow, domain=DOMAIN): _LOGGER.debug("Netgear ssdp discovery info: %s", discovery_info) + if ssdp.ATTR_UPNP_SERIAL not in discovery_info.upnp: + return self.async_abort(reason="no_serial") + await self.async_set_unique_id(discovery_info.upnp[ssdp.ATTR_UPNP_SERIAL]) self._abort_if_unique_id_configured(updates=updated_data) diff --git a/homeassistant/components/netgear/strings.json b/homeassistant/components/netgear/strings.json index 3585d1e613b..d58c4878f65 100644 --- a/homeassistant/components/netgear/strings.json +++ b/homeassistant/components/netgear/strings.json @@ -14,7 +14,9 @@ "config": "Connection or login error: please check your configuration" }, "abort": { - "already_configured": "[%key:common::config_flow::abort::already_configured_device%]" + "already_configured": "[%key:common::config_flow::abort::already_configured_device%]", + "not_ipv4_address": "No IPv4 address in ssdp discovery information", + "no_serial": "No serial number in ssdp discovery information" } }, "options": { diff --git a/tests/components/netgear/test_config_flow.py b/tests/components/netgear/test_config_flow.py index a8335578dfc..afddf313301 100644 --- a/tests/components/netgear/test_config_flow.py +++ b/tests/components/netgear/test_config_flow.py @@ -236,6 +236,25 @@ async def test_ssdp_already_configured(hass: HomeAssistant) -> None: assert result["reason"] == "already_configured" +async def test_ssdp_no_serial(hass: HomeAssistant) -> None: + """Test ssdp abort when the ssdp info does not include a serial number.""" + result = await hass.config_entries.flow.async_init( + DOMAIN, + context={"source": SOURCE_SSDP}, + data=ssdp.SsdpServiceInfo( + ssdp_usn="mock_usn", + ssdp_st="mock_st", + ssdp_location=SSDP_URL, + upnp={ + ssdp.ATTR_UPNP_MODEL_NUMBER: "RBR20", + ssdp.ATTR_UPNP_PRESENTATION_URL: URL, + }, + ), + ) + assert result["type"] == data_entry_flow.FlowResultType.ABORT + assert result["reason"] == "no_serial" + + async def test_ssdp_ipv6(hass: HomeAssistant) -> None: """Test ssdp abort when using a ipv6 address.""" MockConfigEntry(