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 )
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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))
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))
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)
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)
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)
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)