[PATCH] [TEST] Update RAFP.01 for LXC support

# HG changeset patch # User Guolian Yun <yunguol@cn.ibm.com> # Date 1214371183 -28800 # Node ID c8c27374e304a66cd71d1f0b5d0fc462e230a898 # Parent 727d97c09d77d73f3542ba49a9dd19ba119a67eb [TEST] Update RAFP.01 for LXC support Signed-off-by: Guolian Yun <yunguol@cn.ibm.com> diff -r 727d97c09d77 -r c8c27374e304 suites/libvirt-cim/cimtest/ResourceAllocationFromPool/01_forward.py --- a/suites/libvirt-cim/cimtest/ResourceAllocationFromPool/01_forward.py Tue Jun 10 18:26:20 2008 -0700 +++ b/suites/libvirt-cim/cimtest/ResourceAllocationFromPool/01_forward.py Wed Jun 25 13:19:43 2008 +0800 @@ -26,66 +26,165 @@ from VirtLib import utils from XenKvmLib import assoc from XenKvmLib import enumclass -from XenKvmLib.classes import get_typed_class +from XenKvmLib.classes import get_typed_class +from XenKvmLib.test_doms import destroy_and_undefine_all +from XenKvmLib.vxml import get_class from CimTest import Globals from CimTest.Globals import logger, do_main from CimTest.ReturnCodes import PASS, FAIL, XFAIL +from XenKvmLib.common_util import cleanup_restore, create_diskpool_conf, \ +create_netpool_conf -sup_types = ['Xen', 'XenFV', 'KVM'] +sup_types = ['Xen', 'XenFV', 'KVM', 'LXC'] +test_dom = "RAFP_dom" +test_vcpus = 1 +test_mem = 128 +test_mac = "00:11:22:33:44:aa" + +def setup_env(server, virt): + destroy_and_undefine_all(server) + vsxml = None + if virt == "Xen": + test_disk = "xvda" + elif virt == "XenFV" or virt=="KVM": + test_disk = "hda" + else: + test_disk = None + + virtxml = get_class(virt) + if virt == 'LXC': + vsxml = virtxml(test_dom) + else: + vsxml = virtxml(test_dom, mem=test_mem, vcpus = test_vcpus, + mac = test_mac, disk = test_disk) + try: + ret = vsxml.define(server) + if not ret: + logger.error("Failed to Define the domain: %s", test_dom) + return FAIL, vsxml, test_disk + + except Exception, details: + logger.error("Exception : %s", details) + return FAIL, vsxml, test_disk + + return PASS, vsxml, test_disk + +def get_instance(server, pool, list, virt='Xen'): + try: + inst = enumclass.getInstance(server, + pool, + list, + virt) + except Exception: + logger.error(Globals.CIM_ERROR_GETINSTANCE % pool) + return FAIL, inst + + return PASS, inst + +def verify_rasd(server, assoc_cn, cn, virt, list, rasd): + try: + data = assoc.AssociatorNames(server, + assoc_cn, + cn, + virt, + InstanceID=list) + except Exception: + logger.error(Globals.CIM_ERROR_ASSOCIATORNAMES % cn) + return FAIL + + if len(data) < 1: + logger.error("Return NULL, expect at least one instance") + return FAIL + + for i in range(0, len(data)): + if data[i].classname == "LXC_MemResourceAllocationSettingData" \ + and data[i]['InstanceID'] == rasd["MemoryPool"]: + logger.info("MemoryPool InstanceID match") + return PASS + elif i == len(data) and data[i]['InstanceID'] != rasd["MemoryPool"]: + logger.error("InstanceID Mismatch, expect %s not %s" % \ + (rasd['MemoryPool'], data[i]['InstanceID'])) + return FAIL + if data[i].classname == "LXC_ProcResourceAllocationSettingData" \ + and data[i]['InstanceID'] == rasd["ProcessorPool"]: + logger.info("ProcessorPool InstanceID match") + return PASS + elif i == len(data) and data[i]['InstanceID'] != rasd["ProcessorPool"]: + logger.error("InstanceID Mismatch, expect %s not %s" % \ + (rasd['ProcessorPool'], data[i]['InstanceID'])) + return FAIL + if data[i].classname == "LXC_DiskResourceAllocationSettingData" \ + and data[i]['InstanceID'] == rasd["DiskPool"]: + logger.info("DiskPool InstanceID match") + return PASS + elif i == len(data) and data[i]['InstanceID'] != rasd["DiskPool"]: + logger.error("InstanceID Mismatch, expect %s" % \ + (rasd['DiskPool'], data[i]['InstanceID'])) + return FAIL + if data[i].classname == "LXC_NetResourceAllocationSettingData" \ + and data[i]['InstanceID'] == rasd["NetworkPool"]: + logger.info("NetworkPool InstanceID match") + return PASS + elif i == len(data) and data[i]['InstanceID'] != rasd["NetworkPool"]: + logger.error("InstanceID Mismatch, expect %s" % \ + (rasd['NetworkPool'], data[i]['InstanceID'])) + return FAIL + @do_main(sup_types) def main(): options = main.options status = PASS - try: - key_list = { 'InstanceID' : "MemoryPool/0" } - mempool = enumclass.getInstance(options.ip, - "MemoryPool", - key_list, - options.virt) - except Exception: - logger.error(Globals.CIM_ERROR_GETINSTANCE % "MemoryPool") - return FAIL + + status, vsxml, test_disk = setup_env(options.ip, options.virt) + if status != PASS: + return status + + status, diskid = create_diskpool_conf(options.ip, options.virt) + if status != PASS: + cleanup_restore(options.ip, options.virt) + vsxml.undefine(options.ip) + return status - try: - key_list = { 'InstanceID' : "ProcessorPool/0" } - procpool = enumclass.getInstance(options.ip, - "ProcessorPool", - key_list, - options.virt) - except Exception: - logger.error(Globals.CIM_ERROR_GETINSTANCE % "ProcessorPool") - return FAIL - - try: - memdata = assoc.AssociatorNames(options.ip, "ResourceAllocationFromPool", - "MemoryPool", - options.virt, - InstanceID = mempool.InstanceID) - except Exception: - logger.error(Globals.CIM_ERROR_ASSOCIATORNAMES % mempool.InstanceID) - status = FAIL - - for i in range(len(memdata)): - if memdata[i].classname != get_typed_class(options.virt, "MemResourceAllocationSettingData"): - logger.error("ERROR: Association result error") - status = FAIL - - try: - procdata = assoc.AssociatorNames(options.ip, "ResourceAllocationFromPool", - "ProcessorPool", - options.virt, - InstanceID = procpool.InstanceID) - except Exception: - logger.error(Globals.CIM_ERROR_ASSOCIATORNAMES % procpool.InstanceID) - status = FAIL - - for j in range(len(procdata)): - if procdata[j].classname != get_typed_class(options.virt, "ProcResourceAllocationSettingData"): - logger.error("ERROR: Association result error") - status = FAIL + status, test_network = create_netpool_conf(options.ip, options.virt) + if status != PASS: + cleanup_restore(options.ip, options.virt) + vsxml.undefine(options.ip) + return status + + if options.virt == 'LXC': + pool = { "MemoryPool" : {'InstanceID' : "MemoryPool/0"} } + rasd = { "MemoryPool" : "%s/mem" % test_dom } + else: + pool = { "MemoryPool" : {'InstanceID' : "MemoryPool/0"}, + "ProcessorPool" : {'InstanceID' : "ProcessorPool/0"}, + "DiskPool" : {'InstanceID' : diskid}, + "NetworkPool" : {'InstanceID' : "NetworkPool/%s" \ + % test_network }} + rasd = { "MemoryPool" : "%s/mem" % test_dom, + "ProcessorPool" : "%s/proc" % test_dom, + "DiskPool" : "%s/%s" %(test_dom, test_disk), + "NetworkPool" : "%s/%s" % (test_dom, test_mac) } + for k, v in pool.iteritems(): + status, inst = get_instance(options.ip, k, v, options.virt) + if status != PASS: + cleanup_restore(options.ip, options.virt) + vsxml.undefine(options.ip) + return status + + status = verify_rasd(options.ip, "ResourceAllocationFromPool", + k, options.virt, inst.InstanceID, + rasd) + if status != PASS: + cleanup_restore(options.ip, options.virt) + vsxml.undefine(options.ip) + return status + + + cleanup_restore(options.ip, options.virt) + vsxml.undefine(options.ip) return status

