[Libvirt-cim] [PATCH] [TEST] Add new tc to validate that the Disk child pool can be created through the providers

Deepti B Kalakeri deeptik at linux.vnet.ibm.com
Fri Apr 24 08:13:02 UTC 2009



yunguol at cn.ibm.com wrote:
> # HG changeset patch
> # User Guolian Yun <yunguol at cn.ibm.com>
> # Date 1240479451 25200
> # Node ID e1be3bd47b8005fad25dcfd80672870009d5c111
> # Parent  e8dc06eefada41252ba8d27b08fcef8ef6604251
> [TEST] Add new tc to validate that the Disk child pool can be created through the providers
>
>
> Tested for KVM with current sources
> Signed-off-by: Guolian Yun<yunguol at cn.ibm.com>
>
> diff -r e8dc06eefada -r e1be3bd47b80 suites/libvirt-cim/cimtest/ResourcePoolConfigurationService/08_CreateChildResourcePool_Disk.py
> --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
> +++ b/suites/libvirt-cim/cimtest/ResourcePoolConfigurationService/08_CreateChildResourcePool_Disk.py	Thu Apr 23 02:37:31 2009 -0700
> @@ -0,0 +1,144 @@
> +#!/usr/bin/python
> +#
> +# Copyright 2009 IBM Corp.
> +#
> +# Authors:
> +#    Guolian Yun <yunguol at cn.ibm.com>
> +#    
> +#
> +# This library is free software; you can redistribute it and/or
> +# modify it under the terms of the GNU General Public
> +# License as published by the Free Software Foundation; either
> +# version 2.1 of the License, or (at your option) any later version.
> +#
> +# This library is distributed in the hope that it will be useful,
> +# but WITHOUT ANY WARRANTY; without even the implied warranty of
> +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
> +# General Public License for more details.
> +#
> +# You should have received a copy of the GNU General Public
> +# License along with this library; if not, write to the Free Software
> +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307  USA
> +#
> +# This test case should test the  CreateChildResourcePool service 
> +# supplied by the RPCS provider. 
> +# Input 
> +# -----
> +# IN -- ElementName -- String -- The desired name of the resource pool
> +# IN -- Settings    -- String -- A string representation of a
> +#                                CIM_ResourceAllocationSettingData 
> +#                                instance that represents the allocation 
> +#                                assigned to this child pool
> +# IN -- ParentPool  -- CIM_ResourcePool REF -- The parent pool from which 
> +#                                              to create this pool
> +# 
> +# Output
> +# ------
> +# OUT -- Pool -- CIM_ResourcePool REF -- The resulting resource pool
> +# OUT -- Job  -- CIM_ConcreteJob REF -- Returned job if started
> +# OUT -- Error -- String  -- Encoded error instance if the operation 
> +#                            failed and did not return a job
> +#
> +# Exception details before Revision 837
> +# -----
> +# Error code: CIM_ERR_NOT_SUPPORTED 
> +#
> +# After revision 837, the service is implemented
> +#
> +#                                                   -Date: 23.04.2009
> +
> +import sys
> +import pywbem 
> +from XenKvmLib import rpcs_service
> +from CimTest.Globals import logger
> +from CimTest.ReturnCodes import FAIL, PASS
> +from CimTest.Globals import CIM_NS
>   
combine CIM_NS and logger
> +from XenKvmLib.const import do_main, platform_sup, get_provider_version
> +from XenKvmLib.classes import get_typed_class
> +from pywbem.cim_obj import CIMInstanceName, CIMInstance
> +from XenKvmLib.enumclass import EnumInstances
> +from XenKvmLib.xm_virt_util import diskpool_destroy, diskpool_undefine
> +from pywbem.cim_types import Uint16
> +
> +cim_errno  = pywbem.CIM_ERR_NOT_SUPPORTED
> +cim_mname  = "CreateChildResourcePool"
> +libvirt_cim_child_pool_rev = 837
> +test_pool = ["dir_pool"]
> +
> +def verify_pool(pool_list, poolname):
> +    status = FAIL
> +    if len(pool_list) < 1:
> +        logger.error("Return %i instances, expected at least one instance",
> +                     len(pool_list))
> +        return FAIL
> +    
> +    for i in range(0, len(pool_list)):
> +        ret_pool = pool_list[i].InstanceID
> +        if ret_pool == poolname:
> +            status = PASS
> +            break
> +        elif ret_pool != poolname and i == len(pool_list)-1:
> +            logger.error("Can not find expected pool")
>   
Can we move this function to a library since it is used in other tc as 
well ?
When you move the function, you can as well move the 
EnumInstances(options.ip, dp) to the library function.

