/*
* Copyright 2012 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 org.jboss.netty.channel;
import org.junit.Test;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import static org.junit.Assert.*;
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);
assertSame(pipeline.get("handler1"), handler1);
assertSame(pipeline.get("handler2"), handler1);
assertSame(pipeline.get("handler3"), handler1);
SimpleChannelHandler newHandler1 = new SimpleChannelHandler();
pipeline.replace("handler1", "handler1", newHandler1);
assertSame(pipeline.get("handler1"), newHandler1);
SimpleChannelHandler newHandler3 = new SimpleChannelHandler();
pipeline.replace("handler3", "handler3", newHandler3);
assertSame(pipeline.get("handler3"), newHandler3);
SimpleChannelHandler newHandler2 = new SimpleChannelHandler();
pipeline.replace("handler2", "handler2", newHandler2);
assertSame(pipeline.get("handler2"), newHandler2);
}
// Test for #505
@Test
public void testToString() {
DefaultChannelPipeline pipeline = new DefaultChannelPipeline();
assertNotNull(pipeline.toString());
}
@Test
public void testLifeCycleAware() {
DefaultChannelPipeline pipeline = new DefaultChannelPipeline();
List<LifeCycleAwareTestHandler> handlers = new ArrayList<LifeCycleAwareTestHandler>();
for (int i = 0; i < 20; i++) {
LifeCycleAwareTestHandler handler = new LifeCycleAwareTestHandler("handler-" + i);
// Add handler.
pipeline.addFirst(handler.name, handler);
// Validate handler life-cycle methods called.
handler.validate(true, true, false, false);
// Store handler into the list.
handlers.add(handler);
}
// Change the order of remove operations over all handlers in the pipeline.
Collections.shuffle(handlers);
for (LifeCycleAwareTestHandler handler : handlers) {
assertSame(handler, pipeline.remove(handler.name));
// Validate handler life-cycle methods called.
handler.validate(true, true, true, true);
}
}
/** Test handler to validate life-cycle aware behavior. */
private static final class LifeCycleAwareTestHandler extends SimpleChannelHandler
implements LifeCycleAwareChannelHandler {
private final String name;
private boolean beforeAdd;
private boolean afterAdd;
private boolean beforeRemove;
private boolean afterRemove;
/**
* Constructs life-cycle aware test handler.
*
* @param name Handler name to display in assertion messages.
*/
private LifeCycleAwareTestHandler(String name) {
this.name = name;
}
public void validate(boolean beforeAdd, boolean afterAdd, boolean beforeRemove, boolean afterRemove) {
assertEquals(name, beforeAdd, this.beforeAdd);
assertEquals(name, afterAdd, this.afterAdd);
assertEquals(name, beforeRemove, this.beforeRemove);
assertEquals(name, afterRemove, this.afterRemove);
}
public void beforeAdd(ChannelHandlerContext ctx) {
validate(false, false, false, false);
beforeAdd = true;
}
public void afterAdd(ChannelHandlerContext ctx) {
validate(true, false, false, false);
afterAdd = true;
}
public void beforeRemove(ChannelHandlerContext ctx) {
validate(true, true, false, false);
beforeRemove = true;
}
public void afterRemove(ChannelHandlerContext ctx) {
validate(true, true, true, false);
afterRemove = true;
}
}
}