@@ -59,6 +59,55 @@ final class TransactionTests: XCTestCase {
59
59
}
60
60
}
61
61
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
+
62
111
func testResponseStreamingWorks( ) {
63
112
guard #available( macOS 10 . 15 , iOS 13 . 0 , watchOS 6 . 0 , tvOS 13 . 0 , * ) else { return }
64
113
XCTAsyncTest {
0 commit comments