示例#1
0
async def distkv_server(n):
    msgs = []
    async with anyio.create_task_group() as tg:
        async with create_broker(test_config,
                                 plugin_namespace="distmqtt.test.plugins"):
            s = Server("test", cfg=broker_config["distkv"], init="test")
            evt = anyio.create_event()
            await tg.spawn(partial(s.serve, ready_evt=evt))
            await evt.wait()

            async with open_client(**broker_config["distkv"]) as cl:

                async def msglog(task_status=trio.TASK_STATUS_IGNORED):
                    async with cl._stream(
                            "msg_monitor", topic="*"
                    ) as mon:  # , topic=broker_config['distkv']['topic']) as mon:
                        log.info("Monitor Start")
                        task_status.started()
                        async for m in mon:
                            log.info("Monitor Msg %r", m.data)
                            msgs.append(m.data)

                await cl.scope.spawn(msglog)
                yield s
                await cl.scope.cancel()
            await tg.cancel_scope.cancel()
    if len(msgs) != n:
        log.error("MsgCount %d %d", len(msgs), n)
示例#2
0
        async def test_coro():
            async with distkv_server(0) as s:
                async with create_broker(
                        broker_config,
                        plugin_namespace="hbmqtt.test.plugins") as broker:
                    async with open_mqttclient() as client:
                        await client.connect('mqtt://127.0.0.1/')
                        self.assertIsNotNone(client.session)
                        async with open_mqttclient() as client_pub:
                            await client_pub.connect('mqtt://127.0.0.1/')
                            await client_pub.publish('test_topic',
                                                     data,
                                                     QOS_0,
                                                     retain=True)
                    await anyio.sleep(1)

                    async with open_mqttclient() as client:
                        await client.connect('mqtt://127.0.0.1/')
                        self.assertIsNotNone(client.session)
                        ret = await client.subscribe([
                            ('test_topic', QOS_0),
                        ])
                        self.assertEqual(ret[0], QOS_0)
                        async with anyio.fail_after(0.5):
                            message = await client.deliver_message()
                        self.assertIsNotNone(message)
                        self.assertIsNotNone(message.publish_packet)
                        self.assertEqual(message.data, data)

                async with create_broker(
                        broker_config,
                        plugin_namespace="hbmqtt.test.plugins") as broker:
                    async with open_mqttclient() as client:
                        await client.connect('mqtt://127.0.0.1/')
                        self.assertIsNotNone(client.session)
                        ret = await client.subscribe([
                            ('test_topic', QOS_0),
                        ])
                        self.assertEqual(ret[0], QOS_0)
                        async with anyio.fail_after(0.5):
                            message = await client.deliver_message()
                        self.assertIsNotNone(message)
                        self.assertIsNotNone(message.publish_packet)
                        self.assertEqual(message.data, data)

                seen = 0
                for h, p, *_ in s.ports:
                    if h[0] != ":":
                        break
                async with open_client(host=h, port=p) as cl:
                    async for m in cl.get_tree(min_depth=1):
                        del m['tock']
                        del m['seq']
                        assert m == {
                            'path': ('test', 'retain', 'test_topic'),
                            'value': b'data 1234'
                        }
                        seen += 1
                assert seen == 1
示例#3
0
 async def test_client(self):
     """
     An async context manager that returns a client that's connected to
     this server.
     """
     async with open_client(connect=dict(
             host="127.0.0.1", port=self.distkv_port)) as client:
         yield client
示例#4
0
async def distkv_server(n):
    msgs = []
    async with anyio.create_task_group() as tg:
        s = Server("test",
                   cfg={
                       "serf": broker_config['distkv']['serf'],
                       "server": {
                           "host": "127.0.0.1",
                           "port": None
                       }
                   },
                   init="test")
        evt = anyio.create_event()
        await tg.spawn(partial(s.serve, ready_evt=evt))
        await evt.wait()

        for h, p, *_ in s.ports:
            if h[0] != ":":
                break
        broker_config['distkv']['server']['host'] = h
        broker_config['distkv']['server']['port'] = p
        async with open_client(host=h, port=p) as cl:

            async def serflog(task_status=trio.TASK_STATUS_IGNORED):
                async with cl._stream(
                        'serfmon',
                        type=broker_config['distkv']['topic']) as mon:
                    log.info("Serf Start")
                    task_status.started()
                    async for m in mon:
                        log.info("Serf Msg %r", m.data)
                        msgs.append(m.data)

            await cl.tg.spawn(serflog)
            yield s
            await cl.tg.cancel_scope.cancel()
        await tg.cancel_scope.cancel()
    assert len(msgs) == n, msgs