XtremIO support for iscsi discovery auth

- Discover existing Initiator Groups (a grouping object for initiators)
  from connection information.
- add unit tests for better code coverage.
- handle 'system is busy' array error.

Change-Id: Ia5df488ed0996fb6fb1b77016772e82323ac1f92
Partial-Implements: blueprint emc-xtremio-updates
This commit is contained in:
Shay Halsband
2015-06-08 19:08:46 +03:00
parent 4f197feb0d
commit f78fa75380
3 changed files with 235 additions and 103 deletions

View File

@@ -377,9 +377,38 @@ class EMCXIODriverISCSITestCase(test.TestCase):
map_data = self.driver.initialize_connection(self.data.test_volume,
self.data.connector)
self.assertEqual(map_data['data']['target_lun'], 1)
i1 = xms_data['initiators'][1]
i1['ig-id'] = ['', i1['ig-id'], 1]
i1['chap-authentication-initiator-password'] = 'chap_password1'
i1['chap-discovery-initiator-password'] = 'chap_password2'
map_data = self.driver.initialize_connection(self.data.test_volume2,
self.data.connector)
self.driver.terminate_connection(self.data.test_volume,
self.data.connector)
def test_initialize_chap_connection(self, req):
req.side_effect = xms_request
clean_xms_data()
self.driver.create_volume(self.data.test_volume)
map_data = self.driver.initialize_connection(self.data.test_volume,
self.data.connector)
c1 = xms_data['clusters'][1]
c1['chap-authentication-mode'] = 'initiator'
c1['chap-discovery-mode'] = 'initiator'
i1 = xms_data['initiators'][1]
i1['ig-id'] = ['', i1['ig-id'], 1]
i1['chap-authentication-initiator-password'] = 'chap_password1'
i1['chap-discovery-initiator-password'] = 'chap_password2'
map_data = self.driver.initialize_connection(self.data.test_volume2,
self.data.connector)
self.assertEqual('chap_password1', map_data['data']['auth_password'])
self.assertEqual('chap_password2',
map_data['data']['discovery_auth_password'])
i1['chap-authentication-initiator-password'] = None
i1['chap-discovery-initiator-password'] = None
map_data = self.driver.initialize_connection(self.data.test_volume2,
self.data.connector)
def test_initialize_connection_bad_ig(self, req):
req.side_effect = xms_bad_request
self.assertRaises(exception.VolumeBackendAPIException,
@@ -447,6 +476,47 @@ class EMCXIODriverISCSITestCase(test.TestCase):
self.driver.delete_consistencygroup(d.context, d.group)
@mock.patch('requests.request')
class EMCXIODriverTestCase(test.TestCase):
def setUp(self):
super(EMCXIODriverTestCase, self).setUp()
configuration = mock.Mock()
configuration.san_login = ''
configuration.san_password = ''
configuration.san_ip = ''
configuration.xtremio_cluster_name = ''
def safe_get(key):
getattr(configuration, key)
configuration.safe_get = safe_get
self.driver = xtremio.XtremIOISCSIDriver(configuration=configuration)
self.data = CommonData()
def test_retry_request(self, req):
busy_response = mock.MagicMock()
busy_response.status_code = 400
busy_response.json.return_value = {
"message": "system_is_busy",
"error_code": 400
}
good_response = mock.MagicMock()
good_response.status_code = 200
EMCXIODriverTestCase.req_count = 0
def busy_request(*args, **kwargs):
if EMCXIODriverTestCase.req_count < 1:
EMCXIODriverTestCase.req_count += 1
return busy_response
return good_response
req.side_effect = busy_request
self.driver.create_volume(self.data.test_volume)
@mock.patch('cinder.volume.drivers.emc.xtremio.XtremIOClient.req')
class EMCXIODriverFibreChannelTestCase(test.TestCase):
def setUp(self):