+1

Best,
Regards

Daisy (Ô˹úÁ«)
VSM Team, China Systems & Technology Labs (CSTL)
E-mail: yunguol@cn.ibm.com
TEL: (86)-21-60922403
Building 10, 399 Ke Yuan Rd, Pudong Shanghai, 201203


libvirt-cim-bounces@redhat.com wrote on 2008-12-12 04:46:01:

> # HG changeset patch
> # User Kaitlin Rupert <karupert@us.ibm.com>
> # Date 1229028324 28800
> # Node ID 0e187d5264ef2fac252fa9283c640550703e0b09
> # Parent  6060405e9a9c8d9fd3917d8277899d43b962bd11
> [TEST] Update SettingsDefine 02_reverse.py
>
> This is an older test that has been updated to use EnumInstances() to get
> the instances on either side of the association.  These instances are used
> to verify the results.
>
> This is a complete re-write as the format was difficult to read.
>
> Signed-off-by: Kaitlin Rupert <karupert@us.ibm.com>
>
> diff -r 6060405e9a9c -r 0e187d5264ef suites/libvirt-
> cim/cimtest/SettingsDefine/02_reverse.py
> --- a/suites/libvirt-cim/cimtest/SettingsDefine/02_reverse.py   Tue
> Dec 09 18:44:58 2008 -0800
> +++ b/suites/libvirt-cim/cimtest/SettingsDefine/02_reverse.py   Thu
> Dec 11 12:45:24 2008 -0800
> @@ -20,197 +20,234 @@
>  # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307  USA
>  #
>  
> -#
> -# This test case is used to reverse verify the
> Xen_SettingsDefineState class.
> -# We use the cross class verification for this.
> -# First we do the assoc for the Xen_VSSDC class. On the results
> obtained , we do assoc
> -# for the SettingsDefineState class and verify the
> CreationClassName and the DeviceID's
> -# returned by the assoc.
> -#
>  # For Ex: Command and the fields that are verified are given below.
>  #
>  # wbemcli ain -ac Xen_VirtualSystemSettingDataComponent            
> -# 'http://localhost:5988/root/virt:Xen_VirtualSystemSettingData.
> InstanceID="Xen:domgst"'
> +# 'http://localhost:5988/root/virt:Xen_VirtualSystemSettingData.
> InstanceID="Xen:
> +# domgst"'
>  #
>  # Output:
> -# localhost:5988/root/virt:Xen_ProcResourceAllocationSettingData.
> InstanceID="domgst/0"
> -# localhost:5988/root/virt:Xen_NetResourceAllocationSettingData.
> InstanceID="domgst/00:22:33:aa:bb:cc"
> -# localhost:5988/root/virt:Xen_DiskResourceAllocationSettingData.
> InstanceID="domgst/xvda"
> -# localhost:5988/root/virt:Xen_MemResourceAllocationSettingData.
> InstanceID="domgst/mem"
> +# localhost:5988/root/virt:Xen_ProcResourceAllocationSettingData.InstanceID=
> +# "domgst/0"
> +#
> +# localhost:5988/root/virt:Xen_NetResourceAllocationSettingData.InstanceID=
> +# "domgst/00:22:33:aa:bb:cc"
> +#
> +# localhost:5988/root/virt:Xen_DiskResourceAllocationSettingData.InstanceID=
> +# "domgst/xvda"
> +#
> +# localhost:5988/root/virt:Xen_MemResourceAllocationSettingData.InstanceID=
> +# "domgst/mem"
>  #
> -# Using the above output we do the assocn for each of them on
> Xen_SettingsDefineState
> +# Using this output we call the SettingsDefineState association for
> each of them
> +#
>  # wbemcli ain -ac Xen_SettingsDefineState 'http://localhost:5988/root/virt:\
>  # Xen_ProcResourceAllocationSettingData.InstanceID="domgst/0"'
>  #
>  # Output:
> -# localhost:5988/root/virt:Xen_Processor.
> CreationClassName="Xen_Processor",             \
> +# localhost:5988/root/virt:Xen_Processor.CreationClassName="Xen_Processor",\
>  # DeviceID="domgst/0",SystemCreationClassName="",SystemName="domgst"
>  #
> -# Similarly verify the assoc on all the resources like Network,
> Disk and Memory.
>  #
>  # Date : 31-01-2008
>  
>  import sys
> -from CimTest import Globals
>  from CimTest.Globals import logger
> +from CimTest.ReturnCodes import PASS, FAIL
>  from XenKvmLib.const import do_main
> -from CimTest.ReturnCodes import PASS, FAIL, SKIP
> -from VirtLib import utils
> -from XenKvmLib import assoc
> -from XenKvmLib import vxml
> -from XenKvmLib.classes import get_typed_class, get_class_basename
> -from XenKvmLib.rasd import InstId_err
> +from XenKvmLib.assoc import AssociatorNames
> +from XenKvmLib.vxml import get_class
> +from XenKvmLib.classes import get_typed_class
> +from XenKvmLib.rasd import enum_rasds
> +from XenKvmLib.devices import enum_dev
> +from XenKvmLib.common_util import parse_instance_id
>  
>  sup_types = ['Xen', 'KVM', 'XenFV', 'LXC']
>  
>  test_dom    = "virtgst"
> -test_vcpus  = 1
> -test_mem    = 128
> -test_mac    = "00:11:22:33:44:aa"
>  
> -def call_assoc(ip, inst, exp_id, ccn, virt):
> -    if inst['InstanceID'] != exp_id:
> -        InstId_err(inst, exp_id)
> -        return FAIL
> +def setup_env(server, virt):
> +    if virt == 'Xen':
> +        test_disk = 'xvdb'
> +    else:
> +        test_disk = 'hdb'
> +    virt_xml = get_class(virt)
> +    if virt == 'LXC':
> +        cxml = virt_xml(test_dom)
> +    else:
> +        cxml = virt_xml(test_dom, disk = test_disk)
>  
> -    try:
> -        an = get_typed_class(virt, 'SettingsDefineState')
> -        ccn = get_typed_class(virt, ccn)
> -        associnf = assoc.Associators(ip, an, ccn, InstanceID = exp_id)
> -    except  Exception, detail :
> -        logger.error("Exception  %s "  % detail)
> -        logger.error("Error while associating
> Xen_SettingsDefineState with %s" %
> -                     ccn)
> -        return FAIL
> +    ret = cxml.cim_define(server)
> +    if not ret:
> +        logger.error("Failed to Create the dom: %s", test_dom)
> +        return FAIL, cmxl
>  
> -    return SettingsDefineStateAssoc(ip, associnf, virt)
> +    status = cxml.cim_start(server, virt, test_dom)
> +    if status != PASS:
> +        logger.error("Unable start dom '%s'", test_dom)
> +        cxml.undefine(server)
> +        return status, cxml
>  
> -def VSSDCAssoc(ip, assocn, virt):
> -    """
> -        The association info of Xen_VirtualSystemSettingDataComponent
> -        is verified.
> -    """
> +    return PASS, cxml
>  
> -    status = PASS
> -    if len(assocn) == 0:
> -        status = FAIL
> -        return status
> +def init_rasd_list(virt, ip, guest_name):
> +    proc_rasd_cn = get_typed_class(virt, "ProcResourceAllocationSettingData")
>  
> -    try:
> -        for rasd in assocn:
> -            rasd_cn = get_class_basename(rasd.classname)
> -            if rasd_cn in rasd_devid.keys():
> -                status = call_assoc(ip, rasd, rasd_devid[rasd_cn],
> rasd_cn, virt)
> -            else:
> -                status = FAIL
> +    rasd_insts = {}
>  
> +    rasds, status = enum_rasds(virt, ip)
> +    if status != PASS:
> +        logger.error("Enum RASDs failed")
> +        return rasd_insts, status
> +
> +    for rasd_cn, rasd_list in rasds.iteritems():
> +        if virt == "LXC" and rasd_cn == proc_rasd_cn:
> +            continue
> +
> +        for rasd in rasd_list:
> +            guest, dev, status = parse_instance_id(rasd.InstanceID)
>              if status != PASS:
> -                logger.error("Mistmatching value for VSSDComponent
> association")
> -                break  
> +                logger.error("Unable to parse InstanceID: %s" %
> rasd.InstanceID)
> +                return rasd_insts, FAIL
>  
> -    except  Exception, detail :
> -        logger.error("Exception in VSSDCAssoc function: %s" % detail)
> -        status = FAIL
> +            if guest == guest_name:
> +                rasd_insts[rasd.Classname] = rasd
>  
> -    return status
> +    return rasd_insts, PASS
>  
> -def check_id(inst, exp_id):
> -    if inst['DeviceID'] != exp_id:
> +def init_device_list(virt, ip, guest_name):
> +    dev_insts = {}
> +
> +    devs, status = enum_dev(virt, ip)
> +    if status != PASS:
> +        logger.error("Enum device instances failed")
> +        return dev_insts, status
> +
> +    for dev_cn, dev_list in devs.iteritems():
> +        for dev in dev_list:
> +            guest, dev_id, status = parse_instance_id(dev.DeviceID)
> +            if status != PASS:
> +                logger.error("Unable to parse InstanceID: %s" % dev.DeviceID)
> +                return dev_insts, FAIL
> +
> +            if guest == guest_name:
> +                dev_insts[dev.Classname] = dev
> +
> +    return dev_insts, PASS
> +
> +def verify_rasd(virt, enum_list, rasds, guest_name):
> +    proc_rasd_cn = get_typed_class(virt, "ProcResourceAllocationSettingData")
> +
> +    for rasd in enum_list:
> +        if virt == "LXC" and rasd.classname == proc_rasd_cn:
> +            enum_list.remove(rasd)
> +            continue
> +
> +        guest, dev, status = parse_instance_id(rasd['InstanceID'])
> +        if status != PASS:
> +            logger.error("Unable to parse InstanceID: %s",
> rasd['InstanceID'])
> +            return status
> +
> +        if guest != guest_name:
> +            continue
> +
> +        exp_rasd = rasds[rasd.classname]
> +
> +        if rasd['InstanceID'] == exp_rasd.InstanceID:
> +            status = PASS
> +        else:
> +            logger.info("Got %s instead of %s" % (rasd['InstanceID'],
> +                        exp_rasd.InstanceID))
> +            status = FAIL
> +
> +    if status != PASS:
> +        logger.error("RASD with id %s not returned", exp_rasd.InstanceID)
>          return FAIL
>  
>      return PASS
> -  
> -def SettingsDefineStateAssoc(ip, associnfo_setDef, virt):
> -    """
> -        The association info of Xen_SettingsDefineState is verified.
> -    """
> -    status = PASS
> -    
> -    if len(associnfo_setDef) == 0:
> -        status = FAIL
> -        return status
>  
> -    try:
> -        for dev in associnfo_setDef:
> -            dev_cn = get_class_basename(dev['CreationClassName'])
> -            if dev_cn in dev_devid.keys():
> -                status = check_id(dev, dev_devid[dev_cn])
> -            else:
> -                status = FAIL
> +def verify_devices(enum_list, devs):
> +    for dev in enum_list:
> +        guest, dev_id, status = parse_instance_id(dev['DeviceID'])
> +        if status != PASS:
> +            logger.error("Unable to parse InstanceID: %s", dev['DeviceID'])
> +            return status
>  
> -            if status != PASS:
> -                logger.error("Mistmatching value for
> SettingsDefineState assoc")
> -                break  
> +        exp_dev = devs[dev.classname]
>  
> -    except  Exception, detail :
> -        logger.error("Exception in SettingsDefineStateAssoc function: %s"
> -                     % detail)
> -        status = FAIL
> +        if dev['DeviceID'] == exp_dev.DeviceID:
> +            status = PASS
> +        else:
> +            logger.info("Got %s instead of %s" % (dev['DeviceID'],
> +                        exp_dev.DeviceID))
> +            status = FAIL
>  
> -    return status
> +    if status != PASS:
> +        logger.error("Device with id %s not returned", exp_dev.DeviceID)
> +        return FAIL
>  
> +    return PASS
>  
>  @do_main(sup_types)
>  def main():
>      options = main.options
> +    virt = options.virt
> +    status = FAIL
>  
> -    vt = options.virt
> -    if vt == 'Xen':
> -        test_disk = 'xvdb'
> -    else:
> -        test_disk = 'hdb'
> -    
> -    status = PASS
> -    virt_xml = vxml.get_class(options.virt)
> -    if options.virt == 'LXC':
> -        cxml = virt_xml(test_dom)
> -    else:
> -        cxml = virt_xml(test_dom, mem = test_mem, vcpus = test_vcpus,
> -                        mac = test_mac, disk = test_disk)
> -    ret = cxml.create(options.ip)
> -    if not ret:
> -        logger.error("Failed to create the dom: %s", test_dom)
> -        status = FAIL
> +    status, cxml = setup_env(options.ip, virt)
> +    if status != PASS:
> +        cxml.undefine(options.ip)
>          return status
>  
> -
> -    if vt == 'XenFV':
> +    if virt == 'XenFV':
>          VSType = 'Xen'
>      else:
> -        VSType = vt
> +        VSType = virt
>  
>      instIdval = "%s:%s" % (VSType, test_dom)
>  
> -    vssdc_cn = get_typed_class(vt, 'VirtualSystemSettingDataComponent')
> -    vssd_cn = get_typed_class(vt, 'VirtualSystemSettingData')
> -    sds_cn = get_typed_class(vt, 'SettingsDefineState')
> +    try:
> +        rasds, status = init_rasd_list(virt, options.ip, test_dom)
> +        if status != PASS:
> +            raise Exception("Unable to build rasd instance list")
>  
> -    global rasd_devid
> -    rasd_devid = {
> -            'ProcResourceAllocationSettingData' : '%s/%s' %
> (test_dom, 'proc'),
> -            'NetResourceAllocationSettingData'  : '%s/%s' %
> (test_dom, test_mac),
> -            'DiskResourceAllocationSettingData' : '%s/%s' %
> (test_dom, test_disk),
> -            'MemResourceAllocationSettingData'  : '%s/%s' %
> (test_dom, 'mem')}
> +        vssdc_cn = get_typed_class(virt, 'VirtualSystemSettingDataComponent')
> +        vssd_cn = get_typed_class(virt, 'VirtualSystemSettingData')
>  
> -    global dev_devid
> -    dev_devid = {
> -            'Processor'   : '%s/%s' % (test_dom, test_vcpus-1),
> -            'NetworkPort' : '%s/%s' % (test_dom, test_mac),
> -            'LogicalDisk' : '%s/%s' % (test_dom, test_disk),
> -            'Memory'      : '%s/%s' % (test_dom, 'mem')}
> +        assoc = AssociatorNames(options.ip, vssdc_cn, vssd_cn,
> +                                InstanceID = instIdval)
>  
> -    try:
> -        assocn = assoc.AssociatorNames(options.ip, vssdc_cn, vssd_cn,
> -                                       InstanceID = instIdval)
> +        status = verify_rasd(virt, assoc, rasds, test_dom)
> +        if status != PASS:
> +            raise Exception("Failed to verify RASDs")
> +
> +        if len(assoc) != len(rasds):
> +            raise Exception("Got %d RASDs, exp %d" % (len(assoc),
> len(rasds)))
> +
> +        sds_cn = get_typed_class(virt, 'SettingsDefineState')
> +
> +        devs, status = init_device_list(virt, options.ip, test_dom)
> +        if status != PASS:
> +            raise Exception("Unable to build device instance list")
> +
> +        for rasd in assoc:
> +            rasd_cn = rasd.classname
> +            sdc_assoc = AssociatorNames(options.ip, sds_cn, rasd_cn,
> +                                        InstanceID = rasd['InstanceID'])
>              
> -        status = VSSDCAssoc(options.ip, assocn, options.virt)
> +            if len(sdc_assoc) < 1:
> +                raise Exception("%i dev insts for %s" % (len(sdc_assoc),
> +                                rasd['InstanceID']))
>  
> -    except  Exception, detail :
> -        logger.error(Globals.CIM_ERROR_ASSOCIATORS, vssdc_cn)
> -        logger.error("Exception : %s" % detail)
> -        status = FAIL
> +            status = verify_devices(sdc_assoc, devs)
> +            if status != PASS:
> +                raise Exception("Failed to verify devices")
>  
> -    cxml.destroy(options.ip)
> +    except Exception, details:
> +        logger.error(details)
> +        status = FAIL
> +
> +    cxml.cim_destroy(options.ip)
>      cxml.undefine(options.ip)
>      return status
>  
>
> _______________________________________________
> Libvirt-cim mailing list
> Libvirt-cim@redhat.com
> https://www.redhat.com/mailman/listinfo/libvirt-cim