package org.stagemonitor.core.metrics.annotations;
import com.codahale.metrics.MetricFilter;
import com.codahale.metrics.annotation.Timed;
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;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.stagemonitor.core.metrics.metrics2.MetricName.name;
public class TimedInstrumenterTest {
private TestObject testObject = new TestObject();
private static class TestObject {
@Timed
public void timedDefault() {
}
@Timed
private void timedPrivate() {
}
@Timed(absolute = true)
public void timedAbsolute() {
}
@Timed(name = "myTimedName")
public void timedName() {
}
@Timed(name = "myTimedNameAbsolute", absolute = true)
public void timedNameAbsolute() {
}
}
@BeforeClass
public static void attachProfiler() {
Stagemonitor.init();
}
@Before
public void before() {
Stagemonitor.getMetric2Registry().removeMatching(MetricFilter.ALL);
}
@Test
public void testTimedAspectDefault() {
testObject.timedDefault();
assertOneTimerExists(name("timer").tag("signature", "TimedInstrumenterTest$TestObject#timedDefault").build());
}
@Test
public void testTimedAspectPrivate() {
testObject.timedPrivate();
assertEquals(1, Stagemonitor.getMetric2Registry().getTimers().size());
}
@Test
public void testTimedAspectAbsolute() {
testObject.timedAbsolute();
assertOneTimerExists(name("timer").tag("signature", "timedAbsolute").build());
}
@Test
public void testTimedName() {
testObject.timedName();
assertOneTimerExists(name("timer").tag("signature", "TimedInstrumenterTest$TestObject#myTimedName").build());
}
@Test
public void testTimedNameAbsolute() {
testObject.timedNameAbsolute();
assertOneTimerExists(name("timer").tag("signature", "myTimedNameAbsolute").build());
}
private void assertOneTimerExists(MetricName name) {
final Metric2Registry metricRegistry = Stagemonitor.getMetric2Registry();
assertNotNull(metricRegistry.getTimers().keySet().toString(), metricRegistry.getTimers().get(name));
}
}