public async Task DeleteMultiple() { List <string> resources = new List <string>(2); resources.Add(nameof(DeleteMultiple) + "1"); resources.Add(nameof(DeleteMultiple) + "2"); await UploadAsync(resources[0]).ConfigureAwait(false); await UploadAsync(resources[1]).ConfigureAwait(false); DeleteMultipleObjectsResponse resp = await ObjectClient.DeleteMultipleObjectsAsync(BucketName, resources, request => request.Quiet = false).ConfigureAwait(false); Assert.Equal(2, resp.Deleted.Count); Assert.Contains(resp.Deleted, o => o.Key == resources[0]); Assert.Contains(resp.Deleted, o => o.Key == resources[1]); Assert.All(resp.Deleted, o => Assert.True(o.DeleteMarker)); Assert.All(resp.Deleted, o => Assert.NotEmpty(o.DeleteMarkerVersionId)); }
public async Task DeleteMultipleWithError() { List <S3DeleteInfo> resources = new List <S3DeleteInfo>(2); resources.Add(new S3DeleteInfo(nameof(DeleteMultipleWithError) + "1", "versionnotfound")); resources.Add(new S3DeleteInfo(nameof(DeleteMultipleWithError) + "2", null)); await UploadAsync(resources[0].Name).ConfigureAwait(false); await UploadAsync(resources[1].Name).ConfigureAwait(false); DeleteMultipleObjectsResponse resp = await ObjectClient.DeleteMultipleObjectsAsync(BucketName, resources, request => request.Quiet = false).ConfigureAwait(false); Assert.Equal(1, resp.Deleted.Count); Assert.Equal(resources[1].Name, resp.Deleted[0].Key); Assert.True(resp.Deleted[0].DeleteMarker); Assert.NotEmpty(resp.Deleted[0].DeleteMarkerVersionId); Assert.Equal(1, resp.Errors.Count); Assert.Equal(resources[0].Name, resp.Errors[0].Key); Assert.Equal(resources[0].VersionId, resp.Errors[0].VersionId); Assert.Equal("NoSuchVersion", resp.Errors[0].Code); Assert.Equal("The specified version does not exist.", resp.Errors[0].Message); }
public async Task <DeleteBucketStatus> EmptyBucket(string bucketName, CancellationToken token = default) { //TODO: this can be optimized if we don't use GetBucketRecursiveAsync, but instead call the methods directly List <S3DeleteInfo> tempList = new List <S3DeleteInfo>(1000); await foreach (S3Object obj in this.GetBucketRecursiveAsync(bucketName, token: token)) { tempList.Add(new S3DeleteInfo(obj.Name, null)); if (tempList.Count != 1000) { continue; } DeleteMultipleObjectsResponse multiDelResponse = await _objectClient.DeleteMultipleObjectsAsync(bucketName, tempList, request => request.Quiet = true, token).ConfigureAwait(false); if (!multiDelResponse.IsSuccess) { return(DeleteBucketStatus.FailedToDeleteObject); } tempList.Clear(); } if (tempList.Count > 0) { DeleteMultipleObjectsResponse multiDelResponse = await _objectClient.DeleteMultipleObjectsAsync(bucketName, tempList, request => request.Quiet = true, token).ConfigureAwait(false); if (!multiDelResponse.IsSuccess) { return(DeleteBucketStatus.FailedToDeleteObject); } } return(DeleteBucketStatus.Ok); }