[Libvirt-cim] [PATCH] [TEST] #2 Updating 01_forward.py of SDC to support XenFV, KVM

Deepti B. Kalakeri deeptik at linux.vnet.ibm.com
Wed May 7 12:56:35 UTC 2008


# HG changeset patch
# User Deepti B. Kalakeri <deeptik at 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 at 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")
 
-
- at 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
+
+ at 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__":




More information about the Libvirt-cim mailing list