annotate Lib/test/test_ftplib.py @ 54294:dba767bc3155 legacy-trunk

remove mention of old ctypes version
author Benjamin Peterson <benjamin@python.org>
date Sat, 23 May 2009 20:59:09 +0000
parents 5a9a83cae8f1
children dba99828d91c 6768b2350c57
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
49311
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
1 """Test script for ftplib module."""
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
2
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
3 # Modified by Giampaolo Rodola' to test FTP class and IPv6 environment
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
4
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
5 import ftplib
41306
03d5db8325f4 Forgot to add the file before the previous commit, here go
Facundo Batista <facundobatista@gmail.com>
parents:
diff changeset
6 import threading
49311
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
7 import asyncore
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
8 import asynchat
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
9 import socket
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
10 import StringIO
41306
03d5db8325f4 Forgot to add the file before the previous commit, here go
Facundo Batista <facundobatista@gmail.com>
parents:
diff changeset
11
03d5db8325f4 Forgot to add the file before the previous commit, here go
Facundo Batista <facundobatista@gmail.com>
parents:
diff changeset
12 from unittest import TestCase
03d5db8325f4 Forgot to add the file before the previous commit, here go
Facundo Batista <facundobatista@gmail.com>
parents:
diff changeset
13 from test import test_support
49311
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
14 from test.test_support import HOST
41306
03d5db8325f4 Forgot to add the file before the previous commit, here go
Facundo Batista <facundobatista@gmail.com>
parents:
diff changeset
15
49311
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
16
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
17 # the dummy data returned by server over the data channel when
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
18 # RETR, LIST and NLST commands are issued
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
19 RETR_DATA = 'abcde12345\r\n' * 1000
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
20 LIST_DATA = 'foo\r\nbar\r\n'
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
21 NLST_DATA = 'foo\r\nbar\r\n'
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
22
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
23
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
24 class DummyDTPHandler(asynchat.async_chat):
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
25
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
26 def __init__(self, conn, baseclass):
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
27 asynchat.async_chat.__init__(self, conn)
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
28 self.baseclass = baseclass
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
29 self.baseclass.last_received_data = ''
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
30
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
31 def handle_read(self):
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
32 self.baseclass.last_received_data += self.recv(1024)
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
33
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
34 def handle_close(self):
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
35 self.baseclass.push('226 transfer complete')
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
36 self.close()
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
37
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
38
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
39 class DummyFTPHandler(asynchat.async_chat):
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
40
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
41 def __init__(self, conn):
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
42 asynchat.async_chat.__init__(self, conn)
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
43 self.set_terminator("\r\n")
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
44 self.in_buffer = []
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
45 self.dtp = None
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
46 self.last_received_cmd = None
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
47 self.last_received_data = ''
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
48 self.next_response = ''
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
49 self.push('220 welcome')
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
50
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
51 def collect_incoming_data(self, data):
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
52 self.in_buffer.append(data)
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
53
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
54 def found_terminator(self):
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
55 line = ''.join(self.in_buffer)
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
56 self.in_buffer = []
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
57 if self.next_response:
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
58 self.push(self.next_response)
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
59 self.next_response = ''
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
60 cmd = line.split(' ')[0].lower()
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
61 self.last_received_cmd = cmd
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
62 space = line.find(' ')
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
63 if space != -1:
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
64 arg = line[space + 1:]
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
65 else:
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
66 arg = ""
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
67 if hasattr(self, 'cmd_' + cmd):
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
68 method = getattr(self, 'cmd_' + cmd)
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
69 method(arg)
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
70 else:
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
71 self.push('550 command "%s" not understood.' %cmd)
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
72
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
73 def handle_error(self):
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
74 raise
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
75
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
76 def push(self, data):
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
77 asynchat.async_chat.push(self, data + '\r\n')
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
78
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
79 def cmd_port(self, arg):
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
80 addr = map(int, arg.split(','))
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
81 ip = '%d.%d.%d.%d' %tuple(addr[:4])
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
82 port = (addr[4] * 256) + addr[5]
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
83 s = socket.create_connection((ip, port), timeout=2)
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
84 self.dtp = DummyDTPHandler(s, baseclass=self)
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
85 self.push('200 active data connection established')
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
86
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
87 def cmd_pasv(self, arg):
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
88 sock = socket.socket()
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
89 sock.bind((self.socket.getsockname()[0], 0))
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
90 sock.listen(5)
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
91 sock.settimeout(2)
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
92 ip, port = sock.getsockname()[:2]
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
93 ip = ip.replace('.', ','); p1 = port / 256; p2 = port % 256
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
94 self.push('227 entering passive mode (%s,%d,%d)' %(ip, p1, p2))
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
95 conn, addr = sock.accept()
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
96 self.dtp = DummyDTPHandler(conn, baseclass=self)
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
97
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
98 def cmd_eprt(self, arg):
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
99 af, ip, port = arg.split(arg[0])[1:-1]
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
100 port = int(port)
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
101 s = socket.create_connection((ip, port), timeout=2)
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
102 self.dtp = DummyDTPHandler(s, baseclass=self)
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
103 self.push('200 active data connection established')
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
104
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
105 def cmd_epsv(self, arg):
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
106 sock = socket.socket(socket.AF_INET6)
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
107 sock.bind((self.socket.getsockname()[0], 0))
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
108 sock.listen(5)
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
109 sock.settimeout(2)
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
110 port = sock.getsockname()[1]
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
111 self.push('229 entering extended passive mode (|||%d|)' %port)
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
112 conn, addr = sock.accept()
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
113 self.dtp = DummyDTPHandler(conn, baseclass=self)
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
114
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
115 def cmd_echo(self, arg):
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
116 # sends back the received string (used by the test suite)
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
117 self.push(arg)
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
118
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
119 def cmd_user(self, arg):
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
120 self.push('331 username ok')
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
121
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
122 def cmd_pass(self, arg):
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
123 self.push('230 password ok')
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
124
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
125 def cmd_acct(self, arg):
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
126 self.push('230 acct ok')
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
127
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
128 def cmd_rnfr(self, arg):
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
129 self.push('350 rnfr ok')
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
130
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
131 def cmd_rnto(self, arg):
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
132 self.push('250 rnto ok')
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
133
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
134 def cmd_dele(self, arg):
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
135 self.push('250 dele ok')
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
136
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
137 def cmd_cwd(self, arg):
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
138 self.push('250 cwd ok')
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
139
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
140 def cmd_size(self, arg):
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
141 self.push('250 1000')
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
142
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
143 def cmd_mkd(self, arg):
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
144 self.push('257 "%s"' %arg)
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
145
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
146 def cmd_rmd(self, arg):
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
147 self.push('250 rmd ok')
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
148
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
149 def cmd_pwd(self, arg):
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
150 self.push('257 "pwd ok"')
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
151
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
152 def cmd_type(self, arg):
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
153 self.push('200 type ok')
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
154
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
155 def cmd_quit(self, arg):
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
156 self.push('221 quit ok')
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
157 self.close()
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
158
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
159 def cmd_stor(self, arg):
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
160 self.push('125 stor ok')
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
161
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
162 def cmd_retr(self, arg):
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
163 self.push('125 retr ok')
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
164 self.dtp.push(RETR_DATA)
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
165 self.dtp.close_when_done()
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
166
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
167 def cmd_list(self, arg):
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
168 self.push('125 list ok')
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
169 self.dtp.push(LIST_DATA)
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
170 self.dtp.close_when_done()
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
171
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
172 def cmd_nlst(self, arg):
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
173 self.push('125 nlst ok')
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
174 self.dtp.push(NLST_DATA)
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
175 self.dtp.close_when_done()
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
176
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
177
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
178 class DummyFTPServer(asyncore.dispatcher, threading.Thread):
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
179
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
180 handler = DummyFTPHandler
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
181
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
182 def __init__(self, address, af=socket.AF_INET):
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
183 threading.Thread.__init__(self)
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
184 asyncore.dispatcher.__init__(self)
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
185 self.create_socket(af, socket.SOCK_STREAM)
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
186 self.bind(address)
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
187 self.listen(5)
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
188 self.active = False
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
189 self.active_lock = threading.Lock()
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
190 self.host, self.port = self.socket.getsockname()[:2]
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
191
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
192 def start(self):
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
193 assert not self.active
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
194 self.__flag = threading.Event()
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
195 threading.Thread.start(self)
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
196 self.__flag.wait()
45528
088dfc0f71b4 Don't use a hard coded port. This test could hang/fail if the port is in use.
Neal Norwitz <nnorwitz@gmail.com>
parents: 41532
diff changeset
197
49311
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
198 def run(self):
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
199 self.active = True
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
200 self.__flag.set()
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
201 while self.active and asyncore.socket_map:
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
202 self.active_lock.acquire()
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
203 asyncore.loop(timeout=0.1, count=1)
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
204 self.active_lock.release()
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
205 asyncore.close_all(ignore_all=True)
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
206
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
207 def stop(self):
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
208 assert self.active
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
209 self.active = False
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
210 self.join()
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
211
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
212 def handle_accept(self):
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
213 conn, addr = self.accept()
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
214 self.handler = self.handler(conn)
49332
5a9a83cae8f1 merge in the fix for test_ftplib on some bots [reviewed by Georg]
Benjamin Peterson <benjamin@python.org>
parents: 49311
diff changeset
215 self.close()
5a9a83cae8f1 merge in the fix for test_ftplib on some bots [reviewed by Georg]
Benjamin Peterson <benjamin@python.org>
parents: 49311
diff changeset
216
5a9a83cae8f1 merge in the fix for test_ftplib on some bots [reviewed by Georg]
Benjamin Peterson <benjamin@python.org>
parents: 49311
diff changeset
217 def handle_connect(self):
5a9a83cae8f1 merge in the fix for test_ftplib on some bots [reviewed by Georg]
Benjamin Peterson <benjamin@python.org>
parents: 49311
diff changeset
218 self.close()
5a9a83cae8f1 merge in the fix for test_ftplib on some bots [reviewed by Georg]
Benjamin Peterson <benjamin@python.org>
parents: 49311
diff changeset
219 handle_read = handle_connect
49311
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
220
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
221 def writable(self):
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
222 return 0
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
223
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
224 def handle_error(self):
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
225 raise
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
226
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
227
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
228 class TestFTPClass(TestCase):
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
229
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
230 def setUp(self):
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
231 self.server = DummyFTPServer((HOST, 0))
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
232 self.server.start()
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
233 self.client = ftplib.FTP(timeout=2)
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
234 self.client.connect(self.server.host, self.server.port)
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
235
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
236 def tearDown(self):
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
237 self.client.close()
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
238 self.server.stop()
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
239
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
240 def test_getwelcome(self):
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
241 self.assertEqual(self.client.getwelcome(), '220 welcome')
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
242
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
243 def test_sanitize(self):
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
244 self.assertEqual(self.client.sanitize('foo'), repr('foo'))
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
245 self.assertEqual(self.client.sanitize('pass 12345'), repr('pass *****'))
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
246 self.assertEqual(self.client.sanitize('PASS 12345'), repr('PASS *****'))
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
247
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
248 def test_exceptions(self):
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
249 self.assertRaises(ftplib.error_temp, self.client.sendcmd, 'echo 400')
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
250 self.assertRaises(ftplib.error_temp, self.client.sendcmd, 'echo 499')
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
251 self.assertRaises(ftplib.error_perm, self.client.sendcmd, 'echo 500')
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
252 self.assertRaises(ftplib.error_perm, self.client.sendcmd, 'echo 599')
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
253 self.assertRaises(ftplib.error_proto, self.client.sendcmd, 'echo 999')
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
254
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
255 def test_all_errors(self):
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
256 exceptions = (ftplib.error_reply, ftplib.error_temp, ftplib.error_perm,
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
257 ftplib.error_proto, ftplib.Error, IOError, EOFError)
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
258 for x in exceptions:
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
259 try:
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
260 raise x('exception not included in all_errors set')
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
261 except ftplib.all_errors:
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
262 pass
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
263
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
264 def test_set_pasv(self):
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
265 # passive mode is supposed to be enabled by default
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
266 self.assertTrue(self.client.passiveserver)
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
267 self.client.set_pasv(True)
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
268 self.assertTrue(self.client.passiveserver)
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
269 self.client.set_pasv(False)
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
270 self.assertFalse(self.client.passiveserver)
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
271
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
272 def test_voidcmd(self):
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
273 self.client.voidcmd('echo 200')
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
274 self.client.voidcmd('echo 299')
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
275 self.assertRaises(ftplib.error_reply, self.client.voidcmd, 'echo 199')
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
276 self.assertRaises(ftplib.error_reply, self.client.voidcmd, 'echo 300')
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
277
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
278 def test_login(self):
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
279 self.client.login()
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
280
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
281 def test_acct(self):
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
282 self.client.acct('passwd')
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
283
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
284 def test_rename(self):
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
285 self.client.rename('a', 'b')
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
286 self.server.handler.next_response = '200'
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
287 self.assertRaises(ftplib.error_reply, self.client.rename, 'a', 'b')
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
288
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
289 def test_delete(self):
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
290 self.client.delete('foo')
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
291 self.server.handler.next_response = '199'
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
292 self.assertRaises(ftplib.error_reply, self.client.delete, 'foo')
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
293
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
294 def test_size(self):
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
295 self.client.size('foo')
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
296
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
297 def test_mkd(self):
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
298 dir = self.client.mkd('/foo')
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
299 self.assertEqual(dir, '/foo')
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
300
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
301 def test_rmd(self):
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
302 self.client.rmd('foo')
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
303
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
304 def test_pwd(self):
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
305 dir = self.client.pwd()
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
306 self.assertEqual(dir, 'pwd ok')
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
307
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
308 def test_quit(self):
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
309 self.assertEqual(self.client.quit(), '221 quit ok')
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
310 # Ensure the connection gets closed; sock attribute should be None
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
311 self.assertEqual(self.client.sock, None)
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
312
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
313 def test_retrbinary(self):
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
314 received = []
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
315 self.client.retrbinary('retr', received.append)
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
316 self.assertEqual(''.join(received), RETR_DATA)
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
317
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
318 def test_retrlines(self):
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
319 received = []
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
320 self.client.retrlines('retr', received.append)
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
321 self.assertEqual(''.join(received), RETR_DATA.replace('\r\n', ''))
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
322
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
323 def test_storbinary(self):
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
324 f = StringIO.StringIO(RETR_DATA)
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
325 self.client.storbinary('stor', f)
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
326 self.assertEqual(self.server.handler.last_received_data, RETR_DATA)
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
327 # test new callback arg
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
328 flag = []
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
329 f.seek(0)
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
330 self.client.storbinary('stor', f, callback=lambda x: flag.append(None))
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
331 self.assertTrue(flag)
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
332
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
333 def test_storlines(self):
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
334 f = StringIO.StringIO(RETR_DATA.replace('\r\n', '\n'))
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
335 self.client.storlines('stor', f)
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
336 self.assertEqual(self.server.handler.last_received_data, RETR_DATA)
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
337 # test new callback arg
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
338 flag = []
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
339 f.seek(0)
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
340 self.client.storlines('stor foo', f, callback=lambda x: flag.append(None))
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
341 self.assertTrue(flag)
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
342
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
343 def test_nlst(self):
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
344 self.client.nlst()
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
345 self.assertEqual(self.client.nlst(), NLST_DATA.split('\r\n')[:-1])
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
346
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
347 def test_dir(self):
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
348 l = []
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
349 self.client.dir(lambda x: l.append(x))
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
350 self.assertEqual(''.join(l), LIST_DATA.replace('\r\n', ''))
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
351
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
352 def test_makeport(self):
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
353 self.client.makeport()
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
354 # IPv4 is in use, just make sure send_eprt has not been used
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
355 self.assertEqual(self.server.handler.last_received_cmd, 'port')
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
356
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
357 def test_makepasv(self):
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
358 host, port = self.client.makepasv()
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
359 conn = socket.create_connection((host, port), 2)
41326
ccdc5b3b9b11 Added the posibility to pass the timeout to FTP.connect, not only when
Facundo Batista <facundobatista@gmail.com>
parents: 41306
diff changeset
360 conn.close()
49311
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
361 # IPv4 is in use, just make sure send_epsv has not been used
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
362 self.assertEqual(self.server.handler.last_received_cmd, 'pasv')
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
363
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
364
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
365 class TestIPv6Environment(TestCase):
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
366
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
367 def setUp(self):
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
368 self.server = DummyFTPServer((HOST, 0), af=socket.AF_INET6)
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
369 self.server.start()
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
370 self.client = ftplib.FTP()
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
371 self.client.connect(self.server.host, self.server.port)
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
372
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
373 def tearDown(self):
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
374 self.client.close()
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
375 self.server.stop()
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
376
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
377 def test_af(self):
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
378 self.assertEqual(self.client.af, socket.AF_INET6)
41306
03d5db8325f4 Forgot to add the file before the previous commit, here go
Facundo Batista <facundobatista@gmail.com>
parents:
diff changeset
379
49311
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
380 def test_makeport(self):
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
381 self.client.makeport()
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
382 self.assertEqual(self.server.handler.last_received_cmd, 'eprt')
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
383
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
384 def test_makepasv(self):
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
385 host, port = self.client.makepasv()
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
386 conn = socket.create_connection((host, port), 2)
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
387 conn.close()
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
388 self.assertEqual(self.server.handler.last_received_cmd, 'epsv')
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
389
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
390 def test_transfer(self):
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
391 def retr():
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
392 received = []
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
393 self.client.retrbinary('retr', received.append)
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
394 self.assertEqual(''.join(received), RETR_DATA)
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
395 self.client.set_pasv(True)
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
396 retr()
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
397 self.client.set_pasv(False)
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
398 retr()
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
399
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
400
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
401 class TestTimeouts(TestCase):
41532
4b9fa8092e82 Whitespace normalization. Ugh, we really need to do this more often.
Neal Norwitz <nnorwitz@gmail.com>
parents: 41326
diff changeset
402
41306
03d5db8325f4 Forgot to add the file before the previous commit, here go
Facundo Batista <facundobatista@gmail.com>
parents:
diff changeset
403 def setUp(self):
03d5db8325f4 Forgot to add the file before the previous commit, here go
Facundo Batista <facundobatista@gmail.com>
parents:
diff changeset
404 self.evt = threading.Event()
46362
d917da2b1946 - Issue #2550: The approach used by client/server code for obtaining ports
Trent Nelson <trent.nelson@snakebite.org>
parents: 45528
diff changeset
405 self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
d917da2b1946 - Issue #2550: The approach used by client/server code for obtaining ports
Trent Nelson <trent.nelson@snakebite.org>
parents: 45528
diff changeset
406 self.sock.settimeout(3)
d917da2b1946 - Issue #2550: The approach used by client/server code for obtaining ports
Trent Nelson <trent.nelson@snakebite.org>
parents: 45528
diff changeset
407 self.port = test_support.bind_port(self.sock)
49311
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
408 threading.Thread(target=self.server, args=(self.evt,self.sock)).start()
45528
088dfc0f71b4 Don't use a hard coded port. This test could hang/fail if the port is in use.
Neal Norwitz <nnorwitz@gmail.com>
parents: 41532
diff changeset
409 # Wait for the server to be ready.
088dfc0f71b4 Don't use a hard coded port. This test could hang/fail if the port is in use.
Neal Norwitz <nnorwitz@gmail.com>
parents: 41532
diff changeset
410 self.evt.wait()
088dfc0f71b4 Don't use a hard coded port. This test could hang/fail if the port is in use.
Neal Norwitz <nnorwitz@gmail.com>
parents: 41532
diff changeset
411 self.evt.clear()
46362
d917da2b1946 - Issue #2550: The approach used by client/server code for obtaining ports
Trent Nelson <trent.nelson@snakebite.org>
parents: 45528
diff changeset
412 ftplib.FTP.port = self.port
41306
03d5db8325f4 Forgot to add the file before the previous commit, here go
Facundo Batista <facundobatista@gmail.com>
parents:
diff changeset
413
03d5db8325f4 Forgot to add the file before the previous commit, here go
Facundo Batista <facundobatista@gmail.com>
parents:
diff changeset
414 def tearDown(self):
03d5db8325f4 Forgot to add the file before the previous commit, here go
Facundo Batista <facundobatista@gmail.com>
parents:
diff changeset
415 self.evt.wait()
03d5db8325f4 Forgot to add the file before the previous commit, here go
Facundo Batista <facundobatista@gmail.com>
parents:
diff changeset
416
49311
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
417 def server(self, evt, serv):
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
418 # This method sets the evt 3 times:
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
419 # 1) when the connection is ready to be accepted.
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
420 # 2) when it is safe for the caller to close the connection
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
421 # 3) when we have closed the socket
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
422 serv.listen(5)
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
423 # (1) Signal the caller that we are ready to accept the connection.
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
424 evt.set()
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
425 try:
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
426 conn, addr = serv.accept()
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
427 except socket.timeout:
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
428 pass
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
429 else:
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
430 conn.send("1 Hola mundo\n")
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
431 # (2) Signal the caller that it is safe to close the socket.
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
432 evt.set()
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
433 conn.close()
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
434 finally:
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
435 serv.close()
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
436 # (3) Signal the caller that we are done.
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
437 evt.set()
41532
4b9fa8092e82 Whitespace normalization. Ugh, we really need to do this more often.
Neal Norwitz <nnorwitz@gmail.com>
parents: 41326
diff changeset
438
41306
03d5db8325f4 Forgot to add the file before the previous commit, here go
Facundo Batista <facundobatista@gmail.com>
parents:
diff changeset
439 def testTimeoutDefault(self):
47372
e2c5ae30cffe Fixed the semantic of timeout for socket.create_connection and
Facundo Batista <facundobatista@gmail.com>
parents: 46362
diff changeset
440 # default -- use global socket timeout
e2c5ae30cffe Fixed the semantic of timeout for socket.create_connection and
Facundo Batista <facundobatista@gmail.com>
parents: 46362
diff changeset
441 self.assert_(socket.getdefaulttimeout() is None)
e2c5ae30cffe Fixed the semantic of timeout for socket.create_connection and
Facundo Batista <facundobatista@gmail.com>
parents: 46362
diff changeset
442 socket.setdefaulttimeout(30)
e2c5ae30cffe Fixed the semantic of timeout for socket.create_connection and
Facundo Batista <facundobatista@gmail.com>
parents: 46362
diff changeset
443 try:
e2c5ae30cffe Fixed the semantic of timeout for socket.create_connection and
Facundo Batista <facundobatista@gmail.com>
parents: 46362
diff changeset
444 ftp = ftplib.FTP("localhost")
e2c5ae30cffe Fixed the semantic of timeout for socket.create_connection and
Facundo Batista <facundobatista@gmail.com>
parents: 46362
diff changeset
445 finally:
e2c5ae30cffe Fixed the semantic of timeout for socket.create_connection and
Facundo Batista <facundobatista@gmail.com>
parents: 46362
diff changeset
446 socket.setdefaulttimeout(None)
e2c5ae30cffe Fixed the semantic of timeout for socket.create_connection and
Facundo Batista <facundobatista@gmail.com>
parents: 46362
diff changeset
447 self.assertEqual(ftp.sock.gettimeout(), 30)
e2c5ae30cffe Fixed the semantic of timeout for socket.create_connection and
Facundo Batista <facundobatista@gmail.com>
parents: 46362
diff changeset
448 self.evt.wait()
e2c5ae30cffe Fixed the semantic of timeout for socket.create_connection and
Facundo Batista <facundobatista@gmail.com>
parents: 46362
diff changeset
449 ftp.close()
e2c5ae30cffe Fixed the semantic of timeout for socket.create_connection and
Facundo Batista <facundobatista@gmail.com>
parents: 46362
diff changeset
450
e2c5ae30cffe Fixed the semantic of timeout for socket.create_connection and
Facundo Batista <facundobatista@gmail.com>
parents: 46362
diff changeset
451 def testTimeoutNone(self):
e2c5ae30cffe Fixed the semantic of timeout for socket.create_connection and
Facundo Batista <facundobatista@gmail.com>
parents: 46362
diff changeset
452 # no timeout -- do not use global socket timeout
e2c5ae30cffe Fixed the semantic of timeout for socket.create_connection and
Facundo Batista <facundobatista@gmail.com>
parents: 46362
diff changeset
453 self.assert_(socket.getdefaulttimeout() is None)
e2c5ae30cffe Fixed the semantic of timeout for socket.create_connection and
Facundo Batista <facundobatista@gmail.com>
parents: 46362
diff changeset
454 socket.setdefaulttimeout(30)
e2c5ae30cffe Fixed the semantic of timeout for socket.create_connection and
Facundo Batista <facundobatista@gmail.com>
parents: 46362
diff changeset
455 try:
e2c5ae30cffe Fixed the semantic of timeout for socket.create_connection and
Facundo Batista <facundobatista@gmail.com>
parents: 46362
diff changeset
456 ftp = ftplib.FTP("localhost", timeout=None)
e2c5ae30cffe Fixed the semantic of timeout for socket.create_connection and
Facundo Batista <facundobatista@gmail.com>
parents: 46362
diff changeset
457 finally:
e2c5ae30cffe Fixed the semantic of timeout for socket.create_connection and
Facundo Batista <facundobatista@gmail.com>
parents: 46362
diff changeset
458 socket.setdefaulttimeout(None)
41306
03d5db8325f4 Forgot to add the file before the previous commit, here go
Facundo Batista <facundobatista@gmail.com>
parents:
diff changeset
459 self.assertTrue(ftp.sock.gettimeout() is None)
45528
088dfc0f71b4 Don't use a hard coded port. This test could hang/fail if the port is in use.
Neal Norwitz <nnorwitz@gmail.com>
parents: 41532
diff changeset
460 self.evt.wait()
47372
e2c5ae30cffe Fixed the semantic of timeout for socket.create_connection and
Facundo Batista <facundobatista@gmail.com>
parents: 46362
diff changeset
461 ftp.close()
41532
4b9fa8092e82 Whitespace normalization. Ugh, we really need to do this more often.
Neal Norwitz <nnorwitz@gmail.com>
parents: 41326
diff changeset
462
41306
03d5db8325f4 Forgot to add the file before the previous commit, here go
Facundo Batista <facundobatista@gmail.com>
parents:
diff changeset
463 def testTimeoutValue(self):
03d5db8325f4 Forgot to add the file before the previous commit, here go
Facundo Batista <facundobatista@gmail.com>
parents:
diff changeset
464 # a value
46362
d917da2b1946 - Issue #2550: The approach used by client/server code for obtaining ports
Trent Nelson <trent.nelson@snakebite.org>
parents: 45528
diff changeset
465 ftp = ftplib.FTP(HOST, timeout=30)
41306
03d5db8325f4 Forgot to add the file before the previous commit, here go
Facundo Batista <facundobatista@gmail.com>
parents:
diff changeset
466 self.assertEqual(ftp.sock.gettimeout(), 30)
45528
088dfc0f71b4 Don't use a hard coded port. This test could hang/fail if the port is in use.
Neal Norwitz <nnorwitz@gmail.com>
parents: 41532
diff changeset
467 self.evt.wait()
47372
e2c5ae30cffe Fixed the semantic of timeout for socket.create_connection and
Facundo Batista <facundobatista@gmail.com>
parents: 46362
diff changeset
468 ftp.close()
41306
03d5db8325f4 Forgot to add the file before the previous commit, here go
Facundo Batista <facundobatista@gmail.com>
parents:
diff changeset
469
41326
ccdc5b3b9b11 Added the posibility to pass the timeout to FTP.connect, not only when
Facundo Batista <facundobatista@gmail.com>
parents: 41306
diff changeset
470 def testTimeoutConnect(self):
ccdc5b3b9b11 Added the posibility to pass the timeout to FTP.connect, not only when
Facundo Batista <facundobatista@gmail.com>
parents: 41306
diff changeset
471 ftp = ftplib.FTP()
46362
d917da2b1946 - Issue #2550: The approach used by client/server code for obtaining ports
Trent Nelson <trent.nelson@snakebite.org>
parents: 45528
diff changeset
472 ftp.connect(HOST, timeout=30)
41326
ccdc5b3b9b11 Added the posibility to pass the timeout to FTP.connect, not only when
Facundo Batista <facundobatista@gmail.com>
parents: 41306
diff changeset
473 self.assertEqual(ftp.sock.gettimeout(), 30)
45528
088dfc0f71b4 Don't use a hard coded port. This test could hang/fail if the port is in use.
Neal Norwitz <nnorwitz@gmail.com>
parents: 41532
diff changeset
474 self.evt.wait()
47372
e2c5ae30cffe Fixed the semantic of timeout for socket.create_connection and
Facundo Batista <facundobatista@gmail.com>
parents: 46362
diff changeset
475 ftp.close()
41326
ccdc5b3b9b11 Added the posibility to pass the timeout to FTP.connect, not only when
Facundo Batista <facundobatista@gmail.com>
parents: 41306
diff changeset
476
ccdc5b3b9b11 Added the posibility to pass the timeout to FTP.connect, not only when
Facundo Batista <facundobatista@gmail.com>
parents: 41306
diff changeset
477 def testTimeoutDifferentOrder(self):
ccdc5b3b9b11 Added the posibility to pass the timeout to FTP.connect, not only when
Facundo Batista <facundobatista@gmail.com>
parents: 41306
diff changeset
478 ftp = ftplib.FTP(timeout=30)
46362
d917da2b1946 - Issue #2550: The approach used by client/server code for obtaining ports
Trent Nelson <trent.nelson@snakebite.org>
parents: 45528
diff changeset
479 ftp.connect(HOST)
41326
ccdc5b3b9b11 Added the posibility to pass the timeout to FTP.connect, not only when
Facundo Batista <facundobatista@gmail.com>
parents: 41306
diff changeset
480 self.assertEqual(ftp.sock.gettimeout(), 30)
45528
088dfc0f71b4 Don't use a hard coded port. This test could hang/fail if the port is in use.
Neal Norwitz <nnorwitz@gmail.com>
parents: 41532
diff changeset
481 self.evt.wait()
47372
e2c5ae30cffe Fixed the semantic of timeout for socket.create_connection and
Facundo Batista <facundobatista@gmail.com>
parents: 46362
diff changeset
482 ftp.close()
41326
ccdc5b3b9b11 Added the posibility to pass the timeout to FTP.connect, not only when
Facundo Batista <facundobatista@gmail.com>
parents: 41306
diff changeset
483
ccdc5b3b9b11 Added the posibility to pass the timeout to FTP.connect, not only when
Facundo Batista <facundobatista@gmail.com>
parents: 41306
diff changeset
484 def testTimeoutDirectAccess(self):
ccdc5b3b9b11 Added the posibility to pass the timeout to FTP.connect, not only when
Facundo Batista <facundobatista@gmail.com>
parents: 41306
diff changeset
485 ftp = ftplib.FTP()
ccdc5b3b9b11 Added the posibility to pass the timeout to FTP.connect, not only when
Facundo Batista <facundobatista@gmail.com>
parents: 41306
diff changeset
486 ftp.timeout = 30
46362
d917da2b1946 - Issue #2550: The approach used by client/server code for obtaining ports
Trent Nelson <trent.nelson@snakebite.org>
parents: 45528
diff changeset
487 ftp.connect(HOST)
41326
ccdc5b3b9b11 Added the posibility to pass the timeout to FTP.connect, not only when
Facundo Batista <facundobatista@gmail.com>
parents: 41306
diff changeset
488 self.assertEqual(ftp.sock.gettimeout(), 30)
45528
088dfc0f71b4 Don't use a hard coded port. This test could hang/fail if the port is in use.
Neal Norwitz <nnorwitz@gmail.com>
parents: 41532
diff changeset
489 self.evt.wait()
41306
03d5db8325f4 Forgot to add the file before the previous commit, here go
Facundo Batista <facundobatista@gmail.com>
parents:
diff changeset
490 ftp.close()
03d5db8325f4 Forgot to add the file before the previous commit, here go
Facundo Batista <facundobatista@gmail.com>
parents:
diff changeset
491
03d5db8325f4 Forgot to add the file before the previous commit, here go
Facundo Batista <facundobatista@gmail.com>
parents:
diff changeset
492
49311
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
493 def test_main():
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
494 tests = [TestFTPClass, TestTimeouts]
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
495 if socket.has_ipv6:
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
496 try:
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
497 DummyFTPServer((HOST, 0), af=socket.AF_INET6)
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
498 except socket.error:
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
499 pass
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
500 else:
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
501 tests.append(TestIPv6Environment)
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
502 thread_info = test_support.threading_setup()
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
503 try:
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
504 test_support.run_unittest(*tests)
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
505 finally:
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
506 test_support.threading_cleanup(*thread_info)
eb35fcba658e give ftplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
507
41306
03d5db8325f4 Forgot to add the file before the previous commit, here go
Facundo Batista <facundobatista@gmail.com>
parents:
diff changeset
508
03d5db8325f4 Forgot to add the file before the previous commit, here go
Facundo Batista <facundobatista@gmail.com>
parents:
diff changeset
509 if __name__ == '__main__':
03d5db8325f4 Forgot to add the file before the previous commit, here go
Facundo Batista <facundobatista@gmail.com>
parents:
diff changeset
510 test_main()