Esnures that multivalue headers are propagated in the Gateway; fixes gh-1352
This commit is contained in:
@@ -57,8 +57,8 @@ final class TraceRequestHttpHeadersFilter extends AbstractHttpHeadersFilter {
|
||||
}
|
||||
exchange.getAttributes().put(SPAN_ATTRIBUTE, span);
|
||||
HttpHeaders headersWithInput = new HttpHeaders();
|
||||
headersWithInput.setAll(input.toSingleValueMap());
|
||||
headersWithInput.setAll(builder.build().getHeaders().toSingleValueMap());
|
||||
headersWithInput.addAll(input);
|
||||
builder.build().getHeaders().forEach(headersWithInput::put);
|
||||
return headersWithInput;
|
||||
}
|
||||
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
|
||||
package org.springframework.cloud.sleuth.instrument.web.client;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
|
||||
import brave.Tracing;
|
||||
@@ -94,6 +95,30 @@ public class TraceRequestHttpHeadersFilterTests {
|
||||
.isNotNull();
|
||||
}
|
||||
|
||||
// #1352
|
||||
@Test
|
||||
public void should_set_tracing_headers_with_multiple_values() {
|
||||
HttpHeadersFilter filter = TraceRequestHttpHeadersFilter.create(this.httpTracing);
|
||||
HttpHeaders httpHeaders = new HttpHeaders();
|
||||
httpHeaders.addAll("X-Hello", Arrays.asList("World1", "World2"));
|
||||
MockServerHttpRequest request = MockServerHttpRequest.post("foo/bar")
|
||||
.headers(httpHeaders).build();
|
||||
MockServerWebExchange exchange = MockServerWebExchange.builder(request).build();
|
||||
|
||||
HttpHeaders filteredHeaders = filter.filter(requestHeaders(), exchange);
|
||||
|
||||
BDDAssertions.then(filteredHeaders.get("X-B3-TraceId")).isNotEmpty();
|
||||
BDDAssertions.then(filteredHeaders.get("X-B3-SpanId")).isNotEmpty();
|
||||
BDDAssertions.then(filteredHeaders.get("X-Hello"))
|
||||
.isEqualTo(Arrays.asList("World1", "World2"));
|
||||
BDDAssertions.then(filteredHeaders.get("X-Hello-Request"))
|
||||
.isEqualTo(Collections.singletonList("Request World"));
|
||||
BDDAssertions
|
||||
.then((Object) exchange
|
||||
.getAttribute(TraceRequestHttpHeadersFilter.SPAN_ATTRIBUTE))
|
||||
.isNotNull();
|
||||
}
|
||||
|
||||
private HttpHeaders requestHeaders() {
|
||||
HttpHeaders headers = new HttpHeaders();
|
||||
headers.add("X-Hello-Request", "Request World");
|
||||
|
||||
Reference in New Issue
Block a user