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
Esempio n. 2
0
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)