Restructure Huawei driver

As part of further refactoring work, this pulls out common driver code
into its own file to better organize the code.

Change-Id: Ib5b52b638e27743d86106cc9859f8adeab2aab08
Signed-off-by: Sean McGinnis <sean.mcginnis@gmail.com>
This commit is contained in:
Sean McGinnis 2018-08-31 11:27:44 -05:00
parent 157f6392a4
commit 409e9796f0
No known key found for this signature in database
GPG Key ID: CE7EE4BFAF8D70C8
5 changed files with 1986 additions and 1961 deletions

View File

@ -101,8 +101,8 @@ from cinder.volume.drivers.hpe import hpe_3par_common as \
cinder_volume_drivers_hpe_hpe3parcommon cinder_volume_drivers_hpe_hpe3parcommon
from cinder.volume.drivers.hpe import hpe_lefthand_iscsi as \ from cinder.volume.drivers.hpe import hpe_lefthand_iscsi as \
cinder_volume_drivers_hpe_hpelefthandiscsi cinder_volume_drivers_hpe_hpelefthandiscsi
from cinder.volume.drivers.huawei import huawei_driver as \ from cinder.volume.drivers.huawei import common as \
cinder_volume_drivers_huawei_huaweidriver cinder_volume_drivers_huawei_common
from cinder.volume.drivers.ibm import flashsystem_common as \ from cinder.volume.drivers.ibm import flashsystem_common as \
cinder_volume_drivers_ibm_flashsystemcommon cinder_volume_drivers_ibm_flashsystemcommon
from cinder.volume.drivers.ibm import flashsystem_iscsi as \ from cinder.volume.drivers.ibm import flashsystem_iscsi as \
@ -291,7 +291,7 @@ def list_opts():
cinder_volume_drivers_fusionstorage_dsware.volume_opts, cinder_volume_drivers_fusionstorage_dsware.volume_opts,
cinder_volume_drivers_hpe_hpe3parcommon.hpe3par_opts, cinder_volume_drivers_hpe_hpe3parcommon.hpe3par_opts,
cinder_volume_drivers_hpe_hpelefthandiscsi.hpelefthand_opts, cinder_volume_drivers_hpe_hpelefthandiscsi.hpelefthand_opts,
cinder_volume_drivers_huawei_huaweidriver.huawei_opts, cinder_volume_drivers_huawei_common.huawei_opts,
cinder_volume_drivers_ibm_flashsystemcommon.flashsystem_opts, cinder_volume_drivers_ibm_flashsystemcommon.flashsystem_opts,
cinder_volume_drivers_ibm_flashsystemiscsi. cinder_volume_drivers_ibm_flashsystemiscsi.
flashsystem_iscsi_opts, flashsystem_iscsi_opts,

View File

