from awscli.testutils import mock, unittest
from awscli import errorhandler
class TestErrorHandler(unittest.TestCase):
def create_http_response(self, **kwargs):
response = mock.Mock()
for key, value in kwargs.items():
setattr(response, key, value)
return response
def test_error_handler_client_side(self):
response = {
'Error': {'Code': 'AccessDenied',
'HostId': 'foohost',
'Message': 'Access Denied',
'RequestId': 'requestid'},
'ResponseMetadata': {}}
handler = errorhandler.ErrorHandler()
http_response = self.create_http_response(status_code=403)
operation = mock.Mock()
operation.name = 'OperationName'
try:
handler(http_response, response, operation)
except errorhandler.ClientError as e:
self.assertIn('OperationName', str(e))
self.assertIn('client error', str(e))
self.assertEqual(e.error_code, 'AccessDenied')
self.assertEqual(e.error_message, 'Access Denied')
self.assertEqual(e.operation_name, 'OperationName')
except Exception as e:
self.fail("Unexpected error raised: %s" % e)
else:
self.fail("Expected errorhandler.ClientError to be raised "
"but no exception was raised.")
def test_error_handler_server_side(self):
response = {
'Error': {'Code': 'InternalError',
'HostId': 'foohost',
'Message': 'An internal error has occurred',
'RequestId': 'requestid'},
'ResponseMetadata': {}}
handler = errorhandler.ErrorHandler()
http_response = self.create_http_response(status_code=500)
operation = mock.Mock()
operation.name = 'OperationName'
try:
handler(http_response, response, operation)
except errorhandler.ServerError as e:
self.assertIn('OperationName', str(e))
self.assertIn('server error', str(e))
self.assertEqual(e.error_code, 'InternalError')
self.assertEqual(e.error_message, 'An internal error has occurred')
self.assertEqual(e.operation_name, 'OperationName')
except Exception as e:
self.fail("Unexpected error raised: %s" % e)
else:
self.fail("Expected errorhandler.ServerError to be raised "
"but no exception was raised.")
def test_no_exception_raised_on_200(self):
response = {
'CommonPrefixes': [],
'Contents': [],
}
handler = errorhandler.ErrorHandler()
http_response = self.create_http_response(status_code=200)
operation = mock.Mock()
operation.name = 'OperationName'
try:
self.assertIsNone(handler(http_response, response, operation))
except errorhandler.BaseOperationError as e:
self.fail("Unexpected error raised: %s" % e)
if __name__ == '__main__':
unittest.main()