vops.create_vm_inventory_folder.assert_called_once_with(
datacenter, ['OpenStack', project_folder_name, self.VOLUME_FOLDER])
+ @mock.patch('cinder.volume.drivers.vmware.vmdk.'
+ '_get_volume_type_extra_spec')
+ @ddt.data('full', 'linked')
+ def test_get_clone_type(self, clone_type, get_volume_type_extra_spec):
+ get_volume_type_extra_spec.return_value = clone_type
+
+ volume = self._create_volume_dict()
+ self.assertEqual(clone_type, self._driver._get_clone_type(volume))
+ get_volume_type_extra_spec.assert_called_once_with(
+ volume['volume_type_id'], 'clone_type',
+ default_value=volumeops.FULL_CLONE_TYPE)
+
+ @mock.patch('cinder.volume.drivers.vmware.vmdk.'
+ '_get_volume_type_extra_spec')
+ def test_get_clone_type_invalid(
+ self, get_volume_type_extra_spec):
+ get_volume_type_extra_spec.return_value = 'foo'
+
+ volume = self._create_volume_dict()
+ self.assertRaises(
+ cinder_exceptions.Invalid, self._driver._get_clone_type, volume)
+ get_volume_type_extra_spec.assert_called_once_with(
+ volume['volume_type_id'], 'clone_type',
+ default_value=volumeops.FULL_CLONE_TYPE)
+
@mock.patch.object(VMDK_DRIVER, '_extend_backing')
@mock.patch.object(VMDK_DRIVER, 'volumeops')
def test_clone_backing_linked(self, volume_ops, extend_backing):
:return: Clone type from the extra spec if present, else return
default 'full' clone type
"""
- return _get_volume_type_extra_spec(volume['volume_type_id'],
- 'clone_type',
- (volumeops.FULL_CLONE_TYPE,
- volumeops.LINKED_CLONE_TYPE),
- volumeops.FULL_CLONE_TYPE)
+ clone_type = _get_volume_type_extra_spec(
+ volume['volume_type_id'],
+ 'clone_type',
+ default_value=volumeops.FULL_CLONE_TYPE)
+
+ if (clone_type != volumeops.FULL_CLONE_TYPE
+ and clone_type != volumeops.LINKED_CLONE_TYPE):
+ msg = (_("Clone type '%(clone_type)s' is invalid; valid values"
+ " are: '%(full_clone)s' and '%(linked_clone)s'.") %
+ {'clone_type': clone_type,
+ 'full_clone': volumeops.FULL_CLONE_TYPE,
+ 'linked_clone': volumeops.LINKED_CLONE_TYPE})
+ LOG.error(msg)
+ raise exception.Invalid(message=msg)
+
+ return clone_type
def _clone_backing(self, volume, backing, snapshot, clone_type, src_vsize):
"""Clone the backing.