diff options
| author | Johannes Erdfelt <johannes.erdfelt@rackspace.com> | 2011-10-27 13:53:18 +0000 |
|---|---|---|
| committer | Johannes Erdfelt <johannes.erdfelt@rackspace.com> | 2011-10-27 18:14:23 +0000 |
| commit | 3c3fbaf552948d07c80a5f22aada5f046c3be67b (patch) | |
| tree | a9bba9bfb9aeb573e4b1a7330fc17de525f1ada2 /nova/tests | |
| parent | 16bacc3252b9a792159b247dcf9d2f3ebb6842ac (diff) | |
Fix overzealous use of faults.Fault() wrapper
wsgi.Resource will automatically wrap HTTP exceptions in faults.Fault()
but many extensions will unnecessarily wrap HTTP exceptions manually.
Also, let's raise exceptions instead of returning them to be consistent.
Change-Id: I297a4decbd4a00fb12ec471a5e76aeea3dda6d34
Diffstat (limited to 'nova/tests')
| -rw-r--r-- | nova/tests/api/openstack/extensions/foxinsocks.py | 7 | ||||
| -rw-r--r-- | nova/tests/api/openstack/test_extensions.py | 80 |
2 files changed, 83 insertions, 4 deletions
diff --git a/nova/tests/api/openstack/extensions/foxinsocks.py b/nova/tests/api/openstack/extensions/foxinsocks.py index d72365620..cbf101f47 100644 --- a/nova/tests/api/openstack/extensions/foxinsocks.py +++ b/nova/tests/api/openstack/extensions/foxinsocks.py @@ -16,6 +16,7 @@ # under the License. import json +import webob.exc from nova.api.openstack import extensions @@ -50,6 +51,8 @@ class Foxinsocks(object): self._add_tweedle)) actions.append(extensions.ActionExtension('servers', 'delete_tweedle', self._delete_tweedle)) + actions.append(extensions.ActionExtension('servers', 'fail', + self._fail)) return actions def get_request_extensions(self): @@ -85,3 +88,7 @@ class Foxinsocks(object): def _delete_tweedle(self, input_dict, req, id): return "Tweedle Beetle Deleted." + + def _fail(self, input_dict, req, id): + + raise webob.exc.HTTPBadRequest(explanation='Tweedle fail') diff --git a/nova/tests/api/openstack/test_extensions.py b/nova/tests/api/openstack/test_extensions.py index d96a67d7d..cb44288c7 100644 --- a/nova/tests/api/openstack/test_extensions.py +++ b/nova/tests/api/openstack/test_extensions.py @@ -46,6 +46,13 @@ class StubController(object): def index(self, req): return self.body + def create(self, req): + msg = 'All aboard the fail train!' + raise webob.exc.HTTPBadRequest(explanation=msg) + + def show(self, req, id): + raise webob.exc.HTTPNotFound() + class StubExtensionManager(object): """Provides access to Tweedle Beetles""" @@ -252,6 +259,47 @@ class ResourceExtensionTest(ExtensionTestCase): self.assertEqual(200, response.status_int) self.assertEqual(response_body, response.body) + def test_bad_request(self): + res_ext = extensions.ResourceExtension('tweedles', + StubController(response_body)) + manager = StubExtensionManager(res_ext) + app = openstack.APIRouter() + ext_midware = extensions.ExtensionMiddleware(app, manager) + ser_midware = wsgi.LazySerializationMiddleware(ext_midware) + request = webob.Request.blank("/123/tweedles") + request.method = "POST" + response = request.get_response(ser_midware) + self.assertEqual(400, response.status_int) + self.assertEqual('application/json', response.content_type) + body = json.loads(response.body) + expected = { + "badRequest": { + "message": "All aboard the fail train!", + "code": 400 + } + } + self.assertDictMatch(expected, body) + + def test_non_exist_resource(self): + res_ext = extensions.ResourceExtension('tweedles', + StubController(response_body)) + manager = StubExtensionManager(res_ext) + app = openstack.APIRouter() + ext_midware = extensions.ExtensionMiddleware(app, manager) + ser_midware = wsgi.LazySerializationMiddleware(ext_midware) + request = webob.Request.blank("/123/tweedles/1") + response = request.get_response(ser_midware) + self.assertEqual(404, response.status_int) + self.assertEqual('application/json', response.content_type) + body = json.loads(response.body) + expected = { + "itemNotFound": { + "message": "The resource could not be found.", + "code": 404 + } + } + self.assertDictMatch(expected, body) + class InvalidExtension(object): @@ -307,18 +355,42 @@ class ActionExtensionTest(ExtensionTestCase): self.assertEqual(200, response.status_int) self.assertEqual("Tweedle Beetle Deleted.", response.body) - def test_invalid_action_body(self): + def test_invalid_action(self): body = dict(blah=dict(name="test")) # Doesn't exist url = "/123/servers/abcd/action" response = self._send_server_action_request(url, body) self.assertEqual(400, response.status_int) - - def test_invalid_action(self): + self.assertEqual('application/json', response.content_type) + body = json.loads(response.body) + expected = { + "badRequest": { + "message": "There is no such server action: blah", + "code": 400 + } + } + self.assertDictMatch(expected, body) + + def test_non_exist_action(self): body = dict(blah=dict(name="test")) url = "/123/fdsa/1/action" response = self._send_server_action_request(url, body) self.assertEqual(404, response.status_int) + def test_failed_action(self): + body = dict(fail=dict(name="test")) + url = "/123/servers/abcd/action" + response = self._send_server_action_request(url, body) + self.assertEqual(400, response.status_int) + self.assertEqual('application/json', response.content_type) + body = json.loads(response.body) + expected = { + "badRequest": { + "message": "Tweedle fail", + "code": 400 + } + } + self.assertDictMatch(expected, body) + class RequestExtensionTest(ExtensionTestCase): @@ -360,7 +432,7 @@ class RequestExtensionTest(ExtensionTestCase): class ExtensionsXMLSerializerTest(test.TestCase): - def test_serialize_extenstion(self): + def test_serialize_extension(self): serializer = extensions.ExtensionsXMLSerializer() data = {'extension': { 'name': 'ext1', |
