
libvirt-cim-bounces@redhat.com wrote on 2009-05-19 17:12:57:
yunguol@cn.ibm.com wrote:
# HG changeset patch # User Yun Guo Lian <yunguol@cn.ibm.com> # Date 1242720742 25200 # Node ID 0666f518db98e4406521f1a618318a98aead6974 # Parent 6dc2d815e480237c91115cd0d86f6325503e33f7 [TEST]Add new tc to validate that the Disk child pool can be deleted through the providers
Tested for KVM with current sources Signed-off-by: Guolian Yun<yunguol@cn.ibm.com>
diff -r 6dc2d815e480 -r 0666f518db98 suites/libvirt- cim/cimtest/ResourcePoolConfigurationService/09_DeleteDiskPool.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/suites/libvirt- cim/cimtest/ResourcePoolConfigurationService/09_DeleteDiskPool.py Tue May 19 01:12:22 2009 -0700 @@ -0,0 +1,122 @@ +#!/usr/bin/python +# +# Copyright 2009 IBM Corp. +# +# Authors: +# Guolian Yun <yunguol@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 DeleteResourcePool service +# supplied by the RPCS provider. +# The DeleteResourcePool is used to delete a resource pool. +# DeleteResourcePool() details: +# Input +# ----- +# IN -- Pool -- CIM_ResourcePool REF -- The resource pool to delete +# +# Output +# ------ +# 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 841 +# ----- +# Error code: CIM_ERR_NOT_SUPPORTED +# +# After revision 841, the service is implemented +# +# -Date: 19.05.2009 + +import sys +import pywbem +from XenKvmLib import rpcs_service +from CimTest.Globals import logger +from CimTest.ReturnCodes import FAIL, PASS +from XenKvmLib.const import do_main, platform_sup, get_provider_version +from XenKvmLib.enumclass import EnumInstances, EnumNames +from XenKvmLib.classes import get_typed_class +from XenKvmLib.pool import create_netpool, verify_pool + +cim_errno = pywbem.CIM_ERR_NOT_SUPPORTED +cim_mname = "DeleteResourcePool" +libvirt_cim_child_pool_rev = 841 +test_pool = "pool" + +@do_main(platform_sup) +def main(): + status = FAIL + 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.DeleteResourcePool() + 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: + pool_attr = { + "Path" : "/tmp" + } + dp = get_typed_class(options.virt, 'DiskPool') + dp_id = "DiskPool/%s" % test_pool + + status = create_netpool(options.ip, options.virt, test_pool, pool_attr, + pool_type="DiskPool")
you can rename create_netpool() to something generic if you are planning
to use for network and diskpool
+ if status != PASS: + logger.error("Error in diskpool creation") + return FAIL + + status = verify_pool(options.ip, options.virt, dp, + test_pool, pool_attr, + pool_type="DiskPool") + if status != PASS: + logger.error("Error in diskpool verification") + destroy_netpool(options.ip, options.virt, test_pool) + return FAIL + + pool = EnumNames(options.ip, dp) + for i in range(0, len(pool)): + ret_pool = pool[i].keybindings['InstanceID'] + if ret_pool == dp_id: + pool_settings = pool[i] + break
Please initialize the pool_settings, otherwise we will get an exception with pool_settings will not be set if ret_pool != dp_id as pool_settings
will not be set.
+ try: + rpcs_conn.DeleteResourcePool(Pool = pool_settings) + pool = EnumInstances(options.ip, dp) + for i in range(0, len(pool)): + ret_pool = pool[i].InstanceID + if ret_pool == dp_id: + raise Exception("Failed to delete %s" % test_pool)
Need to destroy the pool if its found before returning failure.
+ status = PASS + except Exception, details: + logger.error(details) + return FAIL + + return status + +if __name__ == "__main__": + sys.exit(main()) diff -r 6dc2d815e480 -r 0666f518db98 suites/libvirt- cim/lib/XenKvmLib/pool.py --- a/suites/libvirt-cim/lib/XenKvmLib/pool.py Sun May 17 23:34: 58 2009 -0700 +++ b/suites/libvirt-cim/lib/XenKvmLib/pool.py Tue May 19 01:12: 22 2009 -0700 @@ -32,7 +32,7 @@ from XenKvmLib import rpcs_service import pywbem from CimTest.CimExt import CIMClassMOF -from XenKvmLib.vxml import NetXML +from XenKvmLib.vxml import NetXML, PoolXML
cim_errno = pywbem.CIM_ERR_NOT_SUPPORTED cim_mname = "CreateChildResourcePool" @@ -105,12 +105,12 @@
return volume
-def get_pool_rasds(server, virt): +def get_pool_rasds(server, virt, pool_type="NetworkPool"): net_pool_rasds = []
ac_cn = get_typed_class(virt, "AllocationCapabilities") an_cn = get_typed_class(virt, "SettingsDefineCapabilities") - key_list = {"InstanceID" : "NetworkPool/0" } + key_list = {"InstanceID" : "%s/0" % pool_type}
try: inst = GetInstance(server, ac_cn, key_list) @@ -144,7 +144,8 @@
return PASS
-def create_netpool(server, virt, test_pool, pool_attr_list): +def create_netpool(server, virt, test_pool, pool_attr_list, + pool_type="NetworkPool"): status = PASS rpcs = get_typed_class(virt, "ResourcePoolConfigurationService") rpcs_conn = eval("rpcs_service." + rpcs)(server) @@ -162,22 +163,23 @@ logger.error("Unexpected rc code %s and description %s\n", err_no, desc) return FAIL - elif curr_cim_rev >= libvirt_cim_child_pool_rev: - n_list = net_list(server, virt) - for _net_name in n_list: - net_xml = NetXML(server=server, networkname=_net_name, - virt=virt, is_new_net=False) - pool_use_attr = net_xml.xml_get_netpool_attr_list() - if pool_attr_list['Address'] in pool_use_attr: - logger.error("IP address is in use by a differentnetwork") - return FAIL + elif curr_cim_rev >= libvirt_cim_child_pool_rev: + if pool_type == "NetworkPool": + n_list = net_list(server, virt) + for _net_name in n_list: + net_xml = NetXML(server=server, networkname=_net_name, + virt=virt, is_new_net=False) + pool_use_attr = net_xml.xml_get_netpool_attr_list() + if pool_attr_list['Address'] in pool_use_attr: + logger.error("IP address is in use by a different network") + return FAIL
- net_pool_rasds = get_pool_rasds(server, virt) + net_pool_rasds = get_pool_rasds(server, virt, pool_type) if len(net_pool_rasds) == 0: - logger.error("We can not get NetPoolRASDs") + logger.error("We can not get PoolRASDs") return FAIL else: - net_pool_rasds[0]['PoolID'] = "NetworkPool/%s" % test_pool + net_pool_rasds[0]['PoolID'] = "%s/%s" % (pool_type, test_pool) for attr, val in pool_attr_list.iteritems(): net_pool_rasds[0][attr] = val
These changes conflict with the latest changes submitted for the "#3 Update RPCS/04 with the latest updatesof pool verification". Are you planning to modify "#3 Update RPCS/04 with the latest updatesof pool verification" to use the above changes as well.
I send out a new patch of RPCS/04. To avoid conflict, I will rework on this patch when RPCS/04 patch is applied. Thanks!
@@ -194,7 +196,8 @@ return status
-def verify_pool(server, virt, pooltype, poolname, pool_attr_list): +def verify_pool(server, virt, pooltype, poolname, pool_attr_list, + pool_type="NetworkPool"): status = FAIL pool_list = EnumInstances(server, pooltype) if len(pool_list) < 1: @@ -202,16 +205,20 @@ len(pool_list)) return FAIL
- poolid = "NetworkPool/%s" % poolname + poolid = "%s/%s" % (pool_type, poolname) for i in range(0, len(pool_list)): ret_pool = pool_list[i].InstanceID if ret_pool != poolid: continue
- net_xml = NetXML(server, virt=virt, networkname=poolname, - is_new_net=False) - ret_pool_attr_list = net_xml.xml_get_netpool_attr_list() - + if pool_type == "NetworkPool": + net_xml = NetXML(server, virt=virt, networkname=poolname,
+ is_new_net=False) + ret_pool_attr_list = net_xml.xml_get_netpool_attr_list() + elif pool_type == "DiskPool": + disk_xml = PoolXML(server ,virt=virt, poolname=poolname, + is_new_pool=False) + ret_pool_attr_list = disk_xml.xml_get_pool_attr_list() for i in range(0, len(ret_pool_attr_list)): if ret_pool_attr_list[i] not in pool_attr_list.itervalues(): logger.error("Got error when parsing %s", ret_pool_attr_list[i]) diff -r 6dc2d815e480 -r 0666f518db98 suites/libvirt- cim/lib/XenKvmLib/vxml.py --- a/suites/libvirt-cim/lib/XenKvmLib/vxml.py Sun May 17 23:34: 58 2009 -0700 +++ b/suites/libvirt-cim/lib/XenKvmLib/vxml.py Tue May 19 01:12: 22 2009 -0700 @@ -291,7 +291,7 @@ class PoolXML(Virsh, XMLClass):
def __init__(self, server, poolname=const.default_pool_name, - virt='xen'): + virt='xen', is_new_pool=True):
XMLClass.__init__(self) if virt == 'XenFV': @@ -300,6 +300,17 @@ self.pool_name = poolname self.server = server
+ if is_new_pool is False: + cmd = "virsh pool-dumpxml %s" % self.pool_name + s, disk_xml = utils.run_remote(server, cmd) + if s != 0: + logger.error("Encounter error dump netxml") + return None + else: + self.xml_string = disk_xml + self.xdoc = minidom.parseString(self.xml_string) + return + pool = self.add_sub_node(self.xdoc, 'pool', type='dir') self.add_sub_node(pool, 'name', self.pool_name) target = self.add_sub_node(pool, 'target') @@ -315,6 +326,12 @@ dpoolname = self.get_value_xpath('/pool/name') return dpoolname
+ def xml_get_pool_attr_list(self): + pool_attr_list = [] + poolpath = self.get_value_xpath('/pool/target/path') + pool_attr_list.append(poolpath) + + return pool_attr_list
class VirtXML(Virsh, XMLClass): """Base class for all XML generation & operation"""
_______________________________________________ Libvirt-cim mailing list Libvirt-cim@redhat.com https://www.redhat.com/mailman/listinfo/libvirt-cim
_______________________________________________ Libvirt-cim mailing list Libvirt-cim@redhat.com https://www.redhat.com/mailman/listinfo/libvirt-cim