summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDan Prince <dan.prince@rackspace.com>2011-03-22 10:01:18 -0400
committerDan Prince <dan.prince@rackspace.com>2011-03-22 10:01:18 -0400
commit7aa027b2005ff24f7308e1ec23eddb44bf352628 (patch)
treed142aa9766e80a9ca96116aba43b18200580a55e
parent3ae9a489667ed6f4b03a19d5e14bec8e1d4eb20d (diff)
Add unit test and code updates to ensure that a PUT requests to
create/update server metadata only contain a single key.
-rw-r--r--nova/api/openstack/server_metadata.py3
-rw-r--r--nova/tests/api/openstack/test_server_metadata.py11
2 files changed, 14 insertions, 0 deletions
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)