Your IP : 216.73.216.85


Current Path : /opt/alt/python35/lib64/python3.5/test/__pycache__/
Upload File :
Current File : //opt/alt/python35/lib64/python3.5/test/__pycache__/test_imaplib.cpython-35.pyc



��Yfٍ�@s#ddlmZejd�ZddlmZddlZddlZddl	Z	ddl
Z
ddlZddlZddl
mZmZmZmZmZddlZddlmZddlmZmZmZyddlZWnek
rdZYnXejjejje�p#ejd�Zejjejje�pMejd	�Z Gd
d�dej!�Z"er�Gdd
�d
e	j#�Z$ej%Z%nGdd
�d
�Z$dZ%Gdd�de	j&�Z'Gdd�d�Z(Gdd�de(ej!�Z)ej*ed�Gdd�de(ej!��Z+Gdd�dej!�Z,ej*ed�Gdd�de,��Z-ej*ej.d�d�Gdd�dej!��Z/ej*ed�ej*ej.d�d�Gd d!�d!e/���Z0ej*ed�Gd"d#�d#e/��Z1e2d$krej3�dS)%�)�support�	threading)�contextmanagerN)�reap_threads�verbose�transient_internet�run_with_tz�run_with_locale)�mock)�datetime�timezone�	timedeltazkeycert3.pemzpycacert.pemc@sveZdZdd�Zed�dd��Zdd�Zedd	d
�ed�dd
���Zdd�Z	dS)�TestImaplibc
Cs�tjd
�}tjd�}|jtj|�|�tjd�}|jtj|�|�tjd�}|jtj|�|�dS)N���rs.25 (INTERNALDATE "01-Jan-2000 00:00:00 +0000")s.25 (INTERNALDATE "01-Jan-2000 11:30:00 +1130")s.25 (INTERNALDATE "31-Dec-1999 12:30:00 -1130")���rr)	rrrrrrrrr)�calendarZtimegm�imaplib�Internaldate2tuple�assertEqual�timeZmktime)�selfZt0Ztt�r�6/opt/alt/python35/lib64/python3.5/test/test_imaplib.py�test_Internaldate2tuples			z#TestImaplib.test_Internaldate2tuplezMST+07MDT,M4.1.0,M10.5.0cCs&|jtjd�tjd��dS)Ns.25 (INTERNALDATE "02-Apr-2000 02:30:00 +0000")s.25 (INTERNALDATE "02-Apr-2000 03:30:00 +0000"))ZassertNotEqualrr)rrrr�"test_Internaldate2tuple_issue10941+sz.TestImaplib.test_Internaldate2tuple_issue10941c
Cs=ddtjd�ddtjdttd	d���dgS)Ni�5wge��A�����!�rr��<z"18-May-2033 05:33:20 +0200"rrr)	rrrrrr rrrrr)	rrrrrr rrr�xi )rZ	localtimerZ
fromtimestamprr
)rrrr�
timevalues2s	zTestImaplib.timevalues�LC_ALLZde_DEZfr_FRzSTD-1DST,M3.2.0,M11.1.0cCs@d}x3|j�D]%}tj|�}|j||�qWdS)Nz"18-May-2033 05:33:20 +0200")r$r�Time2Internaldater)rZexpected�tZinternalrrr�test_Time2Internaldate:sz"TestImaplib.test_Time2InternaldatecCs(x!|j�D]}tj|�q
WdS)N)r$rr&)rr'rrr�,test_that_Time2Internaldate_returns_a_resultEsz8TestImaplib.test_that_Time2Internaldate_returns_a_resultN)
�__name__�
__module__�__qualname__rrrr$r	r(r)rrrrrsrc@seZdZdd�ZdS)�SecureTCPServercCs:|jj�\}}tj|dddt�}||fS)NZserver_sideT�certfile)�socketZaccept�sslZwrap_socket�CERTFILE)rZ	newsocketZfromaddrZ
connstreamrrr�get_requestPs
	zSecureTCPServer.get_requestN)r*r+r,r2rrrrr-Nsr-c@seZdZdS)r-N)r*r+r,rrrrr-[scs�eZdZdZdZdZ�fdd�Zdd�Zdd	�Zd
d�Z	dd
�Z
dd�Zdd�Zdd�Z
dd�Z�S)�SimpleIMAPHandlerrN�cst�j�d|j_dS)N)�super�setup�server�logged)r)�	__class__rrr6fs
zSimpleIMAPHandler.setupcCs.trtd|j��|jj|�dS)NzSENT: %r)r�print�strip�wfile�write)r�messagerrr�_sendjszSimpleIMAPHandler._sendcCs|j|d�dS)Ns
)r?)rr>rrr�
_send_lineoszSimpleIMAPHandler._send_linecCs|j|jd��dS)N�ASCII)r@�encode)rr>rrr�_send_textlinersz SimpleIMAPHandler._send_textlinecCs#|jdj|||f��dS)N� )rC�join)r�tag�coder>rrr�_send_taggeduszSimpleIMAPHandler._send_taggedcCsq|jd�x]d}x]y0|jjd�}|dkr>dS||7}Wntk
radSYnX|jd�rPqWtr�td|j��|jr�y|jj	|�Wqt
k
r�d|_YqXq|jd�j�}|d}|d}|dd�}t
|d	|�rRt|d	|�||�}|ri||_t|�q|j|d
|d�qWdS)Nz* OK IMAP4rev1�rs
zGOT: %rrArr!Zcmd_ZBADz unknown)rCZrfile�read�OSError�endswithrr:r;�continuation�send�
StopIteration�decode�split�hasattr�getattr�nextrH)r�line�partZ	splitlinerF�cmd�argsrMrrr�handlexs>

		


	
zSimpleIMAPHandler.handlecCsD|jrd|jnd}|jd|�|j|dd�dS)Nz
IMAP4rev1 Z	IMAP4rev1z
* CAPABILITY �OKzCAPABILITY completed)�capabilitiesrCrH)rrFrXZcapsrrr�cmd_CAPABILITY�sz SimpleIMAPHandler.cmd_CAPABILITYcCs0d|j_|jd�|j|dd�dS)Nz"* BYE IMAP4ref1 Server logging outrZzLOGOUT completed)r7r8rCrH)rrFrXrrr�
cmd_LOGOUT�s
zSimpleIMAPHandler.cmd_LOGOUTcCs'|d|j_|j|dd�dS)NrrZzLOGIN completed)r7r8rH)rrFrXrrr�	cmd_LOGIN�szSimpleIMAPHandler.cmd_LOGIN)r*r+r,ZtimeoutrMr[r6r?r@rCrHrYr\r]r^rr)r9rr3as*r3c@s?eZdZdZddd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zdd�Zdd�Zdd �Zd!d"�Zejd#d$�d%d&��Zd'd(�Zd)d*�Zd+d,�Zd-d.�Zd/d0�Zd1d2�ZdS)3�NewIMAPTestsMixinNTcCs�Gdd�d|j�}|j|j�|jtjdf|�|_tjd|jdd|jj	ddd	i�|_
d
|j
_|j
j�|r�|j
|jj�|_|j|jfS)a
        Sets up imap_handler for tests. imap_handler should inherit from either:
        - SimpleIMAPHandler - for testing IMAP commands,
        - socketserver.StreamRequestHandler - if raw access to stream is needed.
        Returns (client, server).
        c@seZdZdd�ZdS)z/NewIMAPTestsMixin._setup.<locals>.TestTCPServercSs|j|�|j��dS)zP
                End request and raise the error if one occurs.
                N)�
close_request�server_close)r�request�client_addressrrr�handle_error�s

z<NewIMAPTestsMixin._setup.<locals>.TestTCPServer.handle_errorN)r*r+r,rdrrrr�
TestTCPServer�srer�namez-server�target�kwargs�
poll_intervalg{�G�z�?T)�server_classZ
addCleanup�_cleanupr�HOSTr7r�ThreadZ_testMethodName�
serve_forever�thread�daemon�start�
imap_class�server_address�client)rZimap_handler�connectrerrr�_setup�s		

zNewIMAPTestsMixin._setupcCs\|jdk	r.|jjdkr.|jj�|jj�|jj�|jjd�dS)z�
        Cleans up the test server. This method should not be called manually,
        it is added to the cleanup queue in the _setup method already.
        N�LOGOUTg@)rt�state�shutdownr7rarorE)rrrrrk�s
!


zNewIMAPTestsMixin._cleanupcCsWGdd�dtj�}|j|dd�\}}|jtjj|j|j�dS)Nc@seZdZdd�ZdS)zONewIMAPTestsMixin.test_EOF_without_complete_welcome_message.<locals>.EOFHandlercSs|jjd�dS)Ns* OK)r<r=)rrrrrY�szVNewIMAPTestsMixin.test_EOF_without_complete_welcome_message.<locals>.EOFHandler.handleN)r*r+r,rYrrrr�
EOFHandler�srzruF)	�socketserver�StreamRequestHandlerrv�assertRaisesr�IMAP4�abortrrrs)rrz�_r7rrr�)test_EOF_without_complete_welcome_message�sz;NewIMAPTestsMixin.test_EOF_without_complete_welcome_messagecCsTGdd�dt�}|j|dd�\}}|jtjj|j|j�dS)Nc@seZdZdd�ZdS)zBNewIMAPTestsMixin.test_line_termination.<locals>.BadNewlineHandlercSs$|jd�|j|dd�dS)Ns* CAPABILITY IMAP4rev1 AUTH
rZzCAPABILITY completed)r?rH)rrFrXrrrr\�s
zQNewIMAPTestsMixin.test_line_termination.<locals>.BadNewlineHandler.cmd_CAPABILITYN)r*r+r,r\rrrr�BadNewlineHandler�sr�ruF)r3rvr}rr~rrrrs)rr�r�r7rrr�test_line_termination�sz'NewIMAPTestsMixin.test_line_terminationc	Cs|Gdd�dt�}|j|�\}}|j|j�|jtjjd��|jd�WdQRX|j|j�dS)Nc@seZdZdZdS)zMNewIMAPTestsMixin.test_enable_raises_error_if_not_AUTH.<locals>.EnableHandlerzAUTH ENABLE UTF8=ACCEPTN)r*r+r,r[rrrr�
EnableHandler�sr�zENABLE.*NONAUTH�foo)	r3rv�assertFalse�utf8_enabled�assertRaisesRegexrr~�error�enable)rr�rtr�rrr�$test_enable_raises_error_if_not_AUTH�sz6NewIMAPTestsMixin.test_enable_raises_error_if_not_AUTHc	CsF|jt�\}}|jtjjd��|jd�WdQRXdS)Nzdoes not support ENABLEr�)rvr3r�rr~r�r�)rrtr�rrr�)test_enable_raises_error_if_no_capabilitys
z;NewIMAPTestsMixin.test_enable_raises_error_if_no_capabilityc	Csn|jt�\}}|jdd�\}}|j|d�|jtjjd��|jd�WdQRXdS)N�user�passrZzdoes not support ENABLEzUTF8=ACCEPT)	rvr3�loginrr�rr~r�r�)rrtr��typ�datarrr�.test_enable_UTF8_raises_error_if_not_supporteds
z@NewIMAPTestsMixin.test_enable_UTF8_raises_error_if_not_supportedc	CsGdd�dt�}|j|�\}}|j|jd�|jddd��\}}|j|d�|j|jd�|jd	�\}}|j|d�|j|jd
�d}|jddd|jd
��\}}|j|d�|j|jd|jd
��dS)
Nc@s:eZdZdZdd�Zdd�Zdd�ZdS)	zHNewIMAPTestsMixin.test_enable_UTF8_True_append.<locals>.UTF8AppendServerzENABLE UTF8=ACCEPTcSs|j|dd�dS)NrZzENABLE successful)rH)rrFrXrrr�
cmd_ENABLEszSNewIMAPTestsMixin.test_enable_UTF8_True_append.<locals>.UTF8AppendServer.cmd_ENABLEcss1|jd�dV|j_|j|dd�dS)N�+rZzFAKEAUTH successful)rCr7�responserH)rrFrXrrr�cmd_AUTHENTICATEs

