Merge pull request #89 from kazvictor/PubRelEncodeFix

PubRelEncoder to encode following MQTT specification
This commit is contained in:
Andrea Selva
2015-08-25 22:14:51 +02:00
2 changed files with 59 additions and 1 deletions
@@ -28,7 +28,7 @@ class PubRelEncoder extends DemuxEncoder<PubRelMessage> {
@Override
protected void encode(ChannelHandlerContext chc, PubRelMessage msg, ByteBuf out) {
out.writeByte(AbstractMessage.PUBREL << 4);
out.writeByte(AbstractMessage.PUBREL << 4 | 0x02);
out.writeBytes(Utils.encodeRemainingLength(2));
out.writeShort(msg.getMessageID());
}
@@ -0,0 +1,58 @@
/*
* Copyright (c) 2012-2015 The original author or authors
* ------------------------------------------------------
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* and Apache License v2.0 which accompanies this distribution.
*
* The Eclipse Public License is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* The Apache License v2.0 is available at
* http://www.opensource.org/licenses/apache2.0.php
*
* You may elect to redistribute this code under either of these licenses.
*/
package org.eclipse.moquette.parser.netty;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import io.netty.channel.ChannelHandlerContext;
import org.eclipse.moquette.proto.messages.PubRelMessage;
import org.junit.Before;
import org.junit.Test;
import static org.eclipse.moquette.parser.netty.TestUtils.mockChannelHandler;
import static org.junit.Assert.assertEquals;
/**
*
* @author kazvictor
*/
public class PubRelEncoderTest {
ChannelHandlerContext m_mockedContext;
@Before
public void setUp() {
//mock the ChannelHandlerContext to return an UnpooledAllocator
m_mockedContext = mockChannelHandler();
}
@Test
public void testHeaderEncode() throws Exception {
int messageID = 0xAABB;
PubRelEncoder encoder = new PubRelEncoder();
PubRelMessage msg = new PubRelMessage();
msg.setMessageID(messageID);
ByteBuf out = Unpooled.buffer();
//Exercise
encoder.encode(m_mockedContext, msg, out);
//Verify
assertEquals(0x62, out.readByte()); //1 byte. See MQTT-3.6.1-1
assertEquals(0x02, out.readByte()); //2 byte, length
assertEquals((byte)0xAA, out.readByte());
assertEquals((byte)0xBB, out.readByte());
}
}