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.
Change-Id: I01260c77efa50324f3d203888689cdb1e94d2c21
Closes-Bug: #
1249971
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"""
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])
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"""
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)
+
bad_keys = []
for key, value in body['quota_set'].items():
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):