a
     Rîh¢¦  ã                   @   sr  d dl mZ d dlmZ d dlmZ d dlZd dlZd dl	Z	d dl
Z
d dlZd dlZd dlZd dlmZmZmZmZmZ d dlmZ d dlZd dlmZ d dlmZmZmZ zd dlZW n eyÎ   dZY n0 ej ej e¡pæejd	¡Z ej ej e¡pejd
¡Z!G dd„ dej"ƒZ#er<G dd„ de	j$ƒZ%ej&Z&nG dd„ dƒZ%dZ&G dd„ de	j'ƒZ(G dd„ dƒZ)G dd„ de)ej"ƒZ*e +ed¡G dd„ de)ej"ƒƒZ,G dd„ dej"ƒZ-e +ed¡G dd„ de-ƒƒZ.e +e /d¡d¡e 0d¡G d d!„ d!ej"ƒƒƒZ1e +ed¡e +e /d¡d¡e 0d¡G d"d#„ d#e1ƒƒƒƒZ2e +ed¡e 0d¡G d$d%„ d%e1ƒƒƒZ3e4d&krne 5¡  dS )'é    )Úsupport)Úsocket_helper)ÚcontextmanagerN)Úreap_threadsÚverboseÚrun_with_tzÚrun_with_localeÚcpython_only)Úhashlib_helper)Úmock)ÚdatetimeÚtimezoneÚ	timedeltazkeycert3.pemzpycacert.pemc                   @   sX   e Zd Zdd„ Zedƒdd„ ƒZdd„ Zedd	d
ƒedƒdd„ ƒƒZdd„ Z	dd„ Z
dS )ÚTestImaplibc                 C   sb   t  d¡}t d¡}|  t |¡|¡ t d¡}|  t |¡|¡ t d¡}|  t |¡|¡ d S )N)	iÐ  é   r   r   r   r   éÿÿÿÿr   r   s.   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"))ÚcalendarZtimegmÚimaplibÚInternaldate2tupleÚassertEqualÚtimeÚmktime)ÚselfÚt0Útt© r   ú9/opt/python-3.9.24/usr/lib/python3.9/test/test_imaplib.pyÚtest_Internaldate2tuple   s    
ÿÿÿz#TestImaplib.test_Internaldate2tuplezMST+07MDT,M4.1.0,M10.5.0c                 C   s   |   t d¡t d¡¡ d S )Ns.   25 (INTERNALDATE "02-Apr-2000 02:30:00 +0000")s.   25 (INTERNALDATE "02-Apr-2000 03:30:00 +0000"))ZassertNotEqualr   r   ©r   r   r   r   Ú"test_Internaldate2tuple_issue10941*   s    ÿÿþz.TestImaplib.test_Internaldate2tuple_issue10941c                 C   s*   ddt  d¡ddt dttddƒƒ¡dgS )Ni ”5wg    eÍÝA)	éñ  é   é   r!   é!   é   r   r   r   )	r    r!   r"   r!   r#   r$   r   r   r   r   i   ú"18-May-2033 05:33:20 +0200")r   Ú	localtimer   Zfromtimestampr   r   r   r   r   r   Ú
timevalues1   s    ÿûzTestImaplib.timevaluesÚLC_ALLÚde_DEÚfr_FRzSTD-1DST,M3.2.0,M11.1.0c                 C   s,   d}|   ¡ D ]}t |¡}|  ||¡ qd S )Nr%   )r'   r   ÚTime2Internaldater   )r   ZexpectedÚtZinternalr   r   r   Útest_Time2Internaldate9   s    
z"TestImaplib.test_Time2Internaldatec                 C   s   |   ¡ D ]}t |¡ qd S ©N)r'   r   r+   )r   r,   r   r   r   Ú,test_that_Time2Internaldate_returns_a_resultD   s    z8TestImaplib.test_that_Time2Internaldate_returns_a_resultc              	   C   sª   t   ¡ D}z| dtjf¡ |  d¡ W n t jy<   Y n0 W d   ƒ n1 sR0    Y  t ¡ }|  t	¡}t 
¡  W d   ƒ n1 sŒ0    Y  |  |jj|¡ d S )NÚ z3Cannot run the test with local IMAP server running.)ÚsocketÚconnectr   Z
IMAP4_PORTZskipTestÚerrorr   Zget_socket_conn_refused_errsÚassertRaisesÚOSErrorÚIMAP4ÚassertInÚ	exceptionÚerrno)r   ÚsZexpected_errnosÚcmr   r   r   Útest_imap4_host_default_valueK   s    
ÿ$&z)TestImaplib.test_imap4_host_default_valueN)Ú__name__Ú
__module__Ú__qualname__r   r   r   r'   r   r-   r/   r<   r   r   r   r   r      s   

r   c                   @   s   e Zd Zdd„ ZdS )ÚSecureTCPServerc                 C   s6   | j  ¡ \}}t ¡ }| t¡ |j|dd}||fS )NT)Zserver_side)r1   ÚacceptÚsslÚ
SSLContextÚload_cert_chainÚCERTFILEZwrap_socket)r   Z	newsocketZfromaddrÚcontextZ
connstreamr   r   r   Úget_request_   s
    
zSecureTCPServer.get_requestN)r=   r>   r?   rG   r   r   r   r   r@   ]   s   r@   c                   @   s   e Zd ZdS )r@   N©r=   r>   r?   r   r   r   r   r@   j   s   c                       sz   e Zd ZejZdZdZ‡ fdd„Zdd„ Z	dd„ Z
d	d
„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Z‡  ZS )ÚSimpleIMAPHandlerNr0   c                    s   t ƒ  ¡  d| j_d | j_d S ©NF)ÚsuperÚsetupÚserverÚis_selectedÚloggedr   ©Ú	__class__r   r   rL   u   s    
zSimpleIMAPHandler.setupc                 C   s$   t rtd| ¡  ƒ | j |¡ d S )NzSENT: %r)r   ÚprintÚstripÚwfileÚwrite©r   Úmessager   r   r   Ú_sendz   s    zSimpleIMAPHandler._sendc                 C   s   |   |d ¡ d S )Nó   
)rX   rV   r   r   r   Ú
_send_line   s    zSimpleIMAPHandler._send_linec                 C   s   |   | d¡¡ d S )NÚASCII)rZ   ÚencoderV   r   r   r   Ú_send_textline‚   s    z SimpleIMAPHandler._send_textlinec                 C   s   |   d |||f¡¡ d S )Nú )r]   Újoin)r   ÚtagÚcoderW   r   r   r   Ú_send_tagged…   s    zSimpleIMAPHandler._send_taggedc                 C   s  |   d¡ d}z&| j d¡}|dkr*W d S ||7 }W n tyH   Y d S 0 | d¡rqXqtrltd| ¡  ƒ | jržz| j 	|¡ W q
 t
yš   d | _Y q
0 q
| d¡ ¡ }|d }|d }|dd … }t| d	| ƒrt| d	| ƒ||ƒ}|r|| _t|ƒ q
|  |d
|d ¡ q
d S )Nz* OK IMAP4rev1ó    r   rY   zGOT: %rr[   r   é   Zcmd_ÚBADz unknown)r]   ZrfileÚreadr5   Úendswithr   rR   rS   ÚcontinuationÚsendÚStopIterationÚdecodeÚsplitÚhasattrÚgetattrÚnextrb   )r   ÚlineÚpartZ	splitliner`   ÚcmdÚargsrh   r   r   r   Úhandleˆ   s:    


zSimpleIMAPHandler.handlec                 C   s4   | j rd| j  nd}|  d| ¡ |  |dd¡ d S )Nz
IMAP4rev1 Ú	IMAP4rev1z* CAPABILITY ÚOKúCAPABILITY completed)Úcapabilitiesr]   rb   )r   r`   rs   Zcapsr   r   r   Úcmd_CAPABILITY²   s    ÿþz SimpleIMAPHandler.cmd_CAPABILITYc                 C   s$   d | j _|  d¡ |  |dd¡ d S )Nz"* BYE IMAP4ref1 Server logging outrv   zLOGOUT completed)rM   rO   r]   rb   ©r   r`   rs   r   r   r   Ú
cmd_LOGOUT¹   s    
zSimpleIMAPHandler.cmd_LOGOUTc                 C   s   |d | j _|  |dd¡ d S )Nr   rv   zLOGIN completed)rM   rO   rb   rz   r   r   r   Ú	cmd_LOGIN¾   s    zSimpleIMAPHandler.cmd_LOGINc                 C   s$   d| j _|  d¡ |  |dd¡ d S )NTó
   * 2 EXISTSrv   ú[READ-WRITE] SELECT completed.)rM   rN   rZ   rb   rz   r   r   r   Ú
