<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>