blob: d782c530f57b6f1b666ae563c645f599e67ee6dc [file] [log] [blame]
Guido van Rossumd8faa362007-04-27 19:54:29 +00001import socket
2import threading
3import ftplib
4import time
5
6from unittest import TestCase
7from test import test_support
8
Guido van Rossum3da4c4b2007-09-06 03:57:23 +00009def server(evt, ready):
Guido van Rossumd8faa362007-04-27 19:54:29 +000010 serv = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
11 serv.settimeout(3)
12 serv.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
13 serv.bind(("", 9091))
14 serv.listen(5)
Guido van Rossum3da4c4b2007-09-06 03:57:23 +000015 ready.set()
Guido van Rossumd8faa362007-04-27 19:54:29 +000016 try:
17 conn, addr = serv.accept()
18 except socket.timeout:
19 pass
20 else:
Guido van Rossum8a392d72007-11-21 22:09:45 +000021 conn.send(b"1 Hola mundo\n")
Guido van Rossumd8faa362007-04-27 19:54:29 +000022 conn.close()
23 finally:
24 serv.close()
25 evt.set()
26
27class GeneralTests(TestCase):
28
29 def setUp(self):
30 ftplib.FTP.port = 9091
31 self.evt = threading.Event()
Guido van Rossum3da4c4b2007-09-06 03:57:23 +000032 ready = threading.Event()
33 threading.Thread(target=server, args=(self.evt, ready)).start()
34 ready.wait()
Guido van Rossumd8faa362007-04-27 19:54:29 +000035
36 def tearDown(self):
37 self.evt.wait()
38
39 def testBasic(self):
40 # do nothing
41 ftplib.FTP()
42
43 # connects
44 ftp = ftplib.FTP("localhost")
45 ftp.sock.close()
46
47 def testTimeoutDefault(self):
48 # default
49 ftp = ftplib.FTP("localhost")
50 self.assertTrue(ftp.sock.gettimeout() is None)
51 ftp.sock.close()
52
53 def testTimeoutValue(self):
54 # a value
55 ftp = ftplib.FTP("localhost", timeout=30)
56 self.assertEqual(ftp.sock.gettimeout(), 30)
57 ftp.sock.close()
58
59 def testTimeoutConnect(self):
60 ftp = ftplib.FTP()
61 ftp.connect("localhost", timeout=30)
62 self.assertEqual(ftp.sock.gettimeout(), 30)
63 ftp.sock.close()
64
65 def testTimeoutDifferentOrder(self):
66 ftp = ftplib.FTP(timeout=30)
67 ftp.connect("localhost")
68 self.assertEqual(ftp.sock.gettimeout(), 30)
69 ftp.sock.close()
70
71 def testTimeoutDirectAccess(self):
72 ftp = ftplib.FTP()
73 ftp.timeout = 30
74 ftp.connect("localhost")
75 self.assertEqual(ftp.sock.gettimeout(), 30)
76 ftp.sock.close()
77
78 def testTimeoutNone(self):
79 # None, having other default
80 previous = socket.getdefaulttimeout()
81 socket.setdefaulttimeout(30)
82 try:
83 ftp = ftplib.FTP("localhost", timeout=None)
84 finally:
85 socket.setdefaulttimeout(previous)
86 self.assertEqual(ftp.sock.gettimeout(), 30)
87 ftp.close()
88
89
90
91def test_main(verbose=None):
92 test_support.run_unittest(GeneralTests)
93
94if __name__ == '__main__':
95 test_main()