Skip to content

Commit 7f31443

Browse files
authored
Merge branch 'master' into check_body_length
2 parents 97a8e96 + f2aef45 commit 7f31443

File tree

4 files changed

+61
-13
lines changed

4 files changed

+61
-13
lines changed

Diff for: Sources/AsyncHTTPClient/HTTPHandler.swift

+7-2
Original file line numberDiff line numberDiff line change
@@ -773,8 +773,13 @@ extension TaskHandler: ChannelDuplexHandler {
773773
uri: request.uri)
774774
var headers = request.headers
775775

776-
if !request.headers.contains(name: "Host") {
777-
headers.add(name: "Host", value: request.host)
776+
if !request.headers.contains(name: "host") {
777+
let port = request.port
778+
var host = request.host
779+
if !(port == 80 && request.scheme == "http"), !(port == 443 && request.scheme == "https") {
780+
host += ":\(port)"
781+
}
782+
headers.add(name: "host", value: host)
778783
}
779784

780785
do {

Diff for: Tests/AsyncHTTPClientTests/HTTPClientInternalTests+XCTest.swift

+1
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ extension HTTPClientInternalTests {
2727
return [
2828
("testHTTPPartsHandler", testHTTPPartsHandler),
2929
("testBadHTTPRequest", testBadHTTPRequest),
30+
("testHostPort", testHostPort),
3031
("testHTTPPartsHandlerMultiBody", testHTTPPartsHandlerMultiBody),
3132
("testProxyStreaming", testProxyStreaming),
3233
("testProxyStreamingFailure", testProxyStreamingFailure),

Diff for: Tests/AsyncHTTPClientTests/HTTPClientInternalTests.swift

+45-3
Original file line numberDiff line numberDiff line change
@@ -23,17 +23,23 @@ class HTTPClientInternalTests: XCTestCase {
2323
typealias Request = HTTPClient.Request
2424
typealias Task = HTTPClient.Task
2525

26+
var serverGroup: EventLoopGroup!
2627
var clientGroup: EventLoopGroup!
2728

2829
override func setUp() {
2930
XCTAssertNil(self.clientGroup)
31+
XCTAssertNil(self.serverGroup)
32+
self.serverGroup = MultiThreadedEventLoopGroup(numberOfThreads: 1)
3033
self.clientGroup = getDefaultEventLoopGroup(numberOfThreads: 1)
3134
}
3235

3336
override func tearDown() {
37+
XCTAssertNotNil(self.serverGroup)
38+
XCTAssertNoThrow(try self.serverGroup.syncShutdownGracefully())
3439
XCTAssertNotNil(self.clientGroup)
3540
XCTAssertNoThrow(try self.clientGroup.syncShutdownGracefully())
3641
self.clientGroup = nil
42+
self.serverGroup = nil
3743
}
3844

3945
func testHTTPPartsHandler() throws {
@@ -49,15 +55,15 @@ class HTTPClientInternalTests: XCTestCase {
4955
ignoreUncleanSSLShutdown: false,
5056
logger: HTTPClient.loggingDisabled)).wait()
5157

52-
var request = try Request(url: "http://localhost/get")
58+
var request = try Request(url: "http://localhost:8080/get")
5359
request.headers.add(name: "X-Test-Header", value: "X-Test-Value")
5460
request.body = .string("1234")
5561

5662
XCTAssertNoThrow(try channel.writeOutbound(request))
5763
XCTAssertEqual(3, recorder.writes.count)
5864
var head = HTTPRequestHead(version: HTTPVersion(major: 1, minor: 1), method: .GET, uri: "/get")
5965
head.headers.add(name: "X-Test-Header", value: "X-Test-Value")
60-
head.headers.add(name: "Host", value: "localhost")
66+
head.headers.add(name: "Host", value: "localhost:8080")
6167
head.headers.add(name: "Content-Length", value: "4")
6268
XCTAssertEqual(HTTPClientRequestPart.head(head), recorder.writes[0])
6369
let buffer = ByteBuffer.of(string: "1234")
@@ -90,6 +96,42 @@ class HTTPClientInternalTests: XCTestCase {
9096
}
9197
}
9298

99+
func testHostPort() throws {
100+
let channel = EmbeddedChannel()
101+
let recorder = RecordingHandler<HTTPClientResponsePart, HTTPClientRequestPart>()
102+
let task = Task<Void>(eventLoop: channel.eventLoop, logger: HTTPClient.loggingDisabled)
103+
104+
try channel.pipeline.addHandler(recorder).wait()
105+
try channel.pipeline.addHandler(TaskHandler(task: task,
106+
kind: .host,
107+
delegate: TestHTTPDelegate(),
108+
redirectHandler: nil,
109+
ignoreUncleanSSLShutdown: false,
110+
logger: HTTPClient.loggingDisabled)).wait()
111+
112+
let request1 = try Request(url: "http://localhost:80/get")
113+
XCTAssertNoThrow(try channel.writeOutbound(request1))
114+
let request2 = try Request(url: "https://localhost/get")
115+
XCTAssertNoThrow(try channel.writeOutbound(request2))
116+
let request3 = try Request(url: "http://localhost:8080/get")
117+
XCTAssertNoThrow(try channel.writeOutbound(request3))
118+
let request4 = try Request(url: "http://localhost:443/get")
119+
XCTAssertNoThrow(try channel.writeOutbound(request4))
120+
let request5 = try Request(url: "https://localhost:80/get")
121+
XCTAssertNoThrow(try channel.writeOutbound(request5))
122+
123+
let head1 = HTTPRequestHead(version: HTTPVersion(major: 1, minor: 1), method: .GET, uri: "/get", headers: ["host": "localhost"])
124+
XCTAssertEqual(HTTPClientRequestPart.head(head1), recorder.writes[0])
125+
let head2 = HTTPRequestHead(version: HTTPVersion(major: 1, minor: 1), method: .GET, uri: "/get", headers: ["host": "localhost"])
126+
XCTAssertEqual(HTTPClientRequestPart.head(head2), recorder.writes[2])
127+
let head3 = HTTPRequestHead(version: HTTPVersion(major: 1, minor: 1), method: .GET, uri: "/get", headers: ["host": "localhost:8080"])
128+
XCTAssertEqual(HTTPClientRequestPart.head(head3), recorder.writes[4])
129+
let head4 = HTTPRequestHead(version: HTTPVersion(major: 1, minor: 1), method: .GET, uri: "/get", headers: ["host": "localhost:443"])
130+
XCTAssertEqual(HTTPClientRequestPart.head(head4), recorder.writes[6])
131+
let head5 = HTTPRequestHead(version: HTTPVersion(major: 1, minor: 1), method: .GET, uri: "/get", headers: ["host": "localhost:80"])
132+
XCTAssertEqual(HTTPClientRequestPart.head(head5), recorder.writes[8])
133+
}
134+
93135
func testHTTPPartsHandlerMultiBody() throws {
94136
let channel = EmbeddedChannel()
95137
let delegate = TestHTTPDelegate()
@@ -797,7 +839,7 @@ class HTTPClientInternalTests: XCTestCase {
797839
}
798840

799841
func testUncleanCloseThrows() {
800-
let server = NIOHTTP1TestServer(group: self.clientGroup)
842+
let server = NIOHTTP1TestServer(group: self.serverGroup)
801843
defer {
802844
XCTAssertNoThrow(try server.stop())
803845
}

Diff for: Tests/AsyncHTTPClientTests/HTTPClientTests.swift

+8-8
Original file line numberDiff line numberDiff line change
@@ -216,7 +216,7 @@ class HTTPClientTests: XCTestCase {
216216
return
217217
}
218218
let hostName = try? JSONDecoder().decode(RequestInfo.self, from: body).data
219-
XCTAssertEqual("127.0.0.1", hostName)
219+
XCTAssertEqual("127.0.0.1:\(self.defaultHTTPBin.port)", hostName)
220220
}
221221

222222
func testPercentEncoded() throws {
@@ -763,7 +763,7 @@ class HTTPClientTests: XCTestCase {
763763
XCTAssertNoThrow(XCTAssertEqual(.head(.init(version: .init(major: 1, minor: 1),
764764
method: .GET,
765765
uri: "/foo",
766-
headers: HTTPHeaders([("Host", "localhost")]))),
766+
headers: HTTPHeaders([("Host", "localhost:\(web.serverPort)")]))),
767767
try web.readInbound()))
768768
XCTAssertNoThrow(XCTAssertEqual(.end(nil),
769769
try web.readInbound()))
@@ -787,7 +787,7 @@ class HTTPClientTests: XCTestCase {
787787
XCTAssertNoThrow(XCTAssertEqual(.head(.init(version: .init(major: 1, minor: 1),
788788
method: .GET,
789789
uri: "/foo",
790-
headers: HTTPHeaders([("Host", "localhost")]))),
790+
headers: HTTPHeaders([("Host", "localhost:\(web.serverPort)")]))),
791791
try web.readInbound()))
792792
XCTAssertNoThrow(XCTAssertEqual(.end(nil),
793793
try web.readInbound()))
@@ -808,7 +808,7 @@ class HTTPClientTests: XCTestCase {
808808
XCTAssertNoThrow(XCTAssertEqual(.head(.init(version: .init(major: 1, minor: 1),
809809
method: .GET,
810810
uri: "/foo",
811-
headers: HTTPHeaders([("Host", "localhost")]))),
811+
headers: HTTPHeaders([("Host", "localhost:\(web.serverPort)")]))),
812812
try web.readInbound()))
813813
XCTAssertNoThrow(XCTAssertEqual(.end(nil),
814814
try web.readInbound()))
@@ -831,7 +831,7 @@ class HTTPClientTests: XCTestCase {
831831
XCTAssertNoThrow(XCTAssertEqual(.head(.init(version: .init(major: 1, minor: 1),
832832
method: .GET,
833833
uri: "/foo",
834-
headers: HTTPHeaders([("Host", "localhost")]))),
834+
headers: HTTPHeaders([("Host", "localhost:\(web.serverPort)")]))),
835835
try web.readInbound()))
836836
XCTAssertNoThrow(XCTAssertEqual(.end(nil),
837837
try web.readInbound()))
@@ -859,7 +859,7 @@ class HTTPClientTests: XCTestCase {
859859
XCTAssertNoThrow(XCTAssertEqual(.head(.init(version: .init(major: 1, minor: 1),
860860
method: .GET,
861861
uri: "/foo",
862-
headers: HTTPHeaders([("Host", "localhost")]))),
862+
headers: HTTPHeaders([("Host", "localhost:\(web.serverPort)")]))),
863863
try web.readInbound()))
864864
XCTAssertNoThrow(XCTAssertEqual(.end(nil),
865865
try web.readInbound()))
@@ -1036,7 +1036,7 @@ class HTTPClientTests: XCTestCase {
10361036
XCTAssertNoThrow(XCTAssertEqual(.head(.init(version: .init(major: 1, minor: 1),
10371037
method: .GET,
10381038
uri: "/foo",
1039-
headers: HTTPHeaders([("Host", "localhost")]))),
1039+
headers: HTTPHeaders([("Host", "localhost:\(web.serverPort)")]))),
10401040
try web.readInbound()))
10411041
XCTAssertNoThrow(XCTAssertEqual(.end(nil),
10421042
try web.readInbound()))
@@ -2033,7 +2033,7 @@ class HTTPClientTests: XCTestCase {
20332033
let second = elg.next()
20342034
XCTAssertFalse(first === second)
20352035

2036-
let httpServer = NIOHTTP1TestServer(group: first)
2036+
let httpServer = NIOHTTP1TestServer(group: self.serverGroup)
20372037
let httpClient = HTTPClient(eventLoopGroupProvider: .shared(first))
20382038
defer {
20392039
XCTAssertNoThrow(try httpClient.syncShutdown())

0 commit comments

Comments
 (0)