[PATCH] [TEST] Fix CSI to call handle_sub, sub_ind, and poll_for_ind from ind module

# HG changeset patch # User Kaitlin Rupert <karupert@us.ibm.com> # Date 1260576721 28800 # Node ID f6a811d7118444d411baa03847cb96d8cb483ab4 # Parent bbb978cccd1bd3d08bbb9d5e5ff796771d0bfd77 [TEST] Fix CSI to call handle_sub, sub_ind, and poll_for_ind from ind module No need to have duplicate code in this test case, as these functions already exist in the indications.py module. Signed-off-by: Kaitlin Rupert <karupert@us.ibm.com> diff -r bbb978cccd1b -r f6a811d71184 suites/libvirt-cim/cimtest/ComputerSystemIndication/01_created_indication.py --- a/suites/libvirt-cim/cimtest/ComputerSystemIndication/01_created_indication.py Fri Nov 27 19:24:42 2009 -0200 +++ b/suites/libvirt-cim/cimtest/ComputerSystemIndication/01_created_indication.py Fri Dec 11 16:12:01 2009 -0800 @@ -31,39 +31,12 @@ from XenKvmLib.indication_tester import CIMIndicationSubscription from XenKvmLib.vxml import set_default from XenKvmLib.vxml import get_class +from XenKvmLib.indications import sub_ind, handle_request, poll_for_ind SUPPORTED_TYPES = ['Xen', 'XenFV', 'KVM'] test_dom = "domU" -def sub_ind(ip, virt): - dict = set_default(ip) - ind_names = {"define" : 'ComputerSystemCreatedIndication', - "start" : 'ComputerSystemModifiedIndication', - "destroy" : 'ComputerSystemDeletedIndication' - } - - sub_list = {} - port = 5 - - for ind, iname in ind_names.iteritems(): - ind_name = get_typed_class(virt, iname) - - sub_name = "Test%s" % ind_name - port += 1 - - sub = CIMIndicationSubscription(sub_name, ind_name, - dict['default_ns'], - dict['default_print_ind'], - dict['default_sysname'], - port) - sub.subscribe(dict['default_url'], dict['default_auth']) - logger.info("Watching for %s", iname) - ind_names[ind] = ind_name - sub_list[ind] = sub - - return sub_list, ind_names, dict - def gen_ind(test_dom, ip, vtype, ind, cxml): if ind == "define": ret = cxml.cim_define(ip) @@ -85,57 +58,6 @@ return FAIL -def handle_request(sub, ind_name, dict, exp_ind_ct): - #sfcb delivers indications to all registrations, even if the indication - #isn't what the registration was subscribed to. So, for modified and - #deleted indications, we must loop through until the indication we are - #looking for is triggered. - for i in range(0, exp_ind_ct): - sub.server.handle_request() - if len(sub.server.indications) < 1: - logger.error("No valid indications received") - return FAIL - - if str(sub.server.indications[0]) == ind_name: - sub.unsubscribe(dict['default_auth']) - logger.info("Cancelling subscription for %s", ind_name) - return PASS - else: - sub.server.indications.remove(sub.server.indications[0]) - - logger.error("Did not recieve indication %s", ind_name) - return FAIL - -def poll_for_ind(pid, ind_name): - status = FAIL - for i in range(0, 20): - pw = waitpid(pid, WNOHANG) - - # If pid exits, waitpid returns [pid, return_code] - # If pid is still running, waitpid returns [0, 0] - # Only return a success if waitpid returns the expected pid - # and the return code is 0. - if pw[0] == pid and pw[1] == 0: - logger.info("Great, got %s indication successfuly", ind_name) - status = PASS - break - elif pw[1] == 0 and i < 19: - if i % 10 == 0: - logger.info("In child, waiting for %s indication", ind_name) - sleep(1) - else: - # Time is up and waitpid never returned the expected pid - if pw[0] != pid: - logger.error("Waited too long for %s indication", ind_name) - kill(pid, SIGKILL) - else: - logger.error("Received indication error: %d", pw[1]) - - status = FAIL - break - - return status - @do_main(SUPPORTED_TYPES) def main(): options = main.options @@ -143,20 +65,24 @@ virt = options.virt status = FAIL - sub_list, ind_names, dict = sub_ind(ip, virt) - - ind_list = ["define", "start", "destroy"] + ind_names = {"define" : 'ComputerSystemCreatedIndication', + "start" : 'ComputerSystemModifiedIndication', + "destroy" : 'ComputerSystemDeletedIndication' + } cxml = get_class(virt)(test_dom) - for ind in ind_list: + sub_list, ind_names, dict = sub_ind(ip, virt, ind_names) + for ind in ind_names.keys(): + sub = sub_list[ind] ind_name = ind_names[ind] try: pid = fork() if pid == 0: - status = handle_request(sub, ind_name, dict, len(ind_list)) + status = handle_request(sub, ind_name, dict, + len(ind_names.keys())) if status != PASS: _exit(1) @@ -180,6 +106,9 @@ logger.error("Exception: %s", details) status = FAIL + #Give threads time to execute before unsubscribing + sleep(30) + #Make sure all subscriptions are really unsubscribed for ind, sub in sub_list.iteritems(): sub.unsubscribe(dict['default_auth'])

