Ejemplo n.º 1
0
 def test_from_stream_qos_2(self):
     data = b"\x37\x13\x00\x05topic\x00\x0a0123456789"
     stream = BufferReader(data)
     message = self.loop.run_until_complete(PublishPacket.from_stream(stream))
     self.assertEqual(message.variable_header.topic_name, "topic")
     self.assertEqual(message.variable_header.packet_id, 10)
     assert (message.fixed_header.flags >> 1) & 0x03
     assert message.fixed_header.flags & 0x01
     assert message.payload.data, b"0123456789"
Ejemplo n.º 2
0
    def build_publish_packet(self, dup=False):
        """
            Build :class:`amqtt.mqtt.publish.PublishPacket` from attributes

        :param dup: force dup flag
        :return: :class:`amqtt.mqtt.publish.PublishPacket` built from ApplicationMessage instance attributes
        """
        return PublishPacket.build(self.topic, self.data, self.packet_id, dup,
                                   self.qos, self.retain)
Ejemplo n.º 3
0
    def test_publish_qos2_retry(self):
        async def server_mock(reader, writer):
            try:
                packet = await PublishPacket.from_stream(reader)
                self.assertEqual(packet.topic_name, "/topic")
                self.assertEqual(packet.qos, QOS_2)
                self.assertIsNotNone(packet.packet_id)
                self.assertIn(packet.packet_id, self.session.inflight_out)
                self.assertIn(packet.packet_id, self.handler._pubrec_waiters)
                pubrec = PubrecPacket.build(packet.packet_id)
                await pubrec.to_stream(writer)

                await PubrelPacket.from_stream(reader)
                self.assertIn(packet.packet_id, self.handler._pubcomp_waiters)
                pubcomp = PubcompPacket.build(packet.packet_id)
                await pubcomp.to_stream(writer)
            except Exception as ae:
                future.set_exception(ae)

        async def test_coro():
            try:
                reader, writer = await asyncio.open_connection("127.0.0.1",
                                                               8888,
                                                               loop=self.loop)
                reader_adapted, writer_adapted = adapt(reader, writer)
                self.handler = ProtocolHandler(self.plugin_manager,
                                               loop=self.loop)
                self.handler.attach(self.session, reader_adapted,
                                    writer_adapted)
                await self.handler.start()
                await self.stop_handler(self.handler, self.session)
                if not future.done():
                    future.set_result(True)
            except Exception as ae:
                future.set_exception(ae)

        self.handler = None
        self.session = Session()
        message = OutgoingApplicationMessage(1, "/topic", QOS_2, b"test_data",
                                             False)
        message.publish_packet = PublishPacket.build("/topic", b"test_data",
                                                     rand_packet_id(), False,
                                                     QOS_2, False)
        self.session.inflight_out[1] = message
        future = asyncio.Future(loop=self.loop)

        coro = asyncio.start_server(server_mock,
                                    "127.0.0.1",
                                    8888,
                                    loop=self.loop)
        server = self.loop.run_until_complete(coro)
        self.loop.run_until_complete(test_coro())
        server.close()
        self.loop.run_until_complete(server.wait_closed())
        if future.exception():
            raise future.exception()
Ejemplo n.º 4
0
 async def server_mock(reader, writer):
     try:
         packet = PublishPacket.build("/topic", b"test_data",
                                      rand_packet_id(), False, QOS_1,
                                      False)
         await packet.to_stream(writer)
         puback = await PubackPacket.from_stream(reader)
         self.assertIsNotNone(puback)
         self.assertEqual(packet.packet_id, puback.packet_id)
     except Exception as ae:
         print(ae)
         future.set_exception(ae)
Ejemplo n.º 5
0
 async def server_mock(reader, writer):
     try:
         packet = PublishPacket.build("/topic", b"test_data",
                                      rand_packet_id(), False, QOS_2,
                                      False)
         await packet.to_stream(writer)
         pubrec = await PubrecPacket.from_stream(reader)
         self.assertIsNotNone(pubrec)
         self.assertEqual(packet.packet_id, pubrec.packet_id)
         self.assertIn(packet.packet_id, self.handler._pubrel_waiters)
         pubrel = PubrelPacket.build(packet.packet_id)
         await pubrel.to_stream(writer)
         pubcomp = await PubcompPacket.from_stream(reader)
         self.assertIsNotNone(pubcomp)
         self.assertEqual(packet.packet_id, pubcomp.packet_id)
     except Exception as ae:
         future.set_exception(ae)
