Add another test case for channelReadComplete() suppression

Related commit:
- a41b46ff43

Motivation:

We need a test case for the commit above.
This commit is contained in:
Trustin Lee 2015-02-09 16:14:02 +09:00
parent f7ccdd5d3b
commit 5fca3de098

View File

@ -621,6 +621,44 @@ public class DefaultChannelPipelineTest {
}
}
/**
* {@link ChannelInboundHandler#channelReadComplete(ChannelHandlerContext)} should not be suppressed
* when a handler has just been added and thus had no chance to get the previous
* {@link ChannelInboundHandler#channelRead(ChannelHandlerContext, Object)}.
*/
@Test
public void testProhibitChannelReadCompleteSuppression() throws Exception {
final AtomicInteger readComplete = new AtomicInteger();
EmbeddedChannel ch = new EmbeddedChannel(new ChannelInboundHandlerAdapter() {
@Override
public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
ctx.fireChannelRead(msg);
// Add a new handler *after* channelRead() is triggered, so that
// the new handler does not handle channelRead() at all.
ctx.pipeline().addAfter(ctx.name(), "newHandler", new ChannelInboundHandlerAdapter() {
@Override
public void channelReadComplete(ChannelHandlerContext ctx) throws Exception {
readComplete.incrementAndGet();
}
});
}
@Override
public void channelReadComplete(ChannelHandlerContext ctx) throws Exception {
ctx.fireChannelReadComplete();
}
});
ChannelPipeline p = ch.pipeline();
p.fireChannelRead(Boolean.TRUE);
p.fireChannelReadComplete();
ch.finish();
assertEquals(1, readComplete.get());
}
@Test
public void testChannelReadTriggered() {
final AtomicInteger read1 = new AtomicInteger();