summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlex Meade <alex.meade@rackspace.com>2011-08-10 21:27:40 -0400
committerAlex Meade <alex.meade@rackspace.com>2011-08-10 21:27:40 -0400
commit0a543d4f8ff31733c32cbd9063e461ca41a0b076 (patch)
treea2a098f9e1daab5ddf1262583dfc0aa2a0e76092
parente78499c51b1cec93c0bdaadbcb78e71bf66d473d (diff)
Changed bad server actions requests to raise an HTTP 400
-rw-r--r--nova/api/openstack/servers.py10
-rw-r--r--nova/tests/api/openstack/test_extensions.py2
-rw-r--r--nova/tests/api/openstack/test_server_actions.py20
3 files changed, 27 insertions, 5 deletions
diff --git a/nova/api/openstack/servers.py b/nova/api/openstack/servers.py
index 736fdf6ce..c7d17a5bc 100644
--- a/nova/api/openstack/servers.py
+++ b/nova/api/openstack/servers.py
@@ -210,11 +210,15 @@ class Controller(object):
}
self.actions.update(admin_actions)
- for key in self.actions.keys():
- if key in body:
+ for key in body.keys():
+ if key in self.actions:
return self.actions[key](body, req, id)
+ else:
+ msg = _('There is no such server action: %s' % key)
+ raise exc.HTTPBadRequest(explanation=msg)
- raise exc.HTTPNotImplemented()
+ msg = _('Invalid request body')
+ raise exc.HTTPBadRequest(explanation=msg)
def _action_create_backup(self, input_dict, req, instance_id):
"""Backup a server instance.
diff --git a/nova/tests/api/openstack/test_extensions.py b/nova/tests/api/openstack/test_extensions.py
index 8b7e11a5b..12eee3367 100644
--- a/nova/tests/api/openstack/test_extensions.py
+++ b/nova/tests/api/openstack/test_extensions.py
@@ -280,7 +280,7 @@ class ActionExtensionTest(test.TestCase):
def test_invalid_action_body(self):
body = dict(blah=dict(name="test")) # Doesn't exist
response = self._send_server_action_request("/servers/1/action", body)
- self.assertEqual(501, response.status_int)
+ self.assertEqual(400, response.status_int)
def test_invalid_action(self):
body = dict(blah=dict(name="test"))
diff --git a/nova/tests/api/openstack/test_server_actions.py b/nova/tests/api/openstack/test_server_actions.py
index 717e11c00..687a19390 100644
--- a/nova/tests/api/openstack/test_server_actions.py
+++ b/nova/tests/api/openstack/test_server_actions.py
@@ -352,7 +352,7 @@ class ServerActionsTest(test.TestCase):
req.body = json.dumps(body)
req.headers["content-type"] = "application/json"
response = req.get_response(fakes.wsgi_app())
- self.assertEqual(501, response.status_int)
+ self.assertEqual(400, response.status_int)
def test_create_backup_with_metadata(self):
self.flags(allow_admin_api=True)
@@ -487,6 +487,24 @@ class ServerActionsTestV11(test.TestCase):
def tearDown(self):
self.stubs.UnsetAll()
+ def test_server_bad_body(self):
+ body = {}
+ req = webob.Request.blank('/v1.1/servers/1/action')
+ req.method = 'POST'
+ req.content_type = 'application/json'
+ req.body = json.dumps(body)
+ res = req.get_response(fakes.wsgi_app())
+ self.assertEqual(res.status_int, 400)
+
+ def test_server_unknown_action(self):
+ body = {'sockTheFox': {'fakekey': '1234'}}
+ req = webob.Request.blank('/v1.1/servers/1/action')
+ req.method = 'POST'
+ req.content_type = 'application/json'
+ req.body = json.dumps(body)
+ res = req.get_response(fakes.wsgi_app())
+ self.assertEqual(res.status_int, 400)
+
def test_server_change_password(self):
mock_method = MockSetAdminPassword()
self.stubs.Set(nova.compute.api.API, 'set_admin_password', mock_method)