summaryrefslogtreecommitdiffstats
path: root/Lib
diff options
context:
space:
mode:
authorVictor Stinner <vstinner@redhat.com>2019-06-26 16:16:35 (GMT)
committerGitHub <noreply@github.com>2019-06-26 16:16:35 (GMT)
commit5150d327924959639215ed0a78feffc0d88258da (patch)
treea9730fcb86f123c76977a48fae02c8989efa4ff5 /Lib
parent2d88e63bfcf7bccba925ab80b3f47ccf8b7aefa8 (diff)
downloadcpython-5150d327924959639215ed0a78feffc0d88258da.zip
cpython-5150d327924959639215ed0a78feffc0d88258da.tar.gz
cpython-5150d327924959639215ed0a78feffc0d88258da.tar.bz2
bpo-37411: Rewrite test_wsgiref.testEnviron() (GH-14394)
Fix test_wsgiref.testEnviron() to no longer depend on the environment variables (don't fail if "X" variable is set). testEnviron() now overrides os.environ to get a deterministic environment. Test full TestHandler.environ content: not only a few selected variables.
Diffstat (limited to 'Lib')
-rw-r--r--Lib/test/test_wsgiref.py78
1 files changed, 54 insertions, 24 deletions
diff --git a/Lib/test/test_wsgiref.py b/Lib/test/test_wsgiref.py
index 42432bf..bce3329 100644
--- a/Lib/test/test_wsgiref.py
+++ b/Lib/test/test_wsgiref.py
@@ -548,32 +548,62 @@ class TestHandler(ErrorHandler):
class HandlerTests(TestCase):
-
- def checkEnvironAttrs(self, handler):
- env = handler.environ
- for attr in [
- 'version','multithread','multiprocess','run_once','file_wrapper'
- ]:
- if attr=='file_wrapper' and handler.wsgi_file_wrapper is None:
- continue
- self.assertEqual(getattr(handler,'wsgi_'+attr),env['wsgi.'+attr])
-
- def checkOSEnviron(self,handler):
- empty = {}; setup_testing_defaults(empty)
- env = handler.environ
- from os import environ
- for k,v in environ.items():
- if k not in empty:
- self.assertEqual(env[k],v)
- for k,v in empty.items():
- self.assertIn(k, env)
+ # testEnviron() can produce long error message
+ maxDiff = 80 * 50
def testEnviron(self):
- h = TestHandler(X="Y")
- h.setup_environ()
- self.checkEnvironAttrs(h)
- self.checkOSEnviron(h)
- self.assertEqual(h.environ["X"],"Y")
+ os_environ = {
+ # very basic environment
+ 'HOME': '/my/home',
+ 'PATH': '/my/path',
+ 'LANG': 'fr_FR.UTF-8',
+
+ # set some WSGI variables
+ 'SCRIPT_NAME': 'test_script_name',
+ 'SERVER_NAME': 'test_server_name',
+ }
+
+ with support.swap_attr(TestHandler, 'os_environ', os_environ):
+ # override X and HOME variables
+ handler = TestHandler(X="Y", HOME="/override/home")
+ handler.setup_environ()
+
+ # Check that wsgi_xxx attributes are copied to wsgi.xxx variables
+ # of handler.environ
+ for attr in ('version', 'multithread', 'multiprocess', 'run_once',
+ 'file_wrapper'):
+ self.assertEqual(getattr(handler, 'wsgi_' + attr),
+ handler.environ['wsgi.' + attr])
+
+ # Test handler.environ as a dict
+ expected = {}
+ setup_testing_defaults(expected)
+ # Handler inherits os_environ variables which are not overriden
+ # by SimpleHandler.add_cgi_vars() (SimpleHandler.base_env)
+ for key, value in os_environ.items():
+ if key not in expected:
+ expected[key] = value
+ expected.update({
+ # X doesn't exist in os_environ
+ "X": "Y",
+ # HOME is overriden by TestHandler
+ 'HOME': "/override/home",
+
+ # overriden by setup_testing_defaults()
+ "SCRIPT_NAME": "",
+ "SERVER_NAME": "127.0.0.1",
+
+ # set by BaseHandler.setup_environ()
+ 'wsgi.input': handler.get_stdin(),
+ 'wsgi.errors': handler.get_stderr(),
+ 'wsgi.version': (1, 0),
+ 'wsgi.run_once': False,
+ 'wsgi.url_scheme': 'http',
+ 'wsgi.multithread': True,
+ 'wsgi.multiprocess': True,
+ 'wsgi.file_wrapper': util.FileWrapper,
+ })
+ self.assertDictEqual(handler.environ, expected)
def testCGIEnviron(self):
h = BaseCGIHandler(None,None,None,{})