Your IP : 216.73.216.213


Current Path : /opt/alt/python34/lib64/python3.4/test/__pycache__/
Upload File :
Current File : //opt/alt/python34/lib64/python3.4/test/__pycache__/test_ftplib.cpython-34.pyo

�
f f}��
@s�dZddlZddlZddlZddlZddlZddlZddlZddlZyddl	Z	Wne
k
r�dZ	YnXddlmZm
Z
ddlmZddlmZmZejd�ZdZdd	Zd
Zd
ZdZGdd
�d
ej�ZGdd�dej�ZGdd�dejej�Ze	dk	rej j!ej j"e#�d�Z$ej j!ej j"e#�d�Z%Gdd�dej�Z&Gdd�de&e�Z'Gdd�de&e�Z(Gdd�de�Z)nGdd�de�Z*e
ej+d�Gdd �d e��Z,e
e	d!�Gd"d#�d#e*��Z-e
e	d!�Gd$d%�d%e��Z.Gd&d'�d'e�Z/Gd(d)�d)e�Z0d*d+�Z1e2d,kr�e1�ndS)-zTest script for ftplib module.�N)�TestCase�
skipUnless)�support)�HOST�HOSTv6�	threading�zabcde12345
i�z
foo
bar
a�type=cdir;perm=el;unique==keVO1+ZF4; test
type=pdir;perm=e;unique==keVO1+d?3; ..
type=OS.unix=slink:/foobar;perm=;unique==keVO1+4G4; foobar
type=OS.unix=chr-13/29;perm=;unique==keVO1+5G4; device
type=OS.unix=blk-11/108;perm=;unique==keVO1+6G4; block
type=file;perm=awr;unique==keVO1+8G4; writable
type=dir;perm=cpmel;unique==keVO1+7G4; promiscuous
type=dir;perm=;unique==keVO1+1t2; no-exec
type=file;perm=r;unique==keVO1+EG4; two words
type=file;perm=r;unique==keVO1+IH4;  leading space
type=file;perm=r;unique==keVO1+1G4; file1
type=dir;perm=cpmel;unique==keVO1+7G4; incoming
type=file;perm=r;unique==keVO1+1G4; file2
type=file;perm=r;unique==keVO1+1G4; file3
type=file;perm=r;unique==keVO1+1G4; file4
csXeZdZdZdd�Zdd�Zdd�Z�fdd	�Zd
d�Z�S)�DummyDTPHandlerFcCs,tjj||�||_d|j_dS)N�)�asynchat�
async_chat�__init__�	baseclass�last_received_data)�self�connr�r�5/opt/alt/python34/lib64/python3.4/test/test_ftplib.pyr
2s	zDummyDTPHandler.__init__cCs(|jj|jd�jd�7_dS)Ni�ascii)rr�recv�decode)rrrr�handle_read7szDummyDTPHandler.handle_readcCs3|js/|jjd�|j�d|_ndS)Nz226 transfer completeT)�dtp_conn_closedr�push�close)rrrr�handle_close:s	
zDummyDTPHandler.handle_closecs`|jjdk	r-|jj}d|j_n|s=|j�Stt|�j|jd��dS)Nr)r�	next_data�close_when_done�superr	r�encode)rZwhat)�	__class__rrrCs
zDummyDTPHandler.pushcCs�dS)Nr)rrrr�handle_errorKszDummyDTPHandler.handle_error)	�__name__�
__module__�__qualname__rr
rrrr!rr)r rr	/s	r	c@s�eZdZeZdd�Zdd�Zdd�Zdd�Zd	d
�Z	dd�Z
d
d�Zdd�Zdd�Z
dd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd �Zd!d"�Zd#d$�Zd%d&�Zd'd(�Zd)d*�Zd+d,�Zd-d.�Zd/d0�Zd1d2�Zd3d4�Zd5d6�Zd7d8�Z d9d:�Z!d;d<�Z"d=d>�Z#d?d@�Z$dAdB�Z%dCS)D�DummyFTPHandlercCs�tjj||�|jjtjtjd�|jd�g|_d|_	d|_
d|_d|_d|_
d|_t|_|jd�dS)N�s
r
z220 welcome)rrr
�socketZ
setsockoptZ
SOL_SOCKETZSO_OOBINLINEZset_terminator�	in_buffer�dtp�last_received_cmdr�
next_responser�rest�	RETR_DATA�next_retr_datar)rrrrrr
Ss
								zDummyFTPHandler.__init__cCs|jj|�dS)N)r(�append)r�datarrr�collect_incoming_databsz%DummyFTPHandler.collect_incoming_datacCs�dj|j�jd�}g|_|jrI|j|j�d|_n|jd�dj�}||_|jd�}|d	kr�||dd�}nd}t	|d|�r�t
|d|�}||�n|jd|�dS)
N�rr
� rr&Zcmd_z 550 command "%s" not understood.���)�joinr(rr+r�split�lowerr*�find�hasattr�getattr)r�line�cmdZspace�arg�methodrrr�found_terminatores			
z DummyFTPHandler.found_terminatorcCs�dS)Nr)rrrrr!xszDummyFTPHandler.handle_errorcCs$tjj||jd�d�dS)Nrs
)rrrr)rr0rrrr{szDummyFTPHandler.pushcCs�ttt|jd���}dt|dd��}|dd|d}tj||fdt�}|j|d|�|_	|j
d�dS)	N�,z%d.%d.%d.%d����timeoutrz&200 active data connection established)�list�map�intr6�tupler'�create_connection�TIMEOUT�dtp_handlerr)r)rr=�addr�ip�port�srrr�cmd_port~szDummyFTPHandler.cmd_portc	Cs�tj���}|j|jj�ddf�|jd�|jt�|j�dd�\}}|jdd�}|d}|d}|jd|||f�|j�\}}|j	|d|�|_
WdQXdS)	NrrC��.r@rBz$227 entering passive mode (%s,%d,%d)r)r'�bind�getsockname�listen�
settimeoutrJ�replacer�acceptrKr))	rr=�sockrMrNZp1Zp2rrLrrr�cmd_pasv�s 



zDummyFTPHandler.cmd_pasvcCsv|j|d�dd�\}}}t|�}tj||fdt�}|j|d|�|_|jd�dS)Nrr&rDrz&200 active data connection establishedr4)r6rGr'rIrJrKr)r)rr=�afrMrNrOrrr�cmd_eprt�s
&zDummyFTPHandler.cmd_eprtcCs�tjtj���}|j|jj�ddf�|jd�|jt�|j�d}|jd|�|j�\}}|j	|d|�|_
WdQXdS)NrrCr&z+229 entering extended passive mode (|||%d|)r)r'�AF_INET6rSrTrUrVrJrrXrKr))rr=rYrNrrLrrr�cmd_epsv�s 

zDummyFTPHandler.cmd_epsvcCs|j|�dS)N)r)rr=rrr�cmd_echo�szDummyFTPHandler.cmd_echocCs|jd�dS)Nz200 noop ok)r)rr=rrr�cmd_noop�szDummyFTPHandler.cmd_noopcCs|jd�dS)Nz331 username ok)r)rr=rrr�cmd_user�szDummyFTPHandler.cmd_usercCs|jd�dS)Nz230 password ok)r)rr=rrr�cmd_pass�szDummyFTPHandler.cmd_passcCs|jd�dS)Nz230 acct ok)r)rr=rrr�cmd_acct�szDummyFTPHandler.cmd_acctcCs|jd�dS)Nz350 rnfr ok)r)rr=rrr�cmd_rnfr�szDummyFTPHandler.cmd_rnfrcCs|jd�dS)Nz250 rnto ok)r)rr=rrr�cmd_rnto�szDummyFTPHandler.cmd_rntocCs|jd�dS)Nz250 dele ok)r)rr=rrr�cmd_dele�szDummyFTPHandler.cmd_delecCs|jd�dS)Nz
250 cwd ok)r)rr=rrr�cmd_cwd�szDummyFTPHandler.cmd_cwdcCs|jd�dS)Nz250 1000)r)rr=rrr�cmd_size�szDummyFTPHandler.cmd_sizecCs|jd|�dS)Nz257 "%s")r)rr=rrr�cmd_mkd�szDummyFTPHandler.cmd_mkdcCs|jd�dS)Nz
250 rmd ok)r)rr=rrr�cmd_rmd�szDummyFTPHandler.cmd_rmdcCs|jd�dS)Nz257 "pwd ok")r)rr=rrr�cmd_pwd�szDummyFTPHandler.cmd_pwdcCs|jd�dS)Nz200 type ok)r)rr=rrr�cmd_type�szDummyFTPHandler.cmd_typecCs|jd�|j�dS)Nz221 quit ok)rr)rr=rrr�cmd_quit�s
zDummyFTPHandler.cmd_quitcCs|jd�dS)Nz226 abor ok)r)rr=rrr�cmd_abor�szDummyFTPHandler.cmd_aborcCs|jd�dS)Nz125 stor ok)r)rr=rrr�cmd_stor�szDummyFTPHandler.cmd_storcCs||_|jd�dS)Nz350 rest ok)r,r)rr=rrr�cmd_rest�s	zDummyFTPHandler.cmd_restcCsk|jd�|jdk	r.t|j�}nd}|jj|j|d��|jj�d|_dS)Nz125 retr okr)rr,rGr)r.r)rr=�offsetrrr�cmd_retr�s

zDummyFTPHandler.cmd_retrcCs.|jd�|jjt�|jj�dS)Nz125 list ok)rr)�	LIST_DATAr)rr=rrr�cmd_list�s
zDummyFTPHandler.cmd_listcCs.|jd�|jjt�|jj�dS)Nz125 nlst ok)rr)�	NLST_DATAr)rr=rrr�cmd_nlst�s
zDummyFTPHandler.cmd_nlstcCs|jd�dS)Nz200 opts ok)r)rr=rrr�cmd_opts�szDummyFTPHandler.cmd_optscCs.|jd�|jjt�|jj�dS)Nz125 mlsd ok)rr)�	MLSD_DATAr)rr=rrr�cmd_mlsd�s
zDummyFTPHandler.cmd_mlsdcCs$dt|�|_|jd�dS)N�xz125 setlongretr ok)rGr.r)rr=rrr�cmd_setlongretr�szDummyFTPHandler.cmd_setlongretrN)&r"r#r$r	rKr
r1r?r!rrPrZr\r^r_r`rarbrcrdrerfrgrhrirjrkrlrmrnrorprrrtrvrwryr{rrrrr%OsD

r%c@s�eZdZeZejdd�Zdd�Zdd�Z	dd�Z
d	d
�Zdd�ZeZ
d
d�Zdd�ZdS)�DummyFTPServercCs�tjj|�tjj|�|j|tj�|j|�|j	d�d|_
tj�|_|jj
�dd�\|_|_d|_dS)NrCFrQ)r�Threadr
�asyncore�
dispatcherZ
create_socketr'�SOCK_STREAMrSrU�activeZLock�active_lockrT�hostrN�handler_instance)rZaddressr[rrrr
s

	%zDummyFTPServer.__init__cCs0tj�|_tjj|�|jj�dS)N)r�Event�_DummyFTPServer__flagr}�start�wait)rrrrr�szDummyFTPServer.startcCssd|_|jj�xF|jr^tjr^|jj�tjdddd�|jj�qWtj	dd�dS)NTrDg�������?�countr&Z
ignore_all)
r�r��setr~Z
socket_mapr��acquireZloop�releaseZ	close_all)rrrr�runs	

zDummyFTPServer.runcCsd|_|j�dS)NF)r�r5)rrrr�stops	zDummyFTPServer.stopcCs|j|�|_dS)N)�handlerr�)rrrLrrr�handle_accepted szDummyFTPServer.handle_acceptedcCs|j�dS)N)r)rrrr�handle_connect#szDummyFTPServer.handle_connectcCsdS)Nrr)rrrr�writable'szDummyFTPServer.writablecCs�dS)Nr)rrrrr!*szDummyFTPServer.handle_errorN)r"r#r$r%r�r'�AF_INETr
r�r�r�r�r�rr�r!rrrrr|�s	r|zkeycert3.pemzpycacert.pemcs�eZdZdZdZdZdd�Zdd�Z�fdd�Z�fd	d
�Z	�fdd�Z
�fd
d�Z�fdd�Zdd�Z
�fdd�Z�S)�
SSLConnectionz3An asyncore.dispatcher subclass supporting TLS/SSL.FcCsWtj|jdddtdddddtj�}|j�|j|�d|_dS)NZsuppress_ragged_eofsF�certfileZserver_sideTZdo_handshake_on_connect�ssl_version)�sslZwrap_socketr'�CERTFILE�PROTOCOL_SSLv23Zdel_channelZ
set_socket�_ssl_accepting)rr'rrr�secure_connection9s

zSSLConnection.secure_connectioncCs�y|jj�Wn�tjk
r�}zK|jdtjtjfkrLdS|jdtjkrl|j�S�WYdd}~XnNt	k
r�}z%|jdt
jkr�|j�SWYdd}~Xn
Xd|_dS)NrF)
r'Zdo_handshaker��SSLError�args�SSL_ERROR_WANT_READ�SSL_ERROR_WANT_WRITE�
SSL_ERROR_EOFr�OSError�errnoZECONNABORTEDr�)r�errrrr�_do_ssl_handshakeBs
zSSLConnection._do_ssl_handshakecs�d|_y|jj�|_Wnotjk
rl}z(|jdtjtjfkrZdSWYdd}~Xn%tk
r�}zWYdd}~XnXd|_t	|dd�dkr�t
t|�j�ndS)NTrF�_ccc)
�_ssl_closingr'�unwrapr�r�r�r�r�r�r:rr�r)rr�)r rr�_do_ssl_shutdownRs		zSSLConnection._do_ssl_shutdowncsC|jr|j�n)|jr,|j�ntt|�j�dS)N)r�r�r�r�rr��handle_read_event)r)r rrr�fs
	
	
zSSLConnection.handle_read_eventcsC|jr|j�n)|jr,|j�ntt|�j�dS)N)r�r�r�r�rr��handle_write_event)r)r rrr�ns
	
	
z SSLConnection.handle_write_eventcs{ytt|�j|�SWnZtjk
rv}z7|jdtjtjtjtj	fkradS�WYdd}~XnXdS)Nr)
rr��sendr�r�r�r��SSL_ERROR_ZERO_RETURNr�r�)rr0r�)r rrr�vszSSLConnection.sendcs�ytt|�j|�SWn{tjk
r�}zX|jdtjtjfkrUdS|jdtjtj	fkr�|j
�dS�WYdd}~XnXdS)Nrr2)rr�rr�r�r�r�r�r�r�r)rZbuffer_sizer�)r rrr�s
zSSLConnection.recvcCs�dS)Nr)rrrrr!�szSSLConnection.handle_errorcsKt|jtj�r4|jjdk	r4|j�ntt|�j�dS)N)	�
isinstancer'r��	SSLSocketZ_sslobjr�rr�r)r)r rrr�s
zSSLConnection.close)r"r#r$�__doc__r�r�r�r�r�r�r�r�rr!rrr)r rr�3s	
r�c@s"eZdZdZdd�ZdS)�DummyTLS_DTPHandlerz.A DummyDTPHandler subclass supporting TLS/SSL.cCs0tj|||�|jjr,|j�ndS)N)r	r
r�secure_data_channelr�)rrrrrrr
�szDummyTLS_DTPHandler.__init__N)r"r#r$r�r
rrrrr��sr�c@sXeZdZdZeZdd�Zdd�Zdd�Zdd	�Z	d
d�Z
dS)
�DummyTLS_FTPHandlerz.A DummyFTPHandler subclass supporting TLS/SSL.cCs&tj||�d|_d|_dS)NF)r%r
r�r�)rrrrrr
�s	zDummyTLS_FTPHandler.__init__cCs|jd�|j�dS)zSet up secure control channel.z234 AUTH TLS successfulN)rr�)rr;rrr�cmd_auth�s
zDummyTLS_FTPHandler.cmd_authcCs$|jd�d|_|j�dS)Nz 220 Reverting back to clear-textT)rr�r�)rr;rrr�cmd_ccc�s
	zDummyTLS_FTPHandler.cmd_ccccCs|jd�dS)z�Negotiate size of buffer for secure data transfer.
            For TLS/SSL the only valid value for the parameter is '0'.
            Any other value is accepted but ignored.
            z200 PBSZ=0 successful.N)r)rr;rrr�cmd_pbsz�szDummyTLS_FTPHandler.cmd_pbszcCsg|j�}|dkr1|jd�d|_n2|dkrV|jd�d|_n
|jd�dS)	zSetup un/secure data channel.�Cz200 Protection set to ClearF�Pz200 Protection set to PrivateTz(502 Unrecognized PROT type (use C or P).N)�upperrr�)rr;r=rrr�cmd_prot�s

zDummyTLS_FTPHandler.cmd_protN)r"r#r$r�r�rKr
r�r�r�r�rrrrr��sr�c@seZdZeZdS)�DummyTLS_FTPServerN)r"r#r$r�r�rrrrr��sr�c@s�eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zdd�Zdd�Zdd �Zd!d"�Zd#d$�Zd%d&�Zd'd(�Zd)d*�Zd+d,�Zd-d.�Zd/d0�Zd1d2�Zd3d4�Zd5d6�Zd7d8�Zd9d:�Zd;d<�Z d=d>�Z!d?d@�Z"dAdB�Z#dCdD�Z$dEdF�Z%dGdH�Z&dIdJ�Z'dKdL�Z(dMS)N�TestFTPClasscCsZttdf�|_|jj�tjdt�|_|jj|jj	|jj
�dS)NrrD)r|r�serverr��ftplib�FTPrJ�client�connectr�rN)rrrr�setUp�s
zTestFTPClass.setUpcCs|jj�|jj�dS)N)r�rr�r�)rrrr�tearDown�s
zTestFTPClass.tearDowncCs0|jt|�t|��|j||�dS)N)�assertEqual�len)r�receivedZexpectedrrr�
check_data�szTestFTPClass.check_datacCs|j|jj�d�dS)Nz220 welcome)r�r�Z
getwelcome)rrrr�test_getwelcome�szTestFTPClass.test_getwelcomecCsj|j|jjd�td��|j|jjd�td��|j|jjd�td��dS)N�fooz
pass 12345z
pass *****z
PASS 12345z
PASS *****)r�r�Zsanitize�repr)rrrr�
test_sanitize�s""zTestFTPClass.test_sanitizecCs�|jt|jjd�|jt|jjd�|jt|jjd�|jtj|jjd�|jtj|jjd�|jtj|jjd�|jtj|jjd�|jtj|jjd�dS)	Nz
echo 40
0z	echo 40
0z	echo 40
0zecho 400zecho 499zecho 500zecho 599zecho 999)�assertRaises�
ValueErrorr��sendcmdr��
error_temp�
error_perm�error_proto)rrrr�test_exceptions�szTestFTPClass.test_exceptionscCsgtjtjtjtjtjttf}x6|D].}y|d��Wq1tjk
r^Yq1Xq1WdS)Nz(exception not included in all_errors set)	r��error_replyr�r�r��Errorr��EOFErrorZ
all_errors)r�
exceptionsrzrrr�test_all_errors�s	
zTestFTPClass.test_all_errorscCs]|j|jj�|jjd�|j|jj�|jjd�|j|jj�dS)NTF)�
assertTruer�Z
passiveserver�set_pasv�assertFalse)rrrr�
test_set_pasv�s
zTestFTPClass.test_set_pasvcCs\|jjd�|jjd�|jtj|jjd�|jtj|jjd�dS)Nzecho 200zecho 299zecho 199zecho 300)r�Zvoidcmdr�r�r�)rrrr�test_voidcmdszTestFTPClass.test_voidcmdcCs|jj�dS)N)r��login)rrrr�
test_loginszTestFTPClass.test_logincCs|jjd�dS)NZpasswd)r�Zacct)rrrr�	test_acct	szTestFTPClass.test_acctcCsE|jjdd�d|jj_|jtj|jjdd�dS)N�a�bZ200)r��renamer�r�r+r�r�r�)rrrr�test_renameszTestFTPClass.test_renamecCs?|jjd�d|jj_|jtj|jjd�dS)Nr�Z199)r�Zdeleter�r�r+r�r�r�)rrrr�test_deleteszTestFTPClass.test_deletecCs|jjd�dS)Nr�)r��size)rrrr�	test_sizeszTestFTPClass.test_sizecCs&|jjd�}|j|d�dS)Nz/foo)r�Zmkdr�)r�dirrrr�test_mkdszTestFTPClass.test_mkdcCs|jjd�dS)Nr�)r�Zrmd)rrrr�test_rmdszTestFTPClass.test_rmdcCs&|jjd�}|j|d�dS)Nz/fooz
250 cwd ok)r��cwdr�)rr�rrr�test_cwd szTestFTPClass.test_cwdcCs#|jj�}|j|d�dS)Nzpwd ok)r��pwdr�)rr�rrr�test_pwd$szTestFTPClass.test_pwdcCs3|j|jj�d�|j|jjd�dS)Nz221 quit ok)r�r��quitrY)rrrr�	test_quit(szTestFTPClass.test_quitcCs|jj�dS)N)r��abort)rrrr�
test_abort-szTestFTPClass.test_abortcsH�fdd�}g�|jjd|�|jdj��t�dS)Ncs�j|jd��dS)Nr)r/r)r0)r�rr�callback1sz.TestFTPClass.test_retrbinary.<locals>.callback�retrr
)r��
retrbinaryr�r5r-)rr�r)r�r�test_retrbinary0szTestFTPClass.test_retrbinarycsi�fdd�}xPd	D]H}g�|jjd|d|�|jdj��t|d��qWdS)
Ncs�j|jd��dS)Nr)r/r)r0)r�rrr�8sz3TestFTPClass.test_retrbinary_rest.<locals>.callbackr�
�r�r,r
)rr�r�)r�r�r�r5r-)rr�r,r)r�r�test_retrbinary_rest7s

z!TestFTPClass.test_retrbinary_restcCsEg}|jjd|j�|jdj|�tjdd��dS)Nr�r
z
)r��	retrlinesr/r�r5r-rW)rr�rrr�test_retrlines?szTestFTPClass.test_retrlinescs�tjtjd��}|jjd|�|j|jjj	t�g�|j
d�|jjd|d�fdd��|j��dS)Nr�storrr�cs
�jd�S)N)r/)rz)�flagrr�<lambda>Ksz.TestFTPClass.test_storbinary.<locals>.<lambda>)�io�BytesIOr-rr��
storbinaryr�r�r�r�seekr�)r�fr)r�r�test_storbinaryDs
%zTestFTPClass.test_storbinarycCs~tjtjdd�jd��}xSd	D]K}|jd�|jjd|d|�|j|j	j
jt|��q+WdS)
Nz
�
r��30rr�r,)rr)
r�r�r-rWrrr�r�r�r�r�r,�str)rr�rrrr�test_storbinary_restNs
$

z!TestFTPClass.test_storbinary_restcs�tjtjdd�jd��}|jjd|�|j|jj	j
t�g�|jd�|jjd|d�fdd	��|j��tj
tjdd��}tjd
tfdd��!|jt|jjd|�WdQXdS)
Nz
rrr�rzstor foor�cs
�jd�S)N)r/)rz)r�rrr�\sz-TestFTPClass.test_storlines.<locals>.<lambda>r
�quietT)r�r�r-rWrr��	storlinesr�r�r�rrr��StringIOrZcheck_warnings�BytesWarningr��	TypeError)rrr)r�r�test_storlinesUs$
%
zTestFTPClass.test_storlinescCs=|jj�|j|jj�tjd�dd��dS)Nz
r&r4)r�Znlstr�rur6)rrrr�	test_nlstds
zTestFTPClass.test_nlstcsKg�|jj�fdd��|jdj��tjdd��dS)Ncs
�j|�S)N)r/)rz)�lrrr�jsz'TestFTPClass.test_dir.<locals>.<lambda>r
z
)r�r�r�r5rsrW)rr)rr�test_dirhszTestFTPClass.test_dircst�jj��t�jjdd��t�jjdddddg��t�jj��}xq|D]i\}}�j|t��j|t��j|��jd|��jd|��jd|�qmW�fdd	��dddd��fd
d�}|d�|d
dd�|ddd�|ddd�|ddd�|ddd�|ddd�|ddd�|ddd�|ddd�|d dd!�|d"dd#�|d$dd%��d&�t�jj��\}}x!|D]}�j|j	��qW�d'��j
tt�jj���d'�x(�jj�D]}�jd(t
�q`WdS))N�path�/�factsr��type�perm�uniquecs|�jj_dS)N)r�r�r)r0)rrr�set_data{sz(TestFTPClass.test_mlsd.<locals>.set_datacs�|dkrdn|}|dkr*dn|}|dkrBdn|}|dkrZdn|}�|�t�jj��\}}�j||��j|d|��j|d|��j|d|�dS)Nrrr�name)�nextr��mlsdr�)r;rrrr�_namer)rrrr�
test_entry~s
z*TestFTPClass.test_mlsd.<locals>.test_entryz)type=type;perm=perm;unique=unique; name
z*type=ty=pe;perm=perm;unique=unique; name
zty=pez*type==type;perm=perm;unique=unique; name
z=typez+type=t=y=pe;perm=perm;unique=unique; name
zt=y=pez)type=====;perm=perm;unique=unique; name
z====z*type=type;perm=perm;unique=unique; na me
rzna mez*type=type;perm=perm;unique=unique; name 
zname z*type=type;perm=perm;unique=unique;  name
z namez,type=type;perm=perm;unique=unique; n am  e
zn am  ez*type=type;perm=perm;unique=unique; na;me
zna;mez*type=type;perm=perm;unique=unique; ;name
z;namez+type=type;perm=perm;unique=unique; ;name;
z;name;z)type=type;perm=perm;unique=unique; ;;;;
z;;;;z)Type=type;TyPe=perm;UNIQUE=unique; name
r
zunexpected data %s)rEr�r�assertIsInstancer�dictr�ZassertInr�islowerr��
StopIteration�failr0)rZlsrrrrrzr)rrr�	test_mlsdmsF%
!




zTestFTPClass.test_mlsdc
Cs3|jj��|j|jjjd�WdQXdS)NrN)r��makeportr�r�r�r*)rrrr�
test_makeport�szTestFTPClass.test_makeportcCsW|jj�\}}tj||fdt�}|j�|j|jjj	d�dS)NrDZpasv)
r��makepasvr'rIrJrr�r�r�r*)rr�rNrrrr�
test_makepasv�s
zTestFTPClass.test_makepasvcs�jj��fdd�}tjdt��I�_�jj�jj�jj��jj	d��j
|��WdQX�j�jjj
d��j|��tjdt��F�_�jj�jj�jj��jj	d��jj�WdQX�j�jjj
d��j|��y`tjdt��H�_�jj�jj�jj��jj	d�d�jj_WdQXWn>tjk
r�}z�jt|�d�WYdd}~XnX�jd�tjd��j�jjj
d��j|��dS)	NcsM�jjdkrdSy�jjd�Wnttfk
rHdSYnXdS)NF�noopT)r�rYr�r�r�r)rrr�is_client_connected�s	z=TestFTPClass.test_with_statement.<locals>.is_client_connectedrDr(r�z550 error on quitzException not raisedg�������?)r�r�r�r�rJr�r�r�rNr�r�r�r�r*r�r+r�rr"�timeZsleep)rr)r�r)rr�test_with_statement�s2

)

z TestFTPClass.test_with_statementcCs�|jj�tj�}y\|jj|jj|jjdt|f�|j	|jj
j�d|�|jj�WnNtk
r�}z.|j
t
jkr�|jd|�n�WYdd}~XnXdS)N�source_addressr&zcouldn't bind to port %d)r�r�r�find_unused_portr�r�r�rNrr�rYrTr�r��
EADDRINUSE�skipTest)rrN�errr�test_source_address�s

 z TestFTPClass.test_source_addresscCs�tj�}t|f|j_y9|jjd��!}|j|j�d|�WdQXWnNtk
r�}z.|j	t	j
kr�|jd|�n�WYdd}~XnXdS)NrEr&zcouldn't bind to port %d)rr-rr�r,�transfercmdr�rTr�r�r.r/)rrNrYr0rrr�&test_source_address_passive_connection�s$z3TestFTPClass.test_source_address_passive_connectioncCs�|jtjd�d�|jtjd�d�|jtjd�d�|jtjd�d�|jtjtjd�|jtjd�d	�|jtjd
�d	�dS)Nz257 "/foo/bar"z/foo/barz257 "/foo/bar" createdz257 ""r
z257 "" createdz250 "/foo/bar"z257 "/foo/b""ar"z	/foo/b"arz257 "/foo/b""ar" created)r�r�Zparse257r�r�)rrrr�
test_parse257�szTestFTPClass.test_parse257cCs.|jtj|jjd|jjd�dS)NrzrQ)r�r�r�r�r��maxline)rrrr�test_line_too_longszTestFTPClass.test_line_too_longcCsJ|jjd|jjd�g}|jtj|jjd|j�dS)NzSETLONGRETR %drQr�)r�r�r5r�r�r�r�r/)rr�rrr�test_retrlines_too_long	sz$TestFTPClass.test_retrlines_too_longcCs@tjd|jjd�}|jtj|jjd|�dS)N�xrQr�)r�r�r�r5r�r�r�r
)rrrrr�test_storlines_too_longsz$TestFTPClass.test_storlines_too_longN))r"r#r$r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrrrrr#r%r'r+r1r3r4r6r7r9rrrrr��sL


:-
r�zIPv6 not enabledc@sXeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
S)�TestIPv6EnvironmentcCscttdfdtj�|_|jj�tjdt�|_	|j	j
|jj|jj�dS)Nrr[rD)
r|rr'r]r�r�r�r�rJr�r�r�rN)rrrrr�s
zTestIPv6Environment.setUpcCs|jj�|jj�dS)N)r�rr�r�)rrrrr�s
zTestIPv6Environment.tearDowncCs|j|jjtj�dS)N)r�r�r[r'r])rrrr�test_af!szTestIPv6Environment.test_afc
Cs3|jj��|j|jjjd�WdQXdS)NZeprt)r�r$r�r�r�r*)rrrrr%$sz!TestIPv6Environment.test_makeportcCsW|jj�\}}tj||fdt�}|j�|j|jjj	d�dS)NrDZepsv)
r�r&r'rIrJrr�r�r�r*)rr�rNrrrrr')s
z!TestIPv6Environment.test_makepasvcsD�fdd�}�jjd�|��jjd�|�dS)Ncsm�fdd�}g��jjd|��jtdj���tt���jdj��t�dS)Ncs�j|jd��dS)Nr)r/r)r0)r�rrr�1szATestIPv6Environment.test_transfer.<locals>.retr.<locals>.callbackr�r
)r�r�r�r�r5r-)r�)r)r�rr�0s
%z/TestIPv6Environment.test_transfer.<locals>.retrTF)r�r�)rr�r)rr�
test_transfer/s
z!TestIPv6Environment.test_transferN)	r"r#r$r�r�r;r%r'r<rrrrr:sr:zSSL not availablec@s"eZdZdZdd�ZdS)�TestTLS_FTPClassMixinzfRepeat TestFTPClass tests starting the TLS layer for both control
    and data connections first.
    cCstttdf�|_|jj�tjdt�|_|jj|jj	|jj
�|jj�|jj�dS)NrrD)
r�rr�r�r��FTP_TLSrJr�r�r�rN�auth�prot_p)rrrrr�Cs

zTestTLS_FTPClassMixin.setUpN)r"r#r$r�r�rrrrr==sr=c@s�eZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dd�Z
dd�Zdd�Zdd�Z
dS)�TestTLS_FTPClasszSpecific TLS_FTP class tests.cCsZttdf�|_|jj�tjdt�|_|jj|jj	|jj
�dS)NrrD)r�rr�r�r�r>rJr�r�r�rN)rrrrr�Qs
zTestTLS_FTPClass.setUpcCs|jj�|jj�dS)N)r�rr�r�)rrrrr�Ws
zTestTLS_FTPClass.tearDowncCsC|j|jjtj�|jj�|j|jjtj�dS)N)�assertNotIsInstancer�rYr�r�r?r)rrrr�test_control_connection[s
z(TestTLS_FTPClass.test_control_connectioncCs�|jjd��}|j|tj�WdQX|j|jj�d�|jj�|jjd��}|j|tj�WdQX|j|jj�d�|jj	�|jjd��}|j|tj�WdQX|j|jj�d�dS)NrEz226 transfer complete)
r�r2rBr�r�r�Zvoidrespr@rZprot_c)rrYrrr�test_data_connection`s

z%TestTLS_FTPClass.test_data_connectioncCsP|j|jjtj�|jj�|j|jjtj�|jj�dS)N)rBr�rYr�r�r�r)rrrrr�rs
zTestTLS_FTPClass.test_logincCs'|jj�|jt|jj�dS)N)r�r?r�r�)rrrr�test_auth_issued_twicezs
z'TestTLS_FTPClass.test_auth_issued_twicecCsMz6tj|j_|jj�|jt|jj�Wdtj|j_XdS)N)r�r�r�r�r?r�r��PROTOCOL_TLSv1)rrrr�
test_auth_ssl~s

zTestTLS_FTPClass.test_auth_sslc
Csf|jj�tjtj�}|jttjdt	d|�|jttjdt	d|�|jttjdt	dt	d|�tjd|dt
�|_|jj|jj
|jj�|j|jjtj�|jj�|j|jjj|�|j|jjtj�|jj�|jjd��-}|j|j|�|j|tj�WdQXdS)NZkeyfile�contextr�rDrE)r�r�r��
SSLContextrFr�r�r�r>r�rJr�r�r�rNrBrYr�r?ZassertIsrHrr@r2)r�ctxrYrrr�test_context�s$



zTestTLS_FTPClass.test_contextcCsl|jt|jj�|jjdd�|j|jjtj�|jj�|jt|jjj	�dS)NZsecureT)
r�r�r�Zcccr�rrYr�r�r�)rrrr�test_ccc�s

zTestTLS_FTPClass.test_ccccCs�|jj�tjtj�}tj|_d|_|jt	�t
jd|dt�|_|jj
|jj|jj�|jtj��|jj�WdQX|jj
|jj|jj�|jj�|jtj�� |jjd��}WdQXWdQX|jj�|jj
d|jj�|jj�|jj�|jj
d|jj�|jj�|jjd��}WdQXdS)NTrHrDrEZ	localhost)r�r�r�rIrFZ
CERT_REQUIREDZverify_modeZcheck_hostnameZload_verify_locations�CAFILEr�r>rJr�r�r�rNr�ZCertificateErrorr?r@r2)rrJrYrrr�test_check_hostname�s,
	





z$TestTLS_FTPClass.test_check_hostnameN)r"r#r$r�r�r�rCrDr�rErGrKrLrNrrrrrAMsrAc@s|eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�ZdS)�TestTimeoutscCs�tj�|_tjtjtj�|_|jjd�tj	|j�|_
tjd|j�|_
|j
j�|jj�|jj�tjj
|_|j
tj_
dS)Nr��target)rr��evtr'r�r�rYrVrZ	bind_portrNr}r��
server_threadr�r��clearr�r��old_port)rrrrr��s


zTestTimeouts.setUpcCs |jtj_|jj�dS)N)rTr�r�rNrRr5)rrrrr��szTestTimeouts.tearDowncCs�|jjd�|jj�ziy|jj�\}}Wntjk
rPYn5X|jd�|jtj	�|jj�|j
�Wd|jj
�XdS)NrCs
1 Hola mundo
)rYrUrQr�rXr'rDZsendallZshutdownZSHUT_WRr)rrrLrrrr��s


zTestTimeouts.servercCsx|jtj��tjd�ztjt�}Wdtjd�X|j|jj	�d�|j
j�|j�dS)Nr)
�assertIsNoner'�getdefaulttimeout�setdefaulttimeoutr�r�rr�rY�
gettimeoutrQr�r)r�ftprrr�testTimeoutDefault�s

zTestTimeouts.testTimeoutDefaultcCs{|jtj��tjd�ztjtdd�}Wdtjd�X|j|jj��|j	j
�|j�dS)NrrD)rUr'rVrWr�r�rrYrXrQr�r)rrYrrr�testTimeoutNone�s

zTestTimeouts.testTimeoutNonecCsItjtdd�}|j|jj�d�|jj�|j�dS)NrDr)	r�r�rr�rYrXrQr�r)rrYrrr�testTimeoutValues
zTestTimeouts.testTimeoutValuecCsStj�}|jtdd�|j|jj�d�|jj�|j	�dS)NrDr)
r�r�r�rr�rYrXrQr�r)rrYrrr�testTimeoutConnect	s

zTestTimeouts.testTimeoutConnectcCsStjdd�}|jt�|j|jj�d�|jj�|j	�dS)NrDr)
r�r�r�rr�rYrXrQr�r)rrYrrr�testTimeoutDifferentOrders


z&TestTimeouts.testTimeoutDifferentOrdercCsVtj�}d|_|jt�|j|jj�d�|jj	�|j
�dS)Nr)r�r�rDr�rr�rYrXrQr�r)rrYrrr�testTimeoutDirectAccesss	

z$TestTimeouts.testTimeoutDirectAccessN)r"r#r$r�r�r�rZr[r\r]r^r_rrrrrO�s
rOc@seZdZdd�ZdS)�TestNetrcDeprecationcCsotj��]tj��J}tj�|d<tdd�j�|jt��t	j
�WdQXWdQXWdQXdS)N�HOMEz.netrc�w)rZtemp_cwdZEnvironmentVarGuard�os�getcwd�openrZassertWarns�DeprecationWarningr�ZNetrc)r�envrrr�test_deprecation"s
z%TestNetrcDeprecation.test_deprecationN)r"r#r$rhrrrrr` sr`cCsJttttttg}tj�}ztj|�Wdtj	|�XdS)N)
r�rOr`r:r=rArZthreading_setupZrun_unittestZthreading_cleanup)Ztests�thread_inforrr�	test_main+s	rj�__main__)3r�r�r~rr'r�r�rcr*r��ImportErrorZunittestrrZtestrZtest.supportrr�
import_modulerrJr-rsrurxrr	r%rr}r|rr5�dirname�__file__r�rMr�r�r�r�r�ZIPV6_ENABLEDr:r=rArOr`rjr"rrrr�<module>sX

 �1!!d	(�I(t^