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 introduces 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(). Changes from v1: - Rebase against latest upstream Signed-off-by: Jason Wang <jasowang@xxxxxxxxxx> --- client/tests/kvm/kvm_test_utils.py | 49 +++++++++++++++++++++++++++++++++++- 1 files changed, 48 insertions(+), 1 deletions(-) diff --git a/client/tests/kvm/kvm_test_utils.py b/client/tests/kvm/kvm_test_utils.py index e7c8d33..218bf31 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, signal +import time, os, logging, re, commands, signal, 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 @@ -564,6 +564,53 @@ def run_autotest(vm, session, control_path, timeout, outputdir): raise error.TestFail(e_msg) +class BackgroundTest(object): + """ + 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() + + def get_loss_ratio(output): """ Get the packet loss ratio from the output of ping -- 1.7.2.3 -- 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