def test_ftp(self):
class MockFTPWrapper:
def __init__(self, data):
self.data = data
def retrfile(self, filename, filetype):
self.filename, self.filetype = filename, filetype
return StringIO.StringIO(self.data), len(self.data)
class NullFTPHandler(mechanize.FTPHandler):
def __init__(self, data):
self.data = data
def connect_ftp(self, user, passwd, host, port, dirs, timeout):
self.user, self.passwd = user, passwd
self.host, self.port = host, port
self.dirs = dirs
self.timeout = timeout
self.ftpwrapper = MockFTPWrapper(self.data)
return self.ftpwrapper
import ftplib
import socket
data = "rheum rhaponicum"
h = NullFTPHandler(data)
o = h.parent = MockOpener()
for url, host, port, type_, dirs, timeout, filename, mimetype in [
("ftp://localhost/foo/bar/baz.html", "localhost", ftplib.FTP_PORT,
"I", ["foo", "bar"], _sockettimeout._GLOBAL_DEFAULT_TIMEOUT,
"baz.html", "text/html"),
("ftp://localhost:80/foo/bar/", "localhost", 80, "D",
["foo", "bar"], _sockettimeout._GLOBAL_DEFAULT_TIMEOUT, "", None),
("ftp://localhost/baz.gif;type=a", "localhost", ftplib.FTP_PORT,
"A", [], _sockettimeout._GLOBAL_DEFAULT_TIMEOUT, "baz.gif",
None), # TODO: really this should guess image/gif
]:
req = Request(url, timeout=timeout)
r = h.ftp_open(req)
# ftp authentication not yet implemented by FTPHandler
self.assertTrue(h.user == h.passwd == "")
self.assertEqual(h.host, socket.gethostbyname(host))
self.assertEqual(h.port, port)
self.assertEqual(h.dirs, dirs)
if sys.version_info >= (2, 6):
self.assertEquals(h.timeout, timeout)
self.assertEqual(h.ftpwrapper.filename, filename)
self.assertEqual(h.ftpwrapper.filetype, type_)
headers = r.info()
self.assertEqual(headers.get("Content-type"), mimetype)
self.assertEqual(int(headers["Content-length"]), len(data))
评论列表
文章目录