[Libvirt-cim] [PATCH 1 of 2] [TEST] Created testcases for the forward HostedAccessPoint association (HostSystem -> KVMRedirectionSAP

Kaitlin Rupert kaitlin at linux.vnet.ibm.com
Wed Jan 28 22:52:47 UTC 2009


> +from XenKvmLib.const import do_main, get_provider_version
> +from XenKvmLib.rasd import enum_rasds
> +from XenKvmLib.common_util import parse_instance_id
> +from XenKvmLib.vsms import enumerate_instances
> +from XenKvmLib.test_doms import virdomid_list

This test doesn't include these functions, no need to import them.


> +sup_types = ['Xen', 'KVM', 'XenFV', 'LXC']
> +
> +test_dom = "domu1"
> +
> +def setup_env(server, virt):
> +    if virt == 'Xen':
> +        test_disk = 'xvda'
> +    else:
> +        test_disk = 'hda'
> +    virt_xml = get_class(virt)
> +    if virt == 'LXC':
> +        cxml = virt_xml(test_dom)
> +    else:
> +        cxml = virt_xml(test_dom, disk = test_disk)
> +
> +    ret = cxml.cim_define(server)
> +    if not ret:
> +        logger.error("Failed to Create the dom: %s", test_dom)

This should be "define" instead of "create" - there's a slight 
difference between libvirt's notion of define and create, so it'd be 
good to use "define" here.

> +        return FAIL, cmxl

This should be cxml, not cmxl.

> +
> +def enum_kvmrsaps(virt, ip):
> +    kvmrsap_insts = {}
> +
> +    try:
> +        kvmrsap_cn = get_typed_class(virt, 'KVMRedirectionSAP')
> +        enum_list = EnumInstances(ip, kvmrsap_cn)
> +
> +        if enum_list < 1:
> +            logger.error("No KVM Redirection SAP instances returned")
> +            return kvmrsap_insts, FAIL
> +
> +        for kvmrsap in enum_list:
> +            if kvmrsap.Classname not in kvmrsap_insts.keys():
> +                kvmrsap_insts[kvmrsap.Classname] = []
> +            kvmrsap_insts[kvmrsap.Classname].append(kvmrsap)

All of the instances returned by EnunmInstances will have the same 
classname.  There's no need to build a dictionary.

This function isn't really necessary.  Just call the EnumInstances() 
call in get_kvmrsap_inst().  Then loop through the list returned by 
EnumInstances() to kind the instance that corresponds to your guest.

> +
> +    except Exception, details:
> +        logger.error(details)
> +        return kvmrsap_insts, FAIL
> +
> +    return kvmrsap_insts, PASS
> +
> +def get_kvmrsap_inst(virt, ip, guest_name):
> +    kvmrsap_inst = None
> +
> +    kvmrsaps, status = enum_kvmrsaps(virt, ip)
> +    if status != PASS:
> +        logger.error("Get KVMRSAPs failed")
> +        return kvmrsap_inst, status
> +
> +    for kvmrsap_cn, kvmrsap_list in kvmrsaps.iteritems():
> +        for kvmrsap in kvmrsap_list:
> +            guest = kvmrsap.SystemName

You don't use the guest param for anything else, so you can just do:

if kvmrsap.SystemName == guest_name

> +
> +            if guest == guest_name:
> +                kvmrsap_inst = kvmrsap

You want to make sure the expected number of KVMRedirectionSAPs are 
returned before returning from the function.  If kvmrsap_inst is None, 
return an error.

> +
> +    return kvmrsap_inst, PASS
> +
> +def init_kvmrsap_list(virt, ip, guest_name):

This function isn't being used.  It should be removed.

> +    kvmrsap_insts = {}
> +    
> +    kvmrsaps, status = enum_kvmrsaps(virt, ip)
> +    if status != PASS:
> +        logger.error("Enum KVMRSAPs failed")
> +        return kvmrsap_insts, status
> +
> +    for kvmrsap_cn, kvmrsap_list in kvmrsaps.iteritems():
> +        for kvmrsap in kvmrsap_list:
> +            guest = kvmrsap.SystemName
> +                    
> +            if guest == guest_name:
> +                kvmrsap_insts[kvmrsap.Classname] = kvmrsap
> +
> +    return kvmrsap_insts, PASS
> +
> +def verify_kvmrsap(enum_list, kvmrsap_inst): 
> +    status = FAIL
> +
> +    for item in enum_list:

Also, you need to verify that enum_list has the proper number of 
KVMRedirectionSAP instances.  Since you are not connecting to the 
guest's console, there should only be one instance.

Because of this, the loop isn't needed here.

> +        if item.classname != kvmrsap_inst.Classname:
> +            print "Returned class name (%s) is not correct", item.classname
> +            return status
> +
> +        guest = item.keybindings['SystemName']
> +
> +        print "Iteration guest name: ", guest
> +        print "Iteration host name: ", item.host

Remove print statements.

> +
> +        if guest == kvmrsap_inst.SystemName:   
> +            status = PASS
> +            break

This function should verify all the properties of the instance.  Take a 
look at compare_all_prop() for this.

> +
> +    return status
> +
> +
> + at do_main(sup_types)
> +def main():
> +    options = main.options
> +    status = FAIL
> +    server = options.ip
> +    virt = options.virt
> +
> +    status, cxml = setup_env(options.ip, options.virt)
> +    if status != PASS:
> +        cxml.undefine(options.ip)
> +        return status
> +
> +    try:
> +        status, host_inst = get_host_info(server, virt)
> +        if status != PASS:
> +            raise Exception("Failed to get host info.")
> +
> +        kvmrsap_inst, status = get_kvmrsap_inst(options.virt, options.ip, test_dom)

This line needs to be 80 characters.

> +        if status != PASS:
> +            raise Exception("Unable to fetch kvmrsap instance (domain: %s)", test_dom)

This line needs to be 80 characters.  Also, the format for Exception is 
to use a % for args, not a comma:

raise Exception("Unable to fetch kvmrsap instance (domain: %s)" % test_dom)

-- 
Kaitlin Rupert
IBM Linux Technology Center
kaitlin at linux.vnet.ibm.com




More information about the Libvirt-cim mailing list