yunguol@cn.ibm.com wrote:
# HG changeset patch # User Guolian Yun <yunguol@cn.ibm.com> # Date 1214371183 -28800 # Node ID c8c27374e304a66cd71d1f0b5d0fc462e230a898 # Parent 727d97c09d77d73f3542ba49a9dd19ba119a67eb [TEST] Update RAFP.01 for LXC support
Can you keep the revision number in the subject next time around? Having the revision number makes it easier to keep track of which patch is the current version. Also, please include a log of what has changed for each iteration of the patch. Thanks!
+def verify_rasd(server, assoc_cn, cn, virt, list, rasd): + try: + data = assoc.AssociatorNames(server, + assoc_cn, + cn, + virt, + InstanceID=list) + except Exception: + logger.error(Globals.CIM_ERROR_ASSOCIATORNAMES % cn) + return FAIL + + if len(data) < 1: + logger.error("Return NULL, expect at least one instance") + return FAIL + + for i in range(0, len(data)): + if data[i].classname == "LXC_MemResourceAllocationSettingData" \ + and data[i]['InstanceID'] == rasd["MemoryPool"]: + logger.info("MemoryPool InstanceID match") + return PASS + elif i == len(data) and data[i]['InstanceID'] != rasd["MemoryPool"]: + logger.error("InstanceID Mismatch, expect %s not %s" % \ + (rasd['MemoryPool'], data[i]['InstanceID'])) + return FAIL + if data[i].classname == "LXC_ProcResourceAllocationSettingData" \ + and data[i]['InstanceID'] == rasd["ProcessorPool"]: + logger.info("ProcessorPool InstanceID match") + return PASS + elif i == len(data) and data[i]['InstanceID'] != rasd["ProcessorPool"]: + logger.error("InstanceID Mismatch, expect %s not %s" % \ + (rasd['ProcessorPool'], data[i]['InstanceID'])) + return FAIL + if data[i].classname == "LXC_DiskResourceAllocationSettingData" \ + and data[i]['InstanceID'] == rasd["DiskPool"]: + logger.info("DiskPool InstanceID match") + return PASS + elif i == len(data) and data[i]['InstanceID'] != rasd["DiskPool"]: + logger.error("InstanceID Mismatch, expect %s" % \ + (rasd['DiskPool'], data[i]['InstanceID'])) + return FAIL + if data[i].classname == "LXC_NetResourceAllocationSettingData" \ + and data[i]['InstanceID'] == rasd["NetworkPool"]: + logger.info("NetworkPool InstanceID match") + return PASS + elif i == len(data) and data[i]['InstanceID'] != rasd["NetworkPool"]: + logger.error("InstanceID Mismatch, expect %s" % \ + (rasd['NetworkPool'], data[i]['InstanceID'])) + return FAIL +
This is a lot of duplicated code and is difficult to read. Also, code like this can be difficult to maintain. This can be collapsed into something much simpler: for item in data: if item['InstanceID'] == rasd[cn]: logger.info("%s InstanceID match - expected %s, got %s" % (cn, rasd[cn], item['InstanceID'])) return PASS logger.error("RASD instance with InstanceID %s not found" % rasd[cn]) return FAIL
+ for k, v in pool.iteritems(): + status, inst = get_instance(options.ip, k, v, options.virt) + if status != PASS: + cleanup_restore(options.ip, options.virt) + vsxml.undefine(options.ip) + return status
Instead of duplicating the cleanup code here, you can use break instead. That will drop you out of the for loop, and the rest of the code will execute normally.
+ + status = verify_rasd(options.ip, "ResourceAllocationFromPool", + k, options.virt, inst.InstanceID, + rasd) + if status != PASS: + cleanup_restore(options.ip, options.virt) + vsxml.undefine(options.ip) + return status
Same here - use break instead.
+ + + cleanup_restore(options.ip, options.virt) + vsxml.undefine(options.ip) return status
-- Kaitlin Rupert IBM Linux Technology Center kaitlin@linux.vnet.ibm.com

