Rev 6: Start implementing port management for tests. in file:///v/home/vila/.bazaar/plugins/local_test_server/
Vincent Ladeuil
v.ladeuil+lp at free.fr
Wed May 28 11:57:58 BST 2008
At file:///v/home/vila/.bazaar/plugins/local_test_server/
------------------------------------------------------------
revno: 6
revision-id: v.ladeuil+lp at free.fr-20080528105757-6rdlzl1tohf27osd
parent: v.ladeuil+lp at free.fr-20080528091508-y8f72o1afg1zhxsd
committer: Vincent Ladeuil <v.ladeuil+lp at free.fr>
branch nick: local_test_server
timestamp: Wed 2008-05-28 12:57:57 +0200
message:
Start implementing port management for tests.
* tests/test_server.py:
(TestAvailablePort): Tests for avaiable ports.
* server.py:
(_get_available_port): Manage a pool of available ports for tests.
modified:
TODO todo-20080526134120-eibvvebw74t8j2xh-1
server.py server.py-20080524160639-rqhbexqatjqbwypw-1
tests/test_server.py test_server.py-20080524160641-lco15o23ub9mac33-1
-------------- next part --------------
=== modified file 'TODO'
--- a/TODO 2008-05-26 19:42:08 +0000
+++ b/TODO 2008-05-28 10:57:57 +0000
@@ -1,7 +1,5 @@
* server.py
-- test stop
-
- create a hierarchy by server at start time (making more obvious
what server is used and the requirements for each server)
=== modified file 'server.py'
--- a/server.py 2008-05-28 09:15:08 +0000
+++ b/server.py 2008-05-28 10:57:57 +0000
@@ -30,8 +30,14 @@
class Server(object):
- def __init__(self, conf):
+ def __init__(self, conf, host='localhost', port=-1):
self.config = conf
+ self.host = host
+ if port != -1:
+ self.port = port
+ else:
+ # For tests only
+ self.port = _get_available_port()
def start(self):
raise NotImplementedError(self.start)
@@ -180,3 +186,27 @@
return None
else:
return klass()
+
+
+_next_available_port = 49000
+_max_available_port = 49151
+def _get_available_port():
+ """Returns an hopefully available port for test purposes.
+
+ We deal with servers as black boxes, so we can't just bind on port 0 to
+ leave the os provide us an available port.
+
+ Yet, we want to be able to test these servers without interfering with some
+ already running ones (since we want to provide these servers for use by the
+ bzr test suite).
+
+ This function returns an available port in a range chosen in unassigned
+ ones as described in http://www.iana.org/assignments/port-numbers.
+ """
+ global _next_available_port
+ global _max_available_port
+ port = _next_available_port
+ if port >= _max_available_port:
+ raise ValueError('No more available ports')
+ _next_available_port += 1
+ return port
=== modified file 'tests/test_server.py'
--- a/tests/test_server.py 2008-05-26 19:42:08 +0000
+++ b/tests/test_server.py 2008-05-28 10:57:57 +0000
@@ -22,10 +22,35 @@
tests,
)
+
from bzrlib.plugins.local_test_server import (
server,
)
+
+class TestAvailablePort(tests.TestCase):
+
+ def setUp(self):
+ super(TestAvailablePort, self).setUp()
+ original_next = server._next_available_port
+ original_max = server._max_available_port
+ server._next_available_port = 42
+ server._max_available_port = 43
+
+ def restore_values():
+ server._next_available_port = original_next
+ server._max_available_port = original_max
+
+ self.addCleanup(restore_values)
+
+ def test_available_port(self):
+ self.assertNotEqual(0, server._get_available_port())
+
+ def test_no_more_available_port(self):
+ port = server._get_available_port()
+ self.assertRaises(ValueError, server._get_available_port)
+
+
class TestApache2(tests.TestCase):
def test_server_doesn_t_run(self):
More information about the bazaar-commits
mailing list