
+def get_inst(server, virt, cn, key, key_list):
The key param is never used in this function.
+ inst = None + try: + inst = getInstance(server, cn, key_list, virt)
+ +def init_list(server, virt, vsxml, test_disk): + lelist = {} + if virt != 'LXC': + cn_keys_list = { + "LogicalDisk" : "%s/%s" % (test_dom, test_disk), + "Memory" : "%s/%s" % (test_dom, "mem"), + "NetworkPort" : "%s/%s" % (test_dom, test_mac), + "Processor" : "%s/%s" % (test_dom, "0") + } + else: + cn_keys_list = { + "Memory" : "%s/%s" % (test_dom, "mem"), + } + + for cname, id in cn_keys_list.items(): + key_list = get_keys(virt, cname, id)
Since the SSN and SN don't change, you could do the following instead: 1) Declare ssn somewhere before the for loop. 2) Declare the following above the for loop: key_list = { 'DeviceID' : None, 'CreationClassName' : None, 'SystemName' : test_dom, 'SystemCreationClassName' : sccn } 3) In the for loop: cn = get_typed_class(virt, cname) key_list['DeviceID'] = id key_list['CreationClassName'] = cn Or you can leave it as is. Either way is fine.
+ inst = get_inst(server, virt, cname, id, key_list)
You don't really need to call get_inst() here, unless you just want to verify the instances exist. The list you build below (lelist) should be identical to cn_keys_list (except for the key value of the list, lelist uses full CIM class names and the other does not).
+ +def verify_eafp_values(server, virt, in_pllist, gi_inst_list): + # Looping through the in_pllist to get association for devices. + status = PASS + an = get_typed_class(virt, "ElementAllocatedFromPool") + sccn = get_typed_class(virt, "ComputerSystem") + for cn, devid in sorted(in_pllist.iteritems()): + try: + assoc_info = Associators(server, an, cn, + DeviceID = devid, + CreationClassName = cn, + SystemName = test_dom, + SystemCreationClassName = sccn, + virt=virt) + if len(assoc_info) != 1: + logger.error("%s returned %i ResourcePool objects for " + "domain '%s'", an, len(assoc_info), + test_dom) + status = FAIL + break
You can just return FAIL here.
+ assoc_eafp_info = assoc_info[0] + CCName = assoc_eafp_info.classname + gi_inst = gi_inst_list[CCName] + if assoc_eafp_info['InstanceID'] != gi_inst['InstanceID']: + field_err(assoc_eafp_info, gi_inst, 'InstanceID') + return FAIL + if assoc_eafp_info['PoolID'] != gi_inst['PoolID']: + field_err(assoc_eafp_info, gi_inst, 'PoolID') + return FAIL
If you wanted, instead of building the gi_inst_list, you could pass in the instances returned from the get_inst() call in get_pool_details(). You could then call compare_all_prop(). Either way is fine though.
+ except Exception, detail: + logger.error(CIM_ERROR_ASSOCIATORS, an) + logger.error("Exception: %s", detail) + cleanup_restore(server, virt) + status = FAIL + return status +
@do_main(sup_types) def main(): options = main.options + server = options.ip + virt = options.virt status = PASS
I know this was already part of the test, but can you remove this line? Or can you set status = FAIL instead? If all of the failure paths aren't carefully checked, then having status = PASS can lead to returning a false positive.
- 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 + status, lelist = init_list(server, virt, vsxml, test_disk) + if status != PASS: + return status
Need to call cleanup_restore() and destroy() here.
- - ret = test_domain_function(test_dom, options.ip, \ - cmd = "destroy") + status, gi_inst_list = get_pool_details(server, virt, vsxml, diskid) + if status != PASS: + return status
Need to call cleanup_restore() and destroy() here. -- Kaitlin Rupert IBM Linux Technology Center kaitlin@linux.vnet.ibm.com