Home / Class/ QuicStreamHalfClosureTest Class — netty Architecture

QuicStreamHalfClosureTest Class — netty Architecture

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

Entity Profile

Dependency Diagram

graph TD
  74da7f13_e648_eea1_8a41_2ba6ed95fec0["QuicStreamHalfClosureTest"]
  ca5f6d82_99cb_9d45_006a_7771dc542641["QuicStreamHalfClosureTest.java"]
  74da7f13_e648_eea1_8a41_2ba6ed95fec0 -->|defined in| ca5f6d82_99cb_9d45_006a_7771dc542641
  b8ad16f2_1f0b_aefe_2c5a_eba661ce1456["testCloseHalfClosureUnidirectional()"]
  74da7f13_e648_eea1_8a41_2ba6ed95fec0 -->|method| b8ad16f2_1f0b_aefe_2c5a_eba661ce1456
  e3af2626_1242_071e_e31a_b250747d593a["testCloseHalfClosureBidirectional()"]
  74da7f13_e648_eea1_8a41_2ba6ed95fec0 -->|method| e3af2626_1242_071e_e31a_b250747d593a
  a3bd69f5_7513_bb37_ef4b_8eebd8266f8e["testCloseHalfClosure()"]
  74da7f13_e648_eea1_8a41_2ba6ed95fec0 -->|method| a3bd69f5_7513_bb37_ef4b_8eebd8266f8e

Relationship Graph

Source Code

codec-native-quic/src/test/java/io/netty/handler/codec/quic/QuicStreamHalfClosureTest.java lines 36–156

public class QuicStreamHalfClosureTest 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(ChannelFutureListener.CLOSE);
                }
            });
        }
    }

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

        @Override
        public void channelRegistered(ChannelHandlerContext ctx) {
            queue.add(0);
        }

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

        @Override

Frequently Asked Questions

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

Analyze Your Own Codebase

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

Try Supermodel Free