diff --git a/cinder/api/contrib/quota_classes.py b/cinder/api/contrib/quota_classes.py index d229825de4..72bffcb2e8 100644 --- a/cinder/api/contrib/quota_classes.py +++ b/cinder/api/contrib/quota_classes.py @@ -42,7 +42,7 @@ def construct(self): 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 @@ def update(self, req, id, body): 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]) diff --git a/cinder/api/contrib/quotas.py b/cinder/api/contrib/quotas.py index 08b233152a..388571de6c 100644 --- a/cinder/api/contrib/quotas.py +++ b/cinder/api/contrib/quotas.py @@ -48,7 +48,7 @@ def construct(self): 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""" @@ -98,6 +98,10 @@ def update(self, req, id, body): 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(): diff --git a/cinder/tests/api/contrib/test_quotas.py b/cinder/tests/api/contrib/test_quotas.py index 4a70f68c02..312682d434 100644 --- a/cinder/tests/api/contrib/test_quotas.py +++ b/cinder/tests/api/contrib/test_quotas.py @@ -101,6 +101,16 @@ def test_update_no_admin(self): 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):