def createNetAppVolume(**kwargs): vol = ssc_utils.NetAppVolume(kwargs['name'], kwargs['vs']) vol.state['vserver_root'] = kwargs.get('vs_root') vol.state['status'] = kwargs.get('status') vol.state['junction_active'] = kwargs.get('junc_active') vol.space['size_avl_bytes'] = kwargs.get('avl_byt') vol.space['size_total_bytes'] = kwargs.get('total_byt') vol.space['space-guarantee-enabled'] = kwargs.get('sg_enabled') vol.space['space-guarantee'] = kwargs.get('sg') vol.space['thin_provisioned'] = kwargs.get('thin') vol.mirror['mirrored'] = kwargs.get('mirrored') vol.qos['qos_policy_group'] = kwargs.get('qos') vol.aggr['name'] = kwargs.get('aggr_name') vol.aggr['junction'] = kwargs.get('junction') vol.sis['dedup'] = kwargs.get('dedup') vol.sis['compression'] = kwargs.get('compression') vol.aggr['raid_type'] = kwargs.get('raid') vol.aggr['ha_policy'] = kwargs.get('ha') vol.aggr['disk_type'] = kwargs.get('disk') return vol
class NetAppDirectCmodeISCSIDriverTestCase(test.TestCase): """Test case for NetAppISCSIDriver""" volume = { 'name': 'lun1', 'size': 2, 'volume_name': 'lun1', 'os_type': 'linux', 'provider_location': 'lun1', 'id': 'lun1', 'provider_auth': None, 'project_id': 'project', 'display_name': None, 'display_description': 'lun1', 'volume_type_id': None } snapshot = { 'name': 'snapshot1', 'size': 2, 'volume_name': 'lun1', 'volume_size': 2, 'project_id': 'project', 'display_name': None, 'display_description': 'lun1', 'volume_type_id': None } snapshot_fail = { 'name': 'snapshot2', 'size': 2, 'volume_name': 'lun1', 'volume_size': 1, 'project_id': 'project' } volume_sec = { 'name': 'vol_snapshot', 'size': 2, 'volume_name': 'lun1', 'os_type': 'linux', 'provider_location': 'lun1', 'id': 'lun1', 'provider_auth': None, 'project_id': 'project', 'display_name': None, 'display_description': 'lun1', 'volume_type_id': None } volume_clone_fail = { 'name': 'cl_fail', 'size': 1, 'volume_name': 'fail', 'os_type': 'linux', 'provider_location': 'cl_fail', 'id': 'lun1', 'provider_auth': None, 'project_id': 'project', 'display_name': None, 'display_description': 'lun1', 'volume_type_id': None } connector = {'initiator': 'iqn.1993-08.org.debian:01:10'} vol_fail = { 'name': 'lun_fail', 'size': 10000, 'volume_name': 'lun1', 'os_type': 'linux', 'provider_location': 'lun1', 'id': 'lun1', 'provider_auth': None, 'project_id': 'project', 'display_name': None, 'display_description': 'lun1', 'volume_type_id': None } vol1 = ssc_utils.NetAppVolume('lun1', 'openstack') vol1.state['vserver_root'] = False vol1.state['status'] = 'online' vol1.state['junction_active'] = True vol1.space['size_avl_bytes'] = '4000000000' vol1.space['size_total_bytes'] = '5000000000' vol1.space['space-guarantee-enabled'] = False vol1.space['space-guarantee'] = 'file' vol1.space['thin_provisioned'] = True vol1.mirror['mirrored'] = True vol1.qos['qos_policy_group'] = None vol1.aggr['name'] = 'aggr1' vol1.aggr['junction'] = '/vola' vol1.sis['dedup'] = True vol1.sis['compression'] = True vol1.aggr['raid_type'] = 'raiddp' vol1.aggr['ha_policy'] = 'cfo' vol1.aggr['disk_type'] = 'SSD' ssc_map = { 'mirrored': set([vol1]), 'dedup': set([vol1]), 'compression': set([vol1]), 'thin': set([vol1]), 'all': set([vol1]) } def setUp(self): super(NetAppDirectCmodeISCSIDriverTestCase, self).setUp() self._custom_setup() def _custom_setup(self): self.stubs.Set(ssc_utils, 'refresh_cluster_ssc', lambda a, b, c: None) configuration = self._set_config(create_configuration()) driver = common.NetAppDriver(configuration=configuration) self.stubs.Set(httplib, 'HTTPConnection', FakeDirectCmodeHTTPConnection) driver.do_setup(context='') client = driver.client client.set_api_version(1, 15) self.driver = driver self.driver.ssc_vols = self.ssc_map def _set_config(self, configuration): configuration.netapp_storage_protocol = 'iscsi' configuration.netapp_login = '******' configuration.netapp_password = '******' configuration.netapp_server_hostname = '127.0.0.1' configuration.netapp_transport_type = 'http' configuration.netapp_server_port = '80' configuration.netapp_vserver = 'openstack' return configuration def test_connect(self): self.driver.check_for_setup_error() def test_create_destroy(self): self.driver.create_volume(self.volume) self.driver.delete_volume(self.volume) def test_create_vol_snapshot_destroy(self): self.driver.create_volume(self.volume) self.driver.create_snapshot(self.snapshot) self.driver.create_volume_from_snapshot(self.volume_sec, self.snapshot) self.driver.delete_snapshot(self.snapshot) self.driver.delete_volume(self.volume) def test_map_unmap(self): self.driver.create_volume(self.volume) updates = self.driver.create_export(None, self.volume) self.assertTrue(updates['provider_location']) self.volume['provider_location'] = updates['provider_location'] connection_info = self.driver.initialize_connection( self.volume, self.connector) self.assertEqual(connection_info['driver_volume_type'], 'iscsi') properties = connection_info['data'] if not properties: raise AssertionError('Target portal is none') self.driver.terminate_connection(self.volume, self.connector) self.driver.delete_volume(self.volume) def test_fail_vol_from_snapshot_creation(self): self.driver.create_volume(self.volume) try: self.driver.create_volume_from_snapshot(self.volume, self.snapshot_fail) raise AssertionError() except exception.VolumeBackendAPIException: pass finally: self.driver.delete_volume(self.volume) def test_cloned_volume_destroy(self): self.driver.create_volume(self.volume) self.driver.create_cloned_volume(self.snapshot, self.volume) self.driver.delete_volume(self.snapshot) self.driver.delete_volume(self.volume) def test_fail_cloned_volume_creation(self): self.driver.create_volume(self.volume) try: self.driver.create_cloned_volume(self.volume_clone_fail, self.volume) raise AssertionError() except exception.VolumeBackendAPIException: pass finally: self.driver.delete_volume(self.volume) def test_map_by_creating_igroup(self): self.driver.create_volume(self.volume) updates = self.driver.create_export(None, self.volume) self.assertTrue(updates['provider_location']) self.volume['provider_location'] = updates['provider_location'] connector_new = {'initiator': 'iqn.1993-08.org.debian:01:1001'} connection_info = self.driver.initialize_connection( self.volume, connector_new) self.assertEqual(connection_info['driver_volume_type'], 'iscsi') properties = connection_info['data'] if not properties: raise AssertionError('Target portal is none') def test_fail_create_vol(self): self.assertRaises(exception.VolumeBackendAPIException, self.driver.create_volume, self.vol_fail) def test_vol_stats(self): self.driver.get_volume_stats(refresh=True)