deb-cinder/cinder/tests/unit/volume/drivers/dell_emc/vnx/test_replication.py

97 lines
4.0 KiB
Python

# Copyright (c) 2017 Dell Inc. or its subsidiaries.
# All Rights Reserved.
#
# 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.
import mock
from cinder import context
from cinder.objects import fields
from cinder import test
from cinder.tests.unit.volume.drivers.dell_emc.vnx import res_mock
from cinder.tests.unit.volume.drivers.dell_emc.vnx import utils
from cinder.volume import configuration as conf
from cinder.volume.drivers.dell_emc.vnx import utils as vnx_utils
class TestReplicationAdapter(test.TestCase):
def setUp(self):
super(TestReplicationAdapter, self).setUp()
self.configuration = conf.Configuration(None)
vnx_utils.init_ops(self.configuration)
self.configuration.san_ip = '192.168.1.1'
self.configuration.storage_vnx_authentication_type = 'global'
self.ctxt = context.get_admin_context()
def tearDown(self):
super(TestReplicationAdapter, self).tearDown()
@utils.patch_group_specs({
'consistent_group_replication_enabled': '<is> True'})
@res_mock.mock_driver_input
@res_mock.patch_common_adapter
def test_enable_replication(self, common_adapter, mocked_res,
mocked_input):
group = mocked_input['group']
volumes = [mocked_input['volume1'],
mocked_input['volume2']]
volumes[0].group = group
volumes[1].group = group
common_adapter.enable_replication(self.ctxt, group, volumes)
@utils.patch_group_specs({
'consistent_group_replication_enabled': '<is> True'})
@res_mock.mock_driver_input
@res_mock.patch_common_adapter
def test_disable_replication(self, common_adapter, mocked_res,
mocked_input):
group = mocked_input['group']
volumes = [mocked_input['volume1'],
mocked_input['volume2']]
volumes[0].group = group
volumes[1].group = group
common_adapter.disable_replication(self.ctxt, group, volumes)
@utils.patch_group_specs({
'consistent_group_replication_enabled': '<is> True'})
@res_mock.mock_driver_input
@res_mock.patch_common_adapter
def test_failover_replication(self, common_adapter, mocked_res,
mocked_input):
device = utils.get_replication_device()
common_adapter.config.replication_device = [device]
group = mocked_input['group']
volumes = [mocked_input['volume1'], mocked_input['volume2']]
lun1 = mocked_res['lun1']
volumes[0].group = group
volumes[1].group = group
secondary_backend_id = 'fake_serial'
with mock.patch.object(common_adapter,
'build_mirror_view') as fake:
fake_mirror = utils.build_fake_mirror_view()
fake_mirror.secondary_client.get_lun.return_value = lun1
fake_mirror.secondary_client.get_serial.return_value = (
device['backend_id'])
fake.return_value = fake_mirror
model_update, volume_updates = common_adapter.failover_replication(
self.ctxt, group, volumes, secondary_backend_id)
fake_mirror.promote_mirror_group.assert_called_with(
group.id.replace('-', ''))
self.assertEqual(fields.ReplicationStatus.FAILED_OVER,
model_update['replication_status'])
for update in volume_updates:
self.assertEqual(fields.ReplicationStatus.FAILED_OVER,
update['replication_status'])