Skip to content

Commit 45ed05d

Browse files
committed
test(s3): cover batch delete partial response
1 parent c2f2cc8 commit 45ed05d

1 file changed

Lines changed: 34 additions & 0 deletions

File tree

crates/s3/src/client.rs

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3424,6 +3424,40 @@ mod tests {
34243424
request_receiver.expect_no_request();
34253425
}
34263426

3427+
#[tokio::test]
3428+
async fn delete_objects_with_partial_errors_returns_deleted_keys() {
3429+
let response = http::Response::builder()
3430+
.status(200)
3431+
.body(SdkBody::from(
3432+
r#"<?xml version="1.0" encoding="UTF-8"?>
3433+
<DeleteResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
3434+
<Deleted>
3435+
<Key>kept.txt</Key>
3436+
</Deleted>
3437+
<Error>
3438+
<Key>failed.txt</Key>
3439+
<Code>AccessDenied</Code>
3440+
<Message>Access Denied</Message>
3441+
</Error>
3442+
</DeleteResult>"#,
3443+
))
3444+
.expect("build partial delete response");
3445+
let (client, request_receiver) = test_s3_client(Some(response));
3446+
3447+
let deleted = client
3448+
.delete_objects_with_options(
3449+
"bucket",
3450+
vec!["kept.txt".to_string(), "failed.txt".to_string()],
3451+
DeleteRequestOptions::default(),
3452+
)
3453+
.await
3454+
.expect("partial delete should still return deleted keys");
3455+
3456+
let request = request_receiver.expect_request();
3457+
assert_eq!(request.uri(), "https://example.com/bucket/?delete");
3458+
assert_eq!(deleted, vec!["kept.txt".to_string()]);
3459+
}
3460+
34273461
#[tokio::test]
34283462
async fn read_next_part_fills_buffer_until_eof() {
34293463
use tokio::io::AsyncWriteExt;

0 commit comments

Comments
 (0)