def test_unpack_invalid_property_for_packet(self): with self.assertRaises(MalformedPacketError): unpack_properties('FOO', [ PropertyIds.PAYLOAD_FORMAT_INDICATOR ], PayloadReader(b'\x01\x02\x00\x00\x00\x00'))
def test_unpack_empty_properties(self): with self.assertRaises(MalformedPacketError): unpack_properties('FOO', [ PropertyIds.PAYLOAD_FORMAT_INDICATOR ], PayloadReader(b''))
def test_unpack_properties(self): buf = pack_u8(PropertyIds.PAYLOAD_FORMAT_INDICATOR) buf += pack_u8(5) buf += pack_u8(PropertyIds.MESSAGE_EXPIRY_INTERVAL) buf += pack_u32(6) buf += pack_u8(PropertyIds.CONTENT_TYPE) buf += pack_string('a') buf += pack_u8(PropertyIds.RESPONSE_TOPIC) buf += pack_string('b') buf += pack_u8(PropertyIds.CORRELATION_DATA) buf += pack_binary(b'c') buf += pack_u8(PropertyIds.SUBSCRIPTION_IDENTIFIER) buf += pack_variable_integer(7) buf += pack_u8(PropertyIds.SESSION_EXPIRY_INTERVAL) buf += pack_u32(8) buf += pack_u8(PropertyIds.ASSIGNED_CLIENT_IDENTIFIER) buf += pack_string('d') buf += pack_u8(PropertyIds.SERVER_KEEP_ALIVE) buf += pack_u16(9) buf += pack_u8(PropertyIds.AUTHENTICATION_METHOD) buf += pack_string('e') buf += pack_u8(PropertyIds.AUTHENTICATION_DATA) buf += pack_binary(b'f') buf += pack_u8(PropertyIds.REQUEST_PROBLEM_INFORMATION) buf += pack_u8(10) buf += pack_u8(PropertyIds.WILL_DELAY_INTERVAL) buf += pack_u32(11) buf += pack_u8(PropertyIds.REQUEST_RESPONSE_INFORMATION) buf += pack_u8(12) buf += pack_u8(PropertyIds.RESPONSE_INFORMATION) buf += pack_string('g') buf += pack_u8(PropertyIds.SERVER_REFERENCE) buf += pack_string('h') buf += pack_u8(PropertyIds.REASON_STRING) buf += pack_string('i') buf += pack_u8(PropertyIds.RECEIVE_MAXIMUM) buf += pack_u16(13) buf += pack_u8(PropertyIds.TOPIC_ALIAS_MAXIMUM) buf += pack_u16(14) buf += pack_u8(PropertyIds.TOPIC_ALIAS) buf += pack_u16(15) buf += pack_u8(PropertyIds.MAXIMUM_QOS) buf += pack_u8(16) buf += pack_u8(PropertyIds.RETAIN_AVAILABLE) buf += pack_u8(17) buf += pack_u8(PropertyIds.USER_PROPERTY) buf += pack_string('j') buf += pack_u8(PropertyIds.MAXIMUM_PACKET_SIZE) buf += pack_u32(18) buf += pack_u8(PropertyIds.WILDCARD_SUBSCRIPTION_AVAILABLE) buf += pack_u8(19) buf += pack_u8(PropertyIds.SUBSCRIPTION_IDENTIFIER_AVAILABLE) buf += pack_u8(20) buf += pack_u8(PropertyIds.SHARED_SUBSCRIPTION_AVAILABLE) buf += pack_u8(21) buf = pack_variable_integer(len(buf)) + buf properties = unpack_properties('FOO', [ PropertyIds.PAYLOAD_FORMAT_INDICATOR, PropertyIds.MESSAGE_EXPIRY_INTERVAL, PropertyIds.CONTENT_TYPE, PropertyIds.RESPONSE_TOPIC, PropertyIds.CORRELATION_DATA, PropertyIds.SUBSCRIPTION_IDENTIFIER, PropertyIds.SESSION_EXPIRY_INTERVAL, PropertyIds.ASSIGNED_CLIENT_IDENTIFIER, PropertyIds.SERVER_KEEP_ALIVE, PropertyIds.AUTHENTICATION_METHOD, PropertyIds.AUTHENTICATION_DATA, PropertyIds.REQUEST_PROBLEM_INFORMATION, PropertyIds.WILL_DELAY_INTERVAL, PropertyIds.REQUEST_RESPONSE_INFORMATION, PropertyIds.RESPONSE_INFORMATION, PropertyIds.SERVER_REFERENCE, PropertyIds.REASON_STRING, PropertyIds.RECEIVE_MAXIMUM, PropertyIds.TOPIC_ALIAS_MAXIMUM, PropertyIds.TOPIC_ALIAS, PropertyIds.MAXIMUM_QOS, PropertyIds.RETAIN_AVAILABLE, PropertyIds.USER_PROPERTY, PropertyIds.MAXIMUM_PACKET_SIZE, PropertyIds.WILDCARD_SUBSCRIPTION_AVAILABLE, PropertyIds.SUBSCRIPTION_IDENTIFIER_AVAILABLE, PropertyIds.SHARED_SUBSCRIPTION_AVAILABLE ], PayloadReader(buf)) self.assertEqual( properties, { PropertyIds.PAYLOAD_FORMAT_INDICATOR: 5, PropertyIds.MESSAGE_EXPIRY_INTERVAL: 6, PropertyIds.CONTENT_TYPE: 'a', PropertyIds.RESPONSE_TOPIC: 'b', PropertyIds.CORRELATION_DATA: b'c', PropertyIds.SUBSCRIPTION_IDENTIFIER: 7, PropertyIds.SESSION_EXPIRY_INTERVAL: 8, PropertyIds.ASSIGNED_CLIENT_IDENTIFIER: 'd', PropertyIds.SERVER_KEEP_ALIVE: 9, PropertyIds.AUTHENTICATION_METHOD: 'e', PropertyIds.AUTHENTICATION_DATA: b'f', PropertyIds.REQUEST_PROBLEM_INFORMATION: 10, PropertyIds.WILL_DELAY_INTERVAL: 11, PropertyIds.REQUEST_RESPONSE_INFORMATION: 12, PropertyIds.RESPONSE_INFORMATION: 'g', PropertyIds.SERVER_REFERENCE: 'h', PropertyIds.REASON_STRING: 'i', PropertyIds.RECEIVE_MAXIMUM: 13, PropertyIds.TOPIC_ALIAS_MAXIMUM: 14, PropertyIds.TOPIC_ALIAS: 15, PropertyIds.MAXIMUM_QOS: 16, PropertyIds.RETAIN_AVAILABLE: 17, PropertyIds.USER_PROPERTY: 'j', PropertyIds.MAXIMUM_PACKET_SIZE: 18, PropertyIds.WILDCARD_SUBSCRIPTION_AVAILABLE: 19, PropertyIds.SUBSCRIPTION_IDENTIFIER_AVAILABLE: 20, PropertyIds.SHARED_SUBSCRIPTION_AVAILABLE: 21 })