Merge "DS8K: lss_range_for_cg should take csv as well as range"

This commit is contained in:
Zuul 2017-12-13 15:32:31 +00:00 committed by Gerrit Code Review
commit 2322ced7cc
2 changed files with 56 additions and 13 deletions

View File

@ -1125,6 +1125,22 @@ class DS8KProxyTest(test.TestCase):
self.assertRaises(exception.InvalidParameterValue,
FakeDS8KCommonHelper, self.configuration, None)
@ddt.data('25- 27-', '-25- 27', '25-27 122', '25, 26', '25-#28')
def test_get_lss_ids_for_cg_1(self, lss_range_for_cg):
"""lss_range_for_cg should has the right format."""
self.configuration.lss_range_for_cg = lss_range_for_cg
self.assertRaises(exception.InvalidParameterValue,
FakeDS8KCommonHelper, self.configuration, None)
def test_get_lss_ids_for_cg_2(self):
"""get value from lss_range_for_cg"""
self.configuration.lss_range_for_cg = '25- 27 30 32 85-88 EF'
cmn_helper = FakeDS8KCommonHelper(self.configuration, None)
lss_ids = cmn_helper._get_lss_ids_for_cg()
test_lss_ids = set(['25', '26', '27', '30', '32',
'85', '86', '87', '88', 'EF'])
self.assertEqual(test_lss_ids, lss_ids)
@mock.patch.object(helper.DS8KCommonHelper, 'get_systems')
def test_verify_version_of_8_0_1(self, mock_get_systems):
"""8.0.1 should not use this driver."""

View File

@ -161,22 +161,49 @@ class DS8KCommonHelper(object):
self.backend['storage_version'] = storage_info['release']
def _get_lss_ids_for_cg(self):
lss_ids_for_cg = set()
lss_range = self._get_value('lss_range_for_cg')
if lss_range:
lss_range = lss_range.replace(' ', '').split('-')
if len(lss_range) == 1:
begin = int(lss_range[0], 16)
end = begin
else:
begin = int(lss_range[0], 16)
end = int(lss_range[1], 16)
if begin > 0xFF or end > 0xFF or begin > end:
lss_ids_for_cg = set()
if not lss_range or not lss_range.strip():
return lss_ids_for_cg
if '-' in lss_range:
lss_ids = list()
lss_range = lss_range.strip()
if lss_range.startswith('-') or lss_range.endswith('-'):
raise exception.InvalidParameterValue(
err=_('Param [lss_range_for_cg]\'s format is invalid, '
'please don\'t put the \'-\' at the beginning or '
'the end.'))
lss_range = lss_range.replace('-', ' - ').split()
for index, lss in enumerate(lss_range):
if lss is '-':
try:
begin = int(lss_range[index - 1], 16)
end = int(lss_range[index + 1], 16)
lss_ids_for_cg |= set(
('%02x' % i).upper() for i in
range(begin, end + 1))
except ValueError as e:
raise exception.InvalidParameterValue(
err=_('Param [lss_range_for_cg] is invalid, it '
'only supports space and \'-\' as '
'separator. '
'Exception = %s.') % six.text_type(e))
else:
lss_ids.append(lss)
lss_ids_for_cg |= set(lss_ids)
else:
lss_ids_for_cg = set(lss_range.split())
for lss_id in lss_ids_for_cg:
try:
if int(lss_id, 16) > 0xFF:
raise exception.InvalidParameterValue(
err=_('Param [lss_range_for_cg] is invalid, it '
'should be within 00-FF'))
except ValueError as e:
raise exception.InvalidParameterValue(
err=_('Param [lss_range_for_cg] is invalid, it '
'should be within 00-FF.'))
lss_ids_for_cg = set(
('%02x' % i).upper() for i in range(begin, end + 1))
'only supports space and \'-\' as separator. '
'Exception = %s.') % six.text_type(e))
return lss_ids_for_cg
def _check_host_type(self):