package org.infinispan.notifications.cachelistener;
import static org.mockito.ArgumentMatchers.notNull;
import static org.mockito.Mockito.any;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import static org.testng.AssertJUnit.assertEquals;
import org.infinispan.manager.EmbeddedCacheManager;
import org.infinispan.notifications.cachelistener.filter.CacheEventFilterConverter;
import org.infinispan.notifications.cachelistener.filter.EventType;
import org.infinispan.test.SingleCacheManagerTest;
import org.infinispan.test.fwk.TestCacheManagerFactory;
import org.testng.annotations.Test;
/**
* Test class that verifies the optimization for using a CacheEventFilterConverter works properly.
*
* @author wburns
* @since 7.0
*/
@Test(groups = "functional", testName = "notifications.cachelistener.CacheEventFilterConverterTest")
public class CacheEventFilterConverterTest extends SingleCacheManagerTest {
@Override
protected EmbeddedCacheManager createCacheManager() throws Exception {
return TestCacheManagerFactory.createCacheManager(true);
}
public void testFilterConvertedCalledOnlyOnce() {
Object value = new Object();
CacheEventFilterConverter<Object, Object, Object> filterConverter = mock(CacheEventFilterConverter.class);
when(filterConverter.filterAndConvert(notNull(), any(), any(),
any(), any(),
any(EventType.class))).thenReturn(value);
CacheListener listener = new CacheListener();
cache.addListener(listener, filterConverter, filterConverter);
cache.put("key", "value");
assertEquals(2, listener.getInvocationCount());
verify(filterConverter, times(2)).filterAndConvert(any(), any(), any(),
any(), any(),
any());
verify(filterConverter, never()).accept(any(), any(), any(),
any(), any(),
any());
verify(filterConverter, never()).convert(any(), any(), any(),
any(), any(),
any());
}
}