package com.netflix.eventbus.impl; import com.netflix.eventbus.spi.Subscribe; import com.netflix.eventbus.spi.SubscriberConfigProvider; import junit.framework.Assert; import org.junit.Test; import java.util.HashMap; import java.util.Map; import java.util.Set; /** * @author Nitesh Kant */ public class DynamicSubConfigTest { @Test public void testDynamicSub() throws Exception { EventBusImpl eventBus = new EventBusImpl(); eventBus.registerSubscriber(new AwesomeSub()); Set<EventConsumer> stringConsumers = eventBus.getEventConsumer(String.class); Assert.assertFalse("No event subscribers for string event found.", stringConsumers.isEmpty()); SubscriberConfigProvider.SubscriberConfig sub1Config = stringConsumers.iterator().next().getSubscriberConfig(); Assert.assertEquals("Wrong string consumer batching strategy", Subscribe.BatchingStrategy.None, sub1Config.getBatchingStrategy()); Assert.assertEquals("Wrong string consumer batch age", 10, sub1Config.getBatchAge()); Assert.assertEquals("Wrong string consumer batch size", 10, sub1Config.getBatchSize()); Assert.assertEquals("Wrong string consumer queue size", 10, sub1Config.getQueueSize()); Set<EventConsumer> doubleConsumers = eventBus.getEventConsumer(Double.class); Assert.assertFalse("No event subscribers for double event found.", doubleConsumers.isEmpty()); SubscriberConfigProvider.SubscriberConfig sub2Config = doubleConsumers.iterator().next().getSubscriberConfig(); Assert.assertEquals("Wrong string consumer batching strategy", Subscribe.BatchingStrategy.Age, sub2Config.getBatchingStrategy()); Assert.assertEquals("Wrong string consumer batch age", 20, sub2Config.getBatchAge()); Assert.assertEquals("Wrong string consumer batch size", 20, sub2Config.getBatchSize()); Assert.assertEquals("Wrong string consumer queue size", 2000, sub2Config.getQueueSize()); } private static class AwesomeSub implements SubscriberConfigProvider { private static final String SUB1_NAME = "sub1"; private static final String SUB2_NAME = "sub2"; private static Map<String, SubscriberConfig> configs; static { configs = new HashMap<String, SubscriberConfig>(); TestSubscriberConfig sub1Config = new TestSubscriberConfig(Subscribe.BatchingStrategy.None, 10, 10, 10, true); TestSubscriberConfig sub2Config = new TestSubscriberConfig(Subscribe.BatchingStrategy.Age, 20, 20, 2000, false); configs.put(SUB1_NAME, sub1Config); configs.put(SUB2_NAME, sub2Config); } @Override public SubscriberConfig getConfigForName(String subscriberName) { return configs.get(subscriberName); } @Subscribe(name = SUB1_NAME) public void sub1(String s) { } @Subscribe(name = SUB2_NAME) public void sub2(Double s) { } private static class TestSubscriberConfig implements SubscriberConfig { private final Subscribe.BatchingStrategy strategy; private final int age; private final int size; private final int qSize; private final boolean sync; private TestSubscriberConfig(Subscribe.BatchingStrategy strategy, int age, int size, int qSize, boolean sync) { this.strategy = strategy; this.age = age; this.size = size; this.qSize = qSize; this.sync = sync; } @Override public Subscribe.BatchingStrategy getBatchingStrategy() { return strategy; } @Override public int getBatchAge() { return age; } @Override public int getBatchSize() { return size; } @Override public int getQueueSize() { return qSize; } @Override public boolean syncIfAllowed() { return sync; } } } }