2
2
3
3
import io
4
4
import asyncio
5
+ import socket
5
6
import unittest
6
7
import unittest .mock
7
8
@@ -22,8 +23,10 @@ def setUp(self):
22
23
self .writer = unittest .mock .Mock ()
23
24
self .writer .drain .return_value = ()
24
25
self .transport = unittest .mock .Mock ()
25
- self .transport .get_extra_info .side_effect = [('1.2.3.4' , 1234 ),
26
- ('2.3.4.5' , 80 )]
26
+ self .transport .get_extra_info .side_effect = [
27
+ unittest .mock .Mock (family = socket .AF_INET ),
28
+ ('1.2.3.4' , 1234 ),
29
+ ('2.3.4.5' , 80 )]
27
30
28
31
self .headers = multidict .MultiDict ({"HOST" : "python.org" })
29
32
self .message = protocol .RawRequestMessage (
@@ -78,26 +81,20 @@ def test_environ_headers(self):
78
81
self .assertEqual (environ ['SERVER_PORT' ], '80' )
79
82
get_extra_info_calls = self .transport .get_extra_info .mock_calls
80
83
expected_calls = [
84
+ unittest .mock .call ('socket' ),
81
85
unittest .mock .call ('peername' ),
82
- unittest .mock .call ('sockname' ),
83
86
]
84
87
self .assertEqual (expected_calls , get_extra_info_calls )
85
88
86
89
def test_environ_host_header_alternate_port (self ):
87
- self .transport .get_extra_info = unittest .mock .Mock (
88
- side_effect = [('1.2.3.4' , 1234 ), ('3.4.5.6' , 82 )]
89
- )
90
90
self .headers .update ({'HOST' : 'example.com:9999' })
91
91
environ = self ._make_one ()
92
- self .assertEqual (environ ['SERVER_PORT' ], '82 ' )
92
+ self .assertEqual (environ ['SERVER_PORT' ], '9999 ' )
93
93
94
94
def test_environ_host_header_alternate_port_ssl (self ):
95
- self .transport .get_extra_info = unittest .mock .Mock (
96
- side_effect = [('1.2.3.4' , 1234 ), ('3.4.5.6' , 82 )]
97
- )
98
95
self .headers .update ({'HOST' : 'example.com:9999' })
99
96
environ = self ._make_one (is_ssl = True )
100
- self .assertEqual (environ ['SERVER_PORT' ], '82 ' )
97
+ self .assertEqual (environ ['SERVER_PORT' ], '9999 ' )
101
98
102
99
def test_wsgi_response (self ):
103
100
srv = self ._make_srv ()
@@ -276,8 +273,22 @@ def test_http_1_0_no_host(self):
276
273
self .assertEqual (environ ['SERVER_NAME' ], '2.3.4.5' )
277
274
self .assertEqual (environ ['SERVER_PORT' ], '80' )
278
275
279
- def test_unix_socket (self ):
280
- self .transport .get_extra_info = unittest .mock .Mock (return_value = None )
276
+ def test_family_inet6 (self ):
277
+ self .transport .get_extra_info .side_effect = [
278
+ unittest .mock .Mock (family = socket .AF_INET6 ),
279
+ ("::" , 1122 , 0 , 0 ),
280
+ ('2.3.4.5' , 80 )]
281
+ self .message = protocol .RawRequestMessage (
282
+ 'GET' , '/' , (1 , 0 ), self .headers , True , 'deflate' )
283
+ environ = self ._make_one ()
284
+ self .assertEqual (environ ['SERVER_NAME' ], 'python.org' )
285
+ self .assertEqual (environ ['SERVER_PORT' ], '80' )
286
+ self .assertEqual (environ ['REMOTE_ADDR' ], '::' )
287
+ self .assertEqual (environ ['REMOTE_PORT' ], '1122' )
288
+
289
+ def test_family_unix (self ):
290
+ self .transport .get_extra_info .side_effect = [
291
+ unittest .mock .Mock (family = socket .AF_UNIX )]
281
292
headers = multidict .MultiDict ({
282
293
'SERVER_NAME' : '1.2.3.4' , 'SERVER_PORT' : '5678' ,
283
294
'REMOTE_ADDR' : '4.3.2.1' , 'REMOTE_PORT' : '8765' })
0 commit comments