wintest: Cope with nc not timing out even when -w 1 is specified
authorAndrew Bartlett <abartlet@samba.org>
Tue, 14 Feb 2012 22:29:27 +0000 (09:29 +1100)
committerAndrew Bartlett <abartlet@samba.org>
Thu, 16 Feb 2012 04:20:09 +0000 (15:20 +1100)
wintest/wintest.py

index b58cff597daf565ddc298224839e34ed2ed2f910..8b8df2ce434d2b565931d3ff853aa7a4e9116b2a 100644 (file)
@@ -491,8 +491,22 @@ options {
 
     def port_wait(self, hostname, port, retries=200, delay=3, wait_for_fail=False):
         '''wait for a host to come up on the network'''
-        self.retry_cmd("nc -v -z -w 1 %s %u" % (hostname, port), ['succeeded'],
-                       retries=retries, delay=delay, wait_for_fail=wait_for_fail)
+
+        while retries > 0:
+            child = self.pexpect_spawn("nc -v -z -w 1 %s %u" % (hostname, port), crlf=False, timeout=1)
+            i = child.expect(['succeeded', 'failed', pexpect.EOF, pexpect.TIMEOUT])
+            if wait_for_fail:
+                if i > 0:
+                    return
+            else:
+                if i == 0:
+                    return
+
+            time.sleep(delay)
+            retries -= 1
+            self.info("retrying (retries=%u delay=%u)" % (retries, delay))
+
+        raise RuntimeError("gave up waiting for %s:%d" % (hostname, port))
 
     def run_net_time(self, child):
         '''run net time on windows'''