예제 #1
0
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
예제 #2
0
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()
예제 #3
0
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()
예제 #4
0
 def start(self):
     drv = AccessoryDriver(port=self.port)
     self.accessory = PowerSwitch(self.mtda, drv, self.name)
     drv.add_accessory(self.accessory)
     drv.start_service()