o
    HXîh²ª  ã                   @   s†  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 d dlmZ d dl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yq   dZY nw 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 0d¡d ¡e 1d!¡G d"d#„ d#ej#ƒƒƒZ2e ,ed¡e ,e 0d¡d ¡e 1d!¡G d$d%„ d%e2ƒƒƒƒZ3e ,ed¡e 1d!¡G d&d'„ d'e2ƒƒƒZ4e5d(krAe 6¡  dS dS ))é    )Úsupport)Úsocket_helper)ÚcontextmanagerN)ÚverboseÚrun_with_tzÚrun_with_localeÚcpython_only)Úhashlib_helper)Úthreading_helper)Úwarnings_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   ú;/opt/python-3.10.19/usr/lib/python3.10/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   Ú
timevalues3   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_Time2Internaldate;   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_resultF   s   ÿz8TestImaplib.test_that_Time2Internaldate_returns_a_resultc              	   C   sª   t   ¡ "}z| dtjf¡ |  d¡ W n
 t jy   Y nw W d   ƒ n1 s)w   Y  t ¡ }|  t	¡}t 
¡  W d   ƒ n1 sFw   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_valueM   s    
ÿÿ€û	
ÿz)TestImaplib.test_imap4_host_default_valueN)Ú__name__Ú
__module__Ú__qualname__r   r   r    r(   r   r.   r0   r=   r   r   r   r   r      s    

r   c                   @   ó   e Zd Zdd„ ZdS )ÚSecureTCPServerc                 C   s:   | j  ¡ \}}t tj¡}| t¡ |j|dd}||fS )NT)Zserver_side)r2   ÚacceptÚsslÚ
SSLContextZPROTOCOL_TLS_SERVERÚload_cert_chainÚCERTFILEZwrap_socket)r   Z	newsocketZfromaddrÚcontextZ
connstreamr   r   r   Úget_requesta   s
   
zSecureTCPServer.get_requestN)r>   r?   r@   rI   r   r   r   r   rB   _   ó    rB   c                   @   ó   e Zd ZdS )rB   N©r>   r?   r@   r   r   r   r   rB   l   ó    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 )ÚSimpleIMAPHandlerNr1   c                    s   t ƒ  ¡  d| j_d | j_d S ©NF)ÚsuperÚsetupÚserverÚis_selectedÚloggedr   ©Ú	__class__r   r   rQ   w   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   Ú_send|   s   zSimpleIMAPHandler._sendc                 C   s   |   |d ¡ d S )Nó   
)r]   r[   r   r   r   Ú
_send_line   ó   zSimpleIMAPHandler._send_linec                 C   s   |   | d¡¡ d S )NÚASCII)r_   Úencoder[   r   r   r   Ú_send_textline„   s   z SimpleIMAPHandler._send_textlinec                 C   s   |   d |||f¡¡ d S )Nú )rc   Újoin)r   ÚtagÚcoder\   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y&   Y d S w | d¡r-nq	tr8td| ¡  ƒ | jrQz| j 	|¡ W n t
yO   d | _Y nw q| d¡ ¡ }|d }|d }|dd … }t| d	| ƒrt| d	| ƒ||ƒ}|r€|| _t|ƒ n	|  |d
|d ¡ q)Nz* OK IMAP4rev1r   ó    r^   zGOT: %rra   r   é   Zcmd_ÚBADz unknown)rc   ZrfileÚreadr6   Úendswithr   rW   rX   ÚcontinuationÚsendÚStopIterationÚdecodeÚsplitÚhasattrÚgetattrÚnextrh   )r   ÚlineÚpartZ	splitlinerf   ÚcmdÚargsrn   r   r   r   ÚhandleŠ   sH   
þ
õ
ÿ€ÛzSimpleIMAPHandler.handlec                 C   s4   | j rd| j  nd}|  d| ¡ |  |dd¡ d S )Nz
IMAP4rev1 Ú	IMAP4rev1z* CAPABILITY ÚOKúCAPABILITY completed)Úcapabilitiesrc   rh   )r   rf   ry   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 outr|   zLOGOUT completed)rR   rT   rc   rh   ©r   rf   ry   r   r   r   Ú
cmd_LOGOUT»   ó   
zSimpleIMAPHandler.cmd_LOGOUTc                 C   s   |d | j _|  |dd¡ d S )Nr   r|   zLOGIN completed)rR   rT   rh   r€   r   r   r   Ú	cmd_LOGINÀ   s   zSimpleIMAPHandler.cmd_LOGINc                 C   s$   d| j _|  d¡ |  |dd¡ d S )NTó
   * 2 EXISTSr|   ú[READ-WRITE] SELECT completed.)rR   rS   r_   rh   r€   r   r   r   Ú
cmd_SELECTÄ   r‚   zSimpleIMAPHandler.cmd_SELECTc                 C   s4   | j jrd| j _|  |dd¡ d S |  |dd¡ d S )NFr|   z*Returned to authenticated state. (Success)rk   zNo mailbox selected)rR   rS   rh   r€   r   r   r   Úcmd_UNSELECTÉ   s   zSimpleIMAPHandler.cmd_UNSELECT)r>   r?   r@   r   ÚLOOPBACK_TIMEOUTÚtimeoutrn   r~   rQ   r]   r_   rc   rh   rz   r   r   rƒ   r†   r‡   Ú__classcell__r   r   rU   r   rN   r   s    *rN   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
 ¡  |r<| 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                   @   rA   )z/NewIMAPTestsMixin._setup.<locals>.TestTCPServerc                 S   ó   |   |¡ |  ¡  ‚ )zP
                End request and raise the error if one occurs.
                ©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Û   ó    r’   r   z-serverÚpoll_intervalç{®Gáz„?©ÚnameÚtargetÚkwargsT)Úserver_classZ
addCleanupÚ_cleanupr   ÚHOSTrR   Ú	threadingÚThreadZ_testMethodNameÚserve_foreverÚthreadÚdaemonÚstartÚ
imap_classÚserver_addressÚclient)r   Zimap_handlerr3   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ÚshutdownrR   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                   @   rA   )zONewIMAPTestsMixin.test_EOF_without_complete_welcome_message.<locals>.EOFHandlerc                 S   ó   | j  d¡ d S ©Ns   * OK©rY   rZ   r   r   r   r   rz     s   zVNewIMAPTestsMixin.test_EOF_without_complete_welcome_message.<locals>.EOFHandler.handleN©r>   r?   r@   rz   r   r   r   r   Ú
EOFHandler  r“   r¯   F©r3   )	ÚsocketserverÚStreamRequestHandlerr¦   r5   r   r7   Úabortr£   r¤   )r   r¯   Ú_rR   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                   @   rA   )zBNewIMAPTestsMixin.test_line_termination.<locals>.BadNewlineHandlerc                 S   ó   |   d¡ |  |dd¡ d S ©Ns   * CAPABILITY IMAP4rev1 AUTH
r|   r}   ©r]   rh   r€   r   r   r   r     ó   
zQNewIMAPTestsMixin.test_line_termination.<locals>.BadNewlineHandler.cmd_CAPABILITYN©r>   r?   r@   r   r   r   r   r   ÚBadNewlineHandler  r“   r»   Fr°   )rN   r¦   r5   r   r7   r³   r£   r¤   )r   r»   r´   rR   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 s-w   Y  |  |j¡ d S )Nc                   @   ó   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@   r~   r   r   r   r   ÚEnableHandler  ó    rÀ   zENABLE.*NONAUTHÚfoo)	rN   r¦   ÚassertFalseÚutf8_enabledÚassertRaisesRegexr   r7   r4   Ú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   sN   |   t¡\}}|  tjjd¡ | d¡ W d   ƒ d S 1 s w   Y  d S )Núdoes not support ENABLErÂ   )r¦   rN   rÅ   r   r7   r4   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   sj   |   t¡\}}| dd¡\}}|  |d¡ |  tjjd¡ | d¡ W d   ƒ d S 1 s.w   Y  d S )NÚuserÚpassr|   rÈ   úUTF8=ACCEPT)	r¦   rN   Úloginr   rÅ   r   r7   r4   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   ó   |   |dd¡ d S ©Nr|   zENABLE successful©rh   r€   r   r   r   Ú
cmd_ENABLE1  r`   zSNewIMAPTestsMixin.test_enable_UTF8_True_append.<locals>.UTF8AppendServer.cmd_ENABLEc                 s   ó(    |   d¡ d V | j_|  |dd¡ d S ©Nú+r|   zFAKEAUTH successful©rc   rR   Úresponserh   r€   r   r   r   Úcmd_AUTHENTICATE3  ó   €

zYNewIMAPTestsMixin.test_enable_UTF8_True_append.<locals>.UTF8AppendServer.cmd_AUTHENTICATEc                 s   rÖ   ©NrØ   r|   ZokayrÙ   r€   r   r   r   Ú
cmd_APPEND7  rÜ   zSNewIMAPTestsMixin.test_enable_UTF8_True_append.<locals>.UTF8AppendServer.cmd_APPENDN)r>   r?   r@   r~   rÕ   rÛ   rÞ   r   r   r   r   ÚUTF8AppendServer/  s
    rß   ÚasciiÚMYAUTHc                 S   ó   dS ©Ns   faker   ©Úxr   r   r   Ú<lambda>=  ó    z@NewIMAPTestsMixin.test_enable_UTF8_True_append.<locals>.<lambda>r|   ó
   ZmFrZQ==
rÌ   úutf-8õ   Subject: Ã¼Ã±Ã­Â©Ã¶Ã°Ã©úUTF8 (%s)
)	rN   r¦   r   Ú	_encodingÚauthenticaterÚ   rÆ   Úappendrb   )	r   rß   r¥   rR   rg   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   ƒ d S 1 sLw   Y  d S )Nc                   @   ó    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   rÒ   rÓ   rÔ   r€   r   r   r   rÕ   L  r`   z[NewIMAPTestsMixin.test_search_disallows_charset_in_utf8_mode.<locals>.UTF8Server.cmd_ENABLEc                 s   rÖ   r×   rÙ   r€   r   r   r   rÛ   N  rÜ   zaNewIMAPTestsMixin.test_search_disallows_charset_in_utf8_mode.<locals>.UTF8Server.cmd_AUTHENTICATEN©r>   r?   r@   r~   rÕ   rÛ   r   r   r   r   Ú
UTF8ServerJ  s    ró   rá   c                 S   râ   rã   r   rä   r   r   r   ræ   S  rç   zNNewIMAPTestsMixin.test_search_disallows_charset_in_utf8_mode.<locals>.<lambda>r|   rÌ   zcharset.*UTF8rÂ   Úbar)rN   r¦   rí   r   rÆ   Ú
assertTruerÄ   rÅ   r   r7   r4   Úsearch)r   ró   r¥   r´   rÏ   r   r   r   Ú*test_search_disallows_charset_in_utf8_modeI  s   "ÿz<NewIMAPTestsMixin.test_search_disallows_charset_in_utf8_modec                 C   ód   G dd„ dt ƒ}|  |¡\}}|  tjjd¡ | ddd„ ¡ W d   ƒ d S 1 s+w   Y  d S )Nc                   @   rA   )z6NewIMAPTestsMixin.test_bad_auth_name.<locals>.MyServerc                 S   ó   |   |dd |d ¡¡ d S ©NÚNOz#unrecognized authentication type {}r   ©rh   Úformatr€   r   r   r   rÛ   ]  s   ÿzGNewIMAPTestsMixin.test_bad_auth_name.<locals>.MyServer.cmd_AUTHENTICATEN©r>   r?   r@   rÛ   r   r   r   r   ÚMyServer\  r“   rÿ   z'unrecognized authentication type METHODÚMETHODc                   S   râ   ©Nr   r   r   r   r   r   ræ   c  rç   z6NewIMAPTestsMixin.test_bad_auth_name.<locals>.<lambda>©rN   r¦   rÅ   r   r7   r4   rí   ©r   rÿ   r¥   r´   r   r   r   Útest_bad_auth_name[  s   
ÿ"þz$NewIMAPTestsMixin.test_bad_auth_namec                 C   rø   )Nc                   @   rA   )z?NewIMAPTestsMixin.test_invalid_authentication.<locals>.MyServerc                 s   ó&    |   d¡ d V | _|  |dd¡ d S ©NrØ   rû   z[AUTHENTICATIONFAILED] invalid©rc   rÚ   rh   r€   r   r   r   rÛ   g  ó   €
zPNewIMAPTestsMixin.test_invalid_authentication.<locals>.MyServer.cmd_AUTHENTICATENrþ   r   r   r   r   rÿ   f  r“   rÿ   z \[AUTHENTICATIONFAILED\] invalidrá   c                 S   râ   rã   r   rä   r   r   r   ræ   n  rç   z?NewIMAPTestsMixin.test_invalid_authentication.<locals>.<lambda>r  r  r   r   r   Útest_invalid_authenticatione  s   
ÿ"þz-NewIMAPTestsMixin.test_invalid_authenticationc                 C   óP   G dd„ dt ƒ}|  |¡\}}| ddd„ ¡\}}|  |d¡ |  |jd¡ d S )Nc                   @   rA   )zCNewIMAPTestsMixin.test_valid_authentication_bytes.<locals>.MyServerc                 s   rÖ   r×   rÙ   r€   r   r   r   rÛ   r  rÜ   zTNewIMAPTestsMixin.test_valid_authentication_bytes.<locals>.MyServer.cmd_AUTHENTICATENrþ   r   r   r   r   rÿ   q  r“   rÿ   rá   c                 S   râ   rã   r   rä   r   r   r   ræ   w  rç   zCNewIMAPTestsMixin.test_valid_authentication_bytes.<locals>.<lambda>r|   rè   ©rN   r¦   rí   r   rÚ   ©r   rÿ   r¥   rR   rg   r´   r   r   r   Útest_valid_authentication_bytesp  ó
   z1NewIMAPTestsMixin.test_valid_authentication_bytesc                 C   r
  )Nc                   @   rA   )zHNewIMAPTestsMixin.test_valid_authentication_plain_text.<locals>.MyServerc                 s   rÖ   r×   rÙ   r€   r   r   r   rÛ   }  rÜ   zYNewIMAPTestsMixin.test_valid_authentication_plain_text.<locals>.MyServer.cmd_AUTHENTICATENrþ   r   r   r   r   rÿ   |  r“   rÿ   rá   c                 S   râ   ©NZfaker   rä   r   r   r   ræ   ‚  rç   zHNewIMAPTestsMixin.test_valid_authentication_plain_text.<locals>.<lambda>r|   rè   r  r  r   r   r   Ú$test_valid_authentication_plain_text{  r  z6NewIMAPTestsMixin.test_valid_authentication_plain_textÚmd5©Zopensslc                 C   óN   G dd„ dt ƒ}|  |¡\}}|  d|jv ¡ | dd¡\}}|  |d¡ d S )Nc                   @   ó   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   ó>    |   d¡ d V }|dkr|  |dd¡ d S |  |dd¡ d S ©Nz:+ PDE4OTYuNjk3MTcwOTUyQHBvc3RvZmZpY2UucmVzdG9uLm1jaS5uZXQ=s2   dGltIGYxY2E2YmU0NjRiOWVmYTFjY2E2ZmZkNmNmMmQ5ZjMy
r|   zCRAM-MD5 successfulrû   z	No access©rc   rh   ©r   rf   ry   Úrr   r   r   rÛ   Š  ó   €
zQNewIMAPTestsMixin.test_login_cram_md5_bytes.<locals>.AuthHandler.cmd_AUTHENTICATEN©r>   r?   r@   r~   rÛ   r   r   r   r   ÚAuthHandlerˆ  ó    r  úAUTH=CRAM-MD5Útimó   tanstaaftanstaafr|   ©rN   r¦   rõ   r~   Úlogin_cram_md5r   ©r   r  r¥   r´   Úretr   r   r   Útest_login_cram_md5_bytes†  ó
   z+NewIMAPTestsMixin.test_login_cram_md5_bytesc                 C   r  )Nc                   @   r  )zENewIMAPTestsMixin.test_login_cram_md5_plain_text.<locals>.AuthHandlerr  c                 s   r  r  r  r  r   r   r   rÛ   œ  r  zVNewIMAPTestsMixin.test_login_cram_md5_plain_text.<locals>.AuthHandler.cmd_AUTHENTICATENr  r   r   r   r   r  š  r  r  r  r   Útanstaaftanstaafr|   r"  r$  r   r   r   Útest_login_cram_md5_plain_text˜  r'  z0NewIMAPTestsMixin.test_login_cram_md5_plain_textc                 C   rø   )Nc                   @   rA   )z?NewIMAPTestsMixin.test_aborted_authentication.<locals>.MyServerc                 s   óB    |   d¡ d V | _| jdkr|  |dd¡ d S |  |dd¡ d S ©NrØ   s   *
rû   z[AUTHENTICATIONFAILED] abortedr|   zMYAUTH successfulr  r€   r   r   r   rÛ   ¬  s   €

