Fixes for remaining length calculation for unsubscribe encoder

This commit is contained in:
andrea
2012-08-19 12:16:44 +02:00
parent 0fb5d8f7a0
commit 54e0b1520d
3 changed files with 45 additions and 3 deletions
@@ -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());