Home / Class/ QuicStreamShutdownTest Class — netty Architecture

QuicStreamShutdownTest Class — netty Architecture

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

Entity Profile

Dependency Diagram

graph TD
  8f0deefd_ac73_09cd_1ee0_413b4ec84595["QuicStreamShutdownTest"]
  f6ba3c9a_4f61_b9b2_34f6_3ed84e617993["QuicStreamShutdownTest.java"]
  8f0deefd_ac73_09cd_1ee0_413b4ec84595 -->|defined in| f6ba3c9a_4f61_b9b2_34f6_3ed84e617993
  dcf12060_a684_6392_e406_d316f98f13cc["testShutdownInputClosureCausesStreamStopped()"]
  8f0deefd_ac73_09cd_1ee0_413b4ec84595 -->|method| dcf12060_a684_6392_e406_d316f98f13cc
  87b6acf8_1a82_813a_0a39_1298befea5f9["testShutdownInputClosureByServerCausesStreamStopped()"]
  8f0deefd_ac73_09cd_1ee0_413b4ec84595 -->|method| 87b6acf8_1a82_813a_0a39_1298befea5f9
  55d4b288_c1b1_40e0_6744_84b389a552a5["testShutdownOutputClosureByServerCausesStreamReset()"]
  8f0deefd_ac73_09cd_1ee0_413b4ec84595 -->|method| 55d4b288_c1b1_40e0_6744_84b389a552a5

Relationship Graph

Source Code

codec-native-quic/src/test/java/io/netty/handler/codec/quic/QuicStreamShutdownTest.java lines 40–220

public class QuicStreamShutdownTest extends AbstractQuicTest {

    @ParameterizedTest
    @MethodSource("newSslTaskExecutors")
    public void testShutdownInputClosureCausesStreamStopped(Executor executor) throws Throwable {
        Channel server = null;
        Channel channel = null;
        CountDownLatch latch = new CountDownLatch(2);
        try {
            server = QuicTestUtils.newServer(executor, new ChannelInboundHandlerAdapter(),
                    new ChannelInboundHandlerAdapter() {
                        @Override
                        public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
                            ChannelFutureListener futureListener = channelFuture -> {
                                Throwable cause = channelFuture.cause();
                                if (cause instanceof ChannelOutputShutdownException) {
                                    latch.countDown();
                                }
                            };
                            ByteBuf buffer = (ByteBuf) msg;
                            ctx.write(buffer.retainedDuplicate()).addListener(futureListener);
                            ctx.writeAndFlush(buffer).addListener(futureListener);
                        }
                    });
            channel = QuicTestUtils.newClient(executor);
            QuicChannel quicChannel = QuicTestUtils.newQuicChannelBootstrap(channel)
                    .handler(new ChannelInboundHandlerAdapter())
                    .streamHandler(new ChannelInboundHandlerAdapter())
                    .remoteAddress(server.localAddress())
                    .connect()
                    .get();

            QuicStreamChannel streamChannel = quicChannel.createStream(QuicStreamType.BIDIRECTIONAL,
                    new ChannelInboundHandlerAdapter()).sync().getNow();
            streamChannel.shutdownInput().sync();
            assertTrue(streamChannel.isInputShutdown());
            streamChannel.writeAndFlush(Unpooled.buffer().writeLong(8)).sync();

            latch.await();
        } finally {
            QuicTestUtils.closeIfNotNull(channel);
            QuicTestUtils.closeIfNotNull(server);

            shutdown(executor);
        }
    }

    @ParameterizedTest
    @MethodSource("newSslTaskExecutors")
    public void testShutdownInputClosureByServerCausesStreamStopped(Executor executor) throws Throwable {
        Channel server = null;
        Channel channel = null;
        CountDownLatch latch = new CountDownLatch(2);
        AtomicReference<Throwable> errorRef = new AtomicReference<>();
        try {
            server = QuicTestUtils.newServer(executor, new ChannelInboundHandlerAdapter(),
                    new ChannelInboundHandlerAdapter() {
                        @Override
                        public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
                            QuicStreamChannel streamChannel = (QuicStreamChannel) ctx.channel();
                            streamChannel.shutdownInput()
                                    .addListener(f -> {
                                        ByteBuf buffer = (ByteBuf) msg;
                                        if (!f.isSuccess()) {
                                            errorRef.compareAndSet(null, f.cause());
                                            latch.countDown();
                                            buffer.release();
                                        } else {
                                            ctx.writeAndFlush(buffer).addListener(channelFuture -> {
                                                if (!channelFuture.isSuccess()) {
                                                    errorRef.compareAndSet(null, channelFuture.cause());
                                                }
                                                latch.countDown();
                                            });
                                        }
                                    });
                        }
                    });

            channel = QuicTestUtils.newClient(executor);
            QuicChannel quicChannel = QuicTestUtils.newQuicChannelBootstrap(channel)

Frequently Asked Questions

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

Analyze Your Own Codebase

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

Try Supermodel Free