package org.littlewings.hazelcast.jcache;
import static org.assertj.core.api.Assertions.*;
import java.net.URI;
import java.util.Properties;
import java.util.concurrent.TimeUnit;
import java.util.stream.IntStream;
import javax.cache.Cache;
import javax.cache.CacheManager;
import javax.cache.Caching;
import javax.cache.spi.CachingProvider;
import com.hazelcast.cache.HazelcastCachingProvider;
import org.junit.Test;
public class JCacheConfigurationTest {
@Test
public void testSimpleJCache() {
Properties properties = new Properties();
properties.setProperty(HazelcastCachingProvider.HAZELCAST_CONFIG_LOCATION,
"classpath:my-hazelcast.xml");
CachingProvider provider = Caching.getCachingProvider();
CacheManager manager = provider.getCacheManager(URI.create("my-cache-manager"),
null,
properties);
Cache<String, String> cache = manager.getCache("simple-cache",
String.class,
String.class);
IntStream.rangeClosed(1, 5).forEach(i -> cache.put("key" + i, "value" + i));
assertThat(cache.get("key1"))
.isEqualTo("value1");
assertThat(cache.get("key5"))
.isEqualTo("value5");
assertThat(cache.get("key10"))
.isNull();
cache.close();
manager.close();
provider.close();
}
@Test
public void testEviction() {
Properties properties =
HazelcastCachingProvider.propertiesByLocation("classpath:my-hazelcast.xml");
CachingProvider provider = Caching.getCachingProvider();
CacheManager manager = provider.getCacheManager(URI.create("my-cache-manager"),
null,
properties);
Cache<String, String> cache = manager.getCache("with-eviction-cache",
String.class,
String.class);
com.hazelcast.cache.ICache<String, String> icache =
cache.unwrap(com.hazelcast.cache.ICache.class);
com.hazelcast.config.CacheConfig config =
icache.getConfiguration(com.hazelcast.config.CacheConfig.class);
assertThat(config.getEvictionConfig().getSize())
.isEqualTo(5); // right
IntStream.rangeClosed(1, 30).forEach(i -> cache.put("key" + i, "value" + i));
int count = 0;
for (Cache.Entry<String, String> entry : cache) {
count++;
}
assertThat(count)
.isGreaterThan(25); // much larger than ENTRY_COUNT??
cache.close();
manager.close();
provider.close();
}
@Test
public void testExpire() throws InterruptedException {
Properties properties =
HazelcastCachingProvider.propertiesByLocation("classpath:my-hazelcast.xml");
CachingProvider provider = Caching.getCachingProvider();
CacheManager manager = provider.getCacheManager(URI.create("my-cache-manager"),
null,
properties);
Cache<String, String> cache = manager.getCache("with-expire-cache",
String.class,
String.class);
IntStream.rangeClosed(1, 5).forEach(i -> cache.put("key" + i, "value" + i));
TimeUnit.SECONDS.sleep(3);
cache.get("key1");
cache.get("key3");
TimeUnit.SECONDS.sleep(3);
assertThat(cache.get("key1"))
.isEqualTo("value1");
assertThat(cache.get("key3"))
.isEqualTo("value3");
assertThat(cache.get("key2"))
.isNull();
assertThat(cache.get("key4"))
.isNull();
TimeUnit.SECONDS.sleep(6);
assertThat(cache.get("key1"))
.isNull();
assertThat(cache.get("key3"))
.isNull();
cache.close();
manager.close();
provider.close();
}
@Test
public void testEvictionWithExpire() throws InterruptedException {
Properties properties =
HazelcastCachingProvider.propertiesByLocation("classpath:my-hazelcast.xml");
CachingProvider provider = Caching.getCachingProvider();
CacheManager manager = provider.getCacheManager(URI.create("my-cache-manager"),
null,
properties);
Cache<String, String> cache = manager.getCache("with-expire-cache",
String.class,
String.class);
IntStream.rangeClosed(1, 30).forEach(i -> cache.put("key" + i, "value" + i));
TimeUnit.SECONDS.sleep(3);
cache.get("key1");
cache.get("key3");
cache.get("key5");
cache.get("key10");
cache.get("key13");
cache.get("key15");
cache.get("key20");
cache.get("key25");
TimeUnit.SECONDS.sleep(3);
int count = 0;
for (Cache.Entry<String, String> entry : cache) {
count++;
}
assertThat(count)
.isLessThanOrEqualTo(8);
cache.close();
manager.close();
provider.close();
}
}