1import os
| 1import os
|
| 2import pytest
|
2import socket
| 3import socket
|
3import unittest
| |
4 5from unit.applications.proto import TestApplicationProto
| 4 5from unit.applications.proto import TestApplicationProto
|
| 6from conftest import waitforfiles
|
6 7 8class TestStatic(TestApplicationProto): 9 prerequisites = {} 10
| 7 8 9class TestStatic(TestApplicationProto): 10 prerequisites = {} 11
|
11 def setUp(self): 12 super().setUp()
| 12 def setup_method(self): 13 super().setup_method()
|
13
| 14
|
14 os.makedirs(self.testdir + '/assets/dir') 15 with open(self.testdir + '/assets/index.html', 'w') as index, \ 16 open(self.testdir + '/assets/README', 'w') as readme, \ 17 open(self.testdir + '/assets/log.log', 'w') as log, \ 18 open(self.testdir + '/assets/dir/file', 'w') as file:
| 15 os.makedirs(self.temp_dir + '/assets/dir') 16 with open(self.temp_dir + '/assets/index.html', 'w') as index, open( 17 self.temp_dir + '/assets/README', 'w' 18 ) as readme, open(self.temp_dir + '/assets/log.log', 'w') as log, open( 19 self.temp_dir + '/assets/dir/file', 'w' 20 ) as file:
|
19 index.write('0123456789') 20 readme.write('readme') 21 log.write('[debug]') 22 file.write('blah') 23 24 self._load_conf( 25 { 26 "listeners": {"*:7080": {"pass": "routes"}},
| 21 index.write('0123456789') 22 readme.write('readme') 23 log.write('[debug]') 24 file.write('blah') 25 26 self._load_conf( 27 { 28 "listeners": {"*:7080": {"pass": "routes"}},
|
27 "routes": [{"action": {"share": self.testdir + "/assets"}}],
| 29 "routes": [{"action": {"share": self.temp_dir + "/assets"}}],
|
28 "settings": { 29 "http": { 30 "static": { 31 "mime_types": {"text/plain": [".log", "README"]} 32 } 33 } 34 }, 35 } 36 ) 37 38 def test_static_index(self):
| 30 "settings": { 31 "http": { 32 "static": { 33 "mime_types": {"text/plain": [".log", "README"]} 34 } 35 } 36 }, 37 } 38 ) 39 40 def test_static_index(self):
|
39 self.assertEqual( 40 self.get(url='/index.html')['body'], '0123456789', 'index' 41 ) 42 self.assertEqual(self.get(url='/')['body'], '0123456789', 'index 2') 43 self.assertEqual(self.get(url='//')['body'], '0123456789', 'index 3') 44 self.assertEqual(self.get(url='/.')['body'], '0123456789', 'index 4') 45 self.assertEqual(self.get(url='/./')['body'], '0123456789', 'index 5') 46 self.assertEqual( 47 self.get(url='/?blah')['body'], '0123456789', 'index vars' 48 ) 49 self.assertEqual( 50 self.get(url='/#blah')['body'], '0123456789', 'index anchor' 51 ) 52 self.assertEqual( 53 self.get(url='/dir/')['status'], 404, 'index not found' 54 )
| 41 assert self.get(url='/index.html')['body'] == '0123456789', 'index' 42 assert self.get(url='/')['body'] == '0123456789', 'index 2' 43 assert self.get(url='//')['body'] == '0123456789', 'index 3' 44 assert self.get(url='/.')['body'] == '0123456789', 'index 4' 45 assert self.get(url='/./')['body'] == '0123456789', 'index 5' 46 assert self.get(url='/?blah')['body'] == '0123456789', 'index vars' 47 assert self.get(url='/#blah')['body'] == '0123456789', 'index anchor' 48 assert self.get(url='/dir/')['status'] == 404, 'index not found'
|
55 56 resp = self.get(url='/index.html/')
| 49 50 resp = self.get(url='/index.html/')
|
57 self.assertEqual(resp['status'], 404, 'index not found 2 status') 58 self.assertEqual( 59 resp['headers']['Content-Type'], 60 'text/html', 61 'index not found 2 Content-Type', 62 )
| 51 assert resp['status'] == 404, 'index not found 2 status' 52 assert ( 53 resp['headers']['Content-Type'] == 'text/html' 54 ), 'index not found 2 Content-Type'
|
63 64 def test_static_large_file(self): 65 file_size = 32 * 1024 * 1024
| 55 56 def test_static_large_file(self): 57 file_size = 32 * 1024 * 1024
|
66 with open(self.testdir + '/assets/large', 'wb') as f:
| 58 with open(self.temp_dir + '/assets/large', 'wb') as f:
|
67 f.seek(file_size - 1) 68 f.write(b'\0') 69
| 59 f.seek(file_size - 1) 60 f.write(b'\0') 61
|
70 self.assertEqual( 71 len( 72 self.get(url='/large', read_buffer_size=1024 * 1024)['body'] 73 ), 74 file_size, 75 'large file', 76 )
| 62 assert ( 63 len(self.get(url='/large', read_buffer_size=1024 * 1024)['body']) 64 == file_size 65 ), 'large file'
|
77 78 def test_static_etag(self): 79 etag = self.get(url='/')['headers']['ETag'] 80 etag_2 = self.get(url='/README')['headers']['ETag'] 81
| 66 67 def test_static_etag(self): 68 etag = self.get(url='/')['headers']['ETag'] 69 etag_2 = self.get(url='/README')['headers']['ETag'] 70
|
82 self.assertNotEqual(etag, etag_2, 'different ETag') 83 self.assertEqual( 84 etag, self.get(url='/')['headers']['ETag'], 'same ETag' 85 )
| 71 assert etag != etag_2, 'different ETag' 72 assert etag == self.get(url='/')['headers']['ETag'], 'same ETag'
|
86
| 73
|
87 with open(self.testdir + '/assets/index.html', 'w') as f:
| 74 with open(self.temp_dir + '/assets/index.html', 'w') as f:
|
88 f.write('blah') 89
| 75 f.write('blah') 76
|
90 self.assertNotEqual( 91 etag, self.get(url='/')['headers']['ETag'], 'new ETag' 92 )
| 77 assert etag != self.get(url='/')['headers']['ETag'], 'new ETag'
|
93 94 def test_static_redirect(self): 95 resp = self.get(url='/dir')
| 78 79 def test_static_redirect(self): 80 resp = self.get(url='/dir')
|
96 self.assertEqual(resp['status'], 301, 'redirect status') 97 self.assertEqual( 98 resp['headers']['Location'], '/dir/', 'redirect Location' 99 ) 100 self.assertNotIn( 101 'Content-Type', resp['headers'], 'redirect Content-Type' 102 )
| 81 assert resp['status'] == 301, 'redirect status' 82 assert resp['headers']['Location'] == '/dir/', 'redirect Location' 83 assert 'Content-Type' not in resp['headers'], 'redirect Content-Type'
|
103 104 def test_static_space_in_name(self): 105 os.rename(
| 84 85 def test_static_space_in_name(self): 86 os.rename(
|
106 self.testdir + '/assets/dir/file', 107 self.testdir + '/assets/dir/fi le',
| 87 self.temp_dir + '/assets/dir/file', 88 self.temp_dir + '/assets/dir/fi le',
|
108 )
| 89 )
|
109 self.waitforfiles(self.testdir + '/assets/dir/fi le') 110 self.assertEqual( 111 self.get(url='/dir/fi le')['body'], 'blah', 'file name' 112 )
| 90 assert waitforfiles(self.temp_dir + '/assets/dir/fi le') 91 assert self.get(url='/dir/fi le')['body'] == 'blah', 'file name'
|
113
| 92
|
114 os.rename(self.testdir + '/assets/dir', self.testdir + '/assets/di r') 115 self.waitforfiles(self.testdir + '/assets/di r/fi le') 116 self.assertEqual( 117 self.get(url='/di r/fi le')['body'], 'blah', 'dir name' 118 )
| 93 os.rename(self.temp_dir + '/assets/dir', self.temp_dir + '/assets/di r') 94 assert waitforfiles(self.temp_dir + '/assets/di r/fi le') 95 assert self.get(url='/di r/fi le')['body'] == 'blah', 'dir name'
|
119 120 os.rename(
| 96 97 os.rename(
|
121 self.testdir + '/assets/di r', self.testdir + '/assets/ di r '
| 98 self.temp_dir + '/assets/di r', self.temp_dir + '/assets/ di r '
|
122 )
| 99 )
|
123 self.waitforfiles(self.testdir + '/assets/ di r /fi le') 124 self.assertEqual( 125 self.get(url='/ di r /fi le')['body'], 'blah', 'dir name enclosing' 126 )
| 100 assert waitforfiles(self.temp_dir + '/assets/ di r /fi le') 101 assert ( 102 self.get(url='/ di r /fi le')['body'] == 'blah' 103 ), 'dir name enclosing'
|
127
| 104
|
128 self.assertEqual( 129 self.get(url='/%20di%20r%20/fi le')['body'], 'blah', 'dir encoded' 130 ) 131 self.assertEqual( 132 self.get(url='/ di r %2Ffi le')['body'], 'blah', 'slash encoded' 133 ) 134 self.assertEqual( 135 self.get(url='/ di r /fi%20le')['body'], 'blah', 'file encoded' 136 ) 137 self.assertEqual( 138 self.get(url='/%20di%20r%20%2Ffi%20le')['body'], 'blah', 'encoded' 139 ) 140 self.assertEqual( 141 self.get(url='/%20%64%69%20%72%20%2F%66%69%20%6C%65')['body'], 142 'blah', 143 'encoded 2', 144 )
| 105 assert ( 106 self.get(url='/%20di%20r%20/fi le')['body'] == 'blah' 107 ), 'dir encoded' 108 assert ( 109 self.get(url='/ di r %2Ffi le')['body'] == 'blah' 110 ), 'slash encoded' 111 assert ( 112 self.get(url='/ di r /fi%20le')['body'] == 'blah' 113 ), 'file encoded' 114 assert ( 115 self.get(url='/%20di%20r%20%2Ffi%20le')['body'] == 'blah' 116 ), 'encoded' 117 assert ( 118 self.get(url='/%20%64%69%20%72%20%2F%66%69%20%6C%65')['body'] 119 == 'blah' 120 ), 'encoded 2'
|
145 146 os.rename(
| 121 122 os.rename(
|
147 self.testdir + '/assets/ di r /fi le', 148 self.testdir + '/assets/ di r / fi le ',
| 123 self.temp_dir + '/assets/ di r /fi le', 124 self.temp_dir + '/assets/ di r / fi le ',
|
149 )
| 125 )
|
150 self.waitforfiles(self.testdir + '/assets/ di r / fi le ') 151 self.assertEqual( 152 self.get(url='/%20di%20r%20/%20fi%20le%20')['body'], 153 'blah', 154 'file name enclosing', 155 )
| 126 assert waitforfiles(self.temp_dir + '/assets/ di r / fi le ') 127 assert ( 128 self.get(url='/%20di%20r%20/%20fi%20le%20')['body'] == 'blah' 129 ), 'file name enclosing'
|
156 157 try: 158 print('файл') 159 utf8 = True 160 161 except: 162 utf8 = False 163 164 if utf8: 165 os.rename(
| 130 131 try: 132 print('файл') 133 utf8 = True 134 135 except: 136 utf8 = False 137 138 if utf8: 139 os.rename(
|
166 self.testdir + '/assets/ di r / fi le ', 167 self.testdir + '/assets/ di r /фа йл',
| 140 self.temp_dir + '/assets/ di r / fi le ', 141 self.temp_dir + '/assets/ di r /фа йл',
|
168 )
| 142 )
|
169 self.waitforfiles(self.testdir + '/assets/ di r /фа йл') 170 self.assertEqual( 171 self.get(url='/ di r /фа йл')['body'], 'blah', 'file name 2' 172 )
| 143 assert waitforfiles(self.temp_dir + '/assets/ di r /фа йл') 144 assert ( 145 self.get(url='/ di r /фа йл')['body'] == 'blah' 146 ), 'file name 2'
|
173 174 os.rename(
| 147 148 os.rename(
|
175 self.testdir + '/assets/ di r ', 176 self.testdir + '/assets/ди ректория',
| 149 self.temp_dir + '/assets/ di r ', 150 self.temp_dir + '/assets/ди ректория',
|
177 )
| 151 )
|
178 self.waitforfiles(self.testdir + '/assets/ди ректория/фа йл') 179 self.assertEqual( 180 self.get(url='/ди ректория/фа йл')['body'], 'blah', 'dir name 2' 181 )
| 152 assert waitforfiles(self.temp_dir + '/assets/ди ректория/фа йл') 153 assert ( 154 self.get(url='/ди ректория/фа йл')['body'] == 'blah' 155 ), 'dir name 2'
|
182 183 def test_static_unix_socket(self): 184 sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
| 156 157 def test_static_unix_socket(self): 158 sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
|
185 sock.bind(self.testdir + '/assets/unix_socket')
| 159 sock.bind(self.temp_dir + '/assets/unix_socket')
|
186
| 160
|
187 self.assertEqual(self.get(url='/unix_socket')['status'], 404, 'socket')
| 161 assert self.get(url='/unix_socket')['status'] == 404, 'socket'
|
188 189 sock.close() 190 191 def test_static_unix_fifo(self):
| 162 163 sock.close() 164 165 def test_static_unix_fifo(self):
|
192 os.mkfifo(self.testdir + '/assets/fifo')
| 166 os.mkfifo(self.temp_dir + '/assets/fifo')
|
193
| 167
|
194 self.assertEqual(self.get(url='/fifo')['status'], 404, 'fifo')
| 168 assert self.get(url='/fifo')['status'] == 404, 'fifo'
|
195 196 def test_static_symlink(self):
| 169 170 def test_static_symlink(self):
|
197 os.symlink(self.testdir + '/assets/dir', self.testdir + '/assets/link')
| 171 os.symlink(self.temp_dir + '/assets/dir', self.temp_dir + '/assets/link')
|
198
| 172
|
199 self.assertEqual(self.get(url='/dir')['status'], 301, 'dir') 200 self.assertEqual(self.get(url='/dir/file')['status'], 200, 'file') 201 self.assertEqual(self.get(url='/link')['status'], 301, 'symlink dir') 202 self.assertEqual( 203 self.get(url='/link/file')['status'], 200, 'symlink file' 204 )
| 173 assert self.get(url='/dir')['status'] == 301, 'dir' 174 assert self.get(url='/dir/file')['status'] == 200, 'file' 175 assert self.get(url='/link')['status'] == 301, 'symlink dir' 176 assert self.get(url='/link/file')['status'] == 200, 'symlink file'
|
205 206 def test_static_method(self): 207 resp = self.head()
| 177 178 def test_static_method(self): 179 resp = self.head()
|
208 self.assertEqual(resp['status'], 200, 'HEAD status') 209 self.assertEqual(resp['body'], '', 'HEAD empty body')
| 180 assert resp['status'] == 200, 'HEAD status' 181 assert resp['body'] == '', 'HEAD empty body'
|
210
| 182
|
211 self.assertEqual(self.delete()['status'], 405, 'DELETE') 212 self.assertEqual(self.post()['status'], 405, 'POST') 213 self.assertEqual(self.put()['status'], 405, 'PUT')
| 183 assert self.delete()['status'] == 405, 'DELETE' 184 assert self.post()['status'] == 405, 'POST' 185 assert self.put()['status'] == 405, 'PUT'
|
214 215 def test_static_path(self):
| 186 187 def test_static_path(self):
|
216 self.assertEqual( 217 self.get(url='/dir/../dir/file')['status'], 200, 'relative' 218 )
| 188 assert self.get(url='/dir/../dir/file')['status'] == 200, 'relative'
|
219
| 189
|
220 self.assertEqual(self.get(url='./')['status'], 400, 'path invalid') 221 self.assertEqual(self.get(url='../')['status'], 400, 'path invalid 2') 222 self.assertEqual(self.get(url='/..')['status'], 400, 'path invalid 3') 223 self.assertEqual( 224 self.get(url='../assets/')['status'], 400, 'path invalid 4' 225 ) 226 self.assertEqual( 227 self.get(url='/../assets/')['status'], 400, 'path invalid 5' 228 )
| 190 assert self.get(url='./')['status'] == 400, 'path invalid' 191 assert self.get(url='../')['status'] == 400, 'path invalid 2' 192 assert self.get(url='/..')['status'] == 400, 'path invalid 3' 193 assert self.get(url='../assets/')['status'] == 400, 'path invalid 4' 194 assert self.get(url='/../assets/')['status'] == 400, 'path invalid 5'
|
229 230 def test_static_two_clients(self): 231 _, sock = self.get(url='/', start=True, no_recv=True) 232 _, sock2 = self.get(url='/', start=True, no_recv=True) 233
| 195 196 def test_static_two_clients(self): 197 _, sock = self.get(url='/', start=True, no_recv=True) 198 _, sock2 = self.get(url='/', start=True, no_recv=True) 199
|
234 self.assertEqual(sock.recv(1), b'H', 'client 1') 235 self.assertEqual(sock2.recv(1), b'H', 'client 2') 236 self.assertEqual(sock.recv(1), b'T', 'client 1 again') 237 self.assertEqual(sock2.recv(1), b'T', 'client 2 again')
| 200 assert sock.recv(1) == b'H', 'client 1' 201 assert sock2.recv(1) == b'H', 'client 2' 202 assert sock.recv(1) == b'T', 'client 1 again' 203 assert sock2.recv(1) == b'T', 'client 2 again'
|
238 239 sock.close() 240 sock2.close() 241 242 def test_static_mime_types(self):
| 204 205 sock.close() 206 sock2.close() 207 208 def test_static_mime_types(self):
|
243 self.assertIn( 244 'success', 245 self.conf( 246 { 247 "text/x-code/x-blah/x-blah": "readme", 248 "text/plain": [".html", ".log", "file"], 249 }, 250 'settings/http/static/mime_types', 251 ), 252 'configure mime_types', 253 )
| 209 assert 'success' in self.conf( 210 { 211 "text/x-code/x-blah/x-blah": "readme", 212 "text/plain": [".html", ".log", "file"], 213 }, 214 'settings/http/static/mime_types', 215 ), 'configure mime_types'
|
254
| 216
|
255 self.assertEqual( 256 self.get(url='/README')['headers']['Content-Type'], 257 'text/x-code/x-blah/x-blah', 258 'mime_types string case insensitive', 259 ) 260 self.assertEqual( 261 self.get(url='/index.html')['headers']['Content-Type'], 262 'text/plain', 263 'mime_types html', 264 ) 265 self.assertEqual( 266 self.get(url='/')['headers']['Content-Type'], 267 'text/plain', 268 'mime_types index default', 269 ) 270 self.assertEqual( 271 self.get(url='/dir/file')['headers']['Content-Type'], 272 'text/plain', 273 'mime_types file in dir', 274 )
| 217 assert ( 218 self.get(url='/README')['headers']['Content-Type'] 219 == 'text/x-code/x-blah/x-blah' 220 ), 'mime_types string case insensitive' 221 assert ( 222 self.get(url='/index.html')['headers']['Content-Type'] 223 == 'text/plain' 224 ), 'mime_types html' 225 assert ( 226 self.get(url='/')['headers']['Content-Type'] == 'text/plain' 227 ), 'mime_types index default' 228 assert ( 229 self.get(url='/dir/file')['headers']['Content-Type'] 230 == 'text/plain' 231 ), 'mime_types file in dir'
|
275 276 def test_static_mime_types_partial_match(self):
| 232 233 def test_static_mime_types_partial_match(self):
|
277 self.assertIn( 278 'success', 279 self.conf( 280 { 281 "text/x-blah": ["ile", "fil", "f", "e", ".file"], 282 }, 283 'settings/http/static/mime_types', 284 ), 285 'configure mime_types', 286 ) 287 self.assertNotIn( 288 'Content-Type', self.get(url='/dir/file'), 'partial match' 289 )
| 234 assert 'success' in self.conf( 235 {"text/x-blah": ["ile", "fil", "f", "e", ".file"],}, 236 'settings/http/static/mime_types', 237 ), 'configure mime_types' 238 assert 'Content-Type' not in self.get(url='/dir/file'), 'partial match'
|
290 291 def test_static_mime_types_reconfigure(self):
| 239 240 def test_static_mime_types_reconfigure(self):
|
292 self.assertIn( 293 'success', 294 self.conf( 295 { 296 "text/x-code": "readme", 297 "text/plain": [".html", ".log", "file"], 298 }, 299 'settings/http/static/mime_types', 300 ), 301 'configure mime_types', 302 )
| 241 assert 'success' in self.conf( 242 { 243 "text/x-code": "readme", 244 "text/plain": [".html", ".log", "file"], 245 }, 246 'settings/http/static/mime_types', 247 ), 'configure mime_types'
|
303
| 248
|
304 self.assertEqual( 305 self.conf_get('settings/http/static/mime_types'), 306 {'text/x-code': 'readme', 'text/plain': ['.html', '.log', 'file']}, 307 'mime_types get', 308 ) 309 self.assertEqual( 310 self.conf_get('settings/http/static/mime_types/text%2Fx-code'), 311 'readme', 312 'mime_types get string', 313 ) 314 self.assertEqual( 315 self.conf_get('settings/http/static/mime_types/text%2Fplain'), 316 ['.html', '.log', 'file'], 317 'mime_types get array', 318 ) 319 self.assertEqual( 320 self.conf_get('settings/http/static/mime_types/text%2Fplain/1'), 321 '.log', 322 'mime_types get array element', 323 )
| 249 assert self.conf_get('settings/http/static/mime_types') == { 250 'text/x-code': 'readme', 251 'text/plain': ['.html', '.log', 'file'], 252 }, 'mime_types get' 253 assert ( 254 self.conf_get('settings/http/static/mime_types/text%2Fx-code') 255 == 'readme' 256 ), 'mime_types get string' 257 assert self.conf_get( 258 'settings/http/static/mime_types/text%2Fplain' 259 ) == ['.html', '.log', 'file'], 'mime_types get array' 260 assert ( 261 self.conf_get('settings/http/static/mime_types/text%2Fplain/1') 262 == '.log' 263 ), 'mime_types get array element'
|
324
| 264
|
325 self.assertIn( 326 'success', 327 self.conf_delete('settings/http/static/mime_types/text%2Fplain/2'), 328 'mime_types remove array element', 329 ) 330 self.assertNotIn( 331 'Content-Type', 332 self.get(url='/dir/file')['headers'], 333 'mime_types removed', 334 )
| 265 assert 'success' in self.conf_delete( 266 'settings/http/static/mime_types/text%2Fplain/2' 267 ), 'mime_types remove array element' 268 assert ( 269 'Content-Type' not in self.get(url='/dir/file')['headers'] 270 ), 'mime_types removed'
|
335
| 271
|
336 self.assertIn( 337 'success', 338 self.conf_post( 339 '"file"', 'settings/http/static/mime_types/text%2Fplain' 340 ), 341 'mime_types add array element', 342 ) 343 self.assertEqual( 344 self.get(url='/dir/file')['headers']['Content-Type'], 345 'text/plain', 346 'mime_types reverted', 347 )
| 272 assert 'success' in self.conf_post( 273 '"file"', 'settings/http/static/mime_types/text%2Fplain' 274 ), 'mime_types add array element' 275 assert ( 276 self.get(url='/dir/file')['headers']['Content-Type'] 277 == 'text/plain' 278 ), 'mime_types reverted'
|
348
| 279
|
349 self.assertIn( 350 'success', 351 self.conf( 352 '"file"', 'settings/http/static/mime_types/text%2Fplain' 353 ), 354 'configure mime_types update', 355 ) 356 self.assertEqual( 357 self.get(url='/dir/file')['headers']['Content-Type'], 358 'text/plain', 359 'mime_types updated', 360 ) 361 self.assertNotIn( 362 'Content-Type', 363 self.get(url='/log.log')['headers'], 364 'mime_types updated 2', 365 )
| 280 assert 'success' in self.conf( 281 '"file"', 'settings/http/static/mime_types/text%2Fplain' 282 ), 'configure mime_types update' 283 assert ( 284 self.get(url='/dir/file')['headers']['Content-Type'] 285 == 'text/plain' 286 ), 'mime_types updated' 287 assert ( 288 'Content-Type' not in self.get(url='/log.log')['headers'] 289 ), 'mime_types updated 2'
|
366
| 290
|
367 self.assertIn( 368 'success', 369 self.conf( 370 '".log"', 'settings/http/static/mime_types/text%2Fblahblahblah' 371 ), 372 'configure mime_types create', 373 ) 374 self.assertEqual( 375 self.get(url='/log.log')['headers']['Content-Type'], 376 'text/blahblahblah', 377 'mime_types create', 378 )
| 291 assert 'success' in self.conf( 292 '".log"', 'settings/http/static/mime_types/text%2Fblahblahblah' 293 ), 'configure mime_types create' 294 assert ( 295 self.get(url='/log.log')['headers']['Content-Type'] 296 == 'text/blahblahblah' 297 ), 'mime_types create'
|
379 380 def test_static_mime_types_correct(self):
| 298 299 def test_static_mime_types_correct(self):
|
381 self.assertIn( 382 'error', 383 self.conf( 384 {"text/x-code": "readme", "text/plain": "readme"}, 385 'settings/http/static/mime_types', 386 ), 387 'mime_types same extensions', 388 ) 389 self.assertIn( 390 'error', 391 self.conf( 392 {"text/x-code": [".h", ".c"], "text/plain": ".c"}, 393 'settings/http/static/mime_types', 394 ), 395 'mime_types same extensions array', 396 ) 397 self.assertIn( 398 'error', 399 self.conf( 400 { 401 "text/x-code": [".h", ".c", "readme"], 402 "text/plain": "README", 403 }, 404 'settings/http/static/mime_types', 405 ), 406 'mime_types same extensions case insensitive', 407 )
| 300 assert 'error' in self.conf( 301 {"text/x-code": "readme", "text/plain": "readme"}, 302 'settings/http/static/mime_types', 303 ), 'mime_types same extensions' 304 assert 'error' in self.conf( 305 {"text/x-code": [".h", ".c"], "text/plain": ".c"}, 306 'settings/http/static/mime_types', 307 ), 'mime_types same extensions array' 308 assert 'error' in self.conf( 309 {"text/x-code": [".h", ".c", "readme"], "text/plain": "README",}, 310 'settings/http/static/mime_types', 311 ), 'mime_types same extensions case insensitive'
|
408
| 312
|
409 @unittest.skip('not yet')
| 313 @pytest.mark.skip('not yet')
|
410 def test_static_mime_types_invalid(self):
| 314 def test_static_mime_types_invalid(self):
|
411 self.assertIn( 412 'error', 413 self.http( 414 b"""PUT /config/settings/http/static/mime_types/%0%00% HTTP/1.1\r
| 315 assert 'error' in self.http( 316 b"""PUT /config/settings/http/static/mime_types/%0%00% HTTP/1.1\r
|
415Host: localhost\r 416Connection: close\r 417Content-Length: 6\r 418\r 419\"blah\"""",
| 317Host: localhost\r 318Connection: close\r 319Content-Length: 6\r 320\r 321\"blah\"""",
|
420 raw_resp=True, 421 raw=True, 422 sock_type='unix', 423 addr=self.testdir + '/control.unit.sock', 424 ), 425 'mime_types invalid', 426 ) 427 428if __name__ == '__main__': 429 TestStatic.main()
| 322 raw_resp=True, 323 raw=True, 324 sock_type='unix', 325 addr=self.temp_dir + '/control.unit.sock', 326 ), 'mime_types invalid'
|
| |