zYNewIMAPTestsMixin.test_enable_UTF8_True_append.<locals>.UTF8AppendServer.cmd_AUTHENTICATEcss1|jd�dV|j_|j|dd�dS)Nr�rZ�okay)rCr7r�rH)rrFrXrrr�
cmd_APPENDs

zSNewIMAPTestsMixin.test_enable_UTF8_True_append.<locals>.UTF8AppendServer.cmd_APPENDN)r*r+r,r[r�r�r�rrrr�UTF8AppendServersr��ascii�MYAUTHcSsdS)Nsfaker)�xrrr�<lambda>sz@NewIMAPTestsMixin.test_enable_UTF8_True_append.<locals>.<lambda>rZs
ZmFrZQ==
zUTF8=ACCEPTzutf-8uSubject: üñí©öðézUTF8 (%s)
)	r3rvr�	_encoding�authenticater�r��appendrB)	rr�rtr7rGr��
msg_stringr�r�rrr�test_enable_UTF8_True_appends'z.NewIMAPTestsMixin.test_enable_UTF8_True_appendc
Cs�Gdd�dt�}|j|�\}}|jddd��\}}|j|d�|jd�\}}|j|d�|j|j�|jtj	j
d��|jd	d
�WdQRXdS)Nc@s.eZdZdZdd�Zdd�ZdS)zPNewIMAPTestsMixin.test_search_disallows_charset_in_utf8_mode.<locals>.UTF8ServerzAUTH ENABLE UTF8=ACCEPTcSs|j|dd�dS)NrZzENABLE successful)rH)rrFrXrrrr�,sz[NewIMAPTestsMixin.test_search_disallows_charset_in_utf8_mode.<locals>.UTF8Server.cmd_ENABLEcss1|jd�dV|j_|j|dd�dS)Nr�rZzFAKEAUTH successful)rCr7r�rH)rrFrXrrrr�.s

zaNewIMAPTestsMixin.test_search_disallows_charset_in_utf8_mode.<locals>.UTF8Server.cmd_AUTHENTICATEN)r*r+r,r[r�r�rrrr�
UTF8Server*sr�r�cSsdS)Nsfaker)r�rrrr�3szNNewIMAPTestsMixin.test_search_disallows_charset_in_utf8_mode.<locals>.<lambda>rZzUTF8=ACCEPTz
charset.*UTF8r��bar)r3rvr�rr��
assertTruer�r�rr~r��search)rr�rtr�r�rrr�*test_search_disallows_charset_in_utf8_mode)sz<NewIMAPTestsMixin.test_search_disallows_charset_in_utf8_modecCseGdd�dt�}|j|�\}}|jtjjd��|jddd��WdQRXdS)Nc@seZdZdd�ZdS)z6NewIMAPTestsMixin.test_bad_auth_name.<locals>.MyServercSs$|j|ddj|d��dS)N�NOz#unrecognized authentication type {}r)rH�format)rrFrXrrrr�=szGNewIMAPTestsMixin.test_bad_auth_name.<locals>.MyServer.cmd_AUTHENTICATEN)r*r+r,r�rrrr�MyServer<sr�z'unrecognized authentication type METHOD�METHODcSsdS)Nrrrrrrr�Csz6NewIMAPTestsMixin.test_bad_auth_name.<locals>.<lambda>)r3rvr�rr~r�r�)rr�rtr�rrr�test_bad_auth_name;s

z$NewIMAPTestsMixin.test_bad_auth_namecCseGdd�dt�}|j|�\}}|jtjjd��|jddd��WdQRXdS)Nc@seZdZdd�ZdS)z?NewIMAPTestsMixin.test_invalid_authentication.<locals>.MyServercss.|jd�dV|_|j|dd�dS)Nr�r�z[AUTHENTICATIONFAILED] invalid)rCr�rH)rrFrXrrrr�Gs

zPNewIMAPTestsMixin.test_invalid_authentication.<locals>.MyServer.cmd_AUTHENTICATEN)r*r+r,r�rrrrr�Fsr�z \[AUTHENTICATIONFAILED\] invalidr�cSsdS)Nsfaker)r�rrrr�Nsz?NewIMAPTestsMixin.test_invalid_authentication.<locals>.<lambda>)r3rvr�rr~r�r�)rr�rtr�rrr�test_invalid_authenticationEs

z-NewIMAPTestsMixin.test_invalid_authenticationcCspGdd�dt�}|j|�\}}|jddd��\}}|j|d�|j|jd�dS)Nc@seZdZdd�ZdS)zCNewIMAPTestsMixin.test_valid_authentication_bytes.<locals>.MyServercss1|jd�dV|j_|j|dd�dS)Nr�rZzFAKEAUTH successful)rCr7r�rH)rrFrXrrrr�Rs

zTNewIMAPTestsMixin.test_valid_authentication_bytes.<locals>.MyServer.cmd_AUTHENTICATEN)r*r+r,r�rrrrr�Qsr�r�cSsdS)Nsfaker)r�rrrr�WszCNewIMAPTestsMixin.test_valid_authentication_bytes.<locals>.<lambda>rZs
ZmFrZQ==
)r3rvr�rr�)rr�rtr7rGr�rrr�test_valid_authentication_bytesPs
z1NewIMAPTestsMixin.test_valid_authentication_bytescCspGdd�dt�}|j|�\}}|jddd��\}}|j|d�|j|jd�dS)Nc@seZdZdd�ZdS)zHNewIMAPTestsMixin.test_valid_authentication_plain_text.<locals>.MyServercss1|jd�dV|j_|j|dd�dS)Nr�rZzFAKEAUTH successful)rCr7r�rH)rrFrXrrrr�]s

zYNewIMAPTestsMixin.test_valid_authentication_plain_text.<locals>.MyServer.cmd_AUTHENTICATEN)r*r+r,r�rrrrr�\sr�r�cSsdS)N�faker)r�rrrr�bszHNewIMAPTestsMixin.test_valid_authentication_plain_text.<locals>.<lambda>rZs
ZmFrZQ==
)r3rvr�rr�)rr�rtr7rGr�rrr�$test_valid_authentication_plain_text[s
z6NewIMAPTestsMixin.test_valid_authentication_plain_textcCsmGdd�dt�}|j|�\}}|jd|jk�|jdd�\}}|j|d�dS)Nc@s"eZdZdZdd�ZdS)z@NewIMAPTestsMixin.test_login_cram_md5_bytes.<locals>.AuthHandlerzLOGINDISABLED AUTH=CRAM-MD5cssM|jd�dV}|dkr6|j|dd�n|j|dd�dS)Nz:+ PDE4OTYuNjk3MTcwOTUyQHBvc3RvZmZpY2UucmVzdG9uLm1jaS5uZXQ=s2dGltIGYxY2E2YmU0NjRiOWVmYTFjY2E2ZmZkNmNmMmQ5ZjMy
rZzCRAM-MD5 successfulr�z	No access)rCrH)rrFrX�rrrrr�is

zQNewIMAPTestsMixin.test_login_cram_md5_bytes.<locals>.AuthHandler.cmd_AUTHENTICATEN)r*r+r,r[r�rrrr�AuthHandlergsr�z
AUTH=CRAM-MD5�timstanstaaftanstaafrZ)r3rvr�r[�login_cram_md5r)rr�rtr��retrrr�test_login_cram_md5_bytesfs
z+NewIMAPTestsMixin.test_login_cram_md5_bytescCsmGdd�dt�}|j|�\}}|jd|jk�|jdd�\}}|j|d�dS)Nc@s"eZdZdZdd�ZdS)zENewIMAPTestsMixin.test_login_cram_md5_plain_text.<locals>.AuthHandlerzLOGINDISABLED AUTH=CRAM-MD5cssM|jd�dV}|dkr6|j|dd�n|j|dd�dS)Nz:+ PDE4OTYuNjk3MTcwOTUyQHBvc3RvZmZpY2UucmVzdG9uLm1jaS5uZXQ=s2dGltIGYxY2E2YmU0NjRiOWVmYTFjY2E2ZmZkNmNmMmQ5ZjMy
rZzCRAM-MD5 successfulr�z	No access)rCrH)rrFrXr�rrrr�zs

zVNewIMAPTestsMixin.test_login_cram_md5_plain_text.<locals>.AuthHandler.cmd_AUTHENTICATEN)r*r+r,r[r�rrrrr�xsr�z
AUTH=CRAM-MD5r��tanstaaftanstaafrZ)r3rvr�r[r�r)rr�rtr�r�rrr�test_login_cram_md5_plain_textws
z0NewIMAPTestsMixin.test_login_cram_md5_plain_textcCseGdd�dt�}|j|�\}}|jtjjd��|jddd��WdQRXdS)Nc@seZdZdd�ZdS)z?NewIMAPTestsMixin.test_aborted_authentication.<locals>.MyServercssS|jd�dV|_|jdkr<|j|dd�n|j|dd�dS)Nr�s*
r�z[AUTHENTICATIONFAILED] abortedrZzMYAUTH successful)rCr�rH)rrFrXrrrr��s


zPNewIMAPTestsMixin.test_aborted_authentication.<locals>.MyServer.cmd_AUTHENTICATEN)r*r+r,r�rrrrr��sr�z \[AUTHENTICATIONFAILED\] abortedr�cSsdS)Nr)r�rrrr��sz?NewIMAPTestsMixin.test_aborted_authentication.<locals>.<lambda>)r3rvr�rr~r�r�)rr�rtr�rrr�test_aborted_authentication�s

z-NewIMAPTestsMixin.test_aborted_authenticationzimaplib._MAXLINE�
c	CseGdd�dt�}|j|dd�\}}|jtjjd��|j|j�WdQRXdS)Nc@seZdZdd�ZdS)z:NewIMAPTestsMixin.test_linetoolong.<locals>.TooLongHandlercSs|jjd�dS)Ns* OK ��xs
sxxxxxxxxxxxs* OK xxxxxxxxxxxs* OK xxxxxxxxxxx
)r<r=)rrrrrY�szANewIMAPTestsMixin.test_linetoolong.<locals>.TooLongHandler.handleN)r*r+r,rYrrrr�TooLongHandler�sr�ruFzgot more than 10 bytes)r3rvr�rr~r�rrrs)rr�r�r7rrr�test_linetoolong�s

z"NewIMAPTestsMixin.test_linetoolongc	Cs9|jtdd�\}}|j|j��WdQRXdS)NruF)rvr3rrrs)rr�r7rrr�test_simple_with_statement�sz,NewIMAPTestsMixin.test_simple_with_statementc
Csn|jtdd�\}}|j|j��*}|jdd�|j|jd�WdQRX|j|j�dS)NruFr�r�)rvr3rrrsr�rr8�assertIsNone)rr�r7�imaprrr�test_with_statement�s
z%NewIMAPTestsMixin.test_with_statementc
Cs�|jtdd�\}}|j|j��D}|jdd�|j|jd�|j�|j|j�WdQRX|j|j�dS)NruFr�r�)	rvr3rrrsr�rr8�logoutr�)rr�r7r�rrr�test_with_statement_logout�s
z,NewIMAPTestsMixin.test_with_statement_logoutcCsh|jt�\}}|jdd�\}}|j|d�|j|dd�|j|jd�dS)Nr�r�rZrsLOGIN completed�AUTH)rvr3r�rrx)rrtr�r�r�rrr�
test_login�s
zNewIMAPTestsMixin.test_logincCs�|jt�\}}|jdd�\}}|j|d�|j|dd�|j�\}}|j|d�|j|dd�|j|jd�dS)	Nr�r�rZrsLOGIN completed�BYEsIMAP4ref1 Server logging outrw)rvr3r�rr�rx)rrtr�r�r�rrr�test_logout�szNewIMAPTestsMixin.test_logoutcCsuGdd�dt�}|j|�\}}|jdd�|j�\}}|j|d�|j|dd�dS)Nc@seZdZdd�ZdS)z,NewIMAPTestsMixin.test_lsub.<locals>.LsubCmdcSs |jd�|j|dd�S)Nz* LSUB () "." directoryArZzLSUB completed)rCrH)rrFrXrrr�cmd_LSUB�s
z5NewIMAPTestsMixin.test_lsub.<locals>.LsubCmd.cmd_LSUBN)r*r+r,r�rrrr�LsubCmd�sr�r�r�rZrs() "." directoryA)r3rvr�Zlsubr)rr�rtr�r�r�rrr�	test_lsub�szNewIMAPTestsMixin.test_lsub)r*r+r,rtrvrkr�r�r�r�r�r�r�r�r�r�r�r�r�r�r
Zpatchr�r�r�r�r�r�r�rrrrr_�s0!			

r_c@s"eZdZejZejZdS)�NewIMAPTestsN)	r*r+r,rr~rrr{�	TCPServerrjrrrrr��s	r�zSSL not availablec@s4eZdZeZeZdd�Zdd�ZdS)�NewIMAPSSLTestscCs�tjtj�}tj|_d|_|jt�|jtj	d��<|j
t�\}}|j|j
d|�}|j�WdQRXdS)NTz.hostname '127.0.0.1' doesn't match 'localhost'�ssl_context)r0�
SSLContext�PROTOCOL_SSLv23�
CERT_REQUIRED�verify_mode�check_hostname�load_verify_locations�CAFILEr��CertificateErrorrvr3rrrsry)rr�r�r7rtrrr�test_ssl_raises�s	

	zNewIMAPSSLTests.test_ssl_raisescCsvtjtj�}tj|_d|_|jt�|jt	�\}}|j
d|jdd|�}|j�dS)NT�	localhostrr�)
r0r�r�r�r�r�r�r�rvr3rrrsry)rr�r�r7rtrrr�test_ssl_verified�s	
	z!NewIMAPSSLTests.test_ssl_verifiedN)	r*r+r,�	IMAP4_SSLrrr-rjr�r�rrrrr��s
