Currently the test only logs in, runs a given script and fails if the script takes too long to exit or if its exit status is nonzero. The test expects these parameters: autoit_binary: Path to AutoIt binary in the guest. autoit_script: Path to script in the host. autoit_script_params: Command line parameters to send to the script. autoit_script_timeout: The time duration (in seconds) to wait for the script to exit. The test code can be extended later to add more features. Signed-off-by: Michael Goldish <mgoldish@xxxxxxxxxx> --- client/tests/kvm/kvm.py | 1 + client/tests/kvm/kvm_tests.py | 66 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 67 insertions(+), 0 deletions(-) diff --git a/client/tests/kvm/kvm.py b/client/tests/kvm/kvm.py index 070e463..4930e80 100644 --- a/client/tests/kvm/kvm.py +++ b/client/tests/kvm/kvm.py @@ -56,6 +56,7 @@ class kvm(test.test): "linux_s3": test_routine("kvm_tests", "run_linux_s3"), "stress_boot": test_routine("kvm_tests", "run_stress_boot"), "timedrift": test_routine("kvm_tests", "run_timedrift"), + "autoit": test_routine("kvm_tests", "run_autoit"), } # Make it possible to import modules from the test's bindir diff --git a/client/tests/kvm/kvm_tests.py b/client/tests/kvm/kvm_tests.py index 9cd01e2..743652d 100644 --- a/client/tests/kvm/kvm_tests.py +++ b/client/tests/kvm/kvm_tests.py @@ -776,3 +776,69 @@ def run_timedrift(test, params, env): if drift > drift_threshold_after_rest: raise error.TestFail("Time drift too large after rest period: %.2f%%" % drift_total) + + +def run_autoit(test, params, env): + """ + A wrapper for AutoIt scripts. + + 1) Log into a guest. + 2) Run AutoIt script. + 3) Wait for script execution to complete. + 4) Pass/fail according to exit status of script. + + @param test: KVM test object. + @param params: Dictionary with test parameters. + @param env: Dictionary with the test environment. + """ + vm = kvm_utils.env_get_vm(env, params.get("main_vm")) + if not vm: + raise error.TestError("VM object not found in environment") + if not vm.is_alive(): + raise error.TestError("VM seems to be dead; Test requires a living VM") + + logging.info("Waiting for guest to be up...") + + session = kvm_utils.wait_for(vm.remote_login, 240, 0, 2) + if not session: + raise error.TestFail("Could not log into guest") + + try: + logging.info("Logged in; starting script...") + + # Collect test parameters + binary = params.get("autoit_binary") + script = params.get("autoit_script") + script_params = params.get("autoit_script_params") + timeout = float(params.get("autoit_script_timeout", 600)) + + # Send AutoIt script to guest (this code will be replaced once we + # support sending files to Windows guests) + session.sendline("del script.au3") + file = open(kvm_utils.get_path(test.bindir, script)) + for line in file.readlines(): + # Insert a '^' before each character + line = "".join("^" + c for c in line.rstrip()) + if line: + # Append line to the file + session.sendline("echo %s>>script.au3" % line) + file.close() + + session.read_nonblocking(0.1) + + command = "cmd /c %s script.au3 %s" % (binary, script_params) + + logging.info("---------------- Script output ----------------") + status = session.get_command_status(command, + print_func=logging.info, + timeout=timeout) + logging.info("---------------- End of script output ----------------") + + if status is None: + raise error.TestFail("Timeout expired before script execution " + "completed (or something weird happened)") + if status != 0: + raise error.TestFail("Script execution failed") + + finally: + session.close() -- 1.5.4.1 -- 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