cmd_SELECTÂ   s    
zSimpleIMAPHandler.cmd_SELECTc                 C   s2   | j jr d| j _|  |dd¡ n|  |dd¡ d S )NFrv   z*Returned to authenticated state. (Success)re   zNo mailbox selected)rM   rN   rb   rz   r   r   r   Úcmd_UNSELECTÇ   s    zSimpleIMAPHandler.cmd_UNSELECT)r=   r>   r?   r   ÚLOOPBACK_TIMEOUTÚtimeoutrh   rx   rL   rX   rZ   r]   rb   rt   ry   r{   r|   r   r€   Ú__classcell__r   r   rP   r   rI   p   s   *rI   c                   @   s
  e Zd ZdZd;dd„Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zejddddd „ ƒZejdddd!d"„ ƒZd#d$„ Ze d%d&¡d'd(„ ƒZd)d*„ Zd+d,„ Zd-d.„ Zd/d0„ Zd1d2„ Zd3d4„ Zd5d6„ Zd7d8„ Z d9d:„ Z!dS )<ÚNewIMAPTestsMixinNTc                 C   s„   G dd„ d| j ƒ}|  | j¡ |   tjdf|¡| _tj| jd | jj	ddid| _
d| j
_| j
 ¡  |rx| j| jjŽ | _| j| jfS )	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                   @   s   e Zd Zdd„ ZdS )z/NewIMAPTestsMixin._setup.<locals>.TestTCPServerc                 S   s   |   |¡ |  ¡  ‚ dS )zP
                End request and raise the error if one occurs.
                N©Zclose_requestÚserver_close©r   ZrequestZclient_addressr   r   r   Úhandle_errorÚ   s    
z<NewIMAPTestsMixin._setup.<locals>.TestTCPServer.handle_errorN©r=   r>   r?   rˆ   r   r   r   r   ÚTestTCPServerÙ   s   rŠ   r   z-serverÚpoll_intervalç{®Gáz„?©ÚnameÚtargetÚkwargsT)Úserver_classZ
addCleanupÚ_cleanupr   ÚHOSTrM   Ú	threadingÚThreadZ_testMethodNameÚserve_foreverÚthreadÚdaemonÚstartÚ
imap_classÚserver_addressÚclient)r   Zimap_handlerr2   rŠ   r   r   r   Ú_setupÒ   s    	ú
zNewIMAPTestsMixin._setupc                 C   sJ   | j dur | j jdkr | j  ¡  | j ¡  | j ¡  t | j¡ d| _dS )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ÚLOGOUT)rœ   ÚstateÚshutdownrM   r†   r   Újoin_threadr—   r   r   r   r   r’   ó   s    


zNewIMAPTestsMixin._cleanupc                 C   sD   G dd„ dt jƒ}| j|dd\}}| jtjj| jg|j¢R Ž  d S )Nc                   @   s   e Zd Zdd„ ZdS )zONewIMAPTestsMixin.test_EOF_without_complete_welcome_message.<locals>.EOFHandlerc                 S   s   | j  d¡ d S ©Ns   * OK©rT   rU   r   r   r   r   rt     s    zVNewIMAPTestsMixin.test_EOF_without_complete_welcome_message.<locals>.EOFHandler.handleN©r=   r>   r?   rt   r   r   r   r   Ú
EOFHandler  s   r¥   F©r2   )	ÚsocketserverÚStreamRequestHandlerr   r4   r   r6   Úabortrš   r›   )r   r¥   Ú_rM   r   r   r   Ú)test_EOF_without_complete_welcome_message  s
    ÿz;NewIMAPTestsMixin.test_EOF_without_complete_welcome_messagec                 C   sB   G dd„ dt ƒ}| j|dd\}}| jtjj| jg|j¢R Ž  d S )Nc                   @   s   e Zd Zdd„ ZdS )zBNewIMAPTestsMixin.test_line_termination.<locals>.BadNewlineHandlerc                 S   s   |   d¡ |  |dd¡ d S ©Ns   * CAPABILITY IMAP4rev1 AUTH
rv   rw   ©rX   rb   rz   r   r   r   ry     s    
zQNewIMAPTestsMixin.test_line_termination.<locals>.BadNewlineHandler.cmd_CAPABILITYN©r=   r>   r?   ry   r   r   r   r   ÚBadNewlineHandler  s   r¯   Fr¦   )rI   r   r4   r   r6   r©   rš   r›   )r   r¯   rª   rM   r   r   r   Útest_line_termination  s
    ÿz'NewIMAPTestsMixin.test_line_terminationc                 C   st   G dd„ dt ƒ}|  |¡\}}|  |j¡ |  tjjd¡ | d¡ W d   ƒ n1 sZ0    Y  |  |j¡ d S )Nc                   @   s   e Zd ZdZdS )zMNewIMAPTestsMixin.test_enable_raises_error_if_not_AUTH.<locals>.EnableHandlerúAUTH ENABLE UTF8=ACCEPTN©r=   r>   r?   rx   r   r   r   r   ÚEnableHandler  s   r³   zENABLE.*NONAUTHÚfoo)	rI   r   ÚassertFalseÚutf8_enabledÚassertRaisesRegexr   r6   r3   Úenable)r   r³   rœ   rª   r   r   r   Ú$test_enable_raises_error_if_not_AUTH  s    (z6NewIMAPTestsMixin.test_enable_raises_error_if_not_AUTHc                 C   sL   |   t¡\}}|  tjjd¡ | d¡ W d   ƒ n1 s>0    Y  d S )Núdoes not support ENABLEr´   )r   rI   r·   r   r6   r3   r¸   )r   rœ   rª   r   r   r   Ú)test_enable_raises_error_if_no_capability  s
    
ÿz;NewIMAPTestsMixin.test_enable_raises_error_if_no_capabilityc                 C   sh   |   t¡\}}| dd¡\}}|  |d¡ |  tjjd¡ | d¡ W d   ƒ n1 sZ0    Y  d S )NÚuserÚpassrv   rº   úUTF8=ACCEPT)	r   rI   Úloginr   r·   r   r6   r3   r¸   ©r   rœ   rª   ÚtypÚdatar   r   r   Ú.test_enable_UTF8_raises_error_if_not_supported$  s    
ÿz@NewIMAPTestsMixin.test_enable_UTF8_raises_error_if_not_supportedc           	      C   sÈ   G dd„ dt ƒ}|  |¡\}}|  |jd¡ | ddd„ ¡\}}|  |d¡ |  |jd¡ | d	¡\}}|  |d¡ |  |jd
¡ d}| d d d | d
¡¡\}}|  |d¡ |  |jd|  d
¡¡ d S )Nc                   @   s(   e Zd ZdZdd„ Zdd„ Zdd„ ZdS )	zHNewIMAPTestsMixin.test_enable_UTF8_True_append.<locals>.UTF8AppendServerzENABLE UTF8=ACCEPTc                 S   s   |   |dd¡ d S ©Nrv   zENABLE successful©rb   rz   r   r   r   Ú
cmd_ENABLE/  s    zSNewIMAPTestsMixin.test_enable_UTF8_True_append.<locals>.UTF8AppendServer.cmd_ENABLEc                 s   s&   |   d¡ d V | j_|  |dd¡ d S ©Nú+rv   zFAKEAUTH successful©r]   rM   Úresponserb   rz   r   r   r   Úcmd_AUTHENTICATE1  s    

