diff -r 878dc9dfc565 Lib/test/test_urllib.py --- a/Lib/test/test_urllib.py Mon Jul 22 10:38:04 2013 +0200 +++ b/Lib/test/test_urllib.py Mon Jul 22 20:28:14 2013 +1000 @@ -9,6 +9,7 @@ import unittest from test import support import os +import socket import sys import tempfile from nturl2path import url2pathname, pathname2url @@ -1288,6 +1289,30 @@ self.assertEqual(DummyURLopener().open( "spam://c:|windows%/:=&?~#+!$,;'@()*[]|/path/"), "//c:|windows%/:=&?~#+!$,;'@()*[]|/path/") + + def test_timeout(self): + # regression tests to ensure that adding a default value + # for Request.timeout doesn't break the OpenerDirector - issue 4079 + + # dummy handler that returns the Request.timeout as the response code + # in order to verify that it got down to the handler + class DummyHandler(urllib.request.BaseHandler): + def spam_open(self, req): + return urllib.response.addinfourl(io.StringIO("spam"), + None, req.full_url, + req.timeout) + + # test that default timeout using OpenerDirector is sane + opener = urllib.request.build_opener(DummyHandler()) + v = opener.open('spam://example') + self.assertEqual(v.code, socket._GLOBAL_DEFAULT_TIMEOUT) + + # test that when setting the timeout using OpenerDirector.open + # the timeout is passed down to the handler + timeout_override = 10 + v = opener.open('spam://example', timeout=timeout_override) + self.assertEqual(v.code, timeout_override) + # Just commented them out. # Can't really tell why keep failing in windows and sparc. @@ -1375,6 +1400,7 @@ Request = urllib.request.Request request = Request("http://www.python.org") self.assertEqual(request.get_method(), 'GET') + self.assertEqual(request.timeout, socket._GLOBAL_DEFAULT_TIMEOUT) request = Request("http://www.python.org", {}) self.assertEqual(request.get_method(), 'POST')