diff --git a/infra/common/src/main/java/cn/hippo4j/common/extension/design/AbstractSubjectCenter.java b/infra/common/src/main/java/cn/hippo4j/common/extension/design/AbstractSubjectCenter.java index 152d03ca..be8d4242 100644 --- a/infra/common/src/main/java/cn/hippo4j/common/extension/design/AbstractSubjectCenter.java +++ b/infra/common/src/main/java/cn/hippo4j/common/extension/design/AbstractSubjectCenter.java @@ -24,7 +24,6 @@ import lombok.extern.slf4j.Slf4j; import java.util.ArrayList; import java.util.List; import java.util.Map; -import java.util.Optional; import java.util.concurrent.ConcurrentHashMap; /** @@ -74,12 +73,12 @@ public class AbstractSubjectCenter { } /** - * remove observe - * @param subjectType subject type code - * @param observer observer listener + * Remove observer. + * + * @param observer */ - public static void remove(SubjectType subjectType, Observer observer) { - remove(subjectType.name(), observer); + public static void remove(Observer observer) { + remove(SubjectType.SPRING_CONTENT_REFRESHED.name(), observer); } /** @@ -128,19 +127,6 @@ public class AbstractSubjectCenter { }); } - /** - * subject observer size - * @param subjectType subject type code - * @return list observer size - */ - public static int size(SubjectType subjectType) { - List observers = OBSERVERS_MAP.get(subjectType.name()); - if (CollectionUtil.isEmpty(observers)) { - return 0; - } - return observers.size(); - } - /** * Subject type. */ diff --git a/infra/common/src/test/java/cn/hippo4j/common/extension/design/AbstractSubjectCenterTest.java b/infra/common/src/test/java/cn/hippo4j/common/extension/design/AbstractSubjectCenterTest.java index a45fc9d5..44c31294 100644 --- a/infra/common/src/test/java/cn/hippo4j/common/extension/design/AbstractSubjectCenterTest.java +++ b/infra/common/src/test/java/cn/hippo4j/common/extension/design/AbstractSubjectCenterTest.java @@ -2,33 +2,132 @@ package cn.hippo4j.common.extension.design; import lombok.Getter; import org.junit.Assert; +import org.junit.Before; import org.junit.Test; +import java.lang.reflect.Field; +import java.util.List; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.atomic.AtomicInteger; public class AbstractSubjectCenterTest { + + private Map> OBSERVERS_MAP ; + + private SubjectNotifyListener subjectNotifyListener; + + @Before + public void setUp() throws NoSuchFieldException, IllegalAccessException { + subjectNotifyListener = new SubjectNotifyListener(); + + Field field = AbstractSubjectCenter.class.getDeclaredField("OBSERVERS_MAP"); + field.setAccessible(true); + OBSERVERS_MAP = (Map>) field.get(AbstractSubjectCenter.class); + } + + /** + * test register listener + */ + @Test + public void testDefaultRegister() { + AbstractSubjectCenter.register(subjectNotifyListener); + List list = OBSERVERS_MAP.get(AbstractSubjectCenter.SubjectType.SPRING_CONTENT_REFRESHED.name()); + Assert.assertNotNull(list); + Assert.assertEquals(1, list.size()); + Assert.assertSame(subjectNotifyListener, list.get(0)); + OBSERVERS_MAP.clear(); + } + /** - * test Subject center + * test register listener */ @Test - public void testSubjectCenter() { - AbstractSubjectCenter.SubjectType subjectType = AbstractSubjectCenter.SubjectType.THREAD_POOL_DYNAMIC_REFRESH; - SubjectNotifyListener subjectNotifyListener = new SubjectNotifyListener(); + public void testSubjectTypeEnumRegister() { + AbstractSubjectCenter.register(AbstractSubjectCenter.SubjectType.THREAD_POOL_DYNAMIC_REFRESH, subjectNotifyListener); + List list = OBSERVERS_MAP.get(AbstractSubjectCenter.SubjectType.THREAD_POOL_DYNAMIC_REFRESH.name()); + Assert.assertNotNull(list); + Assert.assertEquals(1, list.size()); + Assert.assertSame(subjectNotifyListener, list.get(0)); + OBSERVERS_MAP.clear(); + } + + /** + * test register listener + */ + @Test + public void testSubjectTypeNameRegister() { + AbstractSubjectCenter.register(AbstractSubjectCenter.SubjectType.THREAD_POOL_DYNAMIC_REFRESH.name(), subjectNotifyListener); + List list = OBSERVERS_MAP.get(AbstractSubjectCenter.SubjectType.THREAD_POOL_DYNAMIC_REFRESH.name()); + Assert.assertNotNull(list); + Assert.assertEquals(1, list.size()); + Assert.assertSame(subjectNotifyListener, list.get(0)); + OBSERVERS_MAP.clear(); + } + + /** + * test remove listener + */ + @Test + public void testDefaultRemoveListener() { + AbstractSubjectCenter.register(subjectNotifyListener); + List list = OBSERVERS_MAP.get(AbstractSubjectCenter.SubjectType.SPRING_CONTENT_REFRESHED.name()); + Assert.assertNotNull(list); + Assert.assertEquals(1, list.size()); + Assert.assertSame(subjectNotifyListener, list.get(0)); + + AbstractSubjectCenter.remove(subjectNotifyListener); + Assert.assertEquals(0, list.size()); + } + + /** + * test remove listener + */ + @Test + public void testRemoveSubjectTypeNameListener() { + AbstractSubjectCenter.register(AbstractSubjectCenter.SubjectType.THREAD_POOL_DYNAMIC_REFRESH, subjectNotifyListener); + List list = OBSERVERS_MAP.get(AbstractSubjectCenter.SubjectType.THREAD_POOL_DYNAMIC_REFRESH.name()); + Assert.assertNotNull(list); + Assert.assertEquals(1, list.size()); + Assert.assertSame(subjectNotifyListener, list.get(0)); + + AbstractSubjectCenter.remove(AbstractSubjectCenter.SubjectType.THREAD_POOL_DYNAMIC_REFRESH.name(), subjectNotifyListener); + Assert.assertEquals(0, list.size()); + } + + /** + * test notify + */ + @Test + public void testNotifyBySubjectType() { + AbstractSubjectCenter.register(subjectNotifyListener); + List list = OBSERVERS_MAP.get(AbstractSubjectCenter.SubjectType.SPRING_CONTENT_REFRESHED.name()); + Assert.assertNotNull(list); + NotifyMessage notifyMessage = new NotifyMessage(); Assert.assertEquals(0, notifyMessage.getCount().get()); + AbstractSubjectCenter.notify(AbstractSubjectCenter.SubjectType.SPRING_CONTENT_REFRESHED, () -> notifyMessage); + Assert.assertEquals(1, notifyMessage.getCount().get()); + OBSERVERS_MAP.clear(); + } - AbstractSubjectCenter.register(subjectType, subjectNotifyListener); - Assert.assertEquals(1, AbstractSubjectCenter.size(subjectType)); + /** + * test notify + */ + @Test + public void testNotifyBySubjectTypeName() { + AbstractSubjectCenter.register(subjectNotifyListener); + List list = OBSERVERS_MAP.get(AbstractSubjectCenter.SubjectType.SPRING_CONTENT_REFRESHED.name()); + Assert.assertNotNull(list); - AbstractSubjectCenter.notify(subjectType, () -> notifyMessage); + NotifyMessage notifyMessage = new NotifyMessage(); + Assert.assertEquals(0, notifyMessage.getCount().get()); + AbstractSubjectCenter.notify(AbstractSubjectCenter.SubjectType.SPRING_CONTENT_REFRESHED.name(), () -> notifyMessage); Assert.assertEquals(1, notifyMessage.getCount().get()); - - AbstractSubjectCenter.remove(subjectType.name(), subjectNotifyListener); - Assert.assertEquals(0, AbstractSubjectCenter.size(subjectType)); + OBSERVERS_MAP.clear(); } - @Getter private static final class NotifyMessage { private final AtomicInteger count = new AtomicInteger(0);