@@ -23,17 +23,23 @@ class HTTPClientInternalTests: XCTestCase {
23
23
typealias Request = HTTPClient . Request
24
24
typealias Task = HTTPClient . Task
25
25
26
+ var serverGroup : EventLoopGroup !
26
27
var clientGroup : EventLoopGroup !
27
28
28
29
override func setUp( ) {
29
30
XCTAssertNil ( self . clientGroup)
31
+ XCTAssertNil ( self . serverGroup)
32
+ self . serverGroup = MultiThreadedEventLoopGroup ( numberOfThreads: 1 )
30
33
self . clientGroup = getDefaultEventLoopGroup ( numberOfThreads: 1 )
31
34
}
32
35
33
36
override func tearDown( ) {
37
+ XCTAssertNotNil ( self . serverGroup)
38
+ XCTAssertNoThrow ( try self . serverGroup. syncShutdownGracefully ( ) )
34
39
XCTAssertNotNil ( self . clientGroup)
35
40
XCTAssertNoThrow ( try self . clientGroup. syncShutdownGracefully ( ) )
36
41
self . clientGroup = nil
42
+ self . serverGroup = nil
37
43
}
38
44
39
45
func testHTTPPartsHandler( ) throws {
@@ -49,15 +55,15 @@ class HTTPClientInternalTests: XCTestCase {
49
55
ignoreUncleanSSLShutdown: false ,
50
56
logger: HTTPClient . loggingDisabled) ) . wait ( )
51
57
52
- var request = try Request ( url: " http://localhost/get " )
58
+ var request = try Request ( url: " http://localhost:8080 /get " )
53
59
request. headers. add ( name: " X-Test-Header " , value: " X-Test-Value " )
54
60
request. body = . string( " 1234 " )
55
61
56
62
XCTAssertNoThrow ( try channel. writeOutbound ( request) )
57
63
XCTAssertEqual ( 3 , recorder. writes. count)
58
64
var head = HTTPRequestHead ( version: HTTPVersion ( major: 1 , minor: 1 ) , method: . GET, uri: " /get " )
59
65
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 " )
61
67
head. headers. add ( name: " Content-Length " , value: " 4 " )
62
68
XCTAssertEqual ( HTTPClientRequestPart . head ( head) , recorder. writes [ 0 ] )
63
69
let buffer = ByteBuffer . of ( string: " 1234 " )
@@ -90,6 +96,42 @@ class HTTPClientInternalTests: XCTestCase {
90
96
}
91
97
}
92
98
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
+
93
135
func testHTTPPartsHandlerMultiBody( ) throws {
94
136
let channel = EmbeddedChannel ( )
95
137
let delegate = TestHTTPDelegate ( )
@@ -797,7 +839,7 @@ class HTTPClientInternalTests: XCTestCase {
797
839
}
798
840
799
841
func testUncleanCloseThrows( ) {
800
- let server = NIOHTTP1TestServer ( group: self . clientGroup )
842
+ let server = NIOHTTP1TestServer ( group: self . serverGroup )
801
843
defer {
802
844
XCTAssertNoThrow ( try server. stop ( ) )
803
845
}
0 commit comments