Show More
@@ -49,6 +49,7 b' import os' | |||
|
49 | 49 | import shutil |
|
50 | 50 | import subprocess |
|
51 | 51 | import signal |
|
52 | import socket | |
|
52 | 53 | import sys |
|
53 | 54 | import tempfile |
|
54 | 55 | import time |
@@ -78,6 +79,18 b' if sys.version_info < (2, 5):' | |||
|
78 | 79 | |
|
79 | 80 | wifexited = getattr(os, "WIFEXITED", lambda x: False) |
|
80 | 81 | |
|
82 | def checkportisavailable(port): | |
|
83 | """return true if a port seems free to bind on localhost""" | |
|
84 | try: | |
|
85 | s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) | |
|
86 | s.bind(('localhost', port)) | |
|
87 | s.close() | |
|
88 | return True | |
|
89 | except socket.error, exc: | |
|
90 | if not exc.errno == errno.EADDRINUSE: | |
|
91 | raise | |
|
92 | return False | |
|
93 | ||
|
81 | 94 | closefds = os.name == 'posix' |
|
82 | 95 | def Popen4(cmd, wd, timeout, env=None): |
|
83 | 96 | processlock.acquire() |
@@ -1608,6 +1621,8 b' class TestRunner(object):' | |||
|
1608 | 1621 | self._coveragefile = None |
|
1609 | 1622 | self._createdfiles = [] |
|
1610 | 1623 | self._hgpath = None |
|
1624 | self._portoffset = 0 | |
|
1625 | self._ports = {} | |
|
1611 | 1626 | |
|
1612 | 1627 | def run(self, args, parser=None): |
|
1613 | 1628 | """Run the test suite.""" |
@@ -1812,6 +1827,24 b' class TestRunner(object):' | |||
|
1812 | 1827 | if warned: |
|
1813 | 1828 | return 80 |
|
1814 | 1829 | |
|
1830 | def _getport(self, count): | |
|
1831 | port = self._ports.get(count) # do we have a cached entry? | |
|
1832 | if port is None: | |
|
1833 | port = self.options.port + self._portoffset | |
|
1834 | portneeded = 3 | |
|
1835 | # above 100 tries we just give up and let test reports failure | |
|
1836 | for tries in xrange(100): | |
|
1837 | allfree = True | |
|
1838 | for idx in xrange(portneeded): | |
|
1839 | if not checkportisavailable(port + idx): | |
|
1840 | allfree = False | |
|
1841 | break | |
|
1842 | self._portoffset += portneeded | |
|
1843 | if allfree: | |
|
1844 | break | |
|
1845 | self._ports[count] = port | |
|
1846 | return port | |
|
1847 | ||
|
1815 | 1848 | def _gettest(self, test, count): |
|
1816 | 1849 | """Obtain a Test by looking at its filename. |
|
1817 | 1850 | |
@@ -1833,7 +1866,7 b' class TestRunner(object):' | |||
|
1833 | 1866 | keeptmpdir=self.options.keep_tmpdir, |
|
1834 | 1867 | debug=self.options.debug, |
|
1835 | 1868 | timeout=self.options.timeout, |
|
1836 |
startport=self. |
|
|
1869 | startport=self._getport(count), | |
|
1837 | 1870 | extraconfigopts=self.options.extra_config_opt, |
|
1838 | 1871 | py3kwarnings=self.options.py3k_warnings, |
|
1839 | 1872 | shell=self.options.shell) |
General Comments 0
You need to be logged in to leave comments.
Login now