[libvirt] [test-API][PATCH] Add find storage pool sources cases

Guannan Ren gren at redhat.com
Tue Jan 15 04:51:57 UTC 2013


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 at 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




More information about the libvir-list mailing list