Home / Class/ AbstractSocketReuseFdTest Class — netty Architecture

AbstractSocketReuseFdTest Class — netty Architecture

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

Entity Profile

Dependency Diagram

graph TD
  ef82a39a_453d_e354_874d_2b0f5e0a02d5["AbstractSocketReuseFdTest"]
  27781ab1_b241_2e7d_8861_817581c95ca8["AbstractSocketReuseFdTest.java"]
  ef82a39a_453d_e354_874d_2b0f5e0a02d5 -->|defined in| 27781ab1_b241_2e7d_8861_817581c95ca8
  7f75f12e_642a_646c_57f5_e0b42233f083["SocketAddress()"]
  ef82a39a_453d_e354_874d_2b0f5e0a02d5 -->|method| 7f75f12e_642a_646c_57f5_e0b42233f083
  f42b4f73_4a83_d229_a5fb_6a177a77738c["newFactories()"]
  ef82a39a_453d_e354_874d_2b0f5e0a02d5 -->|method| f42b4f73_4a83_d229_a5fb_6a177a77738c
  39915c32_f6b3_9789_d46d_4adb17bdba3a["testReuseFd()"]
  ef82a39a_453d_e354_874d_2b0f5e0a02d5 -->|method| 39915c32_f6b3_9789_d46d_4adb17bdba3a

Relationship Graph

Source Code

testsuite/src/main/java/io/netty/testsuite/transport/socket/AbstractSocketReuseFdTest.java lines 44–186

public abstract class AbstractSocketReuseFdTest extends AbstractSocketTest {
    @Override
    protected abstract SocketAddress newSocketAddress();

    @Override
    protected abstract List<TestsuitePermutation.BootstrapComboFactory<ServerBootstrap, Bootstrap>> newFactories();

    @Test
    @Timeout(value = 60000, unit = TimeUnit.MILLISECONDS)
    public void testReuseFd(TestInfo testInfo) throws Throwable {
        run(testInfo, new Runner<ServerBootstrap, Bootstrap>() {
            @Override
            public void run(ServerBootstrap serverBootstrap, Bootstrap bootstrap) throws Throwable {
                testReuseFd(serverBootstrap, bootstrap);
            }
        });
    }

    public void testReuseFd(ServerBootstrap sb, Bootstrap cb) throws Throwable {
        sb.childOption(ChannelOption.AUTO_READ, true);
        cb.option(ChannelOption.AUTO_READ, true);

        // Use a number which will typically not exceed /proc/sys/net/core/somaxconn (which is 128 on linux by default
        // often).
        int numChannels = 100;
        final AtomicReference<Throwable> globalException = new AtomicReference<Throwable>();
        final AtomicInteger serverRemaining = new AtomicInteger(numChannels);
        final AtomicInteger clientRemaining = new AtomicInteger(numChannels);
        final Promise<Void> serverDonePromise = ImmediateEventExecutor.INSTANCE.newPromise();
        final Promise<Void> clientDonePromise = ImmediateEventExecutor.INSTANCE.newPromise();

        sb.childHandler(new ChannelInitializer<Channel>() {
            @Override
            public void initChannel(Channel sch) {
                ReuseFdHandler sh = new ReuseFdHandler(
                    false,
                    globalException,
                    serverRemaining,
                    serverDonePromise);
                sch.pipeline().addLast("handler", sh);
            }
        });

        cb.handler(new ChannelInitializer<Channel>() {
            @Override
            public void initChannel(Channel sch) {
                ReuseFdHandler ch = new ReuseFdHandler(
                    true,
                    globalException,
                    clientRemaining,
                    clientDonePromise);
                sch.pipeline().addLast("handler", ch);
            }
        });

        ChannelFutureListener listener = future -> {
            if (!future.isSuccess()) {
                clientDonePromise.tryFailure(future.cause());
            }
        };

        Channel sc = sb.bind().sync().channel();
        for (int i = 0; i < numChannels; i++) {
            cb.connect(sc.localAddress()).addListener(listener);
        }

        clientDonePromise.sync();
        serverDonePromise.sync();
        sc.close().sync();

        if (globalException.get() != null && !(globalException.get() instanceof IOException)) {
            throw globalException.get();
        }
    }

    static class ReuseFdHandler extends ChannelInboundHandlerAdapter {
        private static final String EXPECTED_PAYLOAD = "payload";

        private final Promise<Void> donePromise;
        private final AtomicInteger remaining;
        private final boolean client;

Frequently Asked Questions

What is the AbstractSocketReuseFdTest class?
AbstractSocketReuseFdTest is a class in the netty codebase, defined in testsuite/src/main/java/io/netty/testsuite/transport/socket/AbstractSocketReuseFdTest.java.
Where is AbstractSocketReuseFdTest defined?
AbstractSocketReuseFdTest is defined in testsuite/src/main/java/io/netty/testsuite/transport/socket/AbstractSocketReuseFdTest.java at line 44.

Analyze Your Own Codebase

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

Try Supermodel Free