homepage

This issue tracker has been migrated to GitHub , and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

classification
Title: buildbot: test_urllib2_localnet failures (Connection refused) on Tiger buildbot
Type: behavior Stage: resolved
Components: Library (Lib), Tests Versions: Python 3.1, Python 3.2, Python 2.7
process
Status: closed Resolution: fixed
Dependencies: Superseder:
Assigned To: ronaldoussoren Nosy List: belopolsky, db3l, mark.dickinson, ned.deily, orsenthil, ronaldoussoren, vstinner
Priority: normal Keywords: buildbot, patch

Created on 2010年04月19日 11:29 by vstinner, last changed 2022年04月11日 14:57 by admin. This issue is now closed.

Files
File name Uploaded Description Edit
issue8455.diff belopolsky, 2010年06月22日 00:37
issue8455-scproxy.patch ronaldoussoren, 2010年06月22日 08:08
Messages (15)
msg103577 - (view) Author: STINNER Victor (vstinner) * (Python committer) Date: 2010年04月19日 11:29
http://www.python.org/dev/buildbot/builders/x86 Tiger 3.x/builds/25/steps/test/logs/stdio
test_urllib2_localnet
test test_urllib2_localnet failed -- multiple errors occurred; run in verbose mode for details
Re-running test test_urllib2_localnet in verbose mode
test_proxy_qop_auth_int_works_or_throws_urlerror (test.test_urllib2_localnet.ProxyAuthTests) ... ok
test_proxy_qop_auth_works (test.test_urllib2_localnet.ProxyAuthTests) ... ERROR
test_proxy_with_bad_password_raises_httperror (test.test_urllib2_localnet.ProxyAuthTests) ... ERROR
test_proxy_with_no_password_raises_httperror (test.test_urllib2_localnet.ProxyAuthTests) ... ERROR
test_200 (test.test_urllib2_localnet.TestUrlopen) ... ok
test_200_with_parameters (test.test_urllib2_localnet.TestUrlopen) ... ok
test_404 (test.test_urllib2_localnet.TestUrlopen) ... ok
test_bad_address (test.test_urllib2_localnet.TestUrlopen) ... ok
test_basic (test.test_urllib2_localnet.TestUrlopen) ... ok
test_chunked (test.test_urllib2_localnet.TestUrlopen) ... ok
test_geturl (test.test_urllib2_localnet.TestUrlopen) ... ok
test_info (test.test_urllib2_localnet.TestUrlopen) ... ok
test_redirection (test.test_urllib2_localnet.TestUrlopen) ... ok
test_sending_headers (test.test_urllib2_localnet.TestUrlopen) ... ok
======================================================================
ERROR: test_proxy_qop_auth_works (test.test_urllib2_localnet.ProxyAuthTests)
----------------------------------------------------------------------
Traceback (most recent call last):
 File "/Users/db3l/buildarea/3.x.bolen-tiger/build/Lib/urllib/request.py", line 1072, in do_open
 h.request(req.get_method(), req.selector, req.data, headers)
 File "/Users/db3l/buildarea/3.x.bolen-tiger/build/Lib/http/client.py", line 938, in request
 self._send_request(method, url, body, headers)
 File "/Users/db3l/buildarea/3.x.bolen-tiger/build/Lib/http/client.py", line 976, in _send_request
 self.endheaders(body)
 File "/Users/db3l/buildarea/3.x.bolen-tiger/build/Lib/http/client.py", line 934, in endheaders
 self._send_output(message_body)
 File "/Users/db3l/buildarea/3.x.bolen-tiger/build/Lib/http/client.py", line 788, in _send_output
 self.send(msg)
 File "/Users/db3l/buildarea/3.x.bolen-tiger/build/Lib/http/client.py", line 729, in send
 self.connect()
 File "/Users/db3l/buildarea/3.x.bolen-tiger/build/Lib/http/client.py", line 711, in connect
 self.timeout, self.source_address)
 File "/Users/db3l/buildarea/3.x.bolen-tiger/build/Lib/socket.py", line 321, in create_connection
 raise error(msg)
socket.error: [Errno 61] Connection refused
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
 File "/Users/db3l/buildarea/3.x.bolen-tiger/build/Lib/test/test_urllib2_localnet.py", line 278, in test_proxy_qop_auth_works
 result = self.opener.open(self.URL)
 File "/Users/db3l/buildarea/3.x.bolen-tiger/build/Lib/urllib/request.py", line 349, in open
 response = self._open(req, data)
 File "/Users/db3l/buildarea/3.x.bolen-tiger/build/Lib/urllib/request.py", line 367, in _open
 '_open', req)
 File "/Users/db3l/buildarea/3.x.bolen-tiger/build/Lib/urllib/request.py", line 327, in _call_chain
 result = func(*args)
 File "/Users/db3l/buildarea/3.x.bolen-tiger/build/Lib/urllib/request.py", line 1090, in http_open
 return self.do_open(http.client.HTTPConnection, req)
 File "/Users/db3l/buildarea/3.x.bolen-tiger/build/Lib/urllib/request.py", line 1075, in do_open
 raise URLError(err)
