@@ -318,18 +318,16 @@ final class AsyncAwaitEndToEndTests: XCTestCase {
318
318
#endif
319
319
}
320
320
321
- func testCanceling( ) throws {
322
- #if os(Linux)
323
- #else
324
- try XCTSkipIf ( true , " test times out because of a swift concurrency bug on macOS: https://bugs.swift.org/browse/SR-15592 " )
325
- #endif
321
+ func testCanceling( ) {
326
322
#if compiler(>=5.5) && canImport(_Concurrency)
327
323
guard #available( macOS 12 . 0 , iOS 15 . 0 , watchOS 8 . 0 , tvOS 15 . 0 , * ) else { return }
328
324
XCTAsyncTest ( timeout: 5 ) {
325
+ let bin = HTTPBin ( )
326
+ defer { XCTAssertNoThrow ( try bin. shutdown ( ) ) }
329
327
let client = makeDefaultHTTPClient ( )
330
328
defer { XCTAssertNoThrow ( try client. syncShutdown ( ) ) }
331
329
let logger = Logger ( label: " HTTPClient " , factory: StreamLogHandler . standardOutput ( label: ) )
332
- var request = HTTPClientRequest ( url: " https ://localhost:45678 /offline" )
330
+ var request = HTTPClientRequest ( url: " http ://localhost:\( bin . port ) /offline " )
333
331
request. method = . POST
334
332
let streamWriter = AsyncSequenceWriter < ByteBuffer > ( )
335
333
request. body = . stream( length: nil , streamWriter)
@@ -345,8 +343,7 @@ final class AsyncAwaitEndToEndTests: XCTestCase {
345
343
#endif
346
344
}
347
345
348
- func testDeadline( ) throws {
349
- try XCTSkipIf ( true , " deadline is currently not correctly implemented. We only use it to timeout connection establishment. will be fixed in a follow up PR " )
346
+ func testDeadline( ) {
350
347
#if compiler(>=5.5) && canImport(_Concurrency)
351
348
guard #available( macOS 12 . 0 , iOS 15 . 0 , watchOS 8 . 0 , tvOS 15 . 0 , * ) else { return }
352
349
XCTAsyncTest ( timeout: 5 ) {
@@ -358,11 +355,33 @@ final class AsyncAwaitEndToEndTests: XCTestCase {
358
355
let request = HTTPClientRequest ( url: " https://localhost: \( bin. port) /wait " )
359
356
360
357
let task = Task < HTTPClientResponse , Error > { [ request] in
361
- try await client. execute ( request, deadline: . now( ) + . seconds( 1 ) , logger: logger)
358
+ try await client. execute ( request, deadline: . now( ) + . milliseconds( 100 ) , logger: logger)
359
+ }
360
+ await XCTAssertThrowsError ( try await task. value) {
361
+ XCTAssertEqual ( $0 as? HTTPClientError , HTTPClientError . deadlineExceeded)
362
+ }
363
+ }
364
+ #endif
365
+ }
366
+
367
+ func testImmediateDeadline( ) {
368
+ #if compiler(>=5.5) && canImport(_Concurrency)
369
+ guard #available( macOS 12 . 0 , iOS 15 . 0 , watchOS 8 . 0 , tvOS 15 . 0 , * ) else { return }
370
+ XCTAsyncTest ( timeout: 5 ) {
371
+ let bin = HTTPBin ( )
372
+ defer { XCTAssertNoThrow ( try bin. shutdown ( ) ) }
373
+ let client = makeDefaultHTTPClient ( )
374
+ defer { XCTAssertNoThrow ( try client. syncShutdown ( ) ) }
375
+ let logger = Logger ( label: " HTTPClient " , factory: StreamLogHandler . standardOutput ( label: ) )
376
+ let request = HTTPClientRequest ( url: " http://localhost: \( bin. port) /wait " )
377
+
378
+ let task = Task < HTTPClientResponse , Error > { [ request] in
379
+ try await client. execute ( request, deadline: . now( ) , logger: logger)
362
380
}
363
381
await XCTAssertThrowsError ( try await task. value) {
364
- XCTAssertEqual ( $0 as? HTTPClientError , HTTPClientError . readTimeout )
382
+ XCTAssertEqual ( $0 as? HTTPClientError , HTTPClientError . deadlineExceeded )
365
383
}
384
+ print ( " done " )
366
385
}
367
386
#endif
368
387
}
@@ -386,7 +405,7 @@ final class AsyncAwaitEndToEndTests: XCTestCase {
386
405
387
406
#if compiler(>=5.5) && canImport(_Concurrency)
388
407
extension AsyncSequence where Element == ByteBuffer {
389
- func collect( ) async throws -> ByteBuffer {
408
+ func collect( ) async rethrows -> ByteBuffer {
390
409
try await self . reduce ( into: ByteBuffer ( ) ) { accumulatingBuffer, nextBuffer in
391
410
var nextBuffer = nextBuffer
392
411
accumulatingBuffer. writeBuffer ( & nextBuffer)
0 commit comments