mirror of
https://github.com/elisspace/core.git
synced 2026-09-18 00:36:38 +00:00
Ensure homekit bridge state is restored before creating devices (#36098)
* Ensure homekit bridge state is restored before creating devices * Tests to ensure homekit device registry entry is stable * remove stray continue
This commit is contained in:
@@ -19,6 +19,7 @@ from homeassistant.components.homekit.accessories import HomeBridge
|
||||
from homeassistant.components.homekit.const import (
|
||||
AID_STORAGE,
|
||||
BRIDGE_NAME,
|
||||
BRIDGE_SERIAL_NUMBER,
|
||||
CONF_AUTO_START,
|
||||
CONF_ENTRY_INDEX,
|
||||
CONF_SAFE_MODE,
|
||||
@@ -458,7 +459,7 @@ async def test_homekit_entity_filter(hass):
|
||||
assert mock_get_acc.called is False
|
||||
|
||||
|
||||
async def test_homekit_start(hass, hk_driver, debounce_patcher):
|
||||
async def test_homekit_start(hass, hk_driver, device_reg, debounce_patcher):
|
||||
"""Test HomeKit start method."""
|
||||
entry = await async_init_integration(hass)
|
||||
|
||||
@@ -480,6 +481,15 @@ async def test_homekit_start(hass, hk_driver, debounce_patcher):
|
||||
homekit.driver = hk_driver
|
||||
homekit._filter = Mock(return_value=True)
|
||||
|
||||
connection = (device_registry.CONNECTION_NETWORK_MAC, "AA:BB:CC:DD:EE:FF")
|
||||
bridge_with_wrong_mac = device_reg.async_get_or_create(
|
||||
config_entry_id=entry.entry_id,
|
||||
connections={connection},
|
||||
manufacturer="Any",
|
||||
name="Any",
|
||||
model="Home Assistant HomeKit Bridge",
|
||||
)
|
||||
|
||||
hass.states.async_set("light.demo", "on")
|
||||
state = hass.states.async_all()[0]
|
||||
|
||||
@@ -505,6 +515,35 @@ async def test_homekit_start(hass, hk_driver, debounce_patcher):
|
||||
await hass.async_block_till_done()
|
||||
assert not hk_driver_start.called
|
||||
|
||||
assert device_reg.async_get(bridge_with_wrong_mac.id) is None
|
||||
|
||||
device = device_reg.async_get_device(
|
||||
{(DOMAIN, entry.entry_id, BRIDGE_SERIAL_NUMBER)}, {}
|
||||
)
|
||||
assert device
|
||||
formatted_mac = device_registry.format_mac(homekit.driver.state.mac)
|
||||
assert (device_registry.CONNECTION_NETWORK_MAC, formatted_mac) in device.connections
|
||||
|
||||
# Start again to make sure the registry entry is kept
|
||||
homekit.status = STATUS_READY
|
||||
with patch(f"{PATH_HOMEKIT}.HomeKit.add_bridge_accessory") as mock_add_acc, patch(
|
||||
f"{PATH_HOMEKIT}.show_setup_message"
|
||||
) as mock_setup_msg, patch(
|
||||
"pyhap.accessory_driver.AccessoryDriver.add_accessory"
|
||||
) as hk_driver_add_acc, patch(
|
||||
"pyhap.accessory_driver.AccessoryDriver.start"
|
||||
) as hk_driver_start:
|
||||
await homekit.async_start()
|
||||
|
||||
device = device_reg.async_get_device(
|
||||
{(DOMAIN, entry.entry_id, BRIDGE_SERIAL_NUMBER)}, {}
|
||||
)
|
||||
assert device
|
||||
formatted_mac = device_registry.format_mac(homekit.driver.state.mac)
|
||||
assert (device_registry.CONNECTION_NETWORK_MAC, formatted_mac) in device.connections
|
||||
|
||||
assert len(device_reg.devices) == 1
|
||||
|
||||
|
||||
async def test_homekit_start_with_a_broken_accessory(hass, hk_driver, debounce_patcher):
|
||||
"""Test HomeKit start method."""
|
||||
|
||||
Reference in New Issue
Block a user