diff options
Diffstat (limited to 'indra/newview')
| -rwxr-xr-x | indra/newview/tests/test_llxmlrpc_peer.py | 36 | 
1 files changed, 25 insertions, 11 deletions
| diff --git a/indra/newview/tests/test_llxmlrpc_peer.py b/indra/newview/tests/test_llxmlrpc_peer.py index 281b72a058..cff40aa4c2 100755 --- a/indra/newview/tests/test_llxmlrpc_peer.py +++ b/indra/newview/tests/test_llxmlrpc_peer.py @@ -31,15 +31,23 @@ $/LicenseInfo$  import os  import sys -from threading import Thread  from SimpleXMLRPCServer import SimpleXMLRPCServer  mydir = os.path.dirname(__file__)       # expected to be .../indra/newview/tests/ -sys.path.insert(0, os.path.join(mydir, os.pardir, os.pardir, "lib", "python")) -sys.path.insert(1, os.path.join(mydir, os.pardir, os.pardir, "llmessage", "tests")) +sys.path.insert(0, os.path.join(mydir, os.pardir, os.pardir, "llmessage", "tests"))  from testrunner import freeport, run, debug  class TestServer(SimpleXMLRPCServer): +    # This server_bind() override is borrowed and simplified from +    # BaseHTTPServer.HTTPServer.server_bind(): we want to capture the actual +    # server port. BaseHTTPServer.HTTPServer.server_bind() stores the actual +    # port in a server_port attribute, but SimpleXMLRPCServer isn't derived +    # from HTTPServer. So do it ourselves. +    def server_bind(self): +        """Override server_bind to store the server port.""" +        SimpleXMLRPCServer.server_bind(self) +        self.server_port = self.socket.getsockname()[1] +      def _dispatch(self, method, params):          try:              func = getattr(self, method) @@ -67,15 +75,21 @@ class TestServer(SimpleXMLRPCServer):          pass  if __name__ == "__main__": -    # Instantiate a TestServer on the first free port in the specified port -    # range. Doing this inline is better than in a daemon thread: if it blows -    # up here, we'll get a traceback. If it blew up in some other thread, the -    # traceback would get eaten and we'd run the subject test program anyway. -    xmlrpcd, port = freeport(xrange(8000, 8020), -                             lambda port: TestServer(('127.0.0.1', port))) +    # function to make a server with specified port +    make_server = lambda port: TestServer(('127.0.0.1', port)) + +    if not sys.platform.startswith("win"): +        # Instantiate a TestServer on a port chosen by the runtime. +        xmlrpcd = make_server(0) +    else: +        # "Then there's Windows" +        # Instantiate a TestServer on the first free port in the specified +        # port range. +        xmlrpcd, port = freeport(xrange(8000, 8020), make_server) +      # Pass the selected port number to the subject test program via the      # environment. We don't want to impose requirements on the test program's      # command-line parsing -- and anyway, for C++ integration tests, that's      # performed in TUT code rather than our own. -    os.environ["PORT"] = str(port) -    sys.exit(run(server=Thread(name="xmlrpc", target=xmlrpcd.serve_forever), *sys.argv[1:])) +    os.environ["PORT"] = str(xmlrpcd.server_port) +    sys.exit(run(server_inst=xmlrpcd, *sys.argv[1:])) | 
