diff --git a/hippo4j-common/src/test/java/cn/hippo4j/common/executor/ExecutorFactoryTest.java b/hippo4j-common/src/test/java/cn/hippo4j/common/executor/ExecutorFactoryTest.java index 8cd8e010..f12668a9 100644 --- a/hippo4j-common/src/test/java/cn/hippo4j/common/executor/ExecutorFactoryTest.java +++ b/hippo4j-common/src/test/java/cn/hippo4j/common/executor/ExecutorFactoryTest.java @@ -17,5 +17,61 @@ package cn.hippo4j.common.executor; +import cn.hippo4j.common.design.builder.ThreadFactoryBuilder; +import cn.hippo4j.common.toolkit.ReflectUtil; +import org.junit.Assert; +import org.junit.Test; + +import java.util.HashMap; +import java.util.Map; +import java.util.Set; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.ThreadFactory; +import java.util.stream.IntStream; + public final class ExecutorFactoryTest { + + ThreadFactory threadFactory = new ThreadFactoryBuilder().prefix("test").build(); + + // 生成数据范围最小值 + Integer rangeMin = 1; + // 生成数据范围最大值 + Integer rangeMax = 10; + // 默认测试索引 + Integer defaultIndex = 0; + + @Test + public void assertNewSingleScheduledExecutorService() { + ScheduledExecutorService executorService = ExecutorFactory.Managed.newSingleScheduledExecutorService(String.format("test-group-%s", defaultIndex), threadFactory); + + Assert.assertNotNull(executorService); + + ThreadPoolManager poolManager = (ThreadPoolManager) ReflectUtil.getFieldValue(ExecutorFactory.Managed.class, "THREAD_POOL_MANAGER"); + String poolName = (String) ReflectUtil.getFieldValue(ExecutorFactory.Managed.class, "DEFAULT_NAMESPACE"); + Map>> manager = (Map>>) ReflectUtil.getFieldValue(poolManager, "resourcesManager"); + + // test default init + Assert.assertEquals(1, manager.size()); + + // test multiple registrations + IntStream.rangeClosed(rangeMin, rangeMax).forEach(index -> ExecutorFactory.Managed.newSingleScheduledExecutorService(String.format("test-group-%s", index), threadFactory)); + Assert.assertEquals(1, manager.size()); + + // test group size + Map> relationMap = manager.get(poolName); + Assert.assertEquals(11, relationMap.size()); + Map> firstRelationMap = new HashMap<>(relationMap); + // test group relation size + firstRelationMap.forEach((k, v) -> Assert.assertEquals(1, v.size())); + + // test multiple cover registrations + IntStream.rangeClosed(defaultIndex, rangeMax).forEach(index -> ExecutorFactory.Managed.newSingleScheduledExecutorService(String.format("test-group-%s", index), threadFactory)); + // test group size + Assert.assertEquals(11, relationMap.size()); + Map> secondRelationMap = manager.get(poolName); + // test group relation size + secondRelationMap.forEach((k, v) -> Assert.assertEquals(2, v.size())); + } + }