urllib.error.URLError: <urlopen error [Errno 61] Connection refused>
======================================================================
ERROR: test_proxy_with_bad_password_raises_httperror (test.test_urllib2_localnet.ProxyAuthTests)
----------------------------------------------------------------------
Traceback (most recent call last):
 File "/Users/db3l/buildarea/3.x.bolen-tiger/build/Lib/urllib/request.py", line 1072, in do_open
 h.request(req.get_method(), req.selector, req.data, headers)
 File "/Users/db3l/buildarea/3.x.bolen-tiger/build/Lib/http/client.py", line 938, in request
 self._send_request(method, url, body, headers)
 File "/Users/db3l/buildarea/3.x.bolen-tiger/build/Lib/http/client.py", line 976, in _send_request
 self.endheaders(body)
 File "/Users/db3l/buildarea/3.x.bolen-tiger/build/Lib/http/client.py", line 934, in endheaders
 self._send_output(message_body)
 File "/Users/db3l/buildarea/3.x.bolen-tiger/build/Lib/http/client.py", line 788, in _send_output
 self.send(msg)
 File "/Users/db3l/buildarea/3.x.bolen-tiger/build/Lib/http/client.py", line 729, in send
 self.connect()
 File "/Users/db3l/buildarea/3.x.bolen-tiger/build/Lib/http/client.py", line 711, in connect
 self.timeout, self.source_address)
 File "/Users/db3l/buildarea/3.x.bolen-tiger/build/Lib/socket.py", line 321, in create_connection
 raise error(msg)
socket.error: [Errno 61] Connection refused
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
 File "/Users/db3l/buildarea/3.x.bolen-tiger/build/Lib/test/test_urllib2_localnet.py", line 266, in test_proxy_with_bad_password_raises_httperror
 self.URL)
 File "/Users/db3l/buildarea/3.x.bolen-tiger/build/Lib/unittest/case.py", line 456, in assertRaises
 callableObj(*args, **kwargs)
 File "/Users/db3l/buildarea/3.x.bolen-tiger/build/Lib/urllib/request.py", line 349, in open
 response = self._open(req, data)
 File "/Users/db3l/buildarea/3.x.bolen-tiger/build/Lib/urllib/request.py", line 367, in _open
 '_open', req)
 File "/Users/db3l/buildarea/3.x.bolen-tiger/build/Lib/urllib/request.py", line 327, in _call_chain
 result = func(*args)
 File "/Users/db3l/buildarea/3.x.bolen-tiger/build/Lib/urllib/request.py", line 1090, in http_open
 return self.do_open(http.client.HTTPConnection, req)
 File "/Users/db3l/buildarea/3.x.bolen-tiger/build/Lib/urllib/request.py", line 1075, in do_open
 raise URLError(err)
urllib.error.URLError: <urlopen error [Errno 61] Connection refused>
======================================================================
ERROR: test_proxy_with_no_password_raises_httperror (test.test_urllib2_localnet.ProxyAuthTests)
----------------------------------------------------------------------
Traceback (most recent call last):
 File "/Users/db3l/buildarea/3.x.bolen-tiger/build/Lib/urllib/request.py", line 1072, in do_open
 h.request(req.get_method(), req.selector, req.data, headers)
 File "/Users/db3l/buildarea/3.x.bolen-tiger/build/Lib/http/client.py", line 938, in request
 self._send_request(method, url, body, headers)
 File "/Users/db3l/buildarea/3.x.bolen-tiger/build/Lib/http/client.py", line 976, in _send_request
 self.endheaders(body)
 File "/Users/db3l/buildarea/3.x.bolen-tiger/build/Lib/http/client.py", line 934, in endheaders
 self._send_output(message_body)
 File "/Users/db3l/buildarea/3.x.bolen-tiger/build/Lib/http/client.py", line 788, in _send_output
 self.send(msg)
 File "/Users/db3l/buildarea/3.x.bolen-tiger/build/Lib/http/client.py", line 729, in send
 self.connect()
 File "/Users/db3l/buildarea/3.x.bolen-tiger/build/Lib/http/client.py", line 711, in connect
 self.timeout, self.source_address)
 File "/Users/db3l/buildarea/3.x.bolen-tiger/build/Lib/socket.py", line 321, in create_connection
 raise error(msg)
