mirror of
https://github.com/python/cpython.git
synced 2025-08-30 21:48:47 +00:00
Merged revisions 61981,61984-61987,61992-61993,61997-62000 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk ........ r61981 | amaury.forgeotdarc | 2008-03-28 01:21:34 +0100 (Fri, 28 Mar 2008) | 2 lines test_future3.py is a regular test file, and should be part of the test suite ........ r61984 | jeffrey.yasskin | 2008-03-28 05:11:18 +0100 (Fri, 28 Mar 2008) | 6 lines Kill a race in test_threading in which the exception info in a thread finishing up after it was joined had a traceback pointing to that thread's (deleted) target attribute, while the test was trying to check that the target was destroyed. Big thanks to Antoine Pitrou for diagnosing the race and pointing out sys.exc_clear() to kill the exception early. This fixes issue 2496. ........ r61985 | neal.norwitz | 2008-03-28 05:41:34 +0100 (Fri, 28 Mar 2008) | 1 line Allow use of other ports so the test can pass if 9091 is in use ........ r61986 | jeffrey.yasskin | 2008-03-28 05:53:10 +0100 (Fri, 28 Mar 2008) | 2 lines Print more information the next time test_socket throws the wrong exception. ........ r61987 | neal.norwitz | 2008-03-28 05:58:51 +0100 (Fri, 28 Mar 2008) | 5 lines Revert r61969 which added casts to Py_CHARMASK to avoid compiler warnings. Rather than sprinkle casts throughout the code, change Py_CHARMASK to always cast it's result to an unsigned char. This should ensure we do the right thing when accessing an array with the result. ........ r61992 | neal.norwitz | 2008-03-28 06:34:59 +0100 (Fri, 28 Mar 2008) | 2 lines Fix compiler warning about finite() missing on Solaris. ........ r61993 | neal.norwitz | 2008-03-28 07:34:03 +0100 (Fri, 28 Mar 2008) | 11 lines Bug 1503: Get the test to pass on OSX. This should make the test more reliable, but I'm not convinced it is the right solution. We need to determine if this causes the test to hang on any platforms or do other bad things. Even if it gets the test to pass reliably, it might be that we want to fix this in socket. The socket returned from accept() is different on different platforms (inheriting attributes or not) and we might want to ensure that the attributes (at least blocking) is the same across all platforms. ........ r61997 | neal.norwitz | 2008-03-28 08:36:31 +0100 (Fri, 28 Mar 2008) | 1 line Name the main method correctly so the test is run ........ r61998 | gregory.p.smith | 2008-03-28 09:00:44 +0100 (Fri, 28 Mar 2008) | 7 lines This patch moves some tests from test_urllib2_net to test_urllib2_localnet. The moved tests use a local server rather than going out to external servers. Accepts patch from issue2429. Contributed by Jerry Seutter & Michael Foord (fuzzyman) at PyCon 2008. ........ r61999 | georg.brandl | 2008-03-28 09:06:56 +0100 (Fri, 28 Mar 2008) | 2 lines #2406: add examples to gzip docs. ........ r62000 | gregory.p.smith | 2008-03-28 09:32:09 +0100 (Fri, 28 Mar 2008) | 4 lines Accept patch issue2426 by Paul Kippes (kippesp). Adds sqlite3.Connection.iterdump to allow dumping of databases. ........
This commit is contained in:
parent
75d43c839e
commit
bbe741dd1b
25 changed files with 446 additions and 162 deletions
|
@ -1,5 +1,6 @@
|
|||
#!/usr/bin/env python
|
||||
|
||||
import mimetools
|
||||
import threading
|
||||
import urlparse
|
||||
import urllib2
|
||||
|
@ -217,7 +218,7 @@ class FakeProxyHandler(BaseHTTPServer.BaseHTTPRequestHandler):
|
|||
# Test cases
|
||||
|
||||
class ProxyAuthTests(unittest.TestCase):
|
||||
URL = "http://www.foo.com"
|
||||
URL = "http://localhost"
|
||||
|
||||
USER = "tester"
|
||||
PASSWD = "test123"
|
||||
|
@ -279,6 +280,202 @@ class ProxyAuthTests(unittest.TestCase):
|
|||
pass
|
||||
result.close()
|
||||
|
||||
|
||||
def GetRequestHandler(responses):
|
||||
|
||||
class FakeHTTPRequestHandler(BaseHTTPServer.BaseHTTPRequestHandler):
|
||||
|
||||
server_version = "TestHTTP/"
|
||||
requests = []
|
||||
headers_received = []
|
||||
port = 80
|
||||
|
||||
def do_GET(self):
|
||||
body = self.send_head()
|
||||
if body:
|
||||
self.wfile.write(body)
|
||||
|
||||
def do_POST(self):
|
||||
content_length = self.headers['Content-Length']
|
||||
post_data = self.rfile.read(int(content_length))
|
||||
self.do_GET()
|
||||
self.requests.append(post_data)
|
||||
|
||||
def send_head(self):
|
||||
FakeHTTPRequestHandler.headers_received = self.headers
|
||||
self.requests.append(self.path)
|
||||
response_code, headers, body = responses.pop(0)
|
||||
|
||||
self.send_response(response_code)
|
||||
|
||||
for (header, value) in headers:
|
||||
self.send_header(header, value % self.port)
|
||||
if body:
|
||||
self.send_header('Content-type', 'text/plain')
|
||||
self.end_headers()
|
||||
return body
|
||||
self.end_headers()
|
||||
|
||||
def log_message(self, *args):
|
||||
pass
|
||||
|
||||
|
||||
return FakeHTTPRequestHandler
|
||||
|
||||
|
||||
class TestUrlopen(unittest.TestCase):
|
||||
"""Tests urllib2.urlopen using the network.
|
||||
|
||||
These tests are not exhaustive. Assuming that testing using files does a
|
||||
good job overall of some of the basic interface features. There are no
|
||||
tests exercising the optional 'data' and 'proxies' arguments. No tests
|
||||
for transparent redirection have been written.
|
||||
"""
|
||||
|
||||
def start_server(self, responses):
|
||||
handler = GetRequestHandler(responses)
|
||||
|
||||
self.server = LoopbackHttpServerThread(handler)
|
||||
self.server.start()
|
||||
self.server.ready.wait()
|
||||
port = self.server.port
|
||||
handler.port = port
|
||||
return handler
|
||||
|
||||
|
||||
def test_redirection(self):
|
||||
expected_response = b'We got here...'
|
||||
responses = [
|
||||
(302, [('Location', 'http://localhost:%s/somewhere_else')], ''),
|
||||
(200, [], expected_response)
|
||||
]
|
||||
|
||||
handler = self.start_server(responses)
|
||||
|
||||
try:
|
||||
f = urllib2.urlopen('http://localhost:%s/' % handler.port)
|
||||
data = f.read()
|
||||
f.close()
|
||||
|
||||
self.assertEquals(data, expected_response)
|
||||
self.assertEquals(handler.requests, ['/', '/somewhere_else'])
|
||||
finally:
|
||||
self.server.stop()
|
||||
|
||||
|
||||
def test_404(self):
|
||||
expected_response = b'Bad bad bad...'
|
||||
handler = self.start_server([(404, [], expected_response)])
|
||||
|
||||
try:
|
||||
try:
|
||||
urllib2.urlopen('http://localhost:%s/weeble' % handler.port)
|
||||
except urllib2.URLError as f:
|
||||
data = f.read()
|
||||
f.close()
|
||||
else:
|
||||
self.fail('404 should raise URLError')
|
||||
|
||||
self.assertEquals(data, expected_response)
|
||||
self.assertEquals(handler.requests, ['/weeble'])
|
||||
finally:
|
||||
self.server.stop()
|
||||
|
||||
|
||||
def test_200(self):
|
||||
expected_response = b'pycon 2008...'
|
||||
handler = self.start_server([(200, [], expected_response)])
|
||||
|
||||
try:
|
||||
f = urllib2.urlopen('http://localhost:%s/bizarre' % handler.port)
|
||||
data = f.read()
|
||||
f.close()
|
||||
|
||||
self.assertEquals(data, expected_response)
|
||||
self.assertEquals(handler.requests, ['/bizarre'])
|
||||
finally:
|
||||
self.server.stop()
|
||||
|
||||
def test_200_with_parameters(self):
|
||||
expected_response = b'pycon 2008...'
|
||||
handler = self.start_server([(200, [], expected_response)])
|
||||
|
||||
try:
|
||||
f = urllib2.urlopen('http://localhost:%s/bizarre' % handler.port, b'get=with_feeling')
|
||||
data = f.read()
|
||||
f.close()
|
||||
|
||||
self.assertEquals(data, expected_response)
|
||||
self.assertEquals(handler.requests, ['/bizarre', b'get=with_feeling'])
|
||||
finally:
|
||||
self.server.stop()
|
||||
|
||||
|
||||
def test_sending_headers(self):
|
||||
handler = self.start_server([(200, [], b"we don't care")])
|
||||
|
||||
try:
|
||||
req = urllib2.Request("http://localhost:%s/" % handler.port,
|
||||
headers={'Range': 'bytes=20-39'})
|
||||
urllib2.urlopen(req)
|
||||
self.assertEqual(handler.headers_received['Range'], 'bytes=20-39')
|
||||
finally:
|
||||
self.server.stop()
|
||||
|
||||
def test_basic(self):
|
||||
handler = self.start_server([(200, [], b"we don't care")])
|
||||
|
||||
try:
|
||||
open_url = urllib2.urlopen("http://localhost:%s" % handler.port)
|
||||
for attr in ("read", "close", "info", "geturl"):
|
||||
self.assert_(hasattr(open_url, attr), "object returned from "
|
||||
"urlopen lacks the %s attribute" % attr)
|
||||
try:
|
||||
self.assert_(open_url.read(), "calling 'read' failed")
|
||||
finally:
|
||||
open_url.close()
|
||||
finally:
|
||||
self.server.stop()
|
||||
|
||||
def test_info(self):
|
||||
handler = self.start_server([(200, [], b"we don't care")])
|
||||
|
||||
try:
|
||||
open_url = urllib2.urlopen("http://localhost:%s" % handler.port)
|
||||
info_obj = open_url.info()
|
||||
self.assert_(isinstance(info_obj, mimetools.Message),
|
||||
"object returned by 'info' is not an instance of "
|
||||
"mimetools.Message")
|
||||
self.assertEqual(info_obj.getsubtype(), "plain")
|
||||
finally:
|
||||
self.server.stop()
|
||||
|
||||
def test_geturl(self):
|
||||
# Make sure same URL as opened is returned by geturl.
|
||||
handler = self.start_server([(200, [], b"we don't care")])
|
||||
|
||||
try:
|
||||
open_url = urllib2.urlopen("http://localhost:%s" % handler.port)
|
||||
url = open_url.geturl()
|
||||
self.assertEqual(url, "http://localhost:%s" % handler.port)
|
||||
finally:
|
||||
self.server.stop()
|
||||
|
||||
|
||||
def test_bad_address(self):
|
||||
# Make sure proper exception is raised when connecting to a bogus
|
||||
# address.
|
||||
self.assertRaises(IOError,
|
||||
# SF patch 809915: In Sep 2003, VeriSign started
|
||||
# highjacking invalid .com and .net addresses to
|
||||
# boost traffic to their own site. This test
|
||||
# started failing then. One hopes the .invalid
|
||||
# domain will be spared to serve its defined
|
||||
# purpose.
|
||||
# urllib2.urlopen, "http://www.sadflkjsasadf.com/")
|
||||
urllib2.urlopen, "http://www.python.invalid./")
|
||||
|
||||
|
||||
def test_main():
|
||||
# We will NOT depend on the network resource flag
|
||||
# (Lib/test/regrtest.py -u network) since all tests here are only
|
||||
|
@ -287,6 +484,7 @@ def test_main():
|
|||
#test_support.requires("network")
|
||||
|
||||
test_support.run_unittest(ProxyAuthTests)
|
||||
test_support.run_unittest(TestUrlopen)
|
||||
|
||||
if __name__ == "__main__":
|
||||
test_main()
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue