Пример #1
0
        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));
        }
Пример #2
0
        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);
        }
Пример #3
0
        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);
        }