package org.infinispan.interceptors; import static org.infinispan.test.TestingUtil.withCacheManager; import static org.testng.AssertJUnit.assertEquals; import static org.testng.AssertJUnit.assertFalse; import static org.testng.AssertJUnit.assertTrue; import java.util.List; import org.infinispan.Cache; import org.infinispan.commons.CacheConfigurationException; import org.infinispan.configuration.cache.ConfigurationBuilder; import org.infinispan.configuration.cache.InterceptorConfiguration.Position; import org.infinispan.manager.EmbeddedCacheManager; import org.infinispan.test.AbstractInfinispanTest; import org.infinispan.test.CacheManagerCallable; import org.infinispan.test.fwk.TestCacheManagerFactory; import org.testng.annotations.Test; @Test(groups = "functional", testName = "interceptors.CustomInterceptorTest") public class CustomInterceptorTest extends AbstractInfinispanTest { public void testCustomInterceptorProperties() { ConfigurationBuilder builder = new ConfigurationBuilder(); builder.customInterceptors().addInterceptor().interceptor(new FooInterceptor()).position(Position.FIRST).addProperty("foo", "bar"); withCacheManager(new CacheManagerCallable( TestCacheManagerFactory.createCacheManager(builder)) { @Override public void call() { final Cache<Object,Object> cache = cm.getCache(); AsyncInterceptor i = cache.getAdvancedCache().getAsyncInterceptorChain().getInterceptors().get(0); assertTrue("Expecting FooInterceptor in the interceptor chain", i instanceof FooInterceptor); assertEquals("bar", ((FooInterceptor)i).getFoo()); } }); } @Test(expectedExceptions=CacheConfigurationException.class) public void testMissingPosition() { ConfigurationBuilder builder = new ConfigurationBuilder(); builder.customInterceptors().addInterceptor().interceptor(new FooInterceptor()); TestCacheManagerFactory.createCacheManager(builder); } public void testLastInterceptor() { ConfigurationBuilder builder = new ConfigurationBuilder(); builder.customInterceptors().addInterceptor().position(Position.LAST).interceptor(new FooInterceptor()); final EmbeddedCacheManager cacheManager = TestCacheManagerFactory.createCacheManager(); cacheManager.defineConfiguration("interceptors", builder.build()); withCacheManager(new CacheManagerCallable(cacheManager) { @Override public void call() { List<AsyncInterceptor> interceptors = cacheManager.getCache("interceptors").getAdvancedCache().getAsyncInterceptorChain() .getInterceptors(); assertEquals(FooInterceptor.class, interceptors.get(interceptors.size() - 2).getClass()); } }); } public void testOtherThanFirstOrLastInterceptor() { ConfigurationBuilder builder = new ConfigurationBuilder(); builder.customInterceptors().addInterceptor().position(Position.OTHER_THAN_FIRST_OR_LAST).interceptor(new FooInterceptor()); final EmbeddedCacheManager cacheManager = TestCacheManagerFactory.createCacheManager(); cacheManager.defineConfiguration("interceptors", builder.build()); withCacheManager(new CacheManagerCallable(cacheManager) { @Override public void call() { AsyncInterceptorChain interceptorChain = cacheManager.getCache("interceptors").getAdvancedCache().getAsyncInterceptorChain(); assertEquals(interceptorChain.getInterceptors().get(1).getClass(), FooInterceptor.class); } }); } public void testLastInterceptorDefaultCache() { ConfigurationBuilder builder = new ConfigurationBuilder(); final FooInterceptor interceptor = new FooInterceptor(); builder.customInterceptors().addInterceptor().position(Position.LAST).interceptor(interceptor); final EmbeddedCacheManager cacheManager = TestCacheManagerFactory.createCacheManager(builder); withCacheManager(new CacheManagerCallable(cacheManager) { @Override public void call() { List<AsyncInterceptor> interceptors = cacheManager.getCache().getAdvancedCache().getAsyncInterceptorChain() .getInterceptors(); Object o = interceptors.get(interceptors.size() - 2); assertEquals(FooInterceptor.class, o.getClass()); assertFalse(interceptor.putInvoked); cacheManager.getCache().put("k", "v"); assertEquals("v", cacheManager.getCache().get("k")); assertTrue(interceptor.putInvoked); } }); } }