IoUringDatagramUnicastTest.java — netty Source File
Architecture documentation for IoUringDatagramUnicastTest.java, a java file in the netty codebase.
Entity Profile
Relationship Graph
Source Code
/*
* Copyright 2024 The Netty Project
*
* The Netty Project licenses this file to you under the Apache License,
* version 2.0 (the "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at:
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations
* under the License.
*/
package io.netty.channel.uring;
import io.netty.bootstrap.Bootstrap;
import io.netty.channel.Channel;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.ChannelInboundHandlerAdapter;
import io.netty.channel.ChannelOption;
import io.netty.channel.FixedRecvByteBufAllocator;
import io.netty.channel.SimpleChannelInboundHandler;
import io.netty.channel.socket.DatagramPacket;
import io.netty.channel.socket.SocketProtocolFamily;
import io.netty.testsuite.transport.TestsuitePermutation;
import io.netty.testsuite.transport.socket.DatagramUnicastInetTest;
import io.netty.util.ReferenceCountUtil;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.TestInfo;
import org.junit.jupiter.api.Timeout;
import java.net.InetSocketAddress;
import java.util.List;
import java.util.concurrent.CountDownLatch;
import static org.junit.jupiter.api.Assumptions.assumeTrue;
public class IoUringDatagramUnicastTest extends DatagramUnicastInetTest {
@BeforeAll
public static void loadJNI() {
assumeTrue(IoUring.isAvailable());
}
@Override
protected List<TestsuitePermutation.BootstrapComboFactory<Bootstrap, Bootstrap>> newFactories() {
return IoUringSocketTestPermutation.INSTANCE.datagram(SocketProtocolFamily.INET);
}
@Test
@Timeout(8)
public void testRecvMsgDontBlock(TestInfo testInfo) throws Throwable {
run(testInfo, this::testRecvMsgDontBlock);
}
public void testRecvMsgDontBlock(Bootstrap sb, Bootstrap cb) throws Throwable {
Channel sc = null;
Channel cc = null;
try {
cb.handler(new SimpleChannelInboundHandler<Object>() {
@Override
protected void channelRead0(ChannelHandlerContext ctx, Object msg) {
// NOOP.
}
});
cc = cb.bind(newSocketAddress()).sync().channel();
CountDownLatch readLatch = new CountDownLatch(1);
CountDownLatch readCompleteLatch = new CountDownLatch(1);
sc = sb.handler(new ChannelInboundHandlerAdapter() {
@Override
public void channelRead(ChannelHandlerContext ctx, Object msg) {
readLatch.countDown();
ReferenceCountUtil.release(msg);
}
@Override
public void channelReadComplete(ChannelHandlerContext ctx) {
readCompleteLatch.countDown();
}
}).option(ChannelOption.RECVBUF_ALLOCATOR, new FixedRecvByteBufAllocator(2048))
.bind(newSocketAddress()).sync().channel();
InetSocketAddress addr = sendToAddress((InetSocketAddress) sc.localAddress());
cc.writeAndFlush(new DatagramPacket(cc.alloc().buffer().writeZero(512), addr)).sync();
readLatch.await();
readCompleteLatch.await();
} finally {
if (cc != null) {
cc.close().sync();
}
if (sc != null) {
sc.close().sync();
}
}
}
@Override
protected boolean supportDisconnect() {
return false;
}
}
Domain
Subdomains
Classes
Source
Frequently Asked Questions
What does IoUringDatagramUnicastTest.java do?
IoUringDatagramUnicastTest.java is a source file in the netty codebase, written in java. It belongs to the Buffer domain, Search subdomain.
Where is IoUringDatagramUnicastTest.java in the architecture?
IoUringDatagramUnicastTest.java is located at transport-native-io_uring/src/test/java/io/netty/channel/uring/IoUringDatagramUnicastTest.java (domain: Buffer, subdomain: Search, directory: transport-native-io_uring/src/test/java/io/netty/channel/uring).
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free