
    <e                        d dl mZ d dlmZ d dlmZ d dlZd dlZd dl	Z	d dl
Z
d dlZd dlZd dlZd dlmZmZmZmZmZ d dlmZ d dl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 	 d dlZn# e$ r dZY nw xY w ej        d           ej                            ej                            e           pej!        d          Z"ej                            ej                            e           pej!        d          Z# G d dej$                  Z%er G d de	j&                  Z'ej(        Z(n G d d          Z'dZ( G d de	j)                  Z* G d d          Z+ G d de+ej$                  Z, ej-        ed           G d de+ej$                              Z. G d dej$                  Z/ ej-        ed           G d d e/                      Z0 ej-         ej1        d!          d"           ej2        d#           G d$ d%ej$                                          Z3 ej-        ed           ej-         ej1        d!          d"           ej2        d#           G d& d'e3                                              Z4 ej-        ed           ej2        d#           G d( d)e3                                  Z5e6d*k    r ej7                     dS dS )+    )support)socket_helper)contextmanagerN)verboserun_with_tzrun_with_localecpython_onlyrequires_working_socket)hashlib_helper)threading_helper)warnings_helper)mock)datetimetimezone	timedeltaT)modulezkeycert3.pemzpycacert.pemc                       e Zd Zd Z ed          d             Zd Z eddd           ed          d	                         Zd
 Z	d Z
dS )TestImaplibc                    t          j        d          }t          j        d          }|                     t          j        |          |           t          j        d          }|                     t          j        |          |           t          j        d          }|                     t          j        |          |           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"))calendartimegmimaplibInternaldate2tupleassertEqualtimemktime)selft0tts      (/usr/lib/python3.11/test/test_imaplib.pytest_Internaldate2tuplez#TestImaplib.test_Internaldate2tuple#   s    _>??'=? ?R"---'=? ?R"---'=? ?R"-----    zMST+07MDT,M4.1.0,M10.5.0c                 z    |                      t          j        d          t          j        d                     d S )Ns.   25 (INTERNALDATE "02-Apr-2000 02:30:00 +0000")s.   25 (INTERNALDATE "02-Apr-2000 03:30:00 +0000"))assertNotEqualr   r   r   s    r"   "test_Internaldate2tuple_issue10941z.TestImaplib.test_Internaldate2tuple_issue10941/   sP    G6=? ?&AC C	D 	D 	D 	D 	Dr$   c                     ddt          j        d          ddt          j        dt	          t          dd                              dgS )Ni 5wg    eA)	        r+   !      r   r   r   )	r*   r+   r,   r+   r-   r.   r   r   r   r   i   "18-May-2033 05:33:20 +0200")r   	localtimer   fromtimestampr   r   r'   s    r"   
timevalueszTestImaplib.timevalues6   sO    L$.*D*D43&z'/	![0I0I'J'JL L.0 	0r$   LC_ALLde_DEfr_FRzSTD-1DST,M3.2.0,M11.1.0c                     d}|                                  D ],}t          j        |          }|                     ||           -d S )Nr/   )r2   r   Time2Internaldater   )r   expectedtinternals       r"   test_Time2Internaldatez"TestImaplib.test_Time2Internaldate>   sU    
 2"" 	1 	1A033HXx0000	1 	1r$   c                 \    |                                  D ]}t          j        |           d S N)r2   r   r7   )r   r9   s     r"   ,test_that_Time2Internaldate_returns_a_resultz8TestImaplib.test_that_Time2Internaldate_returns_a_resultI   s;     "" 	) 	)A%a((((	) 	)r$   c                    t          j                     5 }	 |                    dt          j        f           |                     d           n# t           j        $ r Y nw xY wd d d            n# 1 swxY w Y   t          j                    }|                     t                    5 }t          j
                     d d d            n# 1 swxY w Y   |                     |j        j        |           d S )N z3Cannot run the test with local IMAP server running.)socketconnectr   
IMAP4_PORTskipTesterrorr   get_socket_conn_refused_errsassertRaisesOSErrorIMAP4assertIn	exceptionerrno)r   sexpected_errnoscms       r"   test_imap4_host_default_valuez)TestImaplib.test_imap4_host_default_valueP   sc   ]__ 			2w12333IK K K K<   	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 (DFFw'' 	2MOOO	 	 	 	 	 	 	 	 	 	 	 	 	 	 	bl(/:::::sF   A.6AA.AA.AA..A25A2&CC
C
N)__name__
__module____qualname__r#   r   r(   r2   r   r;   r>   rP    r$   r"   r   r   !   s        
. 
. 
. [+,,D D -,D0 0 0 _Xw00 [*++1 1 ,+ 101) ) ); ; ; ; ;r$   r   c                       e Zd Zd ZdS )SecureTCPServerc                     | j                                         \  }}t          j        t          j                  }|                    t                     |                    |d          }||fS )NT)server_side)rA   acceptssl
SSLContextPROTOCOL_TLS_SERVERload_cert_chainCERTFILEwrap_socket)r   	newsocketfromaddrcontext
connstreams        r"   get_requestzSecureTCPServer.get_requestd   sc    "&+"4"4"6"6IxnS%<==G##H--- ,,YD,IIJx''r$   N)rQ   rR   rS   rd   rT   r$   r"   rV   rV   b   s#        	( 	( 	( 	( 	(r$   rV   c                       e Zd ZdS )rV   NrQ   rR   rS   rT   r$   r"   rV   rV   o   s        r$   c                   p     e Zd Zej        ZdZdZ fdZd Z	d Z
d Zd Zd Zd	 Zd
 Zd Zd Zd Z xZS )SimpleIMAPHandlerNr@   c                 x    t                                                       d| j        _        d | j        _        d S NF)supersetupserveris_selectedloggedr   	__class__s    r"   rl   zSimpleIMAPHandler.setupz   s.    "'!r$   c                     t           r$t          d|                                z             | j                            |           d S )NzSENT: %r)r   printstripwfilewriter   messages     r"   _sendzSimpleIMAPHandler._send   sA     	0*w}}.///
!!!!!r$   c                 6    |                      |dz              d S )N   
)ry   rw   s     r"   
_send_linezSimpleIMAPHandler._send_line   s    

7W$%%%%%r$   c                 V    |                      |                    d                     d S )NASCII)r|   encoderw   s     r"   _send_textlinez SimpleIMAPHandler._send_textline   s&    w//00000r$   c                 \    |                      d                    |||f                     d S )N )r   join)r   tagcoderx   s       r"   _send_taggedzSimpleIMAPHandler._send_tagged   s/    CHHc4%9::;;;;;r$   c                    |                      d           	 d}	 	 | j                            d          }|dk    rd S ||z  }n# t          $ r Y d S w xY w|                    d          rnQt
          r$t          d|                                z             | j        r4	 | j        	                    |           n# t          $ r
 d | _        Y nw xY w|                    d                                          }|d         }|d         }|dd          }t          | d	|z             r6 t          | d	|z             ||          }|r|| _        t          |           n|                     |d
