import asyncio from hauptbahnhof import Hauptbahnhof from babel.babel import Babel messages = asyncio.Queue() async def on_message(client, message, _): print("Got message: %s"%message) await messages.put(message) async def test(loop): testbf = Hauptbahnhof(loop=loop) testbf.subscribe("/haspa/led", on_message) await asyncio.sleep(2) await testbf.publish("/haspa/power", {'ledstrip':1023}) # Now everythin should be set up msg = await asyncio.wait_for(messages.get(), 10) # wait max 10 secs for a in msg.values(): for lamp_value in a: assert(lamp_value == 1023) await testbf.publish("/haspa/power", {'ledstrip-c-1':42}) msg = await asyncio.wait_for(messages.get(), 10) # wait max 10 secs for espidx, a in msg.items(): for lamp_idx, lamp_value in enumerate(a): if espidx == 'esp1' and lamp_idx == 0: assert(lamp_value == 42) else: assert(lamp_value == 1023) try: await testbf.teardown() except asyncio.CancelledError: pass def main(): loop = asyncio.get_event_loop() lib = Babel(loop=loop) result = loop.run_until_complete(test(loop)) loop.run_until_complete(lib.teardown()) loop.set_debug(True) if result: exit(0) else: exit(1) if __name__=="__main__": main()