diff --git a/nova/tests/unit/virt/libvirt/test_utils.py b/nova/tests/unit/virt/libvirt/test_utils.py index a49bf723ffaa..8a43c45f34b5 100644 --- a/nova/tests/unit/virt/libvirt/test_utils.py +++ b/nova/tests/unit/virt/libvirt/test_utils.py @@ -128,10 +128,12 @@ class LibvirtUtilsTestCase(test.NoDBTestCase): else: backing_info = {} backing_backing_file = backing_info.pop('backing_file', None) + backing_fmt = backing_info.pop('backing_fmt', + mock.sentinel.backing_fmt) mock_execute.return_value = ('stdout', None) mock_info.return_value = mock.Mock( - file_format=mock.sentinel.backing_fmt, + file_format=backing_fmt, cluster_size=mock.sentinel.cluster_size, backing_file=backing_backing_file, format_specific=backing_info) @@ -144,7 +146,7 @@ class LibvirtUtilsTestCase(test.NoDBTestCase): mock_execute.assert_has_calls([mock.call( 'qemu-img', 'create', '-f', 'qcow2', '-o', 'backing_file=%s,backing_fmt=%s,cluster_size=%s' % ( - mock.sentinel.backing_path, mock.sentinel.backing_fmt, + mock.sentinel.backing_path, backing_fmt, mock.sentinel.cluster_size), mock.sentinel.new_path)]) if backing_file: @@ -175,6 +177,28 @@ class LibvirtUtilsTestCase(test.NoDBTestCase): 'data': {'data-file': mock.sentinel.data_file}}, ) + def test_create_image_size_none(self): + self._test_create_cow_image( + backing_file=mock.sentinel.backing_file, + ) + + def test_create_image_vmdk(self): + self._test_create_cow_image( + backing_file={'file': mock.sentinel.backing_file, + 'backing_fmt': 'vmdk', + 'backing_file': None, + 'data': {'create-type': 'monolithicSparse'}} + ) + + def test_create_image_vmdk_invalid_type(self): + self.assertRaises(exception.ImageUnacceptable, + self._test_create_cow_image, + backing_file={'file': mock.sentinel.backing_file, + 'backing_fmt': 'vmdk', + 'backing_file': None, + 'data': {'create-type': 'monolithicFlat'}} + ) + @ddt.unpack @ddt.data({'fs_type': 'some_fs_type', 'default_eph_format': None, diff --git a/nova/virt/libvirt/utils.py b/nova/virt/libvirt/utils.py index 1d6f7f4e1d49..93c5b38cb775 100644 --- a/nova/virt/libvirt/utils.py +++ b/nova/virt/libvirt/utils.py @@ -155,7 +155,8 @@ def create_cow_image( reason=_('Base image failed safety check')) base_details = images.qemu_img_info(backing_file) - + if base_details.file_format == 'vmdk': + images.check_vmdk_image('base', base_details) if base_details.backing_file is not None: LOG.warning('Base image %s failed safety check', backing_file) raise exception.InvalidDiskInfo(