- Use vm.verify_alive() instead of vm.is_alive(). - Use error.context() so that if verify_alive() fails the resulting error message will be clearer. - Make the code a little bit shorter. - Catch VMAddressError (can be raised by vm.get_address()). - Use double quotes for consistency. - Modify debug messages. Changes from v2: - Re-added the decorator error.context_aware Changes from v1: - Rebase against latest upstream Signed-off-by: Michael Goldish <mgoldish@xxxxxxxxxx> --- client/tests/kvm/tests/unattended_install.py | 59 +++++++++++--------------- 1 files changed, 25 insertions(+), 34 deletions(-) diff --git a/client/tests/kvm/tests/unattended_install.py b/client/tests/kvm/tests/unattended_install.py index fdb020a..c115416 100644 --- a/client/tests/kvm/tests/unattended_install.py +++ b/client/tests/kvm/tests/unattended_install.py @@ -1,8 +1,9 @@ import logging, time, socket, re from autotest_lib.client.common_lib import error -import kvm_utils, kvm_test_utils +import kvm_utils, kvm_test_utils, kvm_vm +@xxxxxxxxxxxxxxxxxxx def run_unattended_install(test, params, env): """ Unattended install test: @@ -13,45 +14,32 @@ def run_unattended_install(test, params, env): @param params: Dictionary with the test parameters. @param env: Dictionary with test environment. """ - buf = 1024 vm = env.get_vm(params["main_vm"]) vm.verify_alive() + install_timeout = int(params.get("timeout", 3000)) + post_install_delay = int(params.get("post_install_delay", 0)) port = vm.get_port(int(params.get("guest_port_unattended_install"))) - if params.get("post_install_delay"): - post_install_delay = int(params.get("post_install_delay")) - else: - post_install_delay = 0 - install_timeout = float(params.get("timeout", 3000)) migrate_background = params.get("migrate_background") == "yes" if migrate_background: mig_timeout = float(params.get("mig_timeout", "3600")) mig_protocol = params.get("migration_protocol", "tcp") - logging.info("Starting unattended install watch process. " - "Timeout set to %ds (%d min)", install_timeout, - install_timeout/60) + logging.info("Waiting for installation to finish. Timeout set to %ds " + "(%d min).", install_timeout, install_timeout/60) + error.context("waiting for installation to finish") + start_time = time.time() - time_elapsed = 0 - while time_elapsed < install_timeout: - if not vm.is_alive(): - raise error.TestError("Guest died before end of OS install") + while (time.time() - start_time) < install_timeout: + vm.verify_alive() client = socket.socket(socket.AF_INET, socket.SOCK_STREAM) - addr = vm.get_address() - if addr is not None: - try: - client.connect((addr, port)) - msg = client.recv(1024) - if msg == 'done': - if post_install_delay: - logging.debug("Post install delay specified, " - "waiting %ss...", post_install_delay) - time.sleep(post_install_delay) - break - except socket.error: - pass - + try: + client.connect((vm.get_address(), port)) + if client.recv(1024) == "done": + break + except (socket.error, kvm_vm.VMAddressError): + pass if migrate_background: # Drop the params which may break the migration # Better method is to used dnsmasq to do the unattended installation @@ -66,12 +54,15 @@ def run_unattended_install(test, params, env): else: time.sleep(1) client.close() - end_time = time.time() - time_elapsed = int(end_time - start_time) - - if time_elapsed < install_timeout: - logging.info('Guest reported successful installation after %ds ' - '(%d min)', time_elapsed, time_elapsed/60) else: raise error.TestFail('Timeout elapsed while waiting for install to ' 'finish.') + + time_elapsed = time.time() - start_time + logging.info("Guest reported successful installation after %ds (%d min)", + time_elapsed, time_elapsed/60) + + if post_install_delay: + logging.debug("Post install delay specified, waiting %ss...", + post_install_delay) + time.sleep(post_install_delay) -- 1.7.3.4 -- 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