|
13 | 13 | import re
|
14 | 14 | import sys
|
15 | 15 |
|
16 |
| -from test import test_support |
| 16 | +from test import support |
17 | 17 |
|
18 | 18 | class MockServer(WSGIServer):
|
19 | 19 | """Non-socket HTTP server"""
|
@@ -377,32 +377,62 @@ def handle_error(self):
|
377 | 377 |
|
378 | 378 |
|
379 | 379 | class HandlerTests(TestCase):
|
380 |
| - |
381 |
| - def checkEnvironAttrs(self, handler): |
382 |
| - env = handler.environ |
383 |
| - for attr in [ |
384 |
| - 'version','multithread','multiprocess','run_once','file_wrapper' |
385 |
| - ]: |
386 |
| - if attr=='file_wrapper' and handler.wsgi_file_wrapper is None: |
387 |
| - continue |
388 |
| - self.assertEqual(getattr(handler,'wsgi_'+attr),env['wsgi.'+attr]) |
389 |
| - |
390 |
| - def checkOSEnviron(self,handler): |
391 |
| - empty = {}; setup_testing_defaults(empty) |
392 |
| - env = handler.environ |
393 |
| - from os import environ |
394 |
| - for k,v in environ.items(): |
395 |
| - if k not in empty: |
396 |
| - self.assertEqual(env[k],v) |
397 |
| - for k,v in empty.items(): |
398 |
| - self.assertIn(k, env) |
| 380 | + # testEnviron() can produce long error message |
| 381 | + maxDiff = 80 * 50 |
399 | 382 |
|
400 | 383 | def testEnviron(self):
|
401 |
| - h = TestHandler(X="Y") |
402 |
| - h.setup_environ() |
403 |
| - self.checkEnvironAttrs(h) |
404 |
| - self.checkOSEnviron(h) |
405 |
| - self.assertEqual(h.environ["X"],"Y") |
| 384 | + os_environ = { |
| 385 | + # very basic environment |
| 386 | + 'HOME': '/my/home', |
| 387 | + 'PATH': '/my/path', |
| 388 | + 'LANG': 'fr_FR.UTF-8', |
| 389 | + |
| 390 | + # set some WSGI variables |
| 391 | + 'SCRIPT_NAME': 'test_script_name', |
| 392 | + 'SERVER_NAME': 'test_server_name', |
| 393 | + } |
| 394 | + |
| 395 | + with support.swap_attr(TestHandler, 'os_environ', os_environ): |
| 396 | + # override X and HOME variables |
| 397 | + handler = TestHandler(X="Y", HOME="/override/home") |
| 398 | + handler.setup_environ() |
| 399 | + |
| 400 | + # Check that wsgi_xxx attributes are copied to wsgi.xxx variables |
| 401 | + # of handler.environ |
| 402 | + for attr in ('version', 'multithread', 'multiprocess', 'run_once', |
| 403 | + 'file_wrapper'): |
| 404 | + self.assertEqual(getattr(handler, 'wsgi_' + attr), |
| 405 | + handler.environ['wsgi.' + attr]) |
| 406 | + |
| 407 | + # Test handler.environ as a dict |
| 408 | + expected = {} |
| 409 | + setup_testing_defaults(expected) |
| 410 | + # Handler inherits os_environ variables which are not overriden |
| 411 | + # by SimpleHandler.add_cgi_vars() (SimpleHandler.base_env) |
| 412 | + for key, value in os_environ.items(): |
| 413 | + if key not in expected: |
| 414 | + expected[key] = value |
| 415 | + expected.update({ |
| 416 | + # X doesn't exist in os_environ |
| 417 | + "X": "Y", |
| 418 | + # HOME is overriden by TestHandler |
| 419 | + 'HOME': "/override/home", |
| 420 | + |
| 421 | + # overriden by setup_testing_defaults() |
| 422 | + "SCRIPT_NAME": "", |
| 423 | + "SERVER_NAME": "127.0.0.1", |
| 424 | + |
| 425 | + # set by BaseHandler.setup_environ() |
| 426 | + 'wsgi.input': handler.get_stdin(), |
| 427 | + 'wsgi.errors': handler.get_stderr(), |
| 428 | + 'wsgi.version': (1, 0), |
| 429 | + 'wsgi.run_once': False, |
| 430 | + 'wsgi.url_scheme': 'http', |
| 431 | + 'wsgi.multithread': True, |
| 432 | + 'wsgi.multiprocess': True, |
| 433 | + 'wsgi.file_wrapper': util.FileWrapper, |
| 434 | + }) |
| 435 | + self.assertDictEqual(handler.environ, expected) |
406 | 436 |
|
407 | 437 | def testCGIEnviron(self):
|
408 | 438 | h = BaseCGIHandler(None,None,None,{})
|
@@ -565,7 +595,7 @@ def close(self):
|
565 | 595 |
|
566 | 596 |
|
567 | 597 | def test_main():
|
568 |
| - test_support.run_unittest(__name__) |
| 598 | + support.run_unittest(__name__) |
569 | 599 |
|
570 | 600 | if __name__ == "__main__":
|
571 | 601 | test_main()
|
0 commit comments