package bo.gotthardt.metrics;
import bo.gotthardt.test.ApiIntegrationTest;
import com.codahale.metrics.MetricRegistry;
import com.google.common.net.MediaType;
import io.dropwizard.testing.junit.ResourceTestRule;
import org.junit.Before;
import org.junit.ClassRule;
import org.junit.Test;
import javax.ws.rs.core.Response;
import java.util.concurrent.TimeUnit;
import static bo.gotthardt.test.assertj.DropwizardAssertions.assertThat;
/**
* Tests for {@link bo.gotthardt.metrics.MetricsResource}.
*/
public class MetricsResourceTest extends ApiIntegrationTest {
private static final MetricRegistry metrics = new MetricRegistry();
@ClassRule
public static final ResourceTestRule resources = ResourceTestRule.builder()
.addResource(new MetricsResource(metrics))
.build();
@Before
public void clearMetrics() {
metrics.getNames().forEach(metrics::remove);
}
@Test
public void shouldIncreaseMeterByOneByDefault() {
assertThat(POST("/metrics/meter/test", null)).hasStatus(Response.Status.NO_CONTENT);
assertThat(metrics.meter("test").getCount()).isEqualTo(1);
}
@Test
public void shouldIncreaseMeterByQueryValue() {
assertThat(POST("/metrics/meter/test?value=5", null)).hasStatus(Response.Status.NO_CONTENT);
assertThat(metrics.meter("test").getCount()).isEqualTo(5);
}
@Test
public void shouldUpdateTimerWithQueryValue() {
assertThat(POST("/metrics/timer/test?value=1000", null)).hasStatus(Response.Status.NO_CONTENT);
assertThat(metrics.timer("test").getSnapshot().getValues()[0]).isEqualTo(TimeUnit.MILLISECONDS.toNanos(1000));
}
@Test
public void shouldReturnGif() {
assertThat(GET("/metrics/meter/test.gif?value=1"))
.hasStatus(Response.Status.OK)
.hasContentType(MediaType.GIF);
assertThat(metrics.meter("test").getCount()).isEqualTo(1);
}
@Override
public ResourceTestRule getResources() {
return resources;
}
}