[Libvirt-cim] [PATCH 2 of 2] [TEST] Created reverse test (KVMRedirectionSAP -> HostSystem) test

Kaitlin Rupert kaitlin at linux.vnet.ibm.com
Wed Jan 28 23:10:04 UTC 2009


> +from XenKvmLib.const import do_main, get_provider_version

You don't use get_provider_version, however - you probably should (and 
on the other HAP test as well).  Because these tests won't work with 
older versions of the providers.

> +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

These aren't used; they should be removed.

> +from XenKvmLib.common_util import get_host_info
> +from XenKvmLib.enumclass import EnumInstances
> +
> +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.

> +
> +    status = cxml.cim_start(server)
> +    if status != PASS:
> +        logger.error("Unable start dom '%s'", test_dom)
> +        cxml.undefine(server)
> +        return status, cxml
> +
> +    return PASS, cxml
> +
> +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
> +
> +            if guest == guest_name:
> +                kvmrsap_inst = kvmrsap

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

if kvmrsap.SystemName == guest_name

> +
> +    return kvmrsap_inst, PASS

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.

> +
> +def verify_host(enum_list, host_inst): 
> +    status = FAIL
> +
> +    for item in enum_list:
> +        if item.classname != host_inst.Classname:
> +            print "Returned class name (%s) is not correct", item.classname
> +            return status
> +
> +        host = item.keybindings['Name']
> +
> +        print "Iteration host name: ", host_inst.Name

Remove print statement.

> +
> +        if host == host_inst.Name:   
> +            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