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>
pull/1340/head
rnmb 2 years ago
parent f46da2b3d3
commit 628905ad10

@ -24,6 +24,7 @@ import lombok.extern.slf4j.Slf4j;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Optional;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
/** /**
@ -73,12 +74,12 @@ public class AbstractSubjectCenter {
} }
/** /**
* Remove observer. * remove observe
* * @param subjectType subject type code
* @param observer * @param observer observer listener
*/ */
public static void remove(Observer observer) { public static void remove(SubjectType subjectType, Observer observer) {
remove(SubjectType.SPRING_CONTENT_REFRESHED.name(), 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<Observer> observers = OBSERVERS_MAP.get(subjectType.name());
if (CollectionUtil.isEmpty(observers)) {
return 0;
}
return observers.size();
}
/** /**
* Subject type. * Subject type.
*/ */

@ -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<NotifyMessage>{
@Override
public void accept(ObserverMessage<NotifyMessage> observerMessage) {
observerMessage.message().getCount().incrementAndGet();
}
}
}
Loading…
Cancel
Save