Skip to content

Commit 4d027d7

Browse files
committed
Forward all write events in injecting NIO handler
1 parent bc670eb commit 4d027d7

6 files changed

+51
-24
lines changed

Sources/NIOInstrumentation/HTTPHeadersInjectingHandler.swift renamed to Sources/NIOInstrumentation/HeaderInjectingHTTPClientHandler.swift

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,15 +16,18 @@ import Instrumentation
1616
import NIO
1717
import NIOHTTP1
1818

19-
public final class HTTPHeadersInjectingHandler: ChannelOutboundHandler {
19+
public final class HeaderInjectingHTTPClientHandler: ChannelOutboundHandler {
2020
public typealias OutboundIn = HTTPClientRequestPart
2121
public typealias OutboundOut = HTTPClientRequestPart
2222

2323
public init() {}
2424

2525
public func write(context: ChannelHandlerContext, data: NIOAny, promise: EventLoopPromise<Void>?) {
26-
let requestPart = unwrapOutboundIn(data)
27-
guard case .head(var head) = requestPart else { return }
26+
guard case .head(var head) = self.unwrapOutboundIn(data) else {
27+
context.write(data, promise: promise)
28+
return
29+
}
30+
2831
InstrumentationSystem.instrument.inject(context.baggage, into: &head.headers, using: HTTPHeadersInjector())
2932
context.write(self.wrapOutboundOut(.head(head)), promise: promise)
3033
}

Tests/LinuxMain.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,8 @@ class LinuxMainRunnerImpl: LinuxMainRunner {
3737
XCTMain([
3838
testCase(HTTPHeadersCarrierTests.allTests),
3939
testCase(HTTPHeadersExtractInjectTests.allTests),
40-
testCase(HTTPHeadersInjectingHandlerTests.allTests),
4140
testCase(HeaderExtractingHTTPServerHandlerTests.allTests),
41+
testCase(HeaderInjectingHTTPClientHandlerTests.allTests),
4242
testCase(InstrumentTests.allTests),
4343
testCase(InstrumentationSystemTests.allTests),
4444
testCase(SpanAttributeSemanticsTests.allTests),

Tests/NIOInstrumentationTests/HTTPHeadersExtractInjectTests.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ final class HTTPHeadersExtractInjectTests: XCTestCase {
2626
func test_extracted_baggage_into_subsequent_request_headers() throws {
2727
InstrumentationSystem.bootstrapInternal(FakeTracer())
2828

29-
let outboundHandler = HTTPHeadersInjectingHandler()
29+
let outboundHandler = HeaderInjectingHTTPClientHandler()
3030
let requestHandler = MockRequestHandler()
3131
let inboundHandler = HeaderExtractingHTTPServerHandler()
3232

Tests/NIOInstrumentationTests/HeaderExtractingHTTPServerHandlerTests.swift

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -61,20 +61,23 @@ final class HeaderExtractingHTTPServerHandlerTests: XCTestCase {
6161
}
6262

6363
func test_forwards_all_read_events() throws {
64-
InstrumentationSystem.bootstrapInternal(FakeTracer())
65-
66-
let channel = EmbeddedChannel(loop: EmbeddedEventLoop())
67-
try channel.pipeline.addHandlers(HeaderExtractingHTTPServerHandler()).wait()
64+
let channel = EmbeddedChannel(
65+
handler: HeaderExtractingHTTPServerHandler(),
66+
loop: EmbeddedEventLoop()
67+
)
6868

6969
let requestHead = HTTPRequestHead(version: .init(major: 1, minor: 1), method: .GET, uri: "/")
70-
try channel.writeInbound(HTTPServerRequestPart.head(requestHead))
71-
XCTAssertNotNil(try channel.readInbound(as: HTTPServerRequestPart.self))
70+
let head = HTTPServerRequestPart.head(requestHead)
71+
try channel.writeInbound(head)
72+
XCTAssertEqual(try channel.readInbound(), head)
7273

73-
try channel.writeInbound(HTTPServerRequestPart.body(channel.allocator.buffer(string: "Test")))
74-
XCTAssertNotNil(try channel.readInbound(as: HTTPServerRequestPart.self))
74+
let body = HTTPServerRequestPart.body(channel.allocator.buffer(string: "Test"))
75+
try channel.writeInbound(body)
76+
XCTAssertEqual(try channel.readInbound(), body)
7577

76-
try channel.writeInbound(HTTPServerRequestPart.end(nil))
77-
XCTAssertNotNil(try channel.readInbound(as: HTTPServerRequestPart.self))
78+
let end = HTTPServerRequestPart.end(nil)
79+
try channel.writeInbound(end)
80+
XCTAssertEqual(try channel.readInbound(as: HTTPServerRequestPart.self), end)
7881
}
7982
}
8083

Tests/NIOInstrumentationTests/HTTPHeadersInjectingHandlerTests+XCTest.swift renamed to Tests/NIOInstrumentationTests/HeaderInjectingHTTPClientHandlerTests+XCTest.swift

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
//
1212
//===----------------------------------------------------------------------===//
1313
//
14-
// HTTPHeadersInjectingHandlerTests+XCTest.swift
14+
// HeaderInjectingHTTPClientHandlerTests+XCTest.swift
1515
//
1616
import XCTest
1717
///
@@ -20,12 +20,13 @@ import XCTest
2020
/// Do NOT edit this file directly as it will be regenerated automatically when needed.
2121
///
2222

23-
extension HTTPHeadersInjectingHandlerTests {
23+
extension HeaderInjectingHTTPClientHandlerTests {
2424

2525
@available(*, deprecated, message: "not actually deprecated. Just deprecated to allow deprecated tests (which test deprecated functionality) without warnings")
26-
static var allTests : [(String, (HTTPHeadersInjectingHandlerTests) -> () throws -> Void)] {
26+
static var allTests : [(String, (HeaderInjectingHTTPClientHandlerTests) -> () throws -> Void)] {
2727
return [
2828
("test_injects_baggage_into_http_request_headers", test_injects_baggage_into_http_request_headers),
29+
("test_forwards_all_write_events", test_forwards_all_write_events),
2930
]
3031
}
3132
}

Tests/NIOInstrumentationTests/HTTPHeadersInjectingHandlerTests.swift renamed to Tests/NIOInstrumentationTests/HeaderInjectingHTTPClientHandlerTests.swift

Lines changed: 26 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,9 @@ import NIOHTTP1
1818
import NIOInstrumentation
1919
import XCTest
2020

21-
final class HTTPHeadersInjectingHandlerTests: XCTestCase {
21+
final class HeaderInjectingHTTPClientHandlerTests: XCTestCase {
22+
private let httpVersion = HTTPVersion(major: 1, minor: 1)
23+
2224
override class func tearDown() {
2325
super.tearDown()
2426
InstrumentationSystem.bootstrapInternal(nil)
@@ -32,19 +34,37 @@ final class HTTPHeadersInjectingHandlerTests: XCTestCase {
3234
var baggage = Baggage.topLevel
3335
baggage[FakeTracer.TraceIDKey.self] = traceID
3436

35-
let httpVersion = HTTPVersion(major: 1, minor: 1)
36-
let handler = HTTPHeadersInjectingHandler()
37+
let handler = HeaderInjectingHTTPClientHandler()
3738
let loop = EmbeddedEventLoop()
3839
let channel = EmbeddedChannel(handler: handler, loop: loop)
3940
channel._channelCore.baggage = baggage
4041
let requestHead = HTTPRequestHead(version: httpVersion, method: .GET, uri: "/")
4142

4243
try channel.writeOutbound(HTTPClientRequestPart.head(requestHead))
43-
let modifiedRequestPart = try channel.readOutbound(as: HTTPClientRequestPart.self)
4444

4545
XCTAssertEqual(
46-
modifiedRequestPart,
47-
.head(.init(version: httpVersion, method: .GET, uri: "/", headers: [FakeTracer.headerName: traceID]))
46+
try channel.readOutbound(as: HTTPClientRequestPart.self),
47+
.head(.init(version: self.httpVersion, method: .GET, uri: "/", headers: [FakeTracer.headerName: traceID]))
48+
)
49+
}
50+
51+
func test_forwards_all_write_events() throws {
52+
let channel = EmbeddedChannel(
53+
handler: HeaderInjectingHTTPClientHandler(),
54+
loop: EmbeddedEventLoop()
4855
)
56+
57+
let requestHead = HTTPRequestHead(version: httpVersion, method: .GET, uri: "/")
58+
let head = HTTPClientRequestPart.head(requestHead)
59+
try channel.writeOutbound(head)
60+
XCTAssertEqual(try channel.readOutbound(), head)
61+
62+
let body = HTTPClientRequestPart.body(.byteBuffer(channel.allocator.buffer(string: "test")))
63+
try channel.writeOutbound(body)
64+
XCTAssertEqual(try channel.readOutbound(), body)
65+
66+
let end = HTTPClientRequestPart.end(nil)
67+
try channel.writeOutbound(end)
68+
XCTAssertEqual(try channel.readOutbound(), end)
4969
}
5070
}

0 commit comments

Comments
 (0)