
The test domains are now defined with a ConsoleRASD if the tested libvirt-cim does support those. A few testcases had to be adjusted to properly handle the newly encountered instances and associations. Signed-off-by: Viktor Mihajlovski <mihajlov@linux.vnet.ibm.com> --- .../cimtest/ElementSettingData/01_forward.py | 5 ++- .../cimtest/HostSystem/02_hostsystem_to_rasd.py | 2 ++ .../ResourceAllocationFromPool/01_forward.py | 3 ++ .../ResourceAllocationFromPool/02_reverse.py | 3 ++ .../libvirt-cim/cimtest/SystemDevice/01_forward.py | 5 +++ suites/libvirt-cim/cimtest/VSSD/04_vssd_to_rasd.py | 11 ++++-- .../02_reverse.py | 9 +++-- suites/libvirt-cim/lib/XenKvmLib/devices.py | 6 ++++ suites/libvirt-cim/lib/XenKvmLib/rasd.py | 21 ++++++++++- suites/libvirt-cim/lib/XenKvmLib/vsms.py | 35 ++++++++++++++++++ suites/libvirt-cim/lib/XenKvmLib/vxml.py | 38 ++++++++++++++------ 11 files changed, 122 insertions(+), 16 deletions(-) diff --git a/suites/libvirt-cim/cimtest/ElementSettingData/01_forward.py b/suites/libvirt-cim/cimtest/ElementSettingData/01_forward.py index 8c2a556..8b57b8f 100755 --- a/suites/libvirt-cim/cimtest/ElementSettingData/01_forward.py +++ b/suites/libvirt-cim/cimtest/ElementSettingData/01_forward.py @@ -59,6 +59,7 @@ from XenKvmLib.const import do_main, get_provider_version sup_types = ['Xen', 'XenFV', 'KVM', 'LXC'] input_graphics_pool_rev = 757 +console_rev = 1276 test_dom = "esd_dom" vmac = "00:11:22:33:44:aa" @@ -148,7 +149,9 @@ def main(): if curr_cim_rev >= input_graphics_pool_rev: keys['InputResourceAllocationSettingData'] = input_device keys['GraphicsResourceAllocationSettingData'] = "%s/vnc" % test_dom - + if curr_cim_rev >= console_rev: + keys['ConsoleResourceAllocationSettingData'] = "%s/charconsole:0" % test_dom + ret = cxml.cim_define(options.ip) if not ret: logger.error("Failed to define the dom: %s", test_dom) diff --git a/suites/libvirt-cim/cimtest/HostSystem/02_hostsystem_to_rasd.py b/suites/libvirt-cim/cimtest/HostSystem/02_hostsystem_to_rasd.py index fe0f2cc..78433e7 100644 --- a/suites/libvirt-cim/cimtest/HostSystem/02_hostsystem_to_rasd.py +++ b/suites/libvirt-cim/cimtest/HostSystem/02_hostsystem_to_rasd.py @@ -182,6 +182,8 @@ def verify_RASD_values(server, sd_assoc_info, vsxml, virt="Xen"): status = verify_memrasd_values(assoc_info[index], rasd) elif 'GraphicsResourceAllocationSettingData' in CCName: status = verify_displayrasd_values(assoc_info[index], rasd) + elif 'ConsoleResourceAllocationSettingData' in CCName: + status = verify_displayrasd_values(assoc_info[index], rasd) elif 'InputResourceAllocationSettingData' in CCName: status = verify_inputrasd_values(assoc_info[index], rasd) if status != PASS and virt == 'LXC': diff --git a/suites/libvirt-cim/cimtest/ResourceAllocationFromPool/01_forward.py b/suites/libvirt-cim/cimtest/ResourceAllocationFromPool/01_forward.py index a7d9c35..ec47c44 100644 --- a/suites/libvirt-cim/cimtest/ResourceAllocationFromPool/01_forward.py +++ b/suites/libvirt-cim/cimtest/ResourceAllocationFromPool/01_forward.py @@ -75,6 +75,9 @@ def init_rasd_list(virt, ip, guest_name): logger.error("Enum RASDs failed") return rasd_insts, status + if rasds.has_key(get_typed_class(virt, 'ConsoleResourceAllocationSettingData')): + del rasds[get_typed_class(virt, 'ConsoleResourceAllocationSettingData')] + for rasd_cn, rasd_list in rasds.iteritems(): if virt == "LXC" and rasd_cn == disk_rasd_cn: continue diff --git a/suites/libvirt-cim/cimtest/ResourceAllocationFromPool/02_reverse.py b/suites/libvirt-cim/cimtest/ResourceAllocationFromPool/02_reverse.py index bef114d..430d33f 100644 --- a/suites/libvirt-cim/cimtest/ResourceAllocationFromPool/02_reverse.py +++ b/suites/libvirt-cim/cimtest/ResourceAllocationFromPool/02_reverse.py @@ -171,6 +171,9 @@ def main(): if status != PASS: raise Exception("Unable to build pool instance list") + if rasds.has_key(get_typed_class(options.virt, 'ConsoleResourceAllocationSettingData')): + del rasds[get_typed_class(options.virt, 'ConsoleResourceAllocationSettingData')] + if len(rasds) != len(pools): raise Exception("%d RASD insts != %d pool insts" % (len(rasds), len(pools))) diff --git a/suites/libvirt-cim/cimtest/SystemDevice/01_forward.py b/suites/libvirt-cim/cimtest/SystemDevice/01_forward.py index 15a4ff5..f956621 100644 --- a/suites/libvirt-cim/cimtest/SystemDevice/01_forward.py +++ b/suites/libvirt-cim/cimtest/SystemDevice/01_forward.py @@ -36,6 +36,7 @@ from CimTest.ReturnCodes import PASS, FAIL sup_types = ['Xen', 'KVM', 'XenFV', 'LXC'] input_graphics_pool_rev = 757 +console_dev_rev = 1276 test_dom = "test_domain" test_mac = "00:11:22:33:44:55" @@ -120,6 +121,10 @@ def main(): graphics_cn = get_typed_class(virt, "DisplayController") exp_pllist[graphics_cn] = ['%s/vnc' % test_dom] + if curr_cim_rev >= console_dev_rev: + console_cn = get_typed_class(virt, "ConsoleDisplayController") + exp_pllist[console_cn] = ['%s/charconsole:0' % test_dom] + try: res_pllist = {} diff --git a/suites/libvirt-cim/cimtest/VSSD/04_vssd_to_rasd.py b/suites/libvirt-cim/cimtest/VSSD/04_vssd_to_rasd.py index 04b0b6e..bdd91a8 100755 --- a/suites/libvirt-cim/cimtest/VSSD/04_vssd_to_rasd.py +++ b/suites/libvirt-cim/cimtest/VSSD/04_vssd_to_rasd.py @@ -54,7 +54,7 @@ from XenKvmLib.classes import get_typed_class from XenKvmLib import rasd from XenKvmLib.rasd import verify_procrasd_values, verify_netrasd_values, \ verify_diskrasd_values, verify_memrasd_values, verify_displayrasd_values, \ -rasd_init_list, verify_inputrasd_values +rasd_init_list, verify_inputrasd_values, verify_consolerasd_values from XenKvmLib.const import default_network_name libvirt_bug = "00009" @@ -173,6 +173,10 @@ def verify_rasd_values(rasd_values_info, server): memrasd = rasd_values_list['%s' %in_list['mem']] displayrasd = rasd_values_list['%s' %in_list['display']] inputrasd = rasd_values_list['%s' %in_list['point']] + if 'console' in in_list: + consolerasd = rasd_values_list['%s' %in_list['console']] + else: + consolerasd = [] try: for rasd_instance in rasd_values_info: @@ -186,7 +190,10 @@ def verify_rasd_values(rasd_values_info, server): elif 'MemResourceAllocationSettingData' in CCName : status = verify_memrasd_values(rasd_instance, memrasd) elif 'GraphicsResourceAllocationSettingData' in CCName : - status = verify_displayrasd_values(rasd_instance, displayrasd) + if not 'console' in rasd_instance['InstanceID']: + status = verify_displayrasd_values(rasd_instance, displayrasd) + elif 'ConsoleResourceAllocationSettingData' in CCName : + status = verify_consolerasd_values(rasd_instance, consolerasd) elif 'InputResourceAllocationSettingData' in CCName: status = verify_inputrasd_values(rasd_instance, inputrasd) if status != PASS and virt== 'LXC': diff --git a/suites/libvirt-cim/cimtest/VirtualSystemSettingDataComponent/02_reverse.py b/suites/libvirt-cim/cimtest/VirtualSystemSettingDataComponent/02_reverse.py index 3a13b2a..24e8440 100644 --- a/suites/libvirt-cim/cimtest/VirtualSystemSettingDataComponent/02_reverse.py +++ b/suites/libvirt-cim/cimtest/VirtualSystemSettingDataComponent/02_reverse.py @@ -95,7 +95,8 @@ def assoc_values(ip, assoc_info, virt="Xen"): "disk_rasd" : '%s/%s' %(test_dom, test_disk), "mem_rasd" : '%s/%s' %(test_dom, "mem"), "input_rasd": '%s/%s' %(test_dom, input_device), - "grap_rasd" : '%s/%s' %(test_dom, "vnc") + "grap_rasd" : '%s/%s' %(test_dom, "vnc"), + "cons_rasd" : '%s/%s' %(test_dom, "charconsole:0") } @@ -110,6 +111,7 @@ def assoc_values(ip, assoc_info, virt="Xen"): mem_cn = get_typed_class(virt, 'MemResourceAllocationSettingData') input_cn = get_typed_class(virt, 'InputResourceAllocationSettingData') grap_cn = get_typed_class(virt, 'GraphicsResourceAllocationSettingData') + cons_cn = get_typed_class(virt, 'ConsoleResourceAllocationSettingData') for inst in assoc_info: if inst.classname == proc_cn: @@ -132,8 +134,11 @@ def assoc_values(ip, assoc_info, virt="Xen"): elif inst.classname == grap_cn: status = check_rasd_values(inst['InstanceID'], rasd_list['grap_rasd']) + elif inst.classname == cons_cn: + status = check_rasd_values(inst['InstanceID'], + rasd_list['cons_rasd']) else: - logger.error("Unexpected RASD instance type" ) + logger.error("Unexpected RASD instance type %s", inst.classname ) status = FAIL if status == FAIL: diff --git a/suites/libvirt-cim/lib/XenKvmLib/devices.py b/suites/libvirt-cim/lib/XenKvmLib/devices.py index 0ddccbb..275acad 100755 --- a/suites/libvirt-cim/lib/XenKvmLib/devices.py +++ b/suites/libvirt-cim/lib/XenKvmLib/devices.py @@ -33,6 +33,7 @@ from XenKvmLib.enumclass import EnumInstances graphics_dev_rev = 725 input_dev_rev = 745 +console_dev_rev = 1276 def get_class(classname): return eval(classname) @@ -95,6 +96,8 @@ def dev_cn_to_rasd_cn(dev_cn, virt): return get_typed_class(virt, "DiskResourceAllocationSettingData") elif dev_cn.find('Memory') >= 0: return get_typed_class(virt, "MemResourceAllocationSettingData") + elif dev_cn.find('ConsoleDisplayController') >= 0: + return get_typed_class(virt, "ConsoleResourceAllocationSettingData") elif dev_cn.find('DisplayController') >= 0: return get_typed_class(virt, "GraphicsResourceAllocationSettingData") elif dev_cn.find('PointingDevice') >= 0: @@ -112,6 +115,9 @@ def enum_dev(virt, ip): if curr_cim_rev >= input_dev_rev: dev_list.append('PointingDevice') + if curr_cim_rev >= console_dev_rev: + dev_list.append('ConsoleDisplayController') + dev_insts = {} try: diff --git a/suites/libvirt-cim/lib/XenKvmLib/rasd.py b/suites/libvirt-cim/lib/XenKvmLib/rasd.py index 4d4240a..3675015 100644 --- a/suites/libvirt-cim/lib/XenKvmLib/rasd.py +++ b/suites/libvirt-cim/lib/XenKvmLib/rasd.py @@ -50,9 +50,11 @@ memcn = 'Memory' netcn = 'NetworkPort' diskcn = 'LogicalDisk' dccn = 'DisplayController' +cccn = 'ConsoleDisplayController' pdcn = 'PointingDevice' libvirt_rasd_storagepool_changes = 934 +vsms_console_sup = 1276 def rasd_init_list(vsxml, virt, t_disk, t_dom, t_mac, t_mem, server): """ @@ -65,6 +67,7 @@ def rasd_init_list(vsxml, virt, t_disk, t_dom, t_mac, t_mem, server): disk_cn = get_typed_class(virt, diskcn) dc_cn = get_typed_class(virt, dccn) pd_cn = get_typed_class(virt, pdcn) + cc_cn = None in_list = { 'proc' : proc_cn, 'mem' : mem_cn, @@ -75,6 +78,11 @@ def rasd_init_list(vsxml, virt, t_disk, t_dom, t_mac, t_mem, server): } try: + curr_cim_rev, changeset = get_provider_version(virt, server) + if curr_cim_rev >= vsms_console_sup: + cc_cn = get_typed_class(virt, cccn) + in_list['console'] = cc_cn + disk_path = vsxml.xml_get_disk_source() if virt == 'LXC': disk_path = '/var/lib/libvirt/images/lxc_files' @@ -116,7 +124,11 @@ def rasd_init_list(vsxml, virt, t_disk, t_dom, t_mac, t_mem, server): pd_cn : { "InstanceID" : point_device } - } + } + if cc_cn != None: + rasd_values[cc_cn] = { + "InstanceID" : "%s/%s" %(t_dom, "charconsole:0") + } except Exception, details: logger.error("Exception: In fn rasd_init_list %s", details) return FAIL, rasd_values, in_list @@ -150,6 +162,13 @@ def verify_displayrasd_values(assoc_info, displayrasd_list): status = FAIL return status +def verify_consolerasd_values(assoc_info, consolerasd_list): + status = PASS + if assoc_info['InstanceID'] != consolerasd_list['InstanceID']: + InstId_err(assoc_info, consolerasd_list) + status = FAIL + return status + def verify_inputrasd_values(assoc_info, inputrasd_list): status = PASS if assoc_info['InstanceID'] != inputrasd_list['InstanceID']: diff --git a/suites/libvirt-cim/lib/XenKvmLib/vsms.py b/suites/libvirt-cim/lib/XenKvmLib/vsms.py index d7f33f9..955026f 100755 --- a/suites/libvirt-cim/lib/XenKvmLib/vsms.py +++ b/suites/libvirt-cim/lib/XenKvmLib/vsms.py @@ -28,6 +28,7 @@ from CimTest import Globals from XenKvmLib import const from XenKvmLib.classes import get_typed_class, get_class_type, virt_types +RASD_TYPE_OTHER = 1 RASD_TYPE_PROC = 3 RASD_TYPE_MEM = 4 RASD_TYPE_NET_ETHER = 10 @@ -259,6 +260,40 @@ class LXC_MemResourceAllocationSettingData(CIM_MemResourceAllocationSettingData) def get_masd_class(virt): pass +class CIM_ConsoleResourceAllocationSettingData(CIMClassMOF): + def __init__(self, name, source_type=2, target_type="virtio", + source_path=None, connect_URL=None, bind_URL=None): + self.InstanceID = '%s/charconsole:0' %name + self.ResourceType = RASD_TYPE_OTHER + self.OtherResourceType = 'console' + + if source_type != None: + self.SourceType = source_type + + if target_type != None: + self.TargetType = target_type + + if source_path != None: + self.SourcePath = source_path + + if bind_URL != None: + self.BindURL = bind_URL + + if connect_URL != None: + self.ConnectURL = connect_URL + +class Xen_ConsoleResourceAllocationSettingData(CIM_ConsoleResourceAllocationSettingData): + pass + +class KVM_ConsoleResourceAllocationSettingData(CIM_ConsoleResourceAllocationSettingData): + pass + +class LXC_ConsoleResourceAllocationSettingData(CIM_ConsoleResourceAllocationSettingData): + pass + +@eval_cls('ConsoleResourceAllocationSettingData') +def get_casd_class(virt): + pass class CIM_GraphicsResourceAllocationSettingData(CIMClassMOF): def __init__(self, name, res_sub_type="vnc", ip=None, ipv6_flag=None, diff --git a/suites/libvirt-cim/lib/XenKvmLib/vxml.py b/suites/libvirt-cim/lib/XenKvmLib/vxml.py index 74c4f23..9489a5c 100644 --- a/suites/libvirt-cim/lib/XenKvmLib/vxml.py +++ b/suites/libvirt-cim/lib/XenKvmLib/vxml.py @@ -50,9 +50,11 @@ from CimTest.ReturnCodes import SKIP, PASS, FAIL from XenKvmLib.classes import virt_types, get_typed_class from XenKvmLib.enumclass import GetInstance from XenKvmLib.const import get_provider_version +from XenKvmLib.xm_virt_util import host_cpu_model vsms_graphics_sup = 763 vsms_inputdev_sup = 771 +vsms_console_sup = 1276 class XMLClass: xml_string = "" @@ -598,7 +600,8 @@ class VirtCIM: def __init__(self, virt, dom_name, uuid, pae, acpi, apic, disk_dev, disk_source, net_type, net_name, net_mac, vcpus, mem, mem_allocunits, emu_type, grstype, ip, - is_ipv6_only, port_num, kmap, irstype, btype, vnc_passwd): + is_ipv6_only, port_num, kmap, irstype, btype, vnc_passwd, + con_source_type, con_target_type): self.virt = virt self.domain_name = dom_name self.err_rc = None @@ -623,6 +626,9 @@ class VirtCIM: ipv6_flag=is_ipv6_only, lport=port_num, keymap=kmap, vnc_passwd=vnc_passwd) + self.casd = vsms.get_casd_class(virt)(name=dom_name, + source_type=con_source_type, + target_type=con_target_type) self.masd = vsms.get_masd_class(virt)(megabytes=mem, mallocunits=mem_allocunits, name=dom_name) @@ -655,9 +661,14 @@ class VirtCIM: res_settings.append(str(self.gasd)) if curr_cim_rev >= vsms_inputdev_sup: - if self.iasd is not None: + if self.iasd is not None and \ + not str(host_cpu_model(ip, self.virt)).startswith('s390'): res_settings.append(str(self.iasd)) + if curr_cim_rev >= vsms_console_sup: + if ref_conf is None and self.casd is not None: + res_settings.append(str(self.casd)) + if ref_conf is None: ref_conf = ' ' @@ -808,6 +819,8 @@ class VirtCIM: self.dasd = rasd elif cn.find("NetResourceAllocationSettingData") >= 0: self.nasd = rasd + elif cn.find("ConsoleResourceAllocationSettingData") >=0: + self.casd = rasd elif cn.find("GraphicsResourceAllocationSettingData") >= 0: self.gasd = rasd @@ -849,7 +862,8 @@ class XenXML(VirtXML, VirtCIM): emu_type=None, grstype="vnc", address=None, is_ipv6_only=None, port_num='-1', keymap="en-us", irstype="mouse", - btype="xen", vnc_passwd=None): + btype="xen", vnc_passwd=None, + con_source_type=0, con_target_type="virtio"): if not (os.path.exists(const.Xen_kernel_path) \ and os.path.exists(const.Xen_init_path)): logger.error('ERROR: Either the kernel image ' @@ -863,7 +877,7 @@ class XenXML(VirtXML, VirtCIM): disk_file_path, ntype, net_name, mac, vcpus, mem, mem_allocunits, emu_type, grstype, address, is_ipv6_only, port_num, keymap, irstype, btype, - vnc_passwd) + vnc_passwd, con_source_type, con_target_type) def _os(self, os_kernel, os_initrd): os = self.get_node('/domain/os') @@ -920,7 +934,8 @@ class KVMXML(VirtXML, VirtCIM): emu_type=None, grstype="vnc", address=None, is_ipv6_only=None, port_num='-1', keymap="en-us", irstype="mouse", - btype="ps2", vnc_passwd=None): + btype="ps2", vnc_passwd=None, + con_source_type=0, con_target_type="virtio"): if not os.path.exists(disk_file_path): logger.error('Error: Disk image %s does not exist', disk_file_path) sys.exit(1) @@ -929,7 +944,7 @@ class KVMXML(VirtXML, VirtCIM): disk_file_path, ntype, net_name, mac, vcpus, mem, mem_allocunits, emu_type, grstype, address, is_ipv6_only, port_num, keymap, irstype, btype, - vnc_passwd) + vnc_passwd, con_source_type, con_target_type) self._os() self._devices(const.KVM_default_emulator, ntype, disk_file_path, disk, mac, net_name) @@ -983,7 +998,8 @@ class XenFVXML(VirtXML, VirtCIM): emu_type=None, grstype="vnc", address=None, is_ipv6_only=None, port_num='-1', keymap="en-us", - irstype="mouse", btype="ps2", vnc_passwd=None): + irstype="mouse", btype="ps2", vnc_passwd=None, + con_source_type=0, con_target_type="virtio"): if not os.path.exists(disk_file_path): logger.error('Error: Disk image %s does not exist', disk_file_path) sys.exit(1) @@ -992,7 +1008,8 @@ class XenFVXML(VirtXML, VirtCIM): disk_file_path, ntype, net_name, mac, vcpus, mem, mem_allocunits, emu_type, grstype, address, is_ipv6_only, port_num, - keymap, irstype, btype, vnc_passwd) + keymap, irstype, btype, vnc_passwd, + con_source_type, con_target_type) self._os(const.XenFV_default_loader) self._devices(const.XenFV_default_emulator, ntype, mac, net_name, disk_file_path, disk) @@ -1036,7 +1053,8 @@ class LXCXML(VirtXML, VirtCIM): tty=const.LXC_default_tty, grstype="vnc", address=None, is_ipv6_only=None, port_num='-1', keymap="en-us", - irstype="mouse", btype="usb", vnc_passwd=None): + irstype="mouse", btype="usb", vnc_passwd=None, + con_source_type=0, con_target_type="virtio"): VirtXML.__init__(self, 'lxc', test_dom, set_uuid(), mem, vcpus) # pae, acpi and apic parameters doesn't make sense here, so we # statically set them to False (a.k.a. ignore them) @@ -1045,7 +1063,7 @@ class LXCXML(VirtXML, VirtCIM): ntype, net_name, mac, vcpus, mem, const.default_mallocunits, None, grstype, address, is_ipv6_only, port_num, keymap, irstype, - btype, vnc_passwd) + btype, vnc_passwd, con_source_type, con_target_type) self._os(const.LXC_init_path) self._devices(const.LXC_default_emulator, mac, ntype, net_name, const.LXC_default_tty) self.create_lxc_file(CIM_IP, const.LXC_init_path) -- 1.7.9.5