Add invalid number checking in flavor creation api

Flavor creation api doesn't check whether 'memory_mb'
argument number is integer,add invalid number checking
into the flavor creation function to remind the user to
input right value

Fixes bug #1171278

Change-Id: I8308f66c485d8c872864661148e9eac7b685e406
This commit is contained in:
jiataotj 2013-05-28 18:20:15 +08:00
parent cefb0510b8
commit 8ee10c55b0
3 changed files with 24 additions and 7 deletions

View File

@ -76,6 +76,8 @@ class FlavorManageController(wsgi.Controller):
except (exception.InstanceTypeExists, except (exception.InstanceTypeExists,
exception.InstanceTypeIdExists) as err: exception.InstanceTypeIdExists) as err:
raise webob.exc.HTTPConflict(explanation=err.format_message()) raise webob.exc.HTTPConflict(explanation=err.format_message())
except exception.InvalidInput as exc:
raise webob.exc.HTTPBadRequest(explanation=exc.format_message())
return self._view_builder.show(req, flavor) return self._view_builder.show(req, flavor)

View File

@ -95,20 +95,20 @@ def create(name, memory, vcpus, root_gb, ephemeral_gb=0, flavorid=None,
# Some attributes are positive ( > 0) integers # Some attributes are positive ( > 0) integers
for option in ['memory_mb', 'vcpus']: for option in ['memory_mb', 'vcpus']:
try: try:
assert int(str(kwargs[option])) > 0
kwargs[option] = int(kwargs[option]) kwargs[option] = int(kwargs[option])
assert kwargs[option] > 0 except (ValueError, AssertionError, TypeError):
except (ValueError, AssertionError): msg = _("'%s' argument must be a positive integer") % option
msg = _("'%s' argument must be greater than 0") % option
raise exception.InvalidInput(reason=msg) raise exception.InvalidInput(reason=msg)
# Some attributes are non-negative ( >= 0) integers # Some attributes are non-negative ( >= 0) integers
for option in ['root_gb', 'ephemeral_gb', 'swap']: for option in ['root_gb', 'ephemeral_gb', 'swap']:
try: try:
assert int(str(kwargs[option])) >= 0
kwargs[option] = int(kwargs[option]) kwargs[option] = int(kwargs[option])
assert kwargs[option] >= 0 except (ValueError, AssertionError, TypeError):
except (ValueError, AssertionError): msg = _("'%s' argument must be an integer greater than or"
msg = _("'%s' argument must be greater than or equal" " equal to 0") % option
" to 0") % option
raise exception.InvalidInput(reason=msg) raise exception.InvalidInput(reason=msg)
# rxtx_factor should be a positive float # rxtx_factor should be a positive float

View File

@ -218,3 +218,18 @@ class FlavorManageTest(test.TestCase):
req.body = jsonutils.dumps(expected) req.body = jsonutils.dumps(expected)
res = req.get_response(self.app) res = req.get_response(self.app)
self.assertEqual(res.status_int, 409) self.assertEqual(res.status_int, 409)
def test_invalid_memory_mb(self):
"""Check negative and decimal number can't be accepted."""
self.stubs.UnsetAll()
self.assertRaises(exception.InvalidInput, flavors.create, "abc",
-512, 2, 1, 1, 1234, 512, 1, True)
self.assertRaises(exception.InvalidInput, flavors.create, "abcd",
512.2, 2, 1, 1, 1234, 512, 1, True)
self.assertRaises(exception.InvalidInput, flavors.create, "abcde",
None, 2, 1, 1, 1234, 512, 1, True)
self.assertRaises(exception.InvalidInput, flavors.create, "abcdef",
512, 2, None, 1, 1234, 512, 1, True)
self.assertRaises(exception.InvalidInput, flavors.create, "abcdef",
"test_memory_mb", 2, None, 1, 1234, 512, 1, True)