1 package com.atlassian.cache.memory.jmx;
2
3 import com.atlassian.cache.CacheManager;
4 import com.atlassian.cache.CacheStatisticsKey;
5 import com.atlassian.cache.ManagedCache;
6 import com.atlassian.cache.impl.StrongSupplier;
7 import java.util.function.Supplier;
8 import org.junit.Before;
9 import org.junit.Test;
10 import org.junit.runner.RunWith;
11 import org.mockito.Mock;
12 import org.mockito.junit.MockitoJUnitRunner;
13
14 import java.util.SortedMap;
15 import java.util.TreeMap;
16
17 import static org.junit.Assert.assertThat;
18 import static org.mockito.Mockito.when;
19 import static org.hamcrest.Matchers.is;
20 import static org.hamcrest.Matchers.closeTo;
21
22
23
24
25 @RunWith(MockitoJUnitRunner.class)
26 public class MemoryCacheMXBeanImplTest
27 {
28
29 private static final String EXISTING_CACHE_NAME = "SampleTestCache";
30 private static final String NON_EXISTING_CACHE_NAME = "NonExistingSampleTestCache";
31 private static final double PRECISION = 0.00001;
32
33 private SortedMap<CacheStatisticsKey, Supplier<Long>> statistics;
34
35 @Mock
36 private CacheManager cacheManager;
37
38 @Mock
39 private ManagedCache cache;
40
41 @Before
42 public void setUp()
43 {
44 statistics = new TreeMap<>();
45 when(cacheManager.getManagedCache(EXISTING_CACHE_NAME)).thenReturn(cache);
46 when(cache.getStatistics()).thenReturn(statistics);
47 }
48
49 @Test
50 public void testGetRequestCount()
51 {
52 long expectedRequestCount = 10L;
53 statistics.put(CacheStatisticsKey.REQUEST_COUNT, new StrongSupplier<>(expectedRequestCount));
54 MemoryCacheMXBean mbean = new MemoryCacheMXBeanImpl(cacheManager, EXISTING_CACHE_NAME);
55
56 long requestCount = mbean.getRequestCount();
57
58
59 assertThat(requestCount, is(expectedRequestCount));
60 }
61
62 @Test
63 public void testGetRequestCountForMissingCache()
64 {
65 long expectedRequestCount = 0L;
66 MemoryCacheMXBean mbean = new MemoryCacheMXBeanImpl(cacheManager, NON_EXISTING_CACHE_NAME);
67
68 long requestCount = mbean.getRequestCount();
69
70 assertThat(requestCount, is(expectedRequestCount));
71 }
72
73 @Test
74 public void testGetRequestCountForMissingStat()
75 {
76 long expectedRequestCount = 0L;
77 MemoryCacheMXBean mbean = new MemoryCacheMXBeanImpl(cacheManager, EXISTING_CACHE_NAME);
78
79 long requestCount = mbean.getRequestCount();
80
81 assertThat(requestCount, is(expectedRequestCount));
82 }
83
84 @Test
85 public void testGetHitCount()
86 {
87 long expectedHitCount = 15L;
88 statistics.put(CacheStatisticsKey.HIT_COUNT, new StrongSupplier<>(expectedHitCount));
89 MemoryCacheMXBean mbean = new MemoryCacheMXBeanImpl(cacheManager, EXISTING_CACHE_NAME);
90
91 long hitCount = mbean.getHitCount();
92
93 assertThat(hitCount, is(expectedHitCount));
94 }
95
96 @Test
97 public void testGetHitCountForMissingCache()
98 {
99 long expectedHitCount = 0L;
100 MemoryCacheMXBean mbean = new MemoryCacheMXBeanImpl(cacheManager, NON_EXISTING_CACHE_NAME);
101
102 long hitCount = mbean.getHitCount();
103
104 assertThat(hitCount, is(expectedHitCount));
105 }
106
107 @Test
108 public void testGetHitCountForMissingStat()
109 {
110 long expectedHitCount = 0L;
111 MemoryCacheMXBean mbean = new MemoryCacheMXBeanImpl(cacheManager, EXISTING_CACHE_NAME);
112
113 long hitCount = mbean.getHitCount();
114
115 assertThat(hitCount, is(expectedHitCount));
116 }
117
118 @Test
119 public void testGetHitRate()
120 {
121 double expectedHitRate = 1.0;
122 statistics.put(CacheStatisticsKey.HIT_COUNT, new StrongSupplier<>(15L));
123 statistics.put(CacheStatisticsKey.REQUEST_COUNT, new StrongSupplier<>(15L));
124 MemoryCacheMXBean mbean = new MemoryCacheMXBeanImpl(cacheManager, EXISTING_CACHE_NAME);
125
126 double hitRate = mbean.getHitRate();
127
128 assertThat(hitRate, closeTo(expectedHitRate, PRECISION));
129 }
130
131 @Test
132 public void testGetHitRateForRequestCount()
133 {
134 double expectedHitRate = 1.0;
135 MemoryCacheMXBean mbean = new MemoryCacheMXBeanImpl(cacheManager, NON_EXISTING_CACHE_NAME);
136
137 double hitRate = mbean.getHitRate();
138
139 assertThat(hitRate, closeTo(expectedHitRate, PRECISION));
140 }
141
142 @Test
143 public void testGetMissCount()
144 {
145 long expectedMissCount = 3L;
146 statistics.put(CacheStatisticsKey.MISS_COUNT, new StrongSupplier<>(expectedMissCount));
147 MemoryCacheMXBean mbean = new MemoryCacheMXBeanImpl(cacheManager, EXISTING_CACHE_NAME);
148
149 long missCount = mbean.getMissCount();
150
151 assertThat(missCount, is(expectedMissCount));
152 }
153
154 @Test
155 public void testGetMissCountForMissingCache()
156 {
157 long expectedMissCount = 0L;
158 MemoryCacheMXBean mbean = new MemoryCacheMXBeanImpl(cacheManager, NON_EXISTING_CACHE_NAME);
159
160 long missCount = mbean.getMissCount();
161
162 assertThat(missCount, is(expectedMissCount));
163 }
164
165 @Test
166 public void testGetMissCountForMissingStat()
167 {
168 long expectedMissCount = 0L;
169 MemoryCacheMXBean mbean = new MemoryCacheMXBeanImpl(cacheManager, EXISTING_CACHE_NAME);
170
171 long missCount = mbean.getMissCount();
172
173 assertThat(missCount, is(expectedMissCount));
174 }
175
176 @Test
177 public void testGetMissRate()
178 {
179 double expectedMissRate = 1.0;
180 statistics.put(CacheStatisticsKey.MISS_COUNT, new StrongSupplier<>(7L));
181 statistics.put(CacheStatisticsKey.REQUEST_COUNT, new StrongSupplier<>(7L));
182 MemoryCacheMXBean mbean = new MemoryCacheMXBeanImpl(cacheManager, EXISTING_CACHE_NAME);
183
184 double missRate = mbean.getMissRate();
185
186 assertThat(missRate, closeTo(expectedMissRate, PRECISION));
187 }
188
189 @Test
190 public void testGetMissRateForMissingRequestCount()
191 {
192 double expectedMissRate = 0.0;
193 MemoryCacheMXBean mbean = new MemoryCacheMXBeanImpl(cacheManager, NON_EXISTING_CACHE_NAME);
194
195 double missRate = mbean.getMissRate();
196
197 assertThat(missRate, closeTo(expectedMissRate, PRECISION));
198 }
199
200 @Test
201 public void testGetLoadCount()
202 {
203 long expectedLoadCount = 11L;
204 statistics.put(CacheStatisticsKey.LOAD_COUNT, new StrongSupplier<>(expectedLoadCount));
205 MemoryCacheMXBean mbean = new MemoryCacheMXBeanImpl(cacheManager, EXISTING_CACHE_NAME);
206
207 long loadCount = mbean.getLoadCount();
208
209 assertThat(loadCount, is(expectedLoadCount));
210 }
211
212 @Test
213 public void testGetLoadCountForMissingCache()
214 {
215 long expectedLoadCount = 0L;
216 MemoryCacheMXBean mbean = new MemoryCacheMXBeanImpl(cacheManager, NON_EXISTING_CACHE_NAME);
217
218 long loadCount = mbean.getLoadCount();
219
220 assertThat(loadCount, is(expectedLoadCount));
221 }
222
223 @Test
224 public void testGetLoadCountForMissingStat()
225 {
226 long expectedLoadCount = 0L;
227 MemoryCacheMXBean mbean = new MemoryCacheMXBeanImpl(cacheManager, EXISTING_CACHE_NAME);
228
229 long loadCount = mbean.getLoadCount();
230
231 assertThat(loadCount, is(expectedLoadCount));
232 }
233
234 @Test
235 public void testGetLoadSuccessCount()
236 {
237 long expectedLoadSuccessCount = 17L;
238 statistics.put(CacheStatisticsKey.LOAD_SUCCESS_COUNT, new StrongSupplier<>(expectedLoadSuccessCount));
239 MemoryCacheMXBean mbean = new MemoryCacheMXBeanImpl(cacheManager, EXISTING_CACHE_NAME);
240
241 long loadSuccessCount = mbean.getLoadSuccessCount();
242
243 assertThat(loadSuccessCount, is(expectedLoadSuccessCount));
244 }
245
246 @Test
247 public void testGetLoadSuccessCountForMissingCache()
248 {
249 long expectedLoadSuccessCount = 0L;
250 MemoryCacheMXBean mbean = new MemoryCacheMXBeanImpl(cacheManager, NON_EXISTING_CACHE_NAME);
251
252 long loadSuccessCount = mbean.getLoadSuccessCount();
253
254 assertThat(loadSuccessCount, is(expectedLoadSuccessCount));
255 }
256
257 @Test
258 public void testGetLoadSuccessCountForMissingStat()
259 {
260 long expectedLoadSuccessCount = 0L;
261 MemoryCacheMXBean mbean = new MemoryCacheMXBeanImpl(cacheManager, EXISTING_CACHE_NAME);
262
263 long loadSuccessCount = mbean.getLoadSuccessCount();
264
265 assertThat(loadSuccessCount, is(expectedLoadSuccessCount));
266 }
267
268 @Test
269 public void testGetLoadExceptionCount()
270 {
271 long expectedLoadExceptionCount = 13L;
272 statistics.put(CacheStatisticsKey.LOAD_EXCEPTION_COUNT, new StrongSupplier<>(expectedLoadExceptionCount));
273 MemoryCacheMXBean mbean = new MemoryCacheMXBeanImpl(cacheManager, EXISTING_CACHE_NAME);
274
275 long loadEExceptionCount = mbean.getLoadExceptionCount();
276
277 assertThat(loadEExceptionCount, is(expectedLoadExceptionCount));
278 }
279
280 @Test
281 public void testGetLoadExceptionCountForMissingCache()
282 {
283 long expectedLoadExceptionCount = 0L;
284 MemoryCacheMXBean mbean = new MemoryCacheMXBeanImpl(cacheManager, NON_EXISTING_CACHE_NAME);
285
286 long loadEExceptionCount = mbean.getLoadExceptionCount();
287
288 assertThat(loadEExceptionCount, is(expectedLoadExceptionCount));
289 }
290
291
292 @Test
293 public void testGetLoadExceptionCountForMissingStat()
294 {
295 long expectedLoadExceptionCount = 0L;
296 MemoryCacheMXBean mbean = new MemoryCacheMXBeanImpl(cacheManager, EXISTING_CACHE_NAME);
297
298 long loadEExceptionCount = mbean.getLoadExceptionCount();
299
300 assertThat(loadEExceptionCount, is(expectedLoadExceptionCount));
301 }
302
303 @Test
304 public void testLoadExceptionRate()
305 {
306 double expectedLoadExceptionRate = 1.0;
307 statistics.put(CacheStatisticsKey.LOAD_EXCEPTION_COUNT, new StrongSupplier<>(5L));
308 statistics.put(CacheStatisticsKey.LOAD_COUNT, new StrongSupplier<>(5L));
309 MemoryCacheMXBean mbean = new MemoryCacheMXBeanImpl(cacheManager, EXISTING_CACHE_NAME);
310
311 double loadExceptionRate = mbean.getLoadExceptionRate();
312
313 assertThat(loadExceptionRate, closeTo(expectedLoadExceptionRate, PRECISION));
314 }
315
316 @Test
317 public void testLoadExceptionRateForMissingLoadCount()
318 {
319 double expectedLoadExceptionRate = 0.0;
320 MemoryCacheMXBean mbean = new MemoryCacheMXBeanImpl(cacheManager, NON_EXISTING_CACHE_NAME);
321
322 double loadExceptionRate = mbean.getLoadExceptionRate();
323
324 assertThat(loadExceptionRate, closeTo(expectedLoadExceptionRate, PRECISION));
325 }
326
327 @Test
328 public void testGetTotalLoadCount()
329 {
330 long expectedTotalLoadCount = 13L;
331 statistics.put(CacheStatisticsKey.TOTAL_LOAD_TIME, new StrongSupplier<>(expectedTotalLoadCount));
332 MemoryCacheMXBean mbean = new MemoryCacheMXBeanImpl(cacheManager, EXISTING_CACHE_NAME);
333
334 long totalLoadCount = mbean.getTotalLoadTime();
335
336 assertThat(totalLoadCount, is(expectedTotalLoadCount));
337 }
338
339 @Test
340 public void testGetTotalLoadCountForMissingCache()
341 {
342 long expectedTotalLoadCount = 0L;
343 MemoryCacheMXBean mbean = new MemoryCacheMXBeanImpl(cacheManager, NON_EXISTING_CACHE_NAME);
344
345 long loadEExceptionCount = mbean.getTotalLoadTime();
346
347 assertThat(loadEExceptionCount, is(expectedTotalLoadCount));
348 }
349
350 @Test
351 public void testGetTotalLoadCountForMissingStat()
352 {
353 long expectedTotalLoadCount = 0L;
354 MemoryCacheMXBean mbean = new MemoryCacheMXBeanImpl(cacheManager, EXISTING_CACHE_NAME);
355
356 long loadEExceptionCount = mbean.getTotalLoadTime();
357
358 assertThat(loadEExceptionCount, is(expectedTotalLoadCount));
359 }
360
361 @Test
362 public void testAverageLoadPenalty()
363 {
364 double expectedAverageLoadPenalty = 1.0;
365 statistics.put(CacheStatisticsKey.LOAD_EXCEPTION_COUNT, new StrongSupplier<>(2L));
366 statistics.put(CacheStatisticsKey.LOAD_SUCCESS_COUNT, new StrongSupplier<>(3L));
367 statistics.put(CacheStatisticsKey.TOTAL_LOAD_TIME, new StrongSupplier<>(5L));
368 MemoryCacheMXBean mbean = new MemoryCacheMXBeanImpl(cacheManager, EXISTING_CACHE_NAME);
369
370 double averageLoadPenalty = mbean.getAverageLoadPenalty();
371
372 assertThat(averageLoadPenalty, closeTo(expectedAverageLoadPenalty, PRECISION));
373 }
374
375 @Test
376 public void testAverageLoadPenaltyForMissingLoadCount()
377 {
378 double expectedAverageLoadPenalty = 0.0;
379 MemoryCacheMXBean mbean = new MemoryCacheMXBeanImpl(cacheManager, NON_EXISTING_CACHE_NAME);
380
381 double averageLoadPenalty = mbean.getAverageLoadPenalty();
382
383 assertThat(averageLoadPenalty, closeTo(expectedAverageLoadPenalty, PRECISION));
384 }
385
386 @Test
387 public void testGetEvictionCount()
388 {
389 long expectedEvictionCount = 14L;
390 statistics.put(CacheStatisticsKey.EVICTION_COUNT, new StrongSupplier<>(expectedEvictionCount));
391 MemoryCacheMXBean mbean = new MemoryCacheMXBeanImpl(cacheManager, EXISTING_CACHE_NAME);
392
393 long evictionCount = mbean.getEvictionCount();
394
395 assertThat(evictionCount, is(expectedEvictionCount));
396 }
397
398 @Test
399 public void testGetEvictionCountForMissingCache()
400 {
401 long expectedEvictionCount = 0L;
402 MemoryCacheMXBean mbean = new MemoryCacheMXBeanImpl(cacheManager, NON_EXISTING_CACHE_NAME);
403
404 long evictionCount = mbean.getEvictionCount();
405
406 assertThat(evictionCount, is(expectedEvictionCount));
407 }
408
409 @Test
410 public void testGetEvictionCountForMissingStat()
411 {
412 long expectedEvictionCount = 0L;
413 MemoryCacheMXBean mbean = new MemoryCacheMXBeanImpl(cacheManager, EXISTING_CACHE_NAME);
414
415 long evictionCount = mbean.getEvictionCount();
416
417 assertThat(evictionCount, is(expectedEvictionCount));
418 }
419
420 @Test
421 public void testSize()
422 {
423 long expectedSize = 14L;
424 statistics.put(CacheStatisticsKey.SIZE, new StrongSupplier<>(expectedSize));
425 MemoryCacheMXBean mbean = new MemoryCacheMXBeanImpl(cacheManager, EXISTING_CACHE_NAME);
426
427 long size = mbean.getSize();
428
429 assertThat(size, is(expectedSize));
430 }
431
432 @Test
433 public void testSizeForMissingCache()
434 {
435 long expectedSize = 0L;
436 MemoryCacheMXBean mbean = new MemoryCacheMXBeanImpl(cacheManager, NON_EXISTING_CACHE_NAME);
437
438 long size = mbean.getSize();
439
440 assertThat(size, is(expectedSize));
441 }
442
443 @Test
444 public void testSizeForMissingStat()
445 {
446 long expectedSize = 0L;
447 MemoryCacheMXBean mbean = new MemoryCacheMXBeanImpl(cacheManager, EXISTING_CACHE_NAME);
448
449 long size = mbean.getSize();
450
451 assertThat(size, is(expectedSize));
452 }
453 }