Home / Function/ testConcurrentAddRemove() — netty Function Reference

testConcurrentAddRemove() — netty Function Reference

Architecture documentation for the testConcurrentAddRemove() function in LocalTransportThreadModelTest3.java from the netty codebase.

Function java Buffer Search calls 4 called by 2

Entity Profile

Dependency Diagram

graph TD
  364f868b_2802_fe3b_5533_83572757fe40["testConcurrentAddRemove()"]
  f86ec9f6_ad3f_1246_2bcb_3e0c74480849["LocalTransportThreadModelTest3"]
  364f868b_2802_fe3b_5533_83572757fe40 -->|defined in| f86ec9f6_ad3f_1246_2bcb_3e0c74480849
  b0cc291c_461c_e05c_f2bf_3ff94d6469ff["testConcurrentAddRemoveInboundEvents()"]
  b0cc291c_461c_e05c_f2bf_3ff94d6469ff -->|calls| 364f868b_2802_fe3b_5533_83572757fe40
  d7140350_8361_fc0e_c145_b07f4959808a["testConcurrentAddRemoveOutboundEvents()"]
  d7140350_8361_fc0e_c145_b07f4959808a -->|calls| 364f868b_2802_fe3b_5533_83572757fe40
  8af1d2e1_a016_ae28_75f4_fba79d5b6081["EventRecorder()"]
  364f868b_2802_fe3b_5533_83572757fe40 -->|calls| 8af1d2e1_a016_ae28_75f4_fba79d5b6081
  3040527d_343e_e75c_3640_cf84c1de7f83["events()"]
  364f868b_2802_fe3b_5533_83572757fe40 -->|calls| 3040527d_343e_e75c_3640_cf84c1de7f83
  3e7e70cd_b9a9_6214_db90_2c2453ec3ae0["write()"]
  364f868b_2802_fe3b_5533_83572757fe40 -->|calls| 3e7e70cd_b9a9_6214_db90_2c2453ec3ae0
  04057a49_40b7_855f_2a43_696c78303b47["read()"]
  364f868b_2802_fe3b_5533_83572757fe40 -->|calls| 04057a49_40b7_855f_2a43_696c78303b47
  style 364f868b_2802_fe3b_5533_83572757fe40 fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

transport/src/test/java/io/netty/channel/local/LocalTransportThreadModelTest3.java lines 127–243

    private static void testConcurrentAddRemove(boolean inbound) throws Exception {
        EventLoopGroup l = new MultiThreadIoEventLoopGroup(
                4, new DefaultThreadFactory("l"), LocalIoHandler.newFactory());
        EventExecutorGroup e1 = new DefaultEventExecutorGroup(4, new DefaultThreadFactory("e1"));
        EventExecutorGroup e2 = new DefaultEventExecutorGroup(4, new DefaultThreadFactory("e2"));
        EventExecutorGroup e3 = new DefaultEventExecutorGroup(4, new DefaultThreadFactory("e3"));
        EventExecutorGroup e4 = new DefaultEventExecutorGroup(4, new DefaultThreadFactory("e4"));
        EventExecutorGroup e5 = new DefaultEventExecutorGroup(4, new DefaultThreadFactory("e5"));

        final EventExecutorGroup[] groups = {e1, e2, e3, e4, e5};
        try {
            Deque<EventType> events = new ConcurrentLinkedDeque<EventType>();
            final EventForwarder h1 = new EventForwarder();
            final EventForwarder h2 = new EventForwarder();
            final EventForwarder h3 = new EventForwarder();
            final EventForwarder h4 = new EventForwarder();
            final EventForwarder h5 = new EventForwarder();
            final EventRecorder h6 = new EventRecorder(events, inbound);

            final Channel ch = new LocalChannel();
            if (!inbound) {
                ch.config().setAutoRead(false);
            }
            ch.pipeline().addLast(e1, h1)
                    .addLast(e1, h2)
                    .addLast(e1, h3)
                    .addLast(e1, h4)
                    .addLast(e1, h5)
                    .addLast(e1, "recorder", h6);

            l.register(ch).sync().channel().connect(localAddr).sync();

            final LinkedList<EventType> expectedEvents = events(inbound, 8192);

            Throwable cause = new Throwable();

            Thread pipelineModifier = new Thread(new Runnable() {
                @Override
                public void run() {
                    Random random = new Random();

                    while (true) {
                        try {
                            Thread.sleep(100);
                        } catch (InterruptedException e) {
                            return;
                        }
                        if (!ch.isRegistered()) {
                            continue;
                        }
                        //EventForwardHandler forwardHandler = forwarders[random.nextInt(forwarders.length)];
                        ChannelHandler handler = ch.pipeline().removeFirst();
                        ch.pipeline().addBefore(groups[random.nextInt(groups.length)], "recorder",
                                UUID.randomUUID().toString(), handler);
                    }
                }
            });
            pipelineModifier.setDaemon(true);
            pipelineModifier.start();
            for (EventType event: expectedEvents) {
                switch (event) {
                    case EXCEPTION_CAUGHT:
                        ch.pipeline().fireExceptionCaught(cause);
                        break;
                    case MESSAGE_RECEIVED:
                        ch.pipeline().fireChannelRead("");
                        break;
                    case MESSAGE_RECEIVED_LAST:
                        ch.pipeline().fireChannelReadComplete();
                        break;
                    case USER_EVENT:
                        ch.pipeline().fireUserEventTriggered("");
                        break;
                    case WRITE:
                        ch.pipeline().write("");
                        break;
                    case READ:
                        ch.pipeline().read();
                        break;
                }
            }

Domain

Subdomains

Frequently Asked Questions

What does testConcurrentAddRemove() do?
testConcurrentAddRemove() is a function in the netty codebase, defined in transport/src/test/java/io/netty/channel/local/LocalTransportThreadModelTest3.java.
Where is testConcurrentAddRemove() defined?
testConcurrentAddRemove() is defined in transport/src/test/java/io/netty/channel/local/LocalTransportThreadModelTest3.java at line 127.
What does testConcurrentAddRemove() call?
testConcurrentAddRemove() calls 4 function(s): EventRecorder, events, read, write.
What calls testConcurrentAddRemove()?
testConcurrentAddRemove() is called by 2 function(s): testConcurrentAddRemoveInboundEvents, testConcurrentAddRemoveOutboundEvents.

Analyze Your Own Codebase

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

Try Supermodel Free