package org.littlewings.hazelcast.jcache;
import static org.assertj.core.api.Assertions.*;
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 org.junit.Test;
public class JCacheConfigurationTest {
@Test
public void testSimpleJCache() {
CachingProvider provider = Caching.getCachingProvider();
CacheManager manager = provider.getCacheManager();
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() {
CachingProvider provider = Caching.getCachingProvider();
CacheManager manager = provider.getCacheManager();
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 {
CachingProvider provider = Caching.getCachingProvider();
CacheManager manager = provider.getCacheManager();
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 {
CachingProvider provider = Caching.getCachingProvider();
CacheManager manager = provider.getCacheManager();
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();
}
}