package org.stagemonitor.core;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import javax.management.ObjectInstance;
import com.codahale.metrics.Counter;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mockito;
import org.stagemonitor.configuration.ConfigurationRegistry;
import org.stagemonitor.core.elasticsearch.ElasticsearchClient;
import org.stagemonitor.core.metrics.metrics2.Metric2Registry;
import org.stagemonitor.core.metrics.metrics2.MetricName;
import org.stagemonitor.core.util.MBeanUtils;
public class JmxReportingTest {
private Metric2Registry registry;
@Before
public void setUp() throws Exception {
registry = new Metric2Registry();
final ConfigurationRegistry configuration = Mockito.mock(ConfigurationRegistry.class);
final CorePlugin corePlugin = mock(CorePlugin.class);
when(corePlugin.isReportToJMX()).thenReturn(true);
when(configuration.getConfig(CorePlugin.class)).thenReturn(corePlugin);
new CorePlugin(mock(ElasticsearchClient.class)).registerReporters(registry, configuration, new MeasurementSession("JmxReportingTest", "test", "test"));
}
@Test
public void testReportToJmx() throws Exception {
final Counter counter = registry.counter(MetricName.name("test_counter").tag("foo", "bar").build());
final ObjectInstance objectInstance = MBeanUtils.queryMBeans("metrics:name=test_counter.bar").iterator().next();
Assert.assertNotNull(objectInstance);
Assert.assertEquals(0L, MBeanUtils.getValueFromMBean(objectInstance, "Count"));
counter.inc();
Assert.assertEquals(1L, MBeanUtils.getValueFromMBean(objectInstance, "Count"));
}
}