@@ -59,6 +59,55 @@ final class TransactionTests: XCTestCase {
5959 }
6060 }
6161
62+ func testDeadlineExceededWhileQueuedAndExecutorImmediatelyCancelsTask( ) {
63+ guard #available( macOS 10 . 15 , iOS 13 . 0 , watchOS 6 . 0 , tvOS 13 . 0 , * ) else { return }
64+ XCTAsyncTest {
65+ let embeddedEventLoop = EmbeddedEventLoop ( )
66+ defer { XCTAssertNoThrow ( try embeddedEventLoop. syncShutdownGracefully ( ) ) }
67+
68+ var request = HTTPClientRequest ( url: " https://localhost/ " )
69+ request. method = . GET
70+ var maybePreparedRequest : PreparedRequest ?
71+ XCTAssertNoThrow ( maybePreparedRequest = try PreparedRequest ( request) )
72+ guard let preparedRequest = maybePreparedRequest else {
73+ return XCTFail ( " Expected to have a request here. " )
74+ }
75+ let ( transaction, responseTask) = await Transaction . makeWithResultTask (
76+ request: preparedRequest,
77+ preferredEventLoop: embeddedEventLoop
78+ )
79+
80+ let queuer = MockTaskQueuer ( )
81+ transaction. requestWasQueued ( queuer)
82+
83+ transaction. deadlineExceeded ( )
84+
85+ struct Executor : HTTPRequestExecutor {
86+ func writeRequestBodyPart( _: NIOCore . IOData , request: AsyncHTTPClient . HTTPExecutableRequest , promise: NIOCore . EventLoopPromise < Void > ? ) {
87+ XCTFail ( )
88+ }
89+
90+ func finishRequestBodyStream( _ task: AsyncHTTPClient . HTTPExecutableRequest , promise: NIOCore . EventLoopPromise < Void > ? ) {
91+ XCTFail ( )
92+ }
93+
94+ func demandResponseBodyStream( _: AsyncHTTPClient . HTTPExecutableRequest ) {
95+ XCTFail ( )
96+ }
97+
98+ func cancelRequest( _ task: AsyncHTTPClient . HTTPExecutableRequest ) {
99+ task. fail ( HTTPClientError . cancelled)
100+ }
101+ }
102+
103+ transaction. willExecuteRequest ( Executor ( ) )
104+
105+ await XCTAssertThrowsError ( try await responseTask. value) { error in
106+ XCTAssertEqualTypeAndValue ( error, HTTPClientError . deadlineExceeded)
107+ }
108+ }
109+ }
110+
62111 func testResponseStreamingWorks( ) {
63112 guard #available( macOS 10 . 15 , iOS 13 . 0 , watchOS 6 . 0 , tvOS 13 . 0 , * ) else { return }
64113 XCTAsyncTest {
0 commit comments