Your IP : 216.73.217.129


Current Path : /opt/alt/python36/lib64/python3.6/test/__pycache__/
Upload File :
Current File : //opt/alt/python36/lib64/python3.6/test/__pycache__/test_ftplib.cpython-36.pyc

3

� f���
@s
dZddlZddlZddlZddlZddlZddlZddlZddlZyddl	Z	Wne
k
rhdZ	YnXddlmZm
Z
ddlmZddlmZmZejd�ZdZdd	Zd
Zd
ZdZGdd
�d
ej�ZGdd�dej�ZGdd�dejej�Ze	dk	�rnej 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)Gdd�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,k�re1�dS)-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
cs@eZdZdZdd�Zdd�Zdd�Z�fdd	�Zd
d�Z�Z	S)�DummyDTPHandlerFcCs tjj||�||_d|j_dS)N�)�asynchat�
async_chat�__init__�	baseclass�last_received_data)�self�connr�r�5/opt/alt/python36/lib64/python3.6/test/test_ftplib.pyr
2szDummyDTPHandler.__init__cCs |jj|jd�jd�7_dS)Ni�ascii)rr�recv�decode)rrrr�handle_read7szDummyDTPHandler.handle_readcCs$|js |jjd�|j�d|_dS)Nz226 transfer completeT)�dtp_conn_closedr�push�close)rrrr�handle_close:szDummyDTPHandler.handle_closecsB|jjdk	r|jj}d|j_|s(|j�Stt|�j|jd��dS)Nr)r�	next_data�close_when_done�superr	r�encode)rZwhat)�	__class__rrrCszDummyDTPHandler.pushcCst�dS)N)�	Exception)rrrr�handle_errorKszDummyDTPHandler.handle_error)
�__name__�
__module__�__qualname__rr
rrrr"�
__classcell__rr)r rr	/s	r	c@seZdZeZdd�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�DummyFTPHandlercCsptjj||�|jjtjtjd�|jd�g|_d|_	d|_
d|_d|_d|_
d|_t|_|jd�d|_dS)N�s
r
z220 welcomez252.253.254.255)rrr
�socketZ
setsockoptZ
SOL_SOCKETZSO_OOBINLINEZset_terminator�	in_buffer�dtp�last_received_cmdr�
next_responser�rest�	RETR_DATA�next_retr_datar�fake_pasv_server_ip)rrrrrr
Ss

zDummyFTPHandler.__init__cCs|jj|�dS)N)r*�append)r�datarrr�collect_incoming_datafsz%DummyFTPHandler.collect_incoming_datacCs�dj|j�jd�}g|_|jr0|j|j�d|_|jd�dj�}||_|jd�}|d	krl||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_terminatoris

z DummyFTPHandler.found_terminatorcCst�dS)N)r!)rrrrr"|szDummyFTPHandler.handle_errorcCstjj||jd�d�dS)Nrs
)rrrr)rr3rrrrszDummyFTPHandler.pushcCslttt|jd���}dt|dd��}|dd|d}tj||ftd�}|j||d�|_	|j
d�dS)	N�,z%d.%d.%d.%d���)�timeout)rz&200 active data connection established)�list�map�intr9�tupler)�create_connection�TIMEOUT�dtp_handlerr+r)rr@�addr�ip�port�srrr�cmd_port�szDummyFTPHandler.cmd_portc	Cs�tj���}|j|jj�ddf�|j�|jt�|j�d}|j}|jdd�}|d}|d}|jd|||f�|j	�\}}|j
||d�|_WdQRXdS)Nrr(�.rCrEz$227 entering passive mode (%s,%d,%d))r)r)�bind�getsockname�listen�
settimeoutrMr1�replacer�acceptrNr+)	rr@�sockrQrPZp1Zp2rrOrrr�cmd_pasv�s

zDummyFTPHandler.cmd_pasvcCsT|j|d�dd�\}}}t|�}tj||ftd�}|j||d�|_|jd�dS)Nrr()rG)rz&200 active data connection establishedr7)r9rJr)rLrMrNr+r)rr@�afrPrQrRrrr�cmd_eprt�s
zDummyFTPHandler.cmd_eprtcCs|tjtj��f}|j|jj�ddf�|j�|jt�|j�d}|jd|�|j�\}}|j	||d�|_
WdQRXdS)Nrr(z+229 entering extended passive mode (|||%d|))r)r)�AF_INET6rUrVrWrXrMrrZrNr+)rr@r[rQrrOrrr�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�szDummyFTPHandler.cmd_restcCsN|jd�|jdk	r t|j�}nd}|jj|j|d��|jj�d|_dS)Nz125 retr okr)rr.rJr+r0r)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_mlsdcCsdt|�|_|jd�dS)N�xz125 setlongretr ok)rJr0r)rr@rrr�cmd_setlongretr�szDummyFTPHandler.cmd_setlongretrN)&r#r$r%r	rNr
r4rBr"rrSr\r^r`rarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrtrvrxryr{r}rrrrr'OsD

r'c@sZeZdZeZejfdd�Zdd�Zdd�Z	dd�Z
d	d
�Zdd�ZeZ
d
d�Zdd�ZdS)�DummyFTPServercCsntjj|�tjj|�|j|tj�|j|�|j	d�d|_
tj�|_|jj
�dd�\|_|_d|_dS)NrFF�)r�Threadr
�asyncore�
dispatcherZ
create_socketr)�SOCK_STREAMrUrW�activeZLock�active_lockrV�hostrQ�handler_instance)rZaddressr]rrrr
s


zDummyFTPServer.__init__cCs0|jst�tj�|_tjj|�|jj�dS)N)r��AssertionErrorr�Event�_DummyFTPServer__flagr��start�wait)rrrrr�s
zDummyFTPServer.startcCsTd|_|jj�x2|jrBtjrB|jj�tjddd�|jj�qWtj	dd�dS)NTg�������?r()rG�count)�
ignore_all)
r�r��setr�Z
socket_mapr��acquireZloop�release�	close_all)rrrr�runs

zDummyFTPServer.runcCs|js
t�d|_|j�dS)NF)r�r�r8)rrrr�stop s
zDummyFTPServer.stopcCs|j|�|_dS)N)�handlerr�)rrrOrrr�handle_accepted%szDummyFTPServer.handle_acceptedcCs|j�dS)N)r)rrrr�handle_connect(szDummyFTPServer.handle_connectcCsdS)Nrr)rrrr�writable,szDummyFTPServer.writablecCst�dS)N)r!)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�ZS)�
SSLConnectionz3An asyncore.dispatcher subclass supporting TLS/SSL.FcCsBtj�}|jt�|j|jdddd�}|j�|j|�d|_dS)NFT)Zsuppress_ragged_eofsZserver_sideZdo_handshake_on_connect)	�ssl�
SSLContextZload_cert_chain�CERTFILEZwrap_socketr)Zdel_channelZ
set_socket�_ssl_accepting)r�contextr)rrr�secure_connection>s

zSSLConnection.secure_connectioncCs�y|jj�Wn�tjk
rf}z:|jdtjtjfkr<dS|jdtjkrT|j�S�WYdd}~Xn@t	k
r�}z|jdt
jkr�|j�SWYdd}~XnXd|_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_handshakeIs
zSSLConnection._do_ssl_handshakecs�d|_y|jj�|_Wn^tjk
rT}z |jdtjtjfkrDdSWYdd}~Xn"tk
rt}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_shutdownYs
zSSLConnection._do_ssl_shutdowncs2|jr|j�n|jr |j�ntt|�j�dS)N)r�r�r�r�rr��handle_read_event)r)r rrr�ms


zSSLConnection.handle_read_eventcs2|jr|j�n|jr |j�ntt|�j�dS)N)r�r�r�r�rr��handle_write_event)r)r rrr�us


z SSLConnection.handle_write_eventcs^ytt|�j|�Stjk
rX}z*|jdtjtjtjtj	fkrFdS�WYdd}~XnXdS)Nr)
rr��sendr�r�r�r��SSL_ERROR_ZERO_RETURNr�r�)rr3r�)r rrr�}s
zSSLConnection.sendcsxytt|�j|�Stjk
rr}zD|jdtjtjfkr>dS|jdtjtj	fkr`|j
�dS�WYdd}~XnXdS)Nrr5)rr�rr�r�r�r�r�r�r�r)r�buffer_sizer�)r rrr�s
zSSLConnection.recvcCst�dS)N)r!)rrrrr"�szSSLConnection.handle_errorcs6t|jtj�r$|jjdk	r$|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"rr&rr)r rr�8s
r�c@seZdZdZdd�ZdS)�DummyTLS_DTPHandlerz.A DummyDTPHandler subclass supporting TLS/SSL.cCs"tj|||�|jjr|j�dS)N)r	r
r�secure_data_channelr�)rrrrrrr
�szDummyTLS_DTPHandler.__init__N)r#r$r%r�r
rrrrr��sr�c@s<eZdZdZeZdd�Zdd�Zdd�Zdd	�Z	d
d�Z
dS)
�DummyTLS_FTPHandlerz.A DummyFTPHandler subclass supporting TLS/SSL.cCstj||�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_pbszcCsJ|j�}|dkr"|jd�d|_n$|dkr<|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�rNr
r�r�r�r�rrrrr��sr�c@seZdZeZdS)�DummyTLS_FTPServerN)r#r$r%r�r�rrrrr��sr�c@sLeZdZdd�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(dMdN�Z)dOdP�Z*dQS)R�TestFTPClasscCs@ttdf�|_|jj�tjtd�|_|jj|jj	|jj
�dS)Nr)rG)r~r�serverr��ftplib�FTPrM�client�connectr�rQ)rrrr�setUp�s
zTestFTPClass.setUpcCs*|jj�|jj�d|_tjdd�dS)NT)r�)r�rr�r�r�r�)rrrr�tearDown�s

zTestFTPClass.tearDowncCs$|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_getwelcomecCsL|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�szTestFTPClass.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CsRtjtjtjtjtjttf}x0|D](}y|d��Wq"tjk
rHYq"Xq"WdS)Nz(exception not included in all_errors set)	r��error_replyr�r�r��Errorr��EOFErrorZ
all_errors)r�
exceptionsr|rrr�test_all_errors�s

zTestFTPClass.test_all_errorscCsF|j|jj�|jjd�|j|jj�|jjd�|j|jj�dS)NTF)�
assertTruer�Z
passiveserver�set_pasv�assertFalse)rrrr�
test_set_pasvs
zTestFTPClass.test_set_pasvcCsD|jjd�|jjd�|jtj|jjd�|jtj|jjd�dS)Nzecho 200zecho 299zecho 199zecho 300)r�Zvoidcmdr�r�r�)rrrr�test_voidcmd
szTestFTPClass.test_voidcmdcCs|jj�dS)N)r��login)rrrr�
test_loginszTestFTPClass.test_logincCs|jjd�dS)NZpasswd)r�Zacct)rrrr�	test_acctszTestFTPClass.test_acctcCs2|jjdd�d|jj_|jtj|jjdd�dS)N�a�bZ200)r��renamer�r�r-r�r�r�)rrrr�test_renames
zTestFTPClass.test_renamecCs.|jjd�d|jj_|jtj|jjd�dS)Nr�Z199)r��deleter�r�r-r�r�r�)rrrr�test_deletes
zTestFTPClass.test_deletecCs|jjd�dS)Nr�)r��size)rrrr�	test_size szTestFTPClass.test_sizecCs|jjd�}|j|d�dS)Nz/foo)r�Zmkdr�)r�dirrrr�test_mkd#szTestFTPClass.test_mkdcCs|jjd�dS)Nr�)r�Zrmd)rrrr�test_rmd'szTestFTPClass.test_rmdcCs|jjd�}|j|d�dS)Nz/fooz
250 cwd ok)r��cwdr�)rr�rrr�test_cwd*szTestFTPClass.test_cwdcCs|jj�}|j|d�dS)Nzpwd ok)r��pwdr�)rr�rrr�test_pwd.s
zTestFTPClass.test_pwdcCs&|j|jj�d�|j|jjd�dS)Nz221 quit ok)r�r��quitr[)rrrr�	test_quit2szTestFTPClass.test_quitcCs|jj�dS)N)r��abort)rrrr�
test_abort7szTestFTPClass.test_abortcs4�fdd�}g�|jjd|�|jdj��t�dS)Ncs�j|jd��dS)Nr)r2r)r3)r�rr�callback;sz.TestFTPClass.test_retrbinary.<locals>.callback�retrr
)r��
retrbinaryr�r8r/)rr�r)r�r�test_retrbinary:szTestFTPClass.test_retrbinarycsN�fdd�}x<d	D]4}g�|jjd||d�|jdj��t|d��qWdS)
Ncs�j|jd��dS)Nr)r2r)r3)r�rrr�Bsz3TestFTPClass.test_retrbinary_rest.<locals>.callbackr�
�r�)r.r
)rr�r�)r�r�r�r8r/)rr�r.r)r�r�test_retrbinary_restAs

z!TestFTPClass.test_retrbinary_restcCs2g}|jjd|j�|jdj|�tjdd��dS)Nr�r
z
)r��	retrlinesr2r�r8r/rY)rr�rrr�test_retrlinesIszTestFTPClass.test_retrlinescsftjtjd��}|jjd|�|j|jjj	t�g�|j
d�|jjd|�fdd�d�|j��dS)Nr�storrcs
�jd�S)N)r2)r|)�flagrr�<lambda>Usz.TestFTPClass.test_storbinary.<locals>.<lambda>)r�)�io�BytesIOr/rr��
storbinaryr�r�r�r�seekr�)r�fr)rr�test_storbinaryNs
zTestFTPClass.test_storbinarycCs\tjtjdd�jd��}x>d	D]6}|jd�|jjd||d�|j|j	j
jt|��qWdS)
Nz
�
r��30rr)r.)rr)
rrr/rYrrr�rr�r�r�r.�str)rr�rrrr�test_storbinary_restXs


z!TestFTPClass.test_storbinary_restcs�tjtjdd�jd��}|jjd|�|j|jj	j
t�g�|jd�|jjd|�fdd�d	�|j��tj
tjdd��}tjd
tfdd��|jt|jjd|�WdQRXdS)
Nz
r
rrrzstor foocs
�jd�S)N)r2)r|)rrrrfsz-TestFTPClass.test_storlines.<locals>.<lambda>)r�r
T)�quiet)rrr/rYrr��	storlinesr�r�r�rrr��StringIOrZcheck_warnings�BytesWarningr��	TypeError)rrr)rr�test_storlines_s

zTestFTPClass.test_storlinescCs.|jj�|j|jj�tjd�dd��dS)Nz
r(r7)r�Znlstr�rwr9)rrrr�	test_nlstns
zTestFTPClass.test_nlstcs6g�|jj�fdd��|jdj��tjdd��dS)Ncs
�j|�S)N)r2)r|)�lrrrtsz'TestFTPClass.test_dir.<locals>.<lambda>r
z
)r�r�r�r8rurY)rr)rr�test_dirrszTestFTPClass.test_dircs�t�jj��t�jjdd��t�jjdddgd��t�jj��}xV|D]N\}}�j|t��j|t��j|��jd|��jd|��jd|�qLW�fdd	��d*��fd
d�	}|d�|d
dd�|ddd�|ddd�|ddd�|ddd�|ddd�|ddd�|ddd�|dd d�|d!d"d�|d#d$d�|d%d&d��d'�t�jj��\}}x|D]}�j|j	���qrW�d(��j
tt�jj���d(�x"�jj�D]}�jd)|��q�WdS)+N�/)�pathr��type)r�facts�perm�uniquecs|�jj_dS)N)r�r�r)r3)rrr�set_data�sz(TestFTPClass.test_mlsd.<locals>.set_datacs�|dkrdn|}|dkrdn|}|dkr,dn|}|dkr<dn|}�|�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=pe)rz*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
zna me)r z*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)NNNN)
rHr�r"�assertIsInstancer
�dictr�ZassertInr!�islowerr��
StopIteration�fail)rZlsr rr$r#r|r)rrr�	test_mlsdwsF


zTestFTPClass.test_mlsdc
Cs,|jj��|j|jjjd�WdQRXdS)NrQ)r��makeportr�r�r�r,)rrrr�
test_makeport�szTestFTPClass.test_makeportcCs>|jj�\}}tj||ftd�}|j�|j|jjj	d�dS)N)rGZpasv)
r��makepasvr)rLrMrr�r�r�r,)rr�rQrrrr�
test_makepasv�szTestFTPClass.test_makepasvcCsNd|j_|jj�\}}|j||jjj�tj|jj	j
�d|ftd�j�dS)z/Test the opt-in to the old vulnerable behavior.Tr)rGN)
r��trust_server_pasv_ipv4_addressr-r�r�r�r1r)rLr[ZgetpeernamerMr)rZbad_hostrQrrr�*test_makepasv_issue43285_security_disabled�sz7TestFTPClass.test_makepasv_issue43285_security_disabledcCsH|j|jj�|jj�\}}|j||jjj�tj	||ft
d�j�dS)N)rG)r�r�r/r-ZassertNotEqualr�r�r1r)rLrMr)rZtrusted_hostrQrrr�1test_makepasv_issue43285_security_enabled_default�s
z>TestFTPClass.test_makepasv_issue43285_security_enabled_defaultcs��jj��fdd�}tjtd��6�_�jj�jj�jj��jj	d��j
|��WdQRX�j�jjj
d��j|��tjtd��4�_�jj�jj�jj��jj	d��jj�WdQRX�j�jjj
d��j|��yJtjtd��4�_�jj�jj�jj��jj	d�d�jj_WdQRXWn6tjk
�r`}z�jt|�d�WYdd}~XnX�jd�tjd��j�jjj
d��j|��dS)	Ncs>�jjdkrdSy�jjd�Wnttfk
r8dSXdS)NF�noopT)r�r[r�r�r�r)rrr�is_client_connected�sz=TestFTPClass.test_with_statement.<locals>.is_client_connected)rGr2r�z550 error on quitzException not raisedg�������?)r�r�r�r�rMr�r�r�rQr�r�r�r�r,r�r-r�r
r)�timeZsleep)rr3r�r)rr�test_with_statement�s2

"

z TestFTPClass.test_with_statementcCs�|jj�tj�}yD|jj|jj|jjt|fd�|j	|jj
j�d|�|jj�Wn>tk
r�}z"|j
t
jkr�|jd|��WYdd}~XnXdS)N)�source_addressr(zcouldn't bind to port %d)r�r�r�find_unused_portr�r�r�rQrr�r[rVr�r��
EADDRINUSE�skipTest)rrQ�errr�test_source_address�s
z TestFTPClass.test_source_addresscCs�tj�}t|f|j_y0|jjd��}|j|j�d|�WdQRXWn>tk
r�}z"|j	t	j
krp|jd|��WYdd}~XnXdS)NrHr(zcouldn't bind to port %d)rr7rr�r6�transfercmdr�rVr�r�r8r9)rrQr[r:rrr�&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��parse257r�r�)rrrr�
test_parse257szTestFTPClass.test_parse257cCs$|jtj|jjd|jjd�dS)Nr|r)r�r�r�r�r��maxline)rrrr�test_line_too_long#szTestFTPClass.test_line_too_longcCs8|jjd|jjd�g}|jtj|jjd|j�dS)NzSETLONGRETR %drr�)r�r�r@r�r�r�r�r2)rr�rrr�test_retrlines_too_long'sz$TestFTPClass.test_retrlines_too_longcCs0tjd|jjd�}|jtj|jjd|�dS)N�xrr)rrr�r@r�r�r�r)rrrrr�test_storlines_too_long-sz$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�rr	rrrrr*r,r.r0r1r5r;r=r?rArBrDrrrrr��sP


:	-
r�zIPv6 not enabledc@s<eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
S)�TestIPv6EnvironmentcCsFttdftjd�|_|jj�tjtd�|_	|j	j
|jj|jj�dS)Nr)r])rG)
r~rr)r_r�r�r�r�rMr�r�r�rQ)rrrrr�5s
zTestIPv6Environment.setUpcCs*|jj�|jj�d|_tjdd�dS)NT)r�)r�rr�r�r�r�)rrrrr�;s

zTestIPv6Environment.tearDowncCs|j|jjtj�dS)N)r�r�r]r)r_)rrrr�test_afBszTestIPv6Environment.test_afc
Cs,|jj��|j|jjjd�WdQRXdS)NZeprt)r�r+r�r�r�r,)rrrrr,Esz!TestIPv6Environment.test_makeportcCs>|jj�\}}tj||ftd�}|j�|j|jjj	d�dS)N)rGZepsv)
r�r-r)rLrMrr�r�r�r,)rr�rQrrrrr.Jsz!TestIPv6Environment.test_makepasvcs4�fdd�}�jjd�|��jjd�|�dS)NcsN�fdd�}g��jjd|��jtdj���tt���jdj��t�dS)Ncs�j|jd��dS)Nr)r2r)r3)r�rrr�RszATestIPv6Environment.test_transfer.<locals>.retr.<locals>.callbackr�r
)r�r�r�r�r8r/)r�)r)r�rr�Qs
z/TestIPv6Environment.test_transfer.<locals>.retrTF)r�r�)rr�r)rr�
test_transferPs
z!TestIPv6Environment.test_transferN)	r#r$r%r�r�rFr,r.rGrrrrrE2srEzSSL not availablec@seZdZdZdd�ZdS)�TestTLS_FTPClassMixinzfRepeat TestFTPClass tests starting the TLS layer for both control
    and data connections first.
    cCsTttdf�|_|jj�tjtd�|_|jj|jj	|jj
�|jj�|jj�dS)Nr)rG)
r�rr�r�r��FTP_TLSrMr�r�r�rQ�auth�prot_p)rrrrr�ds

zTestTLS_FTPClassMixin.setUpN)r#r$r%r�r�rrrrrH^srHc@s`eZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dd�Z
dd�Zdd�Zdd�Z
dS)�TestTLS_FTPClasszSpecific TLS_FTP class tests.cCs@ttdf�|_|jj�tjtd�|_|jj|jj	|jj
�dS)Nr)rG)r�rr�r�r�rIrMr�r�r�rQ)rrrrr�rs
zTestTLS_FTPClass.setUpcCs*|jj�|jj�d|_tjdd�dS)NT)r�)r�rr�r�r�r�)rrrrr�xs

zTestTLS_FTPClass.tearDowncCs2|j|jjtj�|jj�|j|jjtj�dS)N)�assertNotIsInstancer�r[r�r�rJr%)rrrr�test_control_connections
z(TestTLS_FTPClass.test_control_connectioncCs|jjd��,}|j|tj�|j|jd�tjd��WdQRX|j|jj	�d�|jj
�|jjd��,}|j|tj�|j|jd�tjd��WdQRX|j|jj	�d�|jj�|jjd��,}|j|tj�|j|jd�tjd��WdQRX|j|jj	�d�dS)NrHirz226 transfer complete)
r�r<rMr�r�r�rrurZvoidresprKr%Zprot_c)rr[rrr�test_data_connection�s"
"
"z%TestTLS_FTPClass.test_data_connectioncCs<|j|jjtj�|jj�|j|jjtj�|jj�dS)N)rMr�r[r�r�r�r%)rrrrr��s
zTestTLS_FTPClass.test_logincCs|jj�|jt|jj�dS)N)r�rJr�r�)rrrr�test_auth_issued_twice�s
z'TestTLS_FTPClass.test_auth_issued_twicecCs:z(tj|j_|jj�|jt|jj�Wdtj|j_XdS)N)r�ZPROTOCOL_SSLv23r�Zssl_versionrJr�r��PROTOCOL_TLS)rrrr�
test_auth_ssl�s


zTestTLS_FTPClass.test_auth_sslc
Cs�|jj�tjtj�}|jttjt	|d�|jttjt	|d�|jttjt	t	|d�tj|t
d�|_|jj|jj
|jj�|j|jjtj�|jj�|j|jjj|�|j|jjtj�|jj�|jjd��"}|j|j|�|j|tj�WdQRXdS)N)�keyfiler�)�certfiler�)rTrSr�)r�rGrH)r�r�r�r�rQr�r�r�rIr�rMr�r�r�rQrMr[r�rJZassertIsr�r%rKr<)r�ctxr[rrr�test_context�s$



zTestTLS_FTPClass.test_contextcCsP|jt|jj�|jjdd�|j|jjtj�|jj�|jt|jjj	�dS)NT)Zsecure)
r�r�r�Zcccr�r%r[r�r�r�)rrrr�test_ccc�s

