Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 10 additions & 3 deletions Lib/test/support/os_helper.py
Original file line number Diff line number Diff line change
Expand Up @@ -701,16 +701,23 @@ def __init__(self):
self._environ = os.environ
self._changed = {}

def _convert(self, envvar):
if os.name == "nt":
return envvar.upper()
return envvar

def __getitem__(self, envvar):
return self._environ[envvar]
return self._environ[self._convert(envvar)]

def __setitem__(self, envvar, value):
# Remember the initial value on the first access
envvar = self._convert(envvar)
if envvar not in self._changed:
self._changed[envvar] = self._environ.get(envvar)
self._environ[envvar] = value

def __delitem__(self, envvar):
envvar = self._convert(envvar)
# Remember the initial value on the first access
if envvar not in self._changed:
self._changed[envvar] = self._environ.get(envvar)
Expand All @@ -727,10 +734,10 @@ def __len__(self):
return len(self._environ)

def set(self, envvar, value):
self[envvar] = value
self[self._convert(envvar)] = value

def unset(self, envvar):
del self[envvar]
del self[self._convert(envvar)]

def copy(self):
# We do what os.environ.copy() does.
Expand Down
25 changes: 11 additions & 14 deletions Lib/test/test_urllib.py
Original file line number Diff line number Diff line change
Expand Up @@ -258,34 +258,31 @@ class ProxyTests_withOrderedEnv(unittest.TestCase):

def setUp(self):
# We need to test conditions, where variable order _is_ significant
self._saved_env = os.environ
# Monkey patch os.environ, start with empty fake environment
os.environ = collections.OrderedDict()

def tearDown(self):
os.environ = self._saved_env
self.env = self.enterContext(os_helper.EnvironmentVarGuard())
# Start with empty fake environment
self.env.clear()

def test_getproxies_environment_prefer_lowercase(self):
# Test lowercase preference with removal
os.environ['no_proxy'] = ''
os.environ['No_Proxy'] = 'localhost'
self.env['no_proxy'] = ''
self.env['No_Proxy'] = 'localhost'
self.assertFalse(urllib.request.proxy_bypass_environment('localhost'))
self.assertFalse(urllib.request.proxy_bypass_environment('arbitrary'))
os.environ['http_proxy'] = ''
os.environ['HTTP_PROXY'] = 'http://somewhere:3128'
self.env['http_proxy'] = ''
self.env['HTTP_PROXY'] = 'http://somewhere:3128'
proxies = urllib.request.getproxies_environment()
self.assertEqual({}, proxies)
# Test lowercase preference of proxy bypass and correct matching including ports
os.environ['no_proxy'] = 'localhost, noproxy.com, my.proxy:1234'
os.environ['No_Proxy'] = 'xyz.com'
self.env['no_proxy'] = 'localhost, noproxy.com, my.proxy:1234'
self.env['No_Proxy'] = 'xyz.com'
self.assertTrue(urllib.request.proxy_bypass_environment('localhost'))
self.assertTrue(urllib.request.proxy_bypass_environment('noproxy.com:5678'))
self.assertTrue(urllib.request.proxy_bypass_environment('my.proxy:1234'))
self.assertFalse(urllib.request.proxy_bypass_environment('my.proxy'))
self.assertFalse(urllib.request.proxy_bypass_environment('arbitrary'))
# Test lowercase preference with replacement
os.environ['http_proxy'] = 'http://somewhere:3128'
os.environ['Http_Proxy'] = 'http://somewhereelse:3128'
self.env['http_proxy'] = 'http://somewhere:3128'
self.env['Http_Proxy'] = 'http://somewhereelse:3128'
proxies = urllib.request.getproxies_environment()
self.assertEqual('http://somewhere:3128', proxies['http'])

Expand Down
44 changes: 22 additions & 22 deletions Lib/test/test_urllib2.py
Original file line number Diff line number Diff line change
Expand Up @@ -1444,30 +1444,30 @@ def test_proxy(self):
[tup[0:2] for tup in o.calls])

def test_proxy_no_proxy(self):
os.environ['no_proxy'] = 'python.org'
o = OpenerDirector()
ph = urllib.request.ProxyHandler(dict(http="proxy.example.com"))
o.add_handler(ph)
req = Request("http://www.perl.org/")
self.assertEqual(req.host, "www.perl.org")
o.open(req)
self.assertEqual(req.host, "proxy.example.com")
req = Request("http://www.python.org")
self.assertEqual(req.host, "www.python.org")
o.open(req)
self.assertEqual(req.host, "www.python.org")
del os.environ['no_proxy']
with os_helper.EnvironmentVarGuard() as env:
env['no_proxy'] = 'python.org'
o = OpenerDirector()
ph = urllib.request.ProxyHandler(dict(http="proxy.example.com"))
o.add_handler(ph)
req = Request("http://www.perl.org/")
self.assertEqual(req.host, "www.perl.org")
o.open(req)
self.assertEqual(req.host, "proxy.example.com")
req = Request("http://www.python.org")
self.assertEqual(req.host, "www.python.org")
o.open(req)
self.assertEqual(req.host, "www.python.org")

def test_proxy_no_proxy_all(self):
os.environ['no_proxy'] = '*'
o = OpenerDirector()
ph = urllib.request.ProxyHandler(dict(http="proxy.example.com"))
o.add_handler(ph)
req = Request("http://www.python.org")
self.assertEqual(req.host, "www.python.org")
o.open(req)
self.assertEqual(req.host, "www.python.org")
del os.environ['no_proxy']
with os_helper.EnvironmentVarGuard() as env:
env['no_proxy'] = '*'
o = OpenerDirector()
ph = urllib.request.ProxyHandler(dict(http="proxy.example.com"))
o.add_handler(ph)
req = Request("http://www.python.org")
self.assertEqual(req.host, "www.python.org")
o.open(req)
self.assertEqual(req.host, "www.python.org")

def test_proxy_https(self):
o = OpenerDirector()
Expand Down
19 changes: 7 additions & 12 deletions Lib/test/test_urllib2_localnet.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
from test import support
from test.support import hashlib_helper
from test.support import threading_helper
from test.support import os_helper

try:
import ssl
Expand Down Expand Up @@ -330,12 +331,9 @@ class ProxyAuthTests(unittest.TestCase):
def setUp(self):
super(ProxyAuthTests, self).setUp()
# Ignore proxy bypass settings in the environment.
def restore_environ(old_environ):
os.environ.clear()
os.environ.update(old_environ)
self.addCleanup(restore_environ, os.environ.copy())
os.environ['NO_PROXY'] = ''
os.environ['no_proxy'] = ''
env = self.enterContext(os_helper.EnvironmentVarGuard())
env['NO_PROXY'] = ''
env['no_proxy'] = ''

self.digest_auth_handler = DigestAuthHandler()
self.digest_auth_handler.set_users({self.USER: self.PASSWD})
Expand Down Expand Up @@ -456,12 +454,9 @@ def setUp(self):
self.addCleanup(urllib.request.urlcleanup)

# Ignore proxies for localhost tests.
def restore_environ(old_environ):
os.environ.clear()
os.environ.update(old_environ)
self.addCleanup(restore_environ, os.environ.copy())
os.environ['NO_PROXY'] = '*'
os.environ['no_proxy'] = '*'
env = self.enterContext(os_helper.EnvironmentVarGuard())
env['NO_PROXY'] = '*'
env['no_proxy'] = '*'

def urlopen(self, url, data=None, **kwargs):
l = []
Expand Down
Loading