Ejemplo n.º 1
0
    def test_quiesce_then_abort_timeout(self):
        self.mock_object(time, 'sleep')
        mock_get_snapmirrors = mock.Mock(
            return_value=[{'relationship-status': "transferring"}])
        self.mock_object(self.mock_dest_client, 'get_snapmirrors',
                         mock_get_snapmirrors)
        mock_backend_config = na_fakes.create_configuration()
        mock_backend_config.netapp_snapmirror_quiesce_timeout = 10
        self.mock_object(data_motion, 'get_backend_configuration',
                         mock.Mock(return_value=mock_backend_config))

        self.dm_session.quiesce_then_abort(self.fake_src_share,
                                           self.fake_dest_share)

        self.mock_dest_client.get_snapmirrors.assert_called_with(
            self.source_vserver, self.fake_src_vol_name,
            self.dest_vserver, self.fake_dest_vol_name,
            desired_attributes=['relationship-status', 'mirror-state']
        )
        self.assertEqual(2, self.mock_dest_client.get_snapmirrors.call_count)

        self.mock_dest_client.quiesce_snapmirror.assert_called_with(
            self.source_vserver, self.fake_src_vol_name,
            self.dest_vserver, self.fake_dest_vol_name)

        self.mock_dest_client.abort_snapmirror.assert_called_once_with(
            self.source_vserver, self.fake_src_vol_name,
            self.dest_vserver, self.fake_dest_vol_name,
            clear_checkpoint=False
        )
Ejemplo n.º 2
0
    def test_quiesce_then_abort_timeout(self):
        self.mock_object(time, 'sleep')
        mock_get_snapmirrors = mock.Mock(
            return_value=[{
                'relationship-status': "transferring"
            }])
        self.mock_object(self.mock_dest_client, 'get_snapmirrors',
                         mock_get_snapmirrors)
        mock_backend_config = na_fakes.create_configuration()
        mock_backend_config.netapp_snapmirror_quiesce_timeout = 10
        self.mock_object(data_motion, 'get_backend_configuration',
                         mock.Mock(return_value=mock_backend_config))

        self.dm_session.quiesce_then_abort(self.fake_src_share,
                                           self.fake_dest_share)

        self.mock_dest_client.get_snapmirrors.assert_called_with(
            self.source_vserver,
            self.fake_src_vol_name,
            self.dest_vserver,
            self.fake_dest_vol_name,
            desired_attributes=['relationship-status', 'mirror-state'])
        self.assertEqual(2, self.mock_dest_client.get_snapmirrors.call_count)

        self.mock_dest_client.quiesce_snapmirror.assert_called_with(
            self.source_vserver, self.fake_src_vol_name, self.dest_vserver,
            self.fake_dest_vol_name)

        self.mock_dest_client.abort_snapmirror.assert_called_once_with(
            self.source_vserver,
            self.fake_src_vol_name,
            self.dest_vserver,
            self.fake_dest_vol_name,
            clear_checkpoint=False)
Ejemplo n.º 3
0
    def test_create_driver_invalid_family(self):

        kwargs = {
            'configuration': na_fakes.create_configuration(),
            'app_version': 'fake_info',
        }

        self.assertRaises(exception.InvalidInput,
                          na_common.NetAppDriver._create_driver, 'fake_family',
                          na_common.MULTI_SVM, **kwargs)
Ejemplo n.º 4
0
    def test_create_driver_invalid_mode(self):

        kwargs = {
            'configuration': na_fakes.create_configuration(),
            'app_version': 'fake_info',
        }

        self.assertRaises(exception.InvalidInput,
                          na_common.NetAppDriver._create_driver,
                          'ontap_cluster', 'fake_mode', **kwargs)
Ejemplo n.º 5
0
    def test_create_driver_invalid_mode(self):

        kwargs = {
            'configuration': na_fakes.create_configuration(),
            'app_version': 'fake_info',
        }

        self.assertRaises(exception.InvalidInput,
                          na_common.NetAppDriver._create_driver,
                          'ontap_cluster', 'fake_mode', **kwargs)
