@@ -960,6 +960,45 @@ class HTTPClientInternalTests: XCTestCase {
960
960
XCTAssertNoThrow ( try task. wait ( ) )
961
961
}
962
962
963
+ func testConnectErrorCalloutOnCorrectEL( ) throws {
964
+ class TestDelegate : HTTPClientResponseDelegate {
965
+ typealias Response = Void
966
+
967
+ let expectedEL : EventLoop
968
+ var receivedError : Bool = false
969
+
970
+ init ( expectedEL: EventLoop ) {
971
+ self . expectedEL = expectedEL
972
+ }
973
+
974
+ func didFinishRequest( task: HTTPClient . Task < Void > ) throws { }
975
+
976
+ func didReceiveError( task: HTTPClient . Task < Void > , _ error: Error ) {
977
+ self . receivedError = true
978
+ XCTAssertTrue ( self . expectedEL. inEventLoop)
979
+ }
980
+ }
981
+
982
+ let elg = getDefaultEventLoopGroup ( numberOfThreads: 2 )
983
+ let el1 = elg. next ( )
984
+ let el2 = elg. next ( )
985
+
986
+ let httpBin = HTTPBin ( refusesConnections: true )
987
+ let client = HTTPClient ( eventLoopGroupProvider: . shared( elg) )
988
+
989
+ defer {
990
+ XCTAssertNoThrow ( try client. syncShutdown ( ) )
991
+ XCTAssertNoThrow ( try elg. syncShutdownGracefully ( ) )
992
+ }
993
+
994
+ let request = try HTTPClient . Request ( url: " http://localhost: \( httpBin. port) /get " )
995
+ let delegate = TestDelegate ( expectedEL: el1)
996
+ XCTAssertNoThrow ( try httpBin. shutdown ( ) )
997
+ let task = client. execute ( request: request, delegate: delegate, eventLoop: . init( . testOnly_exact( channelOn: el2, delegateOn: el1) ) )
998
+ XCTAssertThrowsError ( try task. wait ( ) )
999
+ XCTAssertTrue ( delegate. receivedError)
1000
+ }
1001
+
963
1002
func testInternalRequestURI( ) throws {
964
1003
let request1 = try Request ( url: " https://someserver.com:8888/some/path?foo=bar " )
965
1004
XCTAssertEqual ( request1. kind, . host)
0 commit comments