File tree Expand file tree Collapse file tree 1 file changed +27
-0
lines changed
Tests/AsyncHTTPClientTests Expand file tree Collapse file tree 1 file changed +27
-0
lines changed Original file line number Diff line number Diff line change @@ -4132,6 +4132,33 @@ final class HTTPClientTests: XCTestCaseHTTPClientTestsBaseClass {
4132
4132
XCTAssertNoThrow ( try client. execute ( request: request) . wait ( ) )
4133
4133
}
4134
4134
4135
+ func testCancelingRequestAfterRedirect( ) throws {
4136
+ let request = try Request (
4137
+ url: self . defaultHTTPBinURLPrefix + " redirect/target " ,
4138
+ method: . GET,
4139
+ headers: [ " X-Target-Redirect-URL " : self . defaultHTTPBinURLPrefix + " wait " ] ,
4140
+ body: nil
4141
+ )
4142
+
4143
+ class CancelAfterRedirect : HTTPClientResponseDelegate {
4144
+ init ( ) { }
4145
+ func didFinishRequest( task: AsyncHTTPClient . HTTPClient . Task < Void > ) throws { }
4146
+ }
4147
+
4148
+ let task = defaultClient. execute ( request: request, delegate: CancelAfterRedirect ( ) , deadline: . now( ) + . seconds( 1 ) )
4149
+
4150
+ // there is currently no HTTPClientResponseDelegate method to ensure the redirect occurs before we cancel, so we just sleep for 500ms
4151
+ Thread . sleep ( forTimeInterval: 0.5 )
4152
+
4153
+ task. cancel ( )
4154
+
4155
+ XCTAssertThrowsError ( try task. wait ( ) ) { error in
4156
+ guard case let error = error as? HTTPClientError , error == . cancelled else {
4157
+ return XCTFail ( " Should fail with cancelled " )
4158
+ }
4159
+ }
4160
+ }
4161
+
4135
4162
func testCancelingHTTP1RequestAfterHeaderSend( ) throws {
4136
4163
var request = try HTTPClient . Request ( url: self . defaultHTTPBin. baseURL + " /wait " , method: . POST)
4137
4164
// non-empty body is important
You can’t perform that action at this time.
0 commit comments