diff options
Diffstat (limited to 'tests/unit/test_exception.py')
-rw-r--r-- | tests/unit/test_exception.py | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/tests/unit/test_exception.py b/tests/unit/test_exception.py new file mode 100644 index 00000000..684ca0ce --- /dev/null +++ b/tests/unit/test_exception.py @@ -0,0 +1,78 @@ +from tests.unit import unittest + +from boto.exception import BotoServerError + +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.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.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_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) |