@@ -960,6 +960,45 @@ class HTTPClientInternalTests: XCTestCase {
960960 XCTAssertNoThrow ( try task. wait ( ) )
961961 }
962962
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+
9631002 func testInternalRequestURI( ) throws {
9641003 let request1 = try Request ( url: " https://someserver.com:8888/some/path?foo=bar " )
9651004 XCTAssertEqual ( request1. kind, . host)
0 commit comments