package org.stagemonitor.ehcache; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.stagemonitor.core.metrics.metrics2.MetricName.name; import org.junit.Test; import org.stagemonitor.core.metrics.metrics2.MetricName; import org.stagemonitor.core.metrics.metrics2.Metric2Registry; public class StagemonitorCacheUsageListenerTest { private final Metric2Registry registry = new Metric2Registry(); private StagemonitorCacheUsageListener cacheUsageListener = new StagemonitorCacheUsageListener("cache", registry, true); @Test public void testEvicted() throws Exception { cacheUsageListener.notifyCacheElementEvicted(); final MetricName name = name("cache_delete").tag("cache_name", "cache").tag("reason", "eviction").tier("All").build(); assertNotNull(registry.getMeters().get(name)); assertEquals(1, registry.getMeters().get(name).getCount()); } @Test public void testExpired() throws Exception { cacheUsageListener.notifyCacheElementExpired(); final MetricName name = name("cache_delete").tag("cache_name", "cache").tag("reason", "expire").tier("All").build(); assertNotNull(registry.getMeters().get(name)); assertEquals(1, registry.getMeters().get(name).getCount()); } @Test public void testRemoved() throws Exception { cacheUsageListener.notifyCacheElementRemoved(); final MetricName name = name("cache_delete").tag("cache_name", "cache").tag("reason", "remove").tier("All").build(); assertNotNull(registry.getMeters().get(name)); assertEquals(1, registry.getMeters().get(name).getCount()); } @Test public void testCacheHit() throws Exception { cacheUsageListener.notifyCacheHitInMemory(); cacheUsageListener.notifyCacheHitOffHeap(); cacheUsageListener.notifyCacheHitOnDisk(); final MetricName name = name("cache_hits").tag("cache_name", "cache").tier("All").build(); assertNotNull(registry.getMeters().get(name)); assertEquals(3, registry.getMeters().get(name).getCount()); } @Test public void testCacheMiss() throws Exception { cacheUsageListener.notifyCacheMissedWithExpired(); cacheUsageListener.notifyCacheMissedWithNotFound(); cacheUsageListener.notifyCacheMissInMemory(); cacheUsageListener.notifyCacheMissOffHeap(); cacheUsageListener.notifyCacheMissOnDisk(); final MetricName name = name("cache_misses").tag("cache_name", "cache").tier("All").build(); assertNotNull(registry.getMeters().get(name)); assertEquals(5, registry.getMeters().get(name).getCount()); } @Test public void testHitRate() throws Exception { cacheUsageListener.notifyCacheHitInMemory(); cacheUsageListener.notifyCacheMissOnDisk(); assertNotNull(cacheUsageListener.getHitRatio1Min()); } @Test public void testGet() { cacheUsageListener.notifyGetTimeNanos(1); assertNotNull(registry.getTimers().get(name("cache_get").tag("cache_name", "cache").tier("All").build())); } @Test public void testGetMeter() { cacheUsageListener = new StagemonitorCacheUsageListener("cache", registry, false); cacheUsageListener.notifyGetTimeNanos(1); final MetricName name = name("cache_get").tag("cache_name", "cache").tier("All").build(); assertNull(registry.getTimers().get(name)); assertNotNull(registry.getMeters().get(name)); } @Test public void testEmpty() { cacheUsageListener.notifyRemoveAll(); cacheUsageListener.notifyStatisticsAccuracyChanged(0); cacheUsageListener.dispose(); cacheUsageListener.notifyCacheSearch(0); cacheUsageListener.notifyXaCommit(); cacheUsageListener.notifyXaRollback(); cacheUsageListener.notifyStatisticsEnabledChanged(true); cacheUsageListener.notifyStatisticsCleared(); cacheUsageListener.notifyCacheElementPut(); cacheUsageListener.notifyCacheElementUpdated(); cacheUsageListener.notifyTimeTakenForGet(0); assertEquals(0, registry.getMeters().size()); assertEquals(0, registry.getCounters().size()); assertEquals(0, registry.getTimers().size()); assertEquals(0, registry.getGauges().size()); assertEquals(0, registry.getHistograms().size()); } }