# HG changeset patch
# User Guolian Yun <yunguol(a)cn.ibm.com>
# Date 1208758684 25200
# Node ID f9c5b8d69e259c572d2302203aef0e7a192b3659
# Parent c5d39cec5989977b3c2bff149044b8d005272ea4
[TEST] Add ElementAllocatedFromPool.01 for XenFV & KVM support
Signed-off-by: Guolian Yun <yunguol(a)cn.ibm.com>
diff -r c5d39cec5989 -r f9c5b8d69e25
suites/libvirt-cim/cimtest/ElementAllocatedFromPool/01_forward.py
--- a/suites/libvirt-cim/cimtest/ElementAllocatedFromPool/01_forward.py Sun Apr 20
23:15:37 2008 -0700
+++ b/suites/libvirt-cim/cimtest/ElementAllocatedFromPool/01_forward.py Sun Apr 20
23:18:04 2008 -0700
@@ -21,56 +21,89 @@
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#
-# This tc is used to verify the classname, InstanceID are
-# appropriately set for a given of the domains when verified using the
+# This tc is used to verify the classname, InstanceID are
+# appropriately set for a given of the domains when verified using the
# Xen_ElementAllocatedFromPool asscoiation.
#
# Example command for LogicalDisk w.r.t to Xen_ElementAllocatedFromPool \
# asscoiation :
#
-# wbemcli ain -ac Xen_ElementAllocatedFromPool
+# wbemcli ain -ac Xen_ElementAllocatedFromPool
# 'http://localhost:5988/root/virt:
# Xen_LogicalDisk.CreationClassName="Xen_LogicalDisk",\
#
DeviceID="hd_domain/xvda",SystemCreationClassName="",SystemName="hd_domain"'
-#
+#
# Output:
# localhost:5988/root/virt:Xen_DiskPool.InstanceID="DiskPool/foo"
-#
+#
# Similarly we check for Memory,Network,Processor.
#
# Date : 26-11-2007
import sys
import pywbem
+import os
+from distutils.file_util import move_file
from XenKvmLib.test_xml import testxml, testxml_bridge
from VirtLib import utils
from XenKvmLib import assoc
-from XenKvmLib.test_doms import test_domain_function, destroy_and_undefine_all
+from XenKvmLib.test_doms import destroy_and_undefine_all
from XenKvmLib import devices
+from XenKvmLib import vxml
+from XenKvmLib.classes import get_typed_class
from CimTest import Globals
from CimTest.Globals import do_main
from VirtLib.live import network_by_bridge
from CimTest.ReturnCodes import PASS, FAIL, SKIP
-sup_types = ['Xen']
+sup_types = ['Xen', 'XenFV', 'KVM']
test_dom = "hd_domain"
test_mac = "00:11:22:33:44:aa"
-test_vcpus = 1
-test_disk = 'xvda'
-
+test_vcpus = 1
+test_dpath = "foo"
+disk_file = '/tmp/diskpool.conf'
+back_disk_file = disk_file + "." + "01_forward"
+
+def conf_file():
+ """
+ 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 print_error(cn, detail):
Globals.logger.error(Globals.CIM_ERROR_GETINSTANCE, cn)
Globals.logger.error("Exception: %s", detail)
-def get_keys(cn, device_id):
+def get_keys(cn, device_id, virt='Xen'):
id = "%s/%s" % (test_dom, device_id)
+ cs = get_typed_class(virt, "ComputerSystem")
key_list = { 'DeviceID' : id,
'CreationClassName' : cn,
'SystemName' : test_dom,
- 'SystemCreationClassName' : "Xen_ComputerSystem"
+ 'SystemCreationClassName' : cs
}
return key_list
@@ -85,93 +118,104 @@ def main():
destroy_and_undefine_all(options.ip)
Globals.log_param()
- test_xml, bridge = testxml_bridge(test_dom, vcpus = test_vcpus, \
- mac = test_mac, disk = test_disk, \
- server = options.ip)
+ 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()
+
+ if options.virt == 'Xen':
+ test_disk = 'xvda'
+ else:
+ test_disk = 'hda'
+
+ virt_xml = vxml.get_class(options.virt)
+ cxml = virt_xml(test_dom, vcpus = test_vcpus, mac = test_mac, disk = test_disk)
+ bridge = cxml.set_vbridge(options.ip)
+
if bridge == None:
Globals.logger.error("Unable to find virtual bridge")
- return SKIP
-
- if test_xml == None:
- Globals.logger.error("Guest xml not created properly")
- return FAIL
-
- virt_network = network_by_bridge(bridge, options.ip)
+ return SKIP
+
+ virt_network = network_by_bridge(bridge, options.ip, options.virt)
if virt_network == None:
Globals.logger.error("No virtual network found for bridge %s", bridge)
- return SKIP
-
- ret = test_domain_function(test_xml, options.ip, cmd = "create")
+ return SKIP
+
+ ret = cxml.define(options.ip)
if not ret:
- Globals.logger.error("Failed to Create the dom: %s", test_dom)
- return FAIL
-
- try:
- cn = "Xen_LogicalDisk"
- key_list = get_keys(cn, test_disk)
- disk = devices.Xen_LogicalDisk(options.ip, key_list)
- except Exception,detail:
- print_error(cn, detail)
- return FAIL
-
- try:
- cn = "Xen_Memory"
- key_list = get_keys(cn, "mem")
- mem = devices.Xen_Memory(options.ip, key_list)
- except Exception,detail:
- print_error(cn, detail)
- return FAIL
-
- try:
- cn = "Xen_NetworkPort"
- key_list = get_keys(cn, test_mac)
- net = devices.Xen_NetworkPort(options.ip, key_list)
- except Exception,detail:
- print_error(cn, detail)
- return FAIL
-
- try:
- cn = "Xen_Processor"
- key_list = get_keys(cn, "0")
- proc = devices.Xen_Processor(options.ip, key_list)
+ Globals.logger.error('Unable to create domain %s' % test_dom)
+ return FAIL
+
+ disk_cn = get_typed_class(options.virt, "LogicalDisk")
+ mem_cn = get_typed_class(options.virt, "Memory")
+ net_cn = get_typed_class(options.virt, "NetworkPort")
+ proc_cn = get_typed_class(options.virt, "Processor")
+
+ try:
+ key_list = get_keys(disk_cn, test_disk, options.virt)
+ disk = eval('devices.' + disk_cn)(options.ip, key_list)
+ except Exception,detail:
+ print_error(cn, detail)
+ return FAIL
+
+ try:
+ key_list = get_keys(mem_cn, "mem", options.virt)
+ mem = eval('devices.' + mem_cn)(options.ip, key_list)
+ except Exception,detail:
+ print_error(cn, detail)
+ return FAIL
+
+ try:
+ key_list = get_keys(net_cn, test_mac, options.virt)
+ net = eval('devices.' + net_cn)(options.ip, key_list)
+ except Exception,detail:
+ print_error(cn, detail)
+ return FAIL
+
+ try:
+ key_list = get_keys(proc_cn, "0", options.virt)
+ proc = eval('devices.' + proc_cn)(options.ip, key_list)
except Exception,detail:
print_error(cn, detail)
return FAIL
netpool_id = "NetworkPool/%s" % virt_network
-
+ diskpool_id = "DiskPool/%s" % test_dpath
lelist = {
- "Xen_LogicalDisk" : disk.DeviceID, \
- "Xen_Memory" : mem.DeviceID, \
- "Xen_NetworkPort" : net.DeviceID, \
- "Xen_Processor" : proc.DeviceID
+ disk_cn : disk.DeviceID, \
+ mem_cn : mem.DeviceID, \
+ net_cn : net.DeviceID, \
+ proc_cn : proc.DeviceID
}
- poollist = [
- "Xen_DiskPool", \
- "Xen_MemoryPool", \
- "Xen_NetworkPool", \
- "Xen_ProcessorPool"
+ poollist = [
+ get_typed_class(options.virt, "DiskPool"), \
+ get_typed_class(options.virt, "MemoryPool"), \
+ get_typed_class(options.virt, "NetworkPool"), \
+ get_typed_class(options.virt, "ProcessorPool")
]
- poolval = [
- "DiskPool/foo", \
+ poolval = [
+ diskpool_id, \
"MemoryPool/0", \
netpool_id, \
"ProcessorPool/0"
]
- sccn = "Xen_ComputerSystem"
+ sccn = get_typed_class(options.virt, "ComputerSystem")
for cn, devid in sorted(lelist.items()):
try:
assoc_info = assoc.Associators(options.ip, \
- "Xen_ElementAllocatedFromPool",
+ "ElementAllocatedFromPool",
cn,
+ options.virt,
DeviceID = devid,
CreationClassName = cn,
SystemName = test_dom,
SystemCreationClassName = sccn)
if len(assoc_info) != 1:
- Globals.logger.error("Xen_ElementAllocatedFromPool returned %i\
- ResourcePool objects for domain '%s'", len(assoc_info), test_dom)
+ Globals.logger.error("ElementAllocatedFromPool returned %i
ResourcePool \
+ objects for domain '%s'",
len(assoc_info), test_dom)
status = FAIL
break
@@ -181,8 +225,8 @@ def main():
assoc_info[0].classname, \
poollist[idx])
status = FAIL
-
- if assoc_info[0]['InstanceID'] != poolval[idx]:
+
+ if assoc_info[0]['InstanceID'] != poolval[idx]:
Globals.logger.error("InstanceID Mismatch")
Globals.logger.error("Returned %s instead of %s", \
assoc_info[0]['InstanceID'], \
@@ -196,13 +240,15 @@ def main():
except Exception, detail:
Globals.logger.error(Globals.CIM_ERROR_ASSOCIATORS, \
- 'Xen_ElementAllocatedFromPool')
+ 'ElementAllocatedFromPool')
Globals.logger.error("Exception: %s", detail)
status = FAIL
- ret = test_domain_function(test_dom, options.ip, \
- cmd = "destroy")
+ cxml.destroy(options.ip)
+ cxml.undefine(options.ip)
+ clean_up_restore()
+
return status
-
+
if __name__ == "__main__":
sys.exit(main())