Skip to content

Commit 3296f15

Browse files
authored
Merge pull request #147 from slashmo/fix/http-headers-carrier-extract-no-value
Return nil when extracting empty header value
2 parents fa3265f + 6ab2fc4 commit 3296f15

File tree

3 files changed

+15
-2
lines changed

3 files changed

+15
-2
lines changed

Sources/NIOInstrumentation/HTTPHeadersCarrier.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,11 @@ public struct HTTPHeadersExtractor: ExtractorProtocol {
2323
public init() {}
2424

2525
public func extract(key: String, from headers: HTTPHeaders) -> String? {
26-
return headers
26+
let headers = headers
2727
.lazy
2828
.filter { $0.name == key }
2929
.map { $0.value }
30-
.joined(separator: ",")
30+
return headers.isEmpty ? nil : headers.joined(separator: ",")
3131
}
3232
}
3333

Tests/NIOInstrumentationTests/HTTPHeadersCarrierTests+XCTest.swift

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

Tests/NIOInstrumentationTests/HTTPHeadersCarrierTests.swift

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,18 @@ final class HTTPHeadersCarrierTests: XCTestCase {
3535
)
3636
}
3737

38+
func testExtractNoHeader() {
39+
let extractor = HTTPHeadersExtractor()
40+
41+
XCTAssertNil(extractor.extract(key: "test", from: .init()))
42+
}
43+
44+
func testExtractEmptyHeader() {
45+
let extractor = HTTPHeadersExtractor()
46+
47+
XCTAssertEqual(extractor.extract(key: "test", from: ["test": ""]), "")
48+
}
49+
3850
func testExtractMultipleHeadersOfSameName() {
3951
let headers: HTTPHeaders = [
4052
"tracestate": "vendorname1=opaqueValue1",

0 commit comments

Comments
 (0)