package org.infinispan.notifications.cachelistener.cluster;
import static org.testng.AssertJUnit.assertEquals;
import org.infinispan.configuration.cache.CacheMode;
import org.infinispan.configuration.cache.ConfigurationBuilder;
import org.infinispan.notifications.Listener;
import org.infinispan.notifications.cachelistener.annotation.CacheEntryCreated;
import org.infinispan.notifications.cachelistener.event.CacheEntryEvent;
import org.infinispan.test.MultipleCacheManagersTest;
import org.testng.annotations.Test;
@Test(groups = "functional", testName = "notifications.cachelistener.cluster.ClusteredListenerJoinsTest")
public class ClusteredListenerJoinsTest extends MultipleCacheManagersTest {
@Listener(clustered = true)
private static final class NoOpListener {
@CacheEntryCreated
public void handleEvent(CacheEntryEvent<Object, Object> e) {
}
}
@Override
protected void createCacheManagers() {
ConfigurationBuilder c = buildConfiguration();
createCluster(c, 3);
waitForClusterToForm();
}
private ConfigurationBuilder buildConfiguration() {
ConfigurationBuilder c = getDefaultClusteredCacheConfig(CacheMode.DIST_SYNC, false); //unreproducible with CacheMode.REPL_SYNC
c.clustering().hash().numOwners(2);
return c;
}
public void testJoins() {
int cache0Size = cache(0).getListeners().size();
int cache1Size = cache(1).getListeners().size();
cache(0).addListener(new NoOpListener());
addClusterEnabledCacheManager(buildConfiguration());
cache(0).addListener(new NoOpListener());
waitForClusterToForm();
// Now we verify the listener was actually added - since this is a DIST cache we also have the local listener
// that sends remote and we added 2 of them
assertEquals(cache0Size + 2, cache(0).getListeners().size());
assertEquals(cache1Size + 2, cache(1).getListeners().size());
}
}