diff --git a/netty_parser/src/main/java/org/dna/mqtt/moquette/parser/netty/PublishDecoder.java b/netty_parser/src/main/java/org/dna/mqtt/moquette/parser/netty/PublishDecoder.java index 9a29ff14..00e869f8 100644 --- a/netty_parser/src/main/java/org/dna/mqtt/moquette/parser/netty/PublishDecoder.java +++ b/netty_parser/src/main/java/org/dna/mqtt/moquette/parser/netty/PublishDecoder.java @@ -18,9 +18,9 @@ class PublishDecoder extends DemuxDecoder { @Override void decode(ChannelHandlerContext ctx, ByteBuf in, List out) throws Exception { - LOG.debug("decode invoked with buffer " + in); - int startPos = in.readerIndex(); + LOG.info("decode invoked with buffer " + in); in.resetReaderIndex(); + int startPos = in.readerIndex(); //Common decoding part PublishMessage message = new PublishMessage(); diff --git a/netty_parser/src/test/java/org/dna/mqtt/moquette/parser/netty/PublishDecoderTest.java b/netty_parser/src/test/java/org/dna/mqtt/moquette/parser/netty/PublishDecoderTest.java index c935d3cf..4cebae39 100644 --- a/netty_parser/src/test/java/org/dna/mqtt/moquette/parser/netty/PublishDecoderTest.java +++ b/netty_parser/src/test/java/org/dna/mqtt/moquette/parser/netty/PublishDecoderTest.java @@ -123,6 +123,27 @@ public class PublishDecoderTest { assertNotNull(message); } + @Test + public void testBadClaimMoreData() throws Exception { + byte[] rawMessage = new byte[] { + 0x30, 0x17, 0x00, 0x06, 0x2f, (byte)0x74, 0x6f, (byte)0x70, 0x69, 0x63, 0x54, 0x65, (byte)0x73, 0x74, 0x20, 0x6d, + (byte)0x79, 0x20, (byte)0x70, 0x61, (byte)0x79, 0x6c, 0x6f, 0x61, 0x64 + }; + + ByteBuf msgBuf = Unpooled.buffer(25); + msgBuf.writeBytes(rawMessage); + msgBuf.readByte(); //to simulate the reading of messageType done by MQTTDecoder dispatcher + + //Exercise + m_msgdec.decode(null, msgBuf, m_results); + + assertFalse(m_results.isEmpty()); + PublishMessage message = (PublishMessage)m_results.get(0); + assertNotNull(message); + assertEquals("/topic", message.getTopicName()); + assertEquals("Test my payload", new String(message.getPayload())); + } + private void initHeader(ByteBuf buff) throws IllegalAccessException { ByteBuf tmp = Unpooled.buffer(4).writeBytes(Utils.encodeString("Fake Topic")); buff.clear().writeByte(AbstractMessage.PUBLISH << 4).writeBytes(Utils.encodeRemainingLength(tmp.readableBytes()));