diff options
Diffstat (limited to 'django/test/testcases.py')
| -rw-r--r-- | django/test/testcases.py | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/django/test/testcases.py b/django/test/testcases.py index 2752fc646b..cc1da67fb2 100644 --- a/django/test/testcases.py +++ b/django/test/testcases.py @@ -1201,9 +1201,9 @@ class _MediaFilesHandler(FSFilesHandler): class LiveServerThread(threading.Thread): """Thread for running a live http server while the tests are running.""" - def __init__(self, host, static_handler, connections_override=None): + def __init__(self, host, static_handler, connections_override=None, port=0): self.host = host - self.port = None + self.port = port self.is_ready = threading.Event() self.error = None self.static_handler = static_handler @@ -1223,8 +1223,10 @@ class LiveServerThread(threading.Thread): try: # Create the handler for serving static and media files handler = self.static_handler(_MediaFilesHandler(WSGIHandler())) - self.httpd = self._create_server(0) - self.port = self.httpd.server_address[1] + self.httpd = self._create_server() + # If binding to port zero, assign the port allocated by the OS. + if self.port == 0: + self.port = self.httpd.server_address[1] self.httpd.set_app(handler) self.is_ready.set() self.httpd.serve_forever() @@ -1234,8 +1236,8 @@ class LiveServerThread(threading.Thread): finally: connections.close_all() - def _create_server(self, port): - return ThreadedWSGIServer((self.host, port), QuietWSGIRequestHandler, allow_reuse_address=False) + def _create_server(self): + return ThreadedWSGIServer((self.host, self.port), QuietWSGIRequestHandler, allow_reuse_address=False) def terminate(self): if hasattr(self, 'httpd'): @@ -1257,6 +1259,7 @@ class LiveServerTestCase(TransactionTestCase): thread can see the changes. """ host = 'localhost' + port = 0 server_thread_class = LiveServerThread static_handler = _StaticFilesHandler @@ -1298,6 +1301,7 @@ class LiveServerTestCase(TransactionTestCase): cls.host, cls.static_handler, connections_override=connections_override, + port=cls.port, ) @classmethod |
