diff --git a/homeassistant/components/homekit/__init__.py b/homeassistant/components/homekit/__init__.py index 10532c11da80ecc1866657bd5613cbf5d6cc5495..0d0531a986e2e58a990c1e40e2706bced9d63242 100644 --- a/homeassistant/components/homekit/__init__.py +++ b/homeassistant/components/homekit/__init__.py @@ -389,6 +389,7 @@ class HomeKit: self.hass, self._entry_id, self._name, + loop=self.hass.loop, address=ip_addr, port=self._port, persist_file=persist_file, @@ -498,6 +499,9 @@ class HomeKit: self._async_register_bridge(dev_reg) await self.hass.async_add_executor_job(self._start, bridged_states) + _LOGGER.debug("Driver start for %s", self._name) + self.hass.add_job(self.driver.start_service) + self.status = STATUS_RUNNING @callback def _async_register_bridge(self, dev_reg): @@ -570,17 +574,13 @@ class HomeKit: self.bridge.xhm_uri(), ) - _LOGGER.debug("Driver start for %s", self._name) - self.hass.add_job(self.driver.start) - self.status = STATUS_RUNNING - async def async_stop(self, *args): """Stop the accessory driver.""" if self.status != STATUS_RUNNING: return self.status = STATUS_STOPPED _LOGGER.debug("Driver stop for %s", self._name) - self.hass.add_job(self.driver.stop) + await self.driver.async_stop() for acc in self.bridge.accessories.values(): acc.async_stop() diff --git a/homeassistant/components/homekit/manifest.json b/homeassistant/components/homekit/manifest.json index 8a5fc90ae0714dcbfab21942c9691052362ccac8..916a8cbde76a4c90e4e30d6baeaaaaea253de21f 100644 --- a/homeassistant/components/homekit/manifest.json +++ b/homeassistant/components/homekit/manifest.json @@ -3,7 +3,7 @@ "name": "HomeKit", "documentation": "https://www.home-assistant.io/integrations/homekit", "requirements": [ - "HAP-python==2.9.1", + "HAP-python==2.9.2", "fnvhash==0.1.0", "PyQRCode==1.2.1", "base36==0.1.1", diff --git a/requirements_all.txt b/requirements_all.txt index d3c83d2b050b6a9d6b15407d0b8edcc106ceec69..9435e7aa2f597806158cb4c3e737622e65a32be3 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -36,7 +36,7 @@ Adafruit-SHT31==1.0.2 # Adafruit_BBIO==1.1.1 # homeassistant.components.homekit -HAP-python==2.9.1 +HAP-python==2.9.2 # homeassistant.components.mastodon Mastodon.py==1.5.1 diff --git a/requirements_test_all.txt b/requirements_test_all.txt index c4d3c067c7c31734e88441f9f1499963434b46d1..e57888b3f54e7417bc0b96dd8f43f99f88517575 100644 --- a/requirements_test_all.txt +++ b/requirements_test_all.txt @@ -4,7 +4,7 @@ -r requirements_test.txt # homeassistant.components.homekit -HAP-python==2.9.1 +HAP-python==2.9.2 # homeassistant.components.plugwise Plugwise_Smile==1.1.0 diff --git a/tests/components/homekit/test_homekit.py b/tests/components/homekit/test_homekit.py index 3bc2c69c084b3698bdd41d2a5638071935c15654..f281cda0c023c82736347f0b453a54647a2551c1 100644 --- a/tests/components/homekit/test_homekit.py +++ b/tests/components/homekit/test_homekit.py @@ -210,6 +210,7 @@ async def test_homekit_setup(hass, hk_driver): hass, entry.entry_id, BRIDGE_NAME, + loop=hass.loop, address=IP_ADDRESS, port=DEFAULT_PORT, persist_file=path, @@ -251,6 +252,7 @@ async def test_homekit_setup_ip_address(hass, hk_driver): hass, entry.entry_id, BRIDGE_NAME, + loop=hass.loop, address="172.0.0.0", port=DEFAULT_PORT, persist_file=path, @@ -288,6 +290,7 @@ async def test_homekit_setup_advertise_ip(hass, hk_driver): hass, entry.entry_id, BRIDGE_NAME, + loop=hass.loop, address="0.0.0.0", port=DEFAULT_PORT, persist_file=path, @@ -494,7 +497,7 @@ async def test_homekit_start(hass, hk_driver, device_reg, debounce_patcher): ) as mock_setup_msg, patch( "pyhap.accessory_driver.AccessoryDriver.add_accessory" ) as hk_driver_add_acc, patch( - "pyhap.accessory_driver.AccessoryDriver.start" + "pyhap.accessory_driver.AccessoryDriver.start_service" ) as hk_driver_start: await homekit.async_start() @@ -527,7 +530,7 @@ async def test_homekit_start(hass, hk_driver, device_reg, debounce_patcher): ) as mock_setup_msg, patch( "pyhap.accessory_driver.AccessoryDriver.add_accessory" ) as hk_driver_add_acc, patch( - "pyhap.accessory_driver.AccessoryDriver.start" + "pyhap.accessory_driver.AccessoryDriver.start_service" ) as hk_driver_start: await homekit.async_start() @@ -574,7 +577,7 @@ async def test_homekit_start_with_a_broken_accessory(hass, hk_driver, debounce_p ) as mock_setup_msg, patch( "pyhap.accessory_driver.AccessoryDriver.add_accessory", ) as hk_driver_add_acc, patch( - "pyhap.accessory_driver.AccessoryDriver.start" + "pyhap.accessory_driver.AccessoryDriver.start_service" ) as hk_driver_start: await homekit.async_start() @@ -607,11 +610,10 @@ async def test_homekit_stop(hass): entry_id=entry.entry_id, ) homekit.driver = Mock() + homekit.driver.async_stop = AsyncMock() homekit.bridge = Mock() homekit.bridge.accessories = {} - await async_init_integration(hass) - assert homekit.status == STATUS_READY await homekit.async_stop() await hass.async_block_till_done() @@ -621,13 +623,13 @@ async def test_homekit_stop(hass): homekit.status = STATUS_STOPPED await homekit.async_stop() await hass.async_block_till_done() - assert homekit.driver.stop.called is False + assert homekit.driver.async_stop.called is False # Test if driver is started homekit.status = STATUS_RUNNING await homekit.async_stop() await hass.async_block_till_done() - assert homekit.driver.stop.called is True + assert homekit.driver.async_stop.called is True async def test_homekit_reset_accessories(hass): @@ -655,7 +657,7 @@ async def test_homekit_reset_accessories(hass): ), patch("pyhap.accessory.Bridge.add_accessory") as mock_add_accessory, patch( "pyhap.accessory_driver.AccessoryDriver.config_changed" ) as hk_driver_config_changed, patch( - "pyhap.accessory_driver.AccessoryDriver.start" + "pyhap.accessory_driver.AccessoryDriver.start_service" ): await async_init_entry(hass, entry) @@ -702,7 +704,7 @@ async def test_homekit_too_many_accessories(hass, hk_driver): hass.states.async_set("light.demo", "on") - with patch("pyhap.accessory_driver.AccessoryDriver.start"), patch( + with patch("pyhap.accessory_driver.AccessoryDriver.start_service"), patch( "pyhap.accessory_driver.AccessoryDriver.add_accessory" ), patch("homeassistant.components.homekit._LOGGER.warning") as mock_warn, patch( f"{PATH_HOMEKIT}.show_setup_message" @@ -916,7 +918,7 @@ async def test_raise_config_entry_not_ready(hass): await hass.async_block_till_done() -async def test_homekit_uses_system_zeroconf(hass, mock_zeroconf): +async def test_homekit_uses_system_zeroconf(hass, hk_driver, mock_zeroconf): """Test HomeKit uses system zeroconf.""" entry = MockConfigEntry( domain=DOMAIN, @@ -925,15 +927,11 @@ async def test_homekit_uses_system_zeroconf(hass, mock_zeroconf): ) system_zc = await zeroconf.async_get_instance(hass) - with patch(f"{PATH_HOMEKIT}.HomeKit.add_bridge_accessory"), patch( - f"{PATH_HOMEKIT}.show_setup_message" - ), patch("pyhap.accessory_driver.AccessoryDriver.add_accessory"), patch( - "pyhap.accessory_driver.AccessoryDriver.start" - ): - entry.add_to_hass(hass) - assert await hass.config_entries.async_setup(entry.entry_id) - await hass.async_block_till_done() - assert hass.data[DOMAIN][entry.entry_id][HOMEKIT].driver.advertiser == system_zc + entry.add_to_hass(hass) + assert await hass.config_entries.async_setup(entry.entry_id) + await hass.async_block_till_done() + assert hass.data[DOMAIN][entry.entry_id][HOMEKIT].driver.advertiser == system_zc + await hass.async_block_till_done() def _write_data(path: str, data: Dict) -> None: