Your IP : 216.73.216.213


Current Path : /proc/242857/root/opt/alt/python34/lib64/python3.4/test/__pycache__/
Upload File :
Current File : //proc/242857/root/opt/alt/python34/lib64/python3.4/test/__pycache__/test_smtplib.cpython-34.pyo

�
g f��
@s�ddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddl
Z
ddlmZmZyddlZWnek
r�dZYnXejZe	jdkrdd�Zeej_ndd�ZGdd	�d	e
j�Zd
d�ZdZd
Ze
jed�Gdd�de
j��ZGdd�de
j�Ze
jed�Gdd�de
j��Z e
jed�Gdd�de
j��Z!idd6dd6dd6Z"ddfZ#dZ$idd 6d!d"6d#d$6Z%d%Z&iddgd&6dgd'6Z'Gd(d)�d)ej�Z(Gd*d+�d+ej)�Z*e
jed�Gd,d-�d-e
j��Z+ej,dd.d/��Z-e.d0kr�e-�ndS)1�N)�support�mock_socket�darwincCsdS)N�)�selfrr�6/opt/alt/python34/lib64/python3.4/test/test_smtplib.py�handle_exptsrc
Cs�|jd�|j�z�y|j�\}}Wntjk
rGYn}Xd}xi|r�|dkr�tjg|gg�\}}}|r�|j|�}	||	d�}n|d8}qQW|j�Wd|j�|j�XdS)N�i�r�)Zlisten�setZaccept�socket�timeout�select�send�close)
�evtZbuf�serv�conn�addr�n�r�w�eZsentrrr�server s 

!
rc@s�eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�Zdd�ZdS)�GeneralTestscCstt_d|_dS)N�)r�smtplibr�port)rrrr�setUp8s	zGeneralTests.setUpcCs
tt_dS)N)rr)rrrr�tearDown<szGeneralTests.tearDowncCs)d}d}|j|tj|��dS)Nzabc
.jkl
foo
..bluezabc
..jkl
foo
...blue)�assertEqualrZ	quotedata)rZteststr�expectedrrr�
testQuoteDataAszGeneralTests.testQuoteDatacCs0tjd�tjt|j�}|j�dS)Ns220 Hola mundo)r�
reply_withr�SMTP�HOSTrr)r�smtprrr�
testBasic1Fs
zGeneralTests.testBasic1cCsItjd�tjt|jdd�}|j|jd�|j�dS)Ns220 Hola mundo�source_address�	127.0.0.1�M)r)r*)r)r*)	rr#rr$r%rr r(r)rr&rrr�testSourceAddressLs

	zGeneralTests.testSourceAddresscCs7tjd�tjdt|jf�}|j�dS)Ns220 Hola mundoz%s:%s)rr#rr$r%rr)rr&rrr�
testBasic2Ts
zGeneralTests.testBasic2cCsItjd�tjt|jdd�}|j|jd�|j�dS)Ns220 Hola mundo�local_hostnameZtesthost)	rr#rr$r%rr r-r)rr&rrr�testLocalHostNameZs
zGeneralTests.testLocalHostNamecCs�tjd�|jtj��tjd�|jtj�d�ztjt|j	�}Wdtjd�X|j|j
j�d�|j�dS)Ns220 Hola mundo�)
rr#�assertIsNone�getdefaulttimeout�setdefaulttimeoutr rr$r%r�sock�
gettimeoutr)rr&rrr�testTimeoutDefaultas

zGeneralTests.testTimeoutDefaultcCs�tjd�|jtj��tjd�ztjt|j	dd�}Wdtjd�X|j|j
j��|j�dS)Ns220 Hola mundor/r
)
rr#r0rr1r2rr$r%rr3r4r)rr&rrr�testTimeoutNonems

zGeneralTests.testTimeoutNonecCsOtjd�tjt|jdd�}|j|jj�d�|j	�dS)Ns220 Hola mundor
r/)
rr#rr$r%rr r3r4r)rr&rrr�testTimeoutValuexs
zGeneralTests.testTimeoutValueN)
�__name__�
__module__�__qualname__rrr"r'r+r,r.r5r6r7rrrrr6srcCs�|j�z�y~ttd�r+tj}n	tj}d}xMtjr�|dkr�|dtj�|j�r||j�Pn|d8}q=WWnt	j
k
r�YnXWd|j�s�tjd�|j�ntj
�|j�XdS)N�polli�rg{�G�z�?r
g�?)r�hasattrr�asyncoreZpoll2r;Z
socket_mapZis_setrrr
�time�sleepZ	close_all)r�serv_evt�
client_evtZpoll_funrrrr�debugging_server�s&
	
	


rBz&---------- MESSAGE FOLLOWS ----------
z&------------ END MESSAGE ------------
z!Threading required for this test.c@seZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�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-�ZdS).�DebuggingServerTestsNcCs
tj|_tjt_tj|_tj�|_	|j	t_t
j�|_t
j�|_
tj|_tj�t_tjtdfd�|_|jjj�d|_|j|j|j
f}t
jdtd|�|_|jj�|jj�|jj�dS)Nr�nowherer
�target�args���)rDrG)r�getfqdn�real_getfqdnr�sys�stdout�
old_stdout�io�StringIO�output�	threading�Eventr@rA�smtpd�DEBUGSTREAM�old_DEBUGSTREAMZDebuggingServerr%r�getsocknamer�ThreadrB�thread�start�wait�clear)r�	serv_argsrrrr�s 

zDebuggingServerTests.setUpcCs\|jt_|jj�|jj�|jj�|j	t
_tj
j�|jt_
dS)N)rIrrHrArr@rYrW�joinrLrJrKrRrSrrT)rrrrr�s



zDebuggingServerTests.tearDowncCs/tjt|jdddd�}|j�dS)Nr-�	localhostr
�)rr$r%r�quit)rr&rrr�	testBasic�s!zDebuggingServerTests.testBasiccCs�tj�}ygtjt|jdddddd|f�}|j|jd|f�|j|jd�|j	�WnNt
k
r�}z.|jtjkr�|j
d|�n�WYdd}~XnXdS)Nr-r]r
r^r(z	127.0.0.1zcouldn't bind to port %d)rZfind_unused_portrr$r%rr r(r-r_�OSError�errnoZ
EADDRINUSEZskipTest)rrr&rrrrr+�sz&DebuggingServerTests.testSourceAddresscCsKtjt|jdddd�}d}|j|j�|�|j�dS)Nr-r]r
r^��OK)rcrd)rr$r%rr �noopr_)rr&r!rrr�testNOOP�s!zDebuggingServerTests.testNOOPcCsKtjt|jdddd�}d}|j|j�|�|j�dS)Nr-r]r
r^rc�OK)rcrg)rr$r%rr Zrsetr_)rr&r!rrr�testRSET�s!zDebuggingServerTests.testRSETcCsKtjt|jdddd�}d}|j|j�|�|j�dS)Nr-r]r
r^rc�
SIZE 33554432
HELP)rcri)rr$r%rr �ehlor_)rr&r!rrr�testELHO�s!zDebuggingServerTests.testELHOcCsXtjt|jdddd�}d}|jd�|j|j�|�|j�dS)	Nr-r]r
r^��EXPN not implementedZEXPN)rlrm)rr$r%rZputcmdr Zgetreplyr_)rr&r!rrr�testEXPNNotImplemented�s
!
z+DebuggingServerTests.testEXPNNotImplementedcCsqtjt|jdddd�}dddf}|j|jd�|�|j|jd�|�|j�dS)	Nr-r]r
r^�s*Cannot VRFY user, but will accept message sand attempt deliveryznobody@nowhere.com)rr$r%rr �vrfyZverifyr_)rr&r!rrr�testVRFYs!
zDebuggingServerTests.testVRFYcCsUtjt|jdddd�}|j�d}|j|j�|�|j�dS)Nr-r]r
r^��Duplicate HELO/EHLO)rrrs)rr$r%rZhelor r_)rr&r!rrr�testSecondHELO	s
!
z#DebuggingServerTests.testSecondHELOcCsItjt|jdddd�}|j|j�dd�|j�dS)Nr-r]r
r^s#Supported commands: EHLO HELO MAIL sRCPT DATA RSET NOOP QUIT VRFY)rr$r%rr �helpr_)rr&rrr�testHELPs!zDebuggingServerTests.testHELPcCs�d}tjt|jdddd�}|jdd|�tjd�|j�|jj	�|j
j�|jj
�d	t|tf}|j|jj�|�dS)
NzA test messager-r]r
r^�John�Sallyg{�G�z�?z%s%s
%s)rr$r%r�sendmailr>r?r_rArr@rYrO�flush�	MSG_BEGIN�MSG_ENDr �getvalue)r�mr&�mexpectrrr�testSends!




zDebuggingServerTests.testSendcCs�d}tjt|jdddd�}|jdd|�tjd�|j�|jj	�|j
j�|jj
�d	t|jd
�tf}|j|jj�|�dS)NsA test messager-r]r
r^rwrxg{�G�z�?z%s%s
%s�ascii)rr$r%rryr>r?r_rArr@rYrOrzr{�decoder|r r})rr~r&rrrr�testSendBinary)s!




z#DebuggingServerTests.testSendBinarycCs�d}tjt|jdddd�}|jdd|�tjd�|j�|jj	�|j
j�|jj
�d	t|tf}|j|jj�|�dS)
Nz.A test
.mes.sage.r-r]r
r^rwrxg{�G�z�?z%s%s
%s)rr$r%rryr>r?r_rArr@rYrOrzr{r|r r})rr~r&rrrr�testSendNeedingDotQuote7s!




z,DebuggingServerTests.testSendNeedingDotQuotecCs�d}tjt|jdddd�}|jdd|�tjd�|j�|jj	�|j
j�|jj
�d	t|tf}|j|jj�|�tjj�}tjd
tj�}|j||�dS)NzA test messager-r]r
r^z<>rxg{�G�z�?z%s%s
%sz^sender: <>$)rr$r%rryr>r?r_rArr@rYrOrzr{r|r r}rRrS�re�compile�	MULTILINE�assertRegex)rr~r&r�debugout�senderrrr�testSendNullSenderFs!




z'DebuggingServerTests.testSendNullSendercCs�tjjjd�}tjt|jdddd�}|j|dddd	�t	j
d
�|j�|jj
�|jj�|jj�tjd�|d<dt|j�tf}|j|jj�|�dS)
NzA test messager-r]r
r^�	from_addrrw�to_addrsrxg{�G�z�?zX-Peerz%s%s
%s)�email�mime�text�MIMETextrr$r%r�send_messager>r?r_rArr@rYrOrzr�
gethostbynamer{�	as_stringr|r r})rr~r&rrrr�testSendMessageWs!




z$DebuggingServerTests.testSendMessagecCs�tjjjd�}d|d<d|d<d|d<d|d	<tjt|jd
ddd
�}|j|�t	j
d�|j�|j|d	d�|j
j�|jj�|jj�tjd�|d<|d	=dt|j�tf}|j|jj�|�tjj�}tjdtj�}|j||�x<dD]4}tjdj|�tj�}|j||�qDWdS)NzA test messagezfoo@bar.com�Fromrw�TozSally, Fred�CCz?John Root <root@localhost>, "Dinsdale" <warped@silly.walks.com>�Bccr-r]r
r^g{�G�z�?zX-Peerz%s%s
%sz^sender: foo@bar.com$rx�Fred�root@localhost�warped@silly.walks.comz^recips: .*'{}'.*$)zJohnzSallyr�r�r�) r�r�r�r�rr$r%rr�r>r?r_r rArr@rYrOrzrr�r{r�r|r}rRrSr�r�r�r��format)rr~r&rr�r�r�to_addrrrr�testSendMessageWithAddressesgs2



!






z1DebuggingServerTests.testSendMessageWithAddressescCsQtjjjd�}d|d<d|d<tjt|jdddd	�}|j|�t	j
d
�|j�|jj
�|jj�|jj�tjd�|d<dt|j�tf}|j|jj�|�tjj�}tjd
tj�}|j||�x<dD]4}tjdj|�tj�}|j||�qWdS)NzA test messagezfoo@bar.comr�zJohn, Dinsdaler�r-r]r
r^g{�G�z�?zX-Peerz%s%s
%sz^sender: foo@bar.com$rw�Dinsdalez^recips: .*'{}'.*$)zJohnr�) r�r�r�r�rr$r%rr�r>r?r_rArr@rYrOrzrr�r{r�r|r r}rRrSr�r�r�r�r�)rr~r&rr�r�rr�rrr� testSendMessageWithSomeAddresses�s(

!






z5DebuggingServerTests.testSendMessageWithSomeAddressesc	Cs�tjjjd�}d|d<d|d<tjt|jdddd	�}|j|d
ddd
�t	j
d�|j�|jj
�|jj�|jj�tjd�|d<dt|j�tf}|j|jj�|�tjj�}tjdtj�}|j||�x<dD]4}tjdj|�tj�}|j ||�q!Wtjdtj�}|j||�dS)NzA test messagezfoo@bar.comr�zJohn, Dinsdaler�r-r]r
r^r�zjoe@example.comr�zfoo@example.netg{�G�z�?zX-Peerz%s%s
%sz^sender: joe@example.com$rwr�z^recips: .*'{}'.*$z^recips: .*'foo@example.net'.*$)zJohnzDinsdale)!r�r�r�r�rr$r%rr�r>r?r_rArr@rYrOrzrr�r{r�r|r r}rRrSr�r�r�r�r�ZassertNotRegex)	rr~r&rr�r�rr�Zreciprrr�%testSendMessageWithSpecifiedAddresses�s,

!





z:DebuggingServerTests.testSendMessageWithSpecifiedAddressescCs[tjjjd�}d|d<d|d<d|d<tjt|jdd	d
d�}|j|�t	j
d�|j�|jj
�|jj�|jj�tjd	�|d
<dt|j�tf}|j|jj�|�tjj�}tjdtj�}|j||�x<dD]4}tjdj|�tj�}|j||�qWdS)NzA test messagezBernard, Biancar�z#the_rescuers@Rescue-Aid-Society.comZSenderzJohn, Dinsdaler�r-r]r
r^g{�G�z�?zX-Peerz%s%s
%sz-^sender: the_rescuers@Rescue-Aid-Society.com$rwr�z^recips: .*'{}'.*$)zJohnzDinsdale) r�r�r�r�rr$r%rr�r>r?r_rArr@rYrOrzrr�r{r�r|r r}rRrSr�r�r�r�r�)rr~r&rr�r�rr�rrr�testSendMessageWithMultipleFrom�s*


!






z4DebuggingServerTests.testSendMessageWithMultipleFromcCs�tjjjd�}d|d<d|d<d|d<d|d	<d
|d<d|d
<d|d<d|d<tjt|jdddd�}|j|�t	j
d�|j�|jj
�|jj�|jj�|d	=|d=tjd�|d<dt|j�tf}|j|jj�|�tjj�}tjdtj�}|j||�x<dD]4}tjdj|�tj�}|j||�q_WdS)NzA test messagezfoo@bar.comr�rwr�zSally, Fredr�z?John Root <root@localhost>, "Dinsdale" <warped@silly.walks.com>r�zThu, 1 Jan 1970 17:42:00 +0000zResent-Datezholy@grail.netzResent-Fromz&Martha <my_mom@great.cooker.com>, Jeffz	Resent-To�doe@losthope.netz
Resent-Bccr-r]r
r^g{�G�z�?zX-Peerz%s%s
%sz^sender: holy@grail.net$�my_mom@great.cooker.com�Jeffz^recips: .*'{}'.*$)r�r�r�) r�r�r�r�rr$r%rr�r>r?r_rArr@rYrOrzrr�r{r�r|r r}rRrSr�r�r�r�r�)rr~r&rr�r�rr�rrr�testSendMessageResent�s8







!






z*DebuggingServerTests.testSendMessageResentc	Cs�tjjjd�}d|d<d|d<d|d<d|d	<d
|d<d|d
<d|d<d|d<d|d<d|d<d|d
<tjt|jdddd�}|jt	��|j
|�WdQX|j�dS)NzA test messagezfoo@bar.comr�rwr�zSally, Fredr�z?John Root <root@localhost>, "Dinsdale" <warped@silly.walks.com>r�zThu, 1 Jan 1970 17:42:00 +0000zResent-Datezholy@grail.netzResent-Fromz&Martha <my_mom@great.cooker.com>, Jeffz	Resent-Tozdoe@losthope.netz
Resent-BcczThu, 2 Jan 1970 17:42:00 +0000r-r]r
r^)r�r�r�r�rr$r%r�assertRaises�
ValueErrorr�r)rr~r&rrr�#testSendMessageMultipleResentRaises�s 










!z8DebuggingServerTests.testSendMessageMultipleResentRaises)r8r9r:ZmaxDiffrrr`r+rfrhrkrnrqrtrvr�r�r�r�r�r�r�r�r�r�r�rrrrrC�s.
	!"rCc@s(eZdZdd�Zdd�ZdS)�NonConnectingTestscCs?tj�}|jtj|j�|jtj|jd�dS)Nztest msg)rr$r��SMTPServerDisconnectedrjr)rr&rrr�testNotConnectedsz#NonConnectingTests.testNotConnectedcCs3|jttjdd�|jttjd�dS)Nr]Zboguszlocalhost:bogus)r�rarr$)rrrr�testNonnumericPorts
z%NonConnectingTests.testNonnumericPortN)r8r9r:r�r�rrrrr�
s
r�c@s4eZdZdd�Zdd�Zdd�ZdS)�BadHELOServerTestscCsJtt_tjd�tj|_tj�|_	|j	t_d|_
dS)Ns199 no hello for you!r)rrrr#rJrKrLrMrNrOr)rrrrr%s	
zBadHELOServerTests.setUpcCstt_|jt_dS)N)rrrLrJrK)rrrrr-s	zBadHELOServerTests.tearDowncCs)|jtjtjt|jdd�dS)Nr]r^)r�rZSMTPConnectErrorr$r%r)rrrr�testFailingHELO1sz"BadHELOServerTests.testFailingHELON)r8r9r:rrr�rrrrr�"sr�c@sMeZdZddejddZdd�Zdd�Zd	d
�ZdS)�TooLongLineTestss250 OK�.�s
cCs�tj|_tj�|_|jt_tj�|_t	j	t	j
t	j�|_|jj
d�tj|j�|_|j|j|jf}tjdtd|�j�|jj�|jj�dS)N�rErF)rJrKrLrMrNrOrPrQrrZAF_INETZSOCK_STREAMr3Z
settimeoutrZ	bind_portr�respdatarVrrXrYrZ)rZservargsrrrr:s
zTooLongLineTests.setUpcCs|jj�|jt_dS)N)rrYrLrJrK)rrrrrHs
zTooLongLineTests.tearDowncCs)|jtjtjt|jdd�dS)Nr]r^)r�r�SMTPResponseExceptionr$r%r)rrrr�testLineTooLongLsz TooLongLineTests.testLineTooLongN)	r8r9r:rZ_MAXLINEr�rrr�rrrrr�6sr�zJohn AzMr.A@somewhere.comzSally BzMs.B@xn--fo-fka.comzRuth CzMrs.C@somewhereesle.comZsomepasswordz<PENCeUxFREJoU0NnbmhNWitOMjNGNndAZWx3b29kLmlubm9zb2Z0LmNvbT4=ZTXIuQUBzb21ld2hlcmUuY29t�loginz,AE1yLkFAc29tZXdoZXJlLmNvbQBzb21lcGFzc3dvcmQ=�plainZDTXIUQUBZB21LD2HLCMUUY29TIDG4OWQ0MJKWZGQ4ODNMNDA4NTGXMDRLZWMYZJDMODG1zcram-md5ZC29TZXBHC3N3B3JKzlist-1zlist-2cs�eZdZdZdZdZdZdZdZdZ	�fdd�Z
dd�Zdd�Zd	d
�Z
dd�Z�fd
d�Z�fdd�Z�fdd�Z�fdd�Z�fdd�Zdd�Z�S)�SimSMTPChannelNrcs<djdd�|D��|_tt|�j||�dS)N�cSsg|]}dj|��qS)z	250-{0}
)r�)�.0�xrrr�
<listcomp>rs	z+SimSMTPChannel.__init__.<locals>.<listcomp>)r\�_extrafeatures�superr��__init__)rZextra_featuresrF�kw)�	__class__rrr�pszSimSMTPChannel.__init__cCs:d}||jd}|j|�||_d|_dS)NzH250-testhost
250-EXPN
250-SIZE 20000000
250-STARTTLS
250-DELIVERBY
z250 HELPT)r��pushZ
seen_greetingZ
extended_smtp)r�argZresprrr�	smtp_EHLOus

	zSimSMTPChannel.smtp_EHLOcCsH|tkr3|jdt|tj|�f�n|jd|�dS)Nz	250 %s %sz550 No such user: %s)�	sim_usersr�r�	quoteaddr)rr�rrr�	smtp_VRFY�s'zSimSMTPChannel.smtp_VRFYcCs�|j�}|tkr�t|}x�t|�D]j\}}tj|�}|t|�dkr~|jdt||f�q/|jdt||f�q/Wn
|jd�dS)Nr
z	250-%s %sz	250 %s %sz550 No access for you!)�lower�	sim_lists�	enumeraterr��lenr�r�)rr�Z	list_nameZ	user_listrZ
user_emailZquoted_addrrrr�	smtp_EXPN�s
"zSimSMTPChannel.smtp_EXPNcCs�|j�j�dkr2|jdjt��dS|j�\}}|j�}|tkrm|jd�dS|dkr�|tdkr�|jd�n9|dkr�|tdkr�|jd�n
|jd�dS)	Nzcram-md5z334 {}z504 auth type unimplementedr�z235 plain auth okr�z
334 Password:z550 No access for you!)�stripr�r�r��sim_cram_md5_challenge�split�sim_auth_credentials)rr�ZmechZauthrrr�	smtp_AUTH�s
zSimSMTPChannel.smtp_AUTHcsF|jdkr(tt|�j|�n|j|j�|j�dS)N)�
quit_responser�r��	smtp_QUITr��close_when_done)rr�)r�rrr��szSimSMTPChannel.smtp_QUITcsL|jdkr"t�j|�n&|j|j�|jrH|j�ndS)N)�
mail_responser��	smtp_MAILr��
disconnectr�)rr�)r�rrr��s
	zSimSMTPChannel.smtp_MAILcsQ|jdkr#t�j|�dS|jd7_|j|j|jd�dS)Nr
)�
rcpt_responser��	smtp_RCPT�
rcpt_countr�)rr�)r�rrr��s
zSimSMTPChannel.smtp_RCPTcs#|jd7_t�j|�dS)Nr
)�
rset_countr��	smtp_RSET)rr�)r�rrr��szSimSMTPChannel.smtp_RSETcs6|jdkr"t�j|�n|j|j�dS)N)�
data_responser��	smtp_DATAr�)rr�)r�rrr��szSimSMTPChannel.smtp_DATAcCs�dS)Nr)rrrr�handle_error�szSimSMTPChannel.handle_error)r8r9r:r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rr)r�rr�fs$
r�c@sReZdZeZdd�Zdd�Zdd�Zdd�Zd	d
�Z	dS)�
SimSMTPServercOs#g|_tjj|||�dS)N)�_extra_featuresrR�
SMTPServerr�)rrFr�rrrr��s	zSimSMTPServer.__init__cCs"|j|j|||�|_dS)N)�
channel_classr��_SMTPchannel)rrrrrr�handle_accepted�szSimSMTPServer.handle_acceptedcCsdS)Nr)rZpeerZmailfromZrcpttos�datarrr�process_message�szSimSMTPServer.process_messagecCs|jj|�dS)N)r��append)rZfeaturerrr�add_feature�szSimSMTPServer.add_featurecCs�dS)Nr)rrrrr��szSimSMTPServer.handle_errorN)
r8r9r:r�r�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#S)$�SMTPSimTestscCs�tj|_tjt_tj�|_tj�|_tt	dfd�|_
|j
jj�d|_|j
|j|jf}tj
dtd|�|_|jj�|jj�|jj�dS)NrrDr
rErFrG)znowhererG)rrHrIrrPrQr@rAr�r%rrUrrVrBrWrXrYrZ)rr[rrrr�s

zSMTPSimTests.setUpcCs7|jt_|jj�|jj�|jj�dS)N)	rIrrHrArr@rYrWr\)rrrrr�s

zSMTPSimTests.tearDowncCs/tjt|jdddd�}|j�dS)Nr-r]r
r�)rr$r%rr_)rr&rrrr`�s!zSMTPSimTests.testBasiccCs�tjt|jdddd�}|j|ji�idd6dd6dd	6dd
6dd6}|j�|j|j|�x$|D]}|j|j|��q�W|j	|jd��|j
�dS)
Nr-r]r
r�r��expnZ20000000�sizeZstarttlsZ	deliverbyruzunsupported-feature)rr$r%rr �esmtp_featuresrjZ
assertTrueZhas_extnZassertFalser_)rr&Zexpected_features�krrr�testEHLOs!



zSMTPSimTests.testEHLOcCs�tjt|jdddd�}x[tj�D]M\}}dtd|tj|�fd�f}|j|j	|�|�q.Wd}d	d
|j
d�f}|j|j	|�|�|j�dS)Nr-r]r
r�rcz%s %sr�znobody@nowhere.comi&zNo such user: %s)rr$r%rr��items�bytesr�r rp�encoder_)rr&r��name�expected_known�u�expected_unknownrrrrqs!	zSMTPSimTests.testVRFYc	Cs�tjt|jdddd�}x�tj�D]~\}}g}x2|D]*}|jdt|tj|�f�qGWdt	dj
|�d�f}|j|j|�|�q.Wd	}d}|j|j|�|�|j
�dS)
Nr-r]r
r�z%s %src�
r�zPSU-Members-List�&�No access for you!)r�r�)rr$r%rr�r�r�r�r�r�r\r r�r_)	rr&ZlistnameZmembersZusersr~r�r�r�rrr�testEXPN$s!
(zSMTPSimTests.testEXPNcCsi|jjd�tjt|jdddd�}d
}|j|jtdtd	�|�|j	�dS)Nz
AUTH PLAINr-r]r
r����
plain auth okrr
)r�r�)
rr�rr$r%rr r��sim_authr)rr&Zexpected_auth_okrrr�testAUTH_PLAIN3s
!$zSMTPSimTests.testAUTH_PLAINcCs�|jjd�tjt|jdddd�}y|jtdtd�Wn>tjk
r�}z|j	t
t|��WYdd}~XnX|j�dS)Nz
AUTH LOGINr-r]r
r�rr
)
rr�rr$r%rr�r��SMTPAuthenticationError�assertIn�sim_auth_login_password�strr)rr&�errrrr�testAUTH_LOGINCs!)zSMTPSimTests.testAUTH_LOGINcCs�|jjd�tjt|jdddd�}y|jtdtd�WnBtjk
r�}z|j	t
dt|��WYdd}~XnX|j�dS)	Nz
AUTH CRAM-MD5r-r]r
r�rr
zcram-md5)
rr�rr$r%rr�r�rrr�rr)rr&rrrr�testAUTH_CRAM_MD5Ks!-zSMTPSimTests.testAUTH_CRAM_MD5cCs�|jjd�tjt|jdddd�}y|jtdtd�Wn>tjk
r�}z|j	t
t|��WYdd}~XnX|j�dS)NzAUTH BOGUS PLAIN LOGIN CRAM-MD5r-r]r
r�rr
)
rr�rr$r%rr�r�rrrrr)rr&rrrr�testAUTH_multipleTs!)zSMTPSimTests.testAUTH_multiplecCs�tjt|jdddd�}|j�\}}|j|d�|jd|j�|j�|j	d|j�|j
t|j�|j	d|j�|j�|jd|j�|j�dS)Nr-r]r
r�rcr�)rr$r%rrjr rr�r_ZassertNotInZconnectZehlo_or_helo_if_needed)rr&�code�messagerrr�test_quit_resets_greeting]s	

z&SMTPSimTests.test_quit_resets_greetingcCs�tjt|j��)}|j�\}}|j|d�WdQX|jtj|jd�tjt|j��}|j	�WdQX|jtj|jd�dS)Nrcsfoo)
rr$r%rrer r�r�rr)rr&r	r
rrr�test_with_statementlsz SMTPSimTests.test_with_statementcCs�|jtj��>}tjt|j�� }|j�d|jj_	WdQXWdQX|j
|jjd�|j
|jj
d�dS)Nz421 QUIT FAILEDi�sQUIT FAILED)r�rr�r$r%rrerr�r�r �	exceptionZ	smtp_codeZ
smtp_error)r�errorr&rrr� test_with_statement_QUIT_failureus
z-SMTPSimTests.test_with_statement_QUIT_failurecCs�tjt|jdddd�}|j�d|jj_d|jj_|j	tj
��|jddd	�WdQX|j|j
�dS)
Nr-r]r
r�z451 Requested action abortedTrwrxztest message)rr$r%rrerr�r�r�r��SMTPSenderRefusedryr0r3)rr&rrr�test__rest_from_mail_cmd�s!
z%SMTPSimTests.test__rest_from_mail_cmdcCs�tjt|jdddd�}|j�d|jj_|jtj	��|j
ddd�WdQX|j|j�|j
|jjjd	�dS)
Nr-r]r
r�z421 closing connectionrwrxztest messager)rr$r%rrerr�r�r�rryr0r3r r�)rr&rrr�test_421_from_mail_cmd�s!
z#SMTPSimTests.test_421_from_mail_cmdcCs�tjt|jdddd�}|j�ddg|jj_|jtj	��#}|j
ddd	d
gd�WdQX|j|j�|j
|jjjd�|j|jjdidd	6�dS)Nr-r]r
r�z250 acceptedz421 closingrwrxZFrankZGeorgeztest messager��closing)rr)rr$r%rrerr�r�r�ZSMTPRecipientsRefusedryr0r3r r�ZassertDictEqualr
rF)rr&rrrr�test_421_from_rcpt_cmd�s!
"z#SMTPSimTests.test_421_from_rcpt_cmdcCs�Gdd�dt�}||j_tjt|jdddd�}|j�|jtj	��|j
ddgd	�WdQX|j|j�|j
|jjjd
�dS)Ncs"eZdZ�fdd�Z�S)z=SMTPSimTests.test_421_from_data_cmd.<locals>.MySimSMTPChannelcs3|j|jkr"|jd�n
t�j�dS)Nz421 closing)Z
smtp_stateZDATAr�r��found_terminator)r)r�rrr�szNSMTPSimTests.test_421_from_data_cmd.<locals>.MySimSMTPChannel.found_terminator)r8r9r:rrr)r�r�MySimSMTPChannel�srr-r]r
r�zJohn@foo.orgz
Sally@foo.orgztest messager)r�rr�rr$r%rrer�Z
SMTPDataErrorryr0r3r r�r�)rrr&rrr�test_421_from_data_cmd�s!
z#SMTPSimTests.test_421_from_data_cmdN)r8r9r:rrr`r�rqr�rrrrrrrrrrrrrrrr��s"			
	
r�cCs tjtttttt�dS)N)rZrun_unittestrrCr�r�r�r�)�verboserrr�	test_main�sr�__main__)/r=Zemail.mime.textr�Zemail.utilsrrRrrMr�rJr>rrbZunittestZtestrrrP�ImportErrorr%�platformrZSMTPChannelrZTestCaserrBr{r|Z
skipUnlessrCr�r�r�r�r�r�r�rr�r�r�r�r�Zreap_threadsrr8rrrr�<module>sl
	J�e



b