Implemented payload handling for MQTT messages and introduced tests for these
This commit is contained in:
parent
fcbb2ef227
commit
d80b6a69e5
29 changed files with 1118 additions and 145 deletions
|
|
@ -66,7 +66,7 @@ public class MqttBrokerTest {
|
|||
MqttPacketHeader responsePacket = thread.sentPackets.poll();
|
||||
assertEquals(MqttPacketSubscribeAck.class, responsePacket.getClass());
|
||||
assertEquals(subscribePacket.packetId, ((MqttPacketSubscribeAck)responsePacket).packetId);
|
||||
assertEquals(subscribePacket.payload.size(), ((MqttPacketSubscribeAck)responsePacket).payload.size());
|
||||
assertEquals(subscribePacket.payloads.size(), ((MqttPacketSubscribeAck)responsePacket).payloads.size());
|
||||
}
|
||||
|
||||
@Test
|
||||
|
|
@ -76,10 +76,10 @@ public class MqttBrokerTest {
|
|||
MqttPacketSubscribe subscribePacket = new MqttPacketSubscribe();
|
||||
subscribePacket.packetId = (int)(Math.random()*1000);
|
||||
|
||||
subscribePacket.payload.add(new MqttSubscribePayload());
|
||||
subscribePacket.payload.get(0).topicFilter = "topic1";
|
||||
subscribePacket.payload.add(new MqttSubscribePayload());
|
||||
subscribePacket.payload.get(1).topicFilter = "topic2";
|
||||
subscribePacket.payloads.add(new MqttSubscribePayload());
|
||||
subscribePacket.payloads.get(0).topicFilter = "topic1";
|
||||
subscribePacket.payloads.add(new MqttSubscribePayload());
|
||||
subscribePacket.payloads.get(1).topicFilter = "topic2";
|
||||
|
||||
thread.handlePacket(subscribePacket);
|
||||
|
||||
|
|
@ -87,7 +87,7 @@ public class MqttBrokerTest {
|
|||
MqttPacketHeader responsePacket = thread.sentPackets.poll();
|
||||
assertEquals(MqttPacketSubscribeAck.class, responsePacket.getClass());
|
||||
assertEquals(subscribePacket.packetId, ((MqttPacketSubscribeAck)responsePacket).packetId);
|
||||
assertEquals(subscribePacket.payload.size(), ((MqttPacketSubscribeAck)responsePacket).payload.size());
|
||||
assertEquals(subscribePacket.payloads.size(), ((MqttPacketSubscribeAck)responsePacket).payloads.size());
|
||||
// Check broker
|
||||
assertEquals(1, broker.getSubscriberCount("topic1"));
|
||||
assertEquals(1, broker.getSubscriberCount("topic2"));
|
||||
|
|
@ -95,9 +95,9 @@ public class MqttBrokerTest {
|
|||
//************************ Duplicate subscribe packet
|
||||
|
||||
subscribePacket.packetId = (int)(Math.random()*1000);
|
||||
subscribePacket.payload.clear();
|
||||
subscribePacket.payload.add(new MqttSubscribePayload());
|
||||
subscribePacket.payload.get(0).topicFilter = "topic1";
|
||||
subscribePacket.payloads.clear();
|
||||
subscribePacket.payloads.add(new MqttSubscribePayload());
|
||||
subscribePacket.payloads.get(0).topicFilter = "topic1";
|
||||
|
||||
thread.handlePacket(subscribePacket);
|
||||
|
||||
|
|
@ -166,8 +166,8 @@ public class MqttBrokerTest {
|
|||
MqttPacketUnsubscribe unsubscribePacket = new MqttPacketUnsubscribe();
|
||||
unsubscribePacket.packetId = (int)(Math.random()*1000);
|
||||
|
||||
unsubscribePacket.payload.add(new MqttUnsubscribePayload());
|
||||
unsubscribePacket.payload.get(0).topicFilter = "topic1";
|
||||
unsubscribePacket.payloads.add(new MqttUnsubscribePayload());
|
||||
unsubscribePacket.payloads.get(0).topicFilter = "topic1";
|
||||
|
||||
thread.handlePacket(unsubscribePacket);
|
||||
|
||||
|
|
@ -183,10 +183,10 @@ public class MqttBrokerTest {
|
|||
MqttPacketSubscribe subscribePacket = new MqttPacketSubscribe();
|
||||
subscribePacket.packetId = (int)(Math.random()*1000);
|
||||
|
||||
subscribePacket.payload.add(new MqttSubscribePayload());
|
||||
subscribePacket.payload.get(0).topicFilter = "topic1";
|
||||
subscribePacket.payload.add(new MqttSubscribePayload());
|
||||
subscribePacket.payload.get(1).topicFilter = "topic2";
|
||||
subscribePacket.payloads.add(new MqttSubscribePayload());
|
||||
subscribePacket.payloads.get(0).topicFilter = "topic1";
|
||||
subscribePacket.payloads.add(new MqttSubscribePayload());
|
||||
subscribePacket.payloads.get(1).topicFilter = "topic2";
|
||||
|
||||
thread.handlePacket(subscribePacket);
|
||||
|
||||
|
|
|
|||
|
|
@ -38,33 +38,81 @@ import static org.junit.Assert.*;
|
|||
|
||||
public class MqttPacketConnectTest {
|
||||
|
||||
char[] data = new char[]{
|
||||
// Fixed Header
|
||||
0b0001_0000, // Packet Type + Reserved
|
||||
0b0000_1010, // Variable Header + Payload Length
|
||||
// Variable Header
|
||||
0b0000_0000, // length
|
||||
0b0000_0100, // length
|
||||
0b0100_1101, // 'M'
|
||||
0b0101_0001, // 'Q'
|
||||
0b0101_0100, // 'T'
|
||||
0b0101_0100, // 'T'
|
||||
|
||||
0b0000_0100, // Prot. Level
|
||||
|
||||
0b1100_1110, // Flags
|
||||
|
||||
0b0000_0000, // Keep alive
|
||||
0b0000_1010, // Keep alive
|
||||
};
|
||||
|
||||
|
||||
@Test
|
||||
public void decode() throws IOException {
|
||||
MqttPacketConnect obj = (MqttPacketConnect)MqttPacket.read(
|
||||
new BinaryStructInputStream(
|
||||
new ByteArrayInputStream(
|
||||
Converter.toBytes(data))));
|
||||
char[] data = new char[]{
|
||||
// Fixed Header
|
||||
0b0001_0000, // Packet Type(4) + Reserved(4)
|
||||
0b0000_1010, // Variable Header + Payload Length
|
||||
// Variable Header
|
||||
0b0000_0000, // length
|
||||
0b0000_0100, // length
|
||||
0b0100_1101, // 'M'
|
||||
0b0101_0001, // 'Q'
|
||||
0b0101_0100, // 'T'
|
||||
0b0101_0100, // 'T'
|
||||
|
||||
0b0000_0100, // Prot. Level
|
||||
|
||||
0b0101_1010, // Flags
|
||||
|
||||
0b0000_0000, // Keep alive
|
||||
0b0000_1010, // Keep alive
|
||||
// Payload
|
||||
0x00, 0x01, '5', // password
|
||||
};
|
||||
|
||||
MqttPacketConnect obj = (MqttPacketConnect) MqttPacket.read(
|
||||
new BinaryStructInputStream(new ByteArrayInputStream(Converter.toBytes(data))));
|
||||
|
||||
assertEquals("MQTT", obj.protocolName);
|
||||
assertEquals(4, obj.protocolLevel);
|
||||
assertEquals(10, obj.keepAlive);
|
||||
|
||||
assertFalse(obj.flagUsername);
|
||||
assertTrue(obj.flagPassword);
|
||||
assertFalse(obj.flagWillRetain);
|
||||
assertEquals(3, obj.flagWillQoS);
|
||||
assertFalse(obj.flagWillFlag);
|
||||
assertTrue(obj.flagCleanSession);
|
||||
|
||||
assertNull(obj.clientIdentifier);
|
||||
assertNull(obj.willTopic);
|
||||
assertNull(null, obj.willPayload);
|
||||
assertNull(obj.username);
|
||||
assertEquals("5", obj.password);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void decodePayload() throws IOException {
|
||||
char[] data = new char[]{
|
||||
// Fixed Header
|
||||
0b0001_0000, // Packet Type + Reserved
|
||||
0b0000_1010, // Variable Header + Payload Length
|
||||
// Variable Header
|
||||
0b0000_0000, // length
|
||||
0b0000_0100, // length
|
||||
0b0100_1101, // 'M'
|
||||
0b0101_0001, // 'Q'
|
||||
0b0101_0100, // 'T'
|
||||
0b0101_0100, // 'T'
|
||||
|
||||
0b0000_0100, // Prot. Level
|
||||
|
||||
0b1100_1100, // Flags
|
||||
|
||||
0b0000_0000, // Keep alive
|
||||
0b0000_1010, // Keep alive
|
||||
// Payload
|
||||
0x00, 0x01, '1', // Client Identifier
|
||||
0x00, 0x01, '2', // Will Topic
|
||||
0x00, 0x01, 0x03, // Will payload: 3
|
||||
0x00, 0x01, '4', // Username
|
||||
0x00, 0x01, '5', // password
|
||||
};
|
||||
|
||||
MqttPacketConnect obj = (MqttPacketConnect) MqttPacket.read(
|
||||
new BinaryStructInputStream(new ByteArrayInputStream(Converter.toBytes(data))));
|
||||
|
||||
assertEquals("MQTT", obj.protocolName);
|
||||
assertEquals(4, obj.protocolLevel);
|
||||
|
|
@ -75,20 +123,47 @@ public class MqttPacketConnectTest {
|
|||
assertFalse(obj.flagWillRetain);
|
||||
assertEquals(1, obj.flagWillQoS);
|
||||
assertTrue(obj.flagWillFlag);
|
||||
assertTrue(obj.flagCleanSession);
|
||||
assertFalse(obj.flagCleanSession);
|
||||
|
||||
assertEquals("1", obj.clientIdentifier);
|
||||
assertEquals("2", obj.willTopic);
|
||||
assertArrayEquals(new byte[]{3}, obj.willPayload);
|
||||
assertEquals("4", obj.username);
|
||||
assertEquals("5", obj.password);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void encode() throws IOException {
|
||||
char[] data = new char[]{
|
||||
// Fixed Header
|
||||
0b0001_0000, // Packet Type + Reserved
|
||||
0b0000_1010, // Variable Header + Payload Length
|
||||
// Variable Header
|
||||
0b0000_0000, // length
|
||||
0b0000_0100, // length
|
||||
0b0100_1101, // 'M'
|
||||
0b0101_0001, // 'Q'
|
||||
0b0101_0100, // 'T'
|
||||
0b0101_0100, // 'T'
|
||||
|
||||
0b0000_0100, // Prot. Level
|
||||
|
||||
0b0000_1010, // Flags
|
||||
|
||||
0b0000_0000, // Keep alive
|
||||
0b0000_1010, // Keep alive
|
||||
// Payload
|
||||
};
|
||||
|
||||
MqttPacketConnect obj = new MqttPacketConnect();
|
||||
obj.payloadLength = 10;
|
||||
obj.variableHeaderAndPayloadLength = 10;
|
||||
obj.keepAlive = 10;
|
||||
|
||||
obj.flagUsername = true;
|
||||
obj.flagPassword = true;
|
||||
obj.flagUsername = false;
|
||||
obj.flagPassword = false;
|
||||
obj.flagWillRetain = false;
|
||||
obj.flagWillQoS = 1;
|
||||
obj.flagWillFlag = true;
|
||||
obj.flagWillFlag = false;
|
||||
obj.flagCleanSession = true;
|
||||
|
||||
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
|
||||
|
|
@ -96,4 +171,55 @@ public class MqttPacketConnectTest {
|
|||
MqttPacket.write(binOut, obj);
|
||||
assertArrayEquals(Converter.toBytes(data), buffer.toByteArray());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void encodePayload() throws IOException {
|
||||
char[] data = new char[]{
|
||||
// Fixed Header
|
||||
0b0001_0000, // Packet Type(4) + Reserved(4)
|
||||
0xFF & 25, // Variable Header + Payload Length
|
||||
// Variable Header
|
||||
0b0000_0000, // length
|
||||
0b0000_0100, // length
|
||||
0b0100_1101, // 'M'
|
||||
0b0101_0001, // 'Q'
|
||||
0b0101_0100, // 'T'
|
||||
0b0101_0100, // 'T'
|
||||
|
||||
0b0000_0100, // Prot. Level
|
||||
|
||||
0b1101_0100, // Flags
|
||||
|
||||
0b0000_0000, // Keep alive
|
||||
0b0000_1010, // Keep alive
|
||||
// Payload
|
||||
0x00, 0x01, '1', // Client Identifier: 1
|
||||
0x00, 0x01, '2', // Will Topic: 2
|
||||
0x00, 0x01, 0x03, // Will payload: 3
|
||||
0x00, 0x01, '4', // Username: 4
|
||||
0x00, 0x01, '5', // password: 5
|
||||
};
|
||||
|
||||
MqttPacketConnect obj = new MqttPacketConnect();
|
||||
obj.variableHeaderAndPayloadLength = 10;
|
||||
obj.keepAlive = 10;
|
||||
|
||||
obj.flagUsername = true;
|
||||
obj.flagPassword = true;
|
||||
obj.flagWillRetain = false;
|
||||
obj.flagWillQoS = 2;
|
||||
obj.flagWillFlag = true;
|
||||
obj.flagCleanSession = false;
|
||||
|
||||
obj.clientIdentifier = "1";
|
||||
obj.willTopic = "2";
|
||||
obj.willPayload = new byte[]{3};
|
||||
obj.username = "4";
|
||||
obj.password = "5";
|
||||
|
||||
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
|
||||
BinaryStructOutputStream binOut = new BinaryStructOutputStream(buffer);
|
||||
MqttPacket.write(binOut, obj);
|
||||
assertArrayEquals(Converter.toBytes(data), buffer.toByteArray());
|
||||
}
|
||||
}
|
||||
93
test/zutil/net/mqtt/packet/MqttPacketPublishTest.java
Normal file
93
test/zutil/net/mqtt/packet/MqttPacketPublishTest.java
Normal file
|
|
@ -0,0 +1,93 @@
|
|||
package zutil.net.mqtt.packet;
|
||||
|
||||
import org.junit.Test;
|
||||
import zutil.converter.Converter;
|
||||
import zutil.parser.binary.BinaryStructInputStream;
|
||||
import zutil.parser.binary.BinaryStructOutputStream;
|
||||
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.IOException;
|
||||
|
||||
import static org.junit.Assert.*;
|
||||
|
||||
public class MqttPacketPublishTest {
|
||||
|
||||
@Test
|
||||
public void decode() throws IOException {
|
||||
char[] data = new char[]{
|
||||
// Fixed Header
|
||||
0b0011_0000, // Packet Type(4) + Reserved(4)
|
||||
0xFF & 6, // Variable Header + Payload Length
|
||||
// Variable Header
|
||||
0b0000_0000, // length
|
||||
0xFF & 2, // length
|
||||
'a', // Topic Name
|
||||
'b', // Topic Name
|
||||
0b0000_0000, // Packet Identifier
|
||||
0xFF & 5, // Packet Identifier
|
||||
// Payload
|
||||
};
|
||||
|
||||
MqttPacketPublish obj = (MqttPacketPublish) MqttPacket.read(
|
||||
new BinaryStructInputStream(new ByteArrayInputStream(Converter.toBytes(data))));
|
||||
|
||||
assertEquals(6, obj.variableHeaderAndPayloadLength);
|
||||
assertEquals("ab", obj.topicName);
|
||||
assertEquals(5, obj.packetId);
|
||||
assertArrayEquals(new byte[0], obj.payload);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void decodePayload() throws IOException {
|
||||
char[] data = new char[]{
|
||||
// Fixed Header
|
||||
0b0011_0000, // Packet Type(4) + Reserved(4)
|
||||
0xFF & 9, // Variable Header + Payload Length
|
||||
// Variable Header
|
||||
0b0000_0000, // length
|
||||
0xFF & 2, // length
|
||||
'a', // Topic Name
|
||||
'b', // Topic Name
|
||||
0b0000_0000, // Packet Identifier
|
||||
0xFF & 5, // Packet Identifier
|
||||
// Payload
|
||||
0x00, 0x01, 0x02,
|
||||
};
|
||||
|
||||
MqttPacketPublish obj = (MqttPacketPublish) MqttPacket.read(
|
||||
new BinaryStructInputStream(new ByteArrayInputStream(Converter.toBytes(data))));
|
||||
|
||||
assertEquals(9, obj.variableHeaderAndPayloadLength);
|
||||
assertEquals("ab", obj.topicName);
|
||||
assertEquals(5, obj.packetId);
|
||||
assertArrayEquals(new byte[]{0x00, 0x01, 0x02}, obj.payload);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void encode() throws IOException {
|
||||
char[] data = new char[]{
|
||||
// Fixed Header
|
||||
0b0011_0000, // Packet Type(4) + Reserved(4)
|
||||
0xFF & 6, // Variable Header + Payload Length
|
||||
// Variable Header
|
||||
0b0000_0000, // length
|
||||
0xFF & 2, // length
|
||||
'a', // Topic Name
|
||||
'b', // Topic Name
|
||||
0b0000_0000, // Packet Identifier
|
||||
0xFF & 5, // Packet Identifier
|
||||
// Payload
|
||||
};
|
||||
|
||||
MqttPacketPublish obj = new MqttPacketPublish();
|
||||
obj.variableHeaderAndPayloadLength = 5;
|
||||
obj.topicName = "ab";
|
||||
obj.packetId = 5;
|
||||
|
||||
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
|
||||
BinaryStructOutputStream binOut = new BinaryStructOutputStream(buffer);
|
||||
MqttPacket.write(binOut, obj);
|
||||
assertArrayEquals(Converter.toBytes(data), buffer.toByteArray());
|
||||
}
|
||||
}
|
||||
80
test/zutil/net/mqtt/packet/MqttPacketSubscribeAckTest.java
Normal file
80
test/zutil/net/mqtt/packet/MqttPacketSubscribeAckTest.java
Normal file
|
|
@ -0,0 +1,80 @@
|
|||
package zutil.net.mqtt.packet;
|
||||
|
||||
import org.junit.Test;
|
||||
import zutil.converter.Converter;
|
||||
import zutil.net.mqtt.packet.MqttPacketSubscribeAck.MqttSubscribeAckPayload;
|
||||
import zutil.parser.binary.BinaryStructInputStream;
|
||||
import zutil.parser.binary.BinaryStructOutputStream;
|
||||
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.IOException;
|
||||
|
||||
import static org.junit.Assert.*;
|
||||
|
||||
|
||||
public class MqttPacketSubscribeAckTest {
|
||||
|
||||
@Test
|
||||
public void decode() throws IOException {
|
||||
char[] data = new char[]{
|
||||
// Fixed Header
|
||||
0b1001_0000, // Packet Type(4) + Reserved(4)
|
||||
0xFF & 4, // Variable Header + Payload Length
|
||||
// Variable Header
|
||||
0b0000_0000, // Packet Identifier
|
||||
0xFF & 8, // Packet Identifier
|
||||
// Payload
|
||||
// -- Item 1
|
||||
0b0000_0001, // Return code
|
||||
// -- Item 2
|
||||
0b0000_0010, // Return code
|
||||
};
|
||||
|
||||
MqttPacketSubscribeAck obj = (MqttPacketSubscribeAck) MqttPacket.read(
|
||||
new BinaryStructInputStream(new ByteArrayInputStream(Converter.toBytes(data))));
|
||||
|
||||
assertEquals(4, obj.variableHeaderAndPayloadLength);
|
||||
assertEquals(8, obj.packetId);
|
||||
assertEquals(2, obj.payloads.size());
|
||||
|
||||
assertEquals(MqttSubscribeAckPayload.RETCODE_SUCESS_MAX_QOS_1, obj.payloads.get(0).returnCode);
|
||||
|
||||
assertEquals(MqttSubscribeAckPayload.RETCODE_SUCESS_MAX_QOS_2, obj.payloads.get(1).returnCode);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void encode() throws IOException {
|
||||
char[] data = new char[]{
|
||||
// Fixed Header
|
||||
0b1001_0000, // Packet Type(4) + Reserved(4)
|
||||
0xFF & 4, // Variable Header + Payload Length
|
||||
// Variable Header
|
||||
0b0000_0000, // Packet Identifier
|
||||
0xFF & 8, // Packet Identifier
|
||||
// Payload
|
||||
// -- Item 1
|
||||
0b0000_0001, // Return code
|
||||
// -- Item 2
|
||||
0b0000_0010, // Return code
|
||||
};
|
||||
|
||||
MqttPacketSubscribeAck obj = new MqttPacketSubscribeAck();
|
||||
obj.variableHeaderAndPayloadLength = 4;
|
||||
obj.packetId = 8;
|
||||
|
||||
MqttSubscribeAckPayload p1 = new MqttSubscribeAckPayload();
|
||||
p1.returnCode = MqttSubscribeAckPayload.RETCODE_SUCESS_MAX_QOS_1;
|
||||
obj.payloads.add(p1);
|
||||
|
||||
MqttSubscribeAckPayload p2 = new MqttSubscribeAckPayload();
|
||||
p2.returnCode = MqttSubscribeAckPayload.RETCODE_SUCESS_MAX_QOS_2;
|
||||
obj.payloads.add(p2);
|
||||
|
||||
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
|
||||
BinaryStructOutputStream binOut = new BinaryStructOutputStream(buffer);
|
||||
MqttPacket.write(binOut, obj);
|
||||
assertArrayEquals(Converter.toBytes(data), buffer.toByteArray());
|
||||
}
|
||||
|
||||
}
|
||||
98
test/zutil/net/mqtt/packet/MqttPacketSubscribeTest.java
Normal file
98
test/zutil/net/mqtt/packet/MqttPacketSubscribeTest.java
Normal file
|
|
@ -0,0 +1,98 @@
|
|||
package zutil.net.mqtt.packet;
|
||||
|
||||
import org.junit.Test;
|
||||
import zutil.converter.Converter;
|
||||
import zutil.net.mqtt.packet.MqttPacketSubscribe.MqttSubscribePayload;
|
||||
import zutil.parser.binary.BinaryStructInputStream;
|
||||
import zutil.parser.binary.BinaryStructOutputStream;
|
||||
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.IOException;
|
||||
|
||||
import static org.junit.Assert.*;
|
||||
|
||||
public class MqttPacketSubscribeTest {
|
||||
|
||||
@Test
|
||||
public void decode() throws IOException {
|
||||
char[] data = new char[]{
|
||||
// Fixed Header
|
||||
0b1000_0000, // Packet Type(4) + Reserved(4)
|
||||
0xFF & 12, // Variable Header + Payload Length
|
||||
// Variable Header
|
||||
0b0000_0000, // Packet Identifier
|
||||
0xFF & 8, // Packet Identifier
|
||||
// Payload
|
||||
// -- Item 1
|
||||
0b0000_0000, // length
|
||||
0xFF & 2, // length
|
||||
'a', // Topic Name
|
||||
'b', // Topic Name
|
||||
0b000000_00, // Reserved(6) + QoS(2)
|
||||
// -- Item 2
|
||||
0b0000_0000, // length
|
||||
0xFF & 2, // length
|
||||
'c', // Topic Name
|
||||
'd', // Topic Name
|
||||
0b000000_01, // Reserved(6) + QoS(2)
|
||||
};
|
||||
|
||||
MqttPacketSubscribe obj = (MqttPacketSubscribe) MqttPacket.read(
|
||||
new BinaryStructInputStream(new ByteArrayInputStream(Converter.toBytes(data))));
|
||||
|
||||
assertEquals(12, obj.variableHeaderAndPayloadLength);
|
||||
assertEquals(8, obj.packetId);
|
||||
assertEquals(2, obj.payloads.size());
|
||||
|
||||
assertEquals("ab", obj.payloads.get(0).topicFilter);
|
||||
assertEquals(0, obj.payloads.get(0).qos);
|
||||
|
||||
assertEquals("cd", obj.payloads.get(1).topicFilter);
|
||||
assertEquals(1, obj.payloads.get(1).qos);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void encode() throws IOException {
|
||||
char[] data = new char[]{
|
||||
// Fixed Header
|
||||
0b1000_0000, // Packet Type(4) + Reserved(4)
|
||||
0xFF & 12, // Variable Header + Payload Length
|
||||
// Variable Header
|
||||
0b0000_0000, // Packet Identifier
|
||||
0xFF & 8, // Packet Identifier
|
||||
// Payload
|
||||
// -- Item 1
|
||||
0b0000_0000, // length
|
||||
0xFF & 2, // length
|
||||
'a', // Topic Name
|
||||
'b', // Topic Name
|
||||
0b000000_00, // Reserved(6) + QoS(2)
|
||||
// -- Item 2
|
||||
0b0000_0000, // length
|
||||
0xFF & 2, // length
|
||||
'c', // Topic Name
|
||||
'd', // Topic Name
|
||||
0b000000_01, // Reserved(6) + QoS(2)
|
||||
};
|
||||
|
||||
MqttPacketSubscribe obj = new MqttPacketSubscribe();
|
||||
obj.variableHeaderAndPayloadLength = 12;
|
||||
obj.packetId = 8;
|
||||
|
||||
MqttSubscribePayload p1 = new MqttSubscribePayload();
|
||||
p1.topicFilter = "ab";
|
||||
p1.qos = 0;
|
||||
obj.payloads.add(p1);
|
||||
|
||||
MqttSubscribePayload p2 = new MqttSubscribePayload();
|
||||
p2.topicFilter = "cd";
|
||||
p2.qos = 1;
|
||||
obj.payloads.add(p2);
|
||||
|
||||
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
|
||||
BinaryStructOutputStream binOut = new BinaryStructOutputStream(buffer);
|
||||
MqttPacket.write(binOut, obj);
|
||||
assertArrayEquals(Converter.toBytes(data), buffer.toByteArray());
|
||||
}
|
||||
}
|
||||
91
test/zutil/net/mqtt/packet/MqttPacketUnsubscribeTest.java
Normal file
91
test/zutil/net/mqtt/packet/MqttPacketUnsubscribeTest.java
Normal file
|
|
@ -0,0 +1,91 @@
|
|||
package zutil.net.mqtt.packet;
|
||||
|
||||
import org.junit.Test;
|
||||
import zutil.converter.Converter;
|
||||
import zutil.net.mqtt.packet.MqttPacketUnsubscribe.MqttUnsubscribePayload;
|
||||
import zutil.parser.binary.BinaryStructInputStream;
|
||||
import zutil.parser.binary.BinaryStructOutputStream;
|
||||
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.IOException;
|
||||
|
||||
import static org.junit.Assert.*;
|
||||
|
||||
|
||||
public class MqttPacketUnsubscribeTest {
|
||||
|
||||
@Test
|
||||
public void decode() throws IOException {
|
||||
char[] data = new char[]{
|
||||
// Fixed Header
|
||||
0b1010_0000, // Packet Type(4) + Reserved(4)
|
||||
0xFF & 10, // Variable Header + Payload Length
|
||||
// Variable Header
|
||||
0b0000_0000, // Packet Identifier
|
||||
0xFF & 8, // Packet Identifier
|
||||
// Payload
|
||||
// -- Item 1
|
||||
0b0000_0000, // length
|
||||
0xFF & 2, // length
|
||||
'a', // Topic Name
|
||||
'b', // Topic Name
|
||||
// -- Item 2
|
||||
0b0000_0000, // length
|
||||
0xFF & 2, // length
|
||||
'c', // Topic Name
|
||||
'd', // Topic Name
|
||||
};
|
||||
|
||||
MqttPacketUnsubscribe obj = (MqttPacketUnsubscribe) MqttPacket.read(
|
||||
new BinaryStructInputStream(new ByteArrayInputStream(Converter.toBytes(data))));
|
||||
|
||||
assertEquals(10, obj.variableHeaderAndPayloadLength);
|
||||
assertEquals(8, obj.packetId);
|
||||
assertEquals(2, obj.payloads.size());
|
||||
|
||||
assertEquals("ab", obj.payloads.get(0).topicFilter);
|
||||
|
||||
assertEquals("cd", obj.payloads.get(1).topicFilter);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void encode() throws IOException {
|
||||
char[] data = new char[]{
|
||||
// Fixed Header
|
||||
0b1010_0000, // Packet Type(4) + Reserved(4)
|
||||
0xFF & 10, // Variable Header + Payload Length
|
||||
// Variable Header
|
||||
0b0000_0000, // Packet Identifier
|
||||
0xFF & 8, // Packet Identifier
|
||||
// Payload
|
||||
// -- Item 1
|
||||
0b0000_0000, // length
|
||||
0xFF & 2, // length
|
||||
'a', // Topic Name
|
||||
'b', // Topic Name
|
||||
// -- Item 2
|
||||
0b0000_0000, // length
|
||||
0xFF & 2, // length
|
||||
'c', // Topic Name
|
||||
'd', // Topic Name
|
||||
};
|
||||
|
||||
MqttPacketUnsubscribe obj = new MqttPacketUnsubscribe();
|
||||
obj.variableHeaderAndPayloadLength = 10;
|
||||
obj.packetId = 8;
|
||||
|
||||
MqttUnsubscribePayload p1 = new MqttUnsubscribePayload();
|
||||
p1.topicFilter = "ab";
|
||||
obj.payloads.add(p1);
|
||||
|
||||
MqttUnsubscribePayload p2 = new MqttUnsubscribePayload();
|
||||
p2.topicFilter = "cd";
|
||||
obj.payloads.add(p2);
|
||||
|
||||
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
|
||||
BinaryStructOutputStream binOut = new BinaryStructOutputStream(buffer);
|
||||
MqttPacket.write(binOut, obj);
|
||||
assertArrayEquals(Converter.toBytes(data), buffer.toByteArray());
|
||||
}
|
||||
}
|
||||
|
|
@ -72,10 +72,10 @@ public class TwoByteLengthPrefixedDataSerializerTest implements BinaryStruct {
|
|||
// 0 Length
|
||||
outputStream.reset();outputStream.reset();
|
||||
serializer.write(outputStream, null, stringFieldData, this);
|
||||
assertArrayEquals(new byte[]{}, outputStream.toByteArray());
|
||||
assertArrayEquals(new byte[]{0, 0}, outputStream.toByteArray());
|
||||
outputStream.reset();
|
||||
serializer.write(outputStream, null, byteFieldData, this);
|
||||
assertArrayEquals(new byte[]{}, outputStream.toByteArray());
|
||||
assertArrayEquals(new byte[]{0, 0}, outputStream.toByteArray());
|
||||
|
||||
// 0 Length
|
||||
outputStream.reset();
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue