Kaitlin Rupert wrote:
> diff -r 3ac66cf562f0 -r 9fae4065c845
> suites/libvirt-cim/cimtest/ResourceAllocationFromPool/02_reverse.py
This fails for me on latest sources running with KVM:
ResourceAllocationFromPool - 02_reverse.py: FAIL
ERROR - No associated pool for demo2/hda
CIM_ERR_FAILED: Unable to determine pool of `demo2/hda'
demo2 is a KVM guest that I have defined.
What could be the circumstances in which
the provider is unable to
determine the pool type ? Because I had more than one doms created and
the same tc passed.
Btw I have submitted the changes that for the tc.
You'll want to make sure that the RASD you're verifying is the RASD
that matches the guest you've defined.
> +
> +def get_rasd_or_pool_instid(server, virt, cn):
> + key_list = ["InstanceID"]
> + inst = []
> + try:
> + inst = enumclass.enumerate(server, cn, key_list, virt)
> + except Exception:
> + logger.error(Globals.CIM_ERROR_ENUMERATE, cn)
> + return inst, FAIL
> + return inst, PASS
Instead of enumerating the RASDs and the pools, you can get the
instance of the RASD and pool directly (since you should know the
InstanceID of each).
That way, you verify that the instance RAFP returns is the exact
instance you're expected it to be.
> +
> +def get_instance(server, virt, vsxml, cn, pool_list, app_val=0):
> + instances, status = get_rasd_or_pool_instid(server, virt, cn)
> + if status != PASS:
> + vsxml.undefine(server) + return pool_list, status
> +
> + if app_val == 1:
> + for inst in instances:
> + pool_list.append(inst.InstanceID)
I wouldn't create a list of pools, I'd just do a GetInstance to get
the expected pool instance for each case.
> + return instances, pool_list, status
> +
> +
> +def verify_pool_from_RAPF(server, virt, instances, pool_instid_list,
> cn):
This should be RAFP, not RAPF.
> + pool = []
> + for inst in instances:
> + try:
> + pool = assoc.AssociatorNames(server, "ResourceAllocationFromPool",
> + cn, virt, InstanceID = inst.InstanceID)
> + except Exception:
> + logger.error(Globals.CIM_ERROR_ASSOCIATORNAMES, inst.InstanceID)
> + status = FAIL
> +
> + if len(pool) < 1:
> + logger.error("No associated pool for %s", inst.InstanceID)
> + return FAIL
> +
> + if not pool[0]['InstanceID'] in pool_instid_list:
I'd do an exact match here. You should be doing a 1 to 1 comparison on
InstanceIDs.
> + status = get_inst_verify_pool_from_RAPF(server, virt, vsxml,
> 'MemoryPool', + 'MemResourceAllocationSettingData')
> + if status != PASS:
> + return status
If you need to call get_inst_verify_pool_from_RAPF() for each
Pool/RASD type, you can create a list/dictionary with the argument
information. You can then create a for loop that walks through the
dictionary, that way you don't have to repeat the code block above 4
times.
Something like:
arg_list = { 'MemoryPool' : 'MemResourceAllocationSettingData',
...
}
for pool_cn, rasd_cn in arg_list.iteritems():
status = get_inst_verify_pool_from_RAPF(server, virt, vsxml, pool_cn,
rasd_cn)
if status != PASS:
return status