ýzPNewIMAPTestsMixin.test_aborted_authentication.<locals>.MyServer.cmd_AUTHENTICATENrþ   r   r   r   r   rÿ   «  r“   rÿ   z \[AUTHENTICATIONFAILED\] abortedrá   c                 S   ó   d S r/   r   rä   r   r   r   ræ   ¹  rç   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   sd   G dd„ dt ƒ}| j|dd\}}|  tjjd¡ | j|jŽ  W d   ƒ d S 1 s+w   Y  d S )Nc                   @   rA   )z:NewIMAPTestsMixin.test_linetoolong.<locals>.TooLongHandlerc                 S   r«   )Ns   * OK xxxxxxxxxxx
r­   r   r   r   r   rz   ¾  ó   zANewIMAPTestsMixin.test_linetoolong.<locals>.TooLongHandler.handleNr®   r   r   r   r   ÚTooLongHandler½  r“   r0  Fr°   zgot more than 10 bytes)rN   r¦   rÅ   r   r7   r4   r£   r¤   )r   r0  r´   rR   r   r   r   Útest_linetoolong»  s   
ÿ"þz"NewIMAPTestsMixin.test_linetoolongc                 C   sD   | j tdd\}}| j|jŽ 	 W d   ƒ d S 1 sw   Y  d S )NFr°   )r¦   rN   r£   r¤   )r   r´   rR   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   ƒ d S 1 sOw   Y  d S )Nr   Ú	localhost©r‰   r   )r¦   rN   r¤   r£   r   Úsockr‰   r©   r   rˆ   r5   Ú
ValueError)r   r´   rR   Ú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d|dd}W d   ƒ d S 1 s-w   Y  d S )Nc                   @   rA   )zQNewIMAPTestsMixin.test_imaplib_timeout_functionality_test.<locals>.TimeoutHandlerc                 S   s   t  d¡ t | ¡ d S r  )r   ÚsleeprN   rz   r   r   r   r   rz   Ù  ó   
zXNewIMAPTestsMixin.test_imaplib_timeout_functionality_test.<locals>.TimeoutHandler.handleNr®   r   r   r   r   ÚTimeoutHandlerØ  r“   r;  r   r3  gü©ñÒMbP?r4  )rN   r¦   r¤   r5   ÚTimeoutErrorr£   )r   r;  r´   rR   r7  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 s'w   Y  |  |j¡ d S ©NFr°   rÊ   rË   )r¦   rN   r£   r¤   rÍ   r   rT   ÚassertIsNone©r   r´   rR   Ú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 s1w   Y  |  |j¡ d S r>  )	r¦   rN   r£   r¤   rÍ   r   rT   Ú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Ë   r|   r   ó   LOGIN completedÚAUTH)r¦   rN   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Ë   r|   r   rE  ÚBYEs   IMAP4ref1 Server logging outr§   )r¦   rN   rÍ   r   rC  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                   @   rA   )z,NewIMAPTestsMixin.test_lsub.<locals>.LsubCmdc                 S   s   |   d¡ |  |dd¡S )Nz* LSUB () "." directoryAr|   zLSUB completedr  r€   r   r   r   Úcmd_LSUB  r:  z5NewIMAPTestsMixin.test_lsub.<locals>.LsubCmd.cmd_LSUBN)r>   r?   r@   rJ  r   r   r   r   ÚLsubCmd  r“   rK  rÊ   rË   r|   r   s   () "." directoryA)rN   r¦   rÍ   Zlsubr   )r   rK  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Ë   r|   r   ó   2s*   Returned to authenticated state. (Success)rF  )r¦   rN   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   Úpatchr1  r2  r8  r=  rB  rD  rG  rI  rL  rO  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   r7   r£   r±   Ú	TCPServerrš   r   r   r   r   rR    s    
rR  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¡ |  t¡\}}| j|jd|iŽ}| ¡  W d   ƒ d S 1 sAw   Y  d S )NTú=IP address mismatch, certificate is not valid for '127.0.0.1'Ússl_context)rD   rE   ÚPROTOCOL_TLS_CLIENTr   Úverify_modeZCERT_REQUIREDÚcheck_hostnameÚload_verify_locationsÚCAFILErÅ   ÚCertificateErrorr¦   rN   r£   r¤   r©   ©r   rV  r´   rR   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 )Nr3  r   ©rV  )
rD   rE   rW  rZ  r[  r¦   rN   r£   r¤   r©   r]  r   r   r   Útest_ssl_verified6  s   
ÿz!NewIMAPSSLTests.test_ssl_verifiedc              
   C   s´   t  dtf¡I tj | jd¡( tj | jd¡ | jddtd W d   ƒ n1 s,w   Y  W d   ƒ n1 s;w   Y  W d   ƒ d S W d   ƒ d S 1 sSw   Y  d S )Nr1   ÚopenZ_connectr3  é   )Úcertfile)r   Zcheck_warningsÚDeprecationWarningr   rQ  Úobjectr£   rG   r   r   r   r   Útest_certfile_arg_warnA  s   ÿ€ÿÿ"ÿz&NewIMAPSSLTests.test_certfile_arg_warnN)r>   r?   r@   Ú	IMAP4_SSLr£   rB   rš   r^  r`  r   rf  r   r   r   r   rT  #  s    rT  c                   @   sz  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jd	d
