summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Lib/test/test_urllib2.py130
-rw-r--r--Lib/urllib2.py77
2 files changed, 129 insertions, 78 deletions
diff --git a/Lib/test/test_urllib2.py b/Lib/test/test_urllib2.py
index ecab6f2..27b5038 100644
--- a/Lib/test/test_urllib2.py
+++ b/Lib/test/test_urllib2.py
@@ -1,7 +1,7 @@
import unittest
from test import test_support
-import os
+import os, socket
import StringIO
import urllib2
@@ -671,6 +671,12 @@ class MiscTests(unittest.TestCase):
self.assert_(False)
class NetworkTests(unittest.TestCase):
+ def setUp(self):
+ if 0: # for debugging
+ import logging
+ logger = logging.getLogger("test_urllib2")
+ logger.addHandler(logging.StreamHandler())
+
def test_range (self):
req = urllib2.Request("http://www.python.org",
headers={'Range': 'bytes=20-39'})
@@ -678,6 +684,128 @@ class NetworkTests(unittest.TestCase):
data = result.read()
self.assertEqual(len(data), 20)
+ # XXX The rest of these tests aren't very good -- they don't check much.
+ # They do sometimes catch some major disasters, though.
+
+ def test_ftp(self):
+ urls = [
+ 'ftp://www.python.org/pub/python/misc/sousa.au',
+ 'ftp://www.python.org/pub/tmp/blat',
+ 'ftp://gatekeeper.research.compaq.com/pub/DEC/SRC'
+ '/research-reports/00README-Legal-Rules-Regs',
+ ]
+ self._test_urls(urls, self._extra_handlers())
+
+ def test_gopher(self):
+ urls = [
+ # Thanks to Fred for finding these!
+ 'gopher://gopher.lib.ncsu.edu/11/library/stacks/Alex',
+ 'gopher://gopher.vt.edu:10010/10/33',
+ ]
+ self._test_urls(urls, self._extra_handlers())
+
+ def test_file(self):
+ TESTFN = test_support.TESTFN
+ f = open(TESTFN, 'w')
+ try:
+ f.write('hi there\n')
+ f.close()
+ urls = [
+ 'file:'+sanepathname2url(os.path.abspath(TESTFN)),
+
+ # XXX bug, should raise URLError
+ #('file://nonsensename/etc/passwd', None, urllib2.URLError)
+ ('file://nonsensename/etc/passwd', None, (OSError, socket.error))
+ ]
+ self._test_urls(urls, self._extra_handlers())
+ finally:
+ os.remove(TESTFN)
+
+ def test_http(self):
+ urls = [
+ 'http://www.espn.com/', # redirect
+ 'http://www.python.org/Spanish/Inquistion/',
+ ('http://www.python.org/cgi-bin/faqw.py',
+ 'query=pythonistas&querytype=simple&casefold=yes&req=search', None),
+ 'http://www.python.org/',
+ ]
+ self._test_urls(urls, self._extra_handlers())
+
+ # XXX Following test depends on machine configurations that are internal
+ # to CNRI. Need to set up a public server with the right authentication
+ # configuration for test purposes.
+
+## def test_cnri(self):
+## if socket.gethostname() == 'bitdiddle':
+## localhost = 'bitdiddle.cnri.reston.va.us'
+## elif socket.gethostname() == 'bitdiddle.concentric.net':
+## localhost = 'localhost'
+## else:
+## localhost = None
+## if localhost is not None:
+## urls = [
+## 'file://%s/etc/passwd' % localhost,
+## 'http://%s/simple/' % localhost,
+## 'http://%s/digest/' % localhost,
+## 'http://%s/not/found.h' % localhost,
+## ]
+
+## bauth = HTTPBasicAuthHandler()
+## bauth.add_password('basic_test_realm', localhost, 'jhylton',
+## 'password')
+## dauth = HTTPDigestAuthHandler()
+## dauth.add_password('digest_test_realm', localhost, 'jhylton',
+## 'password')
+
+## self._test_urls(urls, self._extra_handlers()+[bauth, dauth])
+
+ def _test_urls(self, urls, handlers):
+ import socket
+ import time
+ import logging
+ debug = logging.getLogger("test_urllib2").debug
+
+ urllib2.install_opener(urllib2.build_opener(*handlers))
+
+ for url in urls:
+ if isinstance(url, tuple):
+ url, req, expected_err = url
+ else:
+ req = expected_err = None
+ debug(url)
+ try:
+ f = urllib2.urlopen(url, req)
+ except (IOError, socket.error, OSError), err:
+ debug(err)
+ if expected_err:
+ self.assert_(isinstance(err, expected_err))
+ else:
+ buf = f.read()
+ f.close()
+ debug("read %d bytes" % len(buf))
+ debug("******** next url coming up...")
+ time.sleep(0.1)
+
+ def _extra_handlers(self):
+ handlers = []
+
+ handlers.append(urllib2.GopherHandler)
+
+ cfh = urllib2.CacheFTPHandler()
+ cfh.setTimeout(1)
+ handlers.append(cfh)
+
+## # XXX try out some custom proxy objects too!
+## def at_cnri(req):
+## host = req.get_host()
+## debug(host)
+## if host[-18:] == '.cnri.reston.va.us':
+## return True
+## p = CustomProxy('http', at_cnri, 'proxy.cnri.reston.va.us')
+## ph = CustomProxyHandler(p)
+## handlers.append(ph)
+
+ return handlers
def test_main(verbose=None):
diff --git a/Lib/urllib2.py b/Lib/urllib2.py
index a9c1c63..84d4c34 100644
--- a/Lib/urllib2.py
+++ b/Lib/urllib2.py
@@ -1274,80 +1274,3 @@ class OpenerFactory:
if inspect.isclass(ph):
ph = ph()
opener.add_handler(ph)
-
-if __name__ == "__main__":
- # XXX some of the test code depends on machine configurations that
- # are internal to CNRI. Need to set up a public server with the
- # right authentication configuration for test purposes.
- if socket.gethostname() == 'bitdiddle':
- localhost = 'bitdiddle.cnri.reston.va.us'
- elif socket.gethostname() == 'bitdiddle.concentric.net':
- localhost = 'localhost'
- else:
- localhost = None
- urls = [
- # Thanks to Fred for finding these!
- 'gopher://gopher.lib.ncsu.edu/11/library/stacks/Alex',
- 'gopher://gopher.vt.edu:10010/10/33',
-
- 'file:/etc/passwd',
- 'file://nonsensename/etc/passwd',
- 'ftp://www.python.org/pub/python/misc/sousa.au',
- 'ftp://www.python.org/pub/tmp/blat',
- 'http://www.espn.com/', # redirect
- 'http://www.python.org/Spanish/Inquistion/',
- ('http://www.python.org/cgi-bin/faqw.py',
- 'query=pythonistas&querytype=simple&casefold=yes&req=search'),
- 'http://www.python.org/',
- 'ftp://gatekeeper.research.compaq.com/pub/DEC/SRC/research-reports/00README-Legal-Rules-Regs',
- ]
-
-## if localhost is not None:
-## urls = urls + [
-## 'file://%s/etc/passwd' % localhost,
-## 'http://%s/simple/' % localhost,
-## 'http://%s/digest/' % localhost,
-## 'http://%s/not/found.h' % localhost,
-## ]
-
-## bauth = HTTPBasicAuthHandler()
-## bauth.add_password('basic_test_realm', localhost, 'jhylton',
-## 'password')
-## dauth = HTTPDigestAuthHandler()
-## dauth.add_password('digest_test_realm', localhost, 'jhylton',
-## 'password')
-
-
- cfh = CacheFTPHandler()
- cfh.setTimeout(1)
-
-## # XXX try out some custom proxy objects too!
-## def at_cnri(req):
-## host = req.get_host()
-## print host
-## if host[-18:] == '.cnri.reston.va.us':
-## return 1
-## p = CustomProxy('http', at_cnri, 'proxy.cnri.reston.va.us')
-## ph = CustomProxyHandler(p)
-
-## install_opener(build_opener(dauth, bauth, cfh, GopherHandler, ph))
- install_opener(build_opener(cfh, GopherHandler))
-
- for url in urls:
- if isinstance(url, tuple):
- url, req = url
- else:
- req = None
- print url
- try:
- f = urlopen(url, req)
- except IOError, err:
- print "IOError:", err
- except socket.error, err:
- print "socket.error:", err
- else:
- buf = f.read()
- f.close()
- print "read %d bytes" % len(buf)
- print
- time.sleep(0.1)