@@ -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