Ejemplo n.º 6
0
    def test_cancel_snapmirror_svm(self, snapmirrors, vserver_subtype):
        mock_dest_client = mock.Mock()
        self.mock_object(
            self.dm_session, 'get_client_and_vserver_name',
            mock.Mock(return_value=(mock_dest_client, self.dest_vserver)))
        mock_backend_config = na_fakes.create_configuration()
        mock_backend_config.netapp_server_migration_state_change_timeout = 30
        self.mock_object(data_motion, 'get_backend_configuration',
                         mock.Mock(return_value=mock_backend_config))
        self.mock_object(self.dm_session, 'get_snapmirrors_svm',
                         mock.Mock(return_value=snapmirrors))
        self.mock_object(self.dm_session, 'quiesce_and_break_snapmirror_svm')
        self.mock_object(self.dm_session, 'wait_for_vserver_state')
        self.mock_object(self.dm_session, 'delete_snapmirror_svm')
        vserver_info = copy.deepcopy(fake.VSERVER_INFO)
        vserver_info['subtype'] = vserver_subtype
        self.mock_object(mock_dest_client, 'get_vserver_info',
                         mock.Mock(return_value=vserver_info))
        self.mock_object(self.dm_session, 'convert_svm_to_default_subtype')

        self.dm_session.cancel_snapmirror_svm(self.fake_src_share_server,
                                              self.fake_dest_share_server)

        data_motion.get_backend_configuration.assert_called_once_with(
            self.dest_backend_name)
        self.dm_session.get_client_and_vserver_name.assert_called_once_with(
            self.fake_dest_share_server)
        self.dm_session.get_snapmirrors_svm.assert_called_once_with(
            self.fake_src_share_server, self.fake_dest_share_server)
        if snapmirrors:
            quiesce_mock = self.dm_session.quiesce_and_break_snapmirror_svm
            quiesce_mock.assert_called_once_with(self.fake_src_share_server,
                                                 self.fake_dest_share_server)
            self.dm_session.wait_for_vserver_state.assert_called_once_with(
                self.dest_vserver,
                mock_dest_client,
                subtype='default',
                state='running',
                operational_state='stopped',
                timeout=(mock_backend_config.
                         netapp_server_migration_state_change_timeout))
            self.dm_session.delete_snapmirror_svm.assert_called_once_with(
                self.fake_src_share_server, self.fake_dest_share_server)
        else:
            mock_dest_client.get_vserver_info.assert_called_once_with(
                self.dest_vserver)
            convert_svm = self.dm_session.convert_svm_to_default_subtype
            if vserver_subtype == 'dp_destination':
                convert_svm.assert_called_once_with(
                    self.dest_vserver,
                    mock_dest_client,
                    timeout=(mock_backend_config.
                             netapp_server_migration_state_change_timeout))
            else:
                self.assertFalse(convert_svm.called)
Ejemplo n.º 7
0
    def test_create_driver_invalid_family(self):

        kwargs = {
            'configuration': na_fakes.create_configuration(),
            'app_version': 'fake_info',
        }

        self.assertRaises(exception.InvalidInput,
                          na_common.NetAppDriver._create_driver,
                          'fake_family', na_common.MULTI_SVM,
                          **kwargs)
Ejemplo n.º 8
0
    def test_new_missing_mode(self):

        self.mock_object(na_utils.OpenStackInfo, 'info')
        self.mock_object(na_common.NetAppDriver, '_create_driver')

        config = na_fakes.create_configuration()
        config.driver_handles_share_servers = None
        config.netapp_storage_family = 'fake_family'

        kwargs = {'configuration': config}
        self.assertRaises(exception.InvalidInput, na_common.NetAppDriver,
                          **kwargs)
Ejemplo n.º 9
0
    def test_create_driver_case_insensitive(self):

        config = na_fakes.create_configuration()
        config.local_conf.set_override('driver_handles_share_servers', True)

        kwargs = {'configuration': config, 'app_version': 'fake_info'}

        driver = na_common.NetAppDriver._create_driver('ONTAP_CLUSTER',
                                                       na_common.MULTI_SVM,
                                                       **kwargs)

        self.assertIsInstance(driver,
                              drv_multi_svm.NetAppCmodeMultiSvmShareDriver)
Ejemplo n.º 10
0
    def test_new_missing_mode(self):

        self.mock_object(na_utils.OpenStackInfo, 'info')
        self.mock_object(na_common.NetAppDriver, '_create_driver')

        config = na_fakes.create_configuration()
        config.driver_handles_share_servers = None
        config.netapp_storage_family = 'fake_family'

        kwargs = {'configuration': config}
        self.assertRaises(exception.InvalidInput,
                          na_common.NetAppDriver,
                          **kwargs)
