Use ZeroconfServiceInfo in sonos (#60095)

This commit is contained in:
epenet 2021-11-21 22:49:50 +01:00 committed by GitHub
parent b9cbfbae58
commit b465131170
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 24 additions and 24 deletions

View File

@ -5,7 +5,6 @@ import soco
from homeassistant import config_entries from homeassistant import config_entries
from homeassistant.components import zeroconf from homeassistant.components import zeroconf
from homeassistant.const import CONF_HOST, CONF_NAME
from homeassistant.core import HomeAssistant from homeassistant.core import HomeAssistant
from homeassistant.data_entry_flow import FlowResult from homeassistant.data_entry_flow import FlowResult
from homeassistant.helpers.config_entry_flow import DiscoveryFlowHandler from homeassistant.helpers.config_entry_flow import DiscoveryFlowHandler
@ -31,13 +30,13 @@ class SonosDiscoveryFlowHandler(DiscoveryFlowHandler):
self, discovery_info: zeroconf.ZeroconfServiceInfo self, discovery_info: zeroconf.ZeroconfServiceInfo
) -> FlowResult: ) -> FlowResult:
"""Handle a flow initialized by zeroconf.""" """Handle a flow initialized by zeroconf."""
hostname = discovery_info["hostname"] hostname = discovery_info[zeroconf.ATTR_HOSTNAME]
if hostname is None or not hostname.lower().startswith("sonos"): if hostname is None or not hostname.lower().startswith("sonos"):
return self.async_abort(reason="not_sonos_device") return self.async_abort(reason="not_sonos_device")
await self.async_set_unique_id(self._domain, raise_on_progress=False) await self.async_set_unique_id(self._domain, raise_on_progress=False)
host = discovery_info[CONF_HOST] host = discovery_info[zeroconf.ATTR_HOST]
mdns_name = discovery_info[CONF_NAME] mdns_name = discovery_info[zeroconf.ATTR_NAME]
properties = discovery_info["properties"] properties = discovery_info[zeroconf.ATTR_PROPERTIES]
boot_seqnum = properties.get("bootseq") boot_seqnum = properties.get("bootseq")
model = properties.get("model") model = properties.get("model")
uid = hostname_to_uid(hostname) uid = hostname_to_uid(hostname)

View File

@ -4,6 +4,7 @@ from __future__ import annotations
from unittest.mock import MagicMock, patch from unittest.mock import MagicMock, patch
from homeassistant import config_entries, core from homeassistant import config_entries, core
from homeassistant.components import zeroconf
from homeassistant.components.sonos.const import DATA_SONOS_DISCOVERY_MANAGER, DOMAIN from homeassistant.components.sonos.const import DATA_SONOS_DISCOVERY_MANAGER, DOMAIN
@ -43,12 +44,12 @@ async def test_zeroconf_form(hass: core.HomeAssistant):
result = await hass.config_entries.flow.async_init( result = await hass.config_entries.flow.async_init(
DOMAIN, DOMAIN,
context={"source": config_entries.SOURCE_ZEROCONF}, context={"source": config_entries.SOURCE_ZEROCONF},
data={ data=zeroconf.ZeroconfServiceInfo(
"host": "192.168.4.2", host="192.168.4.2",
"name": "Sonos-aaa@Living Room._sonos._tcp.local.", name="Sonos-aaa@Living Room._sonos._tcp.local.",
"hostname": "Sonos-aaa", hostname="Sonos-aaa",
"properties": {"bootseq": "1234"}, properties={"bootseq": "1234"},
}, ),
) )
assert result["type"] == "form" assert result["type"] == "form"
assert result["errors"] is None assert result["errors"] is None
@ -82,13 +83,13 @@ async def test_zeroconf_sonos_v1(hass: core.HomeAssistant):
result = await hass.config_entries.flow.async_init( result = await hass.config_entries.flow.async_init(
DOMAIN, DOMAIN,
context={"source": config_entries.SOURCE_ZEROCONF}, context={"source": config_entries.SOURCE_ZEROCONF},
data={ data=zeroconf.ZeroconfServiceInfo(
"host": "192.168.1.107", host="192.168.1.107",
"port": 1443, port=1443,
"hostname": "sonos5CAAFDE47AC8.local.", hostname="sonos5CAAFDE47AC8.local.",
"type": "_sonos._tcp.local.", type="_sonos._tcp.local.",
"name": "Sonos-5CAAFDE47AC8._sonos._tcp.local.", name="Sonos-5CAAFDE47AC8._sonos._tcp.local.",
"properties": { properties={
"_raw": { "_raw": {
"info": b"/api/v1/players/RINCON_5CAAFDE47AC801400/info", "info": b"/api/v1/players/RINCON_5CAAFDE47AC801400/info",
"vers": b"1", "vers": b"1",
@ -98,7 +99,7 @@ async def test_zeroconf_sonos_v1(hass: core.HomeAssistant):
"vers": "1", "vers": "1",
"protovers": "1.18.9", "protovers": "1.18.9",
}, },
}, ),
) )
assert result["type"] == "form" assert result["type"] == "form"
assert result["errors"] is None assert result["errors"] is None
@ -132,11 +133,11 @@ async def test_zeroconf_form_not_sonos(hass: core.HomeAssistant):
result = await hass.config_entries.flow.async_init( result = await hass.config_entries.flow.async_init(
DOMAIN, DOMAIN,
context={"source": config_entries.SOURCE_ZEROCONF}, context={"source": config_entries.SOURCE_ZEROCONF},
data={ data=zeroconf.ZeroconfServiceInfo(
"host": "192.168.4.2", host="192.168.4.2",
"hostname": "not-aaa", hostname="not-aaa",
"properties": {"bootseq": "1234"}, properties={"bootseq": "1234"},
}, ),
) )
assert result["type"] == "abort" assert result["type"] == "abort"
assert result["reason"] == "not_sonos_device" assert result["reason"] == "not_sonos_device"