„ ƒZejdd„ ƒZejdd„ ƒZejdd„ ƒZG dd„ deƒZejdd„ ƒZejdd„ ƒZejdd„ ƒZejdd„ ƒZejdd„ ƒZejdd„ ƒZejdd „ ƒZejd!d"„ ƒZejejd#d$d%d&d'„ ƒƒZ ejd(d)„ ƒZ!d*d+„ Z"d,d-„ Z#ejd.d/„ ƒZ$ejd0d1„ ƒZ%ejd2d3„ ƒZ&eje'e( )d4d5¡d6d7„ ƒƒƒZ*d8S )9ÚThreadedNetworkedTestsc                 C   s¨   G dd„ d| j ƒ}trtdƒ |||ƒ}|  |j|j ¡ ¡ tr5tdƒ td|ƒ td| j ƒ td|jƒ tj	d| j  |j
d	d
id}d|_| ¡  trPtdƒ ||fS )Nc                   @   rA   )z4ThreadedNetworkedTests.make_server.<locals>.MyServerc                 S   rŒ   r/   r   r   r   r   r   r   O  s   
zAThreadedNetworkedTests.make_server.<locals>.MyServer.handle_errorNr‘   r   r   r   r   rÿ   N  r“   rÿ   zcreating serverzserver createdzADDR =zCLASS =zHDLR =z
%s servingr”   r•   r–   Tzserver running)rš   r   rW   r   r¤   r2   ÚgetsocknameZRequestHandlerClassr   rž   rŸ   r¡   r¢   )r   r7  Úhdlrrÿ   rR   r-   r   r   r   Úmake_serverL  s(   

úz"ThreadedNetworkedTests.make_serverc                 C   s8   t rtdƒ | ¡  | ¡  | ¡  t rtdƒ d S d S )Nzwaiting for serverÚdone)r   rW   r©   rŽ   re   )r   rR   r    r   r   r   Úreap_serverl  s   ÿz"ThreadedNetworkedTests.reap_serverc              
   c   s@    |   tjdf|¡\}}z|V  W |  ||¡ d S |  ||¡ w )Nr   )rk  r   rœ   rm  )r   rj  rR   r    r   r   r   Úreaped_serveru  s
   €z$ThreadedNetworkedTests.reaped_serverc              	   c   s`    |   |¡ }| j|jŽ }z||fV  W | ¡  n| ¡  w W d   ƒ d S 1 s)w   Y  d S r/   )rn  r£   r¤   rC  )r   rj  rR   r¥   r   r   r   Úreaped_pair}  s   €"ûz"ThreadedNetworkedTests.reaped_pairc                 C   sD   |   t¡}| j|jŽ }| ¡  W d   ƒ d S 1 sw   Y  d S r/   )rn  rN   r£   r¤   r©   ©r   rR   r¥   r   r   r   Útest_connect†  s   
"þz#ThreadedNetworkedTests.test_connectc                 C   sÂ   G dd„ dt ƒ}|  |¡J\}}| ddd„ ¡\}}|  |d¡ |  |jd¡ | d¡ | d	d
d¡\}\}|  d|¡ | d¡ | d¡\}\}|  d|¡ W d   ƒ d S 1 sZw   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)ÚflagsrP   rz   r   rU   r   r   rz   —  r:  zLThreadedNetworkedTests.test_bracket_flags.<locals>.BracketFlagHandler.handlec                 s   rÖ   r×   rÙ   r€   r   r   r   rÛ   ›  rÜ   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.r|   r…   )re   rr  r_   rb   rh   )r   rf   ry   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 )Nrj   ú(ú)z(FLAGS (%s))rs  z* %s FETCH %sr   rà   r|   zSTORE completed.)rX   rr   rr  Úextendre   r_   rb   rh   )r   rf   ry   Z	new_flagsZ	flags_msgrt  r   r   r   Ú	cmd_STOREª  s   zOThreadedNetworkedTests.test_bracket_flags.<locals>.BracketFlagHandler.cmd_STORE)r>   r?   r@   rz   rÛ   r†   rx  rŠ   r   r   rU   r   ÚBracketFlagHandler•  s
    
ry  rá   c                 S   râ   rã   r   rä   r   r   r   ræ   ³  rç   z;ThreadedNetworkedTests.test_bracket_flags.<locals>.<lambda>r|   rè   Útestó   1z+FLAGSz[test]s   [test]ZPERMANENTFLAGS)rN   ro  rí   r   rÚ   rN  Ústorer8   )r   ry  rR   r¥   rg   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   ƒ d S 1 s(w   Y  d S )Nc                   @   rA   )z9ThreadedNetworkedTests.test_issue5949.<locals>.EOFHandlerc                 S   r«   r¬   r­   r   r   r   r   rz   Á  r/  z@ThreadedNetworkedTests.test_issue5949.<locals>.EOFHandler.handleNr®   r   r   r   r   r¯   À  r“   r¯   )	r±   r²   rn  r5   r   r7   r³   r£   r¤   )r   r¯   rR   r   r   r   Útest_issue5949½  s   
ÿ
ÿ"ÿz%ThreadedNetworkedTests.test_issue5949c                 C   ó\   G dd„ dt ƒ}|  |¡}| jtjj| jg|j¢R Ž  W d   ƒ d S 1 s'w   Y  d S )Nc                   @   rA   )zGThreadedNetworkedTests.test_line_termination.<locals>.BadNewlineHandlerc                 S   r¶   r·   r¸   r€   r   r   r   r   Î  r¹   zVThreadedNetworkedTests.test_line_termination.<locals>.BadNewlineHandler.cmd_CAPABILITYNrº   r   r   r   r   r»   Ì  rJ   r»   )rN   rn  r5   r   r7   r³   r£   r¤   )r   r»   rR   r   r   r   r¼   É  s   
ÿ
ÿ"ÿz,ThreadedNetworkedTests.test_line_terminationc                   @   rñ   )z!ThreadedNetworkedTests.UTF8Serverr¾   c                 C   rÒ   rÓ   rÔ   r€   r   r   r   rÕ   Ù  r`   z,ThreadedNetworkedTests.UTF8Server.cmd_ENABLEc                 c   rÖ   r×   rÙ   r€   r   r   r   rÛ   Ü  rÜ   z2ThreadedNetworkedTests.UTF8Server.cmd_AUTHENTICATENrò   r   r   r   r   ró   Ö  s    ró   c                 C   sb   |   | j¡!\}}|  |j¡ |  tjj|jd¡ |  |j¡ W d   ƒ d S 1 s*w   Y  d S )NrÂ   )	ro  ró   rÃ   rÄ   r5   r   r7   r4   rÆ   rp  r   r   r   rÇ   á  s
   "ýz;ThreadedNetworkedTests.test_enable_raises_error_if_not_AUTHc                 C   sZ   G dd„ d| j ƒ}|  |¡\}}|  tjj|jd¡ W d   ƒ d S 1 s&w   Y  d S )Nc                   @   r½   )zXThreadedNetworkedTests.test_enable_raises_error_if_no_capability.<locals>.NoEnableServerrF  Nr¿   r   r   r   r   ÚNoEnableServerì  rÁ   r€  rÂ   )ró   ro  r5   r   r7   r4   rÆ   )r   r€  rR   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¡ W d   ƒ n1 s5w   Y  W d   ƒ d S W d   ƒ d S 1 sMw   Y  d S )Nc                   @   rK   )z\ThreadedNetworkedTests.test_enable_UTF8_raises_error_if_not_supported.<locals>.NonUTF8ServerNrL   r   r   r   r   ÚNonUTF8Serveró  rM   r  rÊ   rË   r|   rÌ   )	rN   r5   r   r7   r4   ro  rÍ   r   rÆ   )r   r  rR   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   ƒ d S 1 sow   Y  d S )Nc                   @   rA   )zMThreadedNetworkedTests.test_enable_UTF8_True_append.<locals>.UTF8AppendServerc                 s   rÖ   rÝ   rÙ   r€   r   r   r   rÞ      rÜ   zXThreadedNetworkedTests.test_enable_UTF8_True_append.<locals>.UTF8AppendServer.cmd_APPENDN)r>   r?   r@   rÞ   r   r   r   r   rß   ÿ  r“   rß   rà   rá   c                 S   râ   rã   r   rä   r   r   r   ræ     rç   zEThreadedNetworkedTests.test_enable_UTF8_True_append.<locals>.<lambda>r|   rè   rÌ   ré   rê   rë   )	ró   ro  r   rì   rí   rÚ   rÆ   rî   rb   )	r   rß   rR   r¥   rg   r´   rï   rÏ   rÐ   r   r   r   rð   ü  s*   ÿÿþ"óz3ThreadedNetworkedTests.test_enable_UTF8_True_appendc                 C   s’   |   | j¡9\}}| ddd„ ¡\}}|  |d¡ | d¡\}}|  |d¡ |  |j¡ |  tj	j