libvirt-cim-bounces@redhat.com wrote on 2008-06-25 22:37:55:
yunguol@cn.ibm.com wrote:
# HG changeset patch # User Guolian Yun <yunguol@cn.ibm.com> # Date 1214371183 -28800 # Node ID c8c27374e304a66cd71d1f0b5d0fc462e230a898 # Parent 727d97c09d77d73f3542ba49a9dd19ba119a67eb [TEST] Update RAFP.01 for LXC support
Can you keep the revision number in the subject next time around? Having the revision number makes it easier to keep track of which patch is the current version.
Also, please include a log of what has changed for each iteration of the
patch.
Sure. I will keep the revision number and log the changes for each patch. Thanks a lot for your great comments during the iteration of RAFP.01 patch. Hopefully, the latest #7 revision works well.
Thanks!
+def verify_rasd(server, assoc_cn, cn, virt, list, rasd): + try: + data = assoc.AssociatorNames(server, + assoc_cn, + cn, + virt, + InstanceID=list) + except Exception: + logger.error(Globals.CIM_ERROR_ASSOCIATORNAMES % cn) + return FAIL + + if len(data) < 1: + logger.error("Return NULL, expect at least one instance") + return FAIL + + for i in range(0, len(data)): + if data[i].classname == "LXC_MemResourceAllocationSettingData" \ + and data[i]['InstanceID'] == rasd["MemoryPool"]: + logger.info("MemoryPool InstanceID match") + return PASS + elif i == len(data) and data[i]['InstanceID'] != rasd["MemoryPool"]: + logger.error("InstanceID Mismatch, expect %s not %s" % \ + (rasd['MemoryPool'], data[i]['InstanceID'])) + return FAIL + if data[i].classname == "LXC_ProcResourceAllocationSettingData" \ + and data[i]['InstanceID'] == rasd["ProcessorPool"]: + logger.info("ProcessorPool InstanceID match") + return PASS + elif i == len(data) and data[i]['InstanceID'] != rasd["ProcessorPool"]: + logger.error("InstanceID Mismatch, expect %s not %s" % \ + (rasd['ProcessorPool'], data[i]['InstanceID'])) + return FAIL + if data[i].classname == "LXC_DiskResourceAllocationSettingData" \ + and data[i]['InstanceID'] == rasd["DiskPool"]: + logger.info("DiskPool InstanceID match") + return PASS + elif i == len(data) and data[i]['InstanceID'] != rasd["DiskPool"]: + logger.error("InstanceID Mismatch, expect %s" % \ + (rasd['DiskPool'], data[i]['InstanceID'])) + return FAIL + if data[i].classname == "LXC_NetResourceAllocationSettingData" \ + and data[i]['InstanceID'] == rasd["NetworkPool"]: + logger.info("NetworkPool InstanceID match") + return PASS + elif i == len(data) and data[i]['InstanceID'] != rasd["NetworkPool"]: + logger.error("InstanceID Mismatch, expect %s" % \ + (rasd['NetworkPool'], data[i]['InstanceID'])) + return FAIL +
This is a lot of duplicated code and is difficult to read. Also, code like this can be difficult to maintain. This can be collapsed into something much simpler:
for item in data: if item['InstanceID'] == rasd[cn]: logger.info("%s InstanceID match - expected %s, got %s"
% (cn, rasd[cn], item['InstanceID'])) return PASS
logger.error("RASD instance with InstanceID %s not found" % rasd[cn])
return FAIL
+ for k, v in pool.iteritems(): + status, inst = get_instance(options.ip, k, v, options.virt) + if status != PASS: + cleanup_restore(options.ip, options.virt) + vsxml.undefine(options.ip) + return status
Instead of duplicating the cleanup code here, you can use break instead.
That will drop you out of the for loop, and the rest of the code will execute normally.
+ + status = verify_rasd(options.ip, "ResourceAllocationFromPool", + k, options.virt, inst.InstanceID, + rasd) + if status != PASS: + cleanup_restore(options.ip, options.virt) + vsxml.undefine(options.ip) + return status
Same here - use break instead.
+ + + cleanup_restore(options.ip, options.virt) + vsxml.undefine(options.ip) return status
-- Kaitlin Rupert IBM Linux Technology Center kaitlin@linux.vnet.ibm.com
_______________________________________________ Libvirt-cim mailing list Libvirt-cim@redhat.com https://www.redhat.com/mailman/listinfo/libvirt-cim
participants (3)
-
Guo Lian Yun
-
Kaitlin Rupert
-
yunguol@cn.ibm.com