From dd54f1e1a923f43d00ff1fd9141c537b067d8be5 Mon Sep 17 00:00:00 2001 From: Marcin Grzejszczak Date: Mon, 28 Jan 2019 18:27:32 +0100 Subject: [PATCH] Includes the input headers for gateway; fixes gh-1198 --- .../client/TraceRequestHttpHeadersFilter.java | 5 ++++- .../TraceRequestHttpHeadersFilterTests.java | 22 +++++++++++++++++-- 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/web/client/TraceRequestHttpHeadersFilter.java b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/web/client/TraceRequestHttpHeadersFilter.java index 4774b910c..902d856e0 100644 --- a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/web/client/TraceRequestHttpHeadersFilter.java +++ b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/web/client/TraceRequestHttpHeadersFilter.java @@ -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 diff --git a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/client/TraceRequestHttpHeadersFilterTests.java b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/client/TraceRequestHttpHeadersFilterTests.java index 90eae741d..26e253907 100644 --- a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/client/TraceRequestHttpHeadersFilterTests.java +++ b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/client/TraceRequestHttpHeadersFilterTests.java @@ -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; + } + } \ No newline at end of file