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:
parent
157f6392a4
commit
409e9796f0
@ -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,
|
||||||
|
@ -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',
|
||||||
|
1939
cinder/volume/drivers/huawei/common.py
Normal file
1939
cinder/volume/drivers/huawei/common.py
Normal file
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -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
|
||||||
|
Loading…
x
Reference in New Issue
Block a user