Skip to content

Commit 4a30c09

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

File tree

2 files changed

+36
-4
lines changed

2 files changed

+36
-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: 32 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,37 @@ def recv(self, bufsize, flags=0):
291292
finally:
292293
self._sender.socket = old_sock
293294

295+
def test_ipv6_only(self):
296+
# Test if our host supports IPv6 before running this test
297+
try:
298+
socket.gethostbyaddr('::1')
299+
except socket.herror:
300+
self.skipTest("Host does not support IPv6, cannot run this test")
301+
302+
self.tearDown()
303+
304+
real_getaddrinfo = socket.getaddrinfo
305+
306+
def _fake_getaddrinfo(host, port, family=0, type=0, proto=0, flags=0):
307+
if family == socket.AF_INET:
308+
raise socket.gaierror("mock: IPv6 Only")
309+
else:
310+
return real_getaddrinfo(host, port, family, type, proto, flags)
311+
312+
self._server = mockserver.MockRecvServer(host='localhost',
313+
inet_family=socket.AF_INET6)
314+
315+
316+
with patch('socket.getaddrinfo', side_effect=_fake_getaddrinfo):
317+
sender = fluent.sender.FluentSender(tag='test',
318+
host='localhost',
319+
port=self._server.port)
320+
sender.emit('foo', {'bar': 'baz'})
321+
sender._close()
322+
data = self.get_data()
323+
self.assertEqual(len(data), 1)
324+
self.assertEqual(data[0][2], {'bar': 'baz'})
325+
294326
@unittest.skipIf(sys.platform == "win32", "Unix socket not supported")
295327
def test_unix_socket(self):
296328
self.tearDown()

0 commit comments

Comments
 (0)