11import asyncio
22import socket
3- import uvloop
3+ import unittest
44import sys
55
66from asyncio import test_utils
@@ -37,7 +37,8 @@ def connection_lost(self, exc):
3737
3838
3939class _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 ):
0 commit comments