socket.error: [Errno 61] Connection refused
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
 File "/Users/db3l/buildarea/3.x.bolen-tiger/build/Lib/test/test_urllib2_localnet.py", line 272, in test_proxy_with_no_password_raises_httperror
 self.URL)
 File "/Users/db3l/buildarea/3.x.bolen-tiger/build/Lib/unittest/case.py", line 456, in assertRaises
 callableObj(*args, **kwargs)
 File "/Users/db3l/buildarea/3.x.bolen-tiger/build/Lib/urllib/request.py", line 349, in open
 response = self._open(req, data)
 File "/Users/db3l/buildarea/3.x.bolen-tiger/build/Lib/urllib/request.py", line 367, in _open
 '_open', req)
 File "/Users/db3l/buildarea/3.x.bolen-tiger/build/Lib/urllib/request.py", line 327, in _call_chain
 result = func(*args)
 File "/Users/db3l/buildarea/3.x.bolen-tiger/build/Lib/urllib/request.py", line 1090, in http_open
 return self.do_open(http.client.HTTPConnection, req)
 File "/Users/db3l/buildarea/3.x.bolen-tiger/build/Lib/urllib/request.py", line 1075, in do_open
 raise URLError(err)
urllib.error.URLError: <urlopen error [Errno 61] Connection refused>
----------------------------------------------------------------------
Ran 14 tests in 10.076s
msg103599 - (view) Author: Ned Deily (ned.deily) * (Python committer) Date: 2010年04月19日 14:20
This appears to be a recently introduced failure; the same failure is seen on current trunk build on 10.5 and 10.6 as well.
msg103600 - (view) Author: STINNER Victor (vstinner) * (Python committer) Date: 2010年04月19日 14:22
Maybe r80198 of #7154?
msg103605 - (view) Author: Ned Deily (ned.deily) * (Python committer) Date: 2010年04月19日 14:29
That wouldn't explain trunk failures. The _scproxy code has been in 26 and trunk for a long time.
msg103907 - (view) Author: David Bolen (db3l) * Date: 2010年04月21日 20:25
For what it's worth, I added a few debugging statements to a local trunk checkout, and it looks like the port is getting lost somewhere along the way to setup the proxy... So the refused error is accurate and because it's trying the default port 80. Note also that I think all the Proxy tests fail, even those saying they're ok, because the refused error shows up as a URLError which is what the test expects, but for other reasons.
Oh, and small item I noted while doing the test - the urllib2_localnet module doesn't clean up properly during the tests - all the local servers are left listening on their ports until all the tests are done. Adding a call to self.httpd.server_close() at the end of run() in LoopbackHttpServerThread appears to fix that.
Here's a sample of one test... 
test_proxy_qop_auth_int_works_or_throws_urlerror (test.test_urllib2_localnet.ProxyAuthTests) ... Init done
Serving HTTP on localhost port 55161
Thread running
Calling handle request
proxy_url: http://localhost:55161
proxy_open: http None None localhost:55161
httplib _set_hostport(localhost,None)
httplib _set_hostport done host=localhost port=80
httplib.connect: Connecting to ('localhost', 80)
back from handle request
msg104784 - (view) Author: Mark Dickinson (mark.dickinson) * (Python committer) Date: 2010年05月02日 11:16
I'm also seeing this on OS X 10.6. It seems to have started with r80243.
msg104785 - (view) Author: Mark Dickinson (mark.dickinson) * (Python committer) Date: 2010年05月02日 11:20
To clarify, that last message was about trunk, where this test is failing for me since r80243. Adding 2.7 to the versions.
msg108330 - (view) Author: Alexander Belopolsky (belopolsky) * (Python committer) Date: 2010年06月22日 00:37
Apparently, the failure on OSX is due to the fact that urllib.proxy_bypass('localhost') returns True. This makes the opener to bypass the ProxyHandler that is explicitly set up to use the correct server port:
 def setUp(self):
 ..
 proxy_url = "http://127.0.0.1:%d" % self.server.port
 handler = urllib2.ProxyHandler({"http" : proxy_url})
 self.proxy_digest_handler = urllib2.ProxyDigestAuthHandler()
 self.opener = urllib2.build_opener(handler, self.proxy_digest_handler)
