[PATCH] [TEST] Fixing the 06_paused_active_suspend.py tc of ComputerSystem

# HG changeset patch # User Deepti B. Kalakeri <deeptik@linux.vnet.ibm.com> # Date 1214925380 25200 # Node ID 16bbf4d2f48e04334471805a524cfb653a391dd8 # Parent cc7716fa4252235924577a0e9bb16c89fc55870b [TEST] Fixing the 06_paused_active_suspend.py tc of ComputerSystem. 1) Updated the tc to use the poll_for_state_change() function. 2) Included the get_state_values() functions that returns the enable_state, req_state values. 3) Included the extra sleep bcs sometimes the provider is not able to suspend the domain immediately even though the enable_state is set to 2 and hence the tc was failing intermittently. 4) Removed cxml.undefine() call since it was not req. 5) Fixed Indentation. Signed-off-by: Deepti B. Kalakeri <deeptik@linux.vnet.ibm.com> ~ diff -r cc7716fa4252 -r 16bbf4d2f48e suites/libvirt-cim/cimtest/ComputerSystem/03_defineVS.py --- a/suites/libvirt-cim/cimtest/ComputerSystem/03_defineVS.py Mon Jun 30 23:07:06 2008 -0700 +++ b/suites/libvirt-cim/cimtest/ComputerSystem/03_defineVS.py Tue Jul 01 08:16:20 2008 -0700 @@ -55,6 +55,7 @@ def main(): raise Exception('No cs instance returned') for dom in cs: if dom.Name == test_dom: + Globals.logger.error("Deepti %s", dom.Name) enabState = dom.EnabledState status = PASS break diff -r cc7716fa4252 -r 16bbf4d2f48e suites/libvirt-cim/cimtest/ComputerSystem/06_paused_active_suspend.py --- a/suites/libvirt-cim/cimtest/ComputerSystem/06_paused_active_suspend.py Mon Jun 30 23:07:06 2008 -0700 +++ b/suites/libvirt-cim/cimtest/ComputerSystem/06_paused_active_suspend.py Tue Jul 01 08:16:20 2008 -0700 @@ -48,103 +48,97 @@ from XenKvmLib.test_doms import destroy_ from XenKvmLib.test_doms import destroy_and_undefine_all from CimTest.Globals import logger from CimTest.Globals import do_main -from XenKvmLib.common_util import call_request_state_change +from XenKvmLib.common_util import call_request_state_change, \ +poll_for_state_change from CimTest.ReturnCodes import PASS, FAIL, XFAIL_RC sup_types = ['Xen', 'KVM', 'XenFV'] test_dom = "DomST1" mem = 128 # MB -# Keeping the bug no for future reference -# bug_no_req_change_method = "90559" bug_no_req_change_prop = "00002" START_STATE = 2 FINAL_STATE = 9 REQUESTED_STATE = FINAL_STATE TIME = "00000000000000.000000:000" +def get_state_values(server, virt): + enable_state = req_state = None + try: + cs = computersystem.get_cs_class(virt)(server, test_dom) + if cs.Name == test_dom: + enable_state = cs.EnabledState + req_state = cs.RequestedState + else: + logger.error("ERROR: VS %s not found" % test_dom) + except Exception, detail: + logger.error("Exception variable: %s" % detail) + return enable_state, req_state + @do_main(sup_types) def main(): options = main.options status = FAIL + server = options.ip + virt = options.virt - cxml = vxml.get_class(options.virt)(test_dom, mem) + cxml = vxml.get_class(virt)(test_dom, mem) -#Create VS + #Create VS try: - ret = cxml.create(options.ip) + ret = cxml.create(server) if not ret: logger.error("ERROR: VS %s was not created" % test_dom) return status - cs = computersystem.get_cs_class(options.virt)(options.ip, test_dom) - if cs.Name == test_dom: - from_State = cs.EnabledState - else: - logger.error("ERROR: VS %s not found" % test_dom) - return status - except Exception, detail: - logger.error("Exception variable: %s" % detail) - cxml.destroy(options.ip) - cxml.undefine(options.ip) - return status - -#Suspend the VS - rc = call_request_state_change(test_dom, options.ip, REQUESTED_STATE, - TIME, options.virt) - if rc != 0: - logger.error("Unable to suspend dom %s using RequestedStateChange()", test_dom) - cxml.destroy(options.ip) - cxml.undefine(options.ip) - return status -#Polling for the value of EnabledState to be set to 9. -#We need to wait for the EnabledState to be set appropriately since -#it does not get set immediatley to value of 9 when suspended. - timeout = 10 - try: - - for i in range(1, (timeout + 1)): - sleep(1) - cs = computersystem.get_cs_class(options.virt)(options.ip, test_dom) - if cs.Name == test_dom: - to_RequestedState = cs.RequestedState - enabledState = cs.EnabledState - else: - logger.error("VS %s not found" % test_dom) - return status - if enabledState == FINAL_STATE: - status = PASS - break - except Exception, detail: logger.error("Exception variable: %s" % detail) return status + + status = poll_for_state_change(server, virt, test_dom, + START_STATE) + from_State, req_state = get_state_values(server, virt) - if enabledState != FINAL_STATE: - logger.error("EnabledState has %i instead of %i", enabledState, FINAL_STATE) - logger.error("Try to increase the timeout and run the test again") - + if status != PASS or from_State == None or req_state == None: + cxml.destroy(server) + return status + + sleep(10) + #Suspend the VS + status = call_request_state_change(test_dom, server, REQUESTED_STATE, + TIME, virt) if status != PASS: - ret = cxml.destroy(options.ip) - cxml.undefine(options.ip) + logger.error("Unable to suspend dom %s using RequestedStateChange()", + test_dom) + cxml.destroy(server) return status -# Success: -# if -# From state == 9 -# To state == 2 -# Enabled_state == RequestedState + #Polling for the value of EnabledState to be set to 9. + #We need to wait for the EnabledState to be set appropriately since + #it does not get set immediatley to value of 9 when suspended. + status = poll_for_state_change(server, virt, test_dom, + FINAL_STATE, timeout=40) + enabledState, to_RequestedState = get_state_values(server, virt) + + if status != PASS or enabledState == None or to_RequestedState == None: + ret = cxml.destroy(server) + return status + + # Success: + # if + # From state == 9 + # To state == 2 + # Enabled_state == RequestedState if from_State == START_STATE and \ to_RequestedState == FINAL_STATE and \ enabledState == to_RequestedState: status = PASS else: - logger.error("ERROR: VS %s transition from suspend State to Activate state \ - was not Successful" % test_dom) + logger.error("VS %s transition from Suspend State to Activate State" + " was not Successful" % test_dom) # Replace the status with FAIL once the bug is fixed. status = XFAIL_RC(bug_no_req_change_prop) - ret = cxml.destroy(options.ip) - cxml.undefine(options.ip) + + ret = cxml.destroy(server) return status - if __name__ == "__main__": sys.exit(main())