|dz              `)Nz* OK IMAP4rev1r   r$   r{   zGOT: %rr~   r      cmd_BADz unknown)r   rfilereadrH   endswithr   rs   rt   continuationsendStopIterationdecodesplithasattrgetattrnextr   )r   linepart	splitliner   cmdargsr   s           r"   handlezSimpleIMAPHandler.handle   s   ,---%	@ D:??1--Ds{{DLDD   FF ==))   0i$**,,.///  -%**40000$ - - -(,D%%%-G,,2244IA,CA,CQRR=DtVc\** @:wtVc\::3EE '(4D%&&&!!#ucJ.>???K%	@s(    A A 
AAB9 9CCc                     | j         r
d| j         z   nd}|                     d|z              |                     |dd           d S )Nz
IMAP4rev1 	IMAP4rev1z* CAPABILITY OKCAPABILITY completed)capabilitiesr   r   )r   r   r   capss       r"   cmd_CAPABILITYz SimpleIMAPHandler.cmd_CAPABILITY   s\    $!t000  	 	Od2333#t%;<<<<<r$   c                 v    d | j         _        |                     d           |                     |dd           d S )Nz"* BYE IMAP4ref1 Server logging outr   zLOGOUT completed)rm   ro   r   r   r   r   r   s      r"   
cmd_LOGOUTzSimpleIMAPHandler.cmd_LOGOUT   s@    !@AAA#t%788888r$   c                 X    |d         | j         _        |                     |dd           d S )Nr   r   zLOGIN completed)rm   ro   r   r   s      r"   	cmd_LOGINzSimpleIMAPHandler.cmd_LOGIN   s/    !!W#t%677777r$   c                 v    d| j         _        |                     d           |                     |dd           d S )NT
   * 2 EXISTSr   [READ-WRITE] SELECT completed.)rm   rn   r|   r   r   s      r"   
cmd_SELECTzSimpleIMAPHandler.cmd_SELECT   s=    "&&&&#t%EFFFFFr$   c                     | j         j        r%d| j         _        |                     |dd           d S |                     |dd           d S )NFr   z*Returned to authenticated state. (Success)r   zNo mailbox selected)rm   rn   r   r   s      r"   cmd_UNSELECTzSimpleIMAPHandler.cmd_UNSELECT   sX    ;" 	A&+DK#c4)UVVVVVc5*?@@@@@r$   )rQ   rR   rS   r   LOOPBACK_TIMEOUTtimeoutr   r   rl   ry   r|   r   r   r   r   r   r   r   r   __classcell__rq   s   @r"   rh   rh   u   s        &GLL" " " " "
" " "
& & &1 1 1< < <(@ (@ (@T= = =9 9 9
8 8 8G G G
A A A A A A Ar$   rh   c                   >   e Zd ZdZd!dZd Zd Zd Zd Zd Z	d	 Z
d
 Zd Zd Zd Zd Zd Z ej        dd          d             Z ej        dd          d             Zd Z ej        dd          d             Zd Zd Zd Zd Zd Zd Zd Zd Z d  Z!dS )"NewIMAPTestsMixinNTc                    	  G d d| j                   }|                     | j                   |                      t          j        df|          | _        t          j        | j        dz   | j        j	        ddi          | _
        d| j
        _        | j
                                         |r | j        | j        j         | _        | j        | j        fS )	Nc                       e Zd Zd ZdS )/NewIMAPTestsMixin._setup.<locals>.TestTCPServerc                 X    	 |                      |           |                                   r=   close_requestserver_closer   requestclient_addresss      r"   handle_errorz<NewIMAPTestsMixin._setup.<locals>.TestTCPServer.handle_error   s2     ""7+++!!###r$   NrQ   rR   rS   r   rT   r$   r"   TestTCPServerr      s#            r$   r   r   z-serverpoll_interval{Gz?nametargetkwargsT)server_class
addCleanup_cleanupr   HOSTrm   	threadingThread_testMethodNameserve_foreverthreaddaemonstart
imap_classserver_addressclient)r   imap_handlerrB   r   s       r"   _setupzNewIMAPTestsMixin._setup   s    		 	 	 	 	D- 	 	 	 	&&&'');Q(?NN&%i/;, $T*, , , " 	G)$/4;+EFDK{DK''r$   c                    	 | j         )| j         j        dk    r| j                                          | j                                         | j                                         t          j        | j                   d | _        d S )NLOGOUT)r   stateshutdownrm   r   r   join_threadr   r'   s    r"   r   zNewIMAPTestsMixin._cleanup   sz    	 ;"t{'8H'D'DK  """  """$T[111r$   c                      G d dt           j                  }|                     |d          \  }} | j        t          j        j        | j        g|j        R   d S )Nc                       e Zd Zd ZdS )ONewIMAPTestsMixin.test_EOF_without_complete_welcome_message.<locals>.EOFHandlerc                 :    | j                             d           d S Ns   * OKru   rv   r'   s    r"   r   zVNewIMAPTestsMixin.test_EOF_without_complete_welcome_message.<locals>.EOFHandler.handle  s    
  )))))r$   NrQ   rR   rS   r   rT   r$   r"   
EOFHandlerr   
  s#        * * * * *r$   r   FrB   )	socketserverStreamRequestHandlerr   rG   r   rI   abortr   r   )r   r   _rm   s       r"   )test_EOF_without_complete_welcome_messagez;NewIMAPTestsMixin.test_EOF_without_complete_welcome_message  s    	* 	* 	* 	* 	*: 	* 	* 	* KK
EK::	6'--t 	2!0	2 	2 	2 	2 	2 	2r$   c                      G d dt                     }|                     |d          \  }} | j        t          j        j        | j        g|j        R   d S )Nc                       e Zd Zd ZdS )BNewIMAPTestsMixin.test_line_termination.<locals>.BadNewlineHandlerc                 ^    |                      d           |                     |dd           d S Ns   * CAPABILITY IMAP4rev1 AUTH
r   r   ry   r   r   s      r"   r   zQNewIMAPTestsMixin.test_line_termination.<locals>.BadNewlineHandler.cmd_CAPABILITY  4    

;<<<!!#t-CDDDDDr$   NrQ   rR   rS   r   rT   r$   r"   BadNewlineHandlerr     s(        E E E E Er$   r   Fr   )rh   r   rG   r   rI   r   r   r   )r   r   r   rm   s       r"   test_line_terminationz'NewIMAPTestsMixin.test_line_termination  s    	E 	E 	E 	E 	E 1 	E 	E 	E KK 15KAA	6'--t 	2!0	2 	2 	2 	2 	2 	2r$   c                 h    G d dt                     }|                     |          \  }}|                     |j                   |                     t
          j        j        d          5  |                    d           d d d            n# 1 swxY w Y   |                     |j                   d S )Nc                       e Zd ZdZdS )MNewIMAPTestsMixin.test_enable_raises_error_if_not_AUTH.<locals>.EnableHandlerAUTH ENABLE UTF8=ACCEPTNrQ   rR   rS   r   rT   r$   r"   EnableHandlerr     s        4LLLr$   r   zENABLE.*NONAUTHfoo)	rh   r   assertFalseutf8_enabledassertRaisesRegexr   rI   rE   enable)r   r   r   r   s       r"   $test_enable_raises_error_if_not_AUTHz6NewIMAPTestsMixin.test_enable_raises_error_if_not_AUTH  s    	5 	5 	5 	5 	5- 	5 	5 	5KK..	,---##GM$79JKK 	! 	!MM%   	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	!,-----s   +BBBc                     |                      t                    \  }}|                     t          j        j        d          5  |                    d           d d d            d S # 1 swxY w Y   d S )Ndoes not support ENABLEr   )r   rh   r   r   rI   rE   r   )r   r   r   s      r"   )test_enable_raises_error_if_no_capabilityz;NewIMAPTestsMixin.test_enable_raises_error_if_no_capability#  s    KK 122	##GM$7)+ + 	! 	!MM%   	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	!s   A&&A*-A*c                 D   |                      t                    \  }}|                    dd          \  }}|                     |d           |                     t
          j        j        d          5  |                    d           d d d            d S # 1 swxY w Y   d S )Nuserpassr   r  UTF8=ACCEPT)	r   rh   loginr   r   r   rI   rE   r   r   r   r   typdatas        r"   .test_enable_UTF8_raises_error_if_not_supportedz@NewIMAPTestsMixin.test_enable_UTF8_raises_error_if_not_supported)  s    KK 122	LL00	Td#####GM$7)+ + 	) 	)MM-(((	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	)s   2BBBc                     G d dt                     }|                     |          \  }}|                     |j        d           |                    dd           \  }}|                     |d           |                     |j        d           |                    d          \  }}|                     |d           |                     |j        d	           d
}|                    d d d |                    d	                    \  }}|                     |d           |                     |j        d|z                      d	                     d S )Nc                   $    e Zd ZdZd Zd Zd ZdS )HNewIMAPTestsMixin.test_enable_UTF8_True_append.<locals>.UTF8AppendServerzENABLE UTF8=ACCEPTc                 4    |                      |dd           d S Nr   zENABLE successfulr   r   s      r"   
cmd_ENABLEzSNewIMAPTestsMixin.test_enable_UTF8_True_append.<locals>.UTF8AppendServer.cmd_ENABLE4  !    !!#t-@AAAAAr$   c              3   ~   K   |                      d           d V | j        _        |                     |dd           d S N+r   zFAKEAUTH successfulr   rm   responser   r   s      r"   cmd_AUTHENTICATEzYNewIMAPTestsMixin.test_enable_UTF8_True_append.<locals>.UTF8AppendServer.cmd_AUTHENTICATE6  G      ##C(((',uu$!!#t-BCCCCCr$   c              3   ~   K   |                      d           d V | j        _        |                     |dd           d S Nr  r   okayr  r   s      r"   
cmd_APPENDzSNewIMAPTestsMixin.test_enable_UTF8_True_append.<locals>.UTF8AppendServer.cmd_APPEND:  F      ##C(((',uu$!!#tV44444r$   N)rQ   rR   rS   r   r  r  r  rT   r$   r"   UTF8AppendServerr  2  sL        /LB B BD D D5 5 5 5 5r$   r   asciiMYAUTHc                     dS Ns   fakerT   xs    r"   <lambda>z@NewIMAPTestsMixin.test_enable_UTF8_True_append.<locals>.<lambda>@      ' r$   r   
   ZmFrZQ==
r  utf-8   Subject: üñí©öðéUTF8 (%s)
)	rh   r   r   	_encodingauthenticater  r   appendr   )	r   r   r   rm   r   r   
msg_stringr	  r
  s	            r"   test_enable_UTF8_True_appendz.NewIMAPTestsMixin.test_enable_UTF8_True_append1  sm   	5 	5 	5 	5 	50 	5 	5 	5 %566)7333%%h0A0ABBat$$$/:::--..at$$$)7333.
MM$dJ4E4Eg4N4NOO	Td###z)11'::	< 	< 	< 	< 	<r$   c                     G d dt                     }|                     |          \  }}|                    dd           \  }}|                     |d           |                    d          \  }}|                     |d           |                     |j                   |                     t          j	        j
        d          5  |                    dd	           d d d            d S # 1 swxY w Y   d S )
Nc                       e Zd ZdZd Zd ZdS )PNewIMAPTestsMixin.test_search_disallows_charset_in_utf8_mode.<locals>.UTF8Serverr   c                 4    |                      |dd           d S r  r  r   s      r"   r  z[NewIMAPTestsMixin.test_search_disallows_charset_in_utf8_mode.<locals>.UTF8Server.cmd_ENABLEO  r  r$   c              3   ~   K   |                      d           d V | j        _        |                     |dd           d S r  r  r   s      r"   r  zaNewIMAPTestsMixin.test_search_disallows_charset_in_utf8_mode.<locals>.UTF8Server.cmd_AUTHENTICATEQ  r  r$   NrQ   rR   rS   r   r  r  rT   r$   r"   
UTF8Serverr4  M  s?        4LB B BD D D D Dr$   r8  r"  c                     dS r$  rT   r%  s    r"   r'  zNNewIMAPTestsMixin.test_search_disallows_charset_in_utf8_mode.<locals>.<lambda>V  s     r$   r   r  zcharset.*UTF8r   bar)rh   r   r.  r   r   
assertTruer   r   r   rI   rE   search)r   r8  r   r   r	  s        r"   *test_search_disallows_charset_in_utf8_modez<NewIMAPTestsMixin.test_search_disallows_charset_in_utf8_modeL  sR   	D 	D 	D 	D 	D* 	D 	D 	D KK
++	$$X/@/@AAQd###}--Qd###+,,,##GM$7II 	( 	(MM%'''	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	(s   	C--C14C1c                     G d dt                     }|                     |          \  }}|                     t          j        j        d          5  |                    dd            d d d            d S # 1 swxY w Y   d S )Nc                       e Zd Zd ZdS )6NewIMAPTestsMixin.test_bad_auth_name.<locals>.MyServerc                 f    |                      |dd                    |d                              d S NNOz#unrecognized authentication type {}r   r   formatr   s      r"   r  zGNewIMAPTestsMixin.test_bad_auth_name.<locals>.MyServer.cmd_AUTHENTICATE`  sB    !!#t9@@aIIK K K K Kr$   NrQ   rR   rS   r  rT   r$   r"   MyServerr@  _  s(        K K K K Kr$   rG  z'unrecognized authentication type METHODMETHODc                      dS Nr   rT   rT   r$   r"   r'  z6NewIMAPTestsMixin.test_bad_auth_name.<locals>.<lambda>f  s    ! r$   rh   r   r   r   rI   rE   r.  r   rG  r   r   s       r"   test_bad_auth_namez$NewIMAPTestsMixin.test_bad_auth_name^  s    	K 	K 	K 	K 	K( 	K 	K 	K KK))	##GM$79; ; 	5 	5))444	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5   A66A:=A:c                     G d dt                     }|                     |          \  }}|                     t          j        j        d          5  |                    dd            d d d            d S # 1 swxY w Y   d S )Nc                       e Zd Zd ZdS )?NewIMAPTestsMixin.test_invalid_authentication.<locals>.MyServerc              3   t   K   |                      d           d V | _        |                     |dd           d S Nr  rC  z[AUTHENTICATIONFAILED] invalidr   r  r   r   s      r"   r  zPNewIMAPTestsMixin.test_invalid_authentication.<locals>.MyServer.cmd_AUTHENTICATEj  D      ##C((( %!!#t-MNNNNNr$   NrF  rT   r$   r"   rG  rQ  i  s(        O O O O Or$   rG  z \[AUTHENTICATIONFAILED\] invalidr"  c                     dS r$  rT   r%  s    r"   r'  z?NewIMAPTestsMixin.test_invalid_authentication.<locals>.<lambda>q  s    G r$   rK  rL  s       r"   test_invalid_authenticationz-NewIMAPTestsMixin.test_invalid_authenticationh  s    	O 	O 	O 	O 	O( 	O 	O 	O
 KK))	##GM$735 5 	= 	=*;*;<<<	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	=rN  c                      G d dt                     }|                     |          \  }}|                    dd           \  }}|                     |d           |                     |j        d           d S )Nc                       e Zd Zd ZdS )CNewIMAPTestsMixin.test_valid_authentication_bytes.<locals>.MyServerc              3   ~   K   |                      d           d V | j        _        |                     |dd           d S r  r  r   s      r"   r  zTNewIMAPTestsMixin.test_valid_authentication_bytes.<locals>.MyServer.cmd_AUTHENTICATEu  r  r$   NrF  rT   r$   r"   rG  rZ  t  (        D D D D Dr$   rG  r"  c                     dS r$  rT   r%  s    r"   r'  zCNewIMAPTestsMixin.test_valid_authentication_bytes.<locals>.<lambda>z  r(  r$   r   r)  rh   r   r.  r   r  r   rG  r   rm   r   r   s         r"   test_valid_authentication_bytesz1NewIMAPTestsMixin.test_valid_authentication_bytess  s    	D 	D 	D 	D 	D( 	D 	D 	D
 X..%%h0A0ABBat$$$/:::::r$   c                      G d dt                     }|                     |          \  }}|                    dd           \  }}|                     |d           |                     |j        d           d S )Nc                       e Zd Zd ZdS )HNewIMAPTestsMixin.test_valid_authentication_plain_text.<locals>.MyServerc              3   ~   K   |                      d           d V | j        _        |                     |dd           d S r  r  r   s      r"   r  zYNewIMAPTestsMixin.test_valid_authentication_plain_text.<locals>.MyServer.cmd_AUTHENTICATE  r  r$   NrF  rT   r$   r"   rG  rc    r\  r$   rG  r"  c                     dS NfakerT   r%  s    r"   r'  zHNewIMAPTestsMixin.test_valid_authentication_plain_text.<locals>.<lambda>  s    & r$   r   r)  r^  r_  s         r"   $test_valid_authentication_plain_textz6NewIMAPTestsMixin.test_valid_authentication_plain_text~  s    	D 	D 	D 	D 	D( 	D 	D 	D
 X..%%h0@0@AAat$$$/:::::r$   md5opensslc                      G d dt                     }|                     |          \  }}|                     d|j        v            |                    dd          \  }}|                     |d           d S )Nc                       e Zd ZdZd ZdS )@NewIMAPTestsMixin.test_login_cram_md5_bytes.<locals>.AuthHandlerLOGINDISABLED AUTH=CRAM-MD5c              3      K   |                      d           d V }|dk    r|                     |dd           d S |                     |dd           d S Nz:+ PDE4OTYuNjk3MTcwOTUyQHBvc3RvZmZpY2UucmVzdG9uLm1jaS5uZXQ=s2   dGltIGYxY2E2YmU0NjRiOWVmYTFjY2E2ZmZkNmNmMmQ5ZjMy
