
# HG changeset patch # User Kaitlin Rupert <karupert@us.ibm.com> # Date 1232135486 28800 # Node ID 57f3bc7c3105bb779b41e19b1c03a1e5f214cec1 # Parent 32645e444b323b137d0c0a2a323be574b370d75a [TEST] #3 Update VSMS 04_definesystem_ers.py to use cim_define()
Add a err_rc and err_desc elements to the VirtCIM class. This will allow us to check the error code and error description in case of failed CIM method calls.
Add two functions: set_sys_settings() and set_res_settings(). Theseallow
caller to set the VSSD and RASDs after the initial init() of the VirtCIM class.
Some of the logic in cim_define() was changed to allow the passing of just a single RASD to DefineSystem() (instead of passing all the RASDs).
Updates from 2 to 3: -Rebased on current tree
Updates from 1 to 2: -Create function to verify return code and error description if define fails
Signed-off-by: Kaitlin Rupert <karupert@us.ibm.com>
diff -r 32645e444b32 -r 57f3bc7c3105 suites/libvirt- cim/cimtest/VirtualSystemManagementService/04_definesystem_ers.py --- a/suites/libvirt- cim/cimtest/VirtualSystemManagementService/04_definesystem_ers.py Wed Jan 14 21:29:48 2009 -0800 +++ b/suites/libvirt- cim/cimtest/VirtualSystemManagementService/04_definesystem_ers.py Fri Jan 16 11:51:26 2009 -0800 @@ -23,17 +23,14 @@ #
import sys -import pywbem -from VirtLib import utils -from XenKvmLib import vsms -from XenKvmLib.test_doms import undefine_test_domain -from XenKvmLib.common_util import create_using_definesystem +from pywbem import CIM_ERR_FAILED from CimTest.Globals import logger from XenKvmLib.const import do_main from CimTest.ReturnCodes import PASS, FAIL, XFAIL_RC +from XenKvmLib.vxml import get_class
sup_types = ['Xen', 'KVM', 'XenFV', 'LXC'] -exp_rc = 1 #CMPI_RC_ERR_FAILED +exp_rc = CIM_ERR_FAILED exp_desc = 'Unable to parse embedded object'
@do_main(sup_types) @@ -41,26 +38,28 @@ options = main.options
dname = 'test_domain' - vssd, rasd = vsms.default_vssd_rasd_str(dom_name=dname, virt=options.virt)
- params = {'vssd' : vssd, - 'rasd' : ['wrong'] - } + cxml = get_class(options.virt)(dname)
- exp_err = {'exp_rc' : exp_rc, - 'exp_desc' : exp_desc - } + rasd_list = { "MemResourceAllocationSettingData" : "wrong" } + cxml.set_res_settings(rasd_list)
+ try: + ret = cxml.cim_define(options.ip) + if ret: + raise Exception('DefineSystem returned OK with invalid
+1. libvirt-cim-bounces@redhat.com wrote on 2009-01-17 04:28:12: the params')
- rc = create_using_definesystem(dname, options.ip, params,
ref_config=' ',
- exp_err=exp_err, virt=options.virt) + status = cxml.verify_error_msg(exp_rc, exp_desc) + if status != PASS: + raise Exception('DefineSystem failed for an unexpected reason')
- if rc != PASS: - logger.error('DefineSystem should NOT return OK with a wrong ss input') + except Exception, details: + logger.error(details) + status = FAIL
- undefine_test_domain(dname, options.ip, virt=options.virt) + cxml.undefine(options.ip)
- return rc + return status
if __name__ == "__main__": sys.exit(main()) diff -r 32645e444b32 -r 57f3bc7c3105 suites/libvirt-cim/lib/XenKvmLib/vxml.py --- a/suites/libvirt-cim/lib/XenKvmLib/vxml.py Wed Jan 14 21:29:482009 -0800 +++ b/suites/libvirt-cim/lib/XenKvmLib/vxml.py Fri Jan 16 11:51:262009 -0800 @@ -470,6 +470,8 @@ mem_allocunits, emu_type): self.virt = virt self.domain_name = dom_name + self.err_rc = None + self.err_desc = None self.vssd = vsms.get_vssd_mof(virt, dom_name) self.nasd = vsms.get_nasd_class(virt)(type=net_type, mac=net_mac, @@ -491,11 +493,17 @@ def cim_define(self, ip, ref_conf=None): service = vsms.get_vsms_class(self.virt)(ip) sys_settings = str(self.vssd) - if self.virt == 'LXC' and const.LXC_netns_support is False: - res_settings = [str(self.dasd), str(self.pasd), str(self.masd)] - else: - res_settings = [str(self.dasd), str(self.nasd), - str(self.pasd), str(self.masd)] + + res_settings = [] + if self.dasd is not None: + res_settings.append(str(self.dasd)) + if self.pasd is not None: + res_settings.append(str(self.pasd)) + if self.masd is not None: + res_settings.append(str(self.masd)) + if self.nasd is not None or \ + (self.virt == 'LXC' and const.LXC_netns_support is False): + res_settings.append(str(self.nasd))
if ref_conf is None: ref_conf = ' ' @@ -506,6 +514,8 @@ ReferenceConfiguration=ref_conf) except pywbem.CIMError, (rc, desc): logger.error('Got CIM error %s with return code %s' % (desc, rc)) + self.err_rc = rc + self.err_desc = desc return False
except Exception, details: @@ -523,6 +533,12 @@ target = pywbem.cim_obj.CIMInstanceName(cs_cn, keybindings = keys) try: ret = service.DestroySystem(AffectedSystem=target) + except pywbem.CIMError, (rc, desc): + logger.error('Got CIM error %s with return code %s' % (desc, rc)) + self.err_rc = rc + self.err_desc = desc + return False + except Exception, details: logger.error('Error invoking DestroySystem') logger.error('Got error %s with exception %s' \ @@ -575,6 +591,12 @@ cs.RequestStateChange(RequestedState=req_state_change, TimeoutPeriod=time_period)
+ except pywbem.CIMError, (rc, desc): + logger.error('Got CIM error %s with return code %s' % (desc, rc)) + self.err_rc = rc + self.err_desc = desc + return FAIL + except Exception, detail: logger.error("In fn cim_state_change()") logger.error("Failed to change state of the domain '% s'", cs.Name) @@ -620,6 +642,36 @@ return self.cim_state_change(server, const.CIM_RESET, req_time, poll_time, const.CIM_ENABLE)
+ def set_sys_settings(self, vssd): + self.vssd = vssd + + def set_res_settings(self, rasd_list): + for cn, rasd in rasd_list.iteritems(): + if cn.find("MemResourceAllocationSettingData") >= 0: + self.masd = rasd + elif cn.find("ProcResourceAllocationSettingData") >= 0: + self.pasd = rasd + elif cn.find("DiskResourceAllocationSettingData") >= 0: + self.dasd = rasd + elif cn.find("NetResourceAllocationSettingData") >= 0: + self.nasd = rasd + + def verify_error_msg(self, exp_rc, exp_desc): + try: + rc = int(self.err_rc) + + if rc != exp_rc: + raise Exception("Got rc: %d, exp %d." % (rc, exp_rc)) + + if self.err_desc.find(exp_desc) < 0: + raise Exception("Got desc: '%s', exp '%s'" % (self.err_desc, + exp_desc)) + + except Exception, details: + logger.error(details) + return FAIL + + return PASS
class XenXML(VirtXML, VirtCIM):
_______________________________________________ Libvirt-cim mailing list Libvirt-cim@redhat.com https://www.redhat.com/mailman/listinfo/libvirt-cim