[Libvirt-cim] [PATCH] [TEST] #2 Use enumclass.py to cover computersystem.py behavior and update commom_util.py
Kaitlin Rupert
kaitlin at linux.vnet.ibm.com
Wed Sep 3 00:35:31 UTC 2008
> try:
> - cs = computersystem.get_cs_class(virt)(ip, domain_name)
> + cs = get_typed_class(virt, 'ComputerSystem')(ip, domain_name)
Sorry Daisy, I didn't catch that this piece was attempting to get the CS
instance. I misread this the first time around.
This won't work because the __init__ for CIM_MyClass doesn't include the
proper keys in the CIMInstanceName call. What you'll need to do is use
something like:
cn = get_typed_class(virt, 'ComputerSystem')
keys = {"Name" : domain_name,
"CreationClassName" : cn
}
cs = eval('enumclass.' + cn)(ip, keys)
Or you can use the getInstance() function in enumclass, which is
probably a better way to go because I'd like to avoid using eval where
possible.
Deepti - I think this is what's causing the issues you were seeing with
the other two patches.
>
> if cs.Name != domain_name:
> logger.error("VS %s is not found" % domain_name)
> @@ -169,7 +168,7 @@
>
> def poll_for_state_change(server, virt, dom, exp_state, timeout=30):
> dom_cs = None
> - cs = computersystem.get_cs_class(virt)
> + cs = get_typed_class(virt, 'ComputerSystem')
This also won't work, because of the following bit of code in the for loop:
dom_cs = cs(server, name=dom)
Instead, you should use getInstance() here as well.
>
> try:
> for i in range(1, (timeout + 1)):
> diff -r 946fd46b9686 -r 57b15d9bb761 suites/libvirt-cim/lib/XenKvmLib/enumclass.py
> --- a/suites/libvirt-cim/lib/XenKvmLib/enumclass.py Thu Aug 28 14:07:25 2008 -0700
> +++ b/suites/libvirt-cim/lib/XenKvmLib/enumclass.py Sun Aug 31 19:17:56 2008 -0700
> @@ -26,7 +26,7 @@
> import pywbem
> from pywbem.cim_obj import CIMInstanceName
> from XenKvmLib.devices import CIM_Instance
> -from XenKvmLib.classes import get_typed_class
> +from XenKvmLib.classes import get_typed_class, virt_types
> from CimTest import Globals
>
> class CIM_MyClass(CIM_Instance):
> @@ -45,7 +45,32 @@
>
> CIM_Instance.__init__(self, inst)
>
> + def __invoke(self, method, params):
> + try:
> + return self.conn.InvokeMethod(method,
> + self.ref,
> + **params)
If you're using self.conn, etc - you'll need to store these variables
during the __init__ call.
> + except pywbem.CIMError, arg:
> + print 'InvokeMethod(%s): %s' % (method, arg[1])
> + raise
> +
> + def __getattr__(self, attr):
> + if self.inst.has_key(attr):
> + return self.inst[attr]
> + else:
> + return CimExt._Method(self.__invoke, attr)
> +
You'll need to import CimExt.
--
Kaitlin Rupert
IBM Linux Technology Center
kaitlin at linux.vnet.ibm.com
More information about the Libvirt-cim
mailing list