Randomize packet ID

pull/8/head
Nico 2015-11-01 21:55:24 +01:00
rodzic 8dab60a444
commit dd1a5bde6a
2 zmienionych plików z 11 dodań i 6 usunięć

Wyświetl plik

@ -333,7 +333,7 @@ class ProtocolHandler:
# Wait PUBREL # Wait PUBREL
if app_message.packet_id in self._pubrel_waiters: if app_message.packet_id in self._pubrel_waiters:
# PUBREL waiter already exists for this packet ID # PUBREL waiter already exists for this packet ID
message = "Can't add PUBREC waiter, a waiter already exists for message Id '%s'" \ message = "Can't add PUBREL waiter, a waiter already exists for message Id '%s'" \
% app_message.packet_id % app_message.packet_id
self.logger.warning(message) self.logger.warning(message)
raise HBMQTTException(message) raise HBMQTTException(message)

Wyświetl plik

@ -4,6 +4,7 @@
import unittest import unittest
import asyncio import asyncio
import logging import logging
import random
from hbmqtt.plugins.manager import PluginManager from hbmqtt.plugins.manager import PluginManager
from hbmqtt.session import Session, OutgoingApplicationMessage, IncomingApplicationMessage from hbmqtt.session import Session, OutgoingApplicationMessage, IncomingApplicationMessage
from hbmqtt.mqtt.protocol.handler import ProtocolHandler from hbmqtt.mqtt.protocol.handler import ProtocolHandler
@ -20,6 +21,10 @@ logging.basicConfig(level=logging.DEBUG, format=formatter)
log = logging.getLogger(__name__) log = logging.getLogger(__name__)
def rand_packet_id():
return random.randint(0, 65535)
def adapt(reader, writer): def adapt(reader, writer):
return StreamReaderAdapter(reader), StreamWriterAdapter(writer) return StreamReaderAdapter(reader), StreamWriterAdapter(writer)
@ -211,7 +216,7 @@ class ProtocolHandlerTest(unittest.TestCase):
def test_receive_qos0(self): def test_receive_qos0(self):
@asyncio.coroutine @asyncio.coroutine
def server_mock(reader, writer): def server_mock(reader, writer):
packet = PublishPacket.build('/topic', b'test_data', 1, False, QOS_0, False) packet = PublishPacket.build('/topic', b'test_data', rand_packet_id(), False, QOS_0, False)
yield from packet.to_stream(writer) yield from packet.to_stream(writer)
@asyncio.coroutine @asyncio.coroutine
@ -249,7 +254,7 @@ class ProtocolHandlerTest(unittest.TestCase):
@asyncio.coroutine @asyncio.coroutine
def server_mock(reader, writer): def server_mock(reader, writer):
try: try:
packet = PublishPacket.build('/topic', b'test_data', 1, False, QOS_1, False) packet = PublishPacket.build('/topic', b'test_data', rand_packet_id(), False, QOS_1, False)
yield from packet.to_stream(writer) yield from packet.to_stream(writer)
puback = yield from PubackPacket.from_stream(reader) puback = yield from PubackPacket.from_stream(reader)
self.assertIsNotNone(puback) self.assertIsNotNone(puback)
@ -294,7 +299,7 @@ class ProtocolHandlerTest(unittest.TestCase):
@asyncio.coroutine @asyncio.coroutine
def server_mock(reader, writer): def server_mock(reader, writer):
try: try:
packet = PublishPacket.build('/topic', b'test_data', 2, False, QOS_2, False) packet = PublishPacket.build('/topic', b'test_data', rand_packet_id(), False, QOS_2, False)
yield from packet.to_stream(writer) yield from packet.to_stream(writer)
pubrec = yield from PubrecPacket.from_stream(reader) pubrec = yield from PubrecPacket.from_stream(reader)
self.assertIsNotNone(pubrec) self.assertIsNotNone(pubrec)
@ -394,7 +399,7 @@ class ProtocolHandlerTest(unittest.TestCase):
self.handler = None self.handler = None
self.session = Session() self.session = Session()
message = OutgoingApplicationMessage(1, '/topic', QOS_1, b'test_data', False) message = OutgoingApplicationMessage(1, '/topic', QOS_1, b'test_data', False)
message.publish_packet = PublishPacket.build('/topic', b'test_data', 1, False, QOS_1, False) message.publish_packet = PublishPacket.build('/topic', b'test_data', rand_packet_id(), False, QOS_1, False)
self.session.inflight_out[1] = message self.session.inflight_out[1] = message
future = asyncio.Future(loop=self.loop) future = asyncio.Future(loop=self.loop)
@ -442,7 +447,7 @@ class ProtocolHandlerTest(unittest.TestCase):
self.handler = None self.handler = None
self.session = Session() self.session = Session()
message = OutgoingApplicationMessage(1, '/topic', QOS_2, b'test_data', False) message = OutgoingApplicationMessage(1, '/topic', QOS_2, b'test_data', False)
message.publish_packet = PublishPacket.build('/topic', b'test_data', 1, False, QOS_2, False) message.publish_packet = PublishPacket.build('/topic', b'test_data', rand_packet_id(), False, QOS_2, False)
self.session.inflight_out[1] = message self.session.inflight_out[1] = message
future = asyncio.Future(loop=self.loop) future = asyncio.Future(loop=self.loop)