amqtt/tests/mqtt/test_connect.py

108 wiersze
5.6 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-06-13 13:05:42 +00:00
from hbmqtt.mqtt.connect import ConnectPacket, ConnectVariableHeader, ConnectPayload
from hbmqtt.mqtt.packet import MQTTFixedHeader, PacketType
from hbmqtt.errors import MQTTException
2015-06-11 11:54:37 +00:00
2015-06-13 13:05:42 +00:00
class ConnectPacketTest(unittest.TestCase):
2015-05-30 20:29:56 +00:00
def setUp(self):
self.loop = asyncio.new_event_loop()
def test_decode_ok(self):
2015-06-13 13:05:42 +00:00
data = b'\x10\x3e\x00\x04MQTT\x04\xce\x00\x00\x00\x0a0123456789\x00\x09WillTopic\x00\x0bWillMessage\x00\x04user\x00\x08password'
2015-05-30 20:29:56 +00:00
stream = asyncio.StreamReader(loop=self.loop)
stream.feed_data(data)
2015-06-13 13:05:42 +00:00
message = self.loop.run_until_complete(ConnectPacket.from_stream(stream))
self.assertEqual(message.variable_header.proto_name, "MQTT")
self.assertEqual(message.variable_header.proto_level, 4)
self.assertTrue(message.variable_header.username_flag)
self.assertTrue(message.variable_header.password_flag)
self.assertFalse(message.variable_header.will_retain_flag)
self.assertEqual(message.variable_header.will_qos, 1)
self.assertTrue(message.variable_header.will_flag)
self.assertTrue(message.variable_header.clean_session_flag)
self.assertFalse(message.variable_header.reserved_flag)
self.assertEqual(message.payload.client_id, '0123456789')
self.assertEqual(message.payload.will_topic, 'WillTopic')
self.assertEqual(message.payload.will_message, b'WillMessage')
2015-06-13 13:05:42 +00:00
self.assertEqual(message.payload.username, 'user')
self.assertEqual(message.payload.password, 'password')
2015-05-30 20:29:56 +00:00
2015-07-15 20:06:16 +00:00
def test_decode_ok_will_flag(self):
data = b'\x10\x26\x00\x04MQTT\x04\xca\x00\x00\x00\x0a0123456789\x00\x04user\x00\x08password'
stream = asyncio.StreamReader(loop=self.loop)
stream.feed_data(data)
message = self.loop.run_until_complete(ConnectPacket.from_stream(stream))
self.assertEqual(message.variable_header.proto_name, "MQTT")
self.assertEqual(message.variable_header.proto_level, 4)
self.assertTrue(message.variable_header.username_flag)
self.assertTrue(message.variable_header.password_flag)
self.assertFalse(message.variable_header.will_retain_flag)
self.assertEqual(message.variable_header.will_qos, 1)
self.assertFalse(message.variable_header.will_flag)
self.assertTrue(message.variable_header.clean_session_flag)
self.assertFalse(message.variable_header.reserved_flag)
self.assertEqual(message.payload.client_id, '0123456789')
self.assertEqual(message.payload.will_topic, None)
self.assertEqual(message.payload.will_message, None)
self.assertEqual(message.payload.username, 'user')
self.assertEqual(message.payload.password, 'password')
2015-05-30 20:29:56 +00:00
def test_decode_fail_protocol_name(self):
2015-06-13 13:05:42 +00:00
data = b'\x10\x3e\x00\x04TTQM\x04\xce\x00\x00\x00\x0a0123456789\x00\x09WillTopic\x00\x0bWillMessage\x00\x04user\x00\x08password'
2015-05-30 20:29:56 +00:00
stream = asyncio.StreamReader(loop=self.loop)
stream.feed_data(data)
2015-06-13 13:05:42 +00:00
with self.assertRaises(MQTTException):
self.loop.run_until_complete(ConnectPacket.from_stream(stream))
2015-05-30 20:29:56 +00:00
def test_decode_fail_reserved_flag(self):
2015-06-13 13:05:42 +00:00
data = b'\x10\x3e\x00\x04MQTT\x04\xcf\x00\x00\x00\x0a0123456789\x00\x09WillTopic\x00\x0bWillMessage\x00\x04user\x00\x08password'
2015-05-30 20:29:56 +00:00
stream = asyncio.StreamReader(loop=self.loop)
stream.feed_data(data)
2015-07-10 21:00:49 +00:00
message = self.loop.run_until_complete(ConnectPacket.from_stream(stream))
self.assertTrue(message.variable_header.reserved_flag)
2015-05-30 20:29:56 +00:00
def test_decode_fail_miss_clientId(self):
2015-06-13 13:05:42 +00:00
data = b'\x10\x0a\x00\x04MQTT\x04\xce\x00\x00'
2015-05-30 20:29:56 +00:00
stream = asyncio.StreamReader(loop=self.loop)
stream.feed_data(data)
stream.feed_eof()
2015-07-10 21:00:49 +00:00
message = self.loop.run_until_complete(ConnectPacket.from_stream(stream))
self.assertIs(message.payload.client_id, None)
2015-05-30 20:29:56 +00:00
def test_decode_fail_miss_willtopic(self):
2015-06-13 13:05:42 +00:00
data = b'\x10\x16\x00\x04MQTT\x04\xce\x00\x00\x00\x0a0123456789'
2015-05-30 20:29:56 +00:00
stream = asyncio.StreamReader(loop=self.loop)
stream.feed_data(data)
stream.feed_eof()
2015-07-10 21:00:49 +00:00
message = self.loop.run_until_complete(ConnectPacket.from_stream(stream))
self.assertIs(message.payload.will_topic, None)
2015-05-30 20:29:56 +00:00
def test_decode_fail_miss_username(self):
2015-06-13 13:05:42 +00:00
data = b'\x10\x2e\x00\x04MQTT\x04\xce\x00\x00\x00\x0a0123456789\x00\x09WillTopic\x00\x0bWillMessage'
2015-05-30 20:29:56 +00:00
stream = asyncio.StreamReader(loop=self.loop)
stream.feed_data(data)
stream.feed_eof()
2015-07-10 21:00:49 +00:00
message = self.loop.run_until_complete(ConnectPacket.from_stream(stream))
self.assertIs(message.payload.username, None)
2015-05-30 20:29:56 +00:00
def test_decode_fail_miss_password(self):
2015-06-13 13:05:42 +00:00
data = b'\x10\x34\x00\x04MQTT\x04\xce\x00\x00\x00\x0a0123456789\x00\x09WillTopic\x00\x0bWillMessage\x00\x04user'
2015-05-30 20:29:56 +00:00
stream = asyncio.StreamReader(loop=self.loop)
stream.feed_data(data)
stream.feed_eof()
2015-07-10 21:00:49 +00:00
message = self.loop.run_until_complete(ConnectPacket.from_stream(stream))
self.assertIs(message.payload.password, None)
2015-05-31 12:59:39 +00:00
def test_encode(self):
2015-06-13 13:05:42 +00:00
header = MQTTFixedHeader(PacketType.CONNECT, 0x00, 0)
variable_header = ConnectVariableHeader(0xce, 0, 'MQTT', 4)
payload = ConnectPayload('0123456789', 'WillTopic', b'WillMessage', 'user', 'password')
2015-06-13 13:05:42 +00:00
message = ConnectPacket(header, variable_header, payload)
encoded = message.to_bytes()
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')