diff --git a/Tests/AsyncHTTPClientTests/HTTPClientInternalTests+XCTest.swift b/Tests/AsyncHTTPClientTests/HTTPClientInternalTests+XCTest.swift index c448317b3..8122df7a2 100644 --- a/Tests/AsyncHTTPClientTests/HTTPClientInternalTests+XCTest.swift +++ b/Tests/AsyncHTTPClientTests/HTTPClientInternalTests+XCTest.swift @@ -41,6 +41,7 @@ extension HTTPClientInternalTests { ("testUncleanCloseThrows", testUncleanCloseThrows), ("testUploadStreamingIsCalledOnTaskEL", testUploadStreamingIsCalledOnTaskEL), ("testWeCanActuallyExactlySetTheEventLoops", testWeCanActuallyExactlySetTheEventLoops), + ("testTaskPromiseBoundToEL", testTaskPromiseBoundToEL), ] } } diff --git a/Tests/AsyncHTTPClientTests/HTTPClientInternalTests.swift b/Tests/AsyncHTTPClientTests/HTTPClientInternalTests.swift index 77582e3cc..c3cd1241e 100644 --- a/Tests/AsyncHTTPClientTests/HTTPClientInternalTests.swift +++ b/Tests/AsyncHTTPClientTests/HTTPClientInternalTests.swift @@ -891,4 +891,25 @@ class HTTPClientInternalTests: XCTestCase { XCTAssert(el1 === response.eventLoop) XCTAssertNoThrow(try response.wait()) } + + func testTaskPromiseBoundToEL() throws { + let elg = getDefaultEventLoopGroup(numberOfThreads: 2) + let el1 = elg.next() + let el2 = elg.next() + + let httpBin = HTTPBin() + let client = HTTPClient(eventLoopGroupProvider: .shared(elg)) + + defer { + XCTAssertNoThrow(try client.syncShutdown()) + XCTAssertNoThrow(try elg.syncShutdownGracefully()) + XCTAssertNoThrow(try httpBin.shutdown()) + } + + let request = try HTTPClient.Request(url: "http://localhost:\(httpBin.port)//get") + let delegate = ResponseAccumulator(request: request) + let task = client.execute(request: request, delegate: delegate, eventLoop: .init(.testOnly_exact(channelOn: el1, delegateOn: el2))) + XCTAssertTrue(task.futureResult.eventLoop === el2) + XCTAssertNoThrow(try task.wait()) + } }