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