From 628905ad10cf466e54300bb7dc842a3c7b6cace1 Mon Sep 17 00:00:00 2001 From: rnmb <19276209+rnmb@users.noreply.github.com> Date: Thu, 25 May 2023 18:06:58 +0800 Subject: [PATCH] feat(infra): add AbstractSubjectCenter test class #1338 1. add SubjectCenter test class 2. add remove observer method 3. add get size for Observers method Co-authored-by: rnmb<19276209+rnmb@users.noreply.github.com> --- .../design/AbstractSubjectCenter.java | 24 ++++++++-- .../design/AbstractSubjectCenterTest.java | 47 +++++++++++++++++++ 2 files changed, 66 insertions(+), 5 deletions(-) create mode 100644 infra/common/src/test/java/cn/hippo4j/common/extension/design/AbstractSubjectCenterTest.java 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 be8d4242..152d03ca 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,6 +24,7 @@ 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; /** @@ -73,12 +74,12 @@ public class AbstractSubjectCenter { } /** - * Remove observer. - * - * @param observer + * remove observe + * @param subjectType subject type code + * @param observer observer listener */ - public static void remove(Observer observer) { - remove(SubjectType.SPRING_CONTENT_REFRESHED.name(), observer); + public static void remove(SubjectType subjectType, Observer observer) { + remove(subjectType.name(), observer); } /** @@ -127,6 +128,19 @@ 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 new file mode 100644 index 00000000..a45fc9d5 --- /dev/null +++ b/infra/common/src/test/java/cn/hippo4j/common/extension/design/AbstractSubjectCenterTest.java @@ -0,0 +1,47 @@ +package cn.hippo4j.common.extension.design; + +import lombok.Getter; +import org.junit.Assert; +import org.junit.Test; + +import java.util.concurrent.atomic.AtomicInteger; + +public class AbstractSubjectCenterTest { + + /** + * test Subject center + */ + @Test + public void testSubjectCenter() { + AbstractSubjectCenter.SubjectType subjectType = AbstractSubjectCenter.SubjectType.THREAD_POOL_DYNAMIC_REFRESH; + SubjectNotifyListener subjectNotifyListener = new SubjectNotifyListener(); + NotifyMessage notifyMessage = new NotifyMessage(); + Assert.assertEquals(0, notifyMessage.getCount().get()); + + AbstractSubjectCenter.register(subjectType, subjectNotifyListener); + Assert.assertEquals(1, AbstractSubjectCenter.size(subjectType)); + + AbstractSubjectCenter.notify(subjectType, () -> notifyMessage); + Assert.assertEquals(1, notifyMessage.getCount().get()); + + AbstractSubjectCenter.remove(subjectType.name(), subjectNotifyListener); + Assert.assertEquals(0, AbstractSubjectCenter.size(subjectType)); + } + + + @Getter + private static final class NotifyMessage { + private final AtomicInteger count = new AtomicInteger(0); + } + + /** + * Subject Response Listener + */ + private static final class SubjectNotifyListener implements Observer{ + + @Override + public void accept(ObserverMessage observerMessage) { + observerMessage.message().getCount().incrementAndGet(); + } + } +}