From 427b784c6e9acd658024dc86b7906482b0dd2d71 Mon Sep 17 00:00:00 2001 From: Norman Maurer Date: Sun, 11 Dec 2011 09:21:29 +0100 Subject: [PATCH] DefaultChannelPipeline.replace() does not correctly replace a ChannelHandler if name is preserved. See #113 --- .../netty/channel/DefaultChannelPipeline.java | 2 +- .../channel/DefaultChannelPipelineTest.java | 47 +++++++++++++++++++ 2 files changed, 48 insertions(+), 1 deletion(-) create mode 100644 src/test/java/io/netty/channel/DefaultChannelPipelineTest.java diff --git a/src/main/java/io/netty/channel/DefaultChannelPipeline.java b/src/main/java/io/netty/channel/DefaultChannelPipeline.java index 67fe512195..312431a796 100644 --- a/src/main/java/io/netty/channel/DefaultChannelPipeline.java +++ b/src/main/java/io/netty/channel/DefaultChannelPipeline.java @@ -286,8 +286,8 @@ public class DefaultChannelPipeline implements ChannelPipeline { if (!sameName) { name2ctx.remove(ctx.getName()); - name2ctx.put(newName, newCtx); } + name2ctx.put(newName, newCtx); ChannelHandlerLifeCycleException removeException = null; ChannelHandlerLifeCycleException addException = null; diff --git a/src/test/java/io/netty/channel/DefaultChannelPipelineTest.java b/src/test/java/io/netty/channel/DefaultChannelPipelineTest.java new file mode 100644 index 0000000000..8fd40b355d --- /dev/null +++ b/src/test/java/io/netty/channel/DefaultChannelPipelineTest.java @@ -0,0 +1,47 @@ +/* + * Copyright 2011 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.channel; + +import static org.junit.Assert.*; + +import org.junit.Test; + +public class DefaultChannelPipelineTest { + @Test + public void testReplaceChannelHandler() { + DefaultChannelPipeline pipeline = new DefaultChannelPipeline(); + + SimpleChannelHandler handler1 = new SimpleChannelHandler(); + pipeline.addLast("handler1", handler1); + pipeline.addLast("handler2", handler1); + pipeline.addLast("handler3", handler1); + assertTrue(pipeline.get("handler1") == handler1); + assertTrue(pipeline.get("handler2") == handler1); + assertTrue(pipeline.get("handler3") == handler1); + + SimpleChannelHandler newHandler1 = new SimpleChannelHandler(); + pipeline.replace("handler1", "handler1", newHandler1); + assertTrue(pipeline.get("handler1") == newHandler1); + + SimpleChannelHandler newHandler3 = new SimpleChannelHandler(); + pipeline.replace("handler3", "handler3", newHandler3); + assertTrue(pipeline.get("handler3") == newHandler3); + + SimpleChannelHandler newHandler2 = new SimpleChannelHandler(); + pipeline.replace("handler2", "handler2", newHandler2); + assertTrue(pipeline.get("handler2") == newHandler2); + } +}