diff --git a/Lib/test/test_docxmlrpc.py b/Lib/test/test_docxmlrpc.py index 716333e..494f885 100644 --- a/Lib/test/test_docxmlrpc.py +++ b/Lib/test/test_docxmlrpc.py @@ -8,6 +8,7 @@ import socket import unittest PORT = None +SERVER = None def make_request_and_skipIf(condition, reason): # If we skip the test, we have to make a request because the @@ -23,13 +24,10 @@ def make_request_and_skipIf(condition, reason): return decorator -def server(evt, numrequests): +def server(evt, ready): serv = DocXMLRPCServer(("localhost", 0), logRequests=False) try: - global PORT - PORT = serv.socket.getsockname()[1] - # Add some documentation serv.set_server_title("DocXMLRPCServer Test Documentation") serv.set_server_name("DocXMLRPCServer Test Docs") @@ -57,14 +55,20 @@ def server(evt, numrequests): serv.register_function(add) serv.register_function(lambda x, y: x-y) - while numrequests > 0: - serv.handle_request() - numrequests -= 1 + global PORT + PORT = serv.socket.getsockname()[1] + + global SERVER + SERVER = serv + + ready.set() + + serv.serve_forever() except socket.timeout: pass finally: serv.server_close() - PORT = None + ready.set() evt.set() class DocXMLRPCHTTPGETServer(unittest.TestCase): @@ -74,19 +78,20 @@ class DocXMLRPCHTTPGETServer(unittest.TestCase): DocXMLRPCServer._send_traceback_header = True self.evt = threading.Event() - threading.Thread(target=server, args=(self.evt, 1)).start() + ready = threading.Event() + threading.Thread(target=server, args=(self.evt, ready)).start() # wait for port to be assigned - n = 1000 - while n > 0 and PORT is None: - time.sleep(0.001) - n -= 1 + ready.wait() + self.server = SERVER self.client = httplib.HTTPConnection("localhost:%d" % PORT) def tearDown(self): self.client.close() + self.server.shutdown() + self.evt.wait() # Disable server feedback