72
72
exception = MAASAPINotFound("Huh?")
73
73
self.assertIsNone(middleware.process_exception(request, exception))
75
def test_ignores_unknown_exception(self):
76
# An unknown exception is not processed by the middleware
79
self.process_exception(ValueError("Error occurred!")))
75
def test_unknown_exception_generates_internal_server_error(self):
76
# An unknown exception generates an internal server error with the
78
error_message = factory.getRandomString()
79
response = self.process_exception(RuntimeError(error_message))
81
(httplib.INTERNAL_SERVER_ERROR, error_message),
82
(response.status_code, response.content))
81
84
def test_reports_MAASAPIException_with_appropriate_api_error(self):
82
85
class MyException(MAASAPIException):
83
86
api_error = httplib.UNAUTHORIZED
85
exception = MyException("Error occurred!")
88
error_message = factory.getRandomString()
89
exception = MyException(error_message)
86
90
response = self.process_exception(exception)
88
(httplib.UNAUTHORIZED, "Error occurred!"),
92
(httplib.UNAUTHORIZED, error_message),
89
93
(response.status_code, response.content))
91
95
def test_renders_MAASAPIException_as_unicode(self):
99
103
(response.status_code, response.content.decode('utf-8')))
101
105
def test_reports_ValidationError_as_Bad_Request(self):
102
response = self.process_exception(ValidationError("Validation Error"))
106
error_message = factory.getRandomString()
107
response = self.process_exception(ValidationError(error_message))
103
108
self.assertEqual(
104
(httplib.BAD_REQUEST, "Validation Error"),
109
(httplib.BAD_REQUEST, error_message),
105
110
(response.status_code, response.content))
107
112
def test_returns_ValidationError_message_dict_as_json(self):
108
exception = ValidationError("Error")
113
exception = ValidationError(factory.getRandomString())
109
114
exception_dict = {'hostname': 'invalid'}
110
115
setattr(exception, 'message_dict', exception_dict)
111
116
response = self.process_exception(exception)
118
123
def test_handles_error_on_API(self):
119
124
middleware = APIErrorsMiddleware()
120
125
non_api_request = fake_request("/api/1.0/hello")
121
exception = MAASAPINotFound("Have you looked under the couch?")
126
error_message = factory.getRandomString()
127
exception = MAASAPINotFound(error_message)
122
128
response = middleware.process_exception(non_api_request, exception)
123
129
self.assertEqual(
124
(httplib.NOT_FOUND, "Have you looked under the couch?"),
130
(httplib.NOT_FOUND, error_message),
125
131
(response.status_code, response.content))
127
133
def test_ignores_error_outside_API(self):
128
134
middleware = APIErrorsMiddleware()
129
135
non_api_request = fake_request("/middleware/api/hello")
130
exception = MAASAPINotFound("Have you looked under the couch?")
136
exception = MAASAPINotFound(factory.getRandomString())
131
137
self.assertIsNone(
132
138
middleware.process_exception(non_api_request, exception))