Ensure ZHA setup works with container installs (#130470)
This commit is contained in:
parent
58fd917cb7
commit
245fc246d8
2 changed files with 53 additions and 26 deletions
|
@ -33,6 +33,7 @@ from homeassistant.config_entries import (
|
||||||
from homeassistant.const import CONF_NAME
|
from homeassistant.const import CONF_NAME
|
||||||
from homeassistant.core import HomeAssistant, callback
|
from homeassistant.core import HomeAssistant, callback
|
||||||
from homeassistant.exceptions import HomeAssistantError
|
from homeassistant.exceptions import HomeAssistantError
|
||||||
|
from homeassistant.helpers.hassio import is_hassio
|
||||||
from homeassistant.helpers.selector import FileSelector, FileSelectorConfig
|
from homeassistant.helpers.selector import FileSelector, FileSelectorConfig
|
||||||
from homeassistant.util import dt as dt_util
|
from homeassistant.util import dt as dt_util
|
||||||
|
|
||||||
|
@ -104,25 +105,26 @@ async def list_serial_ports(hass: HomeAssistant) -> list[ListPortInfo]:
|
||||||
yellow_radio.description = "Yellow Zigbee module"
|
yellow_radio.description = "Yellow Zigbee module"
|
||||||
yellow_radio.manufacturer = "Nabu Casa"
|
yellow_radio.manufacturer = "Nabu Casa"
|
||||||
|
|
||||||
# Present the multi-PAN addon as a setup option, if it's available
|
if is_hassio(hass):
|
||||||
multipan_manager = await silabs_multiprotocol_addon.get_multiprotocol_addon_manager(
|
# Present the multi-PAN addon as a setup option, if it's available
|
||||||
hass
|
multipan_manager = (
|
||||||
)
|
await silabs_multiprotocol_addon.get_multiprotocol_addon_manager(hass)
|
||||||
|
|
||||||
try:
|
|
||||||
addon_info = await multipan_manager.async_get_addon_info()
|
|
||||||
except (AddonError, KeyError):
|
|
||||||
addon_info = None
|
|
||||||
|
|
||||||
if addon_info is not None and addon_info.state != AddonState.NOT_INSTALLED:
|
|
||||||
addon_port = ListPortInfo(
|
|
||||||
device=silabs_multiprotocol_addon.get_zigbee_socket(),
|
|
||||||
skip_link_detection=True,
|
|
||||||
)
|
)
|
||||||
|
|
||||||
addon_port.description = "Multiprotocol add-on"
|
try:
|
||||||
addon_port.manufacturer = "Nabu Casa"
|
addon_info = await multipan_manager.async_get_addon_info()
|
||||||
ports.append(addon_port)
|
except (AddonError, KeyError):
|
||||||
|
addon_info = None
|
||||||
|
|
||||||
|
if addon_info is not None and addon_info.state != AddonState.NOT_INSTALLED:
|
||||||
|
addon_port = ListPortInfo(
|
||||||
|
device=silabs_multiprotocol_addon.get_zigbee_socket(),
|
||||||
|
skip_link_detection=True,
|
||||||
|
)
|
||||||
|
|
||||||
|
addon_port.description = "Multiprotocol add-on"
|
||||||
|
addon_port.manufacturer = "Nabu Casa"
|
||||||
|
ports.append(addon_port)
|
||||||
|
|
||||||
return ports
|
return ports
|
||||||
|
|
||||||
|
|
|
@ -21,7 +21,7 @@ import zigpy.types
|
||||||
|
|
||||||
from homeassistant import config_entries
|
from homeassistant import config_entries
|
||||||
from homeassistant.components import ssdp, usb, zeroconf
|
from homeassistant.components import ssdp, usb, zeroconf
|
||||||
from homeassistant.components.hassio import AddonState
|
from homeassistant.components.hassio import AddonError, AddonState
|
||||||
from homeassistant.components.ssdp import ATTR_UPNP_MANUFACTURER_URL, ATTR_UPNP_SERIAL
|
from homeassistant.components.ssdp import ATTR_UPNP_MANUFACTURER_URL, ATTR_UPNP_SERIAL
|
||||||
from homeassistant.components.zha import config_flow, radio_manager
|
from homeassistant.components.zha import config_flow, radio_manager
|
||||||
from homeassistant.components.zha.const import (
|
from homeassistant.components.zha.const import (
|
||||||
|
@ -1878,10 +1878,23 @@ async def test_config_flow_port_yellow_port_name(hass: HomeAssistant) -> None:
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
async def test_config_flow_ports_no_hassio(hass: HomeAssistant) -> None:
|
||||||
|
"""Test config flow serial port name when this is not a hassio install."""
|
||||||
|
|
||||||
|
with (
|
||||||
|
patch("homeassistant.components.zha.config_flow.is_hassio", return_value=False),
|
||||||
|
patch("serial.tools.list_ports.comports", MagicMock(return_value=[])),
|
||||||
|
):
|
||||||
|
ports = await config_flow.list_serial_ports(hass)
|
||||||
|
|
||||||
|
assert ports == []
|
||||||
|
|
||||||
|
|
||||||
async def test_config_flow_port_multiprotocol_port_name(hass: HomeAssistant) -> None:
|
async def test_config_flow_port_multiprotocol_port_name(hass: HomeAssistant) -> None:
|
||||||
"""Test config flow serial port name for multiprotocol add-on."""
|
"""Test config flow serial port name for multiprotocol add-on."""
|
||||||
|
|
||||||
with (
|
with (
|
||||||
|
patch("homeassistant.components.zha.config_flow.is_hassio", return_value=True),
|
||||||
patch(
|
patch(
|
||||||
"homeassistant.components.hassio.addon_manager.AddonManager.async_get_addon_info"
|
"homeassistant.components.hassio.addon_manager.AddonManager.async_get_addon_info"
|
||||||
) as async_get_addon_info,
|
) as async_get_addon_info,
|
||||||
|
@ -1889,16 +1902,28 @@ async def test_config_flow_port_multiprotocol_port_name(hass: HomeAssistant) ->
|
||||||
):
|
):
|
||||||
async_get_addon_info.return_value.state = AddonState.RUNNING
|
async_get_addon_info.return_value.state = AddonState.RUNNING
|
||||||
async_get_addon_info.return_value.hostname = "core-silabs-multiprotocol"
|
async_get_addon_info.return_value.hostname = "core-silabs-multiprotocol"
|
||||||
|
ports = await config_flow.list_serial_ports(hass)
|
||||||
|
|
||||||
result = await hass.config_entries.flow.async_init(
|
assert len(ports) == 1
|
||||||
DOMAIN,
|
assert ports[0].description == "Multiprotocol add-on"
|
||||||
context={CONF_SOURCE: SOURCE_USER},
|
assert ports[0].manufacturer == "Nabu Casa"
|
||||||
)
|
assert ports[0].device == "socket://core-silabs-multiprotocol:9999"
|
||||||
|
|
||||||
assert (
|
|
||||||
result["data_schema"].schema["path"].container[0]
|
async def test_config_flow_port_no_multiprotocol(hass: HomeAssistant) -> None:
|
||||||
== "socket://core-silabs-multiprotocol:9999 - Multiprotocol add-on - Nabu Casa"
|
"""Test config flow serial port listing when addon info fails to load."""
|
||||||
)
|
|
||||||
|
with (
|
||||||
|
patch("homeassistant.components.zha.config_flow.is_hassio", return_value=True),
|
||||||
|
patch(
|
||||||
|
"homeassistant.components.hassio.addon_manager.AddonManager.async_get_addon_info",
|
||||||
|
side_effect=AddonError,
|
||||||
|
),
|
||||||
|
patch("serial.tools.list_ports.comports", MagicMock(return_value=[])),
|
||||||
|
):
|
||||||
|
ports = await config_flow.list_serial_ports(hass)
|
||||||
|
|
||||||
|
assert ports == []
|
||||||
|
|
||||||
|
|
||||||
@patch("serial.tools.list_ports.comports", MagicMock(return_value=[com_port()]))
|
@patch("serial.tools.list_ports.comports", MagicMock(return_value=[com_port()]))
|
||||||
|
|
Loading…
Add table
Reference in a new issue