diff options
author | Mike Perez <thingee@gmail.com> | 2012-07-20 09:12:50 -0700 |
---|---|---|
committer | Mike Perez <thingee@gmail.com> | 2012-07-20 09:15:14 -0700 |
commit | ac5df2277968598914aeb803f5d7b57fabe876f0 (patch) | |
tree | 07762291e513dbb8adb766764e0ce6edac384c5a /nova | |
parent | beb15b5e76312d9100b84d5a80af7ce2e1f57c9b (diff) | |
download | nova-ac5df2277968598914aeb803f5d7b57fabe876f0.tar.gz nova-ac5df2277968598914aeb803f5d7b57fabe876f0.tar.xz nova-ac5df2277968598914aeb803f5d7b57fabe876f0.zip |
Don't create volumes if an incorrect size was given
backported from cinder
bug 1006875
Change-Id: I5f327dc0278413575e8c686b2db3b6000f19c4c7
Diffstat (limited to 'nova')
-rw-r--r-- | nova/tests/api/openstack/volume/test_volumes.py | 13 | ||||
-rw-r--r-- | nova/volume/api.py | 3 |
2 files changed, 16 insertions, 0 deletions
diff --git a/nova/tests/api/openstack/volume/test_volumes.py b/nova/tests/api/openstack/volume/test_volumes.py index 0d671dfde..199e1fa95 100644 --- a/nova/tests/api/openstack/volume/test_volumes.py +++ b/nova/tests/api/openstack/volume/test_volumes.py @@ -19,6 +19,7 @@ from lxml import etree import webob from nova.api.openstack.volume import volumes +from nova import exception from nova import flags from nova.openstack.common import timeutils from nova import test @@ -65,6 +66,18 @@ class VolumeApiTest(test.TestCase): 'size': 100}} self.assertEqual(res_dict, expected) + def test_volume_creation_fails_with_bad_size(self): + vol = {"size": '', + "display_name": "Volume Test Name", + "display_description": "Volume Test Desc", + "availability_zone": "zone1:host1"} + body = {"volume": vol} + req = fakes.HTTPRequest.blank('/v1/volumes') + self.assertRaises(exception.InvalidInput, + self.controller.create, + req, + body) + def test_volume_create_no_body(self): body = {} req = fakes.HTTPRequest.blank('/v1/volumes') diff --git a/nova/volume/api.py b/nova/volume/api.py index ee079021a..90eef1e9c 100644 --- a/nova/volume/api.py +++ b/nova/volume/api.py @@ -80,6 +80,9 @@ class API(base.Base): else: snapshot_id = None + if not isinstance(size, int) or size <= 0: + msg = _('Volume size must be an integer and greater than 0') + raise exception.InvalidInput(reason=msg) try: reservations = QUOTAS.reserve(context, volumes=1, gigabytes=size) except exception.OverQuota as e: |