From 4f78bae2eb756ccd95e879c9d049ba56046ab90e Mon Sep 17 00:00:00 2001 From: Norman Maurer Date: Wed, 22 Feb 2017 08:44:04 +0100 Subject: [PATCH] DatagramPacketEncoder|Decoder should take into account if wrapped handler is sharable Motivation: DatagramPacketEncoder|Decoder should respect if the wrapped handler is sharable or not and depending on that be sharable or not. Modifications: - Delegate isSharable() to wrapped handler - Add test-cases Result: Correct behavior --- .../handler/codec/DatagramPacketDecoder.java | 5 +++ .../handler/codec/DatagramPacketEncoder.java | 5 +++ .../codec/DatagramPacketDecoderTest.java | 37 +++++++++++++++ .../codec/DatagramPacketEncoderTest.java | 45 +++++++++++++++++++ 4 files changed, 92 insertions(+) diff --git a/codec/src/main/java/io/netty/handler/codec/DatagramPacketDecoder.java b/codec/src/main/java/io/netty/handler/codec/DatagramPacketDecoder.java index bc0426cac1..d31f6e7faa 100644 --- a/codec/src/main/java/io/netty/handler/codec/DatagramPacketDecoder.java +++ b/codec/src/main/java/io/netty/handler/codec/DatagramPacketDecoder.java @@ -108,4 +108,9 @@ public class DatagramPacketDecoder extends MessageToMessageDecoder extends MessageToMessageEncoder wrapped = new TestMessageToMessageDecoder(sharable); + DatagramPacketDecoder decoder = new DatagramPacketDecoder(wrapped); + assertEquals(wrapped.isSharable(), decoder.isSharable()); + } + + private static final class TestMessageToMessageDecoder extends MessageToMessageDecoder { + + private final boolean sharable; + + TestMessageToMessageDecoder(boolean sharable) { + this.sharable = sharable; + } + + @Override + protected void decode(ChannelHandlerContext ctx, ByteBuf msg, List out) throws Exception { + // NOOP + } + + @Override + public boolean isSharable() { + return sharable; + } + } } diff --git a/codec/src/test/java/io/netty/handler/codec/DatagramPacketEncoderTest.java b/codec/src/test/java/io/netty/handler/codec/DatagramPacketEncoderTest.java index d8b0235407..fdf1cac63f 100644 --- a/codec/src/test/java/io/netty/handler/codec/DatagramPacketEncoderTest.java +++ b/codec/src/test/java/io/netty/handler/codec/DatagramPacketEncoderTest.java @@ -15,6 +15,9 @@ */ package io.netty.handler.codec; +import io.netty.buffer.ByteBuf; +import io.netty.channel.AddressedEnvelope; +import io.netty.channel.ChannelHandlerContext; import io.netty.channel.DefaultAddressedEnvelope; import io.netty.channel.embedded.EmbeddedChannel; import io.netty.channel.socket.DatagramPacket; @@ -26,6 +29,7 @@ import org.junit.Before; import org.junit.Test; import java.net.InetSocketAddress; +import java.util.List; import static org.junit.Assert.*; @@ -82,4 +86,45 @@ public class DatagramPacketEncoderTest { assertTrue(channel.writeOutbound(netty)); assertSame(netty, channel.readOutbound()); } + + @Test + public void testIsNotSharable() { + testSharable(false); + } + + @Test + public void testIsSharable() { + testSharable(true); + } + + private static void testSharable(boolean sharable) { + MessageToMessageEncoder> wrapped = + new TestMessageToMessageEncoder(sharable); + + DatagramPacketEncoder> encoder = + new DatagramPacketEncoder>(wrapped); + assertEquals(wrapped.isSharable(), encoder.isSharable()); + } + + private static final class TestMessageToMessageEncoder + extends MessageToMessageEncoder> { + + private final boolean sharable; + + TestMessageToMessageEncoder(boolean sharable) { + this.sharable = sharable; + } + + @Override + protected void encode( + ChannelHandlerContext ctx, AddressedEnvelope msg, List out) { + // NOOP + } + + @Override + public boolean isSharable() { + return sharable; + } + } }