Throw exceptions on erroneous status codes
This patch aims to additional exception checking on receiving other erroneous status codes apart from 400 and 404. Change-Id: I184c2c0627c457d9c49a84e9e8313a0c88617ec1
This commit is contained in:
parent
38c8c203f5
commit
11e18a4524
|
@ -22,7 +22,9 @@ raised as `ResourceNotFound`
|
||||||
|
|
||||||
from marconiclient import errors
|
from marconiclient import errors
|
||||||
|
|
||||||
__all__ = ['TransportError', 'ResourceNotFound', 'MalformedRequest']
|
__all__ = ['TransportError', 'ResourceNotFound', 'MalformedRequest',
|
||||||
|
'UnauthorizedError', 'ForbiddenError', 'ServiceUnavailableError',
|
||||||
|
'InternalServerError']
|
||||||
|
|
||||||
|
|
||||||
class TransportError(errors.MarconiError):
|
class TransportError(errors.MarconiError):
|
||||||
|
@ -41,3 +43,34 @@ class MalformedRequest(TransportError):
|
||||||
|
|
||||||
This error maps to HTTP's 400
|
This error maps to HTTP's 400
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
class UnauthorizedError(TransportError):
|
||||||
|
"""Indicates that a request was not authenticated
|
||||||
|
|
||||||
|
This error maps to HTTP's 401
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
class ForbiddenError(TransportError):
|
||||||
|
"""Indicates that a request is forbidden
|
||||||
|
to access the particular resource
|
||||||
|
|
||||||
|
This error maps to HTTP's 403
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
class InternalServerError(TransportError):
|
||||||
|
"""Indicates that the server encountered
|
||||||
|
an unexpected situation
|
||||||
|
|
||||||
|
This error maps to HTTP's 500
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
class ServiceUnavailableError(TransportError):
|
||||||
|
"""Indicates that the server was unable
|
||||||
|
to service the request
|
||||||
|
|
||||||
|
This error maps to HTTP's 503
|
||||||
|
"""
|
||||||
|
|
|
@ -29,7 +29,11 @@ class HttpTransport(base.Transport):
|
||||||
|
|
||||||
http_to_marconi = {
|
http_to_marconi = {
|
||||||
400: errors.MalformedRequest,
|
400: errors.MalformedRequest,
|
||||||
|
401: errors.UnauthorizedError,
|
||||||
|
403: errors.ForbiddenError,
|
||||||
404: errors.ResourceNotFound,
|
404: errors.ResourceNotFound,
|
||||||
|
500: errors.InternalServerError,
|
||||||
|
503: errors.ServiceUnavailableError
|
||||||
}
|
}
|
||||||
|
|
||||||
def __init__(self, options):
|
def __init__(self, options):
|
||||||
|
|
|
@ -23,6 +23,7 @@ from marconiclient.transport import request
|
||||||
|
|
||||||
|
|
||||||
class TestHttpTransport(base.TestBase):
|
class TestHttpTransport(base.TestBase):
|
||||||
|
|
||||||
"""Tests for the HTTP transport."""
|
"""Tests for the HTTP transport."""
|
||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
|
@ -79,3 +80,22 @@ class TestHttpTransport(base.TestBase):
|
||||||
params=params,
|
params=params,
|
||||||
headers=final_headers,
|
headers=final_headers,
|
||||||
data=None)
|
data=None)
|
||||||
|
|
||||||
|
def test_error_handling(self):
|
||||||
|
params = {'name': 'Opportunity',
|
||||||
|
'address': 'NASA'}
|
||||||
|
req = request.Request('http://example.org/',
|
||||||
|
operation='test_operation',
|
||||||
|
params=params)
|
||||||
|
|
||||||
|
with mock.patch.object(self.transport.client, 'request',
|
||||||
|
autospec=True) as request_method:
|
||||||
|
|
||||||
|
exception_iterator = self.transport.http_to_marconi.items()
|
||||||
|
|
||||||
|
for response_code, exception in exception_iterator:
|
||||||
|
|
||||||
|
resp = prequest.Response()
|
||||||
|
resp.status_code = response_code
|
||||||
|
request_method.return_value = resp
|
||||||
|
self.assertRaises(exception, lambda: self.transport.send(req))
|
||||||
|
|
Loading…
Reference in New Issue