Ejemplo n.º 6
0
    def test_build(self):
        packet = PublishPacket.build("/topic", b"data", 1, False, QOS_0, False)
        self.assertEqual(packet.packet_id, 1)
        self.assertFalse(packet.dup_flag)
        self.assertEqual(packet.qos, QOS_0)
        self.assertFalse(packet.retain_flag)

        packet = PublishPacket.build("/topic", b"data", 1, False, QOS_1, False)
        self.assertEqual(packet.packet_id, 1)
        self.assertFalse(packet.dup_flag)
        self.assertEqual(packet.qos, QOS_1)
        self.assertFalse(packet.retain_flag)

        packet = PublishPacket.build("/topic", b"data", 1, False, QOS_2, False)
        self.assertEqual(packet.packet_id, 1)
        self.assertFalse(packet.dup_flag)
        self.assertEqual(packet.qos, QOS_2)
        self.assertFalse(packet.retain_flag)

        packet = PublishPacket.build("/topic", b"data", 1, True, QOS_0, False)
        self.assertEqual(packet.packet_id, 1)
        assert packet.dup_flag
        self.assertEqual(packet.qos, QOS_0)
        self.assertFalse(packet.retain_flag)

        packet = PublishPacket.build("/topic", b"data", 1, True, QOS_1, False)
        self.assertEqual(packet.packet_id, 1)
        assert packet.dup_flag
        self.assertEqual(packet.qos, QOS_1)
        self.assertFalse(packet.retain_flag)

        packet = PublishPacket.build("/topic", b"data", 1, True, QOS_2, False)
        self.assertEqual(packet.packet_id, 1)
        assert packet.dup_flag
        self.assertEqual(packet.qos, QOS_2)
        self.assertFalse(packet.retain_flag)

        packet = PublishPacket.build("/topic", b"data", 1, False, QOS_0, True)
        self.assertEqual(packet.packet_id, 1)
        self.assertFalse(packet.dup_flag)
        self.assertEqual(packet.qos, QOS_0)
        assert packet.retain_flag

        packet = PublishPacket.build("/topic", b"data", 1, False, QOS_1, True)
        self.assertEqual(packet.packet_id, 1)
        self.assertFalse(packet.dup_flag)
        self.assertEqual(packet.qos, QOS_1)
        assert packet.retain_flag

        packet = PublishPacket.build("/topic", b"data", 1, False, QOS_2, True)
        self.assertEqual(packet.packet_id, 1)
        self.assertFalse(packet.dup_flag)
        self.assertEqual(packet.qos, QOS_2)
        assert packet.retain_flag

        packet = PublishPacket.build("/topic", b"data", 1, True, QOS_0, True)
        self.assertEqual(packet.packet_id, 1)
        assert packet.dup_flag
        self.assertEqual(packet.qos, QOS_0)
        assert packet.retain_flag

        packet = PublishPacket.build("/topic", b"data", 1, True, QOS_1, True)
        self.assertEqual(packet.packet_id, 1)
        assert packet.dup_flag
        self.assertEqual(packet.qos, QOS_1)
        assert packet.retain_flag

        packet = PublishPacket.build("/topic", b"data", 1, True, QOS_2, True)
        self.assertEqual(packet.packet_id, 1)
        assert packet.dup_flag
        self.assertEqual(packet.qos, QOS_2)
        assert packet.retain_flag
Ejemplo n.º 7
0
 def test_to_stream_packet(self):
     variable_header = PublishVariableHeader("topic", 10)
     payload = PublishPayload(b"0123456789")
     publish = PublishPacket(variable_header=variable_header, payload=payload)
     out = publish.to_bytes()
     self.assertEqual(out, b"\x30\x13\x00\x05topic\00\x0a0123456789")
Ejemplo n.º 8
0
 async def server_mock(reader, writer):
     packet = PublishPacket.build("/topic", b"test_data",
                                  rand_packet_id(), False, QOS_0, False)
     await packet.to_stream(writer)