Skip to content

Commit f56fc75

Browse files
committed
Fix travis tests
1 parent 827e802 commit f56fc75

File tree

3 files changed

+74
-57
lines changed

3 files changed

+74
-57
lines changed

tests/test_sockets.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -93,13 +93,11 @@ async def run():
9393

9494
self.loop.run_until_complete(run())
9595

96+
@unittest.skipUnless(tb.has_IPv6, 'no IPv6')
9697
def test_socket_ipv6_addr(self):
9798
server_sock = socket.socket(socket.AF_INET6)
9899
with server_sock:
99-
try:
100-
server_sock.bind(('::1', 0))
101-
except OSError:
102-
raise unittest.SkipTest('IPv6 is not supported')
100+
server_sock.bind(('::1', 0))
103101

104102
addr = server_sock.getsockname() # tuple of 4 elements for IPv6
105103

tests/test_udp.py

Lines changed: 58 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import asyncio
22
import socket
3-
import uvloop
3+
import unittest
44
import sys
55

66
from asyncio import test_utils
@@ -37,7 +37,8 @@ def connection_lost(self, exc):
3737

3838

3939
class _TestUDP:
40-
def test_create_datagram_endpoint_addrs(self):
40+
41+
def _test_create_datagram_endpoint_addrs(self, family, lc_addr):
4142
class TestMyDatagramProto(MyDatagramProto):
4243
def __init__(inner_self):
4344
super().__init__(loop=self.loop)
@@ -46,57 +47,61 @@ def datagram_received(self, data, addr):
4647
super().datagram_received(data, addr)
4748
self.transport.sendto(b'resp:' + data, addr)
4849

49-
for family, lc_host, lc_port in ((socket.AF_INET, '127.0.0.1', 0),
50-
(socket.AF_INET6, '::1', 0)):
51-
52-
lc = (lc_host, lc_port)
53-
54-
with self.subTest(local_addr=lc):
55-
coro = self.loop.create_datagram_endpoint(
56-
TestMyDatagramProto,
57-
local_addr=lc,
58-
family=family)
59-
60-
s_transport, server = self.loop.run_until_complete(coro)
61-
host, port, *_ = s_transport.get_extra_info('sockname')
62-
63-
self.assertIsInstance(server, TestMyDatagramProto)
64-
self.assertEqual('INITIALIZED', server.state)
65-
self.assertIs(server.transport, s_transport)
66-
67-
extra = {}
68-
if hasattr(socket, 'SO_REUSEPORT') and \
69-
sys.version_info[:3] >= (3, 5, 1):
70-
extra['reuse_port'] = True
71-
72-
coro = self.loop.create_datagram_endpoint(
73-
lambda: MyDatagramProto(loop=self.loop),
74-
family=family,
75-
remote_addr=(host, port),
76-
**extra)
77-
transport, client = self.loop.run_until_complete(coro)
78-
79-
self.assertIsInstance(client, MyDatagramProto)
80-
self.assertEqual('INITIALIZED', client.state)
81-
self.assertIs(client.transport, transport)
82-
83-
transport.sendto(b'xxx')
84-
test_utils.run_until(self.loop, lambda: server.nbytes)
85-
self.assertEqual(3, server.nbytes)
86-
test_utils.run_until(self.loop, lambda: client.nbytes)
87-
88-
# received
89-
self.assertEqual(8, client.nbytes)
90-
91-
# extra info is available
92-
self.assertIsNotNone(transport.get_extra_info('sockname'))
93-
94-
# close connection
95-
transport.close()
96-
self.loop.run_until_complete(client.done)
97-
self.assertEqual('CLOSED', client.state)
98-
server.transport.close()
99-
self.loop.run_until_complete(server.done)
50+
coro = self.loop.create_datagram_endpoint(
51+
TestMyDatagramProto,
52+
local_addr=lc_addr,
53+
family=family)
54+
55+
s_transport, server = self.loop.run_until_complete(coro)
56+
57+
host, port, *_ = s_transport.get_extra_info('sockname')
58+
59+
self.assertIsInstance(server, TestMyDatagramProto)
60+
self.assertEqual('INITIALIZED', server.state)
61+
self.assertIs(server.transport, s_transport)
62+
63+
extra = {}
64+
if hasattr(socket, 'SO_REUSEPORT') and \
65+
sys.version_info[:3] >= (3, 5, 1):
66+
extra['reuse_port'] = True
67+
68+
coro = self.loop.create_datagram_endpoint(
69+
lambda: MyDatagramProto(loop=self.loop),
70+
family=family,
71+
remote_addr=(host, port),
72+
**extra)
73+
transport, client = self.loop.run_until_complete(coro)
74+
75+
self.assertIsInstance(client, MyDatagramProto)
76+
self.assertEqual('INITIALIZED', client.state)
77+
self.assertIs(client.transport, transport)
78+
79+
transport.sendto(b'xxx')
80+
test_utils.run_until(self.loop, lambda: server.nbytes)
81+
self.assertEqual(3, server.nbytes)
82+
test_utils.run_until(self.loop, lambda: client.nbytes)
83+
84+
# received
85+
self.assertEqual(8, client.nbytes)
86+
87+
# extra info is available
88+
self.assertIsNotNone(transport.get_extra_info('sockname'))
89+
90+
# close connection
91+
transport.close()
92+
self.loop.run_until_complete(client.done)
93+
self.assertEqual('CLOSED', client.state)
94+
server.transport.close()
95+
self.loop.run_until_complete(server.done)
96+
97+
def test_create_datagram_endpoint_addrs_ipv4(self):
98+
self._test_create_datagram_endpoint_addrs(
99+
socket.AF_INET, ('127.0.0.1', 0))
100+
101+
@unittest.skipUnless(tb.has_IPv6, 'no IPv6')
102+
def test_create_datagram_endpoint_addrs_ipv6(self):
103+
self._test_create_datagram_endpoint_addrs(
104+
socket.AF_INET6, ('::1', 0))
100105

101106
def test_create_datagram_endpoint_ipv6_family(self):
102107
class TestMyDatagramProto(MyDatagramProto):

uvloop/_testbase.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -299,6 +299,20 @@ def new_loop(self):
299299
return asyncio.new_event_loop()
300300

301301

302+
def has_IPv6():
303+
server_sock = socket.socket(socket.AF_INET6)
304+
with server_sock:
305+
try:
306+
server_sock.bind(('::1', 0))
307+
except OSError:
308+
return False
309+
else:
310+
return True
311+
312+
313+
has_IPv6 = has_IPv6()
314+
315+
302316
###############################################################################
303317
# Socket Testing Utilities
304318
###############################################################################

0 commit comments

Comments
 (0)