Index: third_party/gsutil/third_party/boto/tests/unit/test_exception.py |
diff --git a/third_party/gsutil/third_party/boto/tests/unit/test_exception.py b/third_party/gsutil/third_party/boto/tests/unit/test_exception.py |
new file mode 100644 |
index 0000000000000000000000000000000000000000..d9a2bdd33e12f5d17bf8e82b415d30275c308a97 |
--- /dev/null |
+++ b/third_party/gsutil/third_party/boto/tests/unit/test_exception.py |
@@ -0,0 +1,123 @@ |
+from tests.unit import unittest |
+ |
+from boto.exception import BotoServerError, S3CreateError, JSONResponseError |
+ |
+from httpretty import HTTPretty, httprettified |
+ |
+ |
+class TestBotoServerError(unittest.TestCase): |
+ |
+ def test_botoservererror_basics(self): |
+ bse = BotoServerError('400', 'Bad Request') |
+ self.assertEqual(bse.status, '400') |
+ self.assertEqual(bse.reason, 'Bad Request') |
+ |
+ def test_message_elb_xml(self): |
+ # This test XML response comes from #509 |
+ xml = """ |
+<ErrorResponse xmlns="http://elasticloadbalancing.amazonaws.com/doc/2011-11-15/"> |
+ <Error> |
+ <Type>Sender</Type> |
+ <Code>LoadBalancerNotFound</Code> |
+ <Message>Cannot find Load Balancer webapp-balancer2</Message> |
+ </Error> |
+ <RequestId>093f80d0-4473-11e1-9234-edce8ec08e2d</RequestId> |
+</ErrorResponse>""" |
+ bse = BotoServerError('400', 'Bad Request', body=xml) |
+ |
+ self.assertEqual(bse.error_message, 'Cannot find Load Balancer webapp-balancer2') |
+ self.assertEqual(bse.error_message, bse.message) |
+ self.assertEqual(bse.request_id, '093f80d0-4473-11e1-9234-edce8ec08e2d') |
+ self.assertEqual(bse.error_code, 'LoadBalancerNotFound') |
+ self.assertEqual(bse.status, '400') |
+ self.assertEqual(bse.reason, 'Bad Request') |
+ |
+ def test_message_sd_xml(self): |
+ # Sample XML response from: https://forums.aws.amazon.com/thread.jspa?threadID=87393 |
+ xml = """ |
+<Response> |
+ <Errors> |
+ <Error> |
+ <Code>AuthorizationFailure</Code> |
+ <Message>Session does not have permission to perform (sdb:CreateDomain) on resource (arn:aws:sdb:us-east-1:xxxxxxx:domain/test_domain). Contact account owner.</Message> |
+ <BoxUsage>0.0055590278</BoxUsage> |
+ </Error> |
+ </Errors> |
+ <RequestID>e73bb2bb-63e3-9cdc-f220-6332de66dbbe</RequestID> |
+</Response>""" |
+ bse = BotoServerError('403', 'Forbidden', body=xml) |
+ self.assertEqual( |
+ bse.error_message, |
+ 'Session does not have permission to perform (sdb:CreateDomain) on ' |
+ 'resource (arn:aws:sdb:us-east-1:xxxxxxx:domain/test_domain). ' |
+ 'Contact account owner.') |
+ self.assertEqual(bse.error_message, bse.message) |
+ self.assertEqual(bse.box_usage, '0.0055590278') |
+ self.assertEqual(bse.error_code, 'AuthorizationFailure') |
+ self.assertEqual(bse.status, '403') |
+ self.assertEqual(bse.reason, 'Forbidden') |
+ |
+ @httprettified |
+ def test_xmlns_not_loaded(self): |
+ xml = '<ErrorResponse xmlns="http://elasticloadbalancing.amazonaws.com/doc/2011-11-15/">' |
+ bse = BotoServerError('403', 'Forbidden', body=xml) |
+ self.assertEqual([], HTTPretty.latest_requests) |
+ |
+ @httprettified |
+ def test_xml_entity_not_loaded(self): |
+ xml = '<!DOCTYPE Message [<!ENTITY xxe SYSTEM "http://aws.amazon.com/">]><Message>error:&xxe;</Message>' |
+ bse = BotoServerError('403', 'Forbidden', body=xml) |
+ self.assertEqual([], HTTPretty.latest_requests) |
+ |
+ def test_message_storage_create_error(self): |
+ # This test value comes from https://answers.launchpad.net/duplicity/+question/150801 |
+ xml = """<?xml version="1.0" encoding="UTF-8"?> |
+<Error> |
+ <Code>BucketAlreadyOwnedByYou</Code> |
+ <Message>Your previous request to create the named bucket succeeded and you already own it.</Message> |
+ <BucketName>cmsbk</BucketName> |
+ <RequestId>FF8B86A32CC3FE4F</RequestId> |
+ <HostId>6ENGL3DT9f0n7Tkv4qdKIs/uBNCMMA6QUFapw265WmodFDluP57esOOkecp55qhh</HostId> |
+</Error> |
+""" |
+ s3ce = S3CreateError('409', 'Conflict', body=xml) |
+ |
+ self.assertEqual(s3ce.bucket, 'cmsbk') |
+ self.assertEqual(s3ce.error_code, 'BucketAlreadyOwnedByYou') |
+ self.assertEqual(s3ce.status, '409') |
+ self.assertEqual(s3ce.reason, 'Conflict') |
+ self.assertEqual( |
+ s3ce.error_message, |
+ 'Your previous request to create the named bucket succeeded ' |
+ 'and you already own it.') |
+ self.assertEqual(s3ce.error_message, s3ce.message) |
+ self.assertEqual(s3ce.request_id, 'FF8B86A32CC3FE4F') |
+ |
+ def test_message_json_response_error(self): |
+ # This test comes from https://forums.aws.amazon.com/thread.jspa?messageID=374936 |
+ body = { |
+ '__type': 'com.amazon.coral.validate#ValidationException', |
+ 'message': 'The attempted filter operation is not supported ' |
+ 'for the provided filter argument count'} |
+ |
+ jre = JSONResponseError('400', 'Bad Request', body=body) |
+ |
+ self.assertEqual(jre.status, '400') |
+ self.assertEqual(jre.reason, 'Bad Request') |
+ self.assertEqual(jre.error_message, body['message']) |
+ self.assertEqual(jre.error_message, jre.message) |
+ self.assertEqual(jre.code, 'ValidationException') |
+ self.assertEqual(jre.code, jre.error_code) |
+ |
+ def test_message_not_xml(self): |
+ body = 'This is not XML' |
+ |
+ bse = BotoServerError('400', 'Bad Request', body=body) |
+ self.assertEqual(bse.error_message, 'This is not XML') |
+ |
+ def test_getters(self): |
+ body = "This is the body" |
+ |
+ bse = BotoServerError('400', 'Bad Request', body=body) |
+ self.assertEqual(bse.code, bse.error_code) |
+ self.assertEqual(bse.message, bse.error_message) |