Skip to content

Commit 376a898

Browse files
Anna Buyevichbclozel
Anna Buyevich
authored andcommitted
Add more tests to DefaultClientRequestObservationConvention
Closes gh-31125
1 parent 3839223 commit 376a898

File tree

1 file changed

+51
-6
lines changed

1 file changed

+51
-6
lines changed

spring-web/src/test/java/org/springframework/http/client/observation/DefaultClientRequestObservationConventionTests.java

+51-6
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,12 @@
2020
import java.io.IOException;
2121

2222
import io.micrometer.common.KeyValue;
23+
import io.micrometer.common.KeyValues;
2324
import io.micrometer.observation.Observation;
2425
import org.junit.jupiter.api.Test;
2526

2627
import org.springframework.http.HttpMethod;
28+
import org.springframework.http.HttpStatusCode;
2729
import org.springframework.http.client.ClientHttpRequest;
2830
import org.springframework.http.client.ClientHttpResponse;
2931
import org.springframework.web.testfixture.http.client.MockClientHttpRequest;
@@ -42,6 +44,8 @@ class DefaultClientRequestObservationConventionTests {
4244

4345
private final MockClientHttpRequest request = new MockClientHttpRequest(HttpMethod.GET, "/test");
4446

47+
private final static MockClientHttpResponse response = new MockClientHttpResponse();
48+
4549
private final DefaultClientRequestObservationConvention observationConvention = new DefaultClientRequestObservationConvention();
4650

4751
@Test
@@ -65,7 +69,7 @@ void supportsOnlyClientHttpObservationContext() {
6569
@Test
6670
void addsKeyValuesForRequestWithUriTemplate() {
6771
ClientRequestObservationContext context = createContext(
68-
new MockClientHttpRequest(HttpMethod.GET, "/resource/{id}", 42), new MockClientHttpResponse());
72+
new MockClientHttpRequest(HttpMethod.GET, "/resource/{id}", 42), response);
6973
context.setUriTemplate("/resource/{id}");
7074
assertThat(this.observationConvention.getLowCardinalityKeyValues(context))
7175
.contains(KeyValue.of("exception", "none"), KeyValue.of("method", "GET"), KeyValue.of("uri", "/resource/{id}"),
@@ -76,7 +80,7 @@ void addsKeyValuesForRequestWithUriTemplate() {
7680
@Test
7781
void addsKeyValuesForRequestWithUriTemplateWithHost() {
7882
ClientRequestObservationContext context = createContext(
79-
new MockClientHttpRequest(HttpMethod.GET, "https://example.org/resource/{id}", 42), new MockClientHttpResponse());
83+
new MockClientHttpRequest(HttpMethod.GET, "https://example.org/resource/{id}", 42), response);
8084
context.setUriTemplate("https://example.org/resource/{id}");
8185
assertThat(this.observationConvention.getLowCardinalityKeyValues(context))
8286
.contains(KeyValue.of("exception", "none"), KeyValue.of("method", "GET"), KeyValue.of("uri", "/resource/{id}"),
@@ -88,7 +92,7 @@ void addsKeyValuesForRequestWithUriTemplateWithHost() {
8892
@Test
8993
void addsKeyValuesForRequestWithoutUriTemplate() {
9094
ClientRequestObservationContext context = createContext(
91-
new MockClientHttpRequest(HttpMethod.GET, "/resource/42"), new MockClientHttpResponse());
95+
new MockClientHttpRequest(HttpMethod.GET, "/resource/42"), response);
9296
assertThat(this.observationConvention.getLowCardinalityKeyValues(context))
9397
.contains(KeyValue.of("method", "GET"), KeyValue.of("client.name", "none"), KeyValue.of("uri", "none"));
9498
assertThat(this.observationConvention.getHighCardinalityKeyValues(context)).contains(KeyValue.of("http.url", "/resource/42"));
@@ -98,19 +102,60 @@ void addsKeyValuesForRequestWithoutUriTemplate() {
98102
void addsClientNameForRequestWithHost() {
99103
ClientRequestObservationContext context = createContext(
100104
new MockClientHttpRequest(HttpMethod.GET, "https://localhost:8080/resource/42"),
101-
new MockClientHttpResponse());
105+
response);
102106
assertThat(this.observationConvention.getLowCardinalityKeyValues(context)).contains(KeyValue.of("client.name", "localhost"));
103107
}
104108

105109
@Test
106110
void addsKeyValueForNonResolvableStatus() throws Exception {
107-
ClientRequestObservationContext context = new ClientRequestObservationContext(this.request);
108111
ClientHttpResponse response = mock();
109-
context.setResponse(response);
112+
ClientRequestObservationContext context = createContext(this.request, response);
110113
given(response.getStatusCode()).willThrow(new IOException("test error"));
111114
assertThat(this.observationConvention.getLowCardinalityKeyValues(context)).contains(KeyValue.of("status", "IO_ERROR"));
112115
}
113116

117+
@Test
118+
void addKeyValueForNon200Response() {
119+
MockClientHttpResponse response = new MockClientHttpResponse(new byte[0], HttpStatusCode.valueOf(400));
120+
ClientRequestObservationContext context = createContext(request, response);
121+
KeyValues lowCardinality = this.observationConvention.getLowCardinalityKeyValues(context);
122+
assertThat(lowCardinality).contains(KeyValue.of("status", "400"));
123+
}
124+
125+
@Test
126+
void addKeyValuesForUnknownStatusResponse() {
127+
MockClientHttpResponse response = new MockClientHttpResponse(new byte[0], 512);
128+
ClientRequestObservationContext context = createContext(request, response);
129+
KeyValues lowCardinalityKeyValues = this.observationConvention.getLowCardinalityKeyValues(context);
130+
assertThat(lowCardinalityKeyValues).contains(KeyValue.of("status", "512"), KeyValue.of("outcome", "UNKNOWN"));
131+
}
132+
133+
@Test
134+
void addKeyValuesForRequestNull() {
135+
ClientRequestObservationContext context = createContext(null, response);
136+
KeyValues highCardinality = this.observationConvention.getHighCardinalityKeyValues(context);
137+
assertThat(highCardinality).contains(KeyValue.of("http.url", "none"));
138+
KeyValues lowCardinality = this.observationConvention.getLowCardinalityKeyValues(context);
139+
assertThat(lowCardinality).contains(KeyValue.of("method", "none"), KeyValue.of("exception", "none"),
140+
KeyValue.of("client.name", "none"), KeyValue.of("uri", "none")
141+
);
142+
}
143+
144+
@Test
145+
void addKeyValueForResponseNull() {
146+
ClientRequestObservationContext context = createContext(this.request, null);
147+
KeyValues lowCardinality = this.observationConvention.getLowCardinalityKeyValues(context);
148+
assertThat(lowCardinality).contains(KeyValue.of("status", "CLIENT_ERROR"));
149+
}
150+
151+
@Test
152+
void addKeyValueForContextError() {
153+
ClientRequestObservationContext context = createContext(this.request, response);
154+
context.setError(new RuntimeException("error"));
155+
KeyValues lowCardinality = this.observationConvention.getLowCardinalityKeyValues(context);
156+
assertThat(lowCardinality).contains(KeyValue.of("exception", "RuntimeException"));
157+
}
158+
114159
private ClientRequestObservationContext createContext(ClientHttpRequest request, ClientHttpResponse response) {
115160
ClientRequestObservationContext context = new ClientRequestObservationContext(request);
116161
context.setResponse(response);

0 commit comments

Comments
 (0)