Ejemplo n.º 11
0
    def test_create_driver_case_insensitive(self):

        config = na_fakes.create_configuration()
        config.local_conf.set_override('driver_handles_share_servers', True)

        kwargs = {'configuration': config, 'app_version': 'fake_info'}

        driver = na_common.NetAppDriver._create_driver('ONTAP_CLUSTER',
                                                       na_common.MULTI_SVM,
                                                       **kwargs)

        self.assertIsInstance(driver,
                              drv_multi_svm.NetAppCmodeMultiSvmShareDriver)
Ejemplo n.º 12
0
    def test_change_snapmirror_source_dhss_true(self):
        fake_new_src_share = copy.deepcopy(self.fake_src_share)
        fake_new_src_share['id'] = 'd02d497a-236c-4852-812a-0d39373e312a'
        fake_new_src_share_name = 'share_d02d497a_236c_4852_812a_0d39373e312a'
        fake_new_src_share_server = fake_new_src_share['share_server']
        fake_new_src_ss_name = (
            fake_new_src_share_server['backend_details']['vserver_name'])
        self.mock_object(self.dm_session, 'delete_snapmirror')
        self.mock_object(
            data_motion, 'get_client_for_backend',
            mock.Mock(
                side_effect=[self.mock_dest_client, self.mock_src_client]))
        mock_backend_config = na_fakes.create_configuration()
        mock_backend_config.driver_handles_share_servers = True
        self.mock_object(data_motion, 'get_backend_configuration',
                         mock.Mock(return_value=mock_backend_config))
        self.mock_object(self.mock_dest_client, 'get_vserver_peers',
                         mock.Mock(return_value=[]))
        peer_cluster_name = 'new_src_cluster_name'
        self.mock_object(self.mock_src_client, 'get_cluster_name',
                         mock.Mock(return_value=peer_cluster_name))

        self.dm_session.change_snapmirror_source(
            self.fake_dest_share, self.fake_src_share, fake_new_src_share,
            [self.fake_dest_share, self.fake_src_share, fake_new_src_share])

        self.assertEqual(4, self.dm_session.delete_snapmirror.call_count)

        self.mock_dest_client.get_vserver_peers.assert_called_once_with(
            self.dest_vserver, fake_new_src_ss_name)
        self.assertTrue(self.mock_src_client.get_cluster_name.called)
        self.mock_dest_client.create_vserver_peer.assert_called_once_with(
            self.dest_vserver,
            fake_new_src_ss_name,
            peer_cluster_name=peer_cluster_name)
        self.mock_src_client.accept_vserver_peer.assert_called_once_with(
            fake_new_src_ss_name, self.dest_vserver)
        self.dm_session.delete_snapmirror.assert_called_with(mock.ANY,
                                                             mock.ANY,
                                                             release=False)
        self.mock_dest_client.create_snapmirror_vol.assert_called_once_with(
            mock.ANY,
            fake_new_src_share_name,
            mock.ANY,
            self.fake_dest_vol_name,
            schedule='hourly')
        self.mock_dest_client.resync_snapmirror_vol.assert_called_once_with(
            mock.ANY, fake_new_src_share_name, mock.ANY,
            self.fake_dest_vol_name)
Ejemplo n.º 13
0
    def test_create_driver(self):
        def get_full_class_name(obj):
            return obj.__module__ + '.' + obj.__class__.__name__

        registry = na_common.NETAPP_UNIFIED_DRIVER_REGISTRY

        for family in six.iterkeys(registry):
            for mode, full_class_name in six.iteritems(registry[family]):

                config = na_fakes.create_configuration()
                config.local_conf.set_override('driver_handles_share_servers',
                                               mode == na_common.MULTI_SVM)
                kwargs = {'configuration': config, 'app_version': 'fake_info'}

                driver = na_common.NetAppDriver._create_driver(
                    family, mode, **kwargs)

                self.assertEqual(full_class_name, get_full_class_name(driver))
Ejemplo n.º 14
0
    def test_create_driver(self):

        def get_full_class_name(obj):
            return obj.__module__ + '.' + obj.__class__.__name__

        registry = na_common.NETAPP_UNIFIED_DRIVER_REGISTRY

        for family in six.iterkeys(registry):
            for mode, full_class_name in six.iteritems(registry[family]):

                config = na_fakes.create_configuration()
                config.local_conf.set_override('driver_handles_share_servers',
                                               mode == na_common.MULTI_SVM)
                kwargs = {'configuration': config, 'app_version': 'fake_info'}

                driver = na_common.NetAppDriver._create_driver(
                    family, mode, **kwargs)

                self.assertEqual(full_class_name, get_full_class_name(driver))
