package org.stagemonitor.core.metrics.annotations;
import static org.junit.Assert.assertEquals;
import static org.stagemonitor.core.metrics.metrics2.MetricName.name;
import com.codahale.metrics.MetricFilter;
import com.codahale.metrics.SharedMetricRegistries;
import com.codahale.metrics.annotation.Metered;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import org.stagemonitor.core.Stagemonitor;
import org.stagemonitor.core.metrics.metrics2.Metric2Registry;
import org.stagemonitor.core.metrics.metrics2.MetricName;
public class MeteredInstrumenterTest {
private TestObject testObject = new TestObject();
private static class TestObject {
@Metered
public void meteredDefault() {
}
@Metered
private void meteredPrivate() {
}
@Metered(absolute = true)
public void meteredAbsolute() {
}
@Metered(name = "myMeteredName")
public void meteredName() {
}
@Metered(name = "myMeteredNameAbsolute", absolute = true)
public void meteredNameAbsolute() {
}
}
@BeforeClass
public static void attachProfiler() {
Stagemonitor.init();
}
@Before
@After
public void clearMetricRegistry() {
Stagemonitor.getMetric2Registry().removeMatching(MetricFilter.ALL);
}
@AfterClass
public static void resetStagemonitor() {
Stagemonitor.reset();
SharedMetricRegistries.clear();
}
@Test
public void testMeteredAspectDefault() {
testObject.meteredDefault();
assertOneMeterExists(name("rate").tag("signature", "MeteredInstrumenterTest$TestObject#meteredDefault").build());
}
@Test
public void testMeteredAspectPrivate() {
testObject.meteredPrivate();
assertEquals(1, Stagemonitor.getMetric2Registry().getMeters().size());
}
@Test
public void testMeteredAspectAbsolute() {
testObject.meteredAbsolute();
assertOneMeterExists(name("rate").tag("signature", "meteredAbsolute").build());
}
@Test
public void testMeteredName() {
testObject.meteredName();
assertOneMeterExists(name("rate").tag("signature", "MeteredInstrumenterTest$TestObject#myMeteredName").build());
}
@Test
public void testMeteredNameAbsolute() {
testObject.meteredNameAbsolute();
assertOneMeterExists(name("rate").tag("signature", "myMeteredNameAbsolute").build());
}
private void assertOneMeterExists(MetricName name) {
final Metric2Registry metricRegistry = Stagemonitor.getMetric2Registry();
assertEquals(1, metricRegistry.getMeters().size());
assertEquals(name, metricRegistry.getMeters().keySet().iterator().next());
}
}