summaryrefslogtreecommitdiff
path: root/glance_store/tests/unit/test_cinder_store.py
diff options
context:
space:
mode:
Diffstat (limited to 'glance_store/tests/unit/test_cinder_store.py')
-rw-r--r--glance_store/tests/unit/test_cinder_store.py50
1 files changed, 48 insertions, 2 deletions
diff --git a/glance_store/tests/unit/test_cinder_store.py b/glance_store/tests/unit/test_cinder_store.py
index 82c2bd4..347cbf6 100644
--- a/glance_store/tests/unit/test_cinder_store.py
+++ b/glance_store/tests/unit/test_cinder_store.py
@@ -16,6 +16,8 @@
import contextlib
import errno
import hashlib
+import io
+import math
import os
from unittest import mock
@@ -344,7 +346,7 @@ class TestCinderStore(base.StoreBaseTest,
self.assertEqual(expected_image_size, image_size)
def _test_cinder_add(self, fake_volume, volume_file, size_kb=5,
- verifier=None):
+ verifier=None, fail_resize=False):
expected_image_id = str(uuid.uuid4())
expected_size = size_kb * units.Ki
expected_file_contents = b"*" * expected_size
@@ -365,7 +367,11 @@ class TestCinderStore(base.StoreBaseTest,
with mock.patch.object(cinder.Store, 'get_cinderclient') as mock_cc, \
mock.patch.object(self.store, '_open_cinder_volume',
- side_effect=fake_open):
+ side_effect=fake_open), \
+ mock.patch.object(
+ cinder.Store, '_wait_resize_device') as mock_wait_resize:
+ if fail_resize:
+ mock_wait_resize.side_effect = exceptions.BackendException()
mock_cc.return_value = FakeObject(client=fake_client,
volumes=fake_volumes)
loc, size, checksum, multihash, _ = self.store.add(
@@ -448,3 +454,43 @@ class TestCinderStore(base.StoreBaseTest,
self.store.configure_add()
mock_log.warning.assert_called_with(
"Invalid `cinder_volume_type some_random_type`")
+
+ def test__get_device_size(self):
+ fake_data = b"fake binary data"
+ fake_len = int(math.ceil(float(len(fake_data)) / units.Gi))
+ fake_file = io.BytesIO(fake_data)
+ dev_size = cinder.Store._get_device_size(fake_file)
+ self.assertEqual(fake_len, dev_size)
+
+ @mock.patch.object(time, 'sleep')
+ def test__wait_resize_device_resized(self, mock_sleep):
+ fake_vol = mock.MagicMock()
+ fake_vol.size = 2
+ fake_file = io.BytesIO(b"fake binary data")
+ with mock.patch.object(
+ cinder.Store, '_get_device_size') as mock_get_dev_size:
+ mock_get_dev_size.side_effect = [1, 2]
+ cinder.Store._wait_resize_device(fake_vol, fake_file)
+
+ @mock.patch.object(time, 'sleep')
+ def test__wait_resize_device_fails(self, mock_sleep):
+ fake_vol = mock.MagicMock()
+ fake_vol.size = 2
+ fake_file = io.BytesIO(b"fake binary data")
+ with mock.patch.object(
+ cinder.Store, '_get_device_size',
+ return_value=1):
+ self.assertRaises(
+ exceptions.BackendException,
+ cinder.Store._wait_resize_device,
+ fake_vol, fake_file)
+
+ def test_cinder_add_fail_resize(self):
+ volume_file = io.BytesIO()
+ fake_volume = mock.MagicMock(id=str(uuid.uuid4()),
+ status='available',
+ size=1)
+ self.assertRaises(exceptions.BackendException,
+ self._test_cinder_add, fake_volume, volume_file,
+ fail_resize=True)
+ fake_volume.delete.assert_called_once()