r   zCRAM-MD5 successfulrC  z	No accessr   r   r   r   r   rs       r"   r  zQNewIMAPTestsMixin.test_login_cram_md5_bytes.<locals>.AuthHandler.cmd_AUTHENTICATE  {      ## %9 : : :EE 7 7 7%%c41FGGGGG%%c4=====r$   NrQ   rR   rS   r   r  rT   r$   r"   AuthHandlerrn    (        8L> > > > >r$   rw  AUTH=CRAM-MD5tim   tanstaaftanstaafr   rh   r   r;  r   login_cram_md5r   r   rw  r   r   rets        r"   test_login_cram_md5_bytesz+NewIMAPTestsMixin.test_login_cram_md5_bytes  s    
	> 
	> 
	> 
	> 
	>+ 
	> 
	> 
	> KK,,	6+>>???&&u.ABBQd#####r$   c                      G d dt                     }|                     |          \  }}|                     d|j        v            |                    dd          \  }}|                     |d           d S )Nc                       e Zd ZdZd ZdS )ENewIMAPTestsMixin.test_login_cram_md5_plain_text.<locals>.AuthHandlerro  c              3      K   |                      d           d V }|dk    r|                     |dd           d S |                     |dd           d S rq  rr  rs  s       r"   r  zVNewIMAPTestsMixin.test_login_cram_md5_plain_text.<locals>.AuthHandler.cmd_AUTHENTICATE  ru  r$   Nrv  rT   r$   r"   rw  r    rx  r$   rw  ry  rz  tanstaaftanstaafr   r|  r~  s        r"   test_login_cram_md5_plain_textz0NewIMAPTestsMixin.test_login_cram_md5_plain_text  s    
	> 
	> 
	> 
	> 
	>+ 
	> 
	> 
	> KK,,	6+>>???&&u.@AAQd#####r$   c                     G d dt                     }|                     |          \  }}|                     t          j        j        d          5  |                    dd            d d d            d S # 1 swxY w Y   d S )Nc                       e Zd Zd ZdS )?NewIMAPTestsMixin.test_aborted_authentication.<locals>.MyServerc              3      K   |                      d           d V | _        | j        dk    r|                     |dd           d S |                     |dd           d S Nr  s   *
rC  z[AUTHENTICATIONFAILED] abortedr   zMYAUTH successfulrT  r   s      r"   r  zPNewIMAPTestsMixin.test_aborted_authentication.<locals>.MyServer.cmd_AUTHENTICATE  s~      ##C((( %=H,,%%8: : : : :
 %%c41DEEEEEr$   NrF  rT   r$   r"   rG  r    s(        	F 	F 	F 	F 	Fr$   rG  z \[AUTHENTICATIONFAILED\] abortedr"  c                     d S r=   rT   r%  s    r"   r'  z?NewIMAPTestsMixin.test_aborted_authentication.<locals>.<lambda>  s    D r$   rK  rL  s       r"   test_aborted_authenticationz-NewIMAPTestsMixin.test_aborted_authentication  s    
	F 
	F 
	F 
	F 
	F( 
	F 
	F 
	F KK))	##GM$735 5 	: 	:..999	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	:rN  zimaplib._MAXLINE
   c                      G d dt                     }|                     |d          \  }}|                     t          j        j        d          5   | j        |j          d d d            d S # 1 swxY w Y   d S )Nc                       e Zd Zd ZdS ):NewIMAPTestsMixin.test_linetoolong.<locals>.TooLongHandlerc                 :    | j                             d           d S )Ns   * OK xxxxxxxxxxx
