1 package org.apache.commons.jcs.jcache;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import org.junit.Test;
23
24 import javax.cache.Cache;
25 import javax.cache.CacheManager;
26 import javax.cache.Caching;
27 import javax.cache.configuration.CacheEntryListenerConfiguration;
28 import javax.cache.configuration.CompleteConfiguration;
29 import javax.cache.configuration.Factory;
30 import javax.cache.configuration.MutableConfiguration;
31 import javax.cache.event.CacheEntryCreatedListener;
32 import javax.cache.event.CacheEntryEvent;
33 import javax.cache.event.CacheEntryEventFilter;
34 import javax.cache.event.CacheEntryListener;
35 import javax.cache.event.CacheEntryListenerException;
36 import javax.cache.event.CacheEntryRemovedListener;
37 import javax.cache.event.CacheEntryUpdatedListener;
38 import javax.cache.expiry.AccessedExpiryPolicy;
39 import javax.cache.expiry.Duration;
40 import javax.cache.expiry.ExpiryPolicy;
41 import javax.cache.integration.CacheLoader;
42 import javax.cache.integration.CacheLoaderException;
43 import javax.cache.integration.CacheWriter;
44 import javax.cache.spi.CachingProvider;
45 import java.util.HashSet;
46 import java.util.Map;
47 import java.util.Set;
48 import java.util.concurrent.TimeUnit;
49
50 import static org.junit.Assert.assertEquals;
51 import static org.junit.Assert.assertFalse;
52 import static org.junit.Assert.assertTrue;
53
54 public class CacheTest
55 {
56 @Test
57 public void accessExpiry() throws InterruptedException
58 {
59 final CachingProvider cachingProvider = Caching.getCachingProvider();
60 final CacheManager cacheManager = cachingProvider.getCacheManager(cachingProvider.getDefaultURI(),
61 Thread.currentThread().getContextClassLoader(),
62 cachingProvider.getDefaultProperties());
63 final Cache<Integer, Integer> cache = cacheManager.createCache(
64 "test",
65 new MutableConfiguration<Integer, Integer>()
66 .setStoreByValue(false)
67 .setStatisticsEnabled(true)
68 .setManagementEnabled(true)
69 .setTypes(Integer.class, Integer.class)
70 .setExpiryPolicyFactory(AccessedExpiryPolicy.factoryOf(new Duration(TimeUnit.MILLISECONDS, 500))));
71
72 try {
73 cache.put(1, 2);
74 cache.get(1);
75 Thread.sleep(650);
76 assertFalse(cache.containsKey(1));
77 cache.put(1, 2);
78 for (int i = 0; i < 3; i++) {
79 Thread.sleep(250);
80 assertTrue("iteration: " + Integer.toString(i), cache.containsKey(1));
81 }
82 assertTrue(cache.containsKey(1));
83 Thread.sleep(650);
84 assertFalse(cache.containsKey(1));
85 } finally {
86 cacheManager.close();
87 cachingProvider.close();
88 }
89 }
90
91 @Test
92 public void getPut()
93 {
94 final CachingProvider cachingProvider = Caching.getCachingProvider();
95 final CacheManager cacheManager = cachingProvider.getCacheManager();
96 final Cache<String, String> cache = cacheManager.createCache("default", new MutableConfiguration<String, String>());
97 assertFalse(cache.containsKey("foo"));
98 cache.put("foo", "bar");
99 assertTrue(cache.containsKey("foo"));
100 assertEquals("bar", cache.get("foo"));
101 cache.remove("foo");
102 assertFalse(cache.containsKey("foo"));
103 cachingProvider.close();
104 }
105
106 @Test
107 public void listeners()
108 {
109 final CachingProvider cachingProvider = Caching.getCachingProvider();
110 final CacheManager cacheManager = cachingProvider.getCacheManager();
111 cacheManager.createCache("default", new MutableConfiguration<Object, Object>());
112 final Cache<String, String> cache = cacheManager.getCache("default");
113 final Set<String> event = new HashSet<String>();
114 cache.registerCacheEntryListener(new CacheEntryListenerConfiguration<String, String>()
115 {
116 @Override
117 public Factory<CacheEntryListener<? super String, ? super String>> getCacheEntryListenerFactory()
118 {
119 return new Factory<CacheEntryListener<? super String, ? super String>>()
120 {
121 @Override
122 public CacheEntryListener<? super String, ? super String> create()
123 {
124 return new CacheEntryCreatedListener<String, String>()
125 {
126 @Override
127 public void onCreated(Iterable<CacheEntryEvent<? extends String, ? extends String>> cacheEntryEvents)
128 throws CacheEntryListenerException
129 {
130 event.add(cacheEntryEvents.iterator().next().getKey());
131 }
132 };
133 }
134 };
135 }
136
137 @Override
138 public boolean isOldValueRequired()
139 {
140 return false;
141 }
142
143 @Override
144 public Factory<CacheEntryEventFilter<? super String, ? super String>> getCacheEntryEventFilterFactory()
145 {
146 return null;
147 }
148
149 @Override
150 public boolean isSynchronous()
151 {
152 return false;
153 }
154 });
155 cache.registerCacheEntryListener(new CacheEntryListenerConfiguration<String, String>()
156 {
157 @Override
158 public Factory<CacheEntryListener<? super String, ? super String>> getCacheEntryListenerFactory()
159 {
160 return new Factory<CacheEntryListener<? super String, ? super String>>()
161 {
162 @Override
163 public CacheEntryListener<? super String, ? super String> create()
164 {
165 return new CacheEntryUpdatedListener<String, String>()
166 {
167 @Override
168 public void onUpdated(Iterable<CacheEntryEvent<? extends String, ? extends String>> cacheEntryEvents)
169 throws CacheEntryListenerException
170 {
171 event.add(cacheEntryEvents.iterator().next().getKey());
172 }
173 };
174 }
175 };
176 }
177
178 @Override
179 public boolean isOldValueRequired()
180 {
181 return false;
182 }
183
184 @Override
185 public Factory<CacheEntryEventFilter<? super String, ? super String>> getCacheEntryEventFilterFactory()
186 {
187 return null;
188 }
189
190 @Override
191 public boolean isSynchronous()
192 {
193 return false;
194 }
195 });
196 cache.registerCacheEntryListener(new CacheEntryListenerConfiguration<String, String>()
197 {
198 @Override
199 public Factory<CacheEntryListener<? super String, ? super String>> getCacheEntryListenerFactory()
200 {
201 return new Factory<CacheEntryListener<? super String, ? super String>>()
202 {
203 @Override
204 public CacheEntryListener<? super String, ? super String> create()
205 {
206 return new CacheEntryRemovedListener<String, String>()
207 {
208 @Override
209 public void onRemoved(Iterable<CacheEntryEvent<? extends String, ? extends String>> cacheEntryEvents)
210 throws CacheEntryListenerException
211 {
212 event.add(cacheEntryEvents.iterator().next().getKey());
213 }
214 };
215 }
216 };
217 }
218
219 @Override
220 public boolean isOldValueRequired()
221 {
222 return false;
223 }
224
225 @Override
226 public Factory<CacheEntryEventFilter<? super String, ? super String>> getCacheEntryEventFilterFactory()
227 {
228 return null;
229 }
230
231 @Override
232 public boolean isSynchronous()
233 {
234 return false;
235 }
236 });
237
238 cache.put("foo", "bar");
239 assertEquals(1, event.size());
240 assertEquals("foo", event.iterator().next());
241 event.clear();
242 cache.put("foo", "new");
243 assertEquals(1, event.size());
244 assertEquals("foo", event.iterator().next());
245 event.clear();
246 cache.remove("foo");
247 assertEquals(1, event.size());
248 assertEquals("foo", event.iterator().next());
249
250 cachingProvider.close();
251 }
252
253 @Test
254 public void loader()
255 {
256 final CachingProvider cachingProvider = Caching.getCachingProvider();
257 final CacheManager cacheManager = cachingProvider.getCacheManager();
258 cacheManager.createCache("default", new CompleteConfiguration<Object, Object>()
259 {
260 @Override
261 public boolean isReadThrough()
262 {
263 return true;
264 }
265
266 @Override
267 public boolean isWriteThrough()
268 {
269 return false;
270 }
271
272 @Override
273 public boolean isStatisticsEnabled()
274 {
275 return false;
276 }
277
278 @Override
279 public boolean isManagementEnabled()
280 {
281 return false;
282 }
283
284 @Override
285 public Iterable<CacheEntryListenerConfiguration<Object, Object>> getCacheEntryListenerConfigurations()
286 {
287 return null;
288 }
289
290 @Override
291 public Factory<CacheLoader<Object, Object>> getCacheLoaderFactory()
292 {
293 return new Factory<CacheLoader<Object, Object>>()
294 {
295 @Override
296 public CacheLoader<Object, Object> create()
297 {
298 return new CacheLoader<Object, Object>()
299 {
300 @Override
301 public Object load(Object key) throws CacheLoaderException
302 {
303 return "super";
304 }
305
306 @Override
307 public Map<Object, Object> loadAll(Iterable<?> keys) throws CacheLoaderException
308 {
309 return null;
310 }
311 };
312 }
313 };
314 }
315
316 @Override
317 public Factory<CacheWriter<? super Object, ? super Object>> getCacheWriterFactory()
318 {
319 return null;
320 }
321
322 @Override
323 public Factory<ExpiryPolicy> getExpiryPolicyFactory()
324 {
325 return null;
326 }
327
328 @Override
329 public Class<Object> getKeyType()
330 {
331 return Object.class;
332 }
333
334 @Override
335 public Class<Object> getValueType()
336 {
337 return Object.class;
338 }
339
340 @Override
341 public boolean isStoreByValue()
342 {
343 return false;
344 }
345 });
346 final Cache<String, String> cache = cacheManager.getCache("default");
347 assertEquals("super", cache.get("lazilyLoaded"));
348 cachingProvider.close();
349 }
350 }