summaryrefslogtreecommitdiffstats
path: root/nova/tests
diff options
context:
space:
mode:
authorJohannes Erdfelt <johannes.erdfelt@rackspace.com>2011-10-27 13:53:18 +0000
committerJohannes Erdfelt <johannes.erdfelt@rackspace.com>2011-10-27 18:14:23 +0000
commit3c3fbaf552948d07c80a5f22aada5f046c3be67b (patch)
treea9bba9bfb9aeb573e4b1a7330fc17de525f1ada2 /nova/tests
parent16bacc3252b9a792159b247dcf9d2f3ebb6842ac (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.py7
-rw-r--r--nova/tests/api/openstack/test_extensions.py80
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',