package io.dropwizard.metrics.httpclient; import static io.dropwizard.metrics.httpclient.HttpClientMetricNameStrategies.*; import org.apache.http.HttpRequest; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPost; import org.apache.http.client.methods.HttpPut; import org.apache.http.client.methods.HttpRequestWrapper; import org.apache.http.client.utils.URIUtils; import org.junit.Test; import java.net.URI; import java.net.URISyntaxException; import io.dropwizard.metrics.MetricName; import static org.hamcrest.CoreMatchers.is; import static org.junit.Assert.assertThat; public class HttpClientMetricNameStrategiesTest { @Test public void methodOnlyWithName() { assertThat(METHOD_ONLY.getNameFor("some-service", new HttpGet("/whatever")), is(MetricName.build("org.apache.http.client.HttpClient.some-service.get-requests"))); } @Test public void methodOnlyWithoutName() { assertThat(METHOD_ONLY.getNameFor(null, new HttpGet("/whatever")), is(MetricName.build("org.apache.http.client.HttpClient.get-requests"))); } @Test public void hostAndMethodWithName() { assertThat(HOST_AND_METHOD.getNameFor("some-service", new HttpPost("http://my.host.com/whatever")), is(MetricName.build("org.apache.http.client.HttpClient.some-service.my.host.com.post-requests"))); } @Test public void hostAndMethodWithoutName() { assertThat(HOST_AND_METHOD.getNameFor(null, new HttpPost("http://my.host.com/whatever")), is(MetricName.build("org.apache.http.client.HttpClient.my.host.com.post-requests"))); } @Test public void querylessUrlAndMethodWithName() { assertThat(QUERYLESS_URL_AND_METHOD.getNameFor( "some-service", new HttpPut("https://thing.com:8090/my/path?ignore=this&and=this")), is(MetricName.build("org.apache.http.client.HttpClient.some-service.https://thing.com:8090/my/path.put-requests"))); } @Test public void hostAndMethodWithNameInWrappedRequest() throws URISyntaxException { HttpRequest request = rewriteRequestURI(new HttpPost("http://my.host.com/whatever")); assertThat(HOST_AND_METHOD.getNameFor("some-service", request), is(new MetricName("org.apache.http.client.HttpClient.some-service.my.host.com.post-requests"))); } @Test public void hostAndMethodWithoutNameInWrappedRequest() throws URISyntaxException { HttpRequest request = rewriteRequestURI(new HttpPost("http://my.host.com/whatever")); assertThat(HOST_AND_METHOD.getNameFor(null, request), is(new MetricName("org.apache.http.client.HttpClient.my.host.com.post-requests"))); } @Test public void querylessUrlAndMethodWithNameInWrappedRequest() throws URISyntaxException { HttpRequest request = rewriteRequestURI(new HttpPut("https://thing.com:8090/my/path?ignore=this&and=this")); assertThat(QUERYLESS_URL_AND_METHOD.getNameFor("some-service", request), is(new MetricName("org.apache.http.client.HttpClient.some-service.https://thing.com:8090/my/path.put-requests"))); } private static HttpRequest rewriteRequestURI(HttpRequest request) throws URISyntaxException { HttpRequestWrapper wrapper = HttpRequestWrapper.wrap(request); URI uri = URIUtils.rewriteURI(wrapper.getURI(), null, true); wrapper.setURI(uri); return wrapper; } }