Home / Class/ QuicStreamFrameTest Class — netty Architecture

QuicStreamFrameTest Class — netty Architecture

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

Entity Profile

Dependency Diagram

graph TD
  1b8808c2_77d6_7455_836f_569e62842ec3["QuicStreamFrameTest"]
  893fba38_068a_e633_3ac3_b01e62e27f16["QuicStreamFrameTest.java"]
  1b8808c2_77d6_7455_836f_569e62842ec3 -->|defined in| 893fba38_068a_e633_3ac3_b01e62e27f16
  8a583cf1_c208_9baa_4bb7_47217be4f8c2["testCloseHalfClosureUnidirectional()"]
  1b8808c2_77d6_7455_836f_569e62842ec3 -->|method| 8a583cf1_c208_9baa_4bb7_47217be4f8c2
  f71723e7_7ec9_fba3_9516_bfe00b12a9ec["testCloseHalfClosureBidirectional()"]
  1b8808c2_77d6_7455_836f_569e62842ec3 -->|method| f71723e7_7ec9_fba3_9516_bfe00b12a9ec
  f94a8858_193b_14f6_d8b0_3e3fd07aa73d["testCloseHalfClosure()"]
  1b8808c2_77d6_7455_836f_569e62842ec3 -->|method| f94a8858_193b_14f6_d8b0_3e3fd07aa73d

Relationship Graph

Source Code

codec-native-quic/src/test/java/io/netty/handler/codec/quic/QuicStreamFrameTest.java lines 34–144

public class QuicStreamFrameTest extends AbstractQuicTest {

    @ParameterizedTest
    @MethodSource("newSslTaskExecutors")
    public void testCloseHalfClosureUnidirectional(Executor executor) throws Throwable {
        testCloseHalfClosure(executor, QuicStreamType.UNIDIRECTIONAL);
    }

    @ParameterizedTest
    @MethodSource("newSslTaskExecutors")
    public void testCloseHalfClosureBidirectional(Executor executor) throws Throwable {
        testCloseHalfClosure(executor, QuicStreamType.BIDIRECTIONAL);
    }

    private static void testCloseHalfClosure(Executor executor, QuicStreamType type) throws Throwable {
        Channel server = null;
        Channel channel = null;
        QuicChannelValidationHandler serverHandler = new QuicChannelValidationHandler();
        QuicChannelValidationHandler clientHandler = new StreamCreationHandler(type);
        try {
            StreamHandler handler = new StreamHandler();
            server = QuicTestUtils.newServer(executor, serverHandler, handler);
            channel = QuicTestUtils.newClient(executor);
            QuicChannel quicChannel = QuicTestUtils.newQuicChannelBootstrap(channel)
                    .handler(clientHandler)
                    .streamHandler(new ChannelInboundHandlerAdapter())
                    .remoteAddress(server.localAddress())
                    .connect()
                    .get();

            handler.assertSequence();
            quicChannel.closeFuture().sync();

            serverHandler.assertState();
            clientHandler.assertState();
        } finally {
            QuicTestUtils.closeIfNotNull(channel);
            QuicTestUtils.closeIfNotNull(server);

            shutdown(executor);
        }
    }

    private static final class StreamCreationHandler extends QuicChannelValidationHandler {
        private final QuicStreamType type;

        StreamCreationHandler(QuicStreamType type) {
            this.type = type;
        }

        @Override
        public void channelActive(ChannelHandlerContext ctx) {
            super.channelActive(ctx);
            QuicChannel channel = (QuicChannel) ctx.channel();
            channel.createStream(type, new ChannelInboundHandlerAdapter() {
                @Override
                public void channelActive(ChannelHandlerContext ctx)  {
                    // Do the write and close the channel
                    ctx.writeAndFlush(Unpooled.buffer().writeZero(8))
                            .addListener(QuicStreamChannel.SHUTDOWN_OUTPUT);
                }
            });
        }
    }

    private static final class StreamHandler extends ChannelInboundHandlerAdapter {
        private final BlockingQueue<Integer> queue = new LinkedBlockingQueue<>();

        @Override
        public void channelRegistered(ChannelHandlerContext ctx) {
            ctx.channel().config().setOption(QuicChannelOption.READ_FRAMES, true);
            queue.add(0);
        }

        @Override
        public void channelInactive(ChannelHandlerContext ctx) {
            queue.add(3);
            // Close the QUIC channel as well.
            ctx.channel().parent().close();
        }

Frequently Asked Questions

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

Analyze Your Own Codebase

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

Try Supermodel Free