@Test public void testRemoveAndWriteAllReentrance() { EmbeddedChannel channel = new EmbeddedChannel(new ChannelInboundHandlerAdapter()); final PendingWriteQueue queue = new PendingWriteQueue(channel.pipeline().firstContext()); ChannelPromise promise = channel.newPromise(); promise.addListener( new ChannelFutureListener() { @Override public void operationComplete(ChannelFuture future) throws Exception { queue.removeAndWriteAll(); } }); queue.add(1L, promise); ChannelPromise promise2 = channel.newPromise(); queue.add(2L, promise2); queue.removeAndWriteAll(); channel.flush(); assertTrue(promise.isSuccess()); assertTrue(promise2.isSuccess()); assertTrue(channel.finish()); assertEquals(1L, channel.readOutbound()); assertEquals(2L, channel.readOutbound()); assertNull(channel.readOutbound()); assertNull(channel.readInbound()); }
// See https://github.com/netty/netty/issues/3967 @Test public void testCloseChannelOnCreation() { EmbeddedChannel channel = new EmbeddedChannel(); channel.close().syncUninterruptibly(); final PendingWriteQueue queue = new PendingWriteQueue(channel.pipeline().firstContext()); IllegalStateException ex = new IllegalStateException(); ChannelPromise promise = channel.newPromise(); queue.add(1L, promise); queue.removeAndFailAll(ex); assertSame(ex, promise.cause()); }