Skip to content

Commit c5cfd18

Browse files
committed
add test for ipv6 functionality
Signed-off-by: Matt Cipperly <[email protected]>
1 parent e68e736 commit c5cfd18

File tree

2 files changed

+30
-4
lines changed

2 files changed

+30
-4
lines changed

tests/mockserver.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,21 +16,21 @@ class MockRecvServer(threading.Thread):
1616
Single threaded server accepts one connection and recv until EOF.
1717
"""
1818

19-
def __init__(self, host='localhost', port=0):
19+
def __init__(self, host='localhost', port=0, inet_family=socket.AF_INET):
2020
super(MockRecvServer, self).__init__()
2121

2222
if host.startswith('unix://'):
2323
self.socket_proto = socket.AF_UNIX
2424
self.socket_type = socket.SOCK_STREAM
2525
self.socket_addr = host[len('unix://'):]
2626
else:
27-
self.socket_proto = socket.AF_INET
27+
self.socket_proto = inet_family
2828
self.socket_type = socket.SOCK_STREAM
2929
self.socket_addr = (host, port)
3030

3131
self._sock = socket.socket(self.socket_proto, self.socket_type)
3232
self._sock.bind(self.socket_addr)
33-
if self.socket_proto == socket.AF_INET:
33+
if self.socket_proto == inet_family:
3434
self.port = self._sock.getsockname()[1]
3535

3636
self._sock.listen(1)
@@ -76,7 +76,7 @@ def close(self):
7676
pass
7777

7878
try:
79-
conn = socket.socket(socket.AF_INET,
79+
conn = socket.socket(self.socket_proto,
8080
socket.SOCK_STREAM)
8181
try:
8282
conn.connect((self.socket_addr[0], self.port))

tests/test_sender.py

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import unittest
99
from shutil import rmtree
1010
from tempfile import mkdtemp
11+
from unittest.mock import patch
1112

1213
import msgpack
1314

@@ -291,6 +292,31 @@ def recv(self, bufsize, flags=0):
291292
finally:
292293
self._sender.socket = old_sock
293294

295+
def test_ipv6_only(self):
296+
self.tearDown()
297+
298+
real_getaddrinfo = socket.getaddrinfo
299+
300+
def _fake_getaddrinfo(host, port, family=0, type=0, proto=0, flags=0):
301+
if family == socket.AF_INET:
302+
raise socket.gaierror("mock: IPv6 Only")
303+
else:
304+
return real_getaddrinfo(host, port, family, type, proto, flags)
305+
306+
self._server = mockserver.MockRecvServer(host='localhost',
307+
inet_family=socket.AF_INET6)
308+
309+
310+
with patch('socket.getaddrinfo', side_effect=_fake_getaddrinfo):
311+
sender = fluent.sender.FluentSender(tag='test',
312+
host='localhost',
313+
port=self._server.port)
314+
sender.emit('foo', {'bar': 'baz'})
315+
sender._close()
316+
data = self.get_data()
317+
self.assertEqual(len(data), 1)
318+
self.assertEqual(data[0][2], {'bar': 'baz'})
319+
294320
@unittest.skipIf(sys.platform == "win32", "Unix socket not supported")
295321
def test_unix_socket(self):
296322
self.tearDown()

0 commit comments

Comments
 (0)