[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]

[tor-commits] [stem/master] Ensure port used by process tests is unused



commit d37810010f4f587dbb848e9ac69ab9f9472e47dd
Author: Damian Johnson <atagar@xxxxxxxxxxxxxx>
Date:   Fri Jul 14 12:40:47 2017 -0700

    Ensure port used by process tests is unused
    
    When running in a loop catalyst occasionally runs into...
    
      OSError: Process terminated: Failed to bind one of the listener ports.
      https://trac.torproject.org/projects/tor/ticket/22902
    
    First guess is that maybe multiple tests pick the same random port, or
    something that's coincidently being used by the system. Tried to use socket's
    connect_ex() for this...
    
      https://stackoverflow.com/questions/19196105/python-how-to-check-if-a-network-port-is-open-on-linux
    
    But doing so causes exactly the binding failures we're attempting to avoid
    (even with a sleep after closing). Weird. Just checking for process instead.
---
 test/integ/process.py | 12 +++++++++---
 1 file changed, 9 insertions(+), 3 deletions(-)

diff --git a/test/integ/process.py b/test/integ/process.py
index 70f414c..dea0b4c 100644
--- a/test/integ/process.py
+++ b/test/integ/process.py
@@ -2,6 +2,8 @@
 Tests the stem.process functions with various use cases.
 """
 
+from __future__ import absolute_import
+
 import binascii
 import hashlib
 import os
@@ -45,7 +47,11 @@ DataDirectory %s
 
 
 def random_port():
-  return str(random.randint(1024, 65535))
+  while True:
+    port = random.randint(1024, 65535)
+
+    if stem.util.system.pid_by_port(port) is None:
+      return str(port)
 
 
 @contextmanager
@@ -552,8 +558,8 @@ class TestProcess(unittest.TestCase):
       except OSError:
         runtime = time.time() - start_time
 
-        if not (runtime > 0.05 and runtime < 1):
-          raise AssertionError('Test should have taken 0.05-1 seconds, took %0.1f instead' % runtime)
+        if not (runtime > 0.05 and runtime < 3):
+          raise AssertionError('Test should have taken 0.05-3 seconds, took %0.1f instead' % runtime)
 
   @asynchronous
   def test_take_ownership_via_pid(tor_cmd):

_______________________________________________
tor-commits mailing list
tor-commits@xxxxxxxxxxxxxxxxxxxx
https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits