public async Task ListParts() { await CreateTempBucketAsync(async bucket => { //We add the special characters at the end to test EncodingType support. string objName = nameof(ListParts) + "%"; CreateMultipartUploadResponse createResp = await MultipartClient.CreateMultipartUploadAsync(bucket, objName).ConfigureAwait(false); ListPartsResponse listResp1 = await MultipartClient.ListPartsAsync(bucket, objName, createResp.UploadId).ConfigureAwait(false); Assert.Equal(bucket, listResp1.BucketName); Assert.Equal(objName, listResp1.ObjectKey); Assert.Equal(createResp.UploadId, listResp1.UploadId); Assert.Equal(StorageClass.Standard, listResp1.StorageClass); Assert.Equal(0, listResp1.PartNumberMarker); Assert.Equal(0, listResp1.NextPartNumberMarker); Assert.Equal(1000, listResp1.MaxParts); Assert.False(listResp1.IsTruncated); Assert.Equal(TestConstants.TestUsername, listResp1.Owner.Name); Assert.Empty(listResp1.Parts); UploadPartResponse uploadResp; byte[] file = new byte[5 * 1024]; using (MemoryStream ms = new MemoryStream(file)) uploadResp = await MultipartClient.UploadPartAsync(bucket, objName, 1, createResp.UploadId, ms).ConfigureAwait(false); ListPartsResponse listResp2 = await MultipartClient.ListPartsAsync(bucket, objName, createResp.UploadId, req => req.EncodingType = EncodingType.Url).ConfigureAwait(false); Assert.Equal(bucket, listResp2.BucketName); Assert.Equal(WebUtility.UrlEncode(objName), listResp2.ObjectKey); //It should be encoded at this point Assert.Equal(createResp.UploadId, listResp2.UploadId); Assert.Equal(StorageClass.Standard, listResp2.StorageClass); Assert.Equal(0, listResp2.PartNumberMarker); Assert.Equal(1, listResp2.NextPartNumberMarker); Assert.Equal(1000, listResp2.MaxParts); Assert.False(listResp2.IsTruncated); Assert.Equal(TestConstants.TestUsername, listResp2.Owner.Name); S3Part part = Assert.Single(listResp2.Parts); Assert.Equal(1, part.PartNumber); Assert.Equal(DateTime.UtcNow, part.LastModified.DateTime, TimeSpan.FromSeconds(5)); Assert.Equal("\"32ca18808933aa12e979375d07048a11\"", part.ETag); Assert.Equal(file.Length, part.Size); await MultipartClient.CompleteMultipartUploadAsync(bucket, objName, createResp.UploadId, new[] { uploadResp }).ConfigureAwait(false); ListPartsResponse listResp3 = await MultipartClient.ListPartsAsync(bucket, objName, createResp.UploadId).ConfigureAwait(false); Assert.False(listResp3.IsSuccess); Assert.Equal(404, listResp3.StatusCode); }).ConfigureAwait(false); }
public void MarshalResponse(IConfig config, ListPartsResponse response, IDictionary <string, string> headers, Stream responseStream) { response.AbortsOn = headers.GetHeaderDate(AmzHeaders.XAmzAbortDate, DateTimeFormat.Iso8601DateTimeExt); response.AbortRuleId = headers.GetHeader(AmzHeaders.XAmzAbortRuleId); response.RequestCharged = headers.ContainsKey(AmzHeaders.XAmzRequestCharged); XmlSerializer s = new XmlSerializer(typeof(ListPartsResult)); using (XmlTextReader r = new XmlTextReader(responseStream)) { r.Namespaces = false; ListPartsResult listResult = (ListPartsResult)s.Deserialize(r); if (listResult.EncodingType != null) { response.EncodingType = ValueHelper.ParseEnum <EncodingType>(listResult.EncodingType); } response.ObjectKey = config.AutoUrlDecodeResponses && response.EncodingType == EncodingType.Url ? WebUtility.UrlDecode(listResult.Key) : listResult.Key; response.BucketName = listResult.Bucket; response.UploadId = listResult.UploadId; if (listResult.StorageClass != null) { response.StorageClass = ValueHelper.ParseEnum <StorageClass>(listResult.StorageClass); } response.PartNumberMarker = listResult.PartNumberMarker; response.NextPartNumberMarker = listResult.NextPartNumberMarker; response.MaxParts = listResult.MaxParts; response.IsTruncated = listResult.IsTruncated; if (listResult.Owner != null) { response.Owner = new S3Identity(); response.Owner.Name = listResult.Owner.DisplayName; response.Owner.Id = listResult.Owner.Id; } if (listResult.Initiator != null) { response.Initiator = new S3Identity(); response.Initiator.Name = listResult.Initiator.DisplayName; response.Initiator.Id = listResult.Initiator.Id; } if (listResult.Parts != null) { response.Parts = new List <S3Part>(listResult.Parts.Count); foreach (Part part in listResult.Parts) { S3Part s3Part = new S3Part(); s3Part.ETag = part.ETag; s3Part.LastModified = part.LastModified; s3Part.PartNumber = part.PartNumber; s3Part.Size = part.Size; response.Parts.Add(s3Part); } } else { response.Parts = Array.Empty <S3Part>(); } } }
public void MarshalResponse(ListPartsRequest request, ListPartsResponse response, IDictionary <string, string> headers, Stream responseStream) { XmlSerializer s = new XmlSerializer(typeof(ListPartsResult)); using (XmlTextReader r = new XmlTextReader(responseStream)) { r.Namespaces = false; ListPartsResult listResult = (ListPartsResult)s.Deserialize(r); response.Bucket = listResult.Bucket; response.Key = listResult.Key; response.UploadId = listResult.UploadId; if (listResult.StorageClass != null) { response.StorageClass = EnumsNET.Enums.Parse <StorageClass>(listResult.StorageClass, EnumFormat.EnumMemberValue); } response.PartNumberMarker = listResult.PartNumberMarker; response.NextPartNumberMarker = listResult.NextPartNumberMarker; response.MaxParts = listResult.MaxParts; response.IsTruncated = listResult.IsTruncated; if (listResult.EncodingType != null) { response.EncodingType = EnumsNET.Enums.Parse <EncodingType>(listResult.EncodingType, EnumFormat.EnumMemberValue); } if (listResult.Owner != null) { response.Owner = new S3ObjectIdentity(); response.Owner.Name = listResult.Owner.DisplayName; response.Owner.Id = listResult.Owner.Id; } if (listResult.Initiator != null) { response.Initiator = new S3ObjectIdentity(); response.Initiator.Name = listResult.Initiator.DisplayName; response.Initiator.Id = listResult.Initiator.Id; } if (listResult.Part != null) { response.Parts = new List <S3Part>(listResult.Part.Count); foreach (Part part in listResult.Part) { S3Part s3Part = new S3Part(); s3Part.ETag = part.ETag; s3Part.LastModified = part.LastModified; s3Part.PartNumber = part.PartNumber; s3Part.Size = part.Size; response.Parts.Add(s3Part); } } else { response.Parts = Array.Empty <S3Part>(); } } }