zTestTLS_FTPClass.test_ccccCs.|jj�tjtj�}tj|_d|_|jt	�t
j|td�|_|jj
|jj|jj�|jtj��|jj�WdQRX|jj
|jj|jj�|jj�|jtj��|jjd��}WdQRXWdQRX|jj�|jj
d|jj�|jj�|jj�|jj
d|jj�|jj�|jjd��}WdQRXdS)NT)r�rGrHZ	localhost)r�r�r�r�rQZ
CERT_REQUIREDZverify_modeZcheck_hostnameZload_verify_locations�CAFILEr�rIrMr�r�r�rQr�ZCertificateErrorrJrKr<)rrUr[rrr�test_check_hostname�s,






z$TestTLS_FTPClass.test_check_hostnameN)r#r$r%r�r�r�rNrOr�rPrRrVrWrYrrrrrLnsrLc@sTeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�ZdS)�TestTimeoutscCs|tj�|_tjtjtj�|_|jjd�tj	|j�|_
tj|jd�|_
|j
j�|jj�|jj�tjj
|_|j
tj_
dS)Nr�)�target)rr��evtr)r�r�r[rXrZ	bind_portrQr�r��
server_threadr�r��clearr�r��old_port)rrrrr��s




zTestTimeouts.setUpcCs|jtj_|jj�d|_dS)N)r_r�r�rQr]r8)rrrrr��s

zTestTimeouts.tearDowncCs||jj�|jj�zVy|jj�\}}Wntjk
r>Yn*X|jd�|jtj	�|jj�|j
�Wd|jj
�XdS)Ns
1 Hola mundo
)r[rWr\r�rZr)rGZsendallZshutdownZSHUT_WRr)rrrOrrrr�s



zTestTimeouts.servercCs\|jtj��tjd�ztjt�}Wdtjd�X|j|jj	�d�|j
j�|j�dS)Nr)
�assertIsNoner)�getdefaulttimeout�setdefaulttimeoutr�r�rr�r[�
gettimeoutr\r�r)r�ftprrr�testTimeoutDefaults

zTestTimeouts.testTimeoutDefaultcCs^|jtj��tjd�ztjtdd�}Wdtjd�X|j|jj��|j	j
�|j�dS)Nr)rG)r`r)rarbr�r�rr[rcr\r�r)rrdrrr�testTimeoutNone!s

zTestTimeouts.testTimeoutNonecCs6tjtdd�}|j|jj�d�|jj�|j�dS)Nr)rG)	r�r�rr�r[rcr\r�r)rrdrrr�testTimeoutValue-s
zTestTimeouts.testTimeoutValuecCs>tj�}|jtdd�|j|jj�d�|jj�|j	�dS)Nr)rG)
r�r�r�rr�r[rcr\r�r)rrdrrr�testTimeoutConnect4s

zTestTimeouts.testTimeoutConnectcCs>tjdd�}|jt�|j|jj�d�|jj�|j	�dS)Nr)rG)
r�r�r�rr�r[rcr\r�r)rrdrrr�testTimeoutDifferentOrder;s


z&TestTimeouts.testTimeoutDifferentOrdercCs@tj�}d|_|jt�|j|jj�d�|jj	�|j
�dS)Nr)r�r�rGr�rr�r[rcr\r�r)rrdrrr�testTimeoutDirectAccessBs

z$TestTimeouts.testTimeoutDirectAccessN)r#r$r%r�r�r�rerfrgrhrirjrrrrrZ�s
rZc@seZdZdd�ZdS)�MiscTestCasec
Cs2ddddddddd	d
ddd
h
}tj|t|d�dS)NZMSG_OOBZFTP_PORTZMAXLINEZCRLFZB_CRLFr�Zparse150Zparse227Zparse229r>Z
print_lineZftpcp�test)�	blacklist)rZcheck__all__r�)rrmrrr�test__all__Ls


zMiscTestCase.test__all__N)r#r$r%rnrrrrrkKsrkcCs8ttttttg}tj�}ztj|�Wdtj	|�XdS)N)
r�rZrErHrLrkrZthreading_setupZrun_unittestZthreading_cleanup)Ztests�thread_inforrr�	test_mainSsrp�__main__)3r�r�r�rr)rr��osr4r��ImportErrorZunittestrrrlrZtest.supportrr�
import_modulerrMr/rurwrzrr	r'r�r�r~rr8�dirname�__file__r�rXr�r�r�r�r�ZIPV6_ENABLEDrErHrLrZrkrpr#rrrr�<module>s\

 41
f	(a+|`