Fixed calculation of remaining length bug in Unsubscribe encoder

This commit is contained in:
andrea
2012-08-19 11:58:33 +02:00
parent 34af828653
commit 0fb5d8f7a0
2 changed files with 27 additions and 3 deletions
@@ -32,10 +32,10 @@ public class UnsubscribeEncoder implements MessageEncoder<UnsubscribeMessage> {
variableHeaderBuff.flip();
int variableHeaderSize = variableHeaderBuff.remaining();
byte flags = Utils.encodeFlags(message);
IoBuffer buff = IoBuffer.allocate(4 + variableHeaderSize);
IoBuffer buff = IoBuffer.allocate(2 + variableHeaderSize);
buff.put((byte) (AbstractMessage.UNSUBSCRIBE << 4 | flags));
buff.put(Utils.encodeRemainingLength(4 + variableHeaderSize));
buff.put(Utils.encodeRemainingLength(2 + variableHeaderSize));
buff.put(variableHeaderBuff).flip();
out.write(buff);
@@ -24,6 +24,30 @@ public class UnsubscribeEncoderTest {
m_msg = new UnsubscribeMessage();
m_msg.setMessageID(0xAABB);
}
@Test
public void testEncodeWithSingleTopic() throws Exception {
m_msg.setQos(QOSType.LEAST_ONE);
//variable part
String topic1 = "/topic";
m_msg.addTopic(topic1);
//Exercise
m_encoder.encode(null, m_msg, m_mockProtoEncoder);
//Verify
assertEquals((byte)0xA2, (byte)m_mockProtoEncoder.getBuffer().get()); //1 byte
assertEquals(12, m_mockProtoEncoder.getBuffer().get()); //remaining length
//verify M1ssageID
assertEquals((byte)0xAA, m_mockProtoEncoder.getBuffer().get());
assertEquals((byte)0xBB, m_mockProtoEncoder.getBuffer().get());
//Variable part
verifyString(topic1, m_mockProtoEncoder.getBuffer());
}
@Test
public void testEncodeWithMultiTopic() throws Exception {
@@ -40,7 +64,7 @@ public class UnsubscribeEncoderTest {
//Verify
assertEquals((byte)0xA2, (byte)m_mockProtoEncoder.getBuffer().get()); //1 byte
assertEquals(18, m_mockProtoEncoder.getBuffer().get()); //remaining length
assertEquals(16, m_mockProtoEncoder.getBuffer().get()); //remaining length
//verify M1ssageID
assertEquals((byte)0xAA, m_mockProtoEncoder.getBuffer().get());