/// <summary> /// Constructs a new instance of the DeleteObjectsException class with serialized data. /// </summary> /// <param name="info">The <see cref="T:System.Runtime.Serialization.SerializationInfo" /> that holds the serialized object data about the exception being thrown.</param> /// <param name="context">The <see cref="T:System.Runtime.Serialization.StreamingContext" /> that contains contextual information about the source or destination.</param> /// <exception cref="T:System.ArgumentNullException">The <paramref name="info" /> parameter is null. </exception> /// <exception cref="T:System.Runtime.Serialization.SerializationException">The class name is null or <see cref="P:System.Exception.HResult" /> is zero (0). </exception> protected DeleteObjectsException(System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context) : base(info, context) { if (info != null) { Response = info.GetValue("Response", typeof(DeleteObjectsResponse)) as DeleteObjectsResponse; } }
private static string CreateMessage(DeleteObjectsResponse response) { if (response == null) throw new ArgumentNullException("response"); string message = string.Format(CultureInfo.InvariantCulture, "Error deleting objects. Deleted objects: {0}. Delete errors: {1}", response.DeletedObjects == null ? 0 : response.DeletedObjects.Count, response.DeleteErrors == null ? 0 : response.DeleteErrors.Count); return message; }
public override AmazonWebServiceResponse Unmarshall(XmlUnmarshallerContext context) { DeleteObjectsResponse response = new DeleteObjectsResponse(); while (context.Read()) { if (context.IsStartElement) { UnmarshallResult(context,response); continue; } } return response; }
private static void UnmarshallResult(XmlUnmarshallerContext context,DeleteObjectsResponse response) { IWebResponseData responseData = context.ResponseData; if (responseData.IsHeaderPresent(S3Constants.AmzHeaderRequestCharged)) response.RequestCharged = RequestCharged.FindValue(responseData.GetHeaderValue(S3Constants.AmzHeaderRequestCharged)); int originalDepth = context.CurrentDepth; int targetDepth = originalDepth + 1; if (context.IsStartOfDocument) targetDepth += 2; while (context.Read()) { if (context.IsStartElement || context.IsAttribute) { if (context.TestExpression("Deleted", targetDepth)) { response.DeletedObjects.Add(DeletedObjectUnmarshaller.Instance.Unmarshall(context)); continue; } if (context.TestExpression("Error", targetDepth)) { response.DeleteErrors.Add(ErrorsItemUnmarshaller.Instance.Unmarshall(context)); continue; } } else if (context.IsEndElement && context.CurrentDepth < originalDepth) { return; } } return; }
private static void UnmarshallResult(XmlUnmarshallerContext context,DeleteObjectsResponse response) { int originalDepth = context.CurrentDepth; int targetDepth = originalDepth + 1; if (context.IsStartOfDocument) targetDepth += 2; while (context.Read()) { if (context.IsStartElement || context.IsAttribute) { if (context.TestExpression("Deleted", targetDepth)) { response.DeletedObjects.Add(DeletedObjectUnmarshaller.Instance.Unmarshall(context)); continue; } if (context.TestExpression("Error", targetDepth)) { response.DeleteErrors.Add(ErrorsItemUnmarshaller.Instance.Unmarshall(context)); continue; } } else if (context.IsEndElement && context.CurrentDepth < originalDepth) { return; } } return; }
private static DeleteObjectsException CreateDeleteObjectsException() { var dor = new Amazon.S3.Model.DeleteObjectsResponse { DeletedObjects = { new DeletedObject { Key = "key1", VersionId = "v1", DeleteMarker = true, DeleteMarkerVersionId = "mv1" }, new DeletedObject { Key = "key2", VersionId = "v2", DeleteMarker = false, DeleteMarkerVersionId = "mv2" } }, DeleteErrors = { new DeleteError { Key = "key3", Code = "code3", Message = "message3", VersionId = "v3" }, new DeleteError { Key = "key4", Code = "code4", Message = "message4", VersionId = "v4" }, new DeleteError { Key = "key5", Code = "code5", Message = "message5", VersionId = "v5" } }, ContentLength = 10, HttpStatusCode = HttpStatusCode.OK, ResponseMetadata = new ResponseMetadata { Metadata = { { "m1", "mv1" }, { "m2", "mv2" } }, RequestId = "requestId" } }; var doe = new DeleteObjectsException(dor) { ErrorType = ErrorType.Sender, ErrorCode = "ec1", RequestId = "requestIdSomething", StatusCode = HttpStatusCode.OK, }; doe.GetType().GetProperty("AmazonId2").SetValue(doe, "amzid2", null); doe.GetType().GetProperty("ResponseBody").SetValue(doe, "uhh, stuff", null); return(doe); }
public static void DeleteBucketWithObjects(IAmazonS3 s3Client, string bucketName) { // Validations. if (s3Client == null) { throw new ArgumentNullException("s3Client", "The s3Client cannot be null!"); } if (string.IsNullOrEmpty(bucketName)) { throw new ArgumentNullException("bucketName", "The bucketName cannot be null or empty string!"); } var listVersionsRequest = new ListVersionsRequest { BucketName = bucketName }; ListVersionsResponse listVersionsResponse = null; string lastRequestId = null; var exception = new Exception(); var mre = new AutoResetEvent(false); // Iterate through the objects in the bucket and delete them. do { // List all the versions of all the objects in the bucket. s3Client.ListVersionsAsync(listVersionsRequest, (result) => { exception = result.Exception; listVersionsResponse = result.Response; mre.Set(); }, new AsyncOptions() { ExecuteCallbackOnMainThread = false }); mre.WaitOne(); Utils.AssertExceptionIsNull(exception); lastRequestId = listVersionsResponse.ResponseMetadata.RequestId; if (listVersionsResponse.Versions.Count == 0) { // If the bucket has no objects break the loop. break; } var keyVersionList = new List<KeyVersion>(listVersionsResponse.Versions.Count); for (int index = 0; index < listVersionsResponse.Versions.Count; index++) { keyVersionList.Add(new KeyVersion { Key = listVersionsResponse.Versions[index].Key, VersionId = listVersionsResponse.Versions[index].VersionId }); } var deleteObjectsResponse = new DeleteObjectsResponse(); // Delete the current set of objects. s3Client.DeleteObjectsAsync(new DeleteObjectsRequest { BucketName = bucketName, Objects = keyVersionList, Quiet = true }, (result) => { deleteObjectsResponse = result.Response; exception = result.Exception; mre.Set(); }, new AsyncOptions() { ExecuteCallbackOnMainThread = false }); mre.WaitOne(); Utils.AssertExceptionIsNull(exception); // Set the markers to get next set of objects from the bucket. listVersionsRequest.KeyMarker = listVersionsResponse.NextKeyMarker; listVersionsRequest.VersionIdMarker = listVersionsResponse.NextVersionIdMarker; } // Continue listing objects and deleting them until the bucket is empty. while (listVersionsResponse.IsTruncated); // Bucket is empty, delete the bucket. s3Client.DeleteBucketAsync(new DeleteBucketRequest { BucketName = bucketName }, (result) => { exception = result.Exception; mre.Set(); }, new AsyncOptions() { ExecuteCallbackOnMainThread = false }); mre.WaitOne(); Utils.AssertExceptionIsNull(exception); }
/// <summary> /// Constructs an instance of DeleteObjectsException /// </summary> /// <param name="response"></param> public DeleteObjectsException(DeleteObjectsResponse response) : base(CreateMessage(response)) { this.response = response; }
public void TestSerializaingObjects() { DeleteObjectsResponse response = new DeleteObjectsResponse { DeletedObjects = new List<DeletedObject> { new DeletedObject{ Key = "hello", VersionId ="version" }, new DeletedObject{ Key = "world", VersionId ="version" }, new DeletedObject{ Key = "!!!" , VersionId ="version"} }, DeleteErrors = new List<DeleteError> { new DeleteError{ Code = "200", Key = "key", Message = "Some Message!" }, new DeleteError{ Code = "500", Key = "key", Message = "Some Message!" } }, RequestCharged = RequestCharged.Requester }; var serializer = new BinaryFormatter(); using (var ms = new MemoryStream()) { serializer.Serialize(ms, response); ms.Seek(0, SeekOrigin.Begin); DeleteObjectsResponse deserialized = serializer.Deserialize(ms) as DeleteObjectsResponse; List<string> deleteObjectKeys = new List<string>{ "hello", "world", "!!!"}; // Validate deserialized dataa foreach (var obj in deserialized.DeletedObjects) { Assert.AreEqual(obj.VersionId, "version"); Assert.IsTrue(deleteObjectKeys.Contains(obj.Key)); } List<string> errorCodes = new List<string>{ "200", "500" }; foreach (var error in deserialized.DeleteErrors) { Assert.AreEqual(error.Key, "key"); Assert.IsTrue(errorCodes.Contains(error.Code)); } Assert.AreEqual(deserialized.RequestCharged, RequestCharged.Requester); } }
private static DeleteObjectsException CreateDeleteObjectsException() { var dor = new Amazon.S3.Model.DeleteObjectsResponse { DeletedObjects = { new DeletedObject { Key = "key1", VersionId = "v1", DeleteMarker = true, DeleteMarkerVersionId = "mv1" }, new DeletedObject { Key = "key2", VersionId = "v2", DeleteMarker = false, DeleteMarkerVersionId = "mv2" } }, DeleteErrors = { new DeleteError { Key = "key3", Code = "code3", Message = "message3", VersionId = "v3" }, new DeleteError { Key = "key4", Code = "code4", Message = "message4", VersionId = "v4" }, new DeleteError { Key = "key5", Code = "code5", Message = "message5", VersionId = "v5" } }, ContentLength = 10, HttpStatusCode = HttpStatusCode.OK, ResponseMetadata = new ResponseMetadata { Metadata = { { "m1", "mv1" }, { "m2", "mv2" } }, RequestId = "requestId" } }; var doe = new DeleteObjectsException(dor) { ErrorType = ErrorType.Sender, ErrorCode = "ec1", RequestId = "requestIdSomething", StatusCode = HttpStatusCode.OK, }; doe.GetType().GetProperty("AmazonId2").SetValue(doe, "amzid2", null); doe.GetType().GetProperty("ResponseBody").SetValue(doe, "uhh, stuff", null); return doe; }
public void DeleteDirectoryWithContinuationMarker() { //Arrange var response1 = new ListObjectsResponse { IsTruncated = true, NextMarker = "Marker1" }; response1.S3Objects.AddRange(new [] { new S3Object { Key = "media/object1" }, new S3Object { Key = "media/object2" } }); var response2 = new ListObjectsResponse { IsTruncated = false }; response2.S3Objects.AddRange(new [] { new S3Object { Key = "media/object3" }, new S3Object { Key = "media/object4" } }); var response3 = new DeleteObjectsResponse(); response3.DeletedObjects = new List<DeletedObject>(new[] { new DeletedObject { DeleteMarker = true, Key = "media/object1" }, new DeletedObject { DeleteMarker = true, Key = "media/object2" }, new DeletedObject { DeleteMarker = true, Key = "media/object3" }, new DeletedObject { DeleteMarker = true, Key = "media/object4" } }); var clientMock = new Mock<IAmazonS3>(); clientMock.Setup(p => p.ListObjects(It.Is<ListObjectsRequest>(req => req.Prefix == "media/" && req.Marker == null))) .Returns(response1); clientMock.Setup(p => p.ListObjects(It.Is<ListObjectsRequest>(req => req.Prefix == "media/" && req.Marker == "Marker1"))) .Returns(response2); clientMock.Setup(p => p.DeleteObjects(It.IsAny<DeleteObjectsRequest>())) .Returns(response3); var provider = CreateProvider(clientMock); //Act provider.DeleteDirectory("/"); //Assert clientMock.VerifyAll(); }