Update quota-set throw 500 error

The server doesn't check whether the parameter "quota_set" or
"quota_class_set" is in request
body.So the 500 error has been thrown.

We should catch the KeyError and transfer the KeyError to
400(HTTPBadRequest) instead of 500.

Closes-Bug: #1249971
(cherry picked from commit 2ed2f3aff8)
Change-Id: I01260c77efa50324f3d203888689cdb1e94d2c21
This commit is contained in:
ling-yun 2013-11-11 22:00:03 +08:00
parent ace214a87f
commit ed41b6804a
3 changed files with 21 additions and 2 deletions

View File

@ -42,7 +42,7 @@ class QuotaClassTemplate(xmlutil.TemplateBuilder):
return xmlutil.MasterTemplate(root, 1)
class QuotaClassSetsController(object):
class QuotaClassSetsController(wsgi.Controller):
def _format_quota_set(self, quota_class, quota_set):
"""Convert the quota object to a result dict"""
@ -68,6 +68,11 @@ class QuotaClassSetsController(object):
context = req.environ['cinder.context']
authorize(context)
quota_class = id
if not self.is_valid_body(body, 'quota_class_set'):
msg = _("Missing required element quota_class_set"
" in request body.")
raise webob.exc.HTTPBadRequest(explanation=msg)
for key in body['quota_class_set'].keys():
if key in QUOTAS:
value = int(body['quota_class_set'][key])

View File

@ -46,7 +46,7 @@ class QuotaTemplate(xmlutil.TemplateBuilder):
return xmlutil.MasterTemplate(root, 1)
class QuotaSetsController(object):
class QuotaSetsController(wsgi.Controller):
def _format_quota_set(self, project_id, quota_set):
"""Convert the quota object to a result dict"""
@ -96,6 +96,10 @@ class QuotaSetsController(object):
context = req.environ['cinder.context']
authorize_update(context)
project_id = id
if not self.is_valid_body(body, 'quota_set'):
msg = _("Missing required element quota_set in request body.")
raise webob.exc.HTTPBadRequest(explanation=msg)
for key in body['quota_set'].keys():
if key in QUOTAS:
self._validate_quota_limit(body['quota_set'][key])

View File

@ -101,6 +101,16 @@ class QuotaSetsControllerTest(test.TestCase):
self.assertRaises(webob.exc.HTTPForbidden, self.controller.update,
self.req, 'foo', make_body(tenant_id=None))
def test_update_without_quota_set_field(self):
body = {'fake_quota_set': {'gigabytes': 100}}
self.assertRaises(webob.exc.HTTPBadRequest, self.controller.update,
self.req, 'foo', body)
def test_update_empty_body(self):
body = {}
self.assertRaises(webob.exc.HTTPBadRequest, self.controller.update,
self.req, 'foo', body)
class QuotaSerializerTest(test.TestCase):