[PATCH] python/osmo-python-tests[master]: speed up python tests more than 10 fold by sleeping less

Neels Hofmeyr gerrit-no-reply at lists.osmocom.org
Mon Feb 27 01:13:32 UTC 2017


Review at  https://gerrit.osmocom.org/1924

speed up python tests more than 10 fold by sleeping less

The VTYInteract tests gave a constant sleep(1) grace period for the process to
startup. This caused the test to take minutes for no reason at all.

Add code to VTYInteract._connect_socket() to try and connect right away,
retrying up to three seconds in .1 second intervals. This flies through most
tests without any sleep() at all.

When TCP socket debugging is switched on, also print how many connection tries
it took to connect the VTY socket.

Note that the openbsc python tests also add some sleep()s that also need to be
removed to benefit from this.

Change-Id: Icc337f52a93d5fe31fc4ff235ccaf4e0fe75fa39
---
M osmopy/obscvty.py
M osmopy/osmodumpdoc.py
M osmopy/osmotestconfig.py
M osmopy/osmotestvty.py
4 files changed, 22 insertions(+), 8 deletions(-)


  git pull ssh://gerrit.osmocom.org:29418/python/osmo-python-tests refs/changes/24/1924/1

diff --git a/osmopy/obscvty.py b/osmopy/obscvty.py
index 1f9db09..e5a953d 100755
--- a/osmopy/obscvty.py
+++ b/osmopy/obscvty.py
@@ -20,6 +20,7 @@
 import socket
 import sys, subprocess
 import os
+import time
 
 """VTYInteract: interact with an osmocom vty
 
@@ -71,13 +72,29 @@
     def _connect_socket(self):
         if self.socket is not None:
             return
-        self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
-        self.socket.setblocking(1)
-        self.socket.connect((self.host, self.port))
+        retries = 30
+        took = 0
+        while True:
+            took += 1
+            try:
+                self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+                self.socket.setblocking(1)
+                self.socket.connect((self.host, self.port))
+            except IOError:
+                retries -= 1
+                if retries <= 0:
+                    raise
+                # possibly the binary hasn't launched yet
+                if debug_tcp_sockets:
+                    print "Connecting socket failed, retrying..."
+                time.sleep(.1)
+                continue
+            break
+
         if debug_tcp_sockets:
             VTYInteract.all_sockets.append(self.socket)
-            print "Socket: connected to %s:%d %r (%d sockets open)" % (
-                    self.host, self.port, self.socket,
+            print "Socket: in %d tries, connected to %s:%d %r (%d sockets open)" % (
+                    took, self.host, self.port, self.socket,
                     len(VTYInteract.all_sockets))
         self.socket.recv(4096)
 
diff --git a/osmopy/osmodumpdoc.py b/osmopy/osmodumpdoc.py
index d9d52b5..0ff1f6b 100644
--- a/osmopy/osmodumpdoc.py
+++ b/osmopy/osmodumpdoc.py
@@ -48,7 +48,6 @@
             print >> sys.stderr, "Skipping app %s" % appname
             failures += 1
         else:
-            time.sleep(1)
             try:
                 dump_doc(app[2], app[0], 'doc/%s_vty_reference.xml' % appname)
                 successes += 1
diff --git a/osmopy/osmotestconfig.py b/osmopy/osmotestconfig.py
index 9389647..5e19a40 100644
--- a/osmopy/osmotestconfig.py
+++ b/osmopy/osmotestconfig.py
@@ -55,7 +55,6 @@
             print "Verifying %s, test %s" % (' '.join(cmd), run_test.__name__)
 
         proc = osmoutil.popen_devnull(cmd)
-        time.sleep(1)
         end = app_desc[2]
         port = app_desc[0]
         vty = obscvty.VTYInteract(end, "127.0.0.1", port)
diff --git a/osmopy/osmotestvty.py b/osmopy/osmotestvty.py
index 9f8dd0a..e513c05 100644
--- a/osmopy/osmotestvty.py
+++ b/osmopy/osmotestvty.py
@@ -41,7 +41,6 @@
         except OSError:
             print >> sys.stderr, "Current directory: %s" % os.getcwd()
             print >> sys.stderr, "Consider setting -b"
-        time.sleep(1)
 
         appstring = osmoappdesc.vty_app[2]
         appport = osmoappdesc.vty_app[0]

-- 
To view, visit https://gerrit.osmocom.org/1924
To unsubscribe, visit https://gerrit.osmocom.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: Icc337f52a93d5fe31fc4ff235ccaf4e0fe75fa39
Gerrit-PatchSet: 1
Gerrit-Project: python/osmo-python-tests
Gerrit-Branch: master
Gerrit-Owner: Neels Hofmeyr <nhofmeyr at sysmocom.de>


More information about the gerrit-log mailing list