Home / Class/ AbstractReferenceCountedTest Class — netty Architecture

AbstractReferenceCountedTest Class — netty Architecture

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

Entity Profile

Dependency Diagram

graph TD
  7917189b_1868_6962_74c7_fde430107486["AbstractReferenceCountedTest"]
  549b063f_5145_9af6_42e4_7cd13fa7b2c2["AbstractReferenceCountedTest.java"]
  7917189b_1868_6962_74c7_fde430107486 -->|defined in| 549b063f_5145_9af6_42e4_7cd13fa7b2c2
  88637f1e_a4c8_2389_a809_4d15671c72d6["testRetainOverflow()"]
  7917189b_1868_6962_74c7_fde430107486 -->|method| 88637f1e_a4c8_2389_a809_4d15671c72d6
  92079b4c_8d34_89a4_77d0_a782007df883["testRetainOverflow2()"]
  7917189b_1868_6962_74c7_fde430107486 -->|method| 92079b4c_8d34_89a4_77d0_a782007df883
  5606aaaa_1323_bc99_7119_48d86e7667f6["testReleaseOverflow()"]
  7917189b_1868_6962_74c7_fde430107486 -->|method| 5606aaaa_1323_bc99_7119_48d86e7667f6
  1470f78c_6756_fc6b_e4a3_5a59bd12b817["testReleaseErrorMessage()"]
  7917189b_1868_6962_74c7_fde430107486 -->|method| 1470f78c_6756_fc6b_e4a3_5a59bd12b817
  9adecbc5_0aaa_8d98_82cd_16c24c2a129e["testRetainResurrect()"]
  7917189b_1868_6962_74c7_fde430107486 -->|method| 9adecbc5_0aaa_8d98_82cd_16c24c2a129e
  6bdcd1e1_de0c_8d43_7e0b_73ba8f46c251["testRetainResurrect2()"]
  7917189b_1868_6962_74c7_fde430107486 -->|method| 6bdcd1e1_de0c_8d43_7e0b_73ba8f46c251
  ccf868c0_a2c7_fe55_6ab0_d9c5dbe5bd8a["testRetainFromMultipleThreadsThrowsReferenceCountException()"]
  7917189b_1868_6962_74c7_fde430107486 -->|method| ccf868c0_a2c7_fe55_6ab0_d9c5dbe5bd8a
  6ea28285_e958_4567_095a_35d4cecbfe12["testReleaseFromMultipleThreadsThrowsReferenceCountException()"]
  7917189b_1868_6962_74c7_fde430107486 -->|method| 6ea28285_e958_4567_095a_35d4cecbfe12
  94308c31_3f8a_40f9_cc6a_a273d2d62b07["AbstractReferenceCounted()"]
  7917189b_1868_6962_74c7_fde430107486 -->|method| 94308c31_3f8a_40f9_cc6a_a273d2d62b07

Relationship Graph

Source Code

common/src/test/java/io/netty/util/AbstractReferenceCountedTest.java lines 36–199

public class AbstractReferenceCountedTest {

    @Test
    public void testRetainOverflow() {
        final AbstractReferenceCounted referenceCounted = newReferenceCounted();
        referenceCounted.setRefCnt(Integer.MAX_VALUE);
        assertEquals(Integer.MAX_VALUE, referenceCounted.refCnt());
        assertThrows(IllegalReferenceCountException.class, () -> referenceCounted.retain());
    }

    @Test
    public void testRetainOverflow2() {
        final AbstractReferenceCounted referenceCounted = newReferenceCounted();
        assertEquals(1, referenceCounted.refCnt());
        assertThrows(IllegalReferenceCountException.class, () -> referenceCounted.retain(Integer.MAX_VALUE));
    }

    @Test
    public void testReleaseOverflow() {
        final AbstractReferenceCounted referenceCounted = newReferenceCounted();
        referenceCounted.setRefCnt(0);
        assertEquals(0, referenceCounted.refCnt());
        assertThrows(IllegalReferenceCountException.class, () -> referenceCounted.release(Integer.MAX_VALUE));
    }

    @Test
    public void testReleaseErrorMessage() {
        AbstractReferenceCounted referenceCounted = newReferenceCounted();
        assertTrue(referenceCounted.release());
        try {
            referenceCounted.release(1);
            fail("IllegalReferenceCountException didn't occur");
        } catch (IllegalReferenceCountException e) {
            assertEquals("refCnt: 0, decrement: 1", e.getMessage());
        }
    }

    @Test
    public void testRetainResurrect() {
        final AbstractReferenceCounted referenceCounted = newReferenceCounted();
        assertTrue(referenceCounted.release());
        assertEquals(0, referenceCounted.refCnt());
        assertThrows(IllegalReferenceCountException.class, referenceCounted::retain);
    }

    @Test
    public void testRetainResurrect2() {
        final AbstractReferenceCounted referenceCounted = newReferenceCounted();
        assertTrue(referenceCounted.release());
        assertEquals(0, referenceCounted.refCnt());
        assertThrows(IllegalReferenceCountException.class, () -> referenceCounted.retain(2));
    }

    @Test
    @Timeout(value = 30000, unit = TimeUnit.MILLISECONDS)
    public void testRetainFromMultipleThreadsThrowsReferenceCountException() throws Exception {
        int threads = 4;
        Queue<Future<?>> futures = new ArrayDeque<>(threads);
        ExecutorService service = Executors.newFixedThreadPool(threads);
        final AtomicInteger refCountExceptions = new AtomicInteger();

        try {
            for (int i = 0; i < 10000; i++) {
                final AbstractReferenceCounted referenceCounted = newReferenceCounted();
                final CountDownLatch retainLatch = new CountDownLatch(1);
                assertTrue(referenceCounted.release());

                for (int a = 0; a < threads; a++) {
                    final int retainCnt = ThreadLocalRandom.current().nextInt(1, Integer.MAX_VALUE);
                    futures.add(service.submit(() -> {
                        try {
                            retainLatch.await();
                            try {
                                referenceCounted.retain(retainCnt);
                            } catch (IllegalReferenceCountException e) {
                                refCountExceptions.incrementAndGet();
                            }
                        } catch (InterruptedException e) {
                            Thread.currentThread().interrupt();
                        }
                    }));

Frequently Asked Questions

What is the AbstractReferenceCountedTest class?
AbstractReferenceCountedTest is a class in the netty codebase, defined in common/src/test/java/io/netty/util/AbstractReferenceCountedTest.java.
Where is AbstractReferenceCountedTest defined?
AbstractReferenceCountedTest is defined in common/src/test/java/io/netty/util/AbstractReferenceCountedTest.java at line 36.

Analyze Your Own Codebase

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

Try Supermodel Free