提交 376a8989 编写于 作者: A Anna Buyevich 提交者: Brian Clozel

Add more tests to DefaultClientRequestObservationConvention

Closes gh-31125
上级 38392233
...@@ -20,10 +20,12 @@ package org.springframework.http.client.observation; ...@@ -20,10 +20,12 @@ package org.springframework.http.client.observation;
import java.io.IOException; import java.io.IOException;
import io.micrometer.common.KeyValue; import io.micrometer.common.KeyValue;
import io.micrometer.common.KeyValues;
import io.micrometer.observation.Observation; import io.micrometer.observation.Observation;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import org.springframework.http.HttpMethod; import org.springframework.http.HttpMethod;
import org.springframework.http.HttpStatusCode;
import org.springframework.http.client.ClientHttpRequest; import org.springframework.http.client.ClientHttpRequest;
import org.springframework.http.client.ClientHttpResponse; import org.springframework.http.client.ClientHttpResponse;
import org.springframework.web.testfixture.http.client.MockClientHttpRequest; import org.springframework.web.testfixture.http.client.MockClientHttpRequest;
...@@ -42,6 +44,8 @@ class DefaultClientRequestObservationConventionTests { ...@@ -42,6 +44,8 @@ class DefaultClientRequestObservationConventionTests {
private final MockClientHttpRequest request = new MockClientHttpRequest(HttpMethod.GET, "/test"); private final MockClientHttpRequest request = new MockClientHttpRequest(HttpMethod.GET, "/test");
private final static MockClientHttpResponse response = new MockClientHttpResponse();
private final DefaultClientRequestObservationConvention observationConvention = new DefaultClientRequestObservationConvention(); private final DefaultClientRequestObservationConvention observationConvention = new DefaultClientRequestObservationConvention();
@Test @Test
...@@ -65,7 +69,7 @@ class DefaultClientRequestObservationConventionTests { ...@@ -65,7 +69,7 @@ class DefaultClientRequestObservationConventionTests {
@Test @Test
void addsKeyValuesForRequestWithUriTemplate() { void addsKeyValuesForRequestWithUriTemplate() {
ClientRequestObservationContext context = createContext( ClientRequestObservationContext context = createContext(
new MockClientHttpRequest(HttpMethod.GET, "/resource/{id}", 42), new MockClientHttpResponse()); new MockClientHttpRequest(HttpMethod.GET, "/resource/{id}", 42), response);
context.setUriTemplate("/resource/{id}"); context.setUriTemplate("/resource/{id}");
assertThat(this.observationConvention.getLowCardinalityKeyValues(context)) assertThat(this.observationConvention.getLowCardinalityKeyValues(context))
.contains(KeyValue.of("exception", "none"), KeyValue.of("method", "GET"), KeyValue.of("uri", "/resource/{id}"), .contains(KeyValue.of("exception", "none"), KeyValue.of("method", "GET"), KeyValue.of("uri", "/resource/{id}"),
...@@ -76,7 +80,7 @@ class DefaultClientRequestObservationConventionTests { ...@@ -76,7 +80,7 @@ class DefaultClientRequestObservationConventionTests {
@Test @Test
void addsKeyValuesForRequestWithUriTemplateWithHost() { void addsKeyValuesForRequestWithUriTemplateWithHost() {
ClientRequestObservationContext context = createContext( ClientRequestObservationContext context = createContext(
new MockClientHttpRequest(HttpMethod.GET, "https://example.org/resource/{id}", 42), new MockClientHttpResponse()); new MockClientHttpRequest(HttpMethod.GET, "https://example.org/resource/{id}", 42), response);
context.setUriTemplate("https://example.org/resource/{id}"); context.setUriTemplate("https://example.org/resource/{id}");
assertThat(this.observationConvention.getLowCardinalityKeyValues(context)) assertThat(this.observationConvention.getLowCardinalityKeyValues(context))
.contains(KeyValue.of("exception", "none"), KeyValue.of("method", "GET"), KeyValue.of("uri", "/resource/{id}"), .contains(KeyValue.of("exception", "none"), KeyValue.of("method", "GET"), KeyValue.of("uri", "/resource/{id}"),
...@@ -88,7 +92,7 @@ class DefaultClientRequestObservationConventionTests { ...@@ -88,7 +92,7 @@ class DefaultClientRequestObservationConventionTests {
@Test @Test
void addsKeyValuesForRequestWithoutUriTemplate() { void addsKeyValuesForRequestWithoutUriTemplate() {
ClientRequestObservationContext context = createContext( ClientRequestObservationContext context = createContext(
new MockClientHttpRequest(HttpMethod.GET, "/resource/42"), new MockClientHttpResponse()); new MockClientHttpRequest(HttpMethod.GET, "/resource/42"), response);
assertThat(this.observationConvention.getLowCardinalityKeyValues(context)) assertThat(this.observationConvention.getLowCardinalityKeyValues(context))
.contains(KeyValue.of("method", "GET"), KeyValue.of("client.name", "none"), KeyValue.of("uri", "none")); .contains(KeyValue.of("method", "GET"), KeyValue.of("client.name", "none"), KeyValue.of("uri", "none"));
assertThat(this.observationConvention.getHighCardinalityKeyValues(context)).contains(KeyValue.of("http.url", "/resource/42")); assertThat(this.observationConvention.getHighCardinalityKeyValues(context)).contains(KeyValue.of("http.url", "/resource/42"));
...@@ -98,19 +102,60 @@ class DefaultClientRequestObservationConventionTests { ...@@ -98,19 +102,60 @@ class DefaultClientRequestObservationConventionTests {
void addsClientNameForRequestWithHost() { void addsClientNameForRequestWithHost() {
ClientRequestObservationContext context = createContext( ClientRequestObservationContext context = createContext(
new MockClientHttpRequest(HttpMethod.GET, "https://localhost:8080/resource/42"), new MockClientHttpRequest(HttpMethod.GET, "https://localhost:8080/resource/42"),
new MockClientHttpResponse()); response);
assertThat(this.observationConvention.getLowCardinalityKeyValues(context)).contains(KeyValue.of("client.name", "localhost")); assertThat(this.observationConvention.getLowCardinalityKeyValues(context)).contains(KeyValue.of("client.name", "localhost"));
} }
@Test @Test
void addsKeyValueForNonResolvableStatus() throws Exception { void addsKeyValueForNonResolvableStatus() throws Exception {
ClientRequestObservationContext context = new ClientRequestObservationContext(this.request);
ClientHttpResponse response = mock(); ClientHttpResponse response = mock();
context.setResponse(response); ClientRequestObservationContext context = createContext(this.request, response);
given(response.getStatusCode()).willThrow(new IOException("test error")); given(response.getStatusCode()).willThrow(new IOException("test error"));
assertThat(this.observationConvention.getLowCardinalityKeyValues(context)).contains(KeyValue.of("status", "IO_ERROR")); assertThat(this.observationConvention.getLowCardinalityKeyValues(context)).contains(KeyValue.of("status", "IO_ERROR"));
} }
@Test
void addKeyValueForNon200Response() {
MockClientHttpResponse response = new MockClientHttpResponse(new byte[0], HttpStatusCode.valueOf(400));
ClientRequestObservationContext context = createContext(request, response);
KeyValues lowCardinality = this.observationConvention.getLowCardinalityKeyValues(context);
assertThat(lowCardinality).contains(KeyValue.of("status", "400"));
}
@Test
void addKeyValuesForUnknownStatusResponse() {
MockClientHttpResponse response = new MockClientHttpResponse(new byte[0], 512);
ClientRequestObservationContext context = createContext(request, response);
KeyValues lowCardinalityKeyValues = this.observationConvention.getLowCardinalityKeyValues(context);
assertThat(lowCardinalityKeyValues).contains(KeyValue.of("status", "512"), KeyValue.of("outcome", "UNKNOWN"));
}
@Test
void addKeyValuesForRequestNull() {
ClientRequestObservationContext context = createContext(null, response);
KeyValues highCardinality = this.observationConvention.getHighCardinalityKeyValues(context);
assertThat(highCardinality).contains(KeyValue.of("http.url", "none"));
KeyValues lowCardinality = this.observationConvention.getLowCardinalityKeyValues(context);
assertThat(lowCardinality).contains(KeyValue.of("method", "none"), KeyValue.of("exception", "none"),
KeyValue.of("client.name", "none"), KeyValue.of("uri", "none")
);
}
@Test
void addKeyValueForResponseNull() {
ClientRequestObservationContext context = createContext(this.request, null);
KeyValues lowCardinality = this.observationConvention.getLowCardinalityKeyValues(context);
assertThat(lowCardinality).contains(KeyValue.of("status", "CLIENT_ERROR"));
}
@Test
void addKeyValueForContextError() {
ClientRequestObservationContext context = createContext(this.request, response);
context.setError(new RuntimeException("error"));
KeyValues lowCardinality = this.observationConvention.getLowCardinalityKeyValues(context);
assertThat(lowCardinality).contains(KeyValue.of("exception", "RuntimeException"));
}
private ClientRequestObservationContext createContext(ClientHttpRequest request, ClientHttpResponse response) { private ClientRequestObservationContext createContext(ClientHttpRequest request, ClientHttpResponse response) {
ClientRequestObservationContext context = new ClientRequestObservationContext(request); ClientRequestObservationContext context = new ClientRequestObservationContext(request);
context.setResponse(response); context.setResponse(response);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册