@ -34,6 +34,7 @@ from cinder.tests.unit import fake_snapshot
from cinder.tests.unit import fake_volume from cinder.tests.unit import fake_volume
from cinder.tests.unit import utils from cinder.tests.unit import utils
from cinder.volume import configuration as conf from cinder.volume import configuration as conf
from cinder.volume.drivers.huawei import common
from cinder.volume.drivers.huawei import constants from cinder.volume.drivers.huawei import constants
from cinder.volume.drivers.huawei import fc_zone_helper from cinder.volume.drivers.huawei import fc_zone_helper
from cinder.volume.drivers.huawei import huawei_conf from cinder.volume.drivers.huawei import huawei_conf
@ -2617,7 +2618,7 @@ class HuaweiISCSIDriverTestCase(HuaweiTestBase):
self.driver.support_func = pool_data self.driver.support_func = pool_data
self.mock_object(replication.ReplicaCommonDriver, 'split') self.mock_object(replication.ReplicaCommonDriver, 'split')
self.mock_object( self.mock_object(
huawei_driver.HuaweiBaseDriver, common.HuaweiBaseDriver,
'_get_volume_type', '_get_volume_type',
return_value={'extra_specs': sync_replica_specs}) return_value={'extra_specs': sync_replica_specs})
self.mock_object(rest_client.RestClient, self.mock_object(rest_client.RestClient,
@ -2779,7 +2780,7 @@ class HuaweiISCSIDriverTestCase(HuaweiTestBase):
self.mock_object(rest_client.RestClient, 'get_lun_id_by_name', self.mock_object(rest_client.RestClient, 'get_lun_id_by_name',
return_value='ID1') return_value='ID1')
self.mock_object(rest_client.RestClient, 'rename_lun') self.mock_object(rest_client.RestClient, 'rename_lun')
self.mock_object(huawei_driver.HuaweiBaseDriver, self.mock_object(common.HuaweiBaseDriver,
'_get_lun_info_by_ref', '_get_lun_info_by_ref',
return_value={ return_value={
'PARENTNAME': 'OpenStack_Pool', 'PARENTNAME': 'OpenStack_Pool',
@ -2789,7 +2790,7 @@ class HuaweiISCSIDriverTestCase(HuaweiTestBase):
'WWN': '6643e8c1004c5f6723e9f454003'}) 'WWN': '6643e8c1004c5f6723e9f454003'})
self.mock_object(volume_types, 'get_volume_type', self.mock_object(volume_types, 'get_volume_type',
return_value={'extra_specs': test_new_type}) return_value={'extra_specs': test_new_type})
self.mock_object(huawei_driver.HuaweiBaseDriver, self.mock_object(common.HuaweiBaseDriver,
'_check_needed_changes', '_check_needed_changes',
return_value={}) return_value={})
external_ref = {'source-name': 'test1', external_ref = {'source-name': 'test1',
@ -2807,7 +2808,7 @@ class HuaweiISCSIDriverTestCase(HuaweiTestBase):
def test_create_volume_from_snapsuccess(self): def test_create_volume_from_snapsuccess(self):
self.mock_object( self.mock_object(
huawei_driver.HuaweiBaseDriver, common.HuaweiBaseDriver,
'_get_volume_type', '_get_volume_type',
return_value={'extra_specs': sync_replica_specs}) return_value={'extra_specs': sync_replica_specs})
self.mock_object(replication.ReplicaCommonDriver, 'sync') self.mock_object(replication.ReplicaCommonDriver, 'sync')
@ -3177,7 +3178,7 @@ class HuaweiISCSIDriverTestCase(HuaweiTestBase):
json.loads(lun_info['provider_location'])) json.loads(lun_info['provider_location']))
@ddt.data('front-end', 'back-end') @ddt.data('front-end', 'back-end')
@mock.patch.object(huawei_driver.HuaweiBaseDriver, '_get_volume_params', @mock.patch.object(common.HuaweiBaseDriver, '_get_volume_params',
return_value={'smarttier': 'true', return_value={'smarttier': 'true',
'smartcache': 'true', 'smartcache': 'true',
'smartpartition': 'true', 'smartpartition': 'true',
@ -3186,7 +3187,7 @@ class HuaweiISCSIDriverTestCase(HuaweiTestBase):
'policy': '2', 'policy': '2',
'cachename': 'cache-test', 'cachename': 'cache-test',
'partitionname': 'partition-test'}) 'partitionname': 'partition-test'})
@mock.patch.object(huawei_driver.HuaweiBaseDriver, '_get_volume_type', @mock.patch.object(common.HuaweiBaseDriver, '_get_volume_type',
return_value={'qos_specs_id': u'025ce295-15e9-41a7'}) return_value={'qos_specs_id': u'025ce295-15e9-41a7'})
def test_create_smartqos_success(self, def test_create_smartqos_success(self,
mock_consumer, mock_consumer,
@ -3215,7 +3216,7 @@ class HuaweiISCSIDriverTestCase(HuaweiTestBase):
def test_create_smartqos_failed(self, qos_specs_value, pool_data): def test_create_smartqos_failed(self, qos_specs_value, pool_data):
self.driver.support_func = pool_data self.driver.support_func = pool_data
self.mock_object( self.mock_object(
huawei_driver.HuaweiBaseDriver, common.HuaweiBaseDriver,
'_get_volume_params', '_get_volume_params',
return_value={'smarttier': 'true', return_value={'smarttier': 'true',
'smartcache': 'true', 'smartcache': 'true',
@ -3225,7 +3226,7 @@ class HuaweiISCSIDriverTestCase(HuaweiTestBase):
'policy': '2', 'policy': '2',
'cachename': 'cache-test', 'cachename': 'cache-test',
'partitionname': 'partition-test'}) 'partitionname': 'partition-test'})
self.mock_object(huawei_driver.HuaweiBaseDriver, '_get_volume_type', self.mock_object(common.HuaweiBaseDriver, '_get_volume_type',
return_value={'qos_specs_id': u'025ce295-15e9-41a7'}) return_value={'qos_specs_id': u'025ce295-15e9-41a7'})
self.mock_object(qos_specs, 'get_qos_specs', self.mock_object(qos_specs, 'get_qos_specs',
return_value=qos_specs_value) return_value=qos_specs_value)
@ -3236,7 +3237,7 @@ class HuaweiISCSIDriverTestCase(HuaweiTestBase):
def test_create_smartqos_without_huawei_type(self, pool_data): def test_create_smartqos_without_huawei_type(self, pool_data):
self.driver.support_func = pool_data self.driver.support_func = pool_data
self.mock_object( self.mock_object(
huawei_driver.HuaweiBaseDriver, common.HuaweiBaseDriver,
'_get_volume_params', '_get_volume_params',
return_value={'smarttier': 'true', return_value={'smarttier': 'true',
'smartcache': 'true', 'smartcache': 'true',
@ -3246,7 +3247,7 @@ class HuaweiISCSIDriverTestCase(HuaweiTestBase):
'policy': '2', 'policy': '2',
'cachename': 'cache-test', 'cachename': 'cache-test',
'partitionname': 'partition-test'}) 'partitionname': 'partition-test'})
self.mock_object(huawei_driver.HuaweiBaseDriver, '_get_volume_type', self.mock_object(common.HuaweiBaseDriver, '_get_volume_type',
return_value={'qos_specs_id': u'025ce295-15e9-41a7'}) return_value={'qos_specs_id': u'025ce295-15e9-41a7'})
self.mock_object(qos_specs, 'get_qos_specs', self.mock_object(qos_specs, 'get_qos_specs',
return_value={'specs': {'fake_qos_type': '100', return_value={'specs': {'fake_qos_type': '100',
@ -3365,7 +3366,7 @@ class HuaweiISCSIDriverTestCase(HuaweiTestBase):
self.driver.delete_volume(self.volume) self.driver.delete_volume(self.volume)
@mock.patch.object(rest_client.RestClient, 'add_lun_to_partition') @mock.patch.object(rest_client.RestClient, 'add_lun_to_partition')
@mock.patch.object(huawei_driver.HuaweiBaseDriver, '_get_volume_params', @mock.patch.object(common.HuaweiBaseDriver, '_get_volume_params',
return_value={'smarttier': 'true', return_value={'smarttier': 'true',
'smartcache': 'true', 'smartcache': 'true',
'smartpartition': 'true', 'smartpartition': 'true',
@ -3413,14 +3414,14 @@ class HuaweiISCSIDriverTestCase(HuaweiTestBase):
def test_create_smartCache_failed(self, opts, pool_data): def test_create_smartCache_failed(self, opts, pool_data):
self.driver.support_func = pool_data self.driver.support_func = pool_data
self.mock_object( self.mock_object(
huawei_driver.HuaweiBaseDriver, common.HuaweiBaseDriver,
'_get_volume_params', '_get_volume_params',
return_value=opts) return_value=opts)
self.assertRaises(exception.VolumeBackendAPIException, self.assertRaises(exception.VolumeBackendAPIException,
self.driver.create_volume, self.volume) self.driver.create_volume, self.volume)
@ddt.data(FAKE_POOLS_UNSUPPORT_REPORT, FAKE_POOLS_SUPPORT_REPORT) @ddt.data(FAKE_POOLS_UNSUPPORT_REPORT, FAKE_POOLS_SUPPORT_REPORT)
@mock.patch.object(huawei_driver.HuaweiBaseDriver, '_get_volume_params', @mock.patch.object(common.HuaweiBaseDriver, '_get_volume_params',
return_value={'smarttier': 'true', return_value={'smarttier': 'true',
'smartcache': 'true', 'smartcache': 'true',
'smartpartition': 'true', 'smartpartition': 'true',
@ -3438,7 +3439,7 @@ class HuaweiISCSIDriverTestCase(HuaweiTestBase):
self.driver.create_volume, self.volume) self.driver.create_volume, self.volume)
@ddt.data(FAKE_POOLS_UNSUPPORT_REPORT, FAKE_POOLS_SUPPORT_REPORT) @ddt.data(FAKE_POOLS_UNSUPPORT_REPORT, FAKE_POOLS_SUPPORT_REPORT)
@mock.patch.object(huawei_driver.HuaweiBaseDriver, '_get_volume_params', @mock.patch.object(common.HuaweiBaseDriver, '_get_volume_params',
return_value={'smarttier': 'true', return_value={'smarttier': 'true',
'smartcache': 'true', 'smartcache': 'true',
'smartpartition': 'true', 'smartpartition': 'true',
@ -3506,7 +3507,7 @@ class HuaweiISCSIDriverTestCase(HuaweiTestBase):
(qos_id, lun_list) = self.driver.client.find_available_qos(qos) (qos_id, lun_list) = self.driver.client.find_available_qos(qos)
self.assertEqual(("11", u'["0", "1", "2"]'), (qos_id, lun_list)) self.assertEqual(("11", u'["0", "1", "2"]'), (qos_id, lun_list))
@mock.patch.object(huawei_driver.HuaweiBaseDriver, '_get_volume_params', @mock.patch.object(common.HuaweiBaseDriver, '_get_volume_params',
return_value=fake_hypermetro_opts) return_value=fake_hypermetro_opts)
@mock.patch.object(rest_client.RestClient, 'get_all_pools', @mock.patch.object(rest_client.RestClient, 'get_all_pools',
return_value=FAKE_STORAGE_POOL_RESPONSE) return_value=FAKE_STORAGE_POOL_RESPONSE)
@ -3531,7 +3532,7 @@ class HuaweiISCSIDriverTestCase(HuaweiTestBase):
json.loads(lun_info['provider_location'])) json.loads(lun_info['provider_location']))
@ddt.data(FAKE_POOLS_UNSUPPORT_REPORT, FAKE_POOLS_SUPPORT_REPORT) @ddt.data(FAKE_POOLS_UNSUPPORT_REPORT, FAKE_POOLS_SUPPORT_REPORT)
@mock.patch.object(huawei_driver.HuaweiBaseDriver, '_get_volume_params', @mock.patch.object(common.HuaweiBaseDriver, '_get_volume_params',
return_value=fake_hypermetro_opts) return_value=fake_hypermetro_opts)
@mock.patch.object(rest_client.RestClient, 'get_all_pools', @mock.patch.object(rest_client.RestClient, 'get_all_pools',
return_value=FAKE_STORAGE_POOL_RESPONSE) return_value=FAKE_STORAGE_POOL_RESPONSE)
@ -3692,7 +3693,7 @@ class HuaweiISCSIDriverTestCase(HuaweiTestBase):
def test_manage_existing_pool_mismatch(self, mock_get_by_name, def test_manage_existing_pool_mismatch(self, mock_get_by_name,
mock_get_info): mock_get_info):
# LUN does not belong to the specified pool. # LUN does not belong to the specified pool.
with mock.patch.object(huawei_driver.HuaweiBaseDriver, with mock.patch.object(common.HuaweiBaseDriver,
'_get_lun_info_by_ref', '_get_lun_info_by_ref',
return_value={'PARENTNAME': 'StoragePool'}): return_value={'PARENTNAME': 'StoragePool'}):
external_ref = {'source-name': 'LUN1'} external_ref = {'source-name': 'LUN1'}
@ -3714,7 +3715,7 @@ class HuaweiISCSIDriverTestCase(HuaweiTestBase):
# Status is not normal. # Status is not normal.
ret = {'PARENTNAME': "OpenStack_Pool", ret = {'PARENTNAME': "OpenStack_Pool",
'HEALTHSTATUS': '2'} 'HEALTHSTATUS': '2'}
with mock.patch.object(huawei_driver.HuaweiBaseDriver, with mock.patch.object(common.HuaweiBaseDriver,
'_get_lun_info_by_ref', '_get_lun_info_by_ref',
return_value=ret): return_value=ret):
external_ref = {'source-name': 'LUN1'} external_ref = {'source-name': 'LUN1'}
@ -3849,7 +3850,7 @@ class HuaweiISCSIDriverTestCase(HuaweiTestBase):
[{'source-id': 'ID1'}, FAKE_POOLS_UNSUPPORT_REPORT], [{'source-id': 'ID1'}, FAKE_POOLS_UNSUPPORT_REPORT],
[{'source-id': 'ID1'}, FAKE_POOLS_SUPPORT_REPORT]) [{'source-id': 'ID1'}, FAKE_POOLS_SUPPORT_REPORT])
@mock.patch.object(rest_client.RestClient, 'rename_lun') @mock.patch.object(rest_client.RestClient, 'rename_lun')
@mock.patch.object(huawei_driver.HuaweiBaseDriver, @mock.patch.object(common.HuaweiBaseDriver,
'_get_lun_info_by_ref', '_get_lun_info_by_ref',
return_value={'PARENTNAME': 'OpenStack_Pool', return_value={'PARENTNAME': 'OpenStack_Pool',
'SNAPSHOTIDS': [], 'SNAPSHOTIDS': [],
@ -3877,7 +3878,7 @@ class HuaweiISCSIDriverTestCase(HuaweiTestBase):
self.driver.unmanage(self.volume) self.driver.unmanage(self.volume)
def test_manage_existing_snapshot_abnormal(self): def test_manage_existing_snapshot_abnormal(self):
with mock.patch.object(huawei_driver.HuaweiBaseDriver, with mock.patch.object(common.HuaweiBaseDriver,
'_get_snapshot_info_by_ref', '_get_snapshot_info_by_ref',
return_value={'HEALTHSTATUS': '2', return_value={'HEALTHSTATUS': '2',
'PARENTID': '11'}): 'PARENTID': '11'}):
@ -3908,7 +3909,7 @@ class HuaweiISCSIDriverTestCase(HuaweiTestBase):
ex.msg)) ex.msg))
@mock.patch.object(rest_client.RestClient, 'rename_snapshot') @mock.patch.object(rest_client.RestClient, 'rename_snapshot')
@mock.patch.object(huawei_driver.HuaweiBaseDriver, @mock.patch.object(common.HuaweiBaseDriver,
'_get_snapshot_info_by_ref', '_get_snapshot_info_by_ref',
return_value={'ID': 'ID1', return_value={'ID': 'ID1',
'EXPOSEDTOINITIATOR': 'false', 'EXPOSEDTOINITIATOR': 'false',
@ -3978,7 +3979,7 @@ class HuaweiISCSIDriverTestCase(HuaweiTestBase):
def test_create_replication_success(self, mock_type): def test_create_replication_success(self, mock_type):
self.mock_object(replication.ReplicaCommonDriver, 'sync') self.mock_object(replication.ReplicaCommonDriver, 'sync')
self.mock_object( self.mock_object(
huawei_driver.HuaweiBaseDriver, common.HuaweiBaseDriver,
'_get_volume_type', '_get_volume_type',
return_value={'extra_specs': mock_type}) return_value={'extra_specs': mock_type})
@ -4081,7 +4082,7 @@ class HuaweiISCSIDriverTestCase(HuaweiTestBase):
mock_value, pool_data): mock_value, pool_data):
self.driver.support_func = pool_data self.driver.support_func = pool_data
self.mock_object( self.mock_object(
huawei_driver.HuaweiBaseDriver, common.HuaweiBaseDriver,
'_get_volume_type', '_get_volume_type',
return_value={'extra_specs': sync_replica_specs}) return_value={'extra_specs': sync_replica_specs})
self.mock_object(replication.ReplicaPairManager, '_delete_pair') self.mock_object(replication.ReplicaPairManager, '_delete_pair')
@ -4095,7 +4096,7 @@ class HuaweiISCSIDriverTestCase(HuaweiTestBase):
self.driver.support_func = pool_data self.driver.support_func = pool_data
self.mock_object(replication.ReplicaCommonDriver, 'split') self.mock_object(replication.ReplicaCommonDriver, 'split')
self.mock_object( self.mock_object(
huawei_driver.HuaweiBaseDriver, common.HuaweiBaseDriver,
'_get_volume_type', '_get_volume_type',
return_value={'extra_specs': sync_replica_specs}) return_value={'extra_specs': sync_replica_specs})
self.driver.delete_volume(self.replica_volume) self.driver.delete_volume(self.replica_volume)
@ -4254,7 +4255,7 @@ class HuaweiISCSIDriverTestCase(HuaweiTestBase):
old_replica_client = driver.replica_client old_replica_client = driver.replica_client
old_replica = driver.replica old_replica = driver.replica
self.mock_object(replication.ReplicaCommonDriver, 'failover') self.mock_object(replication.ReplicaCommonDriver, 'failover')
self.mock_object(huawei_driver.HuaweiBaseDriver, '_get_volume_params', self.mock_object(common.HuaweiBaseDriver, '_get_volume_params',
return_value={'replication_enabled': 'true'}) return_value={'replication_enabled': 'true'})
secondary_id, volumes_update, __ = driver.failover_host( secondary_id, volumes_update, __ = driver.failover_host(
None, [self.replica_volume], REPLICA_BACKEND_ID, []) None, [self.replica_volume], REPLICA_BACKEND_ID, [])
@ -4291,7 +4292,7 @@ class HuaweiISCSIDriverTestCase(HuaweiTestBase):
old_client = driver.client old_client = driver.client
old_replica_client = driver.replica_client old_replica_client = driver.replica_client
old_replica = driver.replica old_replica = driver.replica
self.mock_object(huawei_driver.HuaweiBaseDriver, '_get_volume_params', self.mock_object(common.HuaweiBaseDriver, '_get_volume_params',
return_value={'replication_enabled': 'true'}) return_value={'replication_enabled': 'true'})
secondary_id, volumes_update, __ = driver.failover_host( secondary_id, volumes_update, __ = driver.failover_host(
None, [volume], REPLICA_BACKEND_ID, []) None, [volume], REPLICA_BACKEND_ID, [])
@ -4310,7 +4311,7 @@ class HuaweiISCSIDriverTestCase(HuaweiTestBase):
self.mock_object(replication.ReplicaCommonDriver, 'enable') self.mock_object(replication.ReplicaCommonDriver, 'enable')
self.mock_object(replication.ReplicaCommonDriver, 'wait_replica_ready') self.mock_object(replication.ReplicaCommonDriver, 'wait_replica_ready')
self.mock_object(replication.ReplicaCommonDriver, 'failover') self.mock_object(replication.ReplicaCommonDriver, 'failover')
self.mock_object(huawei_driver.HuaweiBaseDriver, '_get_volume_params', self.mock_object(common.HuaweiBaseDriver, '_get_volume_params',
return_value={'replication_enabled': 'true'}) return_value={'replication_enabled': 'true'})
volume = self.replica_volume volume = self.replica_volume
@ -4348,7 +4349,7 @@ class HuaweiISCSIDriverTestCase(HuaweiTestBase):
@ddt.data({}, {'pair_id': TEST_PAIR_ID}) @ddt.data({}, {'pair_id': TEST_PAIR_ID})
def test_failback_replica_volumes_invalid_drv_data(self, mock_drv_data): def test_failback_replica_volumes_invalid_drv_data(self, mock_drv_data):
self.mock_object(huawei_driver.HuaweiBaseDriver, '_get_volume_params', self.mock_object(common.HuaweiBaseDriver, '_get_volume_params',
return_value={'replication_enabled': 'true'}) return_value={'replication_enabled': 'true'})
volume = self.replica_volume volume = self.replica_volume
@ -4982,7 +4983,7 @@ class HuaweiFCDriverTestCase(HuaweiTestBase):
@ddt.data(FAKE_POOLS_UNSUPPORT_REPORT, FAKE_POOLS_SUPPORT_REPORT) @ddt.data(FAKE_POOLS_UNSUPPORT_REPORT, FAKE_POOLS_SUPPORT_REPORT)
@mock.patch.object(rest_client, 'RestClient') @mock.patch.object(rest_client, 'RestClient')
@mock.patch.object( @mock.patch.object(
huawei_driver.HuaweiBaseDriver, common.HuaweiBaseDriver,
'_get_volume_type', '_get_volume_type',
return_value={'extra_specs': sync_replica_specs}) return_value={'extra_specs': sync_replica_specs})
def test_retype_replication_volume_success(self, mock_get_type, def test_retype_replication_volume_success(self, mock_get_type,
@ -5033,7 +5034,7 @@ class HuaweiFCDriverTestCase(HuaweiTestBase):
self.mock_object(mock_module, mock_func, side_effect=side_effect) self.mock_object(mock_module, mock_func, side_effect=side_effect)
self.mock_object(rest_client.RestClient, 'add_lun_to_partition') self.mock_object(rest_client.RestClient, 'add_lun_to_partition')
self.mock_object( self.mock_object(
huawei_driver.HuaweiBaseDriver, common.HuaweiBaseDriver,
'_get_volume_type', '_get_volume_type',
return_value={'extra_specs': sync_replica_specs}) return_value={'extra_specs': sync_replica_specs})
retype = self.driver.retype(None, self.volume, retype = self.driver.retype(None, self.volume,
@ -5212,7 +5213,7 @@ class HuaweiFCDriverTestCase(HuaweiTestBase):
None) None)
self.assertEqual(expected_pool_capacity, pool_capacity) self.assertEqual(expected_pool_capacity, pool_capacity)
@mock.patch.object(huawei_driver.HuaweiBaseDriver, '_get_volume_params', @mock.patch.object(common.HuaweiBaseDriver, '_get_volume_params',
return_value=fake_hypermetro_opts) return_value=fake_hypermetro_opts)
@mock.patch.object(rest_client.RestClient, 'get_all_pools', @mock.patch.object(rest_client.RestClient, 'get_all_pools',
return_value=FAKE_STORAGE_POOL_RESPONSE) return_value=FAKE_STORAGE_POOL_RESPONSE)
@ -5245,7 +5246,7 @@ class HuaweiFCDriverTestCase(HuaweiTestBase):
json.loads(lun_info['provider_location'])) json.loads(lun_info['provider_location']))
@ddt.data(FAKE_POOLS_UNSUPPORT_REPORT, FAKE_POOLS_SUPPORT_REPORT) @ddt.data(FAKE_POOLS_UNSUPPORT_REPORT, FAKE_POOLS_SUPPORT_REPORT)
@mock.patch.object(huawei_driver.HuaweiBaseDriver, '_get_volume_params', @mock.patch.object(common.HuaweiBaseDriver, '_get_volume_params',
return_value=fake_hypermetro_opts) return_value=fake_hypermetro_opts)
@mock.patch.object(rest_client.RestClient, 'get_all_pools', @mock.patch.object(rest_client.RestClient, 'get_all_pools',
return_value=FAKE_STORAGE_POOL_RESPONSE) return_value=FAKE_STORAGE_POOL_RESPONSE)
@ -5323,7 +5324,7 @@ class HuaweiFCDriverTestCase(HuaweiTestBase):
def test_create_snapshot_fail_hypermetro(self): def test_create_snapshot_fail_hypermetro(self):
self.mock_object( self.mock_object(
huawei_driver.HuaweiBaseDriver, common.HuaweiBaseDriver,
'_get_volume_type', '_get_volume_type',
return_value={'extra_specs': replica_hypermetro_specs}) return_value={'extra_specs': replica_hypermetro_specs})
self.assertRaises(exception.VolumeBackendAPIException, self.assertRaises(exception.VolumeBackendAPIException,
@ -5383,7 +5384,7 @@ class HuaweiFCDriverTestCase(HuaweiTestBase):
@ddt.data([{"hypermetro": "true"}], []) @ddt.data([{"hypermetro": "true"}], [])
def test_create_group_success(self, cg_type): def test_create_group_success(self, cg_type):
self.mock_object(huawei_driver.HuaweiBaseDriver, '_get_group_type', self.mock_object(common.HuaweiBaseDriver, '_get_group_type',
return_value=cg_type) return_value=cg_type)
self.mock_object(volume_utils, 'is_group_a_cg_snapshot_type', self.mock_object(volume_utils, 'is_group_a_cg_snapshot_type',
return_value=True) return_value=True)
@ -5399,7 +5400,7 @@ class HuaweiFCDriverTestCase(HuaweiTestBase):
) )
@ddt.unpack @ddt.unpack
def test_create_group_from_src(self, snapshots, source_vols, tmp_snap): def test_create_group_from_src(self, snapshots, source_vols, tmp_snap):
self.mock_object(huawei_driver.HuaweiBaseDriver, '_get_group_type', self.mock_object(common.HuaweiBaseDriver, '_get_group_type',
return_value=[]) return_value=[])
self.mock_object(volume_utils, 'is_group_a_cg_snapshot_type', self.mock_object(volume_utils, 'is_group_a_cg_snapshot_type',
return_value=True) return_value=True)
@ -5431,7 +5432,7 @@ class HuaweiFCDriverTestCase(HuaweiTestBase):
def test_delete_group_success(self, cg_type): def test_delete_group_success(self, cg_type):
test_volumes = [self.volume] test_volumes = [self.volume]
ctxt = context.get_admin_context() ctxt = context.get_admin_context()
self.mock_object(huawei_driver.HuaweiBaseDriver, '_get_group_type', self.mock_object(common.HuaweiBaseDriver, '_get_group_type',
return_value=cg_type) return_value=cg_type)
self.mock_object(volume_utils, 'is_group_a_cg_snapshot_type', self.mock_object(volume_utils, 'is_group_a_cg_snapshot_type',
return_value=True) return_value=True)
@ -5439,7 +5440,7 @@ class HuaweiFCDriverTestCase(HuaweiTestBase):
ctxt, self.group, test_volumes) ctxt, self.group, test_volumes)
self.assertEqual(fields.GroupStatus.DELETED, model['status']) self.assertEqual(fields.GroupStatus.DELETED, model['status'])
@mock.patch.object(huawei_driver.HuaweiBaseDriver, '_get_group_type', @mock.patch.object(common.HuaweiBaseDriver, '_get_group_type',
return_value=[{"hypermetro": "true"}]) return_value=[{"hypermetro": "true"}])
@mock.patch.object(huawei_driver.huawei_utils, 'get_lun_metadata', @mock.patch.object(huawei_driver.huawei_utils, 'get_lun_metadata',
return_value={'hypermetro_id': '3400a30d844d0007', return_value={'hypermetro_id': '3400a30d844d0007',

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -521,4 +521,4 @@ The following are the Huawei driver specific options that may be set in
.. config-table:: .. config-table::
:config-target: Huawei :config-target: Huawei
cinder.volume.drivers.huawei.huawei_driver cinder.volume.drivers.huawei.common