Fixes for remaining length calculation for unsubscribe encoder
This commit is contained in:
@@ -35,7 +35,7 @@ public class UnsubscribeEncoder implements MessageEncoder<UnsubscribeMessage> {
|
||||
IoBuffer buff = IoBuffer.allocate(2 + variableHeaderSize);
|
||||
|
||||
buff.put((byte) (AbstractMessage.UNSUBSCRIBE << 4 | flags));
|
||||
buff.put(Utils.encodeRemainingLength(2 + variableHeaderSize));
|
||||
buff.put(Utils.encodeRemainingLength(variableHeaderSize));
|
||||
buff.put(variableHeaderBuff).flip();
|
||||
|
||||
out.write(buff);
|
||||
|
||||
@@ -58,6 +58,47 @@ public class UnsubscribeDecoderTest {
|
||||
assertEquals(AbstractMessage.UNSUBSCRIBE, m_mockProtoDecoder.getMessage().getMessageType());
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testDecodeSingleTopic_bug() throws Exception {
|
||||
//A2 0C 00 01 00 06 2F 74 6F 70 69 63 //12 byte
|
||||
byte[] overallMessage = new byte[] {(byte)0xA2, 0x0A, //fixed header
|
||||
0x00, 0x01, //MSG ID
|
||||
0x00, 0x06, 0x2F, 0x74, 0x6F, 0x70, 0x69, 0x63}; //"/topic" string
|
||||
m_buff = IoBuffer.allocate(overallMessage.length).setAutoExpand(true);
|
||||
m_buff.put(overallMessage);
|
||||
m_buff.flip();
|
||||
|
||||
MessageDecoderResult res = m_msgdec.decode(null, m_buff, m_mockProtoDecoder);
|
||||
|
||||
assertNotNull(m_mockProtoDecoder.getMessage());
|
||||
UnsubscribeMessage message = (UnsubscribeMessage) m_mockProtoDecoder.getMessage();
|
||||
// assertEquals(0x0A, message.getMessageID());
|
||||
// assertEquals(1, message.types().size());
|
||||
// assertEquals(AbstractMessage.QOSType.LEAST_ONE, message.types().get(0));
|
||||
|
||||
}
|
||||
|
||||
// @Test
|
||||
// public void testDecodeSingleTopic_BadFormat() throws Exception {
|
||||
// //A2 0C 00 01 00 06 2F 74 6F 70 69 63 //10 byte of content, but lenght says 12!!
|
||||
// byte[] overallMessage = new byte[] {(byte)0xA2, 0x0C, //fixed header
|
||||
// 0x00, 0x01, //MSG ID
|
||||
// 0x00, 0x06, 0x2F, 0x74, 0x6F, 0x70, 0x69, 0x63}; //"/topic" string
|
||||
// m_buff = IoBuffer.allocate(overallMessage.length).setAutoExpand(true);
|
||||
// m_buff.put(overallMessage);
|
||||
// m_buff.flip();
|
||||
//
|
||||
// MessageDecoderResult res = m_msgdec.decode(null, m_buff, m_mockProtoDecoder);
|
||||
//
|
||||
// assertNotNull(m_mockProtoDecoder.getMessage());
|
||||
// UnsubscribeMessage message = (UnsubscribeMessage) m_mockProtoDecoder.getMessage();
|
||||
//// assertEquals(0x0A, message.getMessageID());
|
||||
//// assertEquals(1, message.types().size());
|
||||
//// assertEquals(AbstractMessage.QOSType.LEAST_ONE, message.types().get(0));
|
||||
//
|
||||
// }
|
||||
|
||||
private void initHeaderBadQos(IoBuffer buff) {
|
||||
buff.clear().put((byte)(AbstractMessage.UNSUBSCRIBE << 4)).put((byte)0);
|
||||
}
|
||||
|
||||
@@ -38,7 +38,8 @@ public class UnsubscribeEncoderTest {
|
||||
|
||||
//Verify
|
||||
assertEquals((byte)0xA2, (byte)m_mockProtoEncoder.getBuffer().get()); //1 byte
|
||||
assertEquals(12, m_mockProtoEncoder.getBuffer().get()); //remaining length
|
||||
//2 messageID + 2 length + 6 chars = 10
|
||||
assertEquals(10, m_mockProtoEncoder.getBuffer().get()); //remaining length
|
||||
|
||||
//verify M1ssageID
|
||||
assertEquals((byte)0xAA, m_mockProtoEncoder.getBuffer().get());
|
||||
@@ -64,7 +65,7 @@ public class UnsubscribeEncoderTest {
|
||||
|
||||
//Verify
|
||||
assertEquals((byte)0xA2, (byte)m_mockProtoEncoder.getBuffer().get()); //1 byte
|
||||
assertEquals(16, m_mockProtoEncoder.getBuffer().get()); //remaining length
|
||||
assertEquals(14, m_mockProtoEncoder.getBuffer().get()); //remaining length
|
||||
|
||||
//verify M1ssageID
|
||||
assertEquals((byte)0xAA, m_mockProtoEncoder.getBuffer().get());
|
||||
|
||||
Reference in New Issue
Block a user