r   r'   s    r"   r   zANewIMAPTestsMixin.test_linetoolong.<locals>.TooLongHandler.handle  s    
  !?@@@@@r$   Nr   rT   r$   r"   TooLongHandlerr    s(        A A A A Ar$   r  Fr   zgot more than 10 bytes)rh   r   r   r   rI   rE   r   r   )r   r  r   rm   s       r"   test_linetoolongz"NewIMAPTestsMixin.test_linetoolong  s    	A 	A 	A 	A 	A. 	A 	A 	A KKK>>	6##GM$7(* * 	4 	4DOV233	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4s   A00A47A4c                     |                      t          d          \  }} | j        |j         5  	 d d d            d S # 1 swxY w Y   d S )NFr   )r   rh   r   r   )r   r   rm   s      r"   test_simple_with_statementz,NewIMAPTestsMixin.test_simple_with_statement  s    KK 15KAA	6T_f34 	 		 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   >AAc                 H   |                      t                    \  }}|j        d         }|                     d|d           }|                     |j        j        d            |                                 |                     d|t          j	                  }|                     |j        j        t          j	                   |                                 | 
                    t                    5  |                     d|d          }d d d            d S # 1 swxY w Y   d S )Nr   	localhostr   r   )r   rh   r   r   r   sockr   r   r   r   rG   
ValueError)r   r   rm   addrr   s        r"   test_imaplib_timeout_testz+NewIMAPTestsMixin.test_imaplib_timeout_test  sR   KK 122	6$Q'dDAA,d333dG<TUU,g.FGGGz** 	C 	C__[$_BBF	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	Cs   1DDDc                     G d dt                     }|                     |          \  }}|j        d         }|                     t                    5  |                     d|d          }d d d            d S # 1 swxY w Y   d S )Nc                       e Zd Zd ZdS )QNewIMAPTestsMixin.test_imaplib_timeout_functionality_test.<locals>.TimeoutHandlerc                 b    t          j        d           t                              |            d S rJ  )r   sleeprh   r   r'   s    r"   r   zXNewIMAPTestsMixin.test_imaplib_timeout_functionality_test.<locals>.TimeoutHandler.handle  s)    
1!((.....r$   Nr   rT   r$   r"   TimeoutHandlerr    s#        / / / / /r$   r  r   r  gMbP?r  )rh   r   r   rG   TimeoutErrorr   )r   r  r   rm   r  r   s         r"   'test_imaplib_timeout_functionality_testz9NewIMAPTestsMixin.test_imaplib_timeout_functionality_test  s    	/ 	/ 	/ 	/ 	/. 	/ 	/ 	/
 KK//	6$Q'|,, 	G 	G__[$_FFF	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	Gs   A99A= A=c                 (   |                      t          d          \  }} | j        |j         5 }|                    dd           |                     |j        d           d d d            n# 1 swxY w Y   |                     |j                   d S NFr   r  r  )r   rh   r   r   r  r   ro   assertIsNoner   r   rm   imaps       r"   test_with_statementz%NewIMAPTestsMixin.test_with_statement  s    KK 15KAA	6T_f34 	4JJvv&&&V]F333	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	&-(((((s   2A--A14A1c                    |                      t          d          \  }} | j        |j         5 }|                    dd           |                     |j        d           |                                 |                     |j                   d d d            n# 1 swxY w Y   |                     |j                   d S r  )	r   rh   r   r   r  r   ro   logoutr  r  s       r"   test_with_statement_logoutz,NewIMAPTestsMixin.test_with_statement_logout  s    KK 15KAA	6T_f34 	-JJvv&&&V]F333KKMMMfm,,,		- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	-
 	&-(((((s   A BB"Bc                    |                      t                    \  }}|                    dd          \  }}|                     |d           |                     |d         d           |                     |j        d           d S )Nr  r  r   r      LOGIN completedAUTH)r   rh   r  r   r   r  s        r"   
test_loginzNewIMAPTestsMixin.test_login  s~    KK 122	LL00	Td###a"4555v.....r$   c                    |                      t                    \  }}|                    dd          \  }}|                     |d           |                     |d         d           |                                \  }}|                     |d||f           |                     |d         d||f           |                     |j        d           d S )	Nr  r  r   r   r  BYEs   IMAP4ref1 Server logging outr   )r   rh   r  r   r  r   r  s        r"   test_logoutzNewIMAPTestsMixin.test_logout  s    KK 122	LL00	Td###a"4555MMOO	Tec4[111a"AC;OOOx00000r$   c                     G d dt                     }|                     |          \  }}|                    dd           |                                \  }}|                     |d           |                     |d         d           d S )Nc                       e Zd Zd ZdS ),NewIMAPTestsMixin.test_lsub.<locals>.LsubCmdc                 Z    |                      d           |                     |dd          S )Nz* LSUB () "." directoryAr   zLSUB completedrr  r   s      r"   cmd_LSUBz5NewIMAPTestsMixin.test_lsub.<locals>.LsubCmd.cmd_LSUB  s0    ##$>???((d4DEEEr$   N)rQ   rR   rS   r  rT   r$   r"   LsubCmdr  
  s(        F F F F Fr$   r  r  r  r   r   s   () "." directoryA)rh   r   r  lsubr   )r   r  r   r   r	  r
  s         r"   	test_lsubzNewIMAPTestsMixin.test_lsub	  s    	F 	F 	F 	F 	F' 	F 	F 	F KK((	VV$$$KKMM	Td###a"677777r$   c                    |                      t                    \  }}|                    dd           |                                \  }}|                     |d           |                     |d         d           |                                \  }}|                     |d           |                     |d         d           |                     |j        d           d S )Nr  r  r   r      2s*   Returned to authenticated state. (Success)r  )r   rh   r  selectr   unselectr   r  s        r"   test_unselectzNewIMAPTestsMixin.test_unselect  s    KK 122	VV$$$MMOO	Td###a$'''OO%%	Td###a"OPPPv.....r$   )T)"rQ   rR   rS   r   r   r   r   r   r   r  r  r1  r=  rM  rW  r`  rh  r   requires_hashdigestr  r  r  r   patchr  r  r  r  r  r  r  r  r  r  rT   r$   r"   r   r      s       F( ( ( (B   2 2 22 2 2. . .! ! !) ) )< < <6( ( ($5 5 5	= 	= 	=	; 	; 	;	; 	; 	; (^'t<<<$ $ =<$" (^'t<<<$ $ =<$": : :" TZ"B''4 4 ('4  

C 
C 
C	G 	G 	G) ) )) ) )/ / /1 1 1	8 	8 	8
/ 
/ 
/ 
/ 
/r$   r   c                   *    e Zd Zej        Zej        ZdS )NewIMAPTestsN)	rQ   rR   rS   r   rI   r   r   	TCPServerr   rT   r$   r"   r  r  !  s        J)LLLr$   r  zSSL not availablec                   8    e Zd ZeZeZd Zd Ze	d             Z
dS )NewIMAPSSLTestsc                    t          j        t           j                  }|                     |j        t           j                   |                     |j        d           |                    t                     | 	                    t           j
        d          5  |                     t                    \  }} | j        |j        d|i}|                                 d d d            d S # 1 swxY w Y   d S )NT=IP address mismatch, certificate is not valid for '127.0.0.1'ssl_context)rZ   r[   PROTOCOL_TLS_CLIENTr   verify_modeCERT_REQUIREDcheck_hostnameload_verify_locationsCAFILEr   CertificateErrorr   rh   r   r   r   r   r  r   rm   r   s        r"   test_ssl_raiseszNewIMAPSSLTests.test_ssl_raises+  s)   nS%<==0#2CDDD3T:::))&111##C$8  	 	 $566IAv$T_f&; >1<> >FOO	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   AC**C.1C.c                    t          j        t           j                  }|                    t                     |                     t                    \  }}|                     d|j        d         |          }|	                                 d S )Nr  r   r  )
