Includes the input headers for gateway; fixes gh-1198

This commit is contained in:
Marcin Grzejszczak
2019-01-28 18:27:32 +01:00
parent fc257fb2be
commit dd54f1e1a9
2 changed files with 24 additions and 3 deletions

View File

@@ -55,7 +55,10 @@ class TraceRequestHttpHeadersFilter extends AbstractHttpHeadersFilter {
+ builder.build().getHeaders().toSingleValueMap());
}
exchange.getAttributes().put(SPAN_ATTRIBUTE, span);
return new HttpHeaders(builder.build().getHeaders());
HttpHeaders headersWithInput = new HttpHeaders();
headersWithInput.addAll(input);
headersWithInput.addAll(builder.build().getHeaders());
return headersWithInput;
}
@Override

View File

@@ -1,5 +1,7 @@
package org.springframework.cloud.sleuth.instrument.web.client;
import java.util.Collections;
import brave.Tracing;
import brave.http.HttpTracing;
import brave.propagation.StrictScopeDecorator;
@@ -28,18 +30,23 @@ public class TraceRequestHttpHeadersFilterTests {
public void should_override_span_tracing_headers() {
HttpHeadersFilter filter = TraceRequestHttpHeadersFilter.create(this.httpTracing);
HttpHeaders httpHeaders = new HttpHeaders();
httpHeaders.set("X-Hello", "World");
httpHeaders.set("X-B3-TraceId", "52f112af7472aff0");
httpHeaders.set("X-B3-SpanId", "53e6ab6fc5dfee58");
MockServerHttpRequest request = MockServerHttpRequest.post("foo/bar")
.headers(httpHeaders).build();
MockServerWebExchange exchange = MockServerWebExchange.builder(request).build();
HttpHeaders filteredHeaders = filter.filter(httpHeaders, exchange);
HttpHeaders filteredHeaders = filter.filter(requestHeaders(), exchange);
BDDAssertions.then(filteredHeaders.get("X-B3-TraceId"))
.isNotEqualTo(httpHeaders.get("X-B3-TraceId"));
BDDAssertions.then(filteredHeaders.get("X-B3-SpanId"))
.isNotEqualTo(httpHeaders.get("X-B3-SpanId"));
BDDAssertions.then(filteredHeaders.get("X-Hello"))
.isEqualTo(Collections.singletonList("World"));
BDDAssertions.then(filteredHeaders.get("X-Hello-Request"))
.isEqualTo(Collections.singletonList("Request World"));
BDDAssertions
.then((Object) exchange
.getAttribute(TraceRequestHttpHeadersFilter.SPAN_ATTRIBUTE))
@@ -50,18 +57,29 @@ public class TraceRequestHttpHeadersFilterTests {
public void should_set_tracing_headers() {
HttpHeadersFilter filter = TraceRequestHttpHeadersFilter.create(this.httpTracing);
HttpHeaders httpHeaders = new HttpHeaders();
httpHeaders.set("X-Hello", "World");
MockServerHttpRequest request = MockServerHttpRequest.post("foo/bar")
.headers(httpHeaders).build();
MockServerWebExchange exchange = MockServerWebExchange.builder(request).build();
HttpHeaders filteredHeaders = filter.filter(httpHeaders, exchange);
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(Collections.singletonList("World"));
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");
return headers;
}
}