> +
> +    return status
> +
> + at do_main(platform_sup)
> +def main():
> +    options = main.options
> +    rpcs_conn = eval("rpcs_service." + get_typed_class(options.virt, \
> +                      "ResourcePoolConfigurationService"))(options.ip)
> +
> +    curr_cim_rev, changeset = get_provider_version(options.virt, options.ip)
> +    if curr_cim_rev < libvirt_cim_child_pool_rev:
> +        try:
> +            rpcs_conn.CreateChildResourcePool()
> +        except pywbem.CIMError, (err_no, desc):
> +            if err_no == cim_errno :
> +                logger.info("Got expected exception for '%s'service", cim_mname)
> +                logger.info("Errno is '%s' ", err_no)
> +                logger.info("Error string is '%s'", desc)
> +                return PASS
> +            else:
> +                logger.error("Unexpected rc code %s and description %s\n",
> +                             err_no, desc)
> +                return FAIL
> +    elif curr_cim_rev >= libvirt_cim_child_pool_rev: 
> +        dprasd = get_typed_class(options.virt, 
> +                                 'DiskPoolResourceAllocationSettingData')
> +        dp_prop = {"Path" : "/tmp"}    
> +
> +        for i in range(0, len(test_pool)):
> +            dp_id = 'DiskPool/%s' % test_pool[i]
> +            iname = CIMInstanceName(dprasd,
> +                                    namespace = CIM_NS,
> +                                    keybindings = {'InstanceID':dp_id})
> +            if test_pool[i] == "dir_pool":
> +                dp_prop["Type"] = Uint16(1)
> +
> +            drasd = CIMInstance(dprasd, path = iname, properties = dp_prop)
> +            try:
> +                rpcs_conn.CreateChildResourcePool(ElementName=test_pool[i], 
> +                                                  Settings=[drasd.tomof()])
> +                dp = get_typed_class(options.virt, 'DiskPool')
> +                diskpool = EnumInstances(options.ip, dp)
> +                status = verify_pool(diskpool, dp_id)
> +                if status != PASS:
> +                    raise Exception("Error in diskpool verification")
> +                status = diskpool_destroy(test_pool[i], options.ip, options.virt)
> +                if status != PASS:
> +                    raise Exception("Unable to destroy diskpool %s"
> +                                    % test_pool[i])
> +                status = diskpool_undefine(test_pool[i], options.ip, options.virt)
> +                if status != PASS:
> +                    raise Exception("Unable to undefine diskpool %s"
> +                                    % test_pool[i])
> +            except Exception, details:
> +                logger.error("Invoke CreateChildResourcePool() error when "
> +                              "create %s", dp_id)
> +                logger.error(details)
>   
Make this log msg more generic.
> +                return FAIL
> +       
> +        return status
> +
> +if __name__ == "__main__":
> +    sys.exit(main())
> diff -r e8dc06eefada -r e1be3bd47b80 suites/libvirt-cim/lib/XenKvmLib/xm_virt_util.py
> --- a/suites/libvirt-cim/lib/XenKvmLib/xm_virt_util.py	Tue Apr 21 17:08:06 2009 -0700
> +++ b/suites/libvirt-cim/lib/XenKvmLib/xm_virt_util.py	Thu Apr 23 02:37:31 2009 -0700
> @@ -190,7 +190,23 @@
>      cmd = "virsh -c %s net-destroy %s" % (virt2uri(virt), network)
>      ret, out = utils.run_remote(server, cmd)
>
> -    return ret 
> +    return ret
> +
> +def diskpool_destroy(diskpool, server, virt="Xen"):
> +    """Function destroys a given virtual diskpool"""
> +
> +    cmd = "virsh -c %s pool-destroy %s" % (virt2uri(virt), diskpool)
> +    ret, out = utils.run_remote(server, cmd)
> +
> +    return ret
> +
> +def diskpool_undefine(diskpool, server, virt="Xen"):
> +    """Function undefines a given virtual diskpool"""
> +
> +    cmd = "virsh -c %s pool-undefine %s" % (virt2uri(virt), diskpool)
> +    ret, out = utils.run_remote(server, cmd)
> +
> +    return ret
>
>  def network_by_bridge(bridge, server, virt="Xen"):
>      """Function returns virtual network for a given bridge"""
>
> _______________________________________________
> Libvirt-cim mailing list
> Libvirt-cim at redhat.com
> https://www.redhat.com/mailman/listinfo/libvirt-cim
>   

-- 
Thanks and Regards,
Deepti B. Kalakeri
IBM Linux Technology Center
deeptik at linux.vnet.ibm.com




More information about the Libvirt-cim mailing list