This test gives a false positive: Starting test suite: libvirt-cim Cleaned log files. Testing KVM hypervisor -------------------------------------------------------------------- ComputerSystemIndication - 01_created_indication.py: PASS -------------------------------------------------------------------- [cimtest]# cat suites/libvirt-cim/cimtest/ComputerSystemIndication/cimtest.log Mon, 14 Dec 2009 04:47:48:TEST LOG:INFO - ====01_created_indication.py Log==== Mon, 14 Dec 2009 04:47:48:TEST LOG:INFO - Watching for ComputerSystemDeletedIndication Mon, 14 Dec 2009 04:47:49:TEST LOG:INFO - Watching for ComputerSystemModifiedIndication Mon, 14 Dec 2009 04:47:49:TEST LOG:INFO - Watching for ComputerSystemCreatedIndication Mon, 14 Dec 2009 04:47:49:TEST LOG:ERROR - Got CIM error CIM_ERR_NOT_FOUND: Referenced domain `domU' does not exist: Domain not found with return code 6 Mon, 14 Dec 2009 04:47:49:TEST LOG:ERROR - Unable to destroy domU Mon, 14 Dec 2009 04:47:49:TEST LOG:ERROR - Exception: Unable to generate indication Mon, 14 Dec 2009 04:47:49:TEST LOG:ERROR - Failed to start domain: domU Mon, 14 Dec 2009 04:47:49:TEST LOG:ERROR - Exception: Unable to generate indication Mon, 14 Dec 2009 04:47:49:TEST LOG:INFO - Cancelling subscription for KVM_ComputerSystemCreatedIndication Mon, 14 Dec 2009 04:47:49:TEST LOG:INFO - Great, got 'define' indication successfully Mon, 14 Dec 2009 04:48:20:TEST LOG:INFO - Cancelling subscription for KVM_ComputerSystemDeletedIndication Mon, 14 Dec 2009 04:48:20:TEST LOG:INFO - Cancelling subscription for KVM_ComputerSystemCreatedIndication Mon, 14 Dec 2009 04:48:20:TEST LOG:INFO - Cancelling subscription for KVM_ComputerSystemModifiedIndication The test needs to fail as there is an exception while destroying the domain. The order in which the define, destroy, start is not proper because of which the test fails. -- Thanks and Regards, Deepti B. Kalakeri IBM Linux Technology Center deeptik@linux.vnet.ibm.com

Oh, yuck! Thanks for catching this! Agreed - this test should fail if there's a problem destroying / starting the domain. I'll rework this patch. Deepti B Kalakeri wrote:
This test gives a false positive:
Starting test suite: libvirt-cim Cleaned log files.
Testing KVM hypervisor -------------------------------------------------------------------- ComputerSystemIndication - 01_created_indication.py: PASS --------------------------------------------------------------------
[cimtest]# cat suites/libvirt-cim/cimtest/ComputerSystemIndication/cimtest.log Mon, 14 Dec 2009 04:47:48:TEST LOG:INFO - ====01_created_indication.py Log==== Mon, 14 Dec 2009 04:47:48:TEST LOG:INFO - Watching for ComputerSystemDeletedIndication Mon, 14 Dec 2009 04:47:49:TEST LOG:INFO - Watching for ComputerSystemModifiedIndication Mon, 14 Dec 2009 04:47:49:TEST LOG:INFO - Watching for ComputerSystemCreatedIndication Mon, 14 Dec 2009 04:47:49:TEST LOG:ERROR - Got CIM error CIM_ERR_NOT_FOUND: Referenced domain `domU' does not exist: Domain not found with return code 6 Mon, 14 Dec 2009 04:47:49:TEST LOG:ERROR - Unable to destroy domU Mon, 14 Dec 2009 04:47:49:TEST LOG:ERROR - Exception: Unable to generate indication Mon, 14 Dec 2009 04:47:49:TEST LOG:ERROR - Failed to start domain: domU Mon, 14 Dec 2009 04:47:49:TEST LOG:ERROR - Exception: Unable to generate indication Mon, 14 Dec 2009 04:47:49:TEST LOG:INFO - Cancelling subscription for KVM_ComputerSystemCreatedIndication Mon, 14 Dec 2009 04:47:49:TEST LOG:INFO - Great, got 'define' indication successfully Mon, 14 Dec 2009 04:48:20:TEST LOG:INFO - Cancelling subscription for KVM_ComputerSystemDeletedIndication Mon, 14 Dec 2009 04:48:20:TEST LOG:INFO - Cancelling subscription for KVM_ComputerSystemCreatedIndication Mon, 14 Dec 2009 04:48:20:TEST LOG:INFO - Cancelling subscription for KVM_ComputerSystemModifiedIndication
The test needs to fail as there is an exception while destroying the domain. The order in which the define, destroy, start is not proper because of which the test fails.
-- Kaitlin Rupert IBM Linux Technology Center kaitlin@linux.vnet.ibm.com
participants (2)
-
Deepti B Kalakeri
-
Kaitlin Rupert