[Libvirt-cim] [PATCH] [TEST] Fixing 04_hs_to_EAPF.py tc

Deepti B Kalakeri deeptik at linux.vnet.ibm.com
Tue Aug 12 07:50:41 UTC 2008



Kaitlin Rupert wrote:
>> -def pool_init_list(pool_assoc):
>> +def pool_init_list(virt, pool_assoc, net_name, dpool_name):
>> """
>> Creating the lists that will be used for comparisons.
>> """
>> in_pllist = {}
>> + npool = get_typed_class(virt, 'NetworkPool')
>> + dpool = get_typed_class(virt, 'DiskPool')
>> + ppool = get_typed_class(virt, 'ProcessorPool')
>> + mpool = get_typed_class(virt, 'MemoryPool')
>> + n_instid = '%s/%s' % ('NetworkPool', net_name)
>> +
>> for i in range(len(pool_assoc)):
>> classname_keyvalue = pool_assoc[i].classname
>> instid = pool_assoc[i]['InstanceID']
>> - in_pllist[classname_keyvalue] = instid
>> + if classname_keyvalue == npool and instid == n_instid:
>> + in_pllist[classname_keyvalue] = instid
>> + elif classname_keyvalue == dpool and instid == dpool_name:
>> + in_pllist[classname_keyvalue] = instid
>> + elif classname_keyvalue == ppool or classname_keyvalue == mpool:
>> + in_pllist[classname_keyvalue] = instid
>> return in_pllist
>
> This loop is a little hard to read. I think this loop can be removed. 
> Instead, just build a list with the values you're expecting.
>
> in_pllist = { npool, '%s/%s' % ('NetworkPool', net_name),
> ...
> }
>
> I know this was already existing code, but if pool_assoc doesn't 
> contain the instances you're expecting, then in_pllist won't contain 
> the proper values to query against ElementAllocatedFromPool.
I agree that the loop is little hard to read, but considering the fact 
that this is a Cross class test case where we would like to be able to 
make use of the output from the previous provider as input for the next 
step as much as possible, do you think that manually generating a list 
of our own will serve the purpose ?
If yes, then the Crosss Class tc will no longer require query from the 
*HostedResourcePool, *correct??

Also, the above *if condition*s checks along with the following check 
after the *pool_init_list()* is called in the *main loop *make sure that 
we have *4* *required resourcepool *as inputs for *EAFP *query.

in_pllist = pool_init_list(virt, pool, net_name, dpool_name)
# One pool for each Device type, hence len should be 4
exp_len = 4
status = check_len(an, in_pllist, qcn, exp_len)
if status != PASS:
vsxml.undefine(server)
cleanup_restore(server, virt=virt)
destroy_netpool(server, virt, net_name)
return FAIL

Apart from this, the above *pool_init_list() *function can be made more 
readable as follows:

def pool_init_list(virt, pool_assoc, net_name, dp_InstID):
"""
Creating the lists that will be used for comparisons.
"""
in_pllist = {}
dp_CName = get_typed_class(virt, 'DiskPool')
pp_CName = get_typed_class(virt, 'ProcessorPool')
mp_CName = get_typed_class(virt, 'MemoryPool')
np_CName = get_typed_class(virt, 'NetworkPool')
np_InstID = '%s/%s' % ('NetworkPool', net_name)

for p_inst in pool_assoc:
CName = p_inst.classname
InstID = p_inst['InstanceID']
if CName == np_CName and InstID == np_InstID:
in_pllist[CName] = InstID
elif CName == dp_CName and InstID == dp_InstID:
in_pllist[CName] = InstID
elif CName == pp_CName or CName == mp_CName:
in_pllist[CName] = InstID
return in_pllist

Inputs are welcome as always :).

Thanks and Regards,
Deepti.




More information about the Libvirt-cim mailing list