package org.infinispan.jcache.util;
import java.net.URI;
import java.util.Iterator;
import java.util.Properties;
import javax.cache.Cache;
import javax.cache.CacheManager;
import javax.cache.Caching;
import javax.cache.configuration.MutableConfiguration;
import javax.cache.spi.CachingProvider;
/**
* Testing utilities for JCache tests.
*
* @author Galder ZamarreƱo
* @author Matej Cimbora
* @since 5.3
*/
public class JCacheTestingUtil {
private JCacheTestingUtil() {
// Do not instantiate
}
/**
* Run a task defined by the {@link Runnable} instance with a {@link CachingProvider} making sure that the caching
* provider is closed after use.
*
* @param r task to execute with caching provider
*/
public static void withCachingProvider(JCacheRunnable r) {
ClassLoader tccl = Thread.currentThread().getContextClassLoader();
CachingProvider p = Caching.getCachingProvider(new TestClassLoader(tccl));
try {
r.run(p);
} finally {
p.close();
}
}
public static class TestClassLoader extends ClassLoader {
public TestClassLoader(ClassLoader parent) {
super(parent);
}
}
public static void sleep(long duration) {
try {
Thread.currentThread().sleep(duration);
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
throw new IllegalStateException(e);
}
}
public static int getEntryCount(Iterator iterator) {
int entryCount = 0;
while (iterator.hasNext()) {
iterator.next();
entryCount++;
}
return entryCount;
}
public static Cache createCacheWithProperties(CachingProvider provider, Class invoker, String cacheName, Properties properties) {
CacheManager manager = provider.getCacheManager(URI.create(invoker.getName()), new TestClassLoader(Thread.currentThread().getContextClassLoader()), properties);
properties.setProperty("infinispan.jcache.remote.managed_access", "false");
return manager.createCache(cacheName, new MutableConfiguration());
}
public static CacheManager createCacheManager(CachingProvider provider, Class invoker, String cacheName, Properties properties) {
properties.setProperty("infinispan.jcache.remote.managed_access", "false");
return provider.getCacheManager(URI.create(invoker.getName()), new TestClassLoader(Thread.currentThread().getContextClassLoader()), properties);
}
}