testCorrectlyHandleReadableStreams() — netty Function Reference
Architecture documentation for the testCorrectlyHandleReadableStreams() function in QuicReadableTest.java from the netty codebase.
Entity Profile
Dependency Diagram
graph TD e8b6a2ae_d0eb_fe8d_596b_d737041dbba5["testCorrectlyHandleReadableStreams()"] 0534fc57_a356_79f8_f6d7_a0b91d4e819f["QuicReadableTest"] e8b6a2ae_d0eb_fe8d_596b_d737041dbba5 -->|defined in| 0534fc57_a356_79f8_f6d7_a0b91d4e819f c82510c4_cab1_a723_2999_08939d18ebd9["throwIfNotNull()"] e8b6a2ae_d0eb_fe8d_596b_d737041dbba5 -->|calls| c82510c4_cab1_a723_2999_08939d18ebd9 style e8b6a2ae_d0eb_fe8d_596b_d737041dbba5 fill:#6366f1,stroke:#818cf8,color:#fff
Relationship Graph
Source Code
codec-native-quic/src/test/java/io/netty/handler/codec/quic/QuicReadableTest.java lines 35–130
@ParameterizedTest
@MethodSource("newSslTaskExecutors")
public void testCorrectlyHandleReadableStreams(Executor executor) throws Throwable {
int numOfStreams = 256;
int readStreams = numOfStreams / 2;
// We do write longs.
int expectedDataRead = readStreams * Long.BYTES;
final CountDownLatch latch = new CountDownLatch(numOfStreams);
final AtomicInteger bytesRead = new AtomicInteger();
final AtomicReference<Throwable> serverErrorRef = new AtomicReference<>();
final AtomicReference<Throwable> clientErrorRef = new AtomicReference<>();
QuicChannelValidationHandler serverHandler = new QuicChannelValidationHandler();
Channel server = QuicTestUtils.newServer(
QuicTestUtils.newQuicServerBuilder(executor).initialMaxStreamsBidirectional(5000),
InsecureQuicTokenHandler.INSTANCE,
serverHandler, new ChannelInboundHandlerAdapter() {
private int counter;
@Override
public void channelRegistered(ChannelHandlerContext ctx) {
// Ensure we dont read from the streams so all of these will be reported as readable
ctx.channel().config().setAutoRead(false);
}
@Override
public void channelActive(ChannelHandlerContext ctx) {
counter++;
latch.countDown();
if (counter > readStreams) {
// Now set it to readable again for some channels
ctx.channel().config().setAutoRead(true);
}
}
@Override
public void channelRead(ChannelHandlerContext ctx, Object msg) {
ByteBuf buffer = (ByteBuf) msg;
bytesRead.addAndGet(buffer.readableBytes());
buffer.release();
}
@Override
public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) {
serverErrorRef.set(cause);
}
@Override
public boolean isSharable() {
return true;
}
});
Channel channel = QuicTestUtils.newClient(executor);
QuicChannelValidationHandler clientHandler = new QuicChannelValidationHandler();
ByteBuf data = Unpooled.directBuffer().writeLong(8);
try {
QuicChannel quicChannel = QuicTestUtils.newQuicChannelBootstrap(channel)
.handler(clientHandler)
.streamHandler(new ChannelInboundHandlerAdapter())
.remoteAddress(server.localAddress())
.connect()
.get();
List<Channel> streams = new ArrayList<>();
for (int i = 0; i < numOfStreams; i++) {
QuicStreamChannel stream = quicChannel.createStream(
QuicStreamType.BIDIRECTIONAL, new ChannelInboundHandlerAdapter() {
@Override
public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) {
clientErrorRef.set(cause);
}
}).get();
streams.add(stream.writeAndFlush(data.retainedSlice()).sync().channel());
}
latch.await();
while (bytesRead.get() < expectedDataRead) {
Thread.sleep(50);
}
for (Channel stream: streams) {
stream.close().sync();
}
quicChannel.close().sync();
Domain
Subdomains
Calls
Source
Frequently Asked Questions
What does testCorrectlyHandleReadableStreams() do?
testCorrectlyHandleReadableStreams() is a function in the netty codebase, defined in codec-native-quic/src/test/java/io/netty/handler/codec/quic/QuicReadableTest.java.
Where is testCorrectlyHandleReadableStreams() defined?
testCorrectlyHandleReadableStreams() is defined in codec-native-quic/src/test/java/io/netty/handler/codec/quic/QuicReadableTest.java at line 35.
What does testCorrectlyHandleReadableStreams() call?
testCorrectlyHandleReadableStreams() calls 1 function(s): throwIfNotNull.
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free