/** * */ package org.minnal.metrics; import static org.mockito.Matchers.any; import static org.mockito.Matchers.eq; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import java.util.concurrent.TimeUnit; import org.minnal.core.Application; import org.minnal.core.Container; import org.minnal.core.config.ApplicationConfiguration; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; import com.codahale.metrics.JmxReporter; import com.codahale.metrics.MetricRegistry; import com.codahale.metrics.graphite.GraphiteReporter; /** * @author ganeshs * */ public class MetricsBundleTest { private MetricsBundle bundle; private MetricsBundleConfiguration configuration; private Container container; private Application application; @BeforeMethod public void setup() { bundle = spy(new MetricsBundle()); container = mock(Container.class); configuration = new MetricsBundleConfiguration(true, true, new GraphiteReporterConfiguration("localhost", 8080, "test123", 60)); application = mock(Application.class); ApplicationConfiguration configuration = mock(ApplicationConfiguration.class); when(configuration.getName()).thenReturn("test1"); when(application.getConfiguration()).thenReturn(configuration); } @Test public void shouldInitializeMetrics() { bundle.init(container, configuration); verify(container).registerListener(bundle); verify(container).registerListener(any(ResponseMetricCollector.class)); } @Test public void shouldHandlePostMount() { bundle.init(container, configuration); MetricRegistry metricRegistry = mock(MetricRegistry.class); JmxReporter jmxReporter = mock(JmxReporter.class); GraphiteReporter graphiteReporter = mock(GraphiteReporter.class); doReturn(metricRegistry).when(bundle).createMetricRegistry(); doReturn(jmxReporter).when(bundle).createJmxReporter(metricRegistry); doReturn(graphiteReporter).when(bundle).createGraphiteReporter(eq(configuration.getGraphiteReporterConfiguration()), eq(metricRegistry)); bundle.postMount(application); verify(jmxReporter).start(); verify(graphiteReporter).start(configuration.getGraphiteReporterConfiguration().getPollPeriodInSecs(), TimeUnit.SECONDS); } @Test public void shouldInitDataSourcePoolMetricCollector() { bundle.init(container, configuration); DataSourcePoolMetricCollector collector = mock(DataSourcePoolMetricCollector.class); doReturn(collector).when(bundle).createDataSourceMetricCollector(application); bundle.postMount(application); verify(collector).init(); } }