summaryrefslogtreecommitdiffstats
path: root/nova
diff options
context:
space:
mode:
authorSirisha Devineni <sirisha_devineni@persistent.co.in>2012-09-13 00:00:32 +0530
committerSirisha Devineni <sirisha_devineni@persistent.co.in>2012-09-13 15:36:58 +0530
commit760e59b8632edd8cbf395289e24f380ffd06f047 (patch)
treefc994e610e5bdf116e5051d473e303a098c9f407 /nova
parente72db9fe9345c48f4ea287643306d884c82f04f4 (diff)
Validate keypair create request body
Check if keypair create request body has manditory keys like keypair, name and raise HTTPBadRequest if the required keys are missing. Fixes bug 1049619 Change-Id: Ia6129e1b04e910fbea81b62b921a228aafa32f64
Diffstat (limited to 'nova')
-rw-r--r--nova/api/openstack/compute/contrib/keypairs.py9
-rw-r--r--nova/tests/api/openstack/compute/contrib/test_keypairs.py12
2 files changed, 19 insertions, 2 deletions
diff --git a/nova/api/openstack/compute/contrib/keypairs.py b/nova/api/openstack/compute/contrib/keypairs.py
index dc0c74b11..e5e1e37fd 100644
--- a/nova/api/openstack/compute/contrib/keypairs.py
+++ b/nova/api/openstack/compute/contrib/keypairs.py
@@ -70,8 +70,13 @@ class KeypairController(object):
context = req.environ['nova.context']
authorize(context)
- params = body['keypair']
- name = params['name']
+
+ try:
+ params = body['keypair']
+ name = params['name']
+ except KeyError:
+ msg = _("Invalid request body")
+ raise webob.exc.HTTPBadRequest(explanation=msg)
try:
if 'public_key' in params:
diff --git a/nova/tests/api/openstack/compute/contrib/test_keypairs.py b/nova/tests/api/openstack/compute/contrib/test_keypairs.py
index a14a64da5..d7fc378c6 100644
--- a/nova/tests/api/openstack/compute/contrib/test_keypairs.py
+++ b/nova/tests/api/openstack/compute/contrib/test_keypairs.py
@@ -295,6 +295,18 @@ class KeypairsTest(test.TestCase):
self.assertTrue('key_name' in server_dict)
self.assertEquals(server_dict['key_name'], '')
+ def test_keypair_create_with_invalid_keypairBody(self):
+ body = {'alpha': {'name': 'create_test'}}
+ req = webob.Request.blank('/v1.1/fake/os-keypairs')
+ req.method = 'POST'
+ req.body = jsonutils.dumps(body)
+ req.headers['Content-Type'] = 'application/json'
+ res = req.get_response(fakes.wsgi_app())
+ res_dict = jsonutils.loads(res.body)
+ self.assertEqual(res.status_int, 400)
+ self.assertEqual(res_dict['badRequest']['message'],
+ "Invalid request body")
+
class KeypairsXMLSerializerTest(test.TestCase):
def setUp(self):