|jdd¡ W d   ƒ d S 1 sBw   Y  d S )Nrá   c                 S   râ   rã   r   rä   r   r   r   ræ     rç   zSThreadedNetworkedTests.test_search_disallows_charset_in_utf8_mode.<locals>.<lambda>r|   rÌ   rÂ   rô   )ro  ró   rí   r   rÆ   rõ   rÄ   r5   r   r7   r4   rö   )r   rR   r¥   rÏ   r´   r   r   r   r÷     s   "úzAThreadedNetworkedTests.test_search_disallows_charset_in_utf8_modec              	   C   s’   G dd„ dt ƒ}|  |¡2\}}|  tjj¡ | ddd„ ¡ W d   ƒ n1 s*w   Y  W d   ƒ d S W d   ƒ d S 1 sBw   Y  d S )Nc                   @   rA   )z;ThreadedNetworkedTests.test_bad_auth_name.<locals>.MyServerc                 S   rù   rú   rü   r€   r   r   r   rÛ   )  s   

ÿzLThreadedNetworkedTests.test_bad_auth_name.<locals>.MyServer.cmd_AUTHENTICATENrþ   r   r   r   r   rÿ   '  rJ   rÿ   r   c                   S   râ   r  r   r   r   r   r   ræ   /  rç   z;ThreadedNetworkedTests.test_bad_auth_name.<locals>.<lambda>©rN   ro  r5   r   r7   r4   rí   )r   rÿ   rR   r¥   r   r   r   r  $  s   ÿÿ"ÿz)ThreadedNetworkedTests.test_bad_auth_namec              	   C   ó–   G dd„ dt ƒ}|  |¡4\}}|  tjj¡ | ddd„ ¡\}}W d   ƒ n1 s,w   Y  W d   ƒ d S W d   ƒ d S 1 sDw   Y  d S )Nc                   @   rA   )zDThreadedNetworkedTests.test_invalid_authentication.<locals>.MyServerc                 s   r  r  r  r€   r   r   r   rÛ   6  r  zUThreadedNetworkedTests.test_invalid_authentication.<locals>.MyServer.cmd_AUTHENTICATENrþ   r   r   r   r   rÿ   4  rJ   rÿ   rá   c                 S   râ   rã   r   rä   r   r   r   ræ   =  rç   zDThreadedNetworkedTests.test_invalid_authentication.<locals>.<lambda>r‚  ©r   rÿ   rR   r¥   rg   rÐ   r   r   r   r	  1  s   ÿÿ"ÿz2ThreadedNetworkedTests.test_invalid_authenticationc                 C   sÎ   G dd„ dt ƒ}|  |¡!\}}| ddd„ ¡\}}|  |d¡ |  |jd¡ W d   ƒ n1 s1w   Y  |  |¡"\}}| ddd„ ¡\}}|  |d¡ |  |jd¡ W d   ƒ d S 1 s`w   Y  d S )	Nc                   @   rA   )zBThreadedNetworkedTests.test_valid_authentication.<locals>.MyServerc                 s   rÖ   r×   rÙ   r€   r   r   r   rÛ   D  rÜ   zSThreadedNetworkedTests.test_valid_authentication.<locals>.MyServer.cmd_AUTHENTICATENrþ   r   r   r   r   rÿ   B  rJ   rÿ   rá   c                 S   râ   rã   r   rä   r   r   r   ræ   J  rç   zBThreadedNetworkedTests.test_valid_authentication.<locals>.<lambda>r|   rè   c                 S   râ   r  r   rä   r   r   r   ræ   P  rç   )rN   ro  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 s0w   Y  |  |¡!\}}|  d|jv ¡ | dd¡\}}|  |d¡ W d   ƒ d S 1 s^w   Y  d S )Nc                   @   r  )z?ThreadedNetworkedTests.test_login_cram_md5.<locals>.AuthHandlerr  c                 s   r  r  r  r  r   r   r   rÛ   ]  r  zPThreadedNetworkedTests.test_login_cram_md5.<locals>.AuthHandler.cmd_AUTHENTICATENr  r   r   r   r   r  Y  s    r  r  r   r(  r|   r!  )rN   ro  rõ   r~   r#  r   )r   r  rR   r¥   r%  rÐ   r   r   r   Útest_login_cram_md5U  s   ý"ýz*ThreadedNetworkedTests.test_login_cram_md5c              	   C   rƒ  )Nc                   @   rA   )zDThreadedNetworkedTests.test_aborted_authentication.<locals>.MyServerc                 s   r*  r+  r  r€   r   r   r   rÛ   w  s   €