instead, the opener skips to the default HTTPHandler which attempts to connect on port 80 with sad results.
Interestingly,
>>> urllib.proxy_bypass('127.0.0.1')
False
So the simplest fix is s/localhost/127.0.0.1/ as done in the attached patch (issue8455.diff).
msg108331 - (view) Author: Alexander Belopolsky (belopolsky) * (Python committer) Date: 2010年06月22日 00:55
In fact, urllib.proxy_bypass() returns True for any simple host name (i.e. any string without '.' in it):
>>> proxy_bypass('xyz')
True
>>> proxy_bypass('')
True
>>> proxy_bypass('whatever')
True
I think the fix I am proposing makes sense regardless of platform because proxy_url is set up numerically:
proxy_url = "http://127.0.0.1:%d" % self.server.port
Maybe the above should be changed to
proxy_url = "%s:%d" % (self.URL, self.server.port)
once URL is changed to numerical form.
msg108336 - (view) Author: Senthil Kumaran (orsenthil) * (Python committer) Date: 2010年06月22日 04:23
Replacing 'http://localhost' with 'http://127.0.0.1' for this test is fine. 
But, urllib.proxy_bypass returning for True for any string, is not correct. In the code, I see that Proxy Settings from Mac OSX system configuration is obtained by calling _get_proxy_settings().
proxy_settings = _get_proxy_settings()
The is the check to to see if proxy_settings['exclude_simple'] is set.
It seems that, it is set under conditions, which either might be a wrong behavior, or we should not rely on this property.
msg108341 - (view) Author: Ronald Oussoren (ronaldoussoren) * (Python committer) Date: 2010年06月22日 08:08
The mac-related code in urllib is correct, it uses the SystemConfiguration framework on MacOSX to get the proxy settings. That said, the code in _scproxy is not entirly correct, it makes the wrong assumption w.r.t. the value of exclude_simple when the corresponding value is not in the settings retrieved from the SystemConfiguration framework.
The tests seem to make assumptions on how the proxy-detecting code functions, although I don't understand what's going on here (that is, I haven't waded through the test code and urllib to trace the code)
The patch "issue-8455-scproxy.patch" ensures that the tests pass, unless the user changed their proxy settings and selected the checkbox "Exclude simple hostnames" (System Preferernces -> Network -> First network adaptor -> Advanced... -> Proxies)
Please test if the patch solves the issue for you as well. 
NOTE: as I mention in the second paragraph the tests seem to make unwarrented assumptions about their environment. Further proof for this:
when you set "http_proxy=localhost:12345" in the environment on a Unixy system the tests will fail as well (although a different subset of the tests).
msg108347 - (view) Author: Ronald Oussoren (ronaldoussoren) * (Python committer) Date: 2010年06月22日 09:33
I've applied my patch in r82150, which fixes the issue for me in the trunk.
I'll merge the patch into the other branches if this does indeed fix the buildbot issue.
msg108405 - (view) Author: Mark Dickinson (mark.dickinson) * (Python committer) Date: 2010年06月22日 18:10
Just to confirm that with this fix test_urllib2_localnet is now passing for me. Thanks!
msg108785 - (view) Author: Ronald Oussoren (ronaldoussoren) * (Python committer) Date: 2010年06月27日 12:52
Applied to 2.6 (r82280), r82281 (3.2), r82282 (3.1).
msg113593 - (view) Author: Ned Deily (ned.deily) * (Python committer) Date: 2010年08月11日 08:18
The problem still exists on OS X 10.3. See Issue9568 for patches.
History
Date User Action Args
2022年04月11日 14:57:00adminsetgithub: 52701
2010年08月11日 08:18:07ned.deilysetmessages: + msg113593
2010年06月27日 12:52:27ronaldoussorensetstatus: open -> closed
type: behavior
messages: + msg108785

resolution: fixed
stage: patch review -> resolved
2010年06月22日 18:10:55mark.dickinsonsetmessages: + msg108405
2010年06月22日 09:33:40ronaldoussorensetmessages: + msg108347
2010年06月22日 08:08:57ronaldoussorensetfiles: + issue8455-scproxy.patch

messages: + msg108341
2010年06月22日 04:23:10orsenthilsetnosy: + orsenthil
messages: + msg108336
2010年06月22日 01:17:26belopolskysetstage: patch review
2010年06月22日 00:55:13belopolskysetmessages: + msg108331
2010年06月22日 00:37:13belopolskysetfiles: + issue8455.diff

nosy: + belopolsky
messages: + msg108330

keywords: + patch
2010年06月21日 22:38:53belopolskylinkissue9052 superseder
2010年05月13日 09:07:51ronaldoussorensetassignee: ronaldoussoren
2010年05月02日 11:20:47mark.dickinsonsetmessages: + msg104785
versions: + Python 2.7
2010年05月02日 11:16:43mark.dickinsonsetnosy: + mark.dickinson, ronaldoussoren
messages: + msg104784
2010年04月21日 20:25:08db3lsetmessages: + msg103907
2010年04月19日 14:29:02ned.deilysetmessages: + msg103605
2010年04月19日 14:22:57vstinnersetversions: + Python 3.1
2010年04月19日 14:22:12vstinnersetmessages: + msg103600
2010年04月19日 14:20:26ned.deilysetnosy: + ned.deily
messages: + msg103599
2010年04月19日 11:30:09vstinnersetnosy: + db3l
2010年04月19日 11:29:03vstinnercreate

AltStyle によって変換されたページ (->オリジナル) /