r�c@s�eZdZejZejZdd�Z	dd�Z
edd��Zedd��Z
ed	d
��Zedd��Zed
d��ZGdd�de�Zedd��Zedd��Zedd��Zedd��Zedd��Zedd��Zedd��Zedd ��Zed!d"��Zed#d$��Zd%d&�Zed'd(��Zed)d*��Z ed+d,��Z!d-S).�ThreadedNetworkedTestscCs�Gdd�d|j�}tr)td�|||�}|j|j|jj��tr�td�td|�td|j�td|j�tj	dd	|jd
|j
ddd
i�}d|_|j�tr�td�||fS)Nc@seZdZdd�ZdS)z4ThreadedNetworkedTests.make_server.<locals>.MyServercSs|j|�|j��dS)N)r`ra)rrbrcrrrrds

zAThreadedNetworkedTests.make_server.<locals>.MyServer.handle_errorN)r*r+r,rdrrrrr�sr�zcreating serverzserver createdzADDR =zCLASS =zHDLR =rfz
%s servingrgrhrig{�G�z�?Tzserver running)
rjrr:rrsr/ZgetsocknameZRequestHandlerClassrrmrnrprq)rZaddr�hdlrr�r7r'rrr�make_server�s&


	
		

z"ThreadedNetworkedTests.make_servercCsBtrtd�|j�|j�|j�tr>td�dS)Nzwaiting for server�done)rr:ryrarE)rr7rorrr�reap_servers



z"ThreadedNetworkedTests.reap_serverccsB|jtjdf|�\}}z	|VWd|j||�XdS)Nr)r�rrlr�)rr�r7rorrr�
reaped_server(s!	z$ThreadedNetworkedTests.reaped_serverccsL|j|��6}|j|j�}z||fVWd|j�XWdQRXdS)N)r�rrrsr�)rr�r7rtrrr�reaped_pair0s
z"ThreadedNetworkedTests.reaped_pairc	Cs9|jt��#}|j|j�}|j�WdQRXdS)N)r�r3rrrsry)rr7rtrrr�test_connect9sz#ThreadedNetworkedTests.test_connectcCsUGdd�dtj�}|j|��&}|jtjj|j|j�WdQRXdS)Nc@seZdZdd�ZdS)z9ThreadedNetworkedTests.test_issue5949.<locals>.EOFHandlercSs|jjd�dS)Ns* OK)r<r=)rrrrrYCsz@ThreadedNetworkedTests.test_issue5949.<locals>.EOFHandler.handleN)r*r+r,rYrrrrrzBsrz)	r{r|r�r}rr~rrrrs)rrzr7rrr�test_issue5949?sz%ThreadedNetworkedTests.test_issue5949cCsRGdd�dt�}|j|��&}|jtjj|j|j�WdQRXdS)Nc@seZdZdd�ZdS)zGThreadedNetworkedTests.test_line_termination.<locals>.BadNewlineHandlercSs$|jd�|j|dd�dS)Ns* CAPABILITY IMAP4rev1 AUTH
rZzCAPABILITY completed)r?rH)rrFrXrrrr\Ps
zVThreadedNetworkedTests.test_line_termination.<locals>.BadNewlineHandler.cmd_CAPABILITYN)r*r+r,r\rrrrr�Nsr�)r3r�r}rr~rrrrs)rr�r7rrrr�Ksz,ThreadedNetworkedTests.test_line_terminationc@s.eZdZdZdd�Zdd�ZdS)z!ThreadedNetworkedTests.UTF8ServerzAUTH ENABLE UTF8=ACCEPTcCs|j|dd�dS)NrZzENABLE successful)rH)rrFrXrrrr�[sz,ThreadedNetworkedTests.UTF8Server.cmd_ENABLEccs1|jd�dV|j_|j|dd�dS)Nr�rZzFAKEAUTH successful)rCr7r�rH)rrFrXrrrr�^s

z2ThreadedNetworkedTests.UTF8Server.cmd_AUTHENTICATEN)r*r+r,r[r�r�rrrrr�Xsr�cCsb|j|j��I\}}|j|j�|jtjj|jd�|j|j�WdQRXdS)Nr�)	r�r�r�r�r}rr~r�r�)rr7rtrrrr�csz;ThreadedNetworkedTests.test_enable_raises_error_if_not_AUTHcCsXGdd�d|j�}|j|��)\}}|jtjj|jd�WdQRXdS)Nc@seZdZdZdS)zXThreadedNetworkedTests.test_enable_raises_error_if_no_capability.<locals>.NoEnableServerr�N)r*r+r,r[rrrr�NoEnableServernsr�r�)r�r�r}rr~r�r�)rr�r7rtrrrr�lsz@ThreadedNetworkedTests.test_enable_raises_error_if_no_capabilitycCs�Gdd�dt�}|jtjj��Y|j|��B\}}|jdd�\}}|j|d�|jd�WdQRXWdQRXdS)Nc@seZdZdS)z\ThreadedNetworkedTests.test_enable_UTF8_raises_error_if_not_supported.<locals>.NonUTF8ServerN)r*r+r,rrrr�
NonUTF8Serverusr�r�r�rZzUTF8=ACCEPT)	r3r}rr~r�r�r�rr�)rr�r7rtr�r�rrrr�ss
zEThreadedNetworkedTests.test_enable_UTF8_raises_error_if_not_supportedc	
Cs%Gdd�d|j�}|j|���\}}|j|jd�|jddd��\}}|j|d�|j|jd�|jd	�\}}|j|d�|j|jd
�d}|jddd|jd
��\}}|j|d�|j|jd|jd
��WdQRXdS)
Nc@seZdZdd�ZdS)zMThreadedNetworkedTests.test_enable_UTF8_True_append.<locals>.UTF8AppendServercss1|jd�dV|j_|j|dd�dS)Nr�rZr�)rCr7r�rH)rrFrXrrrr��s

zXThreadedNetworkedTests.test_enable_UTF8_True_append.<locals>.UTF8AppendServer.cmd_APPENDN)r*r+r,r�rrrrr��sr�r�r�cSsdS)Nsfaker)r�rrrr��szEThreadedNetworkedTests.test_enable_UTF8_True_append.<locals>.<lambda>rZs
ZmFrZQ==
zUTF8=ACCEPTzutf-8uSubject: üñí©öðézUTF8 (%s)
)	r�r�rr�r�r�r�r�rB)	rr�r7rtrGr�r�r�r�rrrr�~s"!z3ThreadedNetworkedTests.test_enable_UTF8_True_appendcCs�|j|j���\}}|jddd��\}}|j|d�|jd�\}}|j|d�|j|j�|jtj	j
|jdd�WdQRXdS)Nr�cSsdS)Nsfaker)r�rrrr��szSThreadedNetworkedTests.test_search_disallows_charset_in_utf8_mode.<locals>.<lambda>rZzUTF8=ACCEPTr�r�)r�r�r�rr�r�r�r}rr~r�r�)rr7rtr�r�rrrr��szAThreadedNetworkedTests.test_search_disallows_charset_in_utf8_modecCslGdd�dt�}|j|��@\}}|jtjj��|jddd��WdQRXWdQRXdS)Nc@seZdZdd�ZdS)z;ThreadedNetworkedTests.test_bad_auth_name.<locals>.MyServercSs$|j|ddj|d��dS)Nr�z#unrecognized authentication type {}r)rHr�)rrFrXrrrr��szLThreadedNetworkedTests.test_bad_auth_name.<locals>.MyServer.cmd_AUTHENTICATEN)r*r+r,r�rrrrr��sr�r�cSsdS)Nrrrrrrr��sz;ThreadedNetworkedTests.test_bad_auth_name.<locals>.<lambda>)r3r�r}rr~r�r�)rr�r7rtrrrr��sz)ThreadedNetworkedTests.test_bad_auth_namecCstGdd�dt�}|j|��H\}}|jtjj��#|jddd��\}}WdQRXWdQRXdS)Nc@seZdZdd�ZdS)zDThreadedNetworkedTests.test_invalid_authentication.<locals>.MyServercss.|jd�dV|_|j|dd�dS)Nr�r�z[AUTHENTICATIONFAILED] invalid)rCr�rH)rrFrXrrrr��s

zUThreadedNetworkedTests.test_invalid_authentication.<locals>.MyServer.cmd_AUTHENTICATEN)r*r+r,r�rrrrr��sr�r�cSsdS)Nsfaker)r�rrrr��szDThreadedNetworkedTests.test_invalid_authentication.<locals>.<lambda>)r3r�r}rr~r�r�)rr�r7rtrGr�rrrr��sz2ThreadedNetworkedTests.test_invalid_authenticationcCs�Gdd�dt�}|j|��N\}}|jddd��\}}|j|d�|j|jd�WdQRX|j|��N\}}|jddd��\}}|j|d�|j|jd�WdQRXdS)	Nc@seZdZdd�ZdS)zBThreadedNetworkedTests.test_valid_authentication.<locals>.MyServercss1|jd�dV|j_|j|dd�dS)Nr�rZzFAKEAUTH successful)rCr7r�rH)rrFrXrrrr��s

zSThreadedNetworkedTests.test_valid_authentication.<locals>.MyServer.cmd_AUTHENTICATEN)r*r+r,r�rrrrr��sr�r�cSsdS)Nsfaker)r�rrrr��szBThreadedNetworkedTests.test_valid_authentication.<locals>.<lambda>rZs
ZmFrZQ==
cSsdS)Nr�r)r�rrrr��s)r3r�r�rr�)rr�r7rtrGr�rrr�test_valid_authentication�sz0ThreadedNetworkedTests.test_valid_authenticationcCs�Gdd�dt�}|j|��K\}}|jd|jk�|jdd�\}}|j|d�WdQRX|j|��K\}}|jd|jk�|jdd�\}}|j|d�WdQRXdS)Nc@s"eZdZdZdd�ZdS)z?ThreadedNetworkedTests.test_login_cram_md5.<locals>.AuthHandlerzLOGINDISABLED AUTH=CRAM-MD5cssM|jd�dV}|dkr6|j|dd�n|j|dd�dS)Nz:+ PDE4OTYuNjk3MTcwOTUyQHBvc3RvZmZpY2UucmVzdG9uLm1jaS5uZXQ=s2dGltIGYxY2E2YmU0NjRiOWVmYTFjY2E2ZmZkNmNmMmQ5ZjMy
rZzCRAM-MD5 successfulr�z	No access)rCrH)rrFrXr�rrrr��s

zPThreadedNetworkedTests.test_login_cram_md5.<locals>.AuthHandler.cmd_AUTHENTICATEN)r*r+r,r[r�rrrrr��sr�z
AUTH=CRAM-MD5r�r�rZstanstaaftanstaaf)r3r�r�r[r�r)rr�r7rtr�r�rrr�test_login_cram_md5�sz*ThreadedNetworkedTests.test_login_cram_md5cCstGdd�dt�}|j|��H\}}|jtjj��#|jddd��\}}WdQRXWdQRXdS)Nc@seZdZdd�ZdS)zDThreadedNetworkedTests.test_aborted_authentication.<locals>.MyServercssS|jd�dV|_|jdkr<|j|dd�n|j|dd�dS)Nr�s*
r�z[AUTHENTICATIONFAILED] abortedrZzMYAUTH successful)rCr�rH)rrFrXrrrr��s


zUThreadedNetworkedTests.test_aborted_authentication.<locals>.MyServer.cmd_AUTHENTICATEN)r*r+r,r�rrrrr��sr�r�cSsdS)Nr)r�rrrr�szDThreadedNetworkedTests.test_aborted_authentication.<locals>.<lambda>)r3r�r}rr~r�r�)rr�r7rtrGr�rrrr��sz2ThreadedNetworkedTests.test_aborted_authenticationcCsRGdd�dt�}|j|��&}|jtjj|j|j�WdQRXdS)Nc@seZdZdd�ZdS)z?ThreadedNetworkedTests.test_linetoolong.<locals>.TooLongHandlercSs#|jjdtjdd�dS)Ns* OK r�s
)r<r=rZ_MAXLINE)rrrrrYszFThreadedNetworkedTests.test_linetoolong.<locals>.TooLongHandler.handleN)r*r+r,rYrrrrr�sr�)r3r�r}rr~r�rrrs)rr�r7rrrr�sz'ThreadedNetworkedTests.test_linetoolongcCs7|jt��!}|j|j��WdQRXWdQRXdS)N)r�r3rrrs)rr7rrrr�sz1ThreadedNetworkedTests.test_simple_with_statementcCsl|jt��V}|j|j��*}|jdd�|j|jd�WdQRX|j|j�WdQRXdS)Nr�r�)r�r3rrrsr�rr8r�)rr7r�rrrr�s
z*ThreadedNetworkedTests.test_with_statementcCs�|jt��p}|j|j��D}|jdd�|j|jd�|j�|j|j�WdQRX|j|j�WdQRXdS)Nr�r�)	r�r3rrrsr�rr8r�r�)rr7r�rrrr�s
z1ThreadedNetworkedTests.test_with_statement_logoutN)"r*r+r,r{r�rjrr~rrr�r�rr�r�rr�r�r�r3r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrrrr��s0		 		
	


r�c@s.eZdZeZeZedd��ZdS)�ThreadedNetworkedTestsSSLcCs�tjtj�}tj|_d|_|jt�|jtj	d��@|j
t��)}|j|j
d|�}|j�WdQRXWdQRX|j
t��0}|jd|j
dd|�}|j�WdQRXdS)NTz.hostname '127.0.0.1' doesn't match 'localhost'r�r�r)r0r�r�r�r�r�r�r�r�r�r�r3rrrsry)rr�r7rtrrrr�0s	

		z+ThreadedNetworkedTestsSSL.test_ssl_verifiedN)	r*r+r,r-rjr�rrrr�rrrrr�+sr�Znetworkznetwork resource disabledc@saeZdZdZdZdZdZejZ	dd�Z
dd�Zd	d
�Zdd�Z
d
S)�RemoteIMAPTestzcyrus.andrew.cmu.edu�Z	anonymousr�c
Cs6t|j�� |j|j|j�|_WdQRXdS)N)r�hostrr�portr7)rrrr�setUpNszRemoteIMAPTest.setUpc	Cs7|jdk	r3t|j��|jj�WdQRXdS)N)r7rr�r�)rrrr�tearDownRszRemoteIMAPTest.tearDowncCs�t|j���x$|jjD]}|j|t�qW|jd|jj�|jd|jj�|jj|j|j	�}|j
|dd�WdQRXdS)N�
LOGINDISABLEDzAUTH=ANONYMOUSrrZ)rr�r7r[�assertIsInstance�str�assertInr��username�passwordr)r�cap�rsrrr�test_logincapaWszRemoteIMAPTest.test_logincapac
CsGt|j��1|jj�}d|_|j|dd�WdQRXdS)Nrr�)rr�r7r�r)rr�rrrr�`s	zRemoteIMAPTest.test_logoutN)r*r+r,r�r�r�r�rr~rrr�r�r�r�rrrrr�Es		r�cs.eZdZ�fdd�Zdd�Z�S)�RemoteIMAP_STARTTLSTestc
sKt�j�t|j��(|jj�}|j|dd�WdQRXdS)NrrZ)r5r�rr�r7Zstarttlsr)rr�)r9rrr�ls
zRemoteIMAP_STARTTLSTest.setUpcCsAx$|jjD]}|j|t�q
W|jd|jj�dS)Nr�)r7r[r�r��assertNotIn)rr�rrrr�rsz&RemoteIMAP_STARTTLSTest.test_logincapa)r*r+r,r�r�rr)r9rr�gsr�c@s|eZdZdZeZdd�Zdd�Zdd�Zdd	�Z	d
d�Z
dd
�Zdd�Zdd�Z
dS)�RemoteIMAP_SSLTesti�cCsdS)Nr)rrrrr�}szRemoteIMAP_SSLTest.setUpcCsdS)Nr)rrrrr��szRemoteIMAP_SSLTest.tearDowncCs#tjtj�}|jt�|S)N)r0r�r�Zload_cert_chainr1)rr�rrr�create_ssl_context�s
z%RemoteIMAP_SSLTest.create_ssl_contextc
Cs�zzx!|jD]}|j|t�q
W|jd|j�|jd|j�|j|j|j�}|j|dd�Wd|j	�XdS)Nr�z
AUTH=PLAINrrZ)
r[r�r�r�r�r�r�r�rr�)rr7r�r�rrr�check_logincapa�sz"RemoteIMAP_SSLTest.check_logincapac
Cs@t|j��*|j|j|j�}|j|�WdQRXdS)N)rr�rrr�r�)r�_serverrrrr��sz!RemoteIMAP_SSLTest.test_logincapac
CsSt|j��=|j|j|j�}|j�}|j|dd�WdQRXdS)Nrr�)rr�rrr�r�r)rr�r�rrrr��szRemoteIMAP_SSLTest.test_logoutcCsLt|j��6|jt|j|j|jdtd|j��WdQRXdS)Nr.r�)rr�r}�
ValueErrorrrr�r1r�)rrrr�#test_ssl_context_certfile_exclusive�sz6RemoteIMAP_SSLTest.test_ssl_context_certfile_exclusivecCsLt|j��6|jt|j|j|jdtd|j��WdQRXdS)NZkeyfiler�)rr�r}r�rrr�r1r�)rrrr�"test_ssl_context_keyfile_exclusive�sz5RemoteIMAP_SSLTest.test_ssl_context_keyfile_exclusiveN)r*r+r,r�r�rrr�r�r�r�r�r�rrrrrrr�xsr��__main__)4Ztestr�
import_moduler�
contextlibrrZos.path�osr{rr�inspectZtest.supportrrrrr	Zunittestr
rrr
r0�ImportError�pathrE�dirname�__file__�curdirr1r�ZTestCaserr�r-r�r|r3r_r�Z
skipUnlessr�r�r�Zis_resource_enabledr�r�r�r*�mainrrrr�<module>sZ(
**0	R�'�1 2