amqtt/tests/mqtt/test_connect.py

93 wiersze
4.3 KiB
Python
Czysty Zwykły widok Historia

2015-05-30 20:29:56 +00:00
# Copyright (c) 2015 Nicolas JOUANIN
#
# See the file license.txt for copying permission.
import unittest
import asyncio
2015-06-11 11:54:37 +00:00
2015-05-30 20:29:56 +00:00
from hbmqtt.codecs.connect import ConnectCodec, ConnectException
2015-06-11 11:54:37 +00:00
from hbmqtt.messages.packet import PacketType, MQTTHeader, ConnectMessage
2015-05-30 20:29:56 +00:00
class TestConnectCodec(unittest.TestCase):
def setUp(self):
self.loop = asyncio.new_event_loop()
def test_decode_ok(self):
data = b'\x00\x04MQTT\x04\xce\x00\x00\x00\x0a0123456789\x00\x09WillTopic\x00\x0bWillMessage\x00\x04user\x00\x08password'
2015-06-11 11:54:37 +00:00
header = MQTTHeader(PacketType.CONNECT, 0x00, len(data))
2015-05-30 20:29:56 +00:00
stream = asyncio.StreamReader(loop=self.loop)
stream.feed_data(data)
message = self.loop.run_until_complete(ConnectCodec.decode(header, stream))
self.assertEqual(message.proto_name, "MQTT")
self.assertEqual(message.proto_level, 4)
self.assertTrue(message.is_user_name_flag())
self.assertTrue(message.is_password_flag())
self.assertFalse(message.is_will_retain())
self.assertEqual(message.will_qos(), 1)
self.assertTrue(message.is_will_flag())
self.assertTrue(message.is_clean_session())
self.assertFalse(message.is_reserved_flag())
def test_decode_fail_protocol_name(self):
data = b'\x00\x04TTQM\x04\xce\x00\x00\x00\x0a0123456789\x00\x09WillTopic\x00\x0bWillMessage\x00\x04user\x00\x08password'
2015-06-11 11:54:37 +00:00
header = MQTTHeader(PacketType.CONNECT, 0x00, len(data))
2015-05-30 20:29:56 +00:00
stream = asyncio.StreamReader(loop=self.loop)
stream.feed_data(data)
with self.assertRaises(ConnectException):
self.loop.run_until_complete(ConnectCodec.decode(header, stream))
def test_decode_fail_reserved_flag(self):
data = b'\x00\x04MQTT\x04\xcf\x00\x00\x00\x0a0123456789\x00\x09WillTopic\x00\x0bWillMessage\x00\x04user\x00\x08password'
2015-06-11 11:54:37 +00:00
header = MQTTHeader(PacketType.CONNECT, 0x00, len(data))
2015-05-30 20:29:56 +00:00
stream = asyncio.StreamReader(loop=self.loop)
stream.feed_data(data)
with self.assertRaises(ConnectException):
self.loop.run_until_complete(ConnectCodec.decode(header, stream))
def test_decode_fail_miss_clientId(self):
data = b'\x00\x04MQTT\x04\xce\x00\x00'
2015-06-11 11:54:37 +00:00
header = MQTTHeader(PacketType.CONNECT, 0x00, len(data))
2015-05-30 20:29:56 +00:00
stream = asyncio.StreamReader(loop=self.loop)
stream.feed_data(data)
stream.feed_eof()
with self.assertRaises(ConnectException):
self.loop.run_until_complete(ConnectCodec.decode(header, stream))
def test_decode_fail_miss_willtopic(self):
data = b'\x00\x04MQTT\x04\xce\x00\x00\x00\x0a0123456789'
2015-06-11 11:54:37 +00:00
header = MQTTHeader(PacketType.CONNECT, 0x00, len(data))
2015-05-30 20:29:56 +00:00
stream = asyncio.StreamReader(loop=self.loop)
stream.feed_data(data)
stream.feed_eof()
with self.assertRaises(ConnectException):
self.loop.run_until_complete(ConnectCodec.decode(header, stream))
def test_decode_fail_miss_username(self):
data = b'\x00\x04MQTT\x04\xce\x00\x00\x00\x0a0123456789\x00\x09WillTopic\x00\x0bWillMessage'
2015-06-11 11:54:37 +00:00
header = MQTTHeader(PacketType.CONNECT, 0x00, len(data))
2015-05-30 20:29:56 +00:00
stream = asyncio.StreamReader(loop=self.loop)
stream.feed_data(data)
stream.feed_eof()
with self.assertRaises(ConnectException):
self.loop.run_until_complete(ConnectCodec.decode(header, stream))
def test_decode_fail_miss_password(self):
data = b'\x00\x04MQTT\x04\xce\x00\x00\x00\x0a0123456789\x00\x09WillTopic\x00\x0bWillMessage\x00\x04user'
2015-06-11 11:54:37 +00:00
header = MQTTHeader(PacketType.CONNECT, 0x00, len(data))
2015-05-30 20:29:56 +00:00
stream = asyncio.StreamReader(loop=self.loop)
stream.feed_data(data)
stream.feed_eof()
with self.assertRaises(ConnectException):
self.loop.run_until_complete(ConnectCodec.decode(header, stream))
2015-05-31 12:59:39 +00:00
def test_encode(self):
2015-06-11 11:54:37 +00:00
header = MQTTHeader(PacketType.CONNECT, 0x00, 0)
2015-05-31 12:59:39 +00:00
message = ConnectMessage(header, 0xce, 0, 'MQTT', 4)
message.client_id = '0123456789'
message.will_topic = 'WillTopic'
message.will_message = 'WillMessage'
message.user_name = 'user'
message.password = 'password'
2015-06-09 12:03:50 +00:00
encoded = yield from ConnectCodec.encode(message)
2015-05-31 15:22:39 +00:00
self.assertEqual(encoded, b'\x10\x3e\x00\x04MQTT\x04\xce\x00\x00\x00\x0a0123456789\x00\x09WillTopic\x00\x0bWillMessage\x00\x04user\x00\x08password')