From 7aa027b2005ff24f7308e1ec23eddb44bf352628 Mon Sep 17 00:00:00 2001 From: Dan Prince Date: Tue, 22 Mar 2011 10:01:18 -0400 Subject: Add unit test and code updates to ensure that a PUT requests to create/update server metadata only contain a single key. --- nova/api/openstack/server_metadata.py | 3 +++ nova/tests/api/openstack/test_server_metadata.py | 11 +++++++++++ 2 files changed, 14 insertions(+) diff --git a/nova/api/openstack/server_metadata.py b/nova/api/openstack/server_metadata.py index 1408f59a6..45bbac99d 100644 --- a/nova/api/openstack/server_metadata.py +++ b/nova/api/openstack/server_metadata.py @@ -55,6 +55,9 @@ class Controller(wsgi.Controller): if not id in body: expl = _('Request body and URI mismatch') raise exc.HTTPBadRequest(explanation=expl) + if len(body) > 1: + expl = _('Request body contains too many items') + raise exc.HTTPBadRequest(explanation=expl) self.compute_api.update_or_create_instance_metadata(context, server_id, body) diff --git a/nova/tests/api/openstack/test_server_metadata.py b/nova/tests/api/openstack/test_server_metadata.py index ed60d4b36..97cb57ebd 100644 --- a/nova/tests/api/openstack/test_server_metadata.py +++ b/nova/tests/api/openstack/test_server_metadata.py @@ -141,6 +141,17 @@ class ServerMetaDataTest(unittest.TestCase): res_dict = json.loads(res.body) self.assertEqual('value1', res_dict['key1']) + def test_update_item_too_many_keys(self): + self.stubs.Set(nova.db.api, 'update_or_create_instance_metadata', + return_create_instance_metadata) + req = webob.Request.blank('/v1.1/servers/1/meta/key1') + req.environ['api.version'] = '1.1' + req.method = 'PUT' + req.body = '{"key1": "value1", "key2": "value2"}' + req.headers["content-type"] = "application/json" + res = req.get_response(fakes.wsgi_app()) + self.assertEqual(400, res.status_int) + def test_update_item_body_uri_mismatch(self): self.stubs.Set(nova.db.api, 'update_or_create_instance_metadata', return_create_instance_metadata) -- cgit