Deepti B. Kalakeri wrote:
# HG changeset patch # User Deepti B. Kalakeri <deeptik@linux.vnet.ibm.com> # Date 1214925380 25200 # Node ID 16bbf4d2f48e04334471805a524cfb653a391dd8 # Parent cc7716fa4252235924577a0e9bb16c89fc55870b [TEST] Fixing the 06_paused_active_suspend.py tc of ComputerSystem.
Sorry for the late review on this Deepti - there's a change that needs to be done in the provider (see the "For pause, reboot, and enable add support for guests in the NOSTATE state" thread).
1) Updated the tc to use the poll_for_state_change() function. 2) Included the get_state_values() functions that returns the enable_state, req_state values. 3) Included the extra sleep bcs sometimes the provider is not able to suspend the domain immediately even though the enable_state is set to 2 and hence the tc was failing intermittently.
This sleep is not needed. A provider change is needed so that the provider pauses the guest when the guest is in the "no sleep" state.
4) Removed cxml.undefine() call since it was not req. 5) Fixed Indentation.
Signed-off-by: Deepti B. Kalakeri <deeptik@linux.vnet.ibm.com>
~
diff -r cc7716fa4252 -r 16bbf4d2f48e suites/libvirt-cim/cimtest/ComputerSystem/03_defineVS.py --- a/suites/libvirt-cim/cimtest/ComputerSystem/03_defineVS.py Mon Jun 30 23:07:06 2008 -0700 +++ b/suites/libvirt-cim/cimtest/ComputerSystem/03_defineVS.py Tue Jul 01 08:16:20 2008 -0700 @@ -55,6 +55,7 @@ def main(): raise Exception('No cs instance returned') for dom in cs: if dom.Name == test_dom: + Globals.logger.error("Deepti %s", dom.Name)
I think this is an extraneous debug statement. =)
enabState = dom.EnabledState status = PASS break diff -r cc7716fa4252 -r 16bbf4d2f48e suites/libvirt-cim/cimtest/ComputerSystem/06_paused_active_suspend.py
- except Exception, detail: logger.error("Exception variable: %s" % detail) return status + + status = poll_for_state_change(server, virt, test_dom, + START_STATE) + from_State, req_state = get_state_values(server, virt)
Instead of getting the CS instance again in get_state_values(), what do you think about modifying poll_for_state() so that it returns the CS reference (since poll_for_state() has to get an instance to check the state value anyway). It seems like this would be useful - in most cases, if you need to call poll_for_state(), you'll probably need the cs ref later on in the test case.
- if enabledState != FINAL_STATE: - logger.error("EnabledState has %i instead of %i", enabledState, FINAL_STATE) - logger.error("Try to increase the timeout and run the test again") - + if status != PASS or from_State == None or req_state == None: + cxml.destroy(server) + return status + + sleep(10)
This is not needed. The test case will fail until the provider fix is in, but it's fine to note that in the commit log. -- Kaitlin Rupert IBM Linux Technology Center kaitlin@linux.vnet.ibm.com
participants (2)
-
Deepti B. Kalakeri
-
Kaitlin Rupert