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.core import HomeAssistant, callback
|
||||
from homeassistant.exceptions import HomeAssistantError
|
||||
from homeassistant.helpers.hassio import is_hassio
|
||||
from homeassistant.helpers.selector import FileSelector, FileSelectorConfig
|
||||
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.manufacturer = "Nabu Casa"
|
||||
|
||||
# Present the multi-PAN addon as a setup option, if it's available
|
||||
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,
|
||||
if is_hassio(hass):
|
||||
# Present the multi-PAN addon as a setup option, if it's available
|
||||
multipan_manager = (
|
||||
await silabs_multiprotocol_addon.get_multiprotocol_addon_manager(hass)
|
||||
)
|
||||
|
||||
addon_port.description = "Multiprotocol add-on"
|
||||
addon_port.manufacturer = "Nabu Casa"
|
||||
ports.append(addon_port)
|
||||
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"
|
||||
addon_port.manufacturer = "Nabu Casa"
|
||||
ports.append(addon_port)
|
||||
|
||||
return ports
|
||||
|
||||
|
|
|
@ -21,7 +21,7 @@ import zigpy.types
|
|||
|
||||
from homeassistant import config_entries
|
||||
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.zha import config_flow, radio_manager
|
||||
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:
|
||||
"""Test config flow serial port name for multiprotocol add-on."""
|
||||
|
||||
with (
|
||||
patch("homeassistant.components.zha.config_flow.is_hassio", return_value=True),
|
||||
patch(
|
||||
"homeassistant.components.hassio.addon_manager.AddonManager.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.hostname = "core-silabs-multiprotocol"
|
||||
ports = await config_flow.list_serial_ports(hass)
|
||||
|
||||
result = await hass.config_entries.flow.async_init(
|
||||
DOMAIN,
|
||||
context={CONF_SOURCE: SOURCE_USER},
|
||||
)
|
||||
assert len(ports) == 1
|
||||
assert ports[0].description == "Multiprotocol add-on"
|
||||
assert ports[0].manufacturer == "Nabu Casa"
|
||||
assert ports[0].device == "socket://core-silabs-multiprotocol:9999"
|
||||
|
||||
assert (
|
||||
result["data_schema"].schema["path"].container[0]
|
||||
== "socket://core-silabs-multiprotocol:9999 - Multiprotocol add-on - Nabu Casa"
|
||||
)
|
||||
|
||||
async def test_config_flow_port_no_multiprotocol(hass: HomeAssistant) -> None:
|
||||
"""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()]))
|
||||
|
|
Loading…
Add table
Reference in a new issue