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(); } }