mirror of
https://github.com/home-assistant/core.git
synced 2025-07-19 19:27:45 +00:00
Handle synology_dsm discovery broadcasting on multiple ip addresses (#34623)
This commit is contained in:
parent
5ba0ccd43b
commit
f94329dbbd
@ -133,7 +133,7 @@ class SynologyDSMFlowHandler(config_entries.ConfigFlow, domain=DOMAIN):
|
|||||||
return await self._show_setup_form(user_input, errors)
|
return await self._show_setup_form(user_input, errors)
|
||||||
|
|
||||||
# Check if already configured
|
# Check if already configured
|
||||||
await self.async_set_unique_id(serial)
|
await self.async_set_unique_id(serial, raise_on_progress=False)
|
||||||
self._abort_if_unique_id_configured()
|
self._abort_if_unique_id_configured()
|
||||||
|
|
||||||
config_data = {
|
config_data = {
|
||||||
@ -162,6 +162,13 @@ class SynologyDSMFlowHandler(config_entries.ConfigFlow, domain=DOMAIN):
|
|||||||
if self._host_already_configured(parsed_url.hostname):
|
if self._host_already_configured(parsed_url.hostname):
|
||||||
return self.async_abort(reason="already_configured")
|
return self.async_abort(reason="already_configured")
|
||||||
|
|
||||||
|
if ssdp.ATTR_UPNP_SERIAL in discovery_info:
|
||||||
|
# Synology can broadcast on multiple IP addresses
|
||||||
|
await self.async_set_unique_id(
|
||||||
|
discovery_info[ssdp.ATTR_UPNP_SERIAL].upper()
|
||||||
|
)
|
||||||
|
self._abort_if_unique_id_configured()
|
||||||
|
|
||||||
self.discovered_conf = {
|
self.discovered_conf = {
|
||||||
CONF_NAME: friendly_name,
|
CONF_NAME: friendly_name,
|
||||||
CONF_HOST: parsed_url.hostname,
|
CONF_HOST: parsed_url.hostname,
|
||||||
|
@ -321,6 +321,30 @@ async def test_missing_data_after_login(
|
|||||||
assert result["errors"] == {"base": "missing_data"}
|
assert result["errors"] == {"base": "missing_data"}
|
||||||
|
|
||||||
|
|
||||||
|
async def test_form_ssdp_already_configured(
|
||||||
|
hass: HomeAssistantType, service: MagicMock
|
||||||
|
):
|
||||||
|
"""Test ssdp abort when the serial number is already configured."""
|
||||||
|
await setup.async_setup_component(hass, "persistent_notification", {})
|
||||||
|
|
||||||
|
MockConfigEntry(
|
||||||
|
domain=DOMAIN,
|
||||||
|
data={CONF_HOST: HOST, CONF_USERNAME: USERNAME, CONF_PASSWORD: PASSWORD},
|
||||||
|
unique_id=SERIAL.upper(),
|
||||||
|
).add_to_hass(hass)
|
||||||
|
|
||||||
|
result = await hass.config_entries.flow.async_init(
|
||||||
|
DOMAIN,
|
||||||
|
context={"source": SOURCE_SSDP},
|
||||||
|
data={
|
||||||
|
ssdp.ATTR_SSDP_LOCATION: "http://192.168.1.5:5000",
|
||||||
|
ssdp.ATTR_UPNP_FRIENDLY_NAME: "mydsm",
|
||||||
|
ssdp.ATTR_UPNP_SERIAL: SERIAL,
|
||||||
|
},
|
||||||
|
)
|
||||||
|
assert result["type"] == data_entry_flow.RESULT_TYPE_ABORT
|
||||||
|
|
||||||
|
|
||||||
async def test_form_ssdp(hass: HomeAssistantType, service: MagicMock):
|
async def test_form_ssdp(hass: HomeAssistantType, service: MagicMock):
|
||||||
"""Test we can setup from ssdp."""
|
"""Test we can setup from ssdp."""
|
||||||
await setup.async_setup_component(hass, "persistent_notification", {})
|
await setup.async_setup_component(hass, "persistent_notification", {})
|
||||||
@ -331,6 +355,7 @@ async def test_form_ssdp(hass: HomeAssistantType, service: MagicMock):
|
|||||||
data={
|
data={
|
||||||
ssdp.ATTR_SSDP_LOCATION: "http://192.168.1.5:5000",
|
ssdp.ATTR_SSDP_LOCATION: "http://192.168.1.5:5000",
|
||||||
ssdp.ATTR_UPNP_FRIENDLY_NAME: "mydsm",
|
ssdp.ATTR_UPNP_FRIENDLY_NAME: "mydsm",
|
||||||
|
ssdp.ATTR_UPNP_SERIAL: SERIAL,
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
assert result["type"] == data_entry_flow.RESULT_TYPE_FORM
|
assert result["type"] == data_entry_flow.RESULT_TYPE_FORM
|
||||||
|
Loading…
x
Reference in New Issue
Block a user