@@ -22,9 +22,10 @@ def setUp(self):
22
22
self .writer = unittest .mock .Mock ()
23
23
self .writer .drain .return_value = ()
24
24
self .transport = unittest .mock .Mock ()
25
- self .transport .get_extra_info .return_value = '127.0.0.1'
25
+ self .transport .get_extra_info .side_effect = [('1.2.3.4' , 1234 ),
26
+ ('2.3.4.5' , 80 )]
26
27
27
- self .headers = multidict .MultiDict ()
28
+ self .headers = multidict .MultiDict ({ "HOST" : "python.org" } )
28
29
self .message = protocol .RawRequestMessage (
29
30
'GET' , '/path' , (1 , 0 ), self .headers , True , 'deflate' )
30
31
self .payload = aiohttp .FlowControlDataQueue (self .reader )
@@ -63,64 +64,40 @@ def test_environ(self):
63
64
64
65
def test_environ_headers (self ):
65
66
self .headers .extend (
66
- (('HOST' , 'python.org' ),
67
- ('SCRIPT_NAME' , 'script' ),
67
+ (('SCRIPT_NAME' , 'script' ),
68
68
('CONTENT-TYPE' , 'text/plain' ),
69
69
('CONTENT-LENGTH' , '209' ),
70
70
('X_TEST' , '123' ),
71
71
('X_TEST' , '456' )))
72
- environ = self ._make_one (is_ssl = True )
72
+ environ = self ._make_one ()
73
73
self .assertEqual (environ ['CONTENT_TYPE' ], 'text/plain' )
74
74
self .assertEqual (environ ['CONTENT_LENGTH' ], '209' )
75
75
self .assertEqual (environ ['HTTP_X_TEST' ], '123,456' )
76
76
self .assertEqual (environ ['SCRIPT_NAME' ], 'script' )
77
77
self .assertEqual (environ ['SERVER_NAME' ], 'python.org' )
78
- self .assertEqual (environ ['SERVER_PORT' ], '443' )
79
-
80
- def test_environ_host_header (self ):
81
- self .headers .add ('HOST' , 'python.org' )
82
- environ = self ._make_one ()
83
-
84
- self .assertEqual (environ ['HTTP_HOST' ], 'python.org' )
85
- self .assertEqual (environ ['SERVER_NAME' ], 'python.org' )
86
78
self .assertEqual (environ ['SERVER_PORT' ], '80' )
87
- self .assertEqual (environ ['SERVER_PROTOCOL' ], 'HTTP/1.0' )
88
-
89
- def test_environ_host_port_header (self ):
90
- self .message = protocol .RawRequestMessage (
91
- 'GET' , '/path' , (1 , 1 ), self .headers , True , 'deflate' )
92
- self .headers .add ('HOST' , 'python.org:443' )
93
- environ = self ._make_one ()
94
-
95
- self .assertEqual (environ ['HTTP_HOST' ], 'python.org:443' )
96
- self .assertEqual (environ ['SERVER_NAME' ], 'python.org' )
97
- self .assertEqual (environ ['SERVER_PORT' ], '443' )
98
- self .assertEqual (environ ['SERVER_PROTOCOL' ], 'HTTP/1.1' )
99
-
100
- def test_environ_forward (self ):
101
- self .transport .get_extra_info .return_value = 'localhost,127.0.0.1'
102
- environ = self ._make_one ()
103
-
104
- self .assertEqual (environ ['REMOTE_ADDR' ], '127.0.0.1' )
105
- self .assertEqual (environ ['REMOTE_PORT' ], '80' )
106
-
107
- self .transport .get_extra_info .return_value = 'localhost,127.0.0.1:443'
108
- environ = self ._make_one ()
109
-
110
- self .assertEqual (environ ['REMOTE_ADDR' ], '127.0.0.1' )
111
- self .assertEqual (environ ['REMOTE_PORT' ], '443' )
112
-
113
- self .transport .get_extra_info .return_value = ('127.0.0.1' , 443 )
79
+ get_extra_info_calls = self .transport .get_extra_info .mock_calls
80
+ expected_calls = [
81
+ unittest .mock .call ('peername' ),
82
+ unittest .mock .call ('sockname' ),
83
+ ]
84
+ self .assertEqual (expected_calls , get_extra_info_calls )
85
+
86
+ 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
+ self .headers .update ({'HOST' : 'example.com:9999' })
114
91
environ = self ._make_one ()
92
+ self .assertEqual (environ ['SERVER_PORT' ], '82' )
115
93
116
- self .assertEqual (environ ['REMOTE_ADDR' ], '127.0.0.1' )
117
- self .assertEqual (environ ['REMOTE_PORT' ], '443' )
118
-
119
- self .transport .get_extra_info .return_value = '[::1]'
120
- environ = self ._make_one ()
121
-
122
- self .assertEqual (environ ['REMOTE_ADDR' ], '::1' )
123
- self .assertEqual (environ ['REMOTE_PORT' ], '80' )
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
+ self .headers .update ({'HOST' : 'example.com:9999' })
99
+ environ = self ._make_one (is_ssl = True )
100
+ self .assertEqual (environ ['SERVER_PORT' ], '82' )
124
101
125
102
def test_wsgi_response (self ):
126
103
srv = self ._make_srv ()
@@ -280,3 +257,20 @@ def test_dont_unquote_environ_path_info(self):
280
257
'GET' , path , (1 , 0 ), self .headers , True , 'deflate' )
281
258
environ = self ._make_one ()
282
259
self .assertEqual (environ ['PATH_INFO' ], path )
260
+
261
+ def test_not_add_authorization (self ):
262
+ self .headers .extend ({'AUTHORIZATION' : 'spam' ,
263
+ 'X-CUSTOM-HEADER' : 'eggs' })
264
+ self .message = protocol .RawRequestMessage (
265
+ 'GET' , '/' , (1 , 1 ), self .headers , True , 'deflate' )
266
+ environ = self ._make_one ()
267
+ self .assertEqual ('eggs' , environ ['HTTP_X_CUSTOM_HEADER' ])
268
+ self .assertFalse ('AUTHORIZATION' in environ )
269
+
270
+ def test_http_1_0_no_host (self ):
271
+ headers = multidict .MultiDict ({})
272
+ self .message = protocol .RawRequestMessage (
273
+ 'GET' , '/' , (1 , 0 ), headers , True , 'deflate' )
274
+ environ = self ._make_one ()
275
+ self .assertEqual (environ ['SERVER_NAME' ], '2.3.4.5' )
276
+ self .assertEqual (environ ['SERVER_PORT' ], '80' )
0 commit comments