1
1
import asyncio
2
2
import socket
3
- import uvloop
3
+ import unittest
4
4
import sys
5
5
6
6
from asyncio import test_utils
@@ -37,7 +37,8 @@ def connection_lost(self, exc):
37
37
38
38
39
39
class _TestUDP :
40
- def test_create_datagram_endpoint_addrs (self ):
40
+
41
+ def _test_create_datagram_endpoint_addrs (self , family , lc_addr ):
41
42
class TestMyDatagramProto (MyDatagramProto ):
42
43
def __init__ (inner_self ):
43
44
super ().__init__ (loop = self .loop )
@@ -46,57 +47,61 @@ def datagram_received(self, data, addr):
46
47
super ().datagram_received (data , addr )
47
48
self .transport .sendto (b'resp:' + data , addr )
48
49
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 ))
100
105
101
106
def test_create_datagram_endpoint_ipv6_family (self ):
102
107
class TestMyDatagramProto (MyDatagramProto ):
0 commit comments