/// <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;
        }
Example #6
0
        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);
        }
Example #7
0
        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;
 }
Example #9
0
        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);
            }
        }
Example #10
0
 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();
        }