package azkaban.metric; import java.util.Date; import java.util.List; import org.junit.Before; import org.junit.Test; import azkaban.metric.inmemoryemitter.InMemoryHistoryNode; import azkaban.metric.inmemoryemitter.InMemoryMetricEmitter; import azkaban.utils.Props; import static org.junit.Assert.*; /** * Azkaban Metric Manager Tests */ public class MetricManagerTest { MetricReportManager manager; FakeMetric metric; InMemoryMetricEmitter emitter; @Before public void setUp() throws Exception { manager = MetricReportManager.getInstance(); metric = new FakeMetric(manager); manager.addMetric(metric); emitter = new InMemoryMetricEmitter(new Props()); manager.addMetricEmitter(emitter); } /** * Test enable disable and status methods */ @Test public void managerStatusTest() { assertNotNull("Singleton Failed to instantiate", manager); assertTrue("Failed to enable metric manager", MetricReportManager.isAvailable()); manager.disableManager(); assertFalse("Failed to disable metric manager", MetricReportManager.isAvailable()); manager.enableManager(); assertTrue("Failed to enable metric manager", MetricReportManager.isAvailable()); } /** * Test adding and accessing metric methods */ @Test public void managerMetricMaintenanceTest() { assertEquals("Failed to add metric", manager.getAllMetrics().size(), 1); assertTrue("Failed to add metric", manager.getAllMetrics().contains(metric)); assertEquals("Failed to get metric by Name", manager.getMetricFromName("FakeMetric"), metric); } /** * Test adding, removing and accessing metric emitter. */ @Test public void managerEmitterMaintenanceTest() { assertTrue("Failed to add Emitter", manager.getMetricEmitters().contains(emitter)); int originalSize = manager.getMetricEmitters().size(); manager.removeMetricEmitter(emitter); assertEquals("Failed to remove emitter", manager.getMetricEmitters().size(), originalSize - 1); manager.addMetricEmitter(emitter); } /** * Test metric reporting methods, including InMemoryMetricEmitter methods * @throws Exception */ @Test public void managerEmitterHandlingTest() throws Exception { emitter.purgeAllData(); Date from = new Date(); metric.notifyManager(); Thread.sleep(2000); List<InMemoryHistoryNode> nodes = emitter.getMetrics("FakeMetric", from, new Date(), false); assertEquals("Failed to report metric", 1, nodes.size()); assertEquals("Failed to report metric", nodes.get(0).getValue(), 4); } }