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 )	Nc                   @   rA   )z/NewIMAPTestsMixin._setup.<locals>.TestTCPServerc                 S   s   	 |   |¡ |  ¡  ‚ r/   ©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   sL   	 | j d ur| j jdkr| j  ¡  | j ¡  | j ¡  t | j¡ d | _d S )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’   r/  Fr¯   zgot more than 10 bytes)rN   r¥   rÄ   r   r7   r4   r¢   r£   )r   r/  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   r2  gü©ñÒMbP?r3  )rN   r¥   r£   r5   ÚTimeoutErrorr¢   )r   r:  r³   rR   r6  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   rD  ÚBYEs   IMAP4ref1 Server logging outr¦   )r¥   rN   rÌ   r   rB  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  r9  z5NewIMAPTestsMixin.test_lsub.<locals>.LsubCmd.cmd_LSUBN)r>   r?   r@   rI  r   r   r   r   ÚLsubCmd  r’   rJ  rÉ   rÊ   r|   r   s   () "." directoryA)rN   r¥   rÌ   Zlsubr   )r   rJ  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)rE  )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   Úpatchr0  r1  r7  r<  rA  rC  rF  rH  rK  rN  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   rQ    s    
rQ  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   rU  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 )Nr2  r   ©rU  )
rD   rE   rV  rY  rZ  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_connectr2  é   )Úcertfile)r   Zcheck_warningsÚDeprecationWarningr   rP  Ú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   re  r   r   r   r   rS  #  s    rS  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   s   |   |¡ |  ¡  ‚ 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   r6  Ú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   )rj  r   r›   rl  )r   ri  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/   )rm  r¢   r£   rB  )r   ri  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/   )rm  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   —  r9  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   rq  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))rr  z* %s FETCH %sr   rß   r|   zSTORE completed.)rX   rr   rq  Úextendre   r_   rb   rh   )r   rf   ry   Z	new_flagsZ	flags_msgrs  r   r   r   Ú	cmd_STOREª  s   zOThreadedNetworkedTests.test_bracket_flags.<locals>.BracketFlagHandler.cmd_STORE)r>   r?   r@   rz   rÚ   r†   rw  rŠ   r   r   rU   r   ÚBracketFlagHandler•  s
    
rx  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   rn  rì   r   rÙ   rM  Ústorer8   )r   rx  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±   rm  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   rm  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Á   )	rn  rò   rÂ   rÃ   r5   r   r7   r4   rÅ   ro  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>.NoEnableServerrE  Nr¾   r   r   r   r   ÚNoEnableServerì  rÀ   r  rÁ   )rò   rn  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   rn  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ò   rn  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ó   )rn  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   rn  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   rn  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   rn  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   r/  †  r’   r/  )rN   rm  r5   r   r7   r4   r¢   r£   )r   r/  rR   r   r   r   r0  …  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subTestrm  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/   )rm  rN   r¢   r£   )r   rR   r   r   r   r1    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Ê   )rm  rN   r¢   r£   rÌ   r   rT   r>  ©r   rR   r@  r   r   r   rA  ¤  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Ž  )	rm  rN   r¢   r£   rÌ   r   rT   rB  r>  r  r   r   r   rC  ¬  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''])	rm  rN   r¢   r£   r   rP  rd  Z_dump_urZassert_called_with)r   Zuntagged_resp_dictrR   r@  Z	mock_mesgr   r   r   Útest_dump_ur·  s   

ÿþ€ÿÿ"ÿz#ThreadedNetworkedTests.test_dump_urN)+r>   r?   r@   r°   rR  r™   r   r7   r¢   rj  rl  r   rm  rn  r
   Úreap_threadsrp  r|  r}  r»   rN   rò   rÆ   rÈ   rÐ   rï   rö   r  r  r„  r	   rO  r…  r,  r0  r  r1  rA  rC  r   ÚunittestÚ
skipUnlessr  r   r   r   r   rg  H  sf     	



0







	









rg  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 )NrT  rU  r2  r   r^  )rD   rE   rV  rY  rZ  rÄ   r[  rm  rN   r¢   r£   r¨   )r   rU  rR   r¤   r   r   r   r_  Ì  s(   
þ
ÿ
ý€ü	ÿ
"ýz+ThreadedNetworkedTestsSSL.test_ssl_verifiedN)
r>   r?   r@   rB   r™   rf  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.edura  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˜  rB  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   rG  )r   r—  r˜  rR   rB  r   ©r   r¢  r   r   r   rH  ü  s
   
"ýzRemoteIMAPTest.test_logoutN)r>   r?   r@   r˜  r™  rŸ  r   r   r7   r¢   rš  r›  r£  rH  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   rV  rX  Z	CERT_NONErW  rF   rG   )r   rU  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   rB  )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™  rB  r   )r   r¬  r¢  r   r   r   rH  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)rb  rU  ©	r   r—  r˜  r5   r5  r¢   r™  rG   rª  r   r   r   r   Ú#test_ssl_context_certfile_exclusive>  ó   þ"ÿz6RemoteIMAP_SSLTest.test_ssl_context_certfile_exclusivec              	   C   r­  )N)ZkeyfilerU  r®  r   r   r   r   Ú"test_ssl_context_keyfile_exclusiveD  r°  z5RemoteIMAP_SSLTest.test_ssl_context_keyfile_exclusiveN)r>   r?   r@   r™  rf  r¢   rš  r›  rª  r«  r£  rH  r¯  r±  r   r   r   r   r¨    s    r¨  Ú__main__)7ry  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   rZ  ZTestCaser   rR  rB   rf  r±   rN   r‹   rQ  r“  rS  rg  r”  Zis_resource_enabledÚskipr–  r¦  r¨  r>   Úmainr   r   r   r   Ú<module>   sx    ÿ@	_  O
$   

ÿ
 
ÿ

4ÿ