- 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.

Signed-off-by: Michael Goldish <mgold...@redhat.com>
---
 client/tests/kvm/tests/unattended_install.py |   64 +++++++++++--------------
 1 files changed, 28 insertions(+), 36 deletions(-)

diff --git a/client/tests/kvm/tests/unattended_install.py 
b/client/tests/kvm/tests/unattended_install.py
index 9617603..57d3d00 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
 from autotest_lib.client.common_lib import error
-import kvm_utils, kvm_test_utils
+import kvm_utils, kvm_test_utils, kvm_vm
 
 
+...@error.context_aware
 def run_unattended_install(test, params, env):
     """
     Unattended install test:
@@ -13,47 +14,38 @@ 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))
-    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
-        time.sleep(1)
+        try:
+            client.connect((vm.get_address(), port))
+            if client.recv(1024) == "done":
+                break
+        except (socket.error, kvm_vm.VMAddressError):
+            pass
         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)
+        time.sleep(10)
     else:
-        raise error.TestFail('Timeout elapsed while waiting for install to '
-                             'finish.')
+        raise error.TestFail("Timeout elapsed while waiting for installation "
+                             "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 majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to