Skip to content

Commit 0b95c8a

Browse files
committed
Add test which currently hangs indefinitely
1 parent ebc8fe1 commit 0b95c8a

File tree

1 file changed

+65
-0
lines changed

1 file changed

+65
-0
lines changed

Tests/AsyncHTTPClientTests/RequestBagTests.swift

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -454,6 +454,71 @@ final class RequestBagTests: XCTestCase {
454454
XCTAssertEqual($0 as? HTTPClientError, .cancelled)
455455
}
456456
}
457+
458+
func testDidReceiveBodyPartFailedPromise() {
459+
let embeddedEventLoop = EmbeddedEventLoop()
460+
defer { XCTAssertNoThrow(try embeddedEventLoop.syncShutdownGracefully()) }
461+
let logger = Logger(label: "test")
462+
463+
var maybeRequest: HTTPClient.Request?
464+
465+
XCTAssertNoThrow(maybeRequest = try HTTPClient.Request(
466+
url: "https://swift.org",
467+
method: .POST,
468+
body: .byteBuffer(.init(bytes: [1]))
469+
))
470+
guard let request = maybeRequest else { return XCTFail("Expected to have a request") }
471+
472+
struct MyError: Error, Equatable {}
473+
final class Delegate: HTTPClientResponseDelegate {
474+
typealias Response = Void
475+
let didFinishPromise: EventLoopPromise<Void>
476+
init(didFinishPromise: EventLoopPromise<Void>) {
477+
self.didFinishPromise = didFinishPromise
478+
}
479+
func didReceiveBodyPart(task: HTTPClient.Task<Void>, _ buffer: ByteBuffer) -> EventLoopFuture<Void> {
480+
task.eventLoop.makeFailedFuture(MyError())
481+
}
482+
func didReceiveError(task: HTTPClient.Task<Void>, _ error: Error) {
483+
self.didFinishPromise.fail(error)
484+
}
485+
func didFinishRequest(task: AsyncHTTPClient.HTTPClient.Task<Void>) throws -> Void {
486+
XCTFail("\(#function) should not be called")
487+
self.didFinishPromise.succeed(())
488+
}
489+
}
490+
let delegate = Delegate(didFinishPromise: embeddedEventLoop.makePromise())
491+
var maybeRequestBag: RequestBag<Delegate>?
492+
XCTAssertNoThrow(maybeRequestBag = try RequestBag(
493+
request: request,
494+
eventLoopPreference: .delegate(on: embeddedEventLoop),
495+
task: .init(eventLoop: embeddedEventLoop, logger: logger),
496+
redirectHandler: nil,
497+
connectionDeadline: .now() + .seconds(30),
498+
requestOptions: .forTests(),
499+
delegate: delegate
500+
))
501+
guard let bag = maybeRequestBag else { return XCTFail("Expected to be able to create a request bag.") }
502+
503+
let executor = MockRequestExecutor(eventLoop: embeddedEventLoop)
504+
505+
executor.runRequest(bag)
506+
507+
bag.resumeRequestBodyStream()
508+
XCTAssertNoThrow(try executor.receiveRequestBody { XCTAssertEqual($0, ByteBuffer(bytes: [1])) })
509+
510+
bag.receiveResponseHead(.init(version: .http1_1, status: .ok))
511+
512+
bag.succeedRequest([ByteBuffer([1])])
513+
514+
515+
XCTAssertThrowsError(try delegate.didFinishPromise.futureResult.wait()) { error in
516+
XCTAssertEqualTypeAndValue(error, MyError())
517+
}
518+
XCTAssertThrowsError(try bag.task.futureResult.wait()) { error in
519+
XCTAssertEqualTypeAndValue(error, MyError())
520+
}
521+
}
457522

458523
func testDidReceiveBodyPartFailedPromise() {
459524
let embeddedEventLoop = EmbeddedEventLoop()

0 commit comments

Comments
 (0)