On 01/10/2013 05:02 PM, Wayne Sun wrote:
Add cases for testing findStoragePoolSources API
* add 3 cases for storage type 'netfs', 'iscsi' and 'logical'
* add 2 xmls for 'netfs' and 'iscsi'
find 'logical' storage pool sources did not require xml start with
source tag and xml could be empty
* add test conf for find storage pool sources
Signed-off-by: Wayne Sun <gsun(a)redhat.com>
---
cases/find_storage_pool_sources.conf | 31 +++++++++++
repos/storage/find_iscsi_pool_sources.py | 72 ++++++++++++++++++++++++
repos/storage/find_logical_pool_sources.py | 82 ++++++++++++++++++++++++++++
repos/storage/find_netfs_pool_sources.py | 71 ++++++++++++++++++++++++
repos/storage/xmls/iscsi_pool_source.xml | 3 +
repos/storage/xmls/netfs_pool_source.xml | 4 ++
6 files changed, 263 insertions(+), 0 deletions(-)
create mode 100644 cases/find_storage_pool_sources.conf
create mode 100644 repos/storage/find_iscsi_pool_sources.py
create mode 100644 repos/storage/find_logical_pool_sources.py
create mode 100644 repos/storage/find_netfs_pool_sources.py
create mode 100644 repos/storage/xmls/iscsi_pool_source.xml
create mode 100644 repos/storage/xmls/netfs_pool_source.xml
diff --git a/cases/find_storage_pool_sources.conf b/cases/find_storage_pool_sources.conf
new file mode 100644
index 0000000..d2e86db
--- /dev/null
+++ b/cases/find_storage_pool_sources.conf
@@ -0,0 +1,31 @@
+storage:find_iscsi_pool_sources
+ sourcehost
+ $iscsi_server
+
+storage:find_netfs_pool_sources
+ sourcehost
+ $nfs_server
+
+storage:define_logical_pool
+ poolname
+ $defaultpoolname
+ sourcename
+ $defaultpoolname
+ sourcepath
+ $defaultpartition
+
+storage:build_logical_pool
+ poolname
+ $defaultpoolname
+
+storage:find_logical_pool_sources
+ sourcepath
+ $defaultpartition
+
+storage:delete_logical_pool
+ poolname
+ $defaultpoolname
+
+storage:undefine_pool
+ poolname
+ $defaultpoolname
diff --git a/repos/storage/find_iscsi_pool_sources.py
b/repos/storage/find_iscsi_pool_sources.py
new file mode 100644
index 0000000..4b758d2
--- /dev/null
+++ b/repos/storage/find_iscsi_pool_sources.py
@@ -0,0 +1,72 @@
+#!/usr/bin/env python
+# Test finding storage pool source of 'iscsi' type
+
+from xml.dom import minidom
+
+import libvirt
+from libvirt import libvirtError
+
+from src import sharedmod
+from utils import utils
+
+required_params = ('sourcehost',)
+optional_params = {'xml' : 'xmls/iscsi_pool_source.xml',
+ }
+
+def check_pool_sources(host, xmlstr):
+ """check the iscsi sources with command:
+ iscsiadm --mode discovery --type sendtargets --portal
+ """
+ source_val = []
+
+ doc = minidom.parseString(xmlstr)
+ for diskTag in doc.getElementsByTagName("source"):
+ device_element = diskTag.getElementsByTagName("device")[0]
+ attr = device_element.getAttributeNode('path')
+ path_val = attr.nodeValue
+
+ source_val.append(path_val)
+
+ logger.debug("pool source info list is: %s" % source_val)
+
+ cmd = "iscsiadm --mode discovery --type sendtargets --portal %s:3260,1 |\
+ awk -F' ' '{print $2}'" % host
+ ret, path_list = utils.exec_cmd(cmd, shell=True)
+
+ logger.debug("iscsiadm command output list is: %s" % path_list)
+
+ if source_val == path_list:
+ logger.info("source list matched with iscsiadm command output")
+ return 0
+ else:
+ logger.error("source list did not match with iscsiadm command
output")
+ return 1
+
+def find_iscsi_pool_sources(params):
+ """Find iscsi type storage pool sources from xml"""
+ global logger
+ logger = params['logger']
+ sourcehost = params['sourcehost']
+ xmlstr = params['xml']
+
+ conn = sharedmod.libvirtobj['conn']
+ try:
+
+ logger.debug("storage source spec xml:\n%s" % xmlstr)
+
+ logger.info("find pool sources of iscsi type")
+ source_xml = conn.findStoragePoolSources('iscsi', xmlstr, 0)
+ logger.info("pool sources xml description is:\n %s" % source_xml)
+
+ ret = check_pool_sources(sourcehost, source_xml)
+ if ret:
+ logger.error("pool sources check failed")
+ return 1
+ else:
+ logger.info("pool sources check succeed")
+
+ except libvirtError, e:
+ logger.error("libvirt call failed: " + str(e))
+ return 1
+
+ return 0
diff --git a/repos/storage/find_logical_pool_sources.py
b/repos/storage/find_logical_pool_sources.py
new file mode 100644
index 0000000..255d879
--- /dev/null
+++ b/repos/storage/find_logical_pool_sources.py
@@ -0,0 +1,82 @@
+#!/usr/bin/env python
+# Test finding storage pool source of 'logical' type
+
+from xml.dom import minidom
+
+import libvirt
+from libvirt import libvirtError
+
+from src import sharedmod
+from utils import utils
+
+required_params = ('sourcepath',)
+optional_params = {'xml' : 'xmls/logical_pool.xml',
+ }
+
+def check_pool_sources(xmlstr):
+ """check the logical sources with command:
+ pvs --noheadings -o pv_name,vg_name
+ """
+ source_val = {}
+ source_cmp = {}
+
+ doc = minidom.parseString(xmlstr)
+ for diskTag in doc.getElementsByTagName("source"):
+ device_element = diskTag.getElementsByTagName("device")[0]
+ attr = device_element.getAttributeNode('path')
+ path_val = attr.nodeValue
+
+ name_element = diskTag.getElementsByTagName("name")[0]
+ textnode = name_element.childNodes[0]
+ name_val = textnode.data
+
+ source_val.update({path_val: name_val, })
+
+ logger.debug("pool source info dict is: %s" % source_val)
+
+ cmd = "pvs --noheadings -o pv_name,vg_name | awk -F' ' '{print
$1}'"
+ ret, path_list = utils.exec_cmd(cmd, shell=True)
+
+ cmd = "pvs --noheadings -o pv_name,vg_name | awk -F' ' '{print
$2}'"
+ ret, name_list = utils.exec_cmd(cmd, shell=True)
+
+ for i in range(len(path_list)):
+ source_cmp.update({path_list[i]: name_list[i]})
+
+ logger.debug("pvs command output dict is: %s" % source_cmp)
+
+ if source_val == source_cmp:
+ logger.info("source dict match with pvs command output")
+ return 0
+ else:
+ logger.error("source dict did not match with pvs command output")
+ return 1
+
+def find_logical_pool_sources(params):
+ """Find logical type storage pool sources from xml"""
+ global logger
+ logger = params['logger']
+ sourcepath = params['sourcepath']
+ xmlstr = params['xml']
+
+ conn = sharedmod.libvirtobj['conn']
+ try:
+
+ logger.debug("storage source spec xml:\n%s" % xmlstr)
+
+ logger.info("find pool sources of logical type")
+ source_xml = conn.findStoragePoolSources('logical', xmlstr, 0)
+ logger.info("pool sources xml description is:\n %s" % source_xml)
+
+ ret = check_pool_sources(source_xml)
+ if ret:
+ logger.error("pool sources check failed")
+ return 1
+ else:
+ logger.info("pool sources check succeed")
+
+ except libvirtError, e:
+ logger.error("libvirt call failed: " + str(e))
+ return 1
+
+ return 0
diff --git a/repos/storage/find_netfs_pool_sources.py
b/repos/storage/find_netfs_pool_sources.py
new file mode 100644
index 0000000..bc71233
--- /dev/null
+++ b/repos/storage/find_netfs_pool_sources.py
@@ -0,0 +1,71 @@
+#!/usr/bin/env python
+# Test finding storage pool source of 'netfs' type
+
+from xml.dom import minidom
+
+import libvirt
+from libvirt import libvirtError
+
+from src import sharedmod
+from utils import utils
+
+required_params = ('sourcehost',)
+optional_params = {'xml' : 'xmls/netfs_pool_source.xml',
+ }
+
+def check_pool_sources(host, xmlstr):
+ """check the netfs sources with command:
+ showmount --no-headers -e HOSTNAME
+ """
+ source_val = []
+
+ doc = minidom.parseString(xmlstr)
+ for diskTag in doc.getElementsByTagName("source"):
+ device_element = diskTag.getElementsByTagName("dir")[0]
+ attr = device_element.getAttributeNode('path')
+ path_val = attr.nodeValue
+
+ source_val.append(path_val)
+
+ logger.debug("pool source info list is: %s" % source_val)
+
+ cmd = "showmount --no-headers -e %s | awk -F' ' '{print
$1}'" % host
+ ret, path_list = utils.exec_cmd(cmd, shell=True)
+
+ logger.debug("showmount command output list is: %s" % path_list)
+
+ if source_val == path_list:
+ logger.info("source list matched with showmount command output")
+ return 0
+ else:
+ logger.error("source list did not match with showmount command
output")
+ return 1
+
+def find_netfs_pool_sources(params):
+ """Find netfs type storage pool sources from xml"""
+ global logger
+ logger = params['logger']
+ sourcehost = params['sourcehost']
+ xmlstr = params['xml']
+
+ conn = sharedmod.libvirtobj['conn']
+ try:
+
+ logger.debug("storage source spec xml:\n%s" % xmlstr)
+
+ logger.info("find pool sources of netfs type")
+ source_xml = conn.findStoragePoolSources('netfs', xmlstr, 0)
+ logger.info("pool sources xml description is:\n %s" % source_xml)
+
+ ret = check_pool_sources(sourcehost, source_xml)
+ if ret:
+ logger.error("pool sources check failed")
+ return 1
+ else:
+ logger.info("pool sources check succeed")
+
+ except libvirtError, e:
+ logger.error("libvirt call failed: " + str(e))
+ return 1
+
+ return 0
diff --git a/repos/storage/xmls/iscsi_pool_source.xml
b/repos/storage/xmls/iscsi_pool_source.xml
new file mode 100644
index 0000000..93216c5
--- /dev/null
+++ b/repos/storage/xmls/iscsi_pool_source.xml
@@ -0,0 +1,3 @@
+<source>
+ <host name="SOURCEHOST"/>
+</source>
diff --git a/repos/storage/xmls/netfs_pool_source.xml
b/repos/storage/xmls/netfs_pool_source.xml
new file mode 100644
index 0000000..6a2aeea
--- /dev/null
+++ b/repos/storage/xmls/netfs_pool_source.xml
@@ -0,0 +1,4 @@
+<source>
+ <host name="SOURCEHOST"/>
+ <format type="nfs"/>
+</source>
ACK and pushed.
Thanks.
Guannan