rZ   r[   r  r  r  r   rh   r   r   r   r  s        r"   test_ssl_verifiedz!NewIMAPSSLTests.test_ssl_verified9  s{    nS%<==))&111KK 122	6f.CA.F-8 ! : :r$   c                    t          j        dt          f          5  t          j                            | j        d          5  t          j                            | j        d          5  |                     ddt                     d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nr@   open_connectr     )certfile)r   check_warningsDeprecationWarningr   r  objectr   r^   r'   s    r"   test_certfile_arg_warnz&NewIMAPSSLTests.test_certfile_arg_warnD  s   +R1C,DEE 	I 	I""4?F;; I IZ&&t
CC I IOOKxOHHHI I I I I I I I I I I I I I II I I I I I I I I I I I I I I	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	IsY   &C&B)(BB)BB)BB)C)B-	-C0B-	1CCCN)rQ   rR   rS   	IMAP4_SSLr   rV   r   r  r  r	   r  rT   r$   r"   r  r  &  s\        J"L     I I \I I Ir$   r  c                   2   e Zd Zej        Zej        Zd Z	d Z
ed             Zed             Zej        d             Zej        d             Zej        d             Zej        d             Z G d	 d
e          Zej        d             Zej        d             Zej        d             Zej        d             Zej        d             Zej        d             Zej        d             Zej        d             Zej         ej        dd          d                         Z ej        d             Z!d Z"ej        d             Z#ej        d             Z$ej        d             Z%ej        e& e'j(        dd          d                                     Z)dS ) ThreadedNetworkedTestsc                 &    G d d| j                   }t          rt          d            |||          }|                     |j        |j                                                   t          rIt          d           t          d|           t          d| j                    t          d|j                   t          j	        d| j         z  |j
        d	d
i          }d|_        |                                 t          rt          d           ||fS )Nc                       e Zd Zd ZdS )4ThreadedNetworkedTests.make_server.<locals>.MyServerc                 V    |                      |           |                                   r=   r   r   s      r"   r   zAThreadedNetworkedTests.make_server.<locals>.MyServer.handle_errorR  s+    ""7+++!!###r$   Nr   rT   r$   r"   rG  r  Q  s#            r$   rG  zcreating serverzserver createdzADDR =zCLASS =zHDLR =z
%s servingr   r   r   Tzserver running)r   r   rs   r   r   rA   getsocknameRequestHandlerClassr   r   r   r   r   )r   r  hdlrrG  rm   r9   s         r"   make_serverz"ThreadedNetworkedTests.make_serverO  s6   	 	 	 	 	t( 	 	 	  	%#$$$$%%.0I0I0K0KLLL 	8"###(D!!!)T.///(F6777 11' $T*, , , 				 	$"###qyr$   c                     t           rt          d           |                                 |                                 |                                 t           rt          d           d S d S )Nzwaiting for serverdone)r   rs   r   r   r   )r   rm   r   s      r"   reap_serverz"ThreadedNetworkedTests.reap_servero  si     	(&''' 	&MMMMM	 	r$   c              #      K   |                      t          j        df|          \  }}	 |V  |                     ||           d S # |                     ||           w xY w)Nr   )r  r   r   r  )r   r  rm   r   s       r"   reaped_serverz$ThreadedNetworkedTests.reaped_serverx  sm      ))=+=q*A4HH	-LLLVV,,,,,DVV,,,,s   A Ac              #      K   |                      |          5 } | j        |j         }	 ||fV  |                                 n# |                                 w xY w	 d d d            d S # 1 swxY w Y   d S r=   )r  r   r   r  )r   r  rm   r   s       r"   reaped_pairz"ThreadedNetworkedTests.reaped_pair  s      %% 	 $T_f&;<F fn$$$	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	 s'   A+AA+AA++A/2A/c                     |                      t                    5 } | j        |j         }|                                 d d d            d S # 1 swxY w Y   d S r=   )r  rh   r   r   r   r   rm   r   s      r"   test_connectz#ThreadedNetworkedTests.test_connect  s     122 	f$T_f&;<FOO	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   $AAAc                 <    G d dt                     }|                     |          5 \  }}|                    dd           \  }}|                     |d           |                     |j        d           |                    d           |                    dd	d
          \  }\  }|                     d|           |                    d           |                    d          \  }\  }|                     d|           d d d            d S # 1 swxY w Y   d S )Nc                   0     e Zd Z fdZd Zd Zd Z xZS )EThreadedNetworkedTests.test_bracket_flags.<locals>.BracketFlagHandlerc                 Z    g d| _         t                                                       d S )N)AnsweredFlaggedDeletedSeenDraft)flagsrk   r   rp   s    r"   r   zLThreadedNetworkedTests.test_bracket_flags.<locals>.BracketFlagHandler.handle  s*    PPP
     r$   c              3   ~   K   |                      d           d V | j        _        |                     |dd           d S r  r  r   s      r"   r  zVThreadedNetworkedTests.test_bracket_flags.<locals>.BracketFlagHandler.cmd_AUTHENTICATE  r  r$   c                 l   d                     | j                  }|                     d|z                      d                     |                     d           |                     d           d|z  }|                     |                    d                     |                     |dd           d S )	N \z* FLAGS (%s)r!  r   s
   * 0 RECENTz-* OK [PERMANENTFLAGS %s \*)] Flags permitted.r   r   )r   r   r|   r   r   )r   r   r   flag_msgmsgs        r"   r   zPThreadedNetworkedTests.test_bracket_flags.<locals>.BracketFlagHandler.cmd_SELECT  s     ::dj11(!: B B7 K KLLL......G"#

7 3 3444!!#t-MNNNNNr$   c                    |d                              d                               d                                          }| j                            |           dd                    | j                  z  }d|d         d|}|                     |                    d	                     |                     |d
d           d S )Nr   ()z(FLAGS (%s))r  z* r   z FETCH r!  r   zSTORE completed.)rt   r   r   extendr   r|   r   r   )r   r   r   	new_flags	flags_msgr  s         r"   	cmd_STOREzOThreadedNetworkedTests.test_bracket_flags.<locals>.BracketFlagHandler.cmd_STORE  s     GMM#..44S99??AA	
!!),,,*UZZ
-C-CC		)-a))<