zUThreadedNetworkedTests.test_aborted_authentication.<locals>.MyServer.cmd_AUTHENTICATENrþ   r   r   r   r   rÿ   u  rJ   rÿ   rá   c                 S   r,  r/   r   rä   r   r   r   ræ   ‚  rç   zDThreadedNetworkedTests.test_aborted_authentication.<locals>.<lambda>r‚  r„  r   r   r   r-  r  s   ÿÿ"ÿz2ThreadedNetworkedTests.test_aborted_authenticationc                 C   r  )Nc                   @   rA   )z?ThreadedNetworkedTests.test_linetoolong.<locals>.TooLongHandlerc                 S   s   | j  dtjd  d ¡ d S )Ns   * OK ó   xr^   )rY   rZ   r   Z_MAXLINEr   r   r   r   rz   ‡  s   zFThreadedNetworkedTests.test_linetoolong.<locals>.TooLongHandler.handleNr®   r   r   r   r   r0  †  r“   r0  )rN   rn  r5   r   r7   r4   r£   r¤   )r   r0  rR   r   r   r   r1  …  s   
ÿ
ÿ"ÿz'ThreadedNetworkedTests.test_linetoolongc                    sÈ   d‰ G ‡ fdd„dt ƒ}tddƒD ]P}d|> ‰ |  dˆ › ¡: |  |¡%}|  tjj¡ | j|j	Ž  W d   ƒ n1 s>w   Y  W d   ƒ n1 sMw   Y  W d   ƒ n1 s\w   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}r{   )rc   r   ©Úsizer   r   rz   ’  s   zNThreadedNetworkedTests.test_truncated_large_literal.<locals>.BadHandler.handleNr®   r   rˆ  r   r   Ú
BadHandler‘  s    rŠ  é   é@   r   zsize=2e)
rN   ÚrangeZsubTestrn  r5   r   r7   r³   r£   r¤   )r   rŠ  ZexponentrR   r   rˆ  r   Útest_truncated_large_literal  s   ÿ€ÿ€ÿ€þz3ThreadedNetworkedTests.test_truncated_large_literalc              	   C   sl   |   t¡'}| j|jŽ  W d   ƒ n1 sw   Y  W d   ƒ d S W d   ƒ d S 1 s/w   Y  d S r/   )rn  rN   r£   r¤   )r   rR   r   r   r   r2    s   ÿÿ"ÿz1ThreadedNetworkedTests.test_simple_with_statementc              	   C   s‚   |   t¡2}| j|jŽ }| dd¡ |  |jd¡ W d   ƒ n1 s$w   Y  |  |j¡ W d   ƒ d S 1 s:w   Y  d S ©NrÊ   rË   )rn  rN   r£   r¤   rÍ   r   rT   r?  ©r   rR   rA  r   r   r   rB  ¤  s   þ"üz*ThreadedNetworkedTests.test_with_statementc              	   C   s–   |   t¡<}| j|jŽ }| dd¡ |  |jd¡ | ¡  |  |j¡ W d   ƒ n1 s.w   Y  |  |j¡ W d   ƒ d S 1 sDw   Y  d S r  )	rn  rN   r£   r¤   rÍ   r   rT   rC  r?  r  r   r   r   rD  ¬  s   ü"úz1ThreadedNetworkedTests.test_with_statement_logoutFz Won't work if __debug__ is Falsec              
   C   s¸   ddgi}|   t¡H}| j|jŽ )}tj |d¡}| |¡ | d¡ W d   ƒ n1 s.w   Y  W d   ƒ n1 s=w   Y  W d   ƒ d S W d   ƒ d S 1 sUw   Y  d S )Nz
READ-WRITEri   Z_mesgz)untagged responses dump:READ-WRITE: [b''])	rn  rN   r£   r¤   r   rQ  re  Z_dump_urZassert_called_with)r   Zuntagged_resp_dictrR   rA  Z	mock_mesgr   r   r   Útest_dump_ur·  s   

ÿþ€ÿÿ"ÿz#ThreadedNetworkedTests.test_dump_urN)+r>   r?   r@   r±   rS  rš   r   r7   r£   rk  rm  r   rn  ro  r
   Úreap_threadsrq  r}  r~  r¼   rN   ró   rÇ   rÉ   rÑ   rð   r÷   r  r	  r…  r	   rP  r†  r-  r1  rŽ  r2  rB  rD  r   ÚunittestÚ
skipUnlessr‘  r   r   r   r   rh  H  sf     	



0







	









rh  c                   @   s"   e Zd ZeZeZejdd„ ƒZ	dS )ÚThreadedNetworkedTestsSSLc              	   C   sÖ   t  t j¡}| t¡ |  t jd¡* |  t¡}| j	|j
d|iŽ}| ¡  W d   ƒ n1 s0w   Y  W d   ƒ n1 s?w   Y  |  t¡}| j	d|j
d |d}| ¡  W d   ƒ d S 1 sdw   Y  d S )NrU  rV  r3  r   r_  )rD   rE   rW  rZ  r[  rÅ   r\  rn  rN   r£   r¤   r©   )r   rV  rR   r¥   r   r   r   r`  Ì  s(   
þ
ÿ
ý€ü	ÿ
"ýz+ThreadedNetworkedTestsSSL.test_ssl_verifiedN)
r>   r?   r@   rB   rš   rg  r£   r
   r’  r`  r   r   r   r   r•  Ç  s
    r•  Ú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.edurb  Z	anonymousrË   c                 C   sD   t  | j¡ |  | j| j¡| _W d   ƒ d S 1 sw   Y  d S r/   )r   Útransient_internetÚhostr£   ÚportrR   r   r   r   r   ÚsetUpê  s   "ÿzRemoteIMAPTest.setUpc                 C   sJ   | j d ur#t | j¡ | j  ¡  W d   ƒ d S 1 sw   Y  d S d S r/   )rR   r   r˜  r™  rC  r   r   r   r   ÚtearDownî  s
   
"ÿÿzRemoteIMAPTest.tearDownc                 C   sŽ   t  | j¡7 | jjD ]}|  |t¡ q|  d| jj¡ |  d| jj¡ | j | j	| j
¡}|  |d d¡ W d   ƒ d S 1 s@w   Y  d S )NÚLOGINDISABLEDzAUTH=ANONYMOUSr   r|   )r   r˜  r™  rR   r~   ÚassertIsInstanceÚstrr8   rÍ   ÚusernameÚpasswordr   )r   ÚcapÚrsr   r   r   Útest_logincapaó  s   "úzRemoteIMAPTest.test_logincapac                 C   sT   t  | j¡ | j ¡ }d | _|  |d d|¡ W d   ƒ d S 1 s#w   Y  d S ©Nr   rH  )r   r˜  r™  rR   rC  r   ©r   r£  r   r   r   rI  ü  s
   
"ýzRemoteIMAPTest.test_logoutN)r>   r?   r@   r™  rš  r   r¡  r   r7   r£   r›  rœ  r¤  rI  r   r   r   r   r—  à  s    	r—  c                       s$   e Zd Z‡ fdd„Zdd„ Z‡  ZS )ÚRemoteIMAP_STARTTLSTestc                    sV   t ƒ  ¡  t | j¡ | j ¡ }|  |d d¡ W d   ƒ d S 1 s$w   Y  d S )Nr   r|   )rP   r›  r   r˜  r™  rR   Zstarttlsr   r¦  rU   r   r   r›  	  s
   

"þzRemoteIMAP_STARTTLSTest.setUpc                 C   s.   | j jD ]}|  |t¡ q|  d| j j¡ d S )Nr  )rR   r~   rž  rŸ  ÚassertNotIn)r   r¢  r   r   r   r¤    s   z&RemoteIMAP_STARTTLSTest.test_logincapa)r>   r?   r@   r›  r¤  rŠ   r   r   rU   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   r,  r/   r   r   r   r   r   r›    ó   zRemoteIMAP_SSLTest.setUpc                 C   r,  r/   r   r   r   r   r   rœ    rª  zRemoteIMAP_SSLTest.tearDownc                 C   s(   t  t j¡}d|_t j|_| t¡ |S rO   )rD   rE   rW  rY  Z	CERT_NONErX  rF   rG   )r   rV  r   r   r   Úcreate_ssl_context!  s
   
z%RemoteIMAP_SSLTest.create_ssl_contextc                 C   sn   z1|j D ]}|  |t¡ q|  d|j ¡ |  d|j ¡ | | j| j¡}|  |d d¡ W | 	¡  d S | 	¡  w )Nr  z
AUTH=PLAINr   r|   )
r~   rž  rŸ  r¨  r8   rÍ   r   r¡  r   rC  )r   rR   r¢  r£  r   r   r   Úcheck_logincapa(  s   
z"RemoteIMAP_SSLTest.check_logincapac                 C   sL   t  | j¡ |  | j| j¡}|  |¡ W d   ƒ d S 1 sw   Y  d S r/   )r   r˜  r™  r£   rš  r¬  )r   Ú_serverr   r   r   r¤  3  s   "þz!RemoteIMAP_SSLTest.test_logincapac                 C   s\   t  | j¡ |  | j| j¡}| ¡ }|  |d d|¡ W d   ƒ d S 1 s'w   Y  d S r¥  )r   r˜  r™  r£   rš  rC  r   )r   r­  r£  r   r   r   rI  8  s
   "ýzRemoteIMAP_SSLTest.test_logoutc              	   C   óR   t  | j¡ | jt| j| j| jt|  ¡ d W d   ƒ d S 1 s"w   Y  d S )N)rc  rV  ©	r   r˜  r™  r5   r6  r£   rš  rG   r«  r   r   r   r   Ú#test_ssl_context_certfile_exclusive>  ó   þ"ÿz6RemoteIMAP_SSLTest.test_ssl_context_certfile_exclusivec              	   C   r®  )N)ZkeyfilerV  r¯  r   r   r   r   Ú"test_ssl_context_keyfile_exclusiveD  r±  z5RemoteIMAP_SSLTest.test_ssl_context_keyfile_exclusiveN)r>   r?   r@   rš  rg  r£   r›  rœ  r«  r¬  r¤  rI  r°  r²  r   r   r   r   r©    s    r©  Ú__main__)7rz  r   Ztest.supportr   Ú
contextlibr   r   Zos.pathÚosr±   r   r   r   r2   r   r   r   r   r	   r
   r   r“  r   r   r   r   rD   ÚImportErrorÚpathre   ÚdirnameÚ__file__ÚcurdirrG   r[  ZTestCaser   rS  rB   rg  r²   rN   r‹   rR  r”  rT  rh  r•  Zis_resource_enabledÚskipr—  r§  r©  r>   Úmainr   r   r   r   Ú<module>   sx    ÿ@	_  O
$   

ÿ
 
ÿ

4ÿ