DK> +def verify_fields(assoc_info, prof_info):
DK> + if assoc_info['InstanceID'] != prof_info['InstanceID']:
DK> + print_field_error('InstanceID', assoc_info['InstanceID'],
prof_info['InstanceID'])
DK> + return FAIL
DK> + if assoc_info['RegisteredOrganization'] !=
prof_info['RegisteredOrganization']:
DK> + print_field_error('RegisteredOrganization',
assoc_info['RegisteredOrganization'], \
DK> +
prof_info['RegisteredOrganization'])
DK> + return FAIL
DK> + if assoc_info['RegisteredName'] !=
prof_info['RegisteredName']:
DK> + print_field_error('RegisteredName',
assoc_info['RegisteredName'], \
DK> + prof_info['RegisteredName'])
DK> + return FAIL
DK> + if assoc_info['RegisteredVersion'] !=
prof_info['RegisteredVersion']:
DK> + print_field_error('RegisteredVersion',
assoc_info['RegisteredVersion'], \
DK> +
prof_info['RegisteredVersion'])
DK> + return FAIL
DK> + return PASS
Same comment as before for this as well.
DK> +def verify_ref_assoc_info(assoc_info):
DK> + status = PASS
DK> + vs_prof, gen_dev_prof, mem_res_prof, vs_mig_prof = init_list()
DK> + for i in range(len(assoc_info)):
Please use the following syntax for for loops (unless you really need
the index):
for i in assoc_info:
DK> + instid = assoc_info[i]['InstanceID']
DK> + if instid.find("DSP1045") >=0 :
DK> + status = verify_fields(assoc_info[i], mem_res_prof)
DK> + elif instid.find("DSP1057") >=0 :
DK> + status = verify_fields(assoc_info[i], vs_prof)
DK> + elif instid.find("DSP1059") >=0 :
DK> + status = verify_fields(assoc_info[i], gen_dev_prof)
DK> + elif instid.find("DSP1081") >=0 :
DK> + status = verify_fields(assoc_info[i], vs_mig_prof)
DK> + else:
DK> + status = FAIL
DK> + if status != PASS:
DK> + break
DK> + return status
In the interest of making this more extensible in the future, why not
embed the information you need in the profile information dictionary
in some way to avoid this sort of static structure? Assuming the dict
has a "profnum" field:
profiles = init_list()
for i in assoc_info:
status = None
for profile in profiles:
if profile["profnum"] in i['InstanceID']:
status = verify_fields(i, profile)
break
if status == FAIL:
break
You may need to rearrange your profile dict a little to make the key
properties distinct from other bits, but the result will be that when
we add a new supported profile, you can just add an entry to the
top-level list of profiles and not have to modify lots of other bits
in the code.
Most of your other tests can probably be modified in this way as well,
which leads me to ask: Why not define a single set of profiles in a
common file and import them? That way, all of the profile tests will
work against a single set of profiles, which I think makes a lot more
sense.
DK> +def get_refprof_verify_info():
DK> + assoc_info = []
DK> + status = PASS
DK> + assoc_name = get_typed_class(virt, 'ReferencedProfile')
DK> + instid = "CIM:DSP1042-SystemVirtualization-1.0.0"
DK> + try:
DK> + assoc_info = Associators(server, assoc_name, reg_classname, virt,
InstanceID = instid,
DK> + CreationClassName =
reg_classname)
DK> + if len(assoc_info) < 4:
DK> + logger.error("%s returned %i %s objects, expected atleast
4",
DK> + assoc_name, len(assoc_info),
'Profile')
DK> + status = FAIL
DK> +
DK> + if status != PASS:
DK> + return status
DK> + status = verify_ref_assoc_info(assoc_info)
DK> + except Exception, detail:
DK> + logger.error(CIM_ERROR_ASSOCIATORS, assoc_name)
DK> + logger.error("Exception: %s", detail)
DK> + status = FAIL
DK> + return status
Perhaps you can explain the need for the repeated special case
distinction for this profile?
--
Dan Smith
IBM Linux Technology Center
Open Hypervisor Team
email: danms(a)us.ibm.com