package org.infinispan.jcache; import static org.infinispan.jcache.JCacheCustomKeyGenerator.CustomGeneratedCacheKey; import static org.infinispan.jcache.util.JCacheTestingUtil.getEntryCount; import static org.testng.Assert.assertEquals; import static org.testng.Assert.assertFalse; import static org.testng.Assert.assertTrue; import java.lang.reflect.Method; import javax.cache.Cache; import org.infinispan.test.fwk.TestResourceTrackingListener; import org.jboss.arquillian.testng.Arquillian; import org.testng.annotations.Listeners; import org.testng.annotations.Test; /** * Base class for clustered JCache annotations tests. Implementations must provide cache & {@link * org.infinispan.jcache.JCacheAnnotatedClass} references. * * @author Matej Cimbora */ //TODO Test exception handling once implemented (e.g. cacheFor, evictFor, etc.) @Listeners(TestResourceTrackingListener.class) @Test(testName = "org.infinispan.jcache.AbstractTwoCachesAnnotationsTest", groups = "functional") public abstract class AbstractTwoCachesAnnotationsTest extends Arquillian { @Test public void testPut(Method m) { Cache cache1 = getCache1(m); Cache cache2 = getCache2(m); getJCacheAnnotatedClass().put("val"); assertEquals(getEntryCount(cache1.iterator()), 1); assertEquals(getEntryCount(cache2.iterator()), 1); assertTrue(cache1.containsKey(new CustomGeneratedCacheKey("val"))); assertTrue(cache2.containsKey(new CustomGeneratedCacheKey("val"))); } @Test public void testResult(Method m) { Cache cache1 = getCache1(m); Cache cache2 = getCache2(m); assertEquals(getJCacheAnnotatedClass().getResultInvocationCount(), 0); getJCacheAnnotatedClass().result("val"); assertEquals(getJCacheAnnotatedClass().getResultInvocationCount(), 1); getJCacheAnnotatedClass().result("val"); assertEquals(getJCacheAnnotatedClass().getResultInvocationCount(), 1); assertEquals(getEntryCount(cache1.iterator()), 1); assertEquals(getEntryCount(cache2.iterator()), 1); assertTrue(cache1.containsKey(new CustomGeneratedCacheKey("val"))); assertTrue(cache2.containsKey(new CustomGeneratedCacheKey("val"))); } @Test public void testRemove(Method m) { Cache cache1 = getCache1(m); Cache cache2 = getCache2(m); cache1.put("key1", "val1"); assertTrue(cache1.containsKey("key1")); assertTrue(cache2.containsKey("key1")); getJCacheAnnotatedClass().remove("key1"); assertFalse(cache1.containsKey(new CustomGeneratedCacheKey("key1"))); assertFalse(cache2.containsKey(new CustomGeneratedCacheKey("key1"))); } @Test public void testRemoveAll(Method m) { Cache cache1 = getCache1(m); Cache cache2 = getCache2(m); cache1.put("key1", "val1"); cache1.put("key2", "val2"); assertTrue(cache1.containsKey("key1")); assertTrue(cache2.containsKey("key1")); assertTrue(cache1.containsKey("key2")); assertTrue(cache2.containsKey("key2")); getJCacheAnnotatedClass().removeAll(); assertFalse(cache1.containsKey(new CustomGeneratedCacheKey("key1"))); assertFalse(cache1.containsKey(new CustomGeneratedCacheKey("key2"))); assertFalse(cache2.containsKey(new CustomGeneratedCacheKey("key1"))); assertFalse(cache2.containsKey(new CustomGeneratedCacheKey("key2"))); } public abstract JCacheAnnotatedClass getJCacheAnnotatedClass(); public abstract Cache getCache1(Method m); public abstract Cache getCache2(Method m); }