zYNewIMAPTestsMixin.test_enable_UTF8_True_append.<locals>.UTF8AppendServer.cmd_AUTHENTICATEc                 s   s&   |   d¡ d V | j_|  |dd¡ d S ©NrÈ   rv   ZokayrÉ   rz   r   r   r   Ú
cmd_APPEND5  s    

zSNewIMAPTestsMixin.test_enable_UTF8_True_append.<locals>.UTF8AppendServer.cmd_APPENDN)r=   r>   r?   rx   rÆ   rË   rÍ   r   r   r   r   ÚUTF8AppendServer-  s   rÎ   ÚasciiÚMYAUTHc                 S   s   dS ©Ns   faker   ©Úxr   r   r   Ú<lambda>;  rc   z@NewIMAPTestsMixin.test_enable_UTF8_True_append.<locals>.<lambda>rv   ó
   ZmFrZQ==
r¾   úutf-8õ   Subject: Ã¼Ã±Ã­Â©Ã¶Ã°Ã©úUTF8 (%s)
)	rI   r   r   Ú	_encodingÚauthenticaterÊ   r¸   Úappendr\   )	r   rÎ   rœ   rM   ra   rª   Ú
msg_stringrÁ   rÂ   r   r   r   Útest_enable_UTF8_True_append,  s    ÿz.NewIMAPTestsMixin.test_enable_UTF8_True_appendc                 C   s¤   G dd„ dt ƒ}|  |¡\}}| ddd„ ¡\}}|  |d¡ | d¡\}}|  |d¡ |  |j¡ |  tj	j
d¡ | d	d
¡ W d   ƒ n1 s–0    Y  d S )Nc                   @   s    e Zd ZdZdd„ Zdd„ ZdS )zPNewIMAPTestsMixin.test_search_disallows_charset_in_utf8_mode.<locals>.UTF8Serverr±   c                 S   s   |   |dd¡ d S rÄ   rÅ   rz   r   r   r   rÆ   J  s    z[NewIMAPTestsMixin.test_search_disallows_charset_in_utf8_mode.<locals>.UTF8Server.cmd_ENABLEc                 s   s&   |   d¡ d V | j_|  |dd¡ d S rÇ   rÉ   rz   r   r   r   rË   L  s    

zaNewIMAPTestsMixin.test_search_disallows_charset_in_utf8_mode.<locals>.UTF8Server.cmd_AUTHENTICATEN©r=   r>   r?   rx   rÆ   rË   r   r   r   r   Ú
UTF8ServerH  s   rß   rÐ   c                 S   s   dS rÑ   r   rÒ   r   r   r   rÔ   Q  rc   zNNewIMAPTestsMixin.test_search_disallows_charset_in_utf8_mode.<locals>.<lambda>rv   r¾   zcharset.*UTF8r´   Úbar)rI   r   rÚ   r   r¸   Ú
assertTruer¶   r·   r   r6   r3   Úsearch)r   rß   rœ   rª   rÁ   r   r   r   Ú*test_search_disallows_charset_in_utf8_modeG  s    z<NewIMAPTestsMixin.test_search_disallows_charset_in_utf8_modec                 C   sb   G dd„ dt ƒ}|  |¡\}}|  tjjd¡  | ddd„ ¡ W d   ƒ n1 sT0    Y  d S )Nc                   @   s   e Zd Zdd„ ZdS )z6NewIMAPTestsMixin.test_bad_auth_name.<locals>.MyServerc                 S   s   |   |dd |d ¡¡ d S ©NÚNOz#unrecognized authentication type {}r   ©rb   Úformatrz   r   r   r   rË   [  s    ÿzGNewIMAPTestsMixin.test_bad_auth_name.<locals>.MyServer.cmd_AUTHENTICATEN©r=   r>   r?   rË   r   r   r   r   ÚMyServerZ  s   ré   z'unrecognized authentication type METHODÚMETHODc                   S   s   dS ©Nr   r   r   r   r   r   rÔ   a  rc   z6NewIMAPTestsMixin.test_bad_auth_name.<locals>.<lambda>©rI   r   r·   r   r6   r3   rÚ   ©r   ré   rœ   rª   r   r   r   Útest_bad_auth_nameY  s    
ÿz$NewIMAPTestsMixin.test_bad_auth_namec                 C   sb   G dd„ dt ƒ}|  |¡\}}|  tjjd¡  | ddd„ ¡ W d   ƒ n1 sT0    Y  d S )Nc                   @   s   e Zd Zdd„ ZdS )z?NewIMAPTestsMixin.test_invalid_authentication.<locals>.MyServerc                 s   s$   |   d¡ d V | _|  |dd¡ d S ©NrÈ   rå   z[AUTHENTICATIONFAILED] invalid©r]   rÊ   rb   rz   r   r   r   rË   e  s    
zPNewIMAPTestsMixin.test_invalid_authentication.<locals>.MyServer.cmd_AUTHENTICATENrè   r   r   r   r   ré   d  s   ré   z \[AUTHENTICATIONFAILED\] invalidrÐ   c                 S   s   dS rÑ   r   rÒ   r   r   r   rÔ   l  rc   z?NewIMAPTestsMixin.test_invalid_authentication.<locals>.<lambda>rì   rí   r   r   r   Útest_invalid_authenticationc  s    
ÿz-NewIMAPTestsMixin.test_invalid_authenticationc                 C   sP   G dd„ dt ƒ}|  |¡\}}| ddd„ ¡\}}|  |d¡ |  |jd¡ d S )Nc                   @   s   e Zd Zdd„ ZdS )zCNewIMAPTestsMixin.test_valid_authentication_bytes.<locals>.MyServerc                 s   s&   |   d¡ d V | j_|  |dd¡ d S rÇ   rÉ   rz   r   r   r   rË   p  s    

