diff options
| author | Jenkins <jenkins@review.openstack.org> | 2012-10-25 09:42:45 +0000 |
|---|---|---|
| committer | Gerrit Code Review <review@openstack.org> | 2012-10-25 09:42:45 +0000 |
| commit | 8417af68d94ee2c0bf433a99bec1447df9c61025 (patch) | |
| tree | 17b9ebb610fef29ae109b548b5abf29dbd59aff0 | |
| parent | 992a23cfaa5e2d73533998a6861921f840cbcb69 (diff) | |
| parent | db7798a973bb05af5d4668a9f9b20ce62e8a47af (diff) | |
Merge "Fix Incorrect Exception when metadata is over 255 characters"
| -rw-r--r-- | nova/api/openstack/compute/server_metadata.py | 3 | ||||
| -rw-r--r-- | nova/api/openstack/compute/servers.py | 4 | ||||
| -rw-r--r-- | nova/compute/api.py | 4 | ||||
| -rw-r--r-- | nova/exception.py | 4 | ||||
| -rw-r--r-- | nova/tests/api/openstack/compute/test_server_metadata.py | 12 | ||||
| -rw-r--r-- | nova/tests/api/openstack/compute/test_servers.py | 8 |
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): |