7 3 3444!!#t-?@@@@@r$   )rQ   rR   rS   r   r  r   r  r   r   s   @r"   BracketFlagHandlerr    sr        ! ! ! ! !D D D
O O OA A A A A A Ar$   r  r"  c                     dS r$  rT   r%  s    r"   r'  z;ThreadedNetworkedTests.test_bracket_flags.<locals>.<lambda>       r$   r   r)  test   1z+FLAGSz[test]s   [test]PERMANENTFLAGS)rh   r  r.  r   r  r  storerJ   )r   r  rm   r   r   r
  r	  s          r"   test_bracket_flagsz)ThreadedNetworkedTests.test_bracket_flags  s|   	A 	A 	A 	A 	A!2 	A 	A 	A: 011 		+5Eff,,X7H7HIIJD$T4(((V_o>>>MM&!!! ,,tXx@@KC$MM)T***MM&!!! //*:;;KC$MM)T***		+ 		+ 		+ 		+ 		+ 		+ 		+ 		+ 		+ 		+ 		+ 		+ 		+ 		+ 		+ 		+ 		+ 		+s   CDDDc                      G d dt           j                  }|                     |          5 } | j        t          j        j        | j        g|j        R   d d d            d S # 1 swxY w Y   d S )Nc                       e Zd Zd ZdS )9ThreadedNetworkedTests.test_issue5949.<locals>.EOFHandlerc                 :    | j                             d           d S r   r   r'   s    r"   r   z@ThreadedNetworkedTests.test_issue5949.<locals>.EOFHandler.handle  s    
  )))))r$   Nr   rT   r$   r"   r   r    s#        * * * * *r$   r   )	r   r   r  rG   r   rI   r   r   r   )r   r   rm   s      r"   test_issue5949z%ThreadedNetworkedTests.test_issue5949  s    	* 	* 	* 	* 	*: 	* 	* 	*
 
++ 	GvDgm1"oG060EG G G G	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	Gs   )A$$A(+A(c                      G d dt                     }|                     |          5 } | j        t          j        j        | j        g|j        R   d d d            d S # 1 swxY w Y   d S )Nc                       e Zd Zd ZdS )GThreadedNetworkedTests.test_line_termination.<locals>.BadNewlineHandlerc                 ^    |                      d           |                     |dd           d S r   r   r   s      r"   r   zVThreadedNetworkedTests.test_line_termination.<locals>.BadNewlineHandler.cmd_CAPABILITY  r   r$   Nr   rT   r$   r"   r   r    s(        E E E E Er$   r   )rh   r  rG   r   rI   r   r   r   )r   r   rm   s      r"   r   z,ThreadedNetworkedTests.test_line_termination  s    	E 	E 	E 	E 	E 1 	E 	E 	E  122 	GfDgm1"oG060EG G G G	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G   )AA#&A#c                       e Zd ZdZd Zd ZdS )!ThreadedNetworkedTests.UTF8Serverr   c                 4    |                      |dd           d S r  r  r   s      r"   r  z,ThreadedNetworkedTests.UTF8Server.cmd_ENABLE  s!    c4)<=====r$   c              #   ~   K   |                      d           d V | j        _        |                     |dd           d S r  r  r   s      r"   r  z2ThreadedNetworkedTests.UTF8Server.cmd_AUTHENTICATE  sG      $$$#(55DK c4)>?????r$   Nr7  rT   r$   r"   r8  r     s<        0	> 	> 	>	@ 	@ 	@ 	@ 	@r$   r8  c                 0   |                      | j                  5 \  }}|                     |j                   |                     t
          j        j        |j        d           |                     |j                   d d d            d S # 1 swxY w Y   d S )Nr   )	r  r8  r   r   rG   r   rI   rE   r   r  s      r"   r   z;ThreadedNetworkedTests.test_enable_raises_error_if_not_AUTH  s    do.. 	22B66V0111gm16=%HHHV0111	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2s   A#BBBc                      G d d| j                   }|                     |          5 \  }}|                     t          j        j        |j        d           d d d            d S # 1 swxY w Y   d S )Nc                       e Zd ZdZdS )XThreadedNetworkedTests.test_enable_raises_error_if_no_capability.<locals>.NoEnableServerr  Nr   rT   r$   r"   NoEnableServerr&    s        !LLLr$   r'  r   )r8  r  rG   r   rI   rE   r   )r   r'  rm   r   s       r"   r  z@ThreadedNetworkedTests.test_enable_raises_error_if_no_capability  s    	" 	" 	" 	" 	"T_ 	" 	" 	"n-- 	I1A&&gm16=%HHH	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	Is   /A%%A),A)c                     G d dt                     }|                     t          j        j                  5  |                     |          5 \  }}|                    dd          \  }}|                     |d           |                    d           	 d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nc                       e Zd ZdS )\ThreadedNetworkedTests.test_enable_UTF8_raises_error_if_not_supported.<locals>.NonUTF8ServerNrf   rT   r$   r"   NonUTF8Serverr*    s        Dr$   r+  r  r  r   r  )	rh   rG   r   rI   rE   r  r  r   r   )r   r+  rm   r   r	  r
  s         r"   r  zEThreadedNetworkedTests.test_enable_UTF8_raises_error_if_not_supported  sW   	 	 	 	 	- 	 	 	w}233 	 	!!-00 4DVV"LL88	T  d+++m,,,	              	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s6   B;AB#B;#B'	'B;*B'	+B;;B?B?c           	          G d d| j                   }|                     |          5 \  }}|                     |j        d           |                    dd           \  }}|                     |d           |                     |j        d           |                    d          \  }}|                     |d           |                     |j        d	           d
}|                    d d d |                    d	                    \  }}|                     |d           |                     |j        d|z                      d	                     d d d            d S # 1 swxY w Y   d S )Nc                       e Zd Zd ZdS )MThreadedNetworkedTests.test_enable_UTF8_True_append.<locals>.UTF8AppendServerc              3   ~   K   |                      d           d V | j        _        |                     |dd           d S r  r  r   s      r"   r  zXThreadedNetworkedTests.test_enable_UTF8_True_append.<locals>.UTF8AppendServer.cmd_APPEND  r  r$   N)rQ   rR   rS   r  rT   r$   r"   r   r.    s#        5 5 5 5 5r$   r   r!  r"  c                     dS r$  rT   r%  s    r"   r'  zEThreadedNetworkedTests.test_enable_UTF8_True_append.<locals>.<lambda>
  s    g r$   r   r)  r  r*  r+  r,  )	r8  r  r   r-  r.  r  r   r/  r   )	r   r   rm   r   r   r   r0  r	  r
  s	            r"   r1  z3ThreadedNetworkedTests.test_enable_UTF8_True_append  s   	5 	5 	5 	5 	5t 	5 	5 	5 .// 	3CFFV-w777))(4E4EFFGD!T4(((V_,. . .mmM22GD!T4(((V-w7772JdD*"3"3G"<"<> >ICS$''' :-55g>>  	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   D*E  E$'E$c                    |                      | j                  5 \  }}|                    dd           \  }}|                     |d           |                    d          \  }}|                     |d           |                     |j                   |                     t          j	        j
        |j        dd           d d d            d S # 1 swxY w Y   d S )Nr"  c                     dS r$  rT   r%  s    r"   r'  zSThreadedNetworkedTests.test_search_disallows_charset_in_utf8_mode.<locals>.<lambda>   s    W r$   r   r  r   r:  )r  r8  r.  r   r   r;  r   rG   r   rI   rE   r<  )r   rm   r   r	  r   s        r"   r=  zAThreadedNetworkedTests.test_search_disallows_charset_in_utf8_mode  s%   do.. 	P2B66((3D3DEEFCS$''']]=11FCS$'''OOF/000gm16=%OOO	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	Ps   B(CCCc                 4    G d dt                     }|                     |          5 \  }}|                     t          j        j                  5  |                    dd            d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nc                       e Zd Zd ZdS );ThreadedNetworkedTests.test_bad_auth_name.<locals>.MyServerc                 f    |                      |dd                    |d                              d S rB  rD  r   s      r"   r  zLThreadedNetworkedTests.test_bad_auth_name.<locals>.MyServer.cmd_AUTHENTICATE,  s<    !!#t .,,2F47OO= = = = =r$   NrF  rT   r$   r"   rG  r5  *  s#        = = = = =r$   rG  rH  c                      dS rJ  rT   rT   r$   r"   r'  z;ThreadedNetworkedTests.test_bad_auth_name.<locals>.<lambda>2  s    a r$   rh   r  rG   r   rI   rE   r.  )r   rG  rm   r   s       r"   rM  z)ThreadedNetworkedTests.test_bad_auth_name'  s/   	= 	= 	= 	= 	=( 	= 	= 	= h'' 	9+;FF""7=#677 9 9##Hii8889 9 9 9 9 9 9 9 9 9 9 9 9 9 9	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9s5   (BA5)B5A9	9B<A9	=BBBc                 :    G d dt                     }|                     |          5 \  }}|                     t          j        j                  5  |                    dd           \  }}d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nc                       e Zd Zd ZdS )DThreadedNetworkedTests.test_invalid_authentication.<locals>.MyServerc              3   t   K   |                      d           d V | _        |                     |dd           d S rS  rT  r   s      r"   r  zUThreadedNetworkedTests.test_invalid_authentication.<locals>.MyServer.cmd_AUTHENTICATE9  rU  r$   NrF  rT   r$   r"   rG  r;  7  s(        O O O O Or$   rG  r"  c                     dS r$  rT   r%  s    r"   r'  zDThreadedNetworkedTests.test_invalid_authentication.<locals>.<lambda>@  s    W r$   r8  r   rG  rm   r   r   r
  s         r"   rW  z2ThreadedNetworkedTests.test_invalid_authentication4  s`   	O 	O 	O 	O 	O( 	O 	O 	O h'' 	N+;FF""7=#677 N N#00;L;LMM
