@@ -2036,4 +2036,50 @@ class HTTPClientTests: XCTestCase {
2036
2036
2037
2037
XCTAssertNoThrow ( try future. wait ( ) )
2038
2038
}
2039
+
2040
+ func testDelegateCallinsTolerateRandomEL( ) throws {
2041
+ class TestDelegate : HTTPClientResponseDelegate {
2042
+ typealias Response = Void
2043
+ let eventLoop : EventLoop
2044
+
2045
+ init ( eventLoop: EventLoop ) {
2046
+ self . eventLoop = eventLoop
2047
+ }
2048
+
2049
+ func didReceiveHead( task: HTTPClient . Task < Void > , _: HTTPResponseHead ) -> EventLoopFuture < Void > {
2050
+ return self . eventLoop. makeSucceededFuture ( ( ) )
2051
+ }
2052
+
2053
+ func didReceiveBodyPart( task: HTTPClient . Task < Void > , _: ByteBuffer ) -> EventLoopFuture < Void > {
2054
+ return self . eventLoop. makeSucceededFuture ( ( ) )
2055
+ }
2056
+
2057
+ func didFinishRequest( task: HTTPClient . Task < Void > ) throws { }
2058
+ }
2059
+
2060
+ let elg = getDefaultEventLoopGroup ( numberOfThreads: 3 )
2061
+ let first = elg. next ( )
2062
+ let second = elg. next ( )
2063
+ XCTAssertFalse ( first === second)
2064
+
2065
+ let httpServer = NIOHTTP1TestServer ( group: first)
2066
+ let httpClient = HTTPClient ( eventLoopGroupProvider: . shared( first) )
2067
+ defer {
2068
+ XCTAssertNoThrow ( try httpClient. syncShutdown ( ) )
2069
+ XCTAssertNoThrow ( try httpServer. stop ( ) )
2070
+ }
2071
+
2072
+ let delegate = TestDelegate ( eventLoop: second)
2073
+ let request = try HTTPClient . Request ( url: " http://localhost: \( httpServer. serverPort) / " )
2074
+ let future = httpClient. execute ( request: request, delegate: delegate)
2075
+
2076
+ XCTAssertNoThrow ( try httpServer. readInbound ( ) ) // .head
2077
+ XCTAssertNoThrow ( try httpServer. readInbound ( ) ) // .end
2078
+
2079
+ XCTAssertNoThrow ( try httpServer. writeOutbound ( . head( . init( version: . init( major: 1 , minor: 1 ) , status: . ok) ) ) )
2080
+ XCTAssertNoThrow ( try httpServer. writeOutbound ( . body( . byteBuffer( ByteBuffer . of ( string: " 1234 " ) ) ) ) )
2081
+ XCTAssertNoThrow ( try httpServer. writeOutbound ( . end( nil ) ) )
2082
+
2083
+ XCTAssertNoThrow ( try future. wait ( ) )
2084
+ }
2039
2085
}
0 commit comments