diff options
author | Gregory P. Smith <greg@krypto.org> | 2016-01-25 14:43:21 -0800 |
---|---|---|
committer | Gregory P. Smith <greg@krypto.org> | 2016-01-25 14:43:21 -0800 |
commit | 8b09a986041f79f4220a6e8fb7524c78948c4a6f (patch) | |
tree | 43ff0f1aee1611eb76bd2cd7914cbd57f51afcff | |
parent | cb5fdca2f1e7d8c7db38fc6c9e0706b27425bc8c (diff) | |
parent | 947aae39b23d1add837e7432b448de901b137eb8 (diff) | |
download | portpicker-8b09a986041f79f4220a6e8fb7524c78948c4a6f.tar.gz |
Merge pull request #2 from duggelz/master
Change default port range to 15000-24999 and fix a portserver bug. v1.1.1.
-rw-r--r-- | ChangeLog.md | 5 | ||||
-rw-r--r-- | setup.py | 2 | ||||
-rw-r--r-- | src/portpicker.py | 2 | ||||
-rw-r--r-- | src/portserver.py | 6 | ||||
-rw-r--r-- | src/tests/portserver_test.py | 22 |
5 files changed, 32 insertions, 5 deletions
diff --git a/ChangeLog.md b/ChangeLog.md index de8628d..63da2a5 100644 --- a/ChangeLog.md +++ b/ChangeLog.md @@ -1,3 +1,8 @@ +## 1.1.1 + +* Changed default port range to 15000-24999 to avoid ephemeral ports. +* Portserver bugfix. + ## 1.1.0 * Renamed portpicker APIs to use PEP8 style function names in code and docs. @@ -33,7 +33,7 @@ def main(): distutils.core.setup( name='portpicker', - version='1.1.0', + version='1.1.1', description='A library to choose unique available network ports.', long_description=textwrap.dedent("""\ Portpicker provides an API to find and return an available network diff --git a/src/portpicker.py b/src/portpicker.py index 08dde0a..6820391 100644 --- a/src/portpicker.py +++ b/src/portpicker.py @@ -139,7 +139,7 @@ def _pick_unused_port_without_server(): # Protected. pylint: disable=invalid-na # Try random ports first. rng = random.Random() for _ in range(10): - port = int(rng.randrange(32768, 60000)) + port = int(rng.randrange(15000, 25000)) if is_port_free(port): return port diff --git a/src/portserver.py b/src/portserver.py index fcade6c..43f5567 100644 --- a/src/portserver.py +++ b/src/portserver.py @@ -180,7 +180,7 @@ class _PortPool(object): check_count += 1 if (candidate.start_time == 0 or candidate.start_time != _get_process_start_time(candidate.pid)): - if _is_port_free(candidate.pid): + if _is_port_free(candidate.port): candidate.pid = pid candidate.start_time = _get_process_start_time(pid) if not candidate.start_time: @@ -283,8 +283,8 @@ def _parse_command_line(): parser.add_argument( '--portserver_static_pool', type=str, - default='32768-60000', - help='Comma separated N-P Range(s) of ports to manage.') + default='15000-24999', + help='Comma separated N-P Range(s) of ports to manage (inclusive).') parser.add_argument( '--portserver_unix_socket_address', type=str, diff --git a/src/tests/portserver_test.py b/src/tests/portserver_test.py index f0475c3..bd7d61e 100644 --- a/src/tests/portserver_test.py +++ b/src/tests/portserver_test.py @@ -192,6 +192,28 @@ class PortPoolTest(unittest.TestCase): self.assertEqual(2, self.pool.num_ports()) self.assertEqual(2, self.pool.ports_checked_for_last_request) + @mock.patch.object(portserver, '_is_port_free') + @mock.patch.object(os, 'getpid') + def test_get_port_for_process_pid_eq_port(self, mock_getpid, mock_is_port_free): + self.pool.add_port_to_free_pool(12345) + self.pool.add_port_to_free_pool(12344) + mock_is_port_free.side_effect = lambda port: port == os.getpid() + mock_getpid.return_value = 12345 + self.assertEqual(2, self.pool.num_ports()) + self.assertEqual(12345, self.pool.get_port_for_process(os.getpid())) + self.assertEqual(2, self.pool.ports_checked_for_last_request) + + @mock.patch.object(portserver, '_is_port_free') + @mock.patch.object(os, 'getpid') + def test_get_port_for_process_pid_ne_port(self, mock_getpid, mock_is_port_free): + self.pool.add_port_to_free_pool(12344) + self.pool.add_port_to_free_pool(12345) + mock_is_port_free.side_effect = lambda port: port != os.getpid() + mock_getpid.return_value = 12345 + self.assertEqual(2, self.pool.num_ports()) + self.assertEqual(12344, self.pool.get_port_for_process(os.getpid())) + self.assertEqual(2, self.pool.ports_checked_for_last_request) + @mock.patch.object(portserver, '_get_process_command_line') @mock.patch.object(portserver, '_should_allocate_port') |