Browse Source

Port test_emc_vnx to Python 3

* Configuration.__getattr__(): replace self.local_conf with
  object.__getattribute__(self, 'local_conf') to avoid reentrant call
  to __getattr__() in copy.copy(conf) on Python 3.
* test_emc_vnx: Don't compare directly provider_location strings but
  set of provider_location items to support hash randomization. On
  Python 3, hash randomization is enabled by default and so
  dictionary items are rendered in an random order.
* test_emc_vnx: use assertIn() to check if the provider_location
  contains 'type^smp' substring. Before, the test failed if the
  substring was a the beginning of the string (position 0).
* tests-py3.txt: add cinder.tests.unit.test_emc_vnx

Partial-Implements: blueprint cinder-python3
Related-Bug: 1348818
Change-Id: If3be17ca6a1d14d6f1a16ee9934221f77e161686
changes/41/280241/1
Victor Stinner 7 years ago
parent
commit
f0ef5e50e4
  1. 16
      cinder/tests/unit/test_emc_vnx.py
  2. 4
      cinder/volume/configuration.py
  3. 1
      tests-py3.txt

16
cinder/tests/unit/test_emc_vnx.py

@ -2814,8 +2814,7 @@ Time Remaining: 0 second(s)
new_volume['name_id'] = new_volume['id']
vol = self.driver.create_volume_from_snapshot(
new_volume, test_snap)
self.assertTrue(
vol['provider_location'].find('type^smp') > 0)
self.assertIn('type^smp', vol['provider_location'])
expect_cmd = [
mock.call(
*self.testData.SNAP_COPY_CMD(
@ -6144,11 +6143,14 @@ class EMCVNXCLIDriverReplicationV2TestCase(DriverTestCaseBase):
self.assertEqual(
self.configuration.replication_device[0]['managed_backend_name'],
model_update['host'])
self.assertEqual(
build_provider_location(
'1', 'lun', rep_volume.name,
self.target_device_id),
model_update['provider_location'])
expected = build_provider_location('1', 'lun', rep_volume.name,
self.target_device_id)
provider_location = model_update['provider_location']
# Don't compare the exact string but the set of items: dictionary
# items are rendered in a random order because of the hash
# randomization
self.assertSetEqual(set(expected.split('|')),
set(provider_location.split('|')))
def test_failover_replication_from_secondary(self):
rep_volume = EMCVNXCLIDriverTestData.convert_volume(

4
cinder/volume/configuration.py

@ -77,4 +77,6 @@ class Configuration(object):
return None
def __getattr__(self, value):
return getattr(self.local_conf, value)
# Don't use self.local_conf to avoid reentrant call to __getattr__()
local_conf = object.__getattribute__(self, 'local_conf')
return getattr(local_conf, value)

1
tests-py3.txt

@ -90,6 +90,7 @@ cinder.tests.unit.test_dellscapi
cinder.tests.unit.test_dothill
cinder.tests.unit.test_drbdmanagedrv
cinder.tests.unit.test_emc_vmax
cinder.tests.unit.test_emc_vnx
cinder.tests.unit.test_emc_vnxdirect
cinder.tests.unit.test_emc_xtremio
cinder.tests.unit.test_eqlx

Loading…
Cancel
Save