diff options
-rw-r--r-- | nova/tests/test_service.py | 8 | ||||
-rw-r--r-- | nova/tests/test_wsgi.py | 9 | ||||
-rw-r--r-- | nova/wsgi.py | 11 | ||||
-rwxr-xr-x | run_tests.sh | 2 |
4 files changed, 27 insertions, 3 deletions
diff --git a/nova/tests/test_service.py b/nova/tests/test_service.py index 2d98a2641..0bb57d542 100644 --- a/nova/tests/test_service.py +++ b/nova/tests/test_service.py @@ -182,6 +182,14 @@ class TestWSGIService(test.TestCase): self.assertNotEqual(0, test_service.port) test_service.stop() + def test_service_random_port_with_ipv6(self): + CONF.set_default("test_service_listen", "::1") + test_service = service.WSGIService("test_service") + test_service.start() + self.assertEqual("::1", test_service.host) + self.assertNotEqual(0, test_service.port) + test_service.stop() + class TestLauncher(test.TestCase): diff --git a/nova/tests/test_wsgi.py b/nova/tests/test_wsgi.py index eda735cae..b4b25ed97 100644 --- a/nova/tests/test_wsgi.py +++ b/nova/tests/test_wsgi.py @@ -90,3 +90,12 @@ class TestWSGIServer(test.TestCase): self.assertNotEqual(0, server.port) server.stop() server.wait() + + def test_start_random_port_with_ipv6(self): + server = nova.wsgi.Server("test_random_port", None, + host="::1", port=0) + server.start() + self.assertEqual("::1", server.host) + self.assertNotEqual(0, server.port) + server.stop() + server.wait() diff --git a/nova/wsgi.py b/nova/wsgi.py index e7e731523..c103526da 100644 --- a/nova/wsgi.py +++ b/nova/wsgi.py @@ -20,6 +20,7 @@ """Utility methods for working with WSGI servers.""" import os.path +import socket import sys import eventlet @@ -82,8 +83,14 @@ class Server(object): raise exception.InvalidInput( reason='The backlog must be more than 1') - self._socket = eventlet.listen((host, port), backlog=backlog) - (self.host, self.port) = self._socket.getsockname() + try: + socket.inet_pton(socket.AF_INET6, host) + family = socket.AF_INET6 + except Exception: + family = socket.AF_INET + + self._socket = eventlet.listen((host, port), family, backlog=backlog) + (self.host, self.port) = self._socket.getsockname()[0:2] LOG.info(_("%(name)s listening on %(host)s:%(port)s") % self.__dict__) def start(self): diff --git a/run_tests.sh b/run_tests.sh index c4a1d9efc..89d26abe8 100755 --- a/run_tests.sh +++ b/run_tests.sh @@ -81,7 +81,7 @@ function run_tests { if [ $coverage -eq 1 ]; then # Do not test test_coverage_ext when gathering coverage. if [ "x$testrargs" = "x" ]; then - testrargs = "^(?!.*test_coverage_ext).*$" + testrargs="^(?!.*test_coverage_ext).*$" fi export PYTHON="${wrapper} coverage run --source nova --parallel-mode" fi |