summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2012-10-25 09:42:45 +0000
committerGerrit Code Review <review@openstack.org>2012-10-25 09:42:45 +0000
commit8417af68d94ee2c0bf433a99bec1447df9c61025 (patch)
tree17b9ebb610fef29ae109b548b5abf29dbd59aff0
parent992a23cfaa5e2d73533998a6861921f840cbcb69 (diff)
parentdb7798a973bb05af5d4668a9f9b20ce62e8a47af (diff)
Merge "Fix Incorrect Exception when metadata is over 255 characters"
-rw-r--r--nova/api/openstack/compute/server_metadata.py3
-rw-r--r--nova/api/openstack/compute/servers.py4
-rw-r--r--nova/compute/api.py4
-rw-r--r--nova/exception.py4
-rw-r--r--nova/tests/api/openstack/compute/test_server_metadata.py12
-rw-r--r--nova/tests/api/openstack/compute/test_servers.py8
6 files changed, 23 insertions, 12 deletions
diff --git a/nova/api/openstack/compute/server_metadata.py b/nova/api/openstack/compute/server_metadata.py
index dfb4b55a8..4e5a3ee02 100644
--- a/nova/api/openstack/compute/server_metadata.py
+++ b/nova/api/openstack/compute/server_metadata.py
@@ -129,6 +129,9 @@ class Controller(object):
except exception.InvalidMetadata as error:
raise exc.HTTPBadRequest(explanation=unicode(error))
+ except exception.InvalidMetadataSize as error:
+ raise exc.HTTPRequestEntityTooLarge(explanation=unicode(error))
+
except exception.QuotaError as error:
raise exc.HTTPRequestEntityTooLarge(explanation=unicode(error),
headers={'Retry-After': 0})
diff --git a/nova/api/openstack/compute/servers.py b/nova/api/openstack/compute/servers.py
index 6574908bc..b8f52dda4 100644
--- a/nova/api/openstack/compute/servers.py
+++ b/nova/api/openstack/compute/servers.py
@@ -880,6 +880,8 @@ class Controller(wsgi.Controller):
raise exc.HTTPBadRequest(explanation=unicode(error))
except exception.InvalidMetadata as error:
raise exc.HTTPBadRequest(explanation=unicode(error))
+ except exception.InvalidMetadataSize as error:
+ raise exc.HTTPRequestEntityTooLarge(explanation=unicode(error))
except exception.ImageNotFound as error:
msg = _("Can not find requested image")
raise exc.HTTPBadRequest(explanation=msg)
@@ -1231,6 +1233,8 @@ class Controller(wsgi.Controller):
raise exc.HTTPNotFound(explanation=msg)
except exception.InvalidMetadata as error:
raise exc.HTTPBadRequest(explanation=unicode(error))
+ except exception.InvalidMetadataSize as error:
+ raise exc.HTTPRequestEntityTooLarge(explanation=unicode(error))
except exception.ImageNotFound:
msg = _("Cannot find image for rebuild")
raise exc.HTTPBadRequest(explanation=msg)
diff --git a/nova/compute/api.py b/nova/compute/api.py
index b320b5893..9611f0fff 100644
--- a/nova/compute/api.py
+++ b/nova/compute/api.py
@@ -269,11 +269,11 @@ class API(base.Base):
if len(k) > 255:
msg = _("Metadata property key greater than 255 characters")
LOG.warn(msg)
- raise exception.InvalidMetadata(reason=msg)
+ raise exception.InvalidMetadataSize(reason=msg)
if len(v) > 255:
msg = _("Metadata property value greater than 255 characters")
LOG.warn(msg)
- raise exception.InvalidMetadata(reason=msg)
+ raise exception.InvalidMetadataSize(reason=msg)
def _check_requested_networks(self, context, requested_networks):
""" Check if the networks requested belongs to the project
diff --git a/nova/exception.py b/nova/exception.py
index 8983103dd..ab9265f5d 100644
--- a/nova/exception.py
+++ b/nova/exception.py
@@ -263,6 +263,10 @@ class InvalidMetadata(Invalid):
message = _("Invalid metadata") + ": %(reason)s"
+class InvalidMetadataSize(Invalid):
+ message = _("Invalid metadata size") + ": %(reason)s"
+
+
class InvalidPortRange(Invalid):
message = _("Invalid port range %(from_port)s:%(to_port)s. %(msg)s")
diff --git a/nova/tests/api/openstack/compute/test_server_metadata.py b/nova/tests/api/openstack/compute/test_server_metadata.py
index c8814e705..bcce624d7 100644
--- a/nova/tests/api/openstack/compute/test_server_metadata.py
+++ b/nova/tests/api/openstack/compute/test_server_metadata.py
@@ -371,7 +371,7 @@ class ServerMetaDataTest(test.TestCase):
req.body = jsonutils.dumps(body)
req.headers["content-type"] = "application/json"
- self.assertRaises(webob.exc.HTTPBadRequest,
+ self.assertRaises(webob.exc.HTTPRequestEntityTooLarge,
self.controller.update,
req, self.uuid, ("a" * 260), body)
@@ -384,7 +384,7 @@ class ServerMetaDataTest(test.TestCase):
req.body = jsonutils.dumps(body)
req.headers["content-type"] = "application/json"
- self.assertRaises(webob.exc.HTTPBadRequest,
+ self.assertRaises(webob.exc.HTTPRequestEntityTooLarge,
self.controller.update,
req, self.uuid, "key1", body)
@@ -436,13 +436,13 @@ class ServerMetaDataTest(test.TestCase):
#test for long key
data = {"metadata": {"a" * 260: "value1"}}
req.body = jsonutils.dumps(data)
- self.assertRaises(webob.exc.HTTPBadRequest,
+ self.assertRaises(webob.exc.HTTPRequestEntityTooLarge,
self.controller.create, req, self.uuid, data)
#test for long value
data = {"metadata": {"key": "v" * 260}}
req.body = jsonutils.dumps(data)
- self.assertRaises(webob.exc.HTTPBadRequest,
+ self.assertRaises(webob.exc.HTTPRequestEntityTooLarge,
self.controller.create, req, self.uuid, data)
#test for empty key.
@@ -479,13 +479,13 @@ class ServerMetaDataTest(test.TestCase):
#test for long key
data = {"metadata": {"a" * 260: "value1"}}
req.body = jsonutils.dumps(data)
- self.assertRaises(webob.exc.HTTPBadRequest,
+ self.assertRaises(webob.exc.HTTPRequestEntityTooLarge,
self.controller.update_all, req, self.uuid, data)
#test for long value
data = {"metadata": {"key": "v" * 260}}
req.body = jsonutils.dumps(data)
- self.assertRaises(webob.exc.HTTPBadRequest,
+ self.assertRaises(webob.exc.HTTPRequestEntityTooLarge,
self.controller.update_all, req, self.uuid, data)
#test for empty key.
diff --git a/nova/tests/api/openstack/compute/test_servers.py b/nova/tests/api/openstack/compute/test_servers.py
index be9f88e76..0a35fb36a 100644
--- a/nova/tests/api/openstack/compute/test_servers.py
+++ b/nova/tests/api/openstack/compute/test_servers.py
@@ -1314,7 +1314,7 @@ class ServersControllerTest(test.TestCase):
req.method = 'POST'
req.body = jsonutils.dumps(body)
req.headers["content-type"] = "application/json"
- self.assertRaises(webob.exc.HTTPBadRequest,
+ self.assertRaises(webob.exc.HTTPRequestEntityTooLarge,
self.controller._action_rebuild, req, FAKE_UUID, body)
def test_rebuild_instance_with_metadata_value_too_long(self):
@@ -1348,7 +1348,7 @@ class ServersControllerTest(test.TestCase):
req.method = 'POST'
req.body = jsonutils.dumps(body)
req.headers["content-type"] = "application/json"
- self.assertRaises(webob.exc.HTTPBadRequest,
+ self.assertRaises(webob.exc.HTTPRequestEntityTooLarge,
self.controller._action_rebuild, req, FAKE_UUID, body)
def test_rebuild_instance_fails_when_min_ram_too_small(self):
@@ -2565,7 +2565,7 @@ class ServersControllerCreateTest(test.TestCase):
req.body = jsonutils.dumps(body)
req.headers["content-type"] = "application/json"
- self.assertRaises(webob.exc.HTTPBadRequest,
+ self.assertRaises(webob.exc.HTTPRequestEntityTooLarge,
self.controller.create, req, body)
def test_create_instance_metadata_value_too_long(self):
@@ -2589,7 +2589,7 @@ class ServersControllerCreateTest(test.TestCase):
req.body = jsonutils.dumps(body)
req.headers["content-type"] = "application/json"
- self.assertRaises(webob.exc.HTTPBadRequest,
+ self.assertRaises(webob.exc.HTTPRequestEntityTooLarge,
self.controller.create, req, body)
def test_create_instance_metadata_key_blank(self):