@@ -292,6 +292,25 @@ def recv(self, bufsize, flags=0):
292
292
finally :
293
293
self ._sender .socket = old_sock
294
294
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
+
295
314
def test_ipv6_only (self ):
296
315
# Test if our host supports IPv6 before running this test
297
316
try :
@@ -323,6 +342,39 @@ def _fake_getaddrinfo(host, port, family=0, type=0, proto=0, flags=0):
323
342
self .assertEqual (len (data ), 1 )
324
343
self .assertEqual (data [0 ][2 ], {'bar' : 'baz' })
325
344
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
+
326
378
@unittest .skipIf (sys .platform == "win32" , "Unix socket not supported" )
327
379
def test_unix_socket (self ):
328
380
self .tearDown ()
0 commit comments