dN N N N N N N N N N N N N N N	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N5   (BA8,B8A<	<B?A<	 BBBc                     G d dt                     }|                     |          5 \  }}|                    dd           \  }}|                     |d           |                     |j        d           d d d            n# 1 swxY w Y   |                     |          5 \  }}|                    dd           \  }}|                     |d           |                     |j        d           d d d            d S # 1 swxY w Y   d S )Nc                       e Zd Zd ZdS )BThreadedNetworkedTests.test_valid_authentication.<locals>.MyServerc              3   ~   K   |                      d           d V | j        _        |                     |dd           d S r  r  r   s      r"   r  zSThreadedNetworkedTests.test_valid_authentication.<locals>.MyServer.cmd_AUTHENTICATEG  r  r$   NrF  rT   r$   r"   rG  rB  E  s(        D D D D Dr$   rG  r"  c                     dS r$  rT   r%  s    r"   r'  zBThreadedNetworkedTests.test_valid_authentication.<locals>.<lambda>M  r  r$   r   r)  c                     dS rf  rT   r%  s    r"   r'  zBThreadedNetworkedTests.test_valid_authentication.<locals>.<lambda>S  s     r$   )rh   r  r.  r   r  r>  s         r"   test_valid_authenticationz0ThreadedNetworkedTests.test_valid_authenticationB  s   	D 	D 	D 	D 	D( 	D 	D 	D h'' 	.+;FF,,X7H7HIIJD$T4(((V_,. . .	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. h'' 	.+;FF,,X7G7GHHJD$T4(((V_,. . .	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	.%   ABBB$AD  DDri  Trj  c                     G d dt                     }|                     |          5 \  }}|                     d|j        v            |                    dd          \  }}|                     |d           d d d            n# 1 swxY w Y   |                     |          5 \  }}|                     d|j        v            |                    dd          \  }}|                     |d           d d d            d S # 1 swxY w Y   d S )Nc                       e Zd ZdZd ZdS )?ThreadedNetworkedTests.test_login_cram_md5.<locals>.AuthHandlerro  c              3      K   |                      d           d V }|dk    r|                     |dd           d S |                     |dd           d S rq  rr  rs  s       r"   r  zPThreadedNetworkedTests.test_login_cram_md5.<locals>.AuthHandler.cmd_AUTHENTICATE`  ru  r$   Nrv  rT   r$   r"   rw  rJ  \  s(        8L> > > > >r$   rw  ry  rz  r  r   r{  )rh   r  r;  r   r}  r   )r   rw  rm   r   r  r
  s         r"   test_login_cram_md5z*ThreadedNetworkedTests.test_login_cram_md5X  s   	> 	> 	> 	> 	>+ 	> 	> 	> k** 	(.>vvOOOv/BBCCC--e5GHHICS$'''	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	(
 k** 	(.>vvOOOv/BBCCC--e5HIIICS$'''	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	(rG  c                 :    G d dt                     }|                     |          5 \  }}|                     t          j        j                  5  |                    dd           \  }}d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nc                       e Zd Zd ZdS )DThreadedNetworkedTests.test_aborted_authentication.<locals>.MyServerc              3      K   |                      d           d V | _        | j        dk    r|                     |dd           d S |                     |dd           d S r  rT  r   s      r"   r  zUThreadedNetworkedTests.test_aborted_authentication.<locals>.MyServer.cmd_AUTHENTICATEz  sp      ##C((( %=H,,%%c41QRRRRR%%c41DEEEEEr$   NrF  rT   r$   r"   rG  rO  x  s(        F F F F Fr$   rG  r"  c                     d S r=   rT   r%  s    r"   r'  zDThreadedNetworkedTests.test_aborted_authentication.<locals>.<lambda>  s    T r$   r8  r>  s         r"   r  z2ThreadedNetworkedTests.test_aborted_authenticationu  s^   		F 		F 		F 		F 		F( 		F 		F 		F h'' 	K+;FF""7=#677 K K#00>>JJ
dK K K K K K K K K K K K K K K	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	Kr?  c                      G d dt                     }|                     |          5 } | j        t          j        j        | j        g|j        R   d d d            d S # 1 swxY w Y   d S )Nc                       e Zd Zd ZdS )?ThreadedNetworkedTests.test_linetoolong.<locals>.TooLongHandlerc                 `    | j                             dt          j        dz  z   dz              d S )Ns   * OK    xr{   )ru   rv   r   _MAXLINEr'   s    r"   r   zFThreadedNetworkedTests.test_linetoolong.<locals>.TooLongHandler.handle  s0    
  G,<t,C!Cg!MNNNNNr$   Nr   rT   r$   r"   r  rT    s(        O O O O Or$   r  )rh   r  rG   r   rI   rE   r   r   )r   r  rm   s      r"   r  z'ThreadedNetworkedTests.test_linetoolong  s    	O 	O 	O 	O 	O. 	O 	O 	O
 // 	G6Dgm1"oG060EG G G G	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	Gr  c                     |                      t                    5 } | j        |j         5  	 d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S r=   )r  rh   r   r   )r   rm   s     r"   r  z1ThreadedNetworkedTests.test_simple_with_statement  s      122 	f &"78                	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s.   A9A=	A =	AAAc                 P   |                      t                    5 } | j        |j         5 }|                    dd           |                     |j        d           d d d            n# 1 swxY w Y   |                     |j                   d d d            d S # 1 swxY w Y   d S Nr  r  )r  rh   r   r   r  r   ro   r  r   rm   r  s      r"   r  z*ThreadedNetworkedTests.test_with_statement  s     122 	-f &"78 8D

66***  7778 8 8 8 8 8 8 8 8 8 8 8 8 8 8 fm,,,		- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	-s4   B2A)B)A-	-B0A-	1BB"Bc                    |                      t                    5 } | j        |j         5 }|                    dd           |                     |j        d           |                                 |                     |j                   d d d            n# 1 swxY w Y   |                     |j                   d d d            d S # 1 swxY w Y   d S rZ  )	r  rh   r   r   r  r   ro   r  r  r[  s      r"   r  z1ThreadedNetworkedTests.test_with_statement_logout  sE     122 	-f &"78 1D

66***  777!!&-000	1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
 fm,,,	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	-s5   C	A BC	B	C	B	C		CCFz Won't work if __debug__ is Falsec                    ddgi}|                      t                    5 } | j        |j         5 }t          j                            |d          5 }|                    |           |                    d           d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nz
READ-WRITEr$   _mesgz)untagged responses dump:READ-WRITE: [b''])	r  rh   r   r   r   r  r  _dump_urassert_called_with)r   untagged_resp_dictrm   r  	mock_mesgs        r"   test_dump_urz#ThreadedNetworkedTests.test_dump_ur  s   
 +SE2 122 	f &"78 DZ&&tW55 MM"455500C                              	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	sX   B7!B+B<BBBBBB7B#	#B7&B#	'B77B;>B;N)*rQ   rR   rS   r   r  r   r   rI   r   r  r  r   r  r  r   reap_threadsr  r  r  r   rh   r8  r   r  r  r1  r=  rM  rW  rF  r   r  rL  r  r  r  r  r  r	   unittest
skipUnlessrc  rT   r$   r"   r  r  K  sA       )LJ  @   - - ^-     ^  "  #"
 ".+ .+ #".+` "	G 	G #"	G "
G 
G #"
G	@ 	@ 	@ 	@ 	@& 	@ 	@ 	@ "2 2 #"2 "I I #"I "  #" "  #": "P P #"P "
9 
9 #"
9 "N N #"N ". . #".* "'^'t<<<( ( =< #"(6 "K K #"K$G G G "  #" "- - #"- "- - #"- "X$FGG
 
 HG \ #"
 
 
r$   r  c                   6    e Zd ZeZeZej        d             Z	dS )ThreadedNetworkedTestsSSLc                 j   t          j        t           j                  }|                    t                     |                     t           j        d          5  |                     t                    5 } | j	        |j
        d|i}|                                 d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   |                     t                    5 }| 	                    d|j
        d         |          }|                                 d d d            d S # 1 swxY w Y   d S )Nr  r  r  r   r  )rZ   r[   r  r  r  r   r  r  rh   r   r   r   )r   r  rm   r   s       r"   r  z+ThreadedNetworkedTestsSSL.test_ssl_verified  s   nS%<==))&111##$  	" 	" ##$566 "&(&*? B5@B B!!!" " " " " " " " " " " " " " "		" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	"  122 	f__[&2G2J1< % > >FOO	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	sH   B>4'B'B>'B+	+B>.B+	/B>>CC#8D((D,/D,N)
rQ   rR   rS   rV   r   r  r   r   rd  r  rT   r$   r"   rh  rh    s;        "LJ"  #"  r$   rh  networkznetwork resource disabledz'cyrus.andrew.cmu.edu blocks connectionsc                   D    e Zd ZdZdZdZdZej        Z	d Z
d Zd Zd Zd	S )
RemoteIMAPTestzcyrus.andrew.cmu.edur  	anonymousr  c                     t          j        | j                  5  |                     | j        | j                  | _        d d d            d S # 1 swxY w Y   d S r=   )r   transient_internethostr   portrm   r'   s    r"   setUpzRemoteIMAPTest.setUp  s    -di88 	@ 	@//$)TY??DK	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@s   &AAAc                     | j         Mt          j        | j                  5  | j                                          d d d            d S # 1 swxY w Y   d S d S r=   )rm   r   ro  rp  r  r'   s    r"   tearDownzRemoteIMAPTest.tearDown  s    ;"1$)<< % %""$$$% % % % % % % % % % % % % % % % % % #"s   AAAc                    t          j        | j                  5  | j        j        D ]}|                     |t                     |                     d| j        j                   |                     d| j        j                   | j                            | j	        | j
                  }|                     |d         d           d d d            d S # 1 swxY w Y   d S )NLOGINDISABLEDzAUTH=ANONYMOUSr   r   )r   ro  rp  rm   r   assertIsInstancestrrJ   r  usernamepasswordr   )r   caprss      r"   test_logincapazRemoteIMAPTest.test_logincapa  s   -di88 	* 	*{/ 0 0%%c3////MM/4;+CDDDMM*DK,DEEE""4=$-@@BRUD)))	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	*s   B,CCCc                     t          j        | j                  5  | j                                        }d | _        |                     |d         d|           d d d            d S # 1 swxY w Y   d S Nr   r  )r   ro  rp  rm   r  r   )r   r|  s     r"   r  zRemoteIMAPTest.test_logout  s    -di88 	/ 	/##%%BDKRUE2...	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/s   >A%%A),A)N)rQ   rR   rS   rp  rq  ry  rz  r   rI   r   rr  rt  r}  r  rT   r$   r"   rl  rl    sp         "DDHHJ@ @ @% % %
* * */ / / / /r$   rl  c                   $     e Zd Z fdZd Z xZS )RemoteIMAP_STARTTLSTestc                    t                                                       t          j        | j                  5  | j                                        }|                     |d         d           d d d            d S # 1 swxY w Y   d S )Nr   r   )rk   rr  r   ro  rp  rm   starttlsr   )r   r|  rq   s     r"   rr  zRemoteIMAP_STARTTLSTest.setUp  s    -di88 	* 	*%%''BRUD)))	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	*s   6A>>BBc                     | j         j        D ]}|                     |t                     |                     d| j         j                   d S )Nrv  )rm   r   rw  rx  assertNotIn)r   r{  s     r"   r}  z&RemoteIMAP_STARTTLSTest.test_logincapa  sP    ;+ 	, 	,C!!#s++++$+*BCCCCCr$   )rQ   rR   rS   rr  r}  r   r   s   @r"   r  r    sN        * * * * *D D D D D D Dr$   r  c                   F    e Zd ZdZeZd Zd Zd Zd Z	d Z
d Zd Zd	 Zd
S )RemoteIMAP_SSLTesti  c                     d S r=   rT   r'   s    r"   rr  zRemoteIMAP_SSLTest.setUp      r$   c                     d S r=   rT   r'   s    r"   rt  zRemoteIMAP_SSLTest.tearDown  r  r$   c                     t          j        t           j                  }d|_        t           j        |_        |                    t                     |S rj   )rZ   r[   r  r  	CERT_NONEr  r]   r^   )r   r  s     r"   create_ssl_contextz%RemoteIMAP_SSLTest.create_ssl_context  s@    nS%<==%*""%-##H---r$   c                    	 |j         D ]}|                     |t                     |                     d|j                    |                     d|j                    |                    | j        | j                  }|                     |d         d           |	                                 d S # |	                                 w xY w)Nrv  z
AUTH=PLAINr   r   )
r   rw  rx  r  rJ   r  ry  rz  r   r  )r   rm   r{  r|  s       r"   check_logincapaz"RemoteIMAP_SSLTest.check_logincapa  s    	* 0 0%%c3////_f.ABBBMM,(;<<<dmT];;BRUD)))MMOOOOOFMMOOOOs   BB/ /Cc                     t          j        | j                  5  |                     | j        | j                  }|                     |           d d d            d S # 1 swxY w Y   d S r=   )r   ro  rp  r   rq  r  )r   _servers     r"   r}  z!RemoteIMAP_SSLTest.test_logincapa(  s    -di88 	* 	*oodi;;G  )))	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	*s   6AA!$A!c                    t          j        | j                  5  |                     | j        | j                  }|                                }|                     |d         d|           d d d            d S # 1 swxY w Y   d S r  )r   ro  rp  r   rq  r  r   )r   r  r|  s      r"   r  zRemoteIMAP_SSLTest.test_logout-  s    -di88 	/ 	/oodi;;G!!BRUE2...	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/s   AA99A= A=c           
          t          j        | j                  5  |                     t          | j        | j        | j        t          |                                            d d d            d S # 1 swxY w Y   d S )N)r  r  	r   ro  rp  rG   r  r   rq  r^   r  r'   s    r"   #test_ssl_context_certfile_exclusivez6RemoteIMAP_SSLTest.test_ssl_context_certfile_exclusive3  s    -di88 	J 	JDOTY	!t/F/F/H/H  J J J	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J   AA..A25A2c           
          t          j        | j                  5  |                     t          | j        | j        | j        t          |                                            d d d            d S # 1 swxY w Y   d S )N)keyfiler  r  r'   s    r"   "test_ssl_context_keyfile_exclusivez5RemoteIMAP_SSLTest.test_ssl_context_keyfile_exclusive9  s    -di88 	I 	IDOTY	 d.E.E.G.G  I I I	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	Ir  N)rQ   rR   rS   rq  r  r   rr  rt  r  r  r}  r  r  r  rT   r$   r"   r  r  
  s         DJ      	 	 	* * *
/ / /J J JI I I I Ir$   r  __main__)8r  r   test.supportr   
contextlibr   r   os.pathosr   r   r   r   rA   r   r   r   r	   r
   r   r   r   re  r   r   r   r   rZ   ImportErrorpathr   dirname__file__curdirr^   r  TestCaser   r  rV   r  r   rh   r   r  rf  r  r  rh  is_resource_enabledskiprl  r  r  rQ   mainrT   r$   r"   <module>r     s         & & & & & & % % % % % %             3 3 3 3 3 3 3 3 3 3 3 3 3 3 ( ' ' ' ' ' ) ) ) ) ) ) ( ( ( ( ( (        2 2 2 2 2 2 2 2 2 2JJJJ   
CCC   t , , , ,7<<11>RYOO	bgooh//<29n	M	M=; =; =; =; =;(# =; =; =;@  ( ( ( ( (,0 ( ( ( !II        I\A \A \A \A \A9 \A \A \A~J/ J/ J/ J/ J/ J/ J/ J/Z
* * * * *$h&7 * * *
 S-.."I "I "I "I "I'): "I "I /."IHn n n n nX. n n nb S-..     6   /.0 G	**,GI I899/ / / / /X& / / :9I I/@ S-..G	**,GI I899D D D D Dn D D :9I I /.D S-..8991I 1I 1I 1I 1I 1I 1I :9 /.1Ih zHMOOOOO s   $A) )A32A3