package org.infinispan.notifications.cachelistener.cluster; import static org.testng.AssertJUnit.assertEquals; import java.util.ArrayList; import java.util.List; import org.infinispan.Cache; import org.infinispan.configuration.cache.CacheMode; import org.infinispan.configuration.cache.ConfigurationBuilder; import org.infinispan.distribution.MagicKey; import org.infinispan.notifications.Listener; import org.infinispan.notifications.cachelistener.annotation.CacheEntryCreated; import org.infinispan.notifications.cachelistener.event.CacheEntryCreatedEvent; import org.infinispan.test.MultipleCacheManagersTest; import org.testng.annotations.Test; /** * @author anistor@redhat.com * @since 7.2 */ @Test(groups = "functional", testName = "notifications.cachelistener.cluster.ClusterListenerFilterWithDependenciesTest") public class ClusterListenerFilterWithDependenciesTest extends MultipleCacheManagersTest { private final int NUM_NODES = 2; private final int NUM_ENTRIES = 10; @Override protected void createCacheManagers() throws Throwable { ConfigurationBuilder cfgBuilder = getDefaultClusteredCacheConfig(CacheMode.DIST_SYNC, false); createClusteredCaches(NUM_NODES, cfgBuilder); } public void testEventFilterCurrentState() { for (int i = 0; i < NUM_ENTRIES; ++i) { Cache<Object, String> cache = cache(i % NUM_NODES); Object key = new MagicKey(cache); cache.put(key, "string " + i); } assertEquals(NUM_ENTRIES, cache(0).size()); EntryListener listener = new EntryListener(); NoOpCacheEventFilterConverterWithDependencies filterConverter = new NoOpCacheEventFilterConverterWithDependencies(); cache(0).addListener(listener, filterConverter, filterConverter); assertEquals(NUM_ENTRIES, listener.createEvents.size()); cache(0).removeListener(listener); } public void testEventFilter() { EntryListener listener = new EntryListener(); NoOpCacheEventFilterConverterWithDependencies filterConverter = new NoOpCacheEventFilterConverterWithDependencies(); cache(0).addListener(listener, filterConverter, filterConverter); for (int i = 0; i < NUM_ENTRIES; ++i) { Cache<Object, String> cache = cache(i % NUM_NODES); Object key = new MagicKey(cache); cache.put(key, "string " + i); } assertEquals(NUM_ENTRIES, cache(0).size()); assertEquals(NUM_ENTRIES, listener.createEvents.size()); cache(0).removeListener(listener); } @Listener(clustered = true, includeCurrentState = true) public static class EntryListener { public final List<CacheEntryCreatedEvent> createEvents = new ArrayList<CacheEntryCreatedEvent>(); @CacheEntryCreated public void handleEvent(CacheEntryCreatedEvent event) { if (!event.isPre()) { createEvents.add(event); } } } }