Commit 5fee460b authored by Senthil Kumaran's avatar Senthil Kumaran

Fix for issue5102, timeout value propages between redirects, proxy, digest and

auth handlers. Fixed tests to reflect the same.
parent 5215875a
......@@ -224,8 +224,8 @@ def test_password_manager_default_port(self):
class MockOpener:
addheaders = []
def open(self, req, data=None):
self.req, self.data = req, data
def open(self, req, data=None,timeout=socket._GLOBAL_DEFAULT_TIMEOUT):
self.req, self.data, self.timeout = req, data, timeout
def error(self, proto, *args):
self.proto, self.args = proto, args
......@@ -850,6 +850,7 @@ class HandlerTests(unittest.TestCase):
method = getattr(h, "http_error_%s" % code)
req = Request(from_url, data)
req.add_header("Nonsense", "viking=withhold")
req.timeout = socket._GLOBAL_DEFAULT_TIMEOUT
if data is not None:
req.add_header("Content-Length", str(len(data)))
req.add_unredirected_header("Spam", "spam")
......@@ -878,6 +879,7 @@ class HandlerTests(unittest.TestCase):
# loop detection
req = Request(from_url)
req.timeout = socket._GLOBAL_DEFAULT_TIMEOUT
def redirect(h, req, url=to_url):
h.http_error_302(req, MockFile(), 302, "Blah",
MockHeaders({"location": url}))
......@@ -887,6 +889,7 @@ class HandlerTests(unittest.TestCase):
# detect infinite loop redirect of a URL to itself
req = Request(from_url, origin_req_host="example.com")
count = 0
req.timeout = socket._GLOBAL_DEFAULT_TIMEOUT
try:
while 1:
redirect(h, req, "http://example.com/")
......@@ -898,6 +901,7 @@ class HandlerTests(unittest.TestCase):
# detect endless non-repeating chain of redirects
req = Request(from_url, origin_req_host="example.com")
count = 0
req.timeout = socket._GLOBAL_DEFAULT_TIMEOUT
try:
while 1:
redirect(h, req, "http://example.com/%d" % count)
......
......@@ -600,7 +600,7 @@ class HTTPRedirectHandler(BaseHandler):
fp.read()
fp.close()
return self.parent.open(new)
return self.parent.open(new, timeout=req.timeout)
http_error_301 = http_error_303 = http_error_307 = http_error_302
......@@ -716,7 +716,7 @@ class ProxyHandler(BaseHandler):
# {'http': 'ftp://proxy.example.com'}, we may end up turning
# a request for http://acme.example.com/a into one for
# ftp://proxy.example.com/a
return self.parent.open(req)
return self.parent.open(req, timeout=req.timeout)
class HTTPPasswordMgr:
......@@ -832,7 +832,7 @@ class AbstractBasicAuthHandler:
if req.headers.get(self.auth_header, None) == auth:
return None
req.add_header(self.auth_header, auth)
return self.parent.open(req)
return self.parent.open(req, timeout=req.timeout)
else:
return None
......@@ -923,7 +923,7 @@ class AbstractDigestAuthHandler:
if req.headers.get(self.auth_header, None) == auth_val:
return None
req.add_unredirected_header(self.auth_header, auth_val)
resp = self.parent.open(req)
resp = self.parent.open(req, timeout=req.timeout)
return resp
def get_cnonce(self, nonce):
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment