summaryrefslogtreecommitdiffstats
path: root/nova
diff options
context:
space:
mode:
authorMike Perez <thingee@gmail.com>2012-07-20 09:12:50 -0700
committerMike Perez <thingee@gmail.com>2012-07-20 09:15:14 -0700
commitac5df2277968598914aeb803f5d7b57fabe876f0 (patch)
tree07762291e513dbb8adb766764e0ce6edac384c5a /nova
parentbeb15b5e76312d9100b84d5a80af7ce2e1f57c9b (diff)
downloadnova-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.py13
-rw-r--r--nova/volume/api.py3
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: