| 
									
										
										
										
											2007-03-26 20:56:09 +00:00
										 |  |  | import socket | 
					
						
							|  |  |  | import threading | 
					
						
							|  |  |  | import ftplib | 
					
						
							|  |  |  | import time | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | from unittest import TestCase | 
					
						
							|  |  |  | from test import test_support | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-02-26 04:50:37 +00:00
										 |  |  | server_port = None | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # This function sets the evt 3 times: | 
					
						
							|  |  |  | #  1) when the connection is ready to be accepted. | 
					
						
							|  |  |  | #  2) when it is safe for the caller to close the connection | 
					
						
							|  |  |  | #  3) when we have closed the socket | 
					
						
							| 
									
										
										
										
											2007-03-26 20:56:09 +00:00
										 |  |  | def server(evt): | 
					
						
							| 
									
										
										
										
											2008-02-26 04:50:37 +00:00
										 |  |  |     global server_port | 
					
						
							| 
									
										
										
										
											2007-03-26 20:56:09 +00:00
										 |  |  |     serv = socket.socket(socket.AF_INET, socket.SOCK_STREAM) | 
					
						
							| 
									
										
										
										
											2007-03-30 13:00:35 +00:00
										 |  |  |     serv.settimeout(3) | 
					
						
							| 
									
										
										
										
											2007-03-26 20:56:09 +00:00
										 |  |  |     serv.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) | 
					
						
							| 
									
										
										
										
											2008-02-26 04:50:37 +00:00
										 |  |  |     server_port = test_support.bind_port(serv, "", 9091) | 
					
						
							| 
									
										
										
										
											2007-03-26 20:56:09 +00:00
										 |  |  |     serv.listen(5) | 
					
						
							| 
									
										
										
										
											2008-02-26 04:50:37 +00:00
										 |  |  |     # (1) Signal the caller that we are ready to accept the connection. | 
					
						
							|  |  |  |     evt.set() | 
					
						
							| 
									
										
										
										
											2007-03-30 13:00:35 +00:00
										 |  |  |     try: | 
					
						
							|  |  |  |         conn, addr = serv.accept() | 
					
						
							|  |  |  |     except socket.timeout: | 
					
						
							|  |  |  |         pass | 
					
						
							|  |  |  |     else: | 
					
						
							|  |  |  |         conn.send("1 Hola mundo\n") | 
					
						
							| 
									
										
										
										
											2008-02-26 04:50:37 +00:00
										 |  |  |         # (2) Signal the caller that it is safe to close the socket. | 
					
						
							|  |  |  |         evt.set() | 
					
						
							| 
									
										
										
										
											2007-03-30 13:00:35 +00:00
										 |  |  |         conn.close() | 
					
						
							|  |  |  |     finally: | 
					
						
							|  |  |  |         serv.close() | 
					
						
							| 
									
										
										
										
											2008-02-26 04:50:37 +00:00
										 |  |  |         # (3) Signal the caller that we are done. | 
					
						
							| 
									
										
										
										
											2007-03-30 13:00:35 +00:00
										 |  |  |         evt.set() | 
					
						
							| 
									
										
										
										
											2007-03-26 20:56:09 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | class GeneralTests(TestCase): | 
					
						
							| 
									
										
										
										
											2007-04-25 06:30:05 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-03-26 20:56:09 +00:00
										 |  |  |     def setUp(self): | 
					
						
							|  |  |  |         self.evt = threading.Event() | 
					
						
							|  |  |  |         threading.Thread(target=server, args=(self.evt,)).start() | 
					
						
							| 
									
										
										
										
											2008-02-26 04:50:37 +00:00
										 |  |  |         # Wait for the server to be ready. | 
					
						
							|  |  |  |         self.evt.wait() | 
					
						
							|  |  |  |         self.evt.clear() | 
					
						
							|  |  |  |         ftplib.FTP.port = server_port | 
					
						
							| 
									
										
										
										
											2007-03-26 20:56:09 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def tearDown(self): | 
					
						
							| 
									
										
										
										
											2008-02-26 04:50:37 +00:00
										 |  |  |         # Wait on the closing of the socket (this shouldn't be necessary). | 
					
						
							| 
									
										
										
										
											2007-03-26 20:56:09 +00:00
										 |  |  |         self.evt.wait() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def testBasic(self): | 
					
						
							|  |  |  |         # do nothing | 
					
						
							|  |  |  |         ftplib.FTP() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         # connects | 
					
						
							|  |  |  |         ftp = ftplib.FTP("localhost") | 
					
						
							| 
									
										
										
										
											2008-02-26 04:50:37 +00:00
										 |  |  |         self.evt.wait() | 
					
						
							| 
									
										
										
										
											2007-03-26 20:56:09 +00:00
										 |  |  |         ftp.sock.close() | 
					
						
							| 
									
										
										
										
											2007-04-25 06:30:05 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-03-26 20:56:09 +00:00
										 |  |  |     def testTimeoutDefault(self): | 
					
						
							|  |  |  |         # default | 
					
						
							|  |  |  |         ftp = ftplib.FTP("localhost") | 
					
						
							|  |  |  |         self.assertTrue(ftp.sock.gettimeout() is None) | 
					
						
							| 
									
										
										
										
											2008-02-26 04:50:37 +00:00
										 |  |  |         self.evt.wait() | 
					
						
							| 
									
										
										
										
											2007-03-26 20:56:09 +00:00
										 |  |  |         ftp.sock.close() | 
					
						
							| 
									
										
										
										
											2007-04-25 06:30:05 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-03-26 20:56:09 +00:00
										 |  |  |     def testTimeoutValue(self): | 
					
						
							|  |  |  |         # a value | 
					
						
							|  |  |  |         ftp = ftplib.FTP("localhost", timeout=30) | 
					
						
							|  |  |  |         self.assertEqual(ftp.sock.gettimeout(), 30) | 
					
						
							| 
									
										
										
										
											2008-02-26 04:50:37 +00:00
										 |  |  |         self.evt.wait() | 
					
						
							| 
									
										
										
										
											2007-03-26 20:56:09 +00:00
										 |  |  |         ftp.sock.close() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-03-30 13:00:35 +00:00
										 |  |  |     def testTimeoutConnect(self): | 
					
						
							|  |  |  |         ftp = ftplib.FTP() | 
					
						
							|  |  |  |         ftp.connect("localhost", timeout=30) | 
					
						
							|  |  |  |         self.assertEqual(ftp.sock.gettimeout(), 30) | 
					
						
							| 
									
										
										
										
											2008-02-26 04:50:37 +00:00
										 |  |  |         self.evt.wait() | 
					
						
							| 
									
										
										
										
											2007-03-30 13:00:35 +00:00
										 |  |  |         ftp.sock.close() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def testTimeoutDifferentOrder(self): | 
					
						
							|  |  |  |         ftp = ftplib.FTP(timeout=30) | 
					
						
							|  |  |  |         ftp.connect("localhost") | 
					
						
							|  |  |  |         self.assertEqual(ftp.sock.gettimeout(), 30) | 
					
						
							| 
									
										
										
										
											2008-02-26 04:50:37 +00:00
										 |  |  |         self.evt.wait() | 
					
						
							| 
									
										
										
										
											2007-03-30 13:00:35 +00:00
										 |  |  |         ftp.sock.close() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def testTimeoutDirectAccess(self): | 
					
						
							|  |  |  |         ftp = ftplib.FTP() | 
					
						
							|  |  |  |         ftp.timeout = 30 | 
					
						
							|  |  |  |         ftp.connect("localhost") | 
					
						
							|  |  |  |         self.assertEqual(ftp.sock.gettimeout(), 30) | 
					
						
							| 
									
										
										
										
											2008-02-26 04:50:37 +00:00
										 |  |  |         self.evt.wait() | 
					
						
							| 
									
										
										
										
											2007-03-30 13:00:35 +00:00
										 |  |  |         ftp.sock.close() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-03-26 20:56:09 +00:00
										 |  |  |     def testTimeoutNone(self): | 
					
						
							|  |  |  |         # None, having other default | 
					
						
							|  |  |  |         previous = socket.getdefaulttimeout() | 
					
						
							|  |  |  |         socket.setdefaulttimeout(30) | 
					
						
							|  |  |  |         try: | 
					
						
							|  |  |  |             ftp = ftplib.FTP("localhost", timeout=None) | 
					
						
							|  |  |  |         finally: | 
					
						
							|  |  |  |             socket.setdefaulttimeout(previous) | 
					
						
							|  |  |  |         self.assertEqual(ftp.sock.gettimeout(), 30) | 
					
						
							| 
									
										
										
										
											2008-02-26 04:50:37 +00:00
										 |  |  |         self.evt.wait() | 
					
						
							| 
									
										
										
										
											2007-03-26 20:56:09 +00:00
										 |  |  |         ftp.close() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def test_main(verbose=None): | 
					
						
							|  |  |  |     test_support.run_unittest(GeneralTests) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | if __name__ == '__main__': | 
					
						
							|  |  |  |     test_main() |