<br><font size=2 face="sans-serif">+1 from me =)</font>
<br>
<br><font size=2 face="sans-serif">Best,<br>
Regards<br>
<br>
Daisy (Ô˹úÁ«)<br>
VSM Team, China Systems & Technology Labs (CSTL)<br>
E-mail: yunguol@cn.ibm.com<br>
TEL: (86)-21-60922403<br>
Building 10, 399 Ke Yuan Rd, Pudong Shanghai, 201203<br>
</font>
<br>
<br><tt><font size=2>libvirt-cim-bounces@redhat.com wrote on 2008-11-11
04:42:59:<br>
<br>
> # HG changeset patch<br>
> # User Kaitlin Rupert <karupert@us.ibm.com><br>
> # Date 1226349773 28800<br>
> # Node ID 8d04c525d233623ba00fd256a20a626b4eebfe53<br>
> # Parent ceff8a7a75e001a24da909528ea8f333d6a7021c<br>
> [TEST] #2 Fix ECTP 01_forward.py to support system with multiple <br>
> networks defined<br>
> <br>
> This test was doing a lot of unnecessary checking (and unessary <br>
> building of lists). Instead, this test calls EnumInstances on
each <br>
> of the classes expected to be returned by the association.<br>
> <br>
> These instances are then compared against the list of instances <br>
> returned by the ECTP association query.<br>
> <br>
> The FIXME will be fixed when bug 0007 is fixed.<br>
> <br>
> Updates:<br>
> -Return from test case if init_vs_pool_values() returns a failure<br>
> <br>
> Signed-off-by: Kaitlin Rupert <karupert@us.ibm.com><br>
> <br>
> diff -r ceff8a7a75e0 -r 8d04c525d233 suites/libvirt-<br>
> cim/cimtest/ElementConforms/01_forward.py<br>
> --- a/suites/libvirt-cim/cimtest/ElementConforms/01_forward.py
Fri<br>
> Nov 07 13:04:40 2008 -0800<br>
> +++ b/suites/libvirt-cim/cimtest/ElementConforms/01_forward.py
Mon<br>
> Nov 10 12:42:53 2008 -0800<br>
> @@ -23,10 +23,8 @@<br>
> # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
USA<br>
> #<br>
> <br>
> -# This tc is used to verify the EnabledState, HealthState, EnabledDefault
and<br>
> -# the Classname are set appropriately for the results returned by
the <br>
> -# ElementConformsToProfile association for the RegisteredProfile
class<br>
> -# and ManagedElement Class<br>
> +# This tc is used to verify the results of the ElementConformsToProfile
<br>
> +# association. This test focuses on RegisteredProfile ->
ManagedElement<br>
> # <br>
> # "CIM:DSP1042-SystemVirtualization-1.0.0"
,<br>
> # "CIM:DSP1057-VirtualSystem-1.0.0a"<br>
> @@ -39,104 +37,71 @@<br>
> #
Date : 04-12-2007<br>
> <br>
> import sys<br>
> +from sets import Set<br>
> from VirtLib import utils, live<br>
> from XenKvmLib import assoc<br>
> from XenKvmLib.test_doms import destroy_and_undefine_all<br>
> from XenKvmLib.classes import get_typed_class<br>
> from XenKvmLib import vxml<br>
> from CimTest import Globals <br>
> -from XenKvmLib.common_util import print_field_error, check_sblim<br>
> -from CimTest.Globals import logger, CIM_ERROR_ASSOCIATORS, <br>
> CIM_ERROR_ENUMERATE<br>
> -from XenKvmLib.const import do_main <br>
> +from XenKvmLib.common_util import print_field_error, check_sblim,
<br>
> get_host_info <br>
> +from CimTest.Globals import logger, CIM_ERROR_ENUMERATE<br>
> +from XenKvmLib.const import do_main, get_provider_version <br>
> from CimTest.ReturnCodes import PASS, FAIL, XFAIL_RC<br>
> from XenKvmLib.enumclass import EnumInstances<br>
> -from XenKvmLib.const import default_network_name, default_pool_name
<br>
> -from XenKvmLib.const import get_provider_version<br>
> -<br>
> <br>
> sup_types = ['Xen', 'XenFV', 'KVM', 'LXC']<br>
> test_dom = "domU"<br>
> bug_sblim = '00007'<br>
> libvirt_cim_ectp_changes = 680<br>
> <br>
> -def pool_init(verify_list, pool_cn, pool_name, virt):<br>
> - ccn = get_typed_class(virt, pool_cn)<br>
> - instid = '%s/%s' %(pool_cn, pool_name)<br>
> - verify_list[ccn]= {'InstanceID' : instid }<br>
> - return verify_list<br>
> - <br>
> def init_vs_pool_values(server, virt):<br>
> - verify_ectp_list = { }<br>
> - hs_ccn = get_typed_class(virt, 'HostSystem')<br>
> - host = live.hostname(server)<br>
> - cs_fields = {<br>
> - 'CreationClassName'
: hs_ccn,<br>
> - 'Name'
: host<br>
> - }<br>
> + verify_ectp_list = {} <br>
> <br>
> - verify_ectp_list[hs_ccn] = cs_fields<br>
> + cn_names = ["VirtualSystemMigrationService",
"ComputerSystem", <br>
> "DiskPool",<br>
> + "NetworkPool",
"ProcessorPool", "MemoryPool"] <br>
> <br>
> - cs_ccn = get_typed_class(virt, 'ComputerSystem')<br>
> - verify_ectp_list[cs_ccn] = cs_fields.copy()<br>
> - verify_ectp_list[cs_ccn]['CreationClassName']
= cs_ccn<br>
> - verify_ectp_list[cs_ccn]['Name'] = test_dom<br>
> + status, host_name, host_ccn = get_host_info(server,
virt)<br>
> + if status != PASS:<br>
> + logger.error("Unable to get host
system instance objects")<br>
> + return FAIL, verify_ectp_list<br>
> <br>
> - vs_ccn = get_typed_class(virt, 'VirtualSystemMigrationService')<br>
> - verify_ectp_list[vs_ccn] = cs_fields.copy()<br>
> - verify_ectp_list[vs_ccn]['CreationClassName']
= vs_ccn<br>
> - verify_ectp_list[vs_ccn]['SystemCreationClassName']
= hs_ccn<br>
> - verify_ectp_list[vs_ccn]['SystemName'] = host<br>
> - verify_ectp_list[vs_ccn]['Name'] = 'MigrationService'<br>
> + #FIXME - get_host_info() should be updated to return
the host instance<br>
> + insts = EnumInstances(server, host_ccn, True)<br>
> + if len(insts) < 1: <br>
> + logger.error("Expected 1 %s instance",
host_ccn)<br>
> + return FAIL, verify_ectp_list<br>
> <br>
> - verify_ectp_list = pool_init(verify_ectp_list, 'DiskPool',
<br>
> -
default_pool_name, virt)<br>
> - verify_ectp_list = pool_init(verify_ectp_list, 'NetworkPool',
<br>
> -
default_network_name, virt)<br>
> - verify_ectp_list = pool_init(verify_ectp_list, 'ProcessorPool',
0, virt)<br>
> - verify_ectp_list = pool_init(verify_ectp_list, 'MemoryPool',
0, virt)<br>
> + verify_ectp_list[host_ccn] = insts<br>
> <br>
> -
<br>
> - return verify_ectp_list<br>
> + for cn_base in cn_names:<br>
> + cn = get_typed_class(virt, cn_base)<br>
> + insts = EnumInstances(server, cn, True)<br>
> + <br>
> + if len(insts) < 1: <br>
> + logger.error("Expected
at least 1 %s instance", cn)<br>
> + return FAIL, verify_ectp_list<br>
> <br>
> -def verify_fields(assoc_val, pllst_index, vs_pool_values):<br>
> + verify_ectp_list[cn] = insts<br>
> +<br>
> + return PASS, verify_ectp_list<br>
> +<br>
> +def verify_fields(assoc_val, managed_ele_values):<br>
> try:<br>
> - field_names = vs_pool_values[pllst_index].keys()<br>
> - values = vs_pool_values[pllst_index]<br>
> - for field in field_names:<br>
> - if values[field] != assoc_val[field]:<br>
> - print_field_error(field,
assoc_val[field], values[field]) <br>
> - return FAIL<br>
> + cn = assoc_val.classname<br>
> + elements = managed_ele_values[cn]<br>
> + <br>
> + for ele in elements:<br>
> + if assoc_val.items() ==
ele.items():<br>
> + managed_ele_values[cn].remove(ele)<br>
> + return PASS,
managed_ele_values<br>
> +<br>
> except Exception, details:<br>
> - logger.error("Exception: In fn verify_fields()
%s", details)<br>
> - return FAIL<br>
> + logger.error("verify_fields() exception:
%s", details)<br>
> + return FAIL, managed_ele_values<br>
> <br>
> - return PASS<br>
> -<br>
> -def verify_cs_hs_mig_fields(assoc_info, vs_pool_values):<br>
> - try:<br>
> - pllst_index = assoc_info[0]['CreationClassName']<br>
> - assoc_val = None <br>
> - if 'HostSystem' in pllst_index or \<br>
> - 'VirtualSystemMigrationService'
in pllst_index:<br>
> - if len(assoc_info) != 1:<br>
> - logger.error("'%s'
returned '%d' records, expected 1", <br>
> -
pllst_index, len(assoc_info)) <br>
> - return FAIL<br>
> - assoc_val = assoc_info[0]<br>
> - else: <br>
> - # For ComputerSystem info<br>
> - for inst in assoc_info:<br>
> - if inst['Name']
== test_dom:<br>
> - assoc_val
= inst<br>
> - break<br>
> - except Exception, details:<br>
> - logger.error("Exception: In fn verify_cs_hs_mig_fields()
%<br>
> s", details)<br>
> - return FAIL<br>
> -<br>
> - if assoc_val == None:<br>
> - return FAIL<br>
> -<br>
> - return verify_fields(assoc_val, pllst_index, vs_pool_values)<br>
> + logger.error("%s not in expected list %s",
assoc_val, elements)<br>
> + return FAIL, managed_ele_values<br>
> <br>
> def get_proflist(server, reg_classname, virt):<br>
> profiles_instid_list = []<br>
> @@ -150,7 +115,7 @@<br>
> len_prof_list = 7
<br>
> if len(proflist) < len_prof_list:<br>
> logger.error("'%s'
returned '%d' '%s' objects, expected<br>
> atleast %d",<br>
> -
reg_classname, len(proflist), 'Profile', <br>
> len_prof_list)<br>
> +
reg_classname, len(proflist), 'Profile', <br>
> len_prof_list)<br>
> status = FAIL<br>
> <br>
> except Exception, detail:<br>
> @@ -164,51 +129,6 @@<br>
> profiles_instid_list = [ profile.InstanceID for
profile in proflist ] <br>
> <br>
> return status, profiles_instid_list <br>
> -<br>
> -<br>
> -def verify_ectp_assoc(server, virt):<br>
> - reg_classname = get_typed_class(virt, "RegisteredProfile")<br>
> - an = get_typed_class(virt,"ElementConformsToProfile")<br>
> -<br>
> - status, inst_lst = get_proflist(server, reg_classname,
virt)<br>
> - if status != PASS:<br>
> - return status<br>
> -<br>
> - verify_ectp_list = init_vs_pool_values(server, virt)<br>
> - for devid in inst_lst :<br>
> - logger.info("Verifying '%s' with
'%s'", an, devid)<br>
> - try:<br>
> - assoc_info = assoc.Associators(server,
<br>
> -
an, <br>
> -
reg_classname,<br>
> -
InstanceID = devid) <br>
> - if len(assoc_info) <
1:<br>
> - ret_val,
linux_cs = check_sblim(server, virt)<br>
> - if ret_val
!= PASS:<br>
> - logger.error("
'%s' returned (%d) '%s' objects", an, <br>
> -
len(assoc_info), reg_classname)<br>
> - return
FAIL<br>
> - else:<br>
> - return
XFAIL_RC(bug_sblim) <br>
> - break<br>
> -<br>
> - if 'DSP1059' in devid or
'DSP1045' in devid:<br>
> - instid
= assoc_info[0]['InstanceID']<br>
> - index, other
= instid.split("/")<br>
> - cn = get_typed_class(virt,
index)<br>
> - status =
verify_fields(assoc_info[0], cn, verify_ectp_list)<br>
> - else:<br>
> - ccn = assoc_info[0]['CreationClassName']<br>
> - status =
verify_cs_hs_mig_fields(assoc_info, <br>
> verify_ectp_list)<br>
> -<br>
> - if status != PASS:<br>
> - break<br>
> -<br>
> - except Exception, detail:<br>
> - logger.error(CIM_ERROR_ASSOCIATORS,
an)<br>
> - logger.error("Exception:
%s" % detail)<br>
> - status = FAIL<br>
> - return status<br>
> <br>
> @do_main(sup_types)<br>
> def main():<br>
> @@ -232,11 +152,54 @@<br>
> logger.error('Unable to start domain
%s' % test_dom)<br>
> return FAIL<br>
> <br>
> -<br>
> prev_namespace = Globals.CIM_NS<br>
> Globals.CIM_NS = 'root/interop'<br>
> <br>
> - status = verify_ectp_assoc(server, virt)<br>
> + reg_classname = get_typed_class(virt, "RegisteredProfile")<br>
> + an = get_typed_class(virt,"ElementConformsToProfile")<br>
> +<br>
> + status, prof_inst_lst = get_proflist(server, reg_classname,
virt)<br>
> + if status != PASS:<br>
> + return status<br>
> +<br>
> + status, verify_ectp_list = init_vs_pool_values(server,
virt)<br>
> + if status != PASS:<br>
> + Globals.CIM_NS = prev_namespace<br>
> + cxml.destroy(server)<br>
> + cxml.undefine(server)<br>
> + return status<br>
> +<br>
> + for prof_id in prof_inst_lst:<br>
> + logger.info("Verifying '%s' with
'%s'", an, prof_id)<br>
> + try:<br>
> + assoc_info = assoc.Associators(server,<br>
> +
an,<br>
> +
reg_classname,<br>
> +
InstanceID = prof_id)<br>
> + if len(assoc_info) <
1:<br>
> + ret_val,
linux_cs = check_sblim(server, virt)<br>
> + if ret_val
!= PASS:<br>
> + logger.error("
'%s' returned (%d) '%s' objects", an,<br>
> +
len(assoc_info), reg_classname)<br>
> + return
FAIL<br>
> + else:<br>
> + return
XFAIL_RC(bug_sblim)<br>
> + break<br>
> +<br>
> + for inst in assoc_info:<br>
> + status, verify_ectp_list
= verify_fields(inst, <br>
> verify_ectp_list)<br>
> + if status
!= PASS:<br>
> + raise
Exception("Failed to verify instance") <br>
> +<br>
> + except Exception, detail:<br>
> + logger.error("Exception:
%s" % detail)<br>
> + status = FAIL<br>
> +<br>
> + if status == PASS:<br>
> + for k, l in verify_ectp_list.iteritems():<br>
> + if len(l) != 0:<br>
> + logger.error("%s
items weren't returned: %s", k, l)<br>
> + status =
FAIL<br>
> <br>
> Globals.CIM_NS = prev_namespace<br>
> cxml.destroy(server)<br>
> <br>
> _______________________________________________<br>
> Libvirt-cim mailing list<br>
> Libvirt-cim@redhat.com<br>
> https://www.redhat.com/mailman/listinfo/libvirt-cim<br>
</font></tt>