Home / Class/ QuicChannelDatagramTest Class — netty Architecture

QuicChannelDatagramTest Class — netty Architecture

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

Entity Profile

Dependency Diagram

graph TD
  bcae6038_b6d0_d9ad_8a13_ee2026092191["QuicChannelDatagramTest"]
  3c6d3744_2a62_d9e9_97f5_821d38297a61["QuicChannelDatagramTest.java"]
  bcae6038_b6d0_d9ad_8a13_ee2026092191 -->|defined in| 3c6d3744_2a62_d9e9_97f5_821d38297a61
  3a83b5d6_0de9_bbb3_7f2b_627c9aa77770["testDatagramFlushInChannelRead()"]
  bcae6038_b6d0_d9ad_8a13_ee2026092191 -->|method| 3a83b5d6_0de9_bbb3_7f2b_627c9aa77770
  aa1d315e_4c67_3437_5ca8_c05cba9b8d2f["testDatagramFlushInChannelReadComplete()"]
  bcae6038_b6d0_d9ad_8a13_ee2026092191 -->|method| aa1d315e_4c67_3437_5ca8_c05cba9b8d2f
  8794c99c_91b0_9c0b_9804_1303ad10da01["testDatagram()"]
  bcae6038_b6d0_d9ad_8a13_ee2026092191 -->|method| 8794c99c_91b0_9c0b_9804_1303ad10da01
  f0c29546_6ba5_20ac_1179_60b15eda445d["testDatagramNoAutoReadMaxMessagesPerRead1()"]
  bcae6038_b6d0_d9ad_8a13_ee2026092191 -->|method| f0c29546_6ba5_20ac_1179_60b15eda445d
  cb0b3850_abd7_d3fe_4436_80bc91a43738["testDatagramNoAutoReadMaxMessagesPerRead3()"]
  bcae6038_b6d0_d9ad_8a13_ee2026092191 -->|method| cb0b3850_abd7_d3fe_4436_80bc91a43738
  a392d129_36c2_9118_c91c_b74daaed91b9["testDatagramNoAutoReadMaxMessagesPerRead1OutSideEventLoop()"]
  bcae6038_b6d0_d9ad_8a13_ee2026092191 -->|method| a392d129_36c2_9118_c91c_b74daaed91b9
  35a3c3b9_7f71_ab7a_7691_6bb611ad978f["testDatagramNoAutoReadMaxMessagesPerRead3OutSideEventLoop()"]
  bcae6038_b6d0_d9ad_8a13_ee2026092191 -->|method| 35a3c3b9_7f71_ab7a_7691_6bb611ad978f
  7c81fdec_3262_c605_8410_d9bd452a77be["testDatagramNoAutoRead()"]
  bcae6038_b6d0_d9ad_8a13_ee2026092191 -->|method| 7c81fdec_3262_c605_8410_d9bd452a77be

Relationship Graph

Source Code

codec-native-quic/src/test/java/io/netty/handler/codec/quic/QuicChannelDatagramTest.java lines 43–306

public class QuicChannelDatagramTest extends AbstractQuicTest {

    private static final Random random = new Random();
    static final byte[] data = new byte[512];

    static {
        random.nextBytes(data);
    }

    @ParameterizedTest
    @MethodSource("newSslTaskExecutors")
    public void testDatagramFlushInChannelRead(Executor executor) throws Throwable {
        testDatagram(executor, false);
    }

    @ParameterizedTest
    @MethodSource("newSslTaskExecutors")
    public void testDatagramFlushInChannelReadComplete(Executor executor) throws Throwable {
        testDatagram(executor, true);
    }

    private void testDatagram(Executor executor, boolean flushInReadComplete) throws Throwable {
        AtomicReference<QuicDatagramExtensionEvent> serverEventRef = new AtomicReference<>();

        QuicChannelValidationHandler serverHandler = new QuicChannelValidationHandler() {

            @Override
            public void channelRead(ChannelHandlerContext ctx, Object msg) {
                if (msg instanceof ByteBuf) {
                    final ChannelFuture future;
                    if (!flushInReadComplete) {
                        future = ctx.writeAndFlush(msg);
                    } else {
                        future = ctx.write(msg);
                    }
                    future.addListener(ChannelFutureListener.CLOSE);
                } else {
                    ctx.fireChannelRead(msg);
                }
            }

            @Override
            public void channelReadComplete(ChannelHandlerContext ctx) {
                if (flushInReadComplete) {
                    ctx.flush();
                }
            }

            @Override
            public void userEventTriggered(ChannelHandlerContext ctx, Object evt) throws Exception {
                if (evt instanceof QuicDatagramExtensionEvent) {
                    serverEventRef.set((QuicDatagramExtensionEvent) evt);
                }
                super.userEventTriggered(ctx, evt);
            }
        };
        Channel server = QuicTestUtils.newServer(QuicTestUtils.newQuicServerBuilder(executor)
                        .datagram(10, 10),
                InsecureQuicTokenHandler.INSTANCE, serverHandler , new ChannelInboundHandlerAdapter());
        InetSocketAddress address = (InetSocketAddress) server.localAddress();

        Promise<ByteBuf> receivedBuffer = ImmediateEventExecutor.INSTANCE.newPromise();
        AtomicReference<QuicDatagramExtensionEvent> clientEventRef = new AtomicReference<>();
        Channel channel = QuicTestUtils.newClient(QuicTestUtils.newQuicClientBuilder(executor)
                .datagram(10, 10));

        QuicChannelValidationHandler clientHandler = new QuicChannelValidationHandler() {
            @Override
            public void channelRead(ChannelHandlerContext ctx, Object msg) {
                if (!receivedBuffer.trySuccess((ByteBuf) msg)) {
                    ReferenceCountUtil.release(msg);
                }
            }

            @Override
            public void userEventTriggered(ChannelHandlerContext ctx, Object evt) throws Exception {
                if (evt instanceof QuicDatagramExtensionEvent) {
                    clientEventRef.set((QuicDatagramExtensionEvent) evt);
                }
                super.userEventTriggered(ctx, evt);
            }

Frequently Asked Questions

What is the QuicChannelDatagramTest class?
QuicChannelDatagramTest is a class in the netty codebase, defined in codec-native-quic/src/test/java/io/netty/handler/codec/quic/QuicChannelDatagramTest.java.
Where is QuicChannelDatagramTest defined?
QuicChannelDatagramTest is defined in codec-native-quic/src/test/java/io/netty/handler/codec/quic/QuicChannelDatagramTest.java at line 43.

Analyze Your Own Codebase

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

Try Supermodel Free