Sometimes, we need to run a test when doing operations on a running VM ( such as migrate the vm during its rebooting ). So this patch introduce a simple warpper BackgroundTest to run a specified test in the background through a dedicated thread, it also records the exception raised in the thead and raise it when master call join(). Signed-off-by: Jason Wang <jasowang@xxxxxxxxxx> --- client/tests/kvm/kvm_test_utils.py | 44 +++++++++++++++++++++++++++++++++++- 1 files changed, 43 insertions(+), 1 deletions(-) diff --git a/client/tests/kvm/kvm_test_utils.py b/client/tests/kvm/kvm_test_utils.py index 5412aac..9f508b9 100644 --- a/client/tests/kvm/kvm_test_utils.py +++ b/client/tests/kvm/kvm_test_utils.py @@ -21,7 +21,7 @@ More specifically: @copyright: 2008-2009 Red Hat Inc. """ -import time, os, logging, re, commands +import time, os, logging, re, commands, threading from autotest_lib.client.common_lib import error from autotest_lib.client.bin import utils import kvm_utils, kvm_vm, kvm_subprocess, scan_results @@ -505,3 +505,45 @@ def run_autotest(vm, session, control_path, timeout, outputdir): e_msg = ("Tests %s failed during control file execution" % " ".join(bad_results)) raise error.TestFail(e_msg) + +class BackgroundTest: + """ + This class would run a test in background through a dedicated thread. + """ + + def __init__(self, func, params): + """ + Initialize the object and set a few attributes. + """ + self.thread = threading.Thread(target=self.launch, + args=(func, params)) + self.exception = None + + def launch(self, func, params): + """ + Catch and record the exception. + """ + try: + func(*params) + except Exception, e: + self.exception = e + + def start(self): + """ + Run func(params) in a dedicated thread + """ + self.thread.start() + + def join(self): + """ + Wait for the join of thread and raise its exception if any. + """ + self.thread.join() + if self.exception: + raise self.exception + + def is_alive(self): + """ + Check whether the test is still alive. + """ + return self.thread.is_alive() -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html