Merge "Fix bug where image size is incorrectly rejected."
This commit is contained in:
commit
700583d262
@ -554,6 +554,49 @@ class VolumeTestCase(test.TestCase):
|
|||||||
db.volume_destroy(self.context, volume_id)
|
db.volume_destroy(self.context, volume_id)
|
||||||
os.unlink(dst_path)
|
os.unlink(dst_path)
|
||||||
|
|
||||||
|
def test_create_volume_from_exact_sized_image(self):
|
||||||
|
"""Verify that an image which is exactly the same size as the
|
||||||
|
volume, will work correctly."""
|
||||||
|
class _FakeImageService:
|
||||||
|
def __init__(self, db_driver=None, image_service=None):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def show(self, context, image_id):
|
||||||
|
return {'size': 2 * 1024 * 1024 * 1024}
|
||||||
|
|
||||||
|
image_id = '70a599e0-31e7-49b7-b260-868f441e862b'
|
||||||
|
|
||||||
|
try:
|
||||||
|
volume_id = None
|
||||||
|
volume_api = cinder.volume.api.API(
|
||||||
|
image_service=_FakeImageService())
|
||||||
|
volume = volume_api.create(self.context, 2, 'name', 'description',
|
||||||
|
image_id=1)
|
||||||
|
volume_id = volume['id']
|
||||||
|
self.assertEqual(volume['status'], 'creating')
|
||||||
|
|
||||||
|
finally:
|
||||||
|
# cleanup
|
||||||
|
db.volume_destroy(self.context, volume_id)
|
||||||
|
|
||||||
|
def test_create_volume_from_oversized_image(self):
|
||||||
|
"""Verify that an image which is too big will fail correctly."""
|
||||||
|
class _FakeImageService:
|
||||||
|
def __init__(self, db_driver=None, image_service=None):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def show(self, context, image_id):
|
||||||
|
return {'size': 2 * 1024 * 1024 * 1024 + 1}
|
||||||
|
|
||||||
|
image_id = '70a599e0-31e7-49b7-b260-868f441e862b'
|
||||||
|
|
||||||
|
volume_api = cinder.volume.api.API(image_service=_FakeImageService())
|
||||||
|
|
||||||
|
self.assertRaises(exception.InvalidInput,
|
||||||
|
volume_api.create,
|
||||||
|
self.context, 2,
|
||||||
|
'name', 'description', image_id=1)
|
||||||
|
|
||||||
def _do_test_create_volume_with_size(self, size):
|
def _do_test_create_volume_with_size(self, size):
|
||||||
def fake_reserve(context, expire=None, **deltas):
|
def fake_reserve(context, expire=None, **deltas):
|
||||||
return ["RESERVATION"]
|
return ["RESERVATION"]
|
||||||
|
@ -135,7 +135,7 @@ class API(base.Base):
|
|||||||
if image_id:
|
if image_id:
|
||||||
# check image existence
|
# check image existence
|
||||||
image_meta = self.image_service.show(context, image_id)
|
image_meta = self.image_service.show(context, image_id)
|
||||||
image_size_in_gb = int(image_meta['size']) / GB
|
image_size_in_gb = (int(image_meta['size']) + GB - 1) / GB
|
||||||
#check image size is not larger than volume size.
|
#check image size is not larger than volume size.
|
||||||
if image_size_in_gb > size:
|
if image_size_in_gb > size:
|
||||||
msg = _('Size of specified image is larger than volume size.')
|
msg = _('Size of specified image is larger than volume size.')
|
||||||
|
Loading…
x
Reference in New Issue
Block a user