mirror of
https://github.com/python/cpython.git
synced 2025-10-09 08:31:26 +00:00
bpo-24209: In http.server script, rely on getaddrinfo to bind to preferred address based on the bind parameter. (#11767)
In http.server script, rely on getaddrinfo to bind to preferred address based on the bind parameter. As a result, now IPv6 is used as the default (including IPv4 on dual-stack systems). Enhanced tests.
This commit is contained in:
parent
2848d9d299
commit
f289084c83
3 changed files with 75 additions and 22 deletions
|
@ -1118,21 +1118,63 @@ class MiscTestCase(unittest.TestCase):
|
|||
|
||||
|
||||
class ScriptTestCase(unittest.TestCase):
|
||||
|
||||
def mock_server_class(self):
|
||||
return mock.MagicMock(
|
||||
return_value=mock.MagicMock(
|
||||
__enter__=mock.MagicMock(
|
||||
return_value=mock.MagicMock(
|
||||
socket=mock.MagicMock(
|
||||
getsockname=lambda: ('', 0),
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
)
|
||||
|
||||
@mock.patch('builtins.print')
|
||||
def test_server_test_unspec(self, _):
|
||||
mock_server = self.mock_server_class()
|
||||
server.test(ServerClass=mock_server, bind=None)
|
||||
self.assertIn(
|
||||
mock_server.address_family,
|
||||
(socket.AF_INET6, socket.AF_INET),
|
||||
)
|
||||
|
||||
@mock.patch('builtins.print')
|
||||
def test_server_test_localhost(self, _):
|
||||
mock_server = self.mock_server_class()
|
||||
server.test(ServerClass=mock_server, bind="localhost")
|
||||
self.assertIn(
|
||||
mock_server.address_family,
|
||||
(socket.AF_INET6, socket.AF_INET),
|
||||
)
|
||||
|
||||
ipv6_addrs = (
|
||||
"::",
|
||||
"2001:0db8:85a3:0000:0000:8a2e:0370:7334",
|
||||
"::1",
|
||||
)
|
||||
|
||||
ipv4_addrs = (
|
||||
"0.0.0.0",
|
||||
"8.8.8.8",
|
||||
"127.0.0.1",
|
||||
)
|
||||
|
||||
@mock.patch('builtins.print')
|
||||
def test_server_test_ipv6(self, _):
|
||||
mock_server = mock.MagicMock()
|
||||
server.test(ServerClass=mock_server, bind="::")
|
||||
self.assertEqual(mock_server.address_family, socket.AF_INET6)
|
||||
for bind in self.ipv6_addrs:
|
||||
mock_server = self.mock_server_class()
|
||||
server.test(ServerClass=mock_server, bind=bind)
|
||||
self.assertEqual(mock_server.address_family, socket.AF_INET6)
|
||||
|
||||
mock_server.reset_mock()
|
||||
server.test(ServerClass=mock_server,
|
||||
bind="2001:0db8:85a3:0000:0000:8a2e:0370:7334")
|
||||
self.assertEqual(mock_server.address_family, socket.AF_INET6)
|
||||
|
||||
mock_server.reset_mock()
|
||||
server.test(ServerClass=mock_server,
|
||||
bind="::1")
|
||||
self.assertEqual(mock_server.address_family, socket.AF_INET6)
|
||||
@mock.patch('builtins.print')
|
||||
def test_server_test_ipv4(self, _):
|
||||
for bind in self.ipv4_addrs:
|
||||
mock_server = self.mock_server_class()
|
||||
server.test(ServerClass=mock_server, bind=bind)
|
||||
self.assertEqual(mock_server.address_family, socket.AF_INET)
|
||||
|
||||
|
||||
def test_main(verbose=None):
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue