async def test_bridge_with_multiple_sync_run_at_interval_accessories(): with patch("pyhap.accessory_driver.HAPServer.async_stop", new_callable=AsyncMock), patch( "pyhap.accessory_driver.HAPServer.async_start", new_callable=AsyncMock ), patch("pyhap.accessory_driver.Zeroconf"), patch( "pyhap.accessory_driver.AccessoryDriver.persist"), patch( "pyhap.accessory_driver.AccessoryDriver.load"): driver = AccessoryDriver(loop=asyncio.get_event_loop()) bridge = Bridge(driver, "mybridge") acc = SyncIntervalAccessory(driver, "TestAcc", aid=2) acc2 = SyncIntervalAccessory(driver, "TestAcc2", aid=3) acc3 = SyncIntervalAccessory(driver, "TestAcc3", aid=4) bridge.add_accessory(acc) bridge.add_accessory(acc2) bridge.add_accessory(acc3) driver.add_accessory(bridge) driver.start_service() await asyncio.sleep(0.5) assert not driver.loop.is_closed() await driver.async_stop() assert acc.counter > 2 assert acc2.counter > 2 assert acc3.counter > 2
async def test_start_stop_async_acc(): """Verify run_at_interval closes the driver.""" with patch("pyhap.accessory_driver.HAPServer.async_stop", new_callable=AsyncMock), patch( "pyhap.accessory_driver.HAPServer.async_start", new_callable=AsyncMock ), patch("pyhap.accessory_driver.Zeroconf"), patch( "pyhap.accessory_driver.AccessoryDriver.persist"), patch( "pyhap.accessory_driver.AccessoryDriver.load"): driver = AccessoryDriver(loop=asyncio.get_event_loop()) run_event = asyncio.Event() class Acc(Accessory): @Accessory.run_at_interval(0) async def run(self): run_event.set() def setup_message(self): pass acc = Acc(driver, "TestAcc") driver.add_accessory(acc) driver.start_service() await asyncio.sleep(0) await run_event.wait() assert not driver.loop.is_closed() await driver.async_stop() assert not driver.loop.is_closed()
async def test_start_from_async_stop_from_executor(): with patch("pyhap.accessory_driver.HAPServer.async_stop", new_callable=AsyncMock), patch( "pyhap.accessory_driver.HAPServer.async_start", new_callable=AsyncMock ), patch("pyhap.accessory_driver.Zeroconf"), patch( "pyhap.accessory_driver.AccessoryDriver.persist"), patch( "pyhap.accessory_driver.AccessoryDriver.load"): driver = AccessoryDriver(loop=asyncio.get_event_loop()) run_event = asyncio.Event() class Acc(Accessory): @Accessory.run_at_interval(0) def run(self): # pylint: disable=invalid-overridden-method run_event.set() def setup_message(self): pass acc = Acc(driver, "TestAcc") driver.add_accessory(acc) driver.start_service() await run_event.wait() assert not driver.loop.is_closed() await driver.loop.run_in_executor(None, driver.stop) await driver.aio_stop_event.wait()
def start(self): drv = AccessoryDriver(port=self.port) self.accessory = PowerSwitch(self.mtda, drv, self.name) drv.add_accessory(self.accessory) drv.start_service()