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();
}
}));
Source
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