Home / Function/ testDatagramNoAutoRead() — netty Function Reference

testDatagramNoAutoRead() — netty Function Reference

Architecture documentation for the testDatagramNoAutoRead() function in QuicChannelDatagramTest.java from the netty codebase.

Entity Profile

Dependency Diagram

graph TD
  7c81fdec_3262_c605_8410_d9bd452a77be["testDatagramNoAutoRead()"]
  bcae6038_b6d0_d9ad_8a13_ee2026092191["QuicChannelDatagramTest"]
  7c81fdec_3262_c605_8410_d9bd452a77be -->|defined in| bcae6038_b6d0_d9ad_8a13_ee2026092191
  f0c29546_6ba5_20ac_1179_60b15eda445d["testDatagramNoAutoReadMaxMessagesPerRead1()"]
  f0c29546_6ba5_20ac_1179_60b15eda445d -->|calls| 7c81fdec_3262_c605_8410_d9bd452a77be
  cb0b3850_abd7_d3fe_4436_80bc91a43738["testDatagramNoAutoReadMaxMessagesPerRead3()"]
  cb0b3850_abd7_d3fe_4436_80bc91a43738 -->|calls| 7c81fdec_3262_c605_8410_d9bd452a77be
  a392d129_36c2_9118_c91c_b74daaed91b9["testDatagramNoAutoReadMaxMessagesPerRead1OutSideEventLoop()"]
  a392d129_36c2_9118_c91c_b74daaed91b9 -->|calls| 7c81fdec_3262_c605_8410_d9bd452a77be
  35a3c3b9_7f71_ab7a_7691_6bb611ad978f["testDatagramNoAutoReadMaxMessagesPerRead3OutSideEventLoop()"]
  35a3c3b9_7f71_ab7a_7691_6bb611ad978f -->|calls| 7c81fdec_3262_c605_8410_d9bd452a77be
  style 7c81fdec_3262_c605_8410_d9bd452a77be fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

codec-native-quic/src/test/java/io/netty/handler/codec/quic/QuicChannelDatagramTest.java lines 186–305

    private void testDatagramNoAutoRead(Executor executor, int maxMessagesPerRead, boolean readLater) throws Throwable {
        Promise<Void> serverPromise = ImmediateEventExecutor.INSTANCE.newPromise();
        Promise<ByteBuf> clientPromise = ImmediateEventExecutor.INSTANCE.newPromise();

        int numDatagrams = 5;
        AtomicInteger serverReadCount = new AtomicInteger();
        CountDownLatch latch  = new CountDownLatch(numDatagrams);
        QuicChannelValidationHandler serverHandler = new QuicChannelValidationHandler() {
            private int readPerLoop;

            @Override
            public void channelActive(ChannelHandlerContext ctx) {
                super.channelActive(ctx);
                ctx.read();
            }

            @Override
            public void channelRead(ChannelHandlerContext ctx, Object msg) {
                if (msg instanceof ByteBuf) {
                    readPerLoop++;

                    ctx.writeAndFlush(msg).addListener(future -> {
                        if (future.isSuccess()) {
                            latch.countDown();
                        }
                    });
                    if (serverReadCount.incrementAndGet() == numDatagrams) {
                        serverPromise.trySuccess(null);
                    }
                } else {
                    ctx.fireChannelRead(msg);
                }
            }

            @Override
            public void channelReadComplete(ChannelHandlerContext ctx) {
                if (readPerLoop > maxMessagesPerRead) {
                    ctx.close();
                    serverPromise.tryFailure(new AssertionError(
                            "Read more then " + maxMessagesPerRead +  " time per read loop"));
                    return;
                }
                readPerLoop = 0;
                if (serverReadCount.get() < numDatagrams) {
                    if (readLater) {
                        ctx.executor().execute(ctx::read);
                    } else {
                        ctx.read();
                    }
                }
            }
        };
        Channel server = QuicTestUtils.newServer(QuicTestUtils.newQuicServerBuilder(executor)
                        .option(ChannelOption.AUTO_READ, false)
                        .option(ChannelOption.MAX_MESSAGES_PER_READ, maxMessagesPerRead)
                        .datagram(10, 10),
                InsecureQuicTokenHandler.INSTANCE, serverHandler, new ChannelInboundHandlerAdapter());
        InetSocketAddress address = (InetSocketAddress) server.localAddress();

        Channel channel = QuicTestUtils.newClient(QuicTestUtils.newQuicClientBuilder(executor)
                .datagram(10, 10));
        AtomicInteger clientReadCount = new AtomicInteger();
        QuicChannelValidationHandler clientHandler = new QuicChannelValidationHandler() {

            @Override
            public void channelRead(ChannelHandlerContext ctx, Object msg) {
                if (msg instanceof ByteBuf) {

                    if (clientReadCount.incrementAndGet() == numDatagrams) {
                        if (!clientPromise.trySuccess((ByteBuf) msg)) {
                            ReferenceCountUtil.release(msg);
                        }
                    } else {
                        ReferenceCountUtil.release(msg);
                    }
                } else {
                    ctx.fireChannelRead(msg);
                }
            }

            @Override

Domain

Subdomains

Frequently Asked Questions

What does testDatagramNoAutoRead() do?
testDatagramNoAutoRead() is a function in the netty codebase, defined in codec-native-quic/src/test/java/io/netty/handler/codec/quic/QuicChannelDatagramTest.java.
Where is testDatagramNoAutoRead() defined?
testDatagramNoAutoRead() is defined in codec-native-quic/src/test/java/io/netty/handler/codec/quic/QuicChannelDatagramTest.java at line 186.
What calls testDatagramNoAutoRead()?
testDatagramNoAutoRead() is called by 4 function(s): testDatagramNoAutoReadMaxMessagesPerRead1, testDatagramNoAutoReadMaxMessagesPerRead1OutSideEventLoop, testDatagramNoAutoReadMaxMessagesPerRead3, testDatagramNoAutoReadMaxMessagesPerRead3OutSideEventLoop.

Analyze Your Own Codebase

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

Try Supermodel Free