//Dstl (c) Crown Copyright 2017 package uk.gov.dstl.baleen.core.metrics; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertSame; import static org.junit.Assert.assertTrue; import org.junit.Before; import org.junit.Test; import uk.gov.dstl.baleen.core.utils.YamlConfiguration; import uk.gov.dstl.baleen.exceptions.BaleenException; import uk.gov.dstl.baleen.testing.TestingUtils; import com.codahale.metrics.Counter; import com.codahale.metrics.Histogram; import com.codahale.metrics.Meter; import com.codahale.metrics.Timer; /** * Tests for {@link MetricsFactory}. * * * */ public class MetricsFactoryTest { private MetricsFactory metrics; @Before public void before() { metrics = new MetricsFactory(); metrics.removeAll(); } @Test public void testInstance() { assertNotNull(MetricsFactory.getInstance()); Metrics m1 = MetricsFactory.getMetrics(MetricsFactoryTest.class); Metrics m2 = MetricsFactory.getMetrics("Testing", MetricsFactoryTest.class); assertTrue(m1.getBase().contains(MetricsFactoryTest.class.getCanonicalName())); assertTrue(m2.getBase().contains(MetricsFactoryTest.class.getCanonicalName())); assertTrue(m2.getBase().startsWith("Testing")); } @Test public void testComponents() throws BaleenException { metrics.configure(new YamlConfiguration()); metrics.start(); metrics.getCounter(MetricsFactoryTest.class, "removeC"); metrics.stop(); assertTrue(metrics.getRegistry().getMetrics().isEmpty()); } @Test public void testGetRegistry() { assertNotNull(metrics.getRegistry()); } @Test public void testRemove() { metrics.getCounter(MetricsFactoryTest.class, "removeC"); metrics.getTimer(MetricsFactoryTest.class, "removeT"); metrics.getHistogram(MetricsFactoryTest.class, "removeH"); metrics.getMeter(MetricsFactoryTest.class, "removeM"); assertFalse(metrics.getRegistry().getMetrics().isEmpty()); metrics.removeAll(); assertTrue(metrics.getRegistry().getMetrics().isEmpty()); } @Test public void testGetCounter() { Counter a = metrics.getCounter(MetricsFactoryTest.class, "a"); assertNotNull(a); assertSame(a, metrics.getCounter(MetricsFactoryTest.class, "a")); assertNotEquals(a, metrics.getCounter(MetricsFactoryTest.class, "b")); Counter b = metrics.getCounter(MetricsFactoryTest.class.getCanonicalName(), "b"); assertNotNull(b); assertSame(b, metrics.getCounter(MetricsFactoryTest.class.getCanonicalName(), "b")); assertNotEquals(b, metrics.getCounter(MetricsFactoryTest.class.getCanonicalName(), "c")); } @Test public void testGetMeter() { Meter a = metrics.getMeter(MetricsFactoryTest.class, "a"); assertNotNull(a); assertSame(a, metrics.getMeter(MetricsFactoryTest.class, "a")); assertNotEquals(a, metrics.getMeter(MetricsFactoryTest.class, "b")); Meter b = metrics.getMeter(MetricsFactoryTest.class.getCanonicalName(), "b"); assertNotNull(b); assertSame(b, metrics.getMeter(MetricsFactoryTest.class.getCanonicalName(), "b")); assertNotEquals(b, metrics.getMeter(MetricsFactoryTest.class.getCanonicalName(), "c")); } @Test public void testGetTimer() { Timer a = metrics.getTimer(MetricsFactoryTest.class, "a"); assertNotNull(a); assertSame(a, metrics.getTimer(MetricsFactoryTest.class, "a")); assertNotEquals(a, metrics.getTimer(MetricsFactoryTest.class, "b")); Timer b = metrics.getTimer(MetricsFactoryTest.class.getCanonicalName(), "b"); assertNotNull(b); assertSame(b, metrics.getTimer(MetricsFactoryTest.class.getCanonicalName(), "b")); assertNotEquals(b, metrics.getTimer(MetricsFactoryTest.class.getCanonicalName(), "c")); } @Test public void testGetHistogram() { Histogram a = metrics.getHistogram(MetricsFactoryTest.class, "a"); assertNotNull(a); assertSame(a, metrics.getHistogram(MetricsFactoryTest.class, "a")); assertNotEquals(a, metrics.getHistogram(MetricsFactoryTest.class, "b")); Histogram b = metrics.getHistogram(MetricsFactoryTest.class.getCanonicalName(), "b"); assertNotNull(b); assertSame(b, metrics.getHistogram(MetricsFactoryTest.class.getCanonicalName(), "b")); assertNotEquals(b, metrics.getHistogram(MetricsFactoryTest.class.getCanonicalName(), "c")); } @Test public void testMakeNameClass() { String a = metrics.makeName(MetricsFactoryTest.class, "a"); String b = metrics.makeName(MetricsFactoryTest.class, "b"); String anotherA = metrics.makeName(MetricsFactory.class, "a"); assertNotNull(a); assertNotEquals(a, b); assertNotEquals(a, anotherA); } @Test public void testMakeNameString() { String a = metrics.makeName(MetricsFactoryTest.class.getCanonicalName(), "a"); String b = metrics.makeName(MetricsFactoryTest.class.getCanonicalName(), "b"); String anotherA = metrics.makeName(MetricsFactory.class.getCanonicalName(), "a"); assertNotNull(a); assertNotEquals(a, b); assertNotEquals(a, anotherA); } @Test public void testConfiguration() throws Exception { YamlConfiguration configuration = YamlConfiguration .readFromResource(MetricsFactoryTest.class, "reporters.yaml"); metrics.configure(configuration); metrics.start(); try { metrics.getCounter(MetricsFactoryTest.class, "testConfiguration").inc(); metrics.getCounter(MetricsFactoryTest.class, "testConfiguration").inc(); MetricsFactory.getMetrics("test", MetricsFactoryTest.class).getCounter("testConfigurationMetric").inc(); metrics.report(); Thread.sleep(1000); } finally { metrics.stop(); } // Delete the directory of CSV tests TestingUtils.deleteDirectory("test_csvmetrics"); } }