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