diff options
Diffstat (limited to 'Lib/test/test_support.py')
-rw-r--r-- | Lib/test/test_support.py | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/Lib/test/test_support.py b/Lib/test/test_support.py index fb634f6..84f6a51 100644 --- a/Lib/test/test_support.py +++ b/Lib/test/test_support.py @@ -100,10 +100,19 @@ def bind_port(sock, host='', preferred_port=54321): tests and we don't try multiple ports, the test can fails. This makes the test more robust.""" - # some random ports that hopefully no one is listening on. - for port in [preferred_port, 9907, 10243, 32999]: + # Find some random ports that hopefully no one is listening on. + # Ideally each test would clean up after itself and not continue listening + # on any ports. However, this isn't the case. The last port (0) is + # a stop-gap that asks the O/S to assign a port. Whenever the warning + # message below is printed, the test that is listening on the port should + # be fixed to close the socket at the end of the test. + # Another reason why we can't use a port is another process (possibly + # another instance of the test suite) is using the same port. + for port in [preferred_port, 9907, 10243, 32999, 0]: try: sock.bind((host, port)) + if port == 0: + port = sock.getsockname()[1] return port except socket.error as e: (err, msg) = e.args @@ -519,8 +528,7 @@ def _run_suite(suite): elif len(result.failures) == 1 and not result.errors: err = result.failures[0][1] else: - msg = "errors occurred; run in verbose mode for details" - raise TestFailed(msg) + err = "errors occurred; run in verbose mode for details" raise TestFailed(err) |