@Test(timeout = 10000)
public void testRemoveAndForwardInboundOutbound() throws Exception {

    final BufferedTestHandler handler1 = new BufferedTestHandler();
    final BufferedTestHandler handler2 = new BufferedTestHandler();
    final BufferedTestHandler handler3 = new BufferedTestHandler();
    setUp(handler1, handler2, handler3);
    self.eventLoop().submit(new Runnable() {
        @Override
        public void run() {
            ChannelPipeline p = self.pipeline();
            handler2.inboundBuffer.add(8);
            handler2.outboundBuffer.add(8);
            assertEquals(8, handler2.inboundBuffer.peek());
            assertEquals(8, handler2.outboundBuffer.peek());
            assertEquals(0, handler1.outboundBuffer.size());
            assertEquals(0, handler3.inboundBuffer.size());
            p.remove(handler2);
            assertEquals(8, handler3.inboundBuffer.peek());
            assertEquals(8, handler1.outboundBuffer.peek());
        }
    }).sync();
}