1 package com.atlassian.cache.hazelcast;
2
3 import java.util.concurrent.TimeUnit;
4
5 import com.atlassian.cache.Cache;
6 import com.atlassian.cache.CacheManager;
7 import com.atlassian.cache.CacheSettingsBuilder;
8
9 import com.hazelcast.config.MapConfig;
10
11 import org.junit.Before;
12 import org.junit.ClassRule;
13 import org.junit.Test;
14
15 import static org.hamcrest.MatcherAssert.assertThat;
16 import static org.hamcrest.Matchers.contains;
17 import static org.hamcrest.Matchers.hasSize;
18 import static org.hamcrest.Matchers.is;
19 import static org.hamcrest.Matchers.not;
20 import static org.hamcrest.Matchers.nullValue;
21
22 public class HazelcastCacheManagerTest
23 {
24 @ClassRule
25 public static InitOnceHazelcastCluster cluster = InitOnceHazelcastCluster.getInstance();
26
27 @Before
28 public void setup()
29 {
30 cluster.reset();
31 }
32
33 @Test
34 public void testDefaultCacheConfigIsUsedForNewCaches()
35 {
36 CacheManager factory = HazelcastTestSupport.createDistributedFactory(cluster.getNode(0), new CacheSettingsBuilder()
37 .maxEntries(1000)
38 .expireAfterAccess(6, TimeUnit.MINUTES)
39 .build());
40
41 String cacheName = "defaults-test";
42 Cache<String, String> cache = factory.getCache(cacheName);
43
44 assertThat(cache, not(nullValue()));
45 assertThat(cache.getName(), is(cacheName));
46 assertThat(cache.getKeys(), hasSize(0));
47
48 String mapName = HazelcastCacheManager.PREFIX_CACHE + cacheName;
49
50 MapConfig config = cluster.getNode(0).getConfig().getMapConfig(mapName);
51 assertThat(config.getMaxSizeConfig().getSize(), is(1000));
52 assertThat(config.getMaxIdleSeconds(), is(360));
53 }
54
55 @Test
56 public void testNonFlushableCacheIsNotFlushed()
57 {
58 CacheManager factory = HazelcastTestSupport.createDistributedFactory(cluster.getNode(0));
59
60
61 Cache<String, String> nonFlushableCache = factory.getCache("broken-toilet", null, new CacheSettingsBuilder().unflushable().build());
62 nonFlushableCache.put("key1", "value1");
63
64 Cache<String, String> normalCache = factory.getCache("normal-cache");
65 normalCache.put("key2", "value2");
66
67 factory.flushCaches();
68
69 nonFlushableCache = factory.getCache("broken-toilet");
70 assertThat(nonFlushableCache.get("key1"), is("value1"));
71
72 normalCache = factory.getCache("normal-cache");
73 assertThat(normalCache.getKeys(), hasSize(0));
74 }
75
76 @Test
77 public void testTheSameCacheInstanceIsReturnedForTheSameName()
78 {
79 CacheManager factory = HazelcastTestSupport.createDistributedFactory(cluster.getNode(0));
80
81 final String cacheName = "same-instance-test";
82 Cache<String, String> cache = factory.getCache(cacheName);
83
84 cache.put("fav", "dog");
85 assertThat(cache.getKeys(), contains("fav"));
86 assertThat(cache.get("fav"), is("dog"));
87
88 cache = factory.getCache(cacheName);
89 assertThat(cache.getKeys(), contains("fav"));
90 assertThat(cache.get("fav"), is("dog"));
91 }
92 }