@@ -266,6 +266,48 @@ final class RequestBagTests: XCTestCase {
266
266
}
267
267
}
268
268
269
+ func testCancelHasNoEffectAfterDeadlineExceededFailsTask( ) {
270
+ struct MyError : Error , Equatable { }
271
+ let embeddedEventLoop = EmbeddedEventLoop ( )
272
+ defer { XCTAssertNoThrow ( try embeddedEventLoop. syncShutdownGracefully ( ) ) }
273
+ let logger = Logger ( label: " test " )
274
+
275
+ var maybeRequest : HTTPClient . Request ?
276
+ XCTAssertNoThrow ( maybeRequest = try HTTPClient . Request ( url: " https://swift.org " ) )
277
+ guard let request = maybeRequest else { return XCTFail ( " Expected to have a request " ) }
278
+
279
+ let delegate = UploadCountingDelegate ( eventLoop: embeddedEventLoop)
280
+ var maybeRequestBag : RequestBag < UploadCountingDelegate > ?
281
+ XCTAssertNoThrow ( maybeRequestBag = try RequestBag (
282
+ request: request,
283
+ eventLoopPreference: . delegate( on: embeddedEventLoop) ,
284
+ task: . init( eventLoop: embeddedEventLoop, logger: logger) ,
285
+ redirectHandler: nil ,
286
+ connectionDeadline: . now( ) + . seconds( 30 ) ,
287
+ requestOptions: . forTests( ) ,
288
+ delegate: delegate
289
+ ) )
290
+ guard let bag = maybeRequestBag else { return XCTFail ( " Expected to be able to create a request bag. " ) }
291
+ XCTAssert ( bag. eventLoop === embeddedEventLoop)
292
+
293
+ let queuer = MockTaskQueuer ( )
294
+ bag. requestWasQueued ( queuer)
295
+
296
+ XCTAssertEqual ( queuer. hitCancelCount, 0 )
297
+ bag. deadlineExceeded ( )
298
+ XCTAssertEqual ( queuer. hitCancelCount, 1 )
299
+ XCTAssertEqual ( delegate. hitDidReceiveError, 0 )
300
+ bag. fail ( MyError ( ) )
301
+ XCTAssertEqual ( delegate. hitDidReceiveError, 1 )
302
+
303
+ bag. cancel ( )
304
+ XCTAssertEqual ( delegate. hitDidReceiveError, 1 )
305
+
306
+ XCTAssertThrowsError ( try bag. task. futureResult. wait ( ) ) {
307
+ XCTAssertEqualTypeAndValue ( $0, MyError ( ) )
308
+ }
309
+ }
310
+
269
311
func testCancelFailsTaskAfterRequestIsSent( ) {
270
312
let embeddedEventLoop = EmbeddedEventLoop ( )
271
313
defer { XCTAssertNoThrow ( try embeddedEventLoop. syncShutdownGracefully ( ) ) }
0 commit comments