package org.infinispan.client.hotrod.event;
import static org.infinispan.client.hotrod.test.HotRodClientTestingUtil.withClientListener;
import org.infinispan.client.hotrod.event.CustomEventLogListener.CustomEvent;
import org.infinispan.client.hotrod.event.CustomEventLogListener.FilterConverterFactory;
import org.infinispan.client.hotrod.event.CustomEventLogListener.FilterCustomEventLogListener;
import org.infinispan.client.hotrod.test.HotRodClientTestingUtil;
import org.infinispan.client.hotrod.test.SingleHotRodServerTest;
import org.infinispan.notifications.cachelistener.filter.CacheEventConverter;
import org.infinispan.notifications.cachelistener.filter.CacheEventConverterFactory;
import org.infinispan.notifications.cachelistener.filter.CacheEventFilter;
import org.infinispan.notifications.cachelistener.filter.CacheEventFilterFactory;
import org.infinispan.server.hotrod.HotRodServer;
import org.infinispan.server.hotrod.configuration.HotRodServerConfigurationBuilder;
import org.testng.annotations.Test;
@Test(groups = "functional", testName = "client.hotrod.event.ClientCustomFilterEventsTest")
public class ClientCustomFilterEventsTest extends SingleHotRodServerTest {
@Override
protected HotRodServer createHotRodServer() {
HotRodServerConfigurationBuilder builder = new HotRodServerConfigurationBuilder();
HotRodServer server = HotRodClientTestingUtil.startHotRodServer(cacheManager, builder);
server.addCacheEventFilterConverterFactory("filter-converter-factory", new FilterConverterFactory());
return server;
}
@Test(expectedExceptions = IllegalStateException.class)
public void testIncorrectFilterFactory() {
hotrodServer.addCacheEventFilterFactory("xxx", new IncorrectFilterConverterFactory());
}
@Test(expectedExceptions = IllegalStateException.class)
public void testIncorrectConverterFactory() {
hotrodServer.addCacheEventConverterFactory("xxx", new IncorrectFilterConverterFactory());
}
public void testFilterCustomEvents() {
final FilterCustomEventLogListener<Integer> l =
new FilterCustomEventLogListener<>(remoteCacheManager.getCache());
withClientListener(l, new Object[]{1}, null, remote -> {
remote.put(1, "one");
l.expectCreatedEvent(new CustomEvent(1, null, 1));
remote.put(1, "newone");
l.expectModifiedEvent(new CustomEvent(1, null, 2));
remote.put(2, "two");
l.expectCreatedEvent(new CustomEvent(2, "two", 3));
remote.put(2, "dos");
l.expectModifiedEvent(new CustomEvent(2, "dos", 4));
remote.remove(1);
l.expectRemovedEvent(new CustomEvent(1, null, 5));
remote.remove(2);
l.expectRemovedEvent(new CustomEvent(2, null, 6));
});
}
public static class IncorrectFilterConverterFactory implements CacheEventFilterFactory, CacheEventConverterFactory {
@Override
public <K, V> CacheEventFilter<K, V> getFilter(Object[] params) {
return null;
}
@Override
public <K, V, C> CacheEventConverter<K, V, C> getConverter(Object[] params) {
return null;
}
}
}