diff --git a/cinder/tests/unit/volume/drivers/vmware/fake.py b/cinder/tests/unit/volume/drivers/vmware/fake.py new file mode 100644 index 00000000000..0bf4348a961 --- /dev/null +++ b/cinder/tests/unit/volume/drivers/vmware/fake.py @@ -0,0 +1,29 @@ +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + + +class ManagedObjectReference(object): + """A managed object reference is a remote identifier.""" + + def __init__(self, name="ManagedObject", value=None): + super(ManagedObjectReference, self) + # Managed Object Reference value attributes + # typically have values like vm-123 or + # host-232 and not UUID. + self.value = value + self._value_1 = value + # Managed Object Reference type + # attributes hold the name of the type + # of the vCenter object the value + # attribute is the identifier for + self.type = name + self._type = name diff --git a/cinder/tests/unit/volume/drivers/vmware/test_vmware_datastore.py b/cinder/tests/unit/volume/drivers/vmware/test_vmware_datastore.py index 403d3b79de8..741c96cba30 100644 --- a/cinder/tests/unit/volume/drivers/vmware/test_vmware_datastore.py +++ b/cinder/tests/unit/volume/drivers/vmware/test_vmware_datastore.py @@ -21,6 +21,7 @@ from unittest import mock from oslo_utils import units from cinder.tests.unit import test +from cinder.tests.unit.volume.drivers.vmware import fake as vmware_fake from cinder.volume.drivers.vmware import datastore as ds_sel from cinder.volume.drivers.vmware import exceptions as vmdk_exceptions @@ -68,7 +69,7 @@ class DatastoreTest(test.TestCase): profile_name) def _create_datastore(self, value): - return mock.Mock(name=value, value=value) + return vmware_fake.ManagedObjectReference('Datastore', value) def _create_summary( self, ds, free_space=units.Mi, _type=ds_sel.DatastoreType.VMFS, @@ -79,10 +80,7 @@ class DatastoreTest(test.TestCase): return summary def _create_host(self, value): - host = mock.Mock(spec=['_type', 'value'], name=value) - host._type = 'HostSystem' - host.value = value - return host + return vmware_fake.ManagedObjectReference('HostSystem', value) @mock.patch('cinder.volume.drivers.vmware.datastore.DatastoreSelector.' '_filter_by_profile') diff --git a/cinder/tests/unit/volume/drivers/vmware/test_vmware_vmdk.py b/cinder/tests/unit/volume/drivers/vmware/test_vmware_vmdk.py index cae4666722c..6a8817518ba 100644 --- a/cinder/tests/unit/volume/drivers/vmware/test_vmware_vmdk.py +++ b/cinder/tests/unit/volume/drivers/vmware/test_vmware_vmdk.py @@ -34,6 +34,7 @@ from cinder.tests.unit import fake_snapshot from cinder.tests.unit import fake_volume from cinder.tests.unit import test from cinder.tests.unit import utils as test_utils +from cinder.tests.unit.volume.drivers.vmware import fake as vmware_fake from cinder.volume.drivers.vmware import datastore as hub from cinder.volume.drivers.vmware import exceptions as vmdk_exceptions from cinder.volume.drivers.vmware import vmdk @@ -903,7 +904,7 @@ class VMwareVcVmdkDriverTestCase(test.TestCase): self, vops, copy_image, get_vsphere_url, flat_extent_path, generate_uuid, get_temp_image_folder, copy_temp_virtual_disk, vsphere_url=None): - dc_ref = mock.Mock(value=mock.sentinel.dc_ref) + dc_ref = vmware_fake.ManagedObjectReference(value=mock.sentinel.dc_ref) ds_name = mock.sentinel.ds_name folder_path = mock.sentinel.folder_path get_temp_image_folder.return_value = (dc_ref, ds_name, folder_path) @@ -920,7 +921,8 @@ class VMwareVcVmdkDriverTestCase(test.TestCase): image_service = mock.sentinel.image_service image_id = mock.sentinel.image_id image_size_in_bytes = 2 * units.Gi - dest_dc_ref = mock.sentinel.dest_dc_ref + dest_dc_ref = \ + vmware_fake.ManagedObjectReference(value=mock.sentinel.dest_dc_ref) dest_ds_name = mock.sentinel.dest_ds_name dest_folder_path = mock.sentinel.dest_folder_path dest_disk_name = mock.sentinel.dest_disk_name @@ -968,7 +970,7 @@ class VMwareVcVmdkDriverTestCase(test.TestCase): def test_create_virtual_disk_from_preallocated_image_with_no_disk_copy( self, vops, copy_image, get_vsphere_url, flat_extent_path, get_temp_image_folder, copy_temp_virtual_disk): - dc_ref = mock.Mock(value=mock.sentinel.dc_ref) + dc_ref = vmware_fake.ManagedObjectReference(value=mock.sentinel.dc_ref) ds_name = mock.sentinel.ds_name folder_path = mock.sentinel.folder_path get_temp_image_folder.return_value = (dc_ref, ds_name, folder_path) @@ -980,7 +982,8 @@ class VMwareVcVmdkDriverTestCase(test.TestCase): image_service = mock.sentinel.image_service image_id = mock.sentinel.image_id image_size_in_bytes = 2 * units.Gi - dest_dc_ref = mock.Mock(value=mock.sentinel.dc_ref) + dc_ref_value = mock.sentinel.dc_ref + dest_dc_ref = vmware_fake.ManagedObjectReference(value=dc_ref_value) dest_ds_name = ds_name dest_folder_path = mock.sentinel.dest_folder_path dest_disk_name = mock.sentinel.dest_disk_name @@ -1012,7 +1015,7 @@ class VMwareVcVmdkDriverTestCase(test.TestCase): def test_create_virtual_disk_from_preallocated_image_with_copy_error( self, vops, copy_image, get_vsphere_url, flat_extent_path, generate_uuid, get_temp_image_folder, copy_temp_virtual_disk): - dc_ref = mock.Mock(value=mock.sentinel.dc_ref) + dc_ref = vmware_fake.ManagedObjectReference(value=mock.sentinel.dc_ref) ds_name = mock.sentinel.ds_name folder_path = mock.sentinel.folder_path get_temp_image_folder.return_value = (dc_ref, ds_name, folder_path) @@ -1029,7 +1032,8 @@ class VMwareVcVmdkDriverTestCase(test.TestCase): image_service = mock.sentinel.image_service image_id = mock.sentinel.image_id image_size_in_bytes = 2 * units.Gi - dest_dc_ref = mock.sentinel.dest_dc_ref + dest_dc_ref = \ + vmware_fake.ManagedObjectReference(value=mock.sentinel.dest_dc_ref) dest_ds_name = mock.sentinel.dest_ds_name dest_folder_path = mock.sentinel.dest_folder_path dest_disk_name = mock.sentinel.dest_disk_name @@ -1367,7 +1371,7 @@ class VMwareVcVmdkDriverTestCase(test.TestCase): backing = mock.sentinel.backing vops.get_backing.return_value = backing - datastore = mock.Mock(value='ds1') + datastore = vmware_fake.ManagedObjectReference(value='ds1') vops.get_datastore.return_value = datastore disk_type = mock.sentinel.disk_type @@ -1415,7 +1419,7 @@ class VMwareVcVmdkDriverTestCase(test.TestCase): backing = mock.sentinel.backing vops.get_backing.return_value = backing - datastore = mock.Mock(value='ds1') + datastore = vmware_fake.ManagedObjectReference(value='ds1') vops.get_datastore.return_value = datastore disk_type = mock.sentinel.disk_type @@ -1479,7 +1483,7 @@ class VMwareVcVmdkDriverTestCase(test.TestCase): backing = mock.sentinel.backing vops.get_backing.return_value = backing - datastore = mock.Mock(value='ds1') + datastore = vmware_fake.ManagedObjectReference(value='ds1') vops.get_datastore.return_value = datastore get_disk_type.return_value = 'thin' @@ -1568,7 +1572,7 @@ class VMwareVcVmdkDriverTestCase(test.TestCase): backing = mock.sentinel.backing vops.get_backing.return_value = backing - datastore = mock.Mock(value='ds1') + datastore = vmware_fake.ManagedObjectReference(value='ds1') vops.get_datastore.return_value = datastore get_disk_type.return_value = 'thin' @@ -1904,8 +1908,8 @@ class VMwareVcVmdkDriverTestCase(test.TestCase): vops.get_dc.side_effect = [dc_1, dc_2] # cache miss - rp_1 = mock.Mock(value='rp-1') - rp_2 = mock.Mock(value='rp-2') + rp_1 = vmware_fake.ManagedObjectReference(value='rp-1') + rp_2 = vmware_fake.ManagedObjectReference(value='rp-2') self.assertEqual(dc_1, self._driver._get_dc(rp_1)) self.assertEqual(dc_2, self._driver._get_dc(rp_2)) self.assertDictEqual({'rp-1': dc_1, 'rp-2': dc_2}, @@ -1961,7 +1965,7 @@ class VMwareVcVmdkDriverTestCase(test.TestCase): def _test_get_connection_info( self, get_storage_profile_id, vops, vmdk_connector=False): volume = self._create_volume_obj() - backing = mock.Mock(value='ref-1') + backing = vmware_fake.ManagedObjectReference(value='ref-1') profile_id = mock.sentinel.profile_id get_storage_profile_id.return_value = profile_id @@ -1970,10 +1974,10 @@ class VMwareVcVmdkDriverTestCase(test.TestCase): vmdk_path = mock.sentinel.vmdk_path vops.get_vmdk_path.return_value = vmdk_path - datastore = mock.Mock(value='ds-1') + datastore = vmware_fake.ManagedObjectReference(value='ds-1') vops.get_datastore.return_value = datastore - datacenter = mock.Mock(value='dc-1') + datacenter = vmware_fake.ManagedObjectReference(value='dc-1') vops.get_dc.return_value = datacenter connector = {'platform': mock.sentinel.platform, @@ -2026,7 +2030,7 @@ class VMwareVcVmdkDriverTestCase(test.TestCase): get_moref, vops, backing_exists=True, instance_exists=True): backing_val = mock.sentinel.backing_val - backing = mock.Mock(value=backing_val) + backing = vmware_fake.ManagedObjectReference(value=backing_val) if backing_exists: vops.get_backing.return_value = backing else: diff --git a/cinder/tests/unit/volume/drivers/vmware/test_vmware_volumeops.py b/cinder/tests/unit/volume/drivers/vmware/test_vmware_volumeops.py index 4f1ab79485e..8b59b9e2a4b 100644 --- a/cinder/tests/unit/volume/drivers/vmware/test_vmware_volumeops.py +++ b/cinder/tests/unit/volume/drivers/vmware/test_vmware_volumeops.py @@ -23,6 +23,7 @@ from oslo_vmware import exceptions from oslo_vmware import vim_util from cinder.tests.unit import test +from cinder.tests.unit.volume.drivers.vmware import fake as vmware_fake from cinder.volume.drivers.vmware import exceptions as vmdk_exceptions from cinder.volume.drivers.vmware import volumeops @@ -286,8 +287,7 @@ class VolumeOpsTestCase(test.TestCase): self.assertEqual([], hosts) summary.accessible = True - host = mock.Mock(spec=object) - host.value = mock.sentinel.host + host = vmware_fake.ManagedObjectReference(value=mock.sentinel.host) host_mounts = self._create_host_mounts("readWrite", host) self.session.invoke_api.return_value = host_mounts hosts = self.vops.get_connected_hosts(datastore) @@ -311,7 +311,7 @@ class VolumeOpsTestCase(test.TestCase): get_connected_hosts.return_value = [host_1, host_2] ds = mock.sentinel.datastore - host = mock.Mock(value=mock.sentinel.host_1) + host = vmware_fake.ManagedObjectReference(value=mock.sentinel.host_1) self.assertTrue(self.vops.is_datastore_accessible(ds, host)) get_connected_hosts.assert_called_once_with(ds) @@ -323,22 +323,19 @@ class VolumeOpsTestCase(test.TestCase): get_connected_hosts.return_value = [host_1] ds = mock.sentinel.datastore - host = mock.Mock(value=mock.sentinel.host_2) + host = vmware_fake.ManagedObjectReference(value=mock.sentinel.host_2) self.assertFalse(self.vops.is_datastore_accessible(ds, host)) get_connected_hosts.assert_called_once_with(ds) def test_get_parent(self): # Not recursive - child = mock.Mock(spec=object) - child._type = 'Parent' + child = vmware_fake.ManagedObjectReference('Parent') ret = self.vops._get_parent(child, 'Parent') self.assertEqual(child, ret) # Recursive - parent = mock.Mock(spec=object) - parent._type = 'Parent' - child = mock.Mock(spec=object) - child._type = 'Child' + parent = vmware_fake.ManagedObjectReference('Parent') + child = vmware_fake.ManagedObjectReference('Child') self.session.invoke_api.return_value = parent ret = self.vops._get_parent(child, 'Parent') self.assertEqual(parent, ret) @@ -349,13 +346,10 @@ class VolumeOpsTestCase(test.TestCase): def test_get_dc(self): # set up hierarchy of objects - dc = mock.Mock(spec=object) - dc._type = 'Datacenter' - o1 = mock.Mock(spec=object) - o1._type = 'mockType1' + dc = vmware_fake.ManagedObjectReference('Datacenter') + o1 = vmware_fake.ManagedObjectReference('mockType1') o1.parent = dc - o2 = mock.Mock(spec=object) - o2._type = 'mockType2' + o2 = vmware_fake.ManagedObjectReference('mockType2') o2.parent = o1 # mock out invoke_api behaviour to fetch parent @@ -382,9 +376,9 @@ class VolumeOpsTestCase(test.TestCase): @mock.patch('cinder.volume.drivers.vmware.volumeops.VMwareVolumeOps.' 'get_entity_name') def test_get_child_folder(self, get_entity_name): - child_entity_1 = mock.Mock(_type='Folder') - child_entity_2 = mock.Mock(_type='foo') - child_entity_3 = mock.Mock(_type='Folder') + child_entity_1 = vmware_fake.ManagedObjectReference('Folder') + child_entity_2 = vmware_fake.ManagedObjectReference('foo') + child_entity_3 = vmware_fake.ManagedObjectReference('Folder') prop_val = mock.Mock(ManagedObjectReference=[child_entity_1, child_entity_2, @@ -447,7 +441,7 @@ class VolumeOpsTestCase(test.TestCase): folder_1b = mock.sentinel.folder_1b create_folder.side_effect = [folder_1a, folder_1b] - datacenter_1 = mock.Mock(value='dc-1') + datacenter_1 = vmware_fake.ManagedObjectReference(value='dc-1') path_comp = ['a', 'b'] ret = self.vops.create_vm_inventory_folder(datacenter_1, path_comp) @@ -491,7 +485,7 @@ class VolumeOpsTestCase(test.TestCase): folder_2b = mock.sentinel.folder_2b create_folder.side_effect = [folder_2a, folder_2b] - datacenter_2 = mock.Mock(value='dc-2') + datacenter_2 = vmware_fake.ManagedObjectReference(value='dc-2') path_comp = ['a', 'b'] ret = self.vops.create_vm_inventory_folder(datacenter_2, path_comp) @@ -1947,7 +1941,7 @@ class VolumeOpsTestCase(test.TestCase): name = mock.sentinel.name size_mb = 1024 ds_ref_val = mock.sentinel.ds_ref_val - ds_ref = mock.Mock(value=ds_ref_val) + ds_ref = vmware_fake.ManagedObjectReference(value=ds_ref_val) disk_type = mock.sentinel.disk_type profile_id = mock.sentinel.profile_id ret = self.vops.create_fcd( @@ -2020,7 +2014,7 @@ class VolumeOpsTestCase(test.TestCase): name = mock.sentinel.name dest_ds_ref_val = mock.sentinel.dest_ds_ref_val - dest_ds_ref = mock.Mock(value=dest_ds_ref_val) + dest_ds_ref = vmware_fake.ManagedObjectReference(value=dest_ds_ref_val) disk_type = mock.sentinel.disk_type profile_id = mock.sentinel.profile_id ret = self.vops.clone_fcd( @@ -2075,7 +2069,7 @@ class VolumeOpsTestCase(test.TestCase): vmdk_url = mock.sentinel.vmdk_url name = mock.sentinel.name ds_ref_val = mock.sentinel.ds_ref_val - ds_ref = mock.Mock(value=ds_ref_val) + ds_ref = vmware_fake.ManagedObjectReference(value=ds_ref_val) ret = self.vops.register_disk(vmdk_url, name, ds_ref) self.assertEqual(fcd_id, ret.fcd_id) @@ -2209,7 +2203,7 @@ class VolumeOpsTestCase(test.TestCase): fcd_id = mock.sentinel.fcd_id fcd_location.id.return_value = fcd_id ds_ref_val = mock.sentinel.ds_ref_val - ds_ref = mock.Mock(value=ds_ref_val) + ds_ref = vmware_fake.ManagedObjectReference(value=ds_ref_val) fcd_location.ds_ref.return_value = ds_ref fcd_snap_id = mock.sentinel.fcd_snap_id fcd_snap_loc = mock.Mock(fcd_loc=fcd_location) @@ -2430,7 +2424,7 @@ class FcdLocationTest(test.TestCase): fcd_id = mock.sentinel.fcd_id fcd_id_obj = mock.Mock(id=fcd_id) ds_ref_val = mock.sentinel.ds_ref_val - ds_ref = mock.Mock(value=ds_ref_val) + ds_ref = vmware_fake.ManagedObjectReference(value=ds_ref_val) fcd_loc = volumeops.FcdLocation.create(fcd_id_obj, ds_ref) self.assertEqual(fcd_id, fcd_loc.fcd_id) self.assertEqual(ds_ref_val, fcd_loc.ds_ref_val)