package org.infinispan.jcache;
import static org.infinispan.jcache.util.JCacheTestingUtil.withCachingProvider;
import static org.testng.AssertJUnit.assertEquals;
import static org.testng.AssertJUnit.assertFalse;
import static org.testng.AssertJUnit.assertNull;
import static org.testng.AssertJUnit.assertTrue;
import java.lang.reflect.Method;
import javax.cache.Cache;
import javax.cache.CacheManager;
import javax.cache.configuration.Factory;
import javax.cache.configuration.MutableConfiguration;
import javax.cache.expiry.Duration;
import javax.cache.expiry.ExpiryPolicy;
import javax.cache.spi.CachingProvider;
import org.infinispan.jcache.util.JCacheRunnable;
import org.testng.annotations.Test;
/**
* JCache expiry tests not covered by the TCK.
*
* @author Galder ZamarreƱo
* @since 5.3
*/
@Test(groups = "functional", testName = "jcache.JCacheExpiryTest")
public class JCacheExpiryTest {
public void testGetAndReplace(Method m) {
final MutableConfiguration<Integer, String>
cfg = new MutableConfiguration<Integer, String>();
cfg.setExpiryPolicyFactory(new Factory<ExpiryPolicy>() {
@Override
public ExpiryPolicy create() {
return new ExpiryPolicy() {
@Override
public Duration getExpiryForCreation() {
return Duration.ETERNAL;
}
@Override
public Duration getExpiryForAccess() {
return null;
}
@Override
public Duration getExpiryForUpdate() {
return Duration.ZERO;
}
};
}
});
final String name = getName(m);
withCachingProvider(new JCacheRunnable() {
@Override
public void run(CachingProvider provider) {
CacheManager cm = provider.getCacheManager();
Cache<Integer, String> cache = cm.createCache(name, cfg);
cache.put(1, "v1");
assertTrue(cache.containsKey(1));
assertEquals("v1", cache.get(1));
cache.getAndReplace(1, "v2");
assertFalse(cache.containsKey(1));
assertNull(cache.get(1));
}
});
}
private String getName(Method m) {
return getClass().getName() + '.' + m.getName();
}
}