Skip to content

Commit bc670eb

Browse files
committed
Respect previous baggage values in extracting NIO handler
1 parent 913ee3d commit bc670eb

File tree

3 files changed

+30
-5
lines changed

3 files changed

+30
-5
lines changed

Sources/NIOInstrumentation/HeaderExtractingHTTPServerHandler.swift

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,11 @@ public final class HeaderExtractingHTTPServerHandler: ChannelInboundHandler {
2929

3030
public func channelRead(context: ChannelHandlerContext, data: NIOAny) {
3131
if case .head(let head) = self.unwrapInboundIn(data) {
32-
var baggage = Baggage.topLevel
33-
InstrumentationSystem.instrument.extract(head.headers, into: &baggage, using: HTTPHeadersExtractor())
34-
context.baggage = baggage
32+
InstrumentationSystem.instrument.extract(
33+
head.headers,
34+
into: &context.baggage,
35+
using: HTTPHeadersExtractor()
36+
)
3537
}
3638

3739
context.fireChannelRead(data)

Tests/NIOInstrumentationTests/HeaderExtractingHTTPServerHandlerTests+XCTest.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ extension HeaderExtractingHTTPServerHandlerTests {
2626
static var allTests : [(String, (HeaderExtractingHTTPServerHandlerTests) -> () throws -> Void)] {
2727
return [
2828
("test_extracts_http_request_headers_into_baggage", test_extracts_http_request_headers_into_baggage),
29+
("test_respects_previous_baggage_values", test_respects_previous_baggage_values),
2930
("test_forwards_all_read_events", test_forwards_all_read_events),
3031
]
3132
}

Tests/NIOInstrumentationTests/HeaderExtractingHTTPServerHandlerTests.swift

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,7 @@ final class HeaderExtractingHTTPServerHandlerTests: XCTestCase {
2929

3030
let traceID = "abc"
3131
let handler = HeaderExtractingHTTPServerHandler()
32-
let loop = EmbeddedEventLoop()
33-
let channel = EmbeddedChannel(handler: handler, loop: loop)
32+
let channel = EmbeddedChannel(handler: handler, loop: EmbeddedEventLoop())
3433

3534
var requestHead = HTTPRequestHead(version: .init(major: 1, minor: 1), method: .GET, uri: "/")
3635
requestHead.headers = [FakeTracer.headerName: traceID]
@@ -42,6 +41,25 @@ final class HeaderExtractingHTTPServerHandlerTests: XCTestCase {
4241
XCTAssertEqual(channel._channelCore.baggage[FakeTracer.TraceIDKey.self], traceID)
4342
}
4443

44+
func test_respects_previous_baggage_values() throws {
45+
InstrumentationSystem.bootstrapInternal(FakeTracer())
46+
47+
let traceID = "abc"
48+
let handler = HeaderExtractingHTTPServerHandler()
49+
let channel = EmbeddedChannel(handler: handler, loop: EmbeddedEventLoop())
50+
channel._channelCore.baggage[TestKey.self] = "test"
51+
52+
var requestHead = HTTPRequestHead(version: .init(major: 1, minor: 1), method: .GET, uri: "/")
53+
requestHead.headers = [FakeTracer.headerName: traceID]
54+
55+
XCTAssertNil(channel._channelCore.baggage[FakeTracer.TraceIDKey.self])
56+
57+
try channel.writeInbound(HTTPServerRequestPart.head(requestHead))
58+
59+
XCTAssertEqual(channel._channelCore.baggage[FakeTracer.TraceIDKey.self], traceID)
60+
XCTAssertEqual(channel._channelCore.baggage[TestKey.self], "test")
61+
}
62+
4563
func test_forwards_all_read_events() throws {
4664
InstrumentationSystem.bootstrapInternal(FakeTracer())
4765

@@ -59,3 +77,7 @@ final class HeaderExtractingHTTPServerHandlerTests: XCTestCase {
5977
XCTAssertNotNil(try channel.readInbound(as: HTTPServerRequestPart.self))
6078
}
6179
}
80+
81+
private enum TestKey: Baggage.Key {
82+
typealias Value = String
83+
}

0 commit comments

Comments
 (0)