Ejemplo n.º 15
0
    def test_new(self):

        self.mock_object(na_utils.OpenStackInfo, 'info',
                         mock.Mock(return_value='fake_info'))
        mock_get_driver_mode = self.mock_object(
            na_common.NetAppDriver, '_get_driver_mode',
            mock.Mock(return_value='fake_mode'))
        mock_create_driver = self.mock_object(na_common.NetAppDriver,
                                              '_create_driver')

        config = na_fakes.create_configuration()
        config.netapp_storage_family = 'fake_family'
        config.driver_handles_share_servers = True

        kwargs = {'configuration': config}
        na_common.NetAppDriver(**kwargs)

        kwargs['app_version'] = 'fake_info'
        mock_get_driver_mode.assert_called_once_with('fake_family', True)
        mock_create_driver.assert_called_once_with('fake_family', 'fake_mode',
                                                   *(), **kwargs)
Ejemplo n.º 16
0
    def test_new(self):

        self.mock_object(na_utils.OpenStackInfo, 'info',
                         mock.Mock(return_value='fake_info'))
        mock_get_driver_mode = self.mock_object(
            na_common.NetAppDriver, '_get_driver_mode',
            mock.Mock(return_value='fake_mode'))
        mock_create_driver = self.mock_object(na_common.NetAppDriver,
                                              '_create_driver')

        config = na_fakes.create_configuration()
        config.netapp_storage_family = 'fake_family'
        config.driver_handles_share_servers = True

        kwargs = {'configuration': config}
        na_common.NetAppDriver(**kwargs)

        kwargs['app_version'] = 'fake_info'
        mock_get_driver_mode.assert_called_once_with('fake_family', True)
        mock_create_driver.assert_called_once_with('fake_family', 'fake_mode',
                                                   *(), **kwargs)
Ejemplo n.º 17
0
    def test_delete_snapmirror_svm(self, call_release):
        self.mock_object(self.dm_session, 'wait_for_snapmirror_release_svm')
        mock_backend_config = na_fakes.create_configuration()
        mock_backend_config.netapp_snapmirror_release_timeout = 30
        self.mock_object(data_motion, 'get_backend_configuration',
                         mock.Mock(return_value=mock_backend_config))

        self.dm_session.delete_snapmirror_svm(self.fake_src_share_server,
                                              self.fake_dest_share_server,
                                              release=call_release)

        self.mock_dest_client.abort_snapmirror_svm.assert_called_once_with(
            self.source_vserver, self.dest_vserver)
        self.mock_dest_client.delete_snapmirror_svm.assert_called_once_with(
            self.source_vserver, self.dest_vserver)
        if call_release:
            release_mock = self.dm_session.wait_for_snapmirror_release_svm
            release_mock.assert_called_once_with(
                self.source_vserver,
                self.dest_vserver,
                self.mock_src_client,
                timeout=mock_backend_config.netapp_snapmirror_release_timeout)
Ejemplo n.º 18
0
    def test_delete_snapmirror_svm_error_deleting(self):
        """Ensure delete succeeds when the snapmirror does not exist."""
        self.mock_dest_client.delete_snapmirror_svm.side_effect = (
            netapp_api.NaApiError(code=netapp_api.ESOURCE_IS_DIFFERENT))
        self.mock_object(self.dm_session, 'wait_for_snapmirror_release_svm')
        mock_backend_config = na_fakes.create_configuration()
        mock_backend_config.netapp_snapmirror_release_timeout = 30
        self.mock_object(data_motion, 'get_backend_configuration',
                         mock.Mock(return_value=mock_backend_config))

        self.dm_session.delete_snapmirror_svm(self.fake_src_share_server,
                                              self.fake_dest_share_server)

        self.mock_dest_client.abort_snapmirror_svm.assert_called_once_with(
            self.source_vserver, self.dest_vserver)
        self.mock_dest_client.delete_snapmirror_svm.assert_called_once_with(
            self.source_vserver, self.dest_vserver)
        release_mock = self.dm_session.wait_for_snapmirror_release_svm
        release_mock.assert_called_once_with(
            self.source_vserver,
            self.dest_vserver,
            self.mock_src_client,
            timeout=mock_backend_config.netapp_snapmirror_release_timeout)