]> granicus.if.org Git - python/commitdiff
Fix a race condition in this test -- instead of assuming that it will take
authorGuido van Rossum <guido@python.org>
Wed, 4 Apr 2007 17:43:02 +0000 (17:43 +0000)
committerGuido van Rossum <guido@python.org>
Wed, 4 Apr 2007 17:43:02 +0000 (17:43 +0000)
the test server thread at most 0.5 seconds to get ready, use an event
variable.

Lib/test/test_socketserver.py

index 9a67a358b7b0f29abd31f4c3ea2fddcd79fccf64..bfcdf98a5cae748210c8a4aa5efedb2bedb9d1b3 100644 (file)
@@ -74,6 +74,7 @@ class ServerThread(threading.Thread):
         self.__addr = addr
         self.__svrcls = svrcls
         self.__hdlrcls = hdlrcls
+        self.ready = threading.Event()
     def run(self):
         class svrcls(MyMixinServer, self.__svrcls):
             pass
@@ -87,6 +88,7 @@ class ServerThread(threading.Thread):
             if self.__addr != svr.socket.getsockname():
                 raise RuntimeError('server_address was %s, expected %s' %
                                        (self.__addr, svr.socket.getsockname()))
+        self.ready.set()
         if verbose: print "thread: serving three times"
         svr.serve_a_few()
         if verbose: print "thread: done"
@@ -139,7 +141,9 @@ def testloop(proto, servers, hdlrcls, testfunc):
         t.start()
         if verbose: print "server running"
         for i in range(NREQ):
-            time.sleep(DELAY)
+            t.ready.wait(10*DELAY)
+            if not t.ready.isSet():
+                raise RuntimeError("Server not ready within a reasonable time")
             if verbose: print "test client", i
             testfunc(proto, addr)
         if verbose: print "waiting for server"