Compare the encoded tag more accurately for huawei driver
huawei driver uses a tag '!$$$' to indicate if username/password is encoded or not in huawei configuration file. Currently 'find' method is used to check if this tag is included in the configuration string, but it'll misread if the tag is included not in front of the string. So change the comparing statement to a more accurate way, compare the front slice of the string directly to the tag. Change-Id: Ic343970578477362460340b01e5766e03c7d63a4 Closes-Bug: 1635073
This commit is contained in:
parent
b9b3b96249
commit
3f2800ede5
@ -190,7 +190,7 @@ class RestHelper(object):
|
||||
need_encode = False
|
||||
for key in ['UserName', 'UserPassword']:
|
||||
node = root.find('Storage/%s' % key)
|
||||
if node.text.find(prefix_name) > -1:
|
||||
if node.text.startswith(prefix_name):
|
||||
logininfo[key] = base64.b64decode(
|
||||
six.b(node.text[4:])).decode()
|
||||
else:
|
||||
|
@ -26,6 +26,7 @@ import xml.dom.minidom
|
||||
import ddt
|
||||
import mock
|
||||
from oslo_serialization import jsonutils
|
||||
from xml.etree import ElementTree as ET
|
||||
|
||||
from manila.common import constants as common_constants
|
||||
from manila import context
|
||||
@ -823,6 +824,45 @@ class FakeHuaweiNasDriver(huawei_nas.HuaweiNasDriver):
|
||||
self.plugin.private_storage = FakePrivateStorage()
|
||||
|
||||
|
||||
class FakeConfigParseTree(object):
|
||||
class FakeNode(object):
|
||||
def __init__(self, text):
|
||||
self._text = text
|
||||
|
||||
@property
|
||||
def text(self):
|
||||
return self._text
|
||||
|
||||
@text.setter
|
||||
def text(self, text):
|
||||
self._text = text
|
||||
|
||||
class FakeRoot(object):
|
||||
def __init__(self):
|
||||
self._node_map = {}
|
||||
|
||||
def findtext(self, path, default=None):
|
||||
if path in self._node_map:
|
||||
return self._node_map[path].text
|
||||
return default
|
||||
|
||||
def find(self, path):
|
||||
if path in self._node_map:
|
||||
return self._node_map[path]
|
||||
return None
|
||||
|
||||
def __init__(self, path_value):
|
||||
self.root = self.FakeRoot()
|
||||
for k in path_value:
|
||||
self.root._node_map[k] = self.FakeNode(path_value[k])
|
||||
|
||||
def getroot(self):
|
||||
return self.root
|
||||
|
||||
def write(self, filename, format):
|
||||
pass
|
||||
|
||||
|
||||
@ddt.ddt
|
||||
class HuaweiShareDriverTestCase(test.TestCase):
|
||||
"""Tests GenericShareDriver."""
|
||||
@ -4492,3 +4532,36 @@ class HuaweiShareDriverTestCase(test.TestCase):
|
||||
logininfo = self.driver.plugin.helper._get_login_info()
|
||||
self.assertEqual('admin', logininfo['UserName'])
|
||||
self.assertEqual('Admin@storage', logininfo['UserPassword'])
|
||||
|
||||
@ddt.data({
|
||||
'username': 'abc',
|
||||
'password': '123456',
|
||||
'expect_username': 'abc',
|
||||
'expect_password': '123456',
|
||||
}, {
|
||||
'username': '!$$$YWJj',
|
||||
'password': '!$$$MTIzNDU2',
|
||||
'expect_username': 'abc',
|
||||
'expect_password': '123456',
|
||||
}, {
|
||||
'username': 'ab!$$$c',
|
||||
'password': '123!$$$456',
|
||||
'expect_username': 'ab!$$$c',
|
||||
'expect_password': '123!$$$456',
|
||||
})
|
||||
@ddt.unpack
|
||||
def test__get_login_info(self, username, password, expect_username,
|
||||
expect_password):
|
||||
configs = {
|
||||
'Storage/RestURL': 'https://123456',
|
||||
'Storage/UserName': username,
|
||||
'Storage/UserPassword': password,
|
||||
}
|
||||
self.mock_object(
|
||||
ET, 'parse',
|
||||
mock.Mock(return_value=FakeConfigParseTree(configs)))
|
||||
|
||||
result = self.driver.plugin.helper._get_login_info()
|
||||
self.assertEqual(expect_username, result['UserName'])
|
||||
self.assertEqual(expect_password, result['UserPassword'])
|
||||
ET.parse.assert_called_once_with(self.fake_conf_file)
|
||||
|
Loading…
Reference in New Issue
Block a user