zTNewIMAPTestsMixin.test_valid_authentication_bytes.<locals>.MyServer.cmd_AUTHENTICATENrè   r   r   r   r   ré   o  s   ré   rÐ   c                 S   s   dS rÑ   r   rÒ   r   r   r   rÔ   u  rc   zCNewIMAPTestsMixin.test_valid_authentication_bytes.<locals>.<lambda>rv   rÕ   ©rI   r   rÚ   r   rÊ   ©r   ré   rœ   rM   ra   rª   r   r   r   Útest_valid_authentication_bytesn  s
    z1NewIMAPTestsMixin.test_valid_authentication_bytesc                 C   sP   G dd„ dt ƒ}|  |¡\}}| ddd„ ¡\}}|  |d¡ |  |jd¡ d S )Nc                   @   s   e Zd Zdd„ ZdS )zHNewIMAPTestsMixin.test_valid_authentication_plain_text.<locals>.MyServerc                 s   s&   |   d¡ d V | j_|  |dd¡ d S rÇ   rÉ   rz   r   r   r   rË   {  s    

zYNewIMAPTestsMixin.test_valid_authentication_plain_text.<locals>.MyServer.cmd_AUTHENTICATENrè   r   r   r   r   ré   z  s   ré   rÐ   c                 S   s   dS ©NZfaker   rÒ   r   r   r   rÔ   €  rc   zHNewIMAPTestsMixin.test_valid_authentication_plain_text.<locals>.<lambda>rv   rÕ   rò   ró   r   r   r   Ú$test_valid_authentication_plain_texty  s
    z6NewIMAPTestsMixin.test_valid_authentication_plain_textÚmd5©Zopensslc                 C   sN   G dd„ dt ƒ}|  |¡\}}|  d|jv ¡ | dd¡\}}|  |d¡ d S )Nc                   @   s   e Zd ZdZdd„ ZdS )z@NewIMAPTestsMixin.test_login_cram_md5_bytes.<locals>.AuthHandlerúLOGINDISABLED AUTH=CRAM-MD5c                 s   s:   |   d¡ d V }|dkr(|  |dd¡ n|  |dd¡ d S ©Nz:+ PDE4OTYuNjk3MTcwOTUyQHBvc3RvZmZpY2UucmVzdG9uLm1jaS5uZXQ=s2   dGltIGYxY2E2YmU0NjRiOWVmYTFjY2E2ZmZkNmNmMmQ5ZjMy
rv   zCRAM-MD5 successfulrå   z	No access©r]   rb   ©r   r`   rs   Úrr   r   r   rË   ˆ  s
    
zQNewIMAPTestsMixin.test_login_cram_md5_bytes.<locals>.AuthHandler.cmd_AUTHENTICATEN©r=   r>   r?   rx   rË   r   r   r   r   ÚAuthHandler†  s   rÿ   úAUTH=CRAM-MD5Útimó   tanstaaftanstaafrv   ©rI   r   rá   rx   Úlogin_cram_md5r   ©r   rÿ   rœ   rª   Úretr   r   r   Útest_login_cram_md5_bytes„  s
    z+NewIMAPTestsMixin.test_login_cram_md5_bytesc                 C   sN   G dd„ dt ƒ}|  |¡\}}|  d|jv ¡ | dd¡\}}|  |d¡ d S )Nc                   @   s   e Zd ZdZdd„ ZdS )zENewIMAPTestsMixin.test_login_cram_md5_plain_text.<locals>.AuthHandlerrù   c                 s   s:   |   d¡ d V }|dkr(|  |dd¡ n|  |dd¡ d S rú   rû   rü   r   r   r   rË   š  s
    
zVNewIMAPTestsMixin.test_login_cram_md5_plain_text.<locals>.AuthHandler.cmd_AUTHENTICATENrþ   r   r   r   r   rÿ   ˜  s   rÿ   r   r  Útanstaaftanstaafrv   r  r  r   r   r   Útest_login_cram_md5_plain_text–  s
    z0NewIMAPTestsMixin.test_login_cram_md5_plain_textc                 C   sb   G dd„ dt ƒ}|  |¡\}}|  tjjd¡  | ddd„ ¡ W d   ƒ n1 sT0    Y  d S )Nc                   @   s   e Zd Zdd„ ZdS )z?NewIMAPTestsMixin.test_aborted_authentication.<locals>.MyServerc                 s   s>   |   d¡ d V | _| jdkr,|  |dd¡ n|  |dd¡ d S ©NrÈ   s   *
rå   z[AUTHENTICATIONFAILED] abortedrv   zMYAUTH successfulrð   rz   r   r   r   rË   ª  s    

ýzPNewIMAPTestsMixin.test_aborted_authentication.<locals>.MyServer.cmd_AUTHENTICATENrè   r   r   r   r   ré   ©  s   ré   z \[AUTHENTICATIONFAILED\] abortedrÐ   c                 S   s   d S r.   r   rÒ   r   r   r   rÔ   ·  rc   z?NewIMAPTestsMixin.test_aborted_authentication.<locals>.<lambda>rì   rí   r   r   r   Útest_aborted_authentication¨  s    
ÿz-NewIMAPTestsMixin.test_aborted_authenticationzimaplib._MAXLINEé
   c                 C   sb   G dd„ dt ƒ}| j|dd\}}|  tjjd¡ | j|jŽ  W d   ƒ n1 sT0    Y  d S )Nc                   @   s   e Zd Zdd„ ZdS )z:NewIMAPTestsMixin.test_linetoolong.<locals>.TooLongHandlerc                 S   s   | j  d¡ d S )Ns   * OK xxxxxxxxxxx
r£   r   r   r   r   rt   ¼  s    zANewIMAPTestsMixin.test_linetoolong.<locals>.TooLongHandler.handleNr¤   r   r   r   r   ÚTooLongHandler»  s   r  Fr¦   zgot more than 10 bytes)rI   r   r·   r   r6   r3   rš   r›   )r   r  rª   rM   r   r   r   Útest_linetoolong¹  s    
ÿz"NewIMAPTestsMixin.test_linetoolongc                 C   sB   | j tdd\}}| j|jŽ  W d   ƒ n1 s40    Y  d S )NFr¦   )r   rI   rš   r›   )r   rª   rM   r   r   r   Útest_simple_with_statementÄ  s    z,NewIMAPTestsMixin.test_simple_with_statementc                 C   sª   |   t¡\}}|jd }| jd|d d}|  |jjd ¡ | ¡  | jd|tj	d}|  |jjtj	¡ | ¡  |  
t¡  | jd|dd}W d   ƒ n1 sœ0    Y  d S )Nr   Ú	localhost©r‚   r   )r   rI   r›   rš   r   Úsockr‚   r    r   r   r4   Ú
ValueError)r   rª   rM   Úaddrrœ   r   r   r   Útest_imaplib_timeout_testÉ  s    
z+NewIMAPTestsMixin.test_imaplib_timeout_testc                 C   sh   G dd„ dt ƒ}|  |¡\}}|jd }|  tj¡  | jd|dd}W d   ƒ n1 sZ0    Y  d S )Nc                   @   s   e Zd Zdd„ ZdS )zQNewIMAPTestsMixin.test_imaplib_timeout_functionality_test.<locals>.TimeoutHandlerc                 S   s   t  d¡ t | ¡ d S rë   )r   ÚsleeprI   rt   r   r   r   r   rt   ×  s    
zXNewIMAPTestsMixin.test_imaplib_timeout_functionality_test.<locals>.TimeoutHandler.handleNr¤   r   r   r   r   ÚTimeoutHandlerÖ  s   r  r   r  gü©ñÒMbP?r  )rI   r   r›   r4   r1   r‚   rš   )r   r  rª   rM   r  rœ   r   r   r   Ú'test_imaplib_timeout_functionality_testÕ  s
    
z9NewIMAPTestsMixin.test_imaplib_timeout_functionality_testc                 C   sh   | j tdd\}}| j|jŽ *}| dd¡ |  |jd¡ W d   ƒ n1 sN0    Y  |  |j¡ d S ©NFr¦   r¼   r½   )r   rI   rš   r›   r¿   r   rO   ÚassertIsNone©r   rª   rM   Úimapr   r   r   Útest_with_statementà  s
    ,z%NewIMAPTestsMixin.test_with_statementc                 C   s|   | j tdd\}}| j|jŽ >}| dd¡ |  |jd¡ | ¡  |  |j¡ W d   ƒ n1 sb0    Y  |  |j¡ d S r  )	r   rI   rš   r›   r¿   r   rO   Úlogoutr  r  r   r   r   Útest_with_statement_logoutç  s    *z,NewIMAPTestsMixin.test_with_statement_logoutc                 C   sL   |   t¡\}}| dd¡\}}|  |d¡ |  |d d¡ |  |jd¡ d S )Nr¼   r½   rv   r   ó   LOGIN completedÚAUTH)r   rI   r¿   r   rŸ   rÀ   r   r   r   Ú
test_loginó  s
    zNewIMAPTestsMixin.test_loginc                 C   s€   |   t¡\}}| dd¡\}}|  |d¡ |  |d d¡ | ¡ \}}|  |d||f¡ |  |d d||f¡ |  |jd¡ d S )	Nr¼   r½   rv   r   r   ÚBYEs   IMAP4ref1 Server logging outrž   )r   rI   r¿   r   r  rŸ   rÀ   r   r   r   Útest_logoutú  s    zNewIMAPTestsMixin.test_logoutc                 C   sV   G dd„ dt ƒ}|  |¡\}}| dd¡ | ¡ \}}|  |d¡ |  |d d¡ d S )Nc                   @   s   e Zd Zdd„ ZdS )z,NewIMAPTestsMixin.test_lsub.<locals>.LsubCmdc                 S   s   |   d¡ |  |dd¡S )Nz* LSUB () "." directoryArv   zLSUB completedrû   rz   r   r   r   Úcmd_LSUB  s    
z5NewIMAPTestsMixin.test_lsub.<locals>.LsubCmd.cmd_LSUBN)r=   r>   r?   r%  r   r   r   r   ÚLsubCmd  s   r&  r¼   r½   rv   r   s   () "." directoryA)rI   r   r¿   Zlsubr   )r   r&  rœ   rª   rÁ   rÂ   r   r   r   Ú	test_lsub  s    zNewIMAPTestsMixin.test_lsubc                 C   s|   |   t¡\}}| dd¡ | ¡ \}}|  |d¡ |  |d d¡ | ¡ \}}|  |d¡ |  |d d¡ |  |jd¡ d S )Nr¼   r½   rv   r   ó   2s*   Returned to authenticated state. (Success)r!  )r   rI   r¿   Úselectr   ZunselectrŸ   rÀ   r   r   r   Útest_unselect  s    zNewIMAPTestsMixin.test_unselect)T)"r=   r>   r?   rœ   r   r’   r«   r°   r¹   r»   rÃ   rÝ   rã   rî   rñ   rô   rö   r
   Úrequires_hashdigestr  r	  r  r   Úpatchr  r  r  r  r  r  r"  r$  r'  r*  r   r   r   r   r„   Ï   s<   
!			






r„   c                   @   s   e Zd ZejZejZdS )ÚNewIMAPTestsN)	r=   r>   r?   r   r6   rš   r§   Ú	TCPServerr‘   r   r   r   r   r-    s   r-  zSSL not availablec                   @   s0   e Zd ZeZeZdd„ Zdd„ Ze	dd„ ƒZ
dS )ÚNewIMAPSSLTestsc                 C   sŽ   t  t j¡}|  |jt j¡ |  |jd¡ | t¡ |  	t j
d¡8 |  t¡\}}| j|jd|iŽ}| ¡  W d   ƒ n1 s€0    Y  d S )NTú=IP address mismatch, certificate is not valid for '127.0.0.1'Ússl_context)rB   rC   ÚPROTOCOL_TLS_CLIENTr   Úverify_modeZCERT_REQUIREDÚcheck_hostnameÚload_verify_locationsÚCAFILEr·   ÚCertificateErrorr   rI   rš   r›   r    ©r   r1  rª   rM   rœ   r   r   r   Útest_ssl_raises&  s    
ÿ
ÿzNewIMAPSSLTests.test_ssl_raisesc                 C   sF   t  t j¡}| t¡ |  t¡\}}| jd|jd |d}| 	¡  d S )Nr  r   ©r1  )
rB   rC   r2  r5  r6  r   rI   rš   r›   r    r8  r   r   r   Útest_ssl_verified4  s    
ÿz!NewIMAPSSLTests.test_ssl_verifiedc              
   C   s¢   t  dtf¡€ tj | jd¡P tj | jd¡  | jddtd W d   ƒ n1 sX0    Y  W d   ƒ n1 sv0    Y  W d   ƒ n1 s”0    Y  d S )Nr0   ÚopenZ_connectr  é   )Úcertfile)r   Zcheck_warningsÚDeprecationWarningr   r,  Úobjectrš   rE   r   r   r   r   Útest_certfile_arg_warn?  s    z&NewIMAPSSLTests.test_certfile_arg_warnN)r=   r>   r?   Ú	IMAP4_SSLrš   r@   r‘   r9  r;  r	   rA  r   r   r   r   r/  !  s   r/  c                   @   s>  e Zd ZejZejZdd„ Z	dd„ Z
edd„ ƒZedd„ ƒZed	d
„ ƒZedd„ ƒZedd„ ƒZedd„ ƒZG dd„ deƒZedd„ ƒZedd„ ƒZedd„ ƒZedd„ ƒZedd„ ƒZedd„ ƒZedd „ ƒZed!d"„ ƒZeejd#d$d%d&d'„ ƒƒZed(d)„ ƒZ d*d+„ Z!ed,d-„ ƒZ"ed.d/„ ƒZ#ed0d1„ ƒZ$ed2d3„ ƒZ%d4S )5ÚThreadedNetworkedTestsc                 C   s¨   G dd„ d| j ƒ}trtdƒ |||ƒ}|  |j|j ¡ ¡ trjtdƒ td|ƒ td| j ƒ td|jƒ tj	d| j  |j
d	d
id}d|_| ¡  tr tdƒ ||fS )Nc                   @   s   e Zd Zdd„ ZdS )z4ThreadedNetworkedTests.make_server.<locals>.MyServerc                 S   s   |   |¡ |  ¡  ‚ d S r.   r…   r‡   r   r   r   rˆ   M  s    
zAThreadedNetworkedTests.make_server.<locals>.MyServer.handle_errorNr‰   r   r   r   r   ré   L  s   ré   zcreating serverzserver createdzADDR =zCLASS =zHDLR =z
%s servingr‹   rŒ   r   Tzserver running)r‘   r   rR   r   r›   r1   ÚgetsocknameZRequestHandlerClassr”   r•   r–   r˜   r™   )r   r  Úhdlrré   rM   r,   r   r   r   Úmake_serverJ  s(    

úz"ThreadedNetworkedTests.make_serverc                 C   s4   t rtdƒ | ¡  | ¡  | ¡  t r0tdƒ d S )Nzwaiting for serverÚdone)r   rR   r    r†   r_   )r   rM   r—   r   r   r   Úreap_serverj  s    z"ThreadedNetworkedTests.reap_serverc              
   c   s@   |   tjdf|¡\}}z|V  W |  ||¡ n|  ||¡ 0 d S )Nr   )rF  r   r“   rH  )r   rE  rM   r—   r   r   r   Úreaped_servers  s    z$ThreadedNetworkedTests.reaped_serverc              	   c   s\   |   |¡>}| j|jŽ }z||fV  W | ¡  n
| ¡  0 W d   ƒ n1 sN0    Y  d S r.   )rI  rš   r›   r  )r   rE  rM   rœ   r   r   r   Úreaped_pair{  s
    z"ThreadedNetworkedTests.reaped_pairc                 C   sB   |   t¡$}| j|jŽ }| ¡  W d   ƒ n1 s40    Y  d S r.   )rI  rI   rš   r›   r    ©r   rM   rœ   r   r   r   Útest_connect„  s    z#ThreadedNetworkedTests.test_connectc                 C   sÀ   G dd„ dt ƒ}|  |¡’\}}| ddd„ ¡\}}|  |d¡ |  |jd¡ | d¡ | d	d
d¡\}\}|  d|¡ | d¡ | d¡\}\}|  d|¡ W d   ƒ n1 s²0    Y  d S )Nc                       s4   e Zd Z‡ fdd„Zdd„ Zdd„ Zdd„ Z‡  ZS )	zEThreadedNetworkedTests.test_bracket_flags.<locals>.BracketFlagHandlerc                    s   g d¢| _ tƒ  ¡  d S )N)ZAnsweredZFlaggedZDeletedZSeenZDraft)ÚflagsrK   rt   r   rP   r   r   rt   •  s    
zLThreadedNetworkedTests.test_bracket_flags.<locals>.BracketFlagHandler.handlec                 s   s&   |   d¡ d V | j_|  |dd¡ d S rÇ   rÉ   rz   r   r   r   rË   ™  s    

zVThreadedNetworkedTests.test_bracket_flags.<locals>.BracketFlagHandler.cmd_AUTHENTICATEc                 S   s^   d  | j¡}|  d|  d¡¡ |  d¡ |  d¡ d| }|  | d¡¡ |  |dd¡ d S )	Nú \z* FLAGS (%s)rÏ   r}   s
   * 0 RECENTz-* OK [PERMANENTFLAGS %s \*)] Flags permitted.rv   r~   )r_   rM  rZ   r\   rb   )r   r`   rs   Zflag_msgÚmsgr   r   r   r   ž  s    

ÿzPThreadedNetworkedTests.test_bracket_flags.<locals>.BracketFlagHandler.cmd_SELECTc                 S   sf   |d   d¡  d¡ ¡ }| j |¡ dd | j¡ }d|d |f }|  | d¡¡ |  |d	d
¡ d S )Nrd   ú(ú)z(FLAGS (%s))rN  z* %s FETCH %sr   rÏ   rv   zSTORE completed.)rS   rl   rM  Úextendr_   rZ   r\   rb   )r   r`   rs   Z	new_flagsZ	flags_msgrO  r   r   r   Ú	cmd_STORE¨  s    zOThreadedNetworkedTests.test_bracket_flags.<locals>.BracketFlagHandler.cmd_STORE)r=   r>   r?   rt   rË   r   rS  rƒ   r   r   rP   r   ÚBracketFlagHandler“  s   
rT  rÐ   c                 S   s   dS rÑ   r   rÒ   r   r   r   rÔ   ±  rc   z;ThreadedNetworkedTests.test_bracket_flags.<locals>.<lambda>rv   rÕ   Útestó   1z+FLAGSz[test]s   [test]ZPERMANENTFLAGS)rI   rJ  rÚ   r   rÊ   r)  Ústorer7   )r   rT  rM   rœ   ra   rÂ   rÁ   r   r   r   Útest_bracket_flagsŠ  s    	

z)ThreadedNetworkedTests.test_bracket_flagsc                 C   s\   G dd„ dt jƒ}|  |¡,}| jtjj| jg|j¢R Ž  W d   ƒ n1 sN0    Y  d S )Nc                   @   s   e Zd Zdd„ ZdS )z9ThreadedNetworkedTests.test_issue5949.<locals>.EOFHandlerc                 S   s   | j  d¡ d S r¢   r£   r   r   r   r   rt   ¿  s    z@ThreadedNetworkedTests.test_issue5949.<locals>.EOFHandler.handleNr¤   r   r   r   r   r¥   ¾  s   r¥   )	r§   r¨   rI  r4   r   r6   r©   rš   r›   )r   r¥   rM   r   r   r   Útest_issue5949»  s    
ÿÿz%ThreadedNetworkedTests.test_issue5949c                 C   sZ   G dd„ dt ƒ}|  |¡,}| jtjj| jg|j¢R Ž  W d   ƒ n1 sL0    Y  d S )Nc                   @   s   e Zd Zdd„ ZdS )zGThreadedNetworkedTests.test_line_termination.<locals>.BadNewlineHandlerc                 S   s   |   d¡ |  |dd¡ d S r¬   r­   rz   r   r   r   ry   Ì  s    
zVThreadedNetworkedTests.test_line_termination.<locals>.BadNewlineHandler.cmd_CAPABILITYNr®   r   r   r   r   r¯   Ê  s   r¯   )rI   rI  r4   r   r6   r©   rš   r›   )r   r¯   rM   r   r   r   r°   Ç  s    
ÿÿz,ThreadedNetworkedTests.test_line_terminationc                   @   s    e Zd ZdZdd„ Zdd„ ZdS )z!ThreadedNetworkedTests.UTF8Serverr±   c                 C   s   |   |dd¡ d S rÄ   rÅ   rz   r   r   r   rÆ   ×  s    z,ThreadedNetworkedTests.UTF8Server.cmd_ENABLEc                 c   s&   |   d¡ d V | j_|  |dd¡ d S rÇ   rÉ   rz   r   r   r   rË   Ú  s    

z2ThreadedNetworkedTests.UTF8Server.cmd_AUTHENTICATENrÞ   r   r   r   r   rß   Ô  s   rß   c                 C   s`   |   | j¡@\}}|  |j¡ |  tjj|jd¡ |  |j¡ W d   ƒ n1 sR0    Y  d S )Nr´   )	rJ  rß   rµ   r¶   r4   r   r6   r3   r¸   rK  r   r   r   r¹   ß  s    z;ThreadedNetworkedTests.test_enable_raises_error_if_not_AUTHc                 C   sX   G dd„ d| j ƒ}|  |¡(\}}|  tjj|jd¡ W d   ƒ n1 sJ0    Y  d S )Nc                   @   s   e Zd ZdZdS )zXThreadedNetworkedTests.test_enable_raises_error_if_no_capability.<locals>.NoEnableServerr!  Nr²   r   r   r   r   ÚNoEnableServerê  s   rZ  r´   )rß   rJ  r4   r   r6   r3   r¸   )r   rZ  rM   rœ   r   r   r   r»   è  s    z@ThreadedNetworkedTests.test_enable_raises_error_if_no_capabilityc              	   C   s–   G dd„ dt ƒ}|  tjj¡d |  |¡:\}}| dd¡\}}|  |d¡ | d¡ W d   ƒ n1 sj0    Y  W d   ƒ n1 sˆ0    Y  d S )Nc                   @   s   e Zd ZdS )z\ThreadedNetworkedTests.test_enable_UTF8_raises_error_if_not_supported.<locals>.NonUTF8ServerNrH   r   r   r   r   ÚNonUTF8Serverñ  s   r[  r¼   r½   rv   r¾   )	rI   r4   r   r6   r3   rJ  r¿   r   r¸   )r   r[  rM   rœ   rÁ   rÂ   r   r   r   rÃ   ï  s    
zEThreadedNetworkedTests.test_enable_UTF8_raises_error_if_not_supportedc           	   	   C   sê   G dd„ d| j ƒ}|  |¡º\}}|  |jd¡ | ddd„ ¡\}}|  |d¡ |  |jd¡ | d	¡\}}|  |d¡ |  |jd
¡ d}| d d d | d
¡¡\}}|  |d¡ |  |jd|  d
¡¡ W d   ƒ n1 sÜ0    Y  d S )Nc                   @   s   e Zd Zdd„ ZdS )zMThreadedNetworkedTests.test_enable_UTF8_True_append.<locals>.UTF8AppendServerc                 s   s&   |   d¡ d V | j_|  |dd¡ d S rÌ   rÉ   rz   r   r   r   rÍ   þ  s    

zXThreadedNetworkedTests.test_enable_UTF8_True_append.<locals>.UTF8AppendServer.cmd_APPENDN)r=   r>   r?   rÍ   r   r   r   r   rÎ   ý  s   rÎ   rÏ   rÐ   c                 S   s   dS rÑ   r   rÒ   r   r   r   rÔ     rc   zEThreadedNetworkedTests.test_enable_UTF8_True_append.<locals>.<lambda>rv   rÕ   r¾   rÖ   r×   rØ   )	rß   rJ  r   rÙ   rÚ   rÊ   r¸   rÛ   r\   )	r   rÎ   rM   rœ   ra   rª   rÜ   rÁ   rÂ   r   r   r   rÝ   ú  s(    ÿÿþz3ThreadedNetworkedTests.test_enable_UTF8_True_appendc                 C   s   |   | j¡p\}}| ddd„ ¡\}}|  |d¡ | d¡\}}|  |d¡ |  |j¡ |  tj	j
|jdd¡ W d   ƒ n1 s‚0    Y  d S )NrÐ   c                 S   s   dS rÑ   r   rÒ   r   r   r   rÔ     rc   zSThreadedNetworkedTests.test_search_disallows_charset_in_utf8_mode.<locals>.<lambda>rv   r¾   r´   rà   )rJ  rß   rÚ   r   r¸   rá   r¶   r4   r   r6   r3   râ   )r   rM   rœ   rÁ   rª   r   r   r   rã     s    zAThreadedNetworkedTests.test_search_disallows_charset_in_utf8_modec              	   C   s€   G dd„ dt ƒ}|  |¡R\}}|  tjj¡  | ddd„ ¡ W d   ƒ n1 sT0    Y  W d   ƒ n1 sr0    Y  d S )Nc                   @   s   e Zd Zdd„ ZdS )z;ThreadedNetworkedTests.test_bad_auth_name.<locals>.MyServerc                 S   s   |   |dd |d ¡¡ d S rä   ræ   rz   r   r   r   rË   '  s    ÿzLThreadedNetworkedTests.test_bad_auth_name.<locals>.MyServer.cmd_AUTHENTICATENrè   r   r   r   r   ré   %  s   ré   rê   c                   S   s   dS rë   r   r   r   r   r   rÔ   -  rc   z;ThreadedNetworkedTests.test_bad_auth_name.<locals>.<lambda>©rI   rJ  r4   r   r6   r3   rÚ   )r   ré   rM   rœ   r   r   r   rî   "  s    z)ThreadedNetworkedTests.test_bad_auth_namec              	   C   s„   G dd„ dt ƒ}|  |¡V\}}|  tjj¡$ | ddd„ ¡\}}W d   ƒ n1 sX0    Y  W d   ƒ n1 sv0    Y  d S )Nc                   @   s   e Zd Zdd„ ZdS )zDThreadedNetworkedTests.test_invalid_authentication.<locals>.MyServerc                 s   s$   |   d¡ d V | _|  |dd¡ d S rï   rð   rz   r   r   r   rË   4  s    
zUThreadedNetworkedTests.test_invalid_authentication.<locals>.MyServer.cmd_AUTHENTICATENrè   r   r   r   r   ré   2  s   ré   rÐ   c                 S   s   dS rÑ   r   rÒ   r   r   r   rÔ   ;  rc   zDThreadedNetworkedTests.test_invalid_authentication.<locals>.<lambda>r\  ©r   ré   rM   rœ   ra   rÂ   r   r   r   rñ   /  s    z2ThreadedNetworkedTests.test_invalid_authenticationc                 C   sÌ   G dd„ dt ƒ}|  |¡B\}}| ddd„ ¡\}}|  |d¡ |  |jd¡ W d   ƒ n1 sb0    Y  |  |¡B\}}| ddd„ ¡\}}|  |d¡ |  |jd¡ W d   ƒ n1 s¾0    Y  d S )	Nc                   @   s   e Zd Zdd„ ZdS )zBThreadedNetworkedTests.test_valid_authentication.<locals>.MyServerc                 s   s&   |   d¡ d V | j_|  |dd¡ d S rÇ   rÉ   rz   r   r   r   rË   B  s    

zSThreadedNetworkedTests.test_valid_authentication.<locals>.MyServer.cmd_AUTHENTICATENrè   r   r   r   r   ré   @  s   ré   rÐ   c                 S   s   dS rÑ   r   rÒ   r   r   r   rÔ   H  rc   zBThreadedNetworkedTests.test_valid_authentication.<locals>.<lambda>rv   rÕ   c                 S   s   dS rõ   r   rÒ   r   r   r   rÔ   N  rc   )rI   rJ  rÚ   r   rÊ   r]  r   r   r   Útest_valid_authentication=  s    ÿ"ÿz0ThreadedNetworkedTests.test_valid_authenticationr÷   Trø   c                 C   sÈ   G dd„ dt ƒ}|  |¡@\}}|  d|jv ¡ | dd¡\}}|  |d¡ W d   ƒ n1 s`0    Y  |  |¡@\}}|  d|jv ¡ | dd¡\}}|  |d¡ W d   ƒ n1 sº0    Y  d S )Nc                   @   s   e Zd ZdZdd„ ZdS )z?ThreadedNetworkedTests.test_login_cram_md5.<locals>.AuthHandlerrù   c                 s   s:   |   d¡ d V }|dkr(|  |dd¡ n|  |dd¡ d S rú   rû   rü   r   r   r   rË   [  s
    
zPThreadedNetworkedTests.test_login_cram_md5.<locals>.AuthHandler.cmd_AUTHENTICATENrþ   r   r   r   r   rÿ   W  s   rÿ   r   r  r  rv   r  )rI   rJ  rá   rx   r  r   )r   rÿ   rM   rœ   r  rÂ   r   r   r   Útest_login_cram_md5S  s    *z*ThreadedNetworkedTests.test_login_cram_md5c              	   C   s„   G dd„ dt ƒ}|  |¡V\}}|  tjj¡$ | ddd„ ¡\}}W d   ƒ n1 sX0    Y  W d   ƒ n1 sv0    Y  d S )Nc                   @   s   e Zd Zdd„ ZdS )zDThreadedNetworkedTests.test_aborted_authentication.<locals>.MyServerc                 s   s>   |   d¡ d V | _| jdkr,|  |dd¡ n|  |dd¡ d S r
  rð   rz   r   r   r   rË   u  s
    

zUThreadedNetworkedTests.test_aborted_authentication.<locals>.MyServer.cmd_AUTHENTICATENrè   r   r   r   r   ré   s  s   ré   rÐ   c                 S   s   d S r.   r   rÒ   r   r   r   rÔ   €  rc   zDThreadedNetworkedTests.test_aborted_authentication.<locals>.<lambda>r\  r]  r   r   r   r  p  s    z2ThreadedNetworkedTests.test_aborted_authenticationc                 C   sZ   G dd„ dt ƒ}|  |¡,}| jtjj| jg|j¢R Ž  W d   ƒ n1 sL0    Y  d S )Nc                   @   s   e Zd Zdd„ ZdS )z?ThreadedNetworkedTests.test_linetoolong.<locals>.TooLongHandlerc                 S   s   | j  dtjd  d ¡ d S )Ns   * OK ó   xrY   )rT   rU   r   Z_MAXLINEr   r   r   r   rt   …  s    zFThreadedNetworkedTests.test_linetoolong.<locals>.TooLongHandler.handleNr¤   r   r   r   r   r  „  s   r  )rI   rI  r4   r   r6   r3   rš   r›   )r   r  rM   r   r   r   r  ƒ  s    
ÿÿz'ThreadedNetworkedTests.test_linetoolongc                    sÈ   d‰ G ‡ fdd„dt ƒ}tddƒD ] }d|> ‰ |  dˆ › ¡t |  |¡J}|  tjj¡ | j|j	Ž  W d   ƒ n1 s|0    Y  W d   ƒ n1 sš0    Y  W d   ƒ q"1 s¸0    Y  q"d S )Nr   c                       s   e Zd Z‡ fdd„ZdS )zGThreadedNetworkedTests.test_truncated_large_literal.<locals>.BadHandlerc                    s   |   dˆ  ¡ |   d¡ d S )Nz	* OK {%d}ru   )r]   r   ©Úsizer   r   rt   ‘  s    zNThreadedNetworkedTests.test_truncated_large_literal.<locals>.BadHandler.handleNr¤   r   ra  r   r   Ú
BadHandler  s   rc  é   é@   r   zsize=2e)
rI   ÚrangeZsubTestrI  r4   r   r6   r©   rš   r›   )r   rc  ZexponentrM   r   ra  r   Útest_truncated_large_literal  s    z3ThreadedNetworkedTests.test_truncated_large_literalc              	   C   sZ   |   t¡<}| j|jŽ  W d   ƒ n1 s.0    Y  W d   ƒ n1 sL0    Y  d S r.   )rI  rI   rš   r›   )r   rM   r   r   r   r  œ  s    z1ThreadedNetworkedTests.test_simple_with_statementc              	   C   s€   |   t¡b}| j|jŽ *}| dd¡ |  |jd¡ W d   ƒ n1 sH0    Y  |  |j¡ W d   ƒ n1 sr0    Y  d S ©Nr¼   r½   )rI  rI   rš   r›   r¿   r   rO   r  ©r   rM   r  r   r   r   r  £  s
    ,z*ThreadedNetworkedTests.test_with_statementc              	   C   s”   |   t¡v}| j|jŽ >}| dd¡ |  |jd¡ | ¡  |  |j¡ W d   ƒ n1 s\0    Y  |  |j¡ W d   ƒ n1 s†0    Y  d S rh  )	rI  rI   rš   r›   r¿   r   rO   r  r  ri  r   r   r   r  «  s    *z1ThreadedNetworkedTests.test_with_statement_logoutN)&r=   r>   r?   r§   r.  r‘   r   r6   rš   rF  rH  r   rI  rJ  r   rL  rX  rY  r°   rI   rß   r¹   r»   rÃ   rÝ   rã   rî   rñ   r^  r
   r+  r_  r  r  rg  r  r  r  r   r   r   r   rC  F  s^    	



0







	







rC  c                   @   s    e Zd ZeZeZedd„ ƒZdS )ÚThreadedNetworkedTestsSSLc              	   C   sÔ   t  t j¡}| t¡ |  t jd¡T |  t¡*}| j	|j
d|iŽ}| ¡  W d   ƒ n1 s`0    Y  W d   ƒ n1 s~0    Y  |  t¡.}| j	d|j
d |d}| ¡  W d   ƒ n1 sÆ0    Y  d S )Nr0  r1  r  r   r:  )rB   rC   r2  r5  r6  r·   r7  rI  rI   rš   r›   r    )r   r1  rM   rœ   r   r   r   r;  ¼  s     
þ
ÿDÿz+ThreadedNetworkedTestsSSL.test_ssl_verifiedN)	r=   r>   r?   r@   r‘   rB  rš   r   r;  r   r   r   r   rj  ·  s   rj  Únetworkznetwork resource disabledz'cyrus.andrew.cmu.edu blocks connectionsc                   @   sB   e Zd ZdZdZdZdZejZ	dd„ Z
dd„ Zd	d
„ Zdd„ ZdS )ÚRemoteIMAPTestzcyrus.andrew.cmu.edur=  Z	anonymousr½   c                 C   sB   t  | j¡" |  | j| j¡| _W d   ƒ n1 s40    Y  d S r.   )r   Útransient_internetÚhostrš   ÚportrM   r   r   r   r   ÚsetUpÚ  s    zRemoteIMAPTest.setUpc                 C   sD   | j d ur@t | j¡ | j  ¡  W d   ƒ n1 s60    Y  d S r.   )rM   r   rm  rn  r  r   r   r   r   ÚtearDownÞ  s    
zRemoteIMAPTest.tearDownc                 C   sŒ   t  | j¡l | jjD ]}|  |t¡ q|  d| jj¡ |  d| jj¡ | j | j	| j
¡}|  |d d¡ W d   ƒ n1 s~0    Y  d S )NÚLOGINDISABLEDzAUTH=ANONYMOUSr   rv   )r   rm  rn  rM   rx   ÚassertIsInstanceÚstrr7   r¿   ÚusernameÚpasswordr   )r   ÚcapÚrsr   r   r   Útest_logincapaã  s    zRemoteIMAPTest.test_logincapac                 C   sR   t  | j¡2 | j ¡ }d | _|  |d d|¡ W d   ƒ n1 sD0    Y  d S ©Nr   r#  )r   rm  rn  rM   r  r   ©r   rx  r   r   r   r$  ì  s    
zRemoteIMAPTest.test_logoutN)r=   r>   r?   rn  ro  ru  rv  r   r6   rš   rp  rq  ry  r$  r   r   r   r   rl  Ð  s   	rl  c                       s$   e Zd Z‡ fdd„Zdd„ Z‡  ZS )ÚRemoteIMAP_STARTTLSTestc                    sT   t ƒ  ¡  t | j¡* | j ¡ }|  |d d¡ W d   ƒ n1 sF0    Y  d S )Nr   rv   )rK   rp  r   rm  rn  rM   Zstarttlsr   r{  rP   r   r   rp  ù  s    

zRemoteIMAP_STARTTLSTest.setUpc                 C   s.   | j jD ]}|  |t¡ q|  d| j j¡ d S )Nrr  )rM   rx   rs  rt  ÚassertNotIn)r   rw  r   r   r   ry  ÿ  s    z&RemoteIMAP_STARTTLSTest.test_logincapa)r=   r>   r?   rp  ry  rƒ   r   r   rP   r   r|  ó  s   r|  c                   @   sT   e Zd ZdZeZdd„ Zdd„ Zdd„ Zdd	„ Z	d
d„ Z
dd„ Zdd„ Zdd„ ZdS )ÚRemoteIMAP_SSLTestiá  c                 C   s   d S r.   r   r   r   r   r   rp    s    zRemoteIMAP_SSLTest.setUpc                 C   s   d S r.   r   r   r   r   r   rq    s    zRemoteIMAP_SSLTest.tearDownc                 C   s(   t  t j¡}d|_t j|_| t¡ |S rJ   )rB   rC   r2  r4  Z	CERT_NONEr3  rD   rE   )r   r1  r   r   r   Úcreate_ssl_context  s
    
z%RemoteIMAP_SSLTest.create_ssl_contextc                 C   sp   z`|j D ]}|  |t¡ q|  d|j ¡ |  d|j ¡ | | j| j¡}|  |d d¡ W | 	¡  n
| 	¡  0 d S )Nrr  z
AUTH=PLAINr   rv   )
rx   rs  rt  r}  r7   r¿   ru  rv  r   r  )r   rM   rw  rx  r   r   r   Úcheck_logincapa  s    
z"RemoteIMAP_SSLTest.check_logincapac                 C   sJ   t  | j¡* |  | j| j¡}|  |¡ W d   ƒ n1 s<0    Y  d S r.   )r   rm  rn  rš   ro  r€  )r   Ú_serverr   r   r   ry  #  s    z!RemoteIMAP_SSLTest.test_logincapac                 C   sZ   t  | j¡: |  | j| j¡}| ¡ }|  |d d|¡ W d   ƒ n1 sL0    Y  d S rz  )r   rm  rn  rš   ro  r  r   )r   r  rx  r   r   r   r$  (  s    zRemoteIMAP_SSLTest.test_logoutc              	   C   sP   t  | j¡0 | jt| j| j| jt|  ¡ d W d   ƒ n1 sB0    Y  d S )N)r>  r1  ©	r   rm  rn  r4   r  rš   ro  rE   r  r   r   r   r   Ú#test_ssl_context_certfile_exclusive.  s
    þz6RemoteIMAP_SSLTest.test_ssl_context_certfile_exclusivec              	   C   sP   t  | j¡0 | jt| j| j| jt|  ¡ d W d   ƒ n1 sB0    Y  d S )N)Zkeyfiler1  r‚  r   r   r   r   Ú"test_ssl_context_keyfile_exclusive4  s
    þz5RemoteIMAP_SSLTest.test_ssl_context_keyfile_exclusiveN)r=   r>   r?   ro  rB  rš   rp  rq  r  r€  ry  r$  rƒ  r„  r   r   r   r   r~    s   r~  Ú__main__)6rU  r   Ztest.supportr   Ú
contextlibr   r   Zos.pathÚosr§   r   r   r”   r1   r   r   r   r   r	   r
   Zunittestr   r   r   r   rB   ÚImportErrorÚpathr_   ÚdirnameÚ__file__ÚcurdirrE   r6  ZTestCaser   r.  r@   rB  r¨   rI   r„   r-  Z
skipUnlessr/  rC  rj  Zis_resource_enabledÚskiprl  r|  r~  r=   Úmainr   r   r   r   Ú<module>   sl   
@	_  O
$  s

ÿ 

ÿ
4
