View Javadoc
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   * Test cases for {@link MemoryCacheMXBeanImpl}
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 }