package io.dropwizard.metrics.jersey2;
import io.dropwizard.metrics.Meter;
import io.dropwizard.metrics.MetricRegistry;
import io.dropwizard.metrics.jersey2.resources.InstrumentedResourceMeteredPerClass;
import io.dropwizard.metrics.jersey2.resources.InstrumentedSubResourceMeteredPerClass;
import org.glassfish.jersey.server.ResourceConfig;
import org.glassfish.jersey.test.JerseyTest;
import org.junit.Test;
import javax.ws.rs.core.Application;
import java.util.logging.Level;
import java.util.logging.Logger;
import static io.dropwizard.metrics.MetricRegistry.name;
import static org.assertj.core.api.Assertions.assertThat;
/**
* Tests registering {@link InstrumentedResourceMethodApplicationListener} as a singleton
* in a Jersey {@link ResourceConfig}
*/
public class SingletonMetricsMeteredPerClassJerseyTest extends JerseyTest {
static {
Logger.getLogger("org.glassfish.jersey").setLevel(Level.OFF);
}
private MetricRegistry registry;
@Override
protected Application configure() {
this.registry = new MetricRegistry();
ResourceConfig config = new ResourceConfig();
config = config.register(new MetricsFeature(this.registry));
config = config.register(InstrumentedResourceMeteredPerClass.class);
return config;
}
@Test
public void meteredPerClassMethodsAreMetered() {
assertThat(target("meteredPerClass")
.request()
.get(String.class))
.isEqualTo("yay");
final Meter meter = registry.meter(name(InstrumentedResourceMeteredPerClass.class, "meteredPerClass"));
assertThat(meter.getCount()).isEqualTo(1);
}
@Test
public void subresourcesFromLocatorsRegisterMetrics() {
assertThat(target("subresource/meteredPerClass")
.request()
.get(String.class))
.isEqualTo("yay");
final Meter meter = registry.meter(name(InstrumentedSubResourceMeteredPerClass.class, "meteredPerClass"));
assertThat(meter.getCount()).isEqualTo(1);
}
}