EmbeddedChannel extends AbstractChannel { public boolean releaseOutbound() { return releaseAll(outboundMessages); } EmbeddedChannel();  EmbeddedChannel(ChannelId channelId);  EmbeddedChannel(ChannelHandler... handlers);  EmbeddedChannel(boolean hasDisconnect, ChannelHandler... handlers);  EmbeddedChannel(boolean register, boolean hasDisconnect, ChannelHandler... handlers);  EmbeddedChannel(ChannelId channelId, ChannelHandler... handlers);  EmbeddedChannel(ChannelId channelId, boolean hasDisconnect, ChannelHandler... handlers);  EmbeddedChannel(ChannelId channelId, boolean register, boolean hasDisconnect,
                           final ChannelHandler... handlers);  EmbeddedChannel(ChannelId channelId, boolean hasDisconnect, final ChannelConfig config,
                           final ChannelHandler... handlers); void register(); @Override ChannelMetadata metadata(); @Override ChannelConfig config(); @Override boolean isOpen(); @Override boolean isActive(); Queue<Object> inboundMessages(); @Deprecated Queue<Object> lastInboundBuffer(); Queue<Object> outboundMessages(); @Deprecated Queue<Object> lastOutboundBuffer(); @SuppressWarnings("unchecked") T readInbound(); @SuppressWarnings("unchecked") T readOutbound(); boolean writeInbound(Object... msgs); ChannelFuture writeOneInbound(Object msg); ChannelFuture writeOneInbound(Object msg, ChannelPromise promise); EmbeddedChannel flushInbound(); boolean writeOutbound(Object... msgs); ChannelFuture writeOneOutbound(Object msg); ChannelFuture writeOneOutbound(Object msg, ChannelPromise promise); EmbeddedChannel flushOutbound(); boolean finish(); boolean finishAndReleaseAll(); boolean releaseInbound(); boolean releaseOutbound(); @Override final ChannelFuture close(); @Override final ChannelFuture disconnect(); @Override final ChannelFuture close(ChannelPromise promise); @Override final ChannelFuture disconnect(ChannelPromise promise); void runPendingTasks(); long runScheduledPendingTasks(); void checkException(); @Override Unsafe unsafe();  }
@Test public void testReleaseOutbound() { ByteBuf in = Unpooled.buffer(); ByteBuf out = Unpooled.buffer(); try { EmbeddedChannel channel = new EmbeddedChannel(); assertTrue(channel.writeInbound(in)); assertEquals(1, in.refCnt()); assertTrue(channel.writeOutbound(out)); assertEquals(1, out.refCnt()); assertTrue(channel.releaseOutbound()); assertEquals(1, in.refCnt()); assertEquals(0, out.refCnt()); assertTrue(channel.finish()); assertNull(channel.readOutbound()); ByteBuf buffer = channel.readInbound(); assertSame(in, buffer); buffer.release(); assertNull(channel.readInbound()); } finally { release(in, out); } }