@@ -292,6 +292,25 @@ def recv(self, bufsize, flags=0):
292292 finally :
293293 self ._sender .socket = old_sock
294294
295+ def test_ipv6_preferred_but_not_avail (self ):
296+ real_getaddrinfo = socket .getaddrinfo
297+
298+ def _fake_getaddrinfo (host , port , family = 0 , type = 0 , proto = 0 , flags = 0 ):
299+ if family == socket .AF_INET6 :
300+ raise socket .gaierror ("mock: IPv4 Only" )
301+ else :
302+ return real_getaddrinfo (host , port , family , type , proto , flags )
303+ with patch ('socket.getaddrinfo' , side_effect = _fake_getaddrinfo ):
304+ sender = fluent .sender .FluentSender (tag = 'test' ,
305+ host = 'localhost' ,
306+ port = self ._server .port ,
307+ prefer_ipv6 = True )
308+ sender .emit ('foo' , {'bar' : 'baz' })
309+ sender ._close ()
310+ data = self .get_data ()
311+ self .assertEqual (len (data ), 1 )
312+ self .assertEqual (data [0 ][2 ], {'bar' : 'baz' })
313+
295314 def test_ipv6_only (self ):
296315 # Test if our host supports IPv6 before running this test
297316 try :
@@ -323,6 +342,39 @@ def _fake_getaddrinfo(host, port, family=0, type=0, proto=0, flags=0):
323342 self .assertEqual (len (data ), 1 )
324343 self .assertEqual (data [0 ][2 ], {'bar' : 'baz' })
325344
345+ def test_ipv6_preferred (self ):
346+ # Test if our host supports IPv6 before running this test
347+ try :
348+ socket .gethostbyaddr ('::1' )
349+ except socket .herror :
350+ self .skipTest ("Host does not support IPv6, cannot run this test" )
351+
352+ self .tearDown ()
353+
354+ real_getaddrinfo = socket .getaddrinfo
355+
356+ def _fake_getaddrinfo (host , port , family = 0 , type = 0 , proto = 0 , flags = 0 ):
357+ if family == socket .AF_INET :
358+ raise socket .gaierror ("mock: IPv6 Only" )
359+ else :
360+ return real_getaddrinfo (host , port , family , type , proto , flags )
361+
362+ self ._server = mockserver .MockRecvServer (host = 'localhost' ,
363+ inet_family = socket .AF_INET6 )
364+
365+
366+ with patch ('socket.getaddrinfo' , side_effect = _fake_getaddrinfo ):
367+ sender = fluent .sender .FluentSender (tag = 'test' ,
368+ host = 'localhost' ,
369+ port = self ._server .port ,
370+ prefer_ipv6 = True )
371+ sender .emit ('foo' , {'bar' : 'baz' })
372+ sender ._close ()
373+ data = self .get_data ()
374+ self .assertEqual (len (data ), 1 )
375+ self .assertEqual (data [0 ][2 ], {'bar' : 'baz' })
376+
377+
326378 @unittest .skipIf (sys .platform == "win32" , "Unix socket not supported" )
327379 def test_unix_socket (self ):
328380 self .tearDown ()
0 commit comments