
Any comments on this patch ? Deepti B. Kalakeri wrote:
# HG changeset patch # User Deepti B. Kalakeri <deeptik@linux.vnet.ibm.com> # Date 1210164893 25200 # Node ID adcbedf23f1d58e809fb4d91d6c40f83f21b776c # Parent 88d20825a9ba6dd3d070e02f698a7846b7e3a2c8 [TEST] #2 Updating 01_forward.py of SDC to support XenFV, KVM.
1) To make use of the lib fn conf_file(), cleanup_restore() and create_diskpool_file(). 2) To use the lib fn print_field_error. 3) To retain the PropertyPolicy, ValueRole, ValueRange depending on the revision no. 4) Tested on rpm based libvirt-cim KVM machine, latest libvirt-cim for KVM and Xen, XenFV.
Signed-off-by: Deepti B. Kalakeri <deeptik@linux.vnet.ibm.com>
diff -r 88d20825a9ba -r adcbedf23f1d suites/libvirt-cim/cimtest/SettingsDefineCapabilities/01_forward.py --- a/suites/libvirt-cim/cimtest/SettingsDefineCapabilities/01_forward.py Wed May 07 05:34:23 2008 -0700 +++ b/suites/libvirt-cim/cimtest/SettingsDefineCapabilities/01_forward.py Wed May 07 05:54:53 2008 -0700 @@ -55,135 +55,86 @@ import sys import sys import os from distutils.file_util import move_file -from VirtLib import utils from XenKvmLib import assoc from XenKvmLib import enumclass -from CimTest import Globals -from CimTest.Globals import do_main from XenKvmLib.test_xml import netxml from XenKvmLib.test_doms import create_vnet from VirtLib.live import net_list from CimTest.ReturnCodes import PASS, FAIL, SKIP +from CimTest.Globals import do_main, platform_sup, logger, \ +CIM_ERROR_GETINSTANCE, CIM_ERROR_ASSOCIATORS +from XenKvmLib.classes import get_typed_class +from XenKvmLib.common_util import cleanup_restore, test_dpath, \ +create_diskpool_file +from XenKvmLib.common_util import print_field_error +from XenKvmLib.const import CIM_REV
-sup_types = ['Xen'] - -status = PASS -test_dpath = "foo" -disk_file = '/tmp/diskpool.conf' -back_disk_file = disk_file + "." + "SSDC_01_forward" diskid = "%s/%s" % ("DiskPool", test_dpath) memid = "%s/%s" % ("MemoryPool", 0) procid = "%s/%s" % ("ProcessorPool", 0) +libvirtcim_rev = 571
-def conf_file(): + +def get_or_bail(virt, ip, id, pool_class): """ - Creating diskpool.conf file. - """ - try: - f = open(disk_file, 'w') - f.write('%s %s' % (test_dpath, '/')) - f.close() - except Exception,detail: - Globals.logger.error("Exception: %s", detail) - status = SKIP - sys.exit(status) - -def clean_up_restore(): - """ - Restoring back the original diskpool.conf - file. - """ - try: - if os.path.exists(back_disk_file): - os.remove(disk_file) - move_file(back_disk_file, disk_file) - except Exception, detail: - Globals.logger.error("Exception: %s", detail) - status = SKIP - sys.exit(status) - - -def get_or_bail(ip, id, pool_class): - """ - Getinstance for the CLass and return instance on success, otherwise + Getinstance for the Class and return instance on success, otherwise exit after cleanup_restore . """ key_list = { 'InstanceID' : id } - try: - instance = enumclass.getInstance(ip, pool_class, key_list) + instance = enumclass.getInstance(ip, pool_class, key_list, virt) except Exception, detail: - Globals.logger.error(Globals.CIM_ERROR_GETINSTANCE, '%s' % pool_class) - Globals.logger.error("Exception: %s", detail) - clean_up_restore() - status = FAIL - sys.exit(status) + logger.error(CIM_ERROR_GETINSTANCE, '%s' % pool_class) + logger.error("Exception: %s", detail) + cleanup_restore() + sys.exit(FAIL) return instance
-def init_list(disk, mem, net, proc): +def init_list(virt, dpool, npool, mpool, ppool): """ Creating the lists that will be used for comparisons. """
instlist = [ - disk.InstanceID, \ - mem.InstanceID, \ - net.InstanceID, \ - proc.InstanceID - ] + dpool.InstanceID, + mpool.InstanceID, + npool.InstanceID, + ppool.InstanceID + ] cllist = [ - "Xen_DiskResourceAllocationSettingData", \ - "Xen_MemResourceAllocationSettingData", \ - "Xen_NetResourceAllocationSettingData", \ - "Xen_ProcResourceAllocationSettingData" + get_typed_class(virt, "DiskResourceAllocationSettingData"), + get_typed_class(virt, "MemResourceAllocationSettingData"), + get_typed_class(virt, "NetResourceAllocationSettingData"), + get_typed_class(virt, "ProcResourceAllocationSettingData") ] rtype = { - "Xen_DiskResourceAllocationSettingData" : 17, \ - "Xen_MemResourceAllocationSettingData" : 4, \ - "Xen_NetResourceAllocationSettingData" : 10, \ - "Xen_ProcResourceAllocationSettingData" : 3 + get_typed_class(virt, "DiskResourceAllocationSettingData") : 17, + get_typed_class(virt, "MemResourceAllocationSettingData") : 4, + get_typed_class(virt, "NetResourceAllocationSettingData") : 10, + get_typed_class(virt, "ProcResourceAllocationSettingData") : 3 } rangelist = { - "Default" : 0, \ - "Minimum" : 1, \ - "Maximum" : 2, \ + "Default" : 0, + "Minimum" : 1, + "Maximum" : 2, "Increment" : 3 } return instlist, cllist, rtype, rangelist
+def get_pool_info(virt, server, devid, poolname=""): + pool_cname = get_typed_class(virt, poolname) + pool_cn = eval("enumclass." + pool_cname) + return get_or_bail(virt, server, id=devid, pool_class=pool_cn)
-def print_error(index, fieldname, assoc_info, exp_value): - ret_value = assoc_info[index][fieldname] - Globals.logger.error("%s Mismatch", fieldname) - Globals.logger.error("Returned %s instead of %s", ret_value, exp_value) +def get_pool_details(virt, server): + dpool = npool = mpool = ppool = None + try : + dpool = get_pool_info(virt, server, diskid, poolname="DiskPool") + mpool = get_pool_info(virt, server, memid, poolname= "MemoryPool") + ppool = get_pool_info(virt, server, procid, poolname= "ProcessorPool")
- -@do_main(sup_types) -def main(): - options = main.options - global status - - cn = 'Xen_AllocationCapabilities' - loop = 0 - server = options.ip - - # Taking care of already existing diskconf file - # Creating diskpool.conf if it does not exist - # Otherwise backing up the prev file and create new one. - os.system("rm -f %s" % back_disk_file ) - if not (os.path.exists(disk_file)): - conf_file() - else: - move_file(disk_file, back_disk_file) - conf_file() - - try : - disk = get_or_bail(server, id=diskid, \ - pool_class=enumclass.Xen_DiskPool) - mem = get_or_bail(server, id = memid, \ - pool_class=enumclass.Xen_MemoryPool) - vir_network = net_list(server) + vir_network = net_list(server, virt) if len(vir_network) > 0: test_network = vir_network[0] else: @@ -192,68 +143,102 @@ def main(): net_xml, bridge = netxml(server, bridgename, test_network) ret = create_vnet(server, net_xml) if not ret: - Globals.logger.error("Failed to create the Virtual Network '%s'", \ - test_network) - return SKIP + logger.error("Failed to create Virtual Network '%s'", + test_network) + return SKIP, dpool, npool, mpool, ppool + netid = "%s/%s" % ("NetworkPool", test_network) - net = get_or_bail(server, id = netid, \ - pool_class=enumclass.Xen_NetworkPool) - proc = get_or_bail(server, id = procid, \ - pool_class=enumclass.Xen_ProcessorPool) + npool = get_pool_info(virt, server, netid, poolname= "NetworkPool")
except Exception, detail: - Globals.logger.error("Exception: %s", detail) - clean_up_restore() - status = FAIL - return status + logger.error("Exception: %s", detail) + return FAIL, dpool, npool, mpool, ppool
- instlist, cllist, rtype, rangelist = init_list(disk, mem, net, proc ) + return PASS, dpool, npool, mpool, ppool
+def verify_rasd_fields(loop, assoc_info, cllist, rtype, rangelist): + for inst in assoc_info: + if inst.classname != cllist[loop]: + print_field_error("Classname", inst.classname, cllist[loop]) + return FAIL + if inst['ResourceType'] != rtype[cllist[loop]]: + print_field_error("ResourceType", inst['ResourceType'], + rtype[cllist[loop]]) + return FAIL + + # The following properties have been removed in the patchset 571 + # but is present in the rpm libvirt-cim and hence retained it. + + if CIM_REV < libvirtcim_rev: + ppolicy = inst['PropertyPolicy'] + if ppolicy != 0 and ppolicy != 1: + print_field_error("PropertyPolicy", inst['PropertyPolicy'], + ppolicy) + return FAIL + + vrole = inst['ValueRole'] + if vrole < 0 or vrole > 4: + print_field_error("ValueRole", inst['ValueRole'], vrole) + return FAIL + + insid = inst['InstanceID'] + vrange = rangelist[insid] + if vrange != inst['ValueRange']: + print_field_error("ValueRange", inst['ValueRange'], vrange) + return FAIL + + return PASS + +def verify_sdc_with_ac(virt, server, dpool, npool, mpool, ppool): + loop = 0 + instlist, cllist, rtype, rangelist = init_list(virt, dpool, npool, mpool, + ppool) + assoc_cname = get_typed_class(virt, "SettingsDefineCapabilities") + cn = get_typed_class(virt, "AllocationCapabilities") for instid in sorted(instlist): try: - assoc_info = assoc.Associators(options.ip, \ - "Xen_SettingsDefineCapabilities", - cn, - InstanceID = instid) + assoc_info = assoc.Associators(server, assoc_cname, cn, + InstanceID = instid, virt=virt) if len(assoc_info) != 4: - Globals.logger.error("Xen_SettingsDefineCapabilities returned \ -%i ResourcePool objects instead 4", len(assoc_info)) + logger.error("%s returned %i ResourcePool objects" + "instead 4", assoc_cname, len(assoc_info)) status = FAIL break - for i in range(len(assoc_info)): - if assoc_info[i].classname != cllist[loop]: - print_error(i, "Classname", assoc_info, cllist[loop]) - status = FAIL - if assoc_info[i]['ResourceType'] != rtype[cllist[loop]]: - print_error(i, "ResourceType", assoc_info, rtype[cllist[loop]]) - status = FAIL - ppolicy = assoc_info[i]['PropertyPolicy'] - if ppolicy != 0 and ppolicy != 1: - print_error(i, "PropertyPolicy", assoc_info, ppolicy) - status = FAIL - vrole = assoc_info[i]['ValueRole'] - if vrole < 0 or vrole > 4: - print_error(i, "ValueRole", assoc_info, vrole) - status = FAIL - insid = assoc_info[i]['InstanceID'] - vrange = rangelist[insid] - if vrange != assoc_info[i]['ValueRange']: - print_error(i, "ValueRange", assoc_info, vrange) - status = FAIL - if status != 0: - break - if status != 0: + + status = verify_rasd_fields(loop, assoc_info, cllist, rtype, + rangelist) + if status != PASS: break else: loop = loop + 1 + except Exception, detail: - Globals.logger.error(Globals.CIM_ERROR_ASSOCIATORS, \ - 'Xen_SettingsDefineCapabilities') - Globals.logger.error("Exception: %s", detail) - clean_up_restore() + logger.error(CIM_ERROR_ASSOCIATORS, assoc_cname) + logger.error("Exception: %s", detail) status = FAIL
- clean_up_restore() + return status + +@do_main(platform_sup) +def main(): + options = main.options + + server = options.ip + virt = options.virt + + # Verify DiskPool on machine + status = create_diskpool_file() + if status != PASS: + return status + + status, dpool, npool, mpool, ppool = get_pool_details(virt, server) + if status != PASS or dpool.InstanceID == None or mpool.InstanceID == None \ + or npool.InstanceID == None or ppool.InstanceID == None: + cleanup_restore() + return FAIL + + status = verify_sdc_with_ac(virt, server, dpool, npool, mpool, ppool) + cleanup_restore() return status
if __name__ == "__main__":
_______________________________________________ Libvirt-cim mailing list Libvirt-cim@redhat.com https://www.redhat.com/mailman/listinfo/libvirt-cim