Home / Class/ MessageAggregatorTest Class — netty Architecture

MessageAggregatorTest Class — netty Architecture

Architecture documentation for the MessageAggregatorTest class in MessageAggregatorTest.java from the netty codebase.

Entity Profile

Dependency Diagram

graph TD
  bc4d585e_177f_3839_a8b4_bd1e1daabdff["MessageAggregatorTest"]
  47ce9a5c_f145_4bb9_058a_2bd376c6f8aa["MessageAggregatorTest.java"]
  bc4d585e_177f_3839_a8b4_bd1e1daabdff -->|defined in| 47ce9a5c_f145_4bb9_058a_2bd376c6f8aa
  e402e85a_9d96_65bf_a8c9_822429eecaca["ByteBufHolder()"]
  bc4d585e_177f_3839_a8b4_bd1e1daabdff -->|method| e402e85a_9d96_65bf_a8c9_822429eecaca
  ae1fef7f_bd3e_d252_c9ee_681ba697560b["testReadFlowManagement()"]
  bc4d585e_177f_3839_a8b4_bd1e1daabdff -->|method| ae1fef7f_bd3e_d252_c9ee_681ba697560b
  adbc63eb_c346_8c90_2bb6_a167bc89fec1["testCloseWhileAggregating()"]
  bc4d585e_177f_3839_a8b4_bd1e1daabdff -->|method| adbc63eb_c346_8c90_2bb6_a167bc89fec1

Relationship Graph

Source Code

codec-base/src/test/java/io/netty/handler/codec/MessageAggregatorTest.java lines 37–137

public class MessageAggregatorTest {
    private static final class ReadCounter extends ChannelOutboundHandlerAdapter {
        int value;

        @Override
        public void read(ChannelHandlerContext ctx) throws Exception {
            value++;
            ctx.read();
        }
    }

    abstract static class MockMessageAggregator
        extends MessageAggregator<ByteBufHolder, ByteBufHolder, ByteBufHolder, ByteBufHolder> {

        protected MockMessageAggregator() {
            super(1024);
        }

        @Override
        protected ByteBufHolder beginAggregation(ByteBufHolder start, ByteBuf content) throws Exception {
            return start.replace(content);
        }
    }

    private static ByteBufHolder message(String string) {
        return new DefaultByteBufHolder(
            Unpooled.copiedBuffer(string, CharsetUtil.US_ASCII));
    }

    @Test
    public void testReadFlowManagement() throws Exception {
        ReadCounter counter = new ReadCounter();
        ByteBufHolder first = message("first");
        ByteBufHolder chunk = message("chunk");
        ByteBufHolder last = message("last");

        MockMessageAggregator agg = spy(MockMessageAggregator.class);
        when(agg.isStartMessage(first)).thenReturn(true);
        when(agg.isContentMessage(chunk)).thenReturn(true);
        when(agg.isContentMessage(last)).thenReturn(true);
        when(agg.isLastContentMessage(last)).thenReturn(true);

        EmbeddedChannel embedded = new EmbeddedChannel(counter, agg);
        embedded.config().setAutoRead(false);

        assertFalse(embedded.writeInbound(first));
        assertFalse(embedded.writeInbound(chunk));
        assertTrue(embedded.writeInbound(last));

        assertEquals(3, counter.value); // 2 reads issued from MockMessageAggregator
                                        // 1 read issued from EmbeddedChannel constructor

        ByteBufHolder all = new DefaultByteBufHolder(Unpooled.wrappedBuffer(
            first.content().retain(), chunk.content().retain(), last.content().retain()));
        ByteBufHolder out = embedded.readInbound();

        assertEquals(all, out);
        assertTrue(all.release() && out.release());
        assertFalse(embedded.finish());
    }

    @Test
    public void testCloseWhileAggregating() throws Exception {
        ReadCounter counter = new ReadCounter();
        ByteBufHolder first = new TestMessage(Unpooled.copiedBuffer("first", CharsetUtil.US_ASCII));

        MockMessageAggregator agg = spy(MockMessageAggregator.class);
        when(agg.isStartMessage(first)).thenReturn(true);
        when(agg.isLastContentMessage(first)).thenReturn(false);

        final EmbeddedChannel embedded = new EmbeddedChannel(counter, agg);
        embedded.config().setAutoRead(false);

        assertFalse(embedded.writeInbound(first));

        assertEquals(2, counter.value);
        assertThrows(PrematureChannelClosureException.class, new Executable() {
            @Override
            public void execute() {
                embedded.finish();
            }

Frequently Asked Questions

What is the MessageAggregatorTest class?
MessageAggregatorTest is a class in the netty codebase, defined in codec-base/src/test/java/io/netty/handler/codec/MessageAggregatorTest.java.
Where is MessageAggregatorTest defined?
MessageAggregatorTest is defined in codec-base/src/test/java/io/netty/handler/codec/MessageAggregatorTest.java at line 37.

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free