
    dafB                        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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Zd dlmZ d d	lmZmZmZ 	 d dlZ ej:                  d
       ej<                  j?                  ej<                  jA                  e!      xs ejD                  dd      Z#ej<                  j?                  ej<                  jA                  e!      xs ejD                  dd      Z$ G d dejJ                        Z&er" G d de	jN                        Z(ejR                  Z)n G d d      Z(dZ) G d de	jT                        Z+ G d d      Z, G d de,ejJ                        Z- ej\                  ed       G d de,ejJ                               Z/ G d dejJ                        Z0 ej\                  ed       G d d e0             Z1 ej\                   ejd                  d!      d"       ejf                  d#       G d$ d%ejJ                                      Z4 ej\                  ed       ej\                   ejd                  d!      d"       ejf                  d#       G d& d'e4                           Z5 ej\                  ed       ejf                  d#       G d( d)e4                    Z6e7d*k(  r ejp                          yy# e$ r dZY {w xY w)+    )support)socket_helper)contextmanagerN)verboserun_with_tzrun_with_localecpython_onlyrequires_resource)hashlib_helper)threading_helper)mock)datetimetimezone	timedeltaT)modulecertdataz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	e
j                  d        Zy)TestImaplibc                    t        j                  d      }t        j                  d      }| j	                  t        j                  |      |       t        j                  d      }| j	                  t        j                  |      |       t        j                  d      }| j	                  t        j                  |      |       y )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      ,/root/Python-3.12.4/Lib/test/test_imaplib.pytest_Internaldate2tuplez#TestImaplib.test_Internaldate2tuple!   s    __>?''=?R"-''=?R"-''=?R"-    zMST+07MDT,M4.1.0,M10.5.0c                 t    | j                  t        j                  d      t        j                  d             y )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-   s3    G66=?&&AC	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.timevalues4   sE    L$..*D43&&z'/	![0I'JL.0 	0r$   LC_ALLde_DEfr_FRzSTD-1DST,M3.2.0,M11.1.0c                     d}| j                         D ])  }t        j                  |      }| j                  ||       + y )Nr/   )r2   r   Time2Internaldater   )r   expectedtinternals       r"   test_Time2Internaldatez"TestImaplib.test_Time2Internaldate<   s?    
 2" 	1A003HXx0	1r$   c                 X    | j                         D ]  }t        j                  |        y N)r2   r   r7   )r   r9   s     r"   ,test_that_Time2Internaldate_returns_a_resultz8TestImaplib.test_that_Time2Internaldate_returns_a_resultG   s(     " 	)A%%a(	)r$   c                    t        j                          5 }	 |j                  dt        j                  f       | j	                  d       d d d        t        j                         }| j                  t              5 }t        j                          d d d        | j                  j                  j                  |       y # t         j
                  $ r Y w xY w# 1 sw Y   xY w# 1 sw Y   UxY w)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_valueN   s     ]]_ 			2w1123IK	 (DDFw' 	2MMO	bll((/: << 	 		 	s4   C2B>:C#>CCCCC #C,N)__name__
__module____qualname__r#   r   r(   r2   r   r;   r>   r   skip_if_tcp_blackholerP    r$   r"   r   r      st    
. +,D -D0 Xw0 *+1 , 11) ((; );r$   r   c                       e Zd Zd Zy)SecureTCPServerc                     | j                   j                         \  }}t        j                  t        j                        }|j                  t               |j                  |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_requestc   s[    "&++"4"4"6IxnnS%<%<=G##H- ,,YD,IJx''r$   N)rQ   rR   rS   re   rU   r$   r"   rW   rW   a   s    	(r$   rW   c                       e Zd Zy)rW   NrQ   rR   rS   rU   r$   r"   rW   rW   n   s    r$   c                   z     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                 f    t         |           d| j                  _        d | j                  _        y NF)supersetupserveris_selectedloggedr   	__class__s    r"   rm   zSimpleIMAPHandler.setupy   s$    "'!r$   c                 ~    t         rt        d|j                         z         | j                  j	                  |       y )NzSENT: %r)r   printstripwfilewriter   messages     r"   _sendzSimpleIMAPHandler._send~   s*    *w}}./

!r$   c                 ,    | j                  |dz          y )N   
)rz   rx   s     r"   
_send_linezSimpleIMAPHandler._send_line   s    

7W$%r$   c                 D    | j                  |j                  d             y )NASCII)r}   encoderx   s     r"   _send_textlinez SimpleIMAPHandler._send_textline   s    w/0r$   c                 J    | j                  dj                  |||f             y )N )r   join)r   tagcodery   s       r"   _send_taggedzSimpleIMAPHandler._send_tagged   s     CHHc4%9:;r$   c                    | j                  d       	 d}	 	 | j                  j                  d      }|dk(  ry ||z  }|j	                  d      rn:t
        rt        d|j                         z         | j                  r	 | j                  j                  |       |j                  d      j                         }|d   }|d   }|dd  }t        | d	|z         r+ t        | d	|z         ||      }|r)|| _        t        |       n| j!                  |d
|dz          # t        $ r Y y w xY w# t        $ r
 d | _        Y w xY w)Nz* OK IMAP4rev1r   r$   r|   zGOT: %rr   r      cmd_BADz unknown)r   rfilereadrH   endswithr   rt   ru   continuationsendStopIterationdecodesplithasattrgetattrnextr   )r   linepart	splitliner   cmdargsr   s           r"   handlezSimpleIMAPHandler.handle   sT   ,- D::??1-Ds{DLD ==)  i$**,./  -%%**40 G,224IA,CA,CQR=DtVc\*:wtVc\:3E(4D%&!!#ucJ.>?K    % -(,D%-s(    D D ?D* 	D'&D'*D=<D=c                     | j                   rd| j                   z   nd}| j                  d|z          | j                  |dd       y )Nz
IMAP4rev1 	IMAP4rev1z* CAPABILITY OKCAPABILITY completed)capabilitiesr   r   )r   r   r   capss       r"   cmd_CAPABILITYz SimpleIMAPHandler.cmd_CAPABILITY   sK    $$ t000  	 	Od23#t%;<r$   c                 n    d | j                   _        | j                  d       | j                  |dd       y )Nz"* BYE IMAP4ref1 Server logging outr   zLOGOUT completed)rn   rp   r   r   r   r   r   s      r"   
cmd_LOGOUTzSimpleIMAPHandler.cmd_LOGOUT   s0    !@A#t%78r$   c                 R    |d   | j                   _        | j                  |dd       y )Nr   r   zLOGIN completed)rn   rp   r   r   s      r"   	cmd_LOGINzSimpleIMAPHandler.cmd_LOGIN   s%    !!W#t%67r$   c                 n    d| j                   _        | j                  d       | j                  |dd       y )NT
   * 2 EXISTSr   [READ-WRITE] SELECT completed.)rn   ro   r}   r   r   s      r"   
cmd_SELECTzSimpleIMAPHandler.cmd_SELECT   s-    "&&#t%EFr$   c                     | j                   j                  r%d| j                   _        | j                  |dd       y | j                  |dd       y )NFr   z*Returned to authenticated state. (Success)r   zNo mailbox selected)rn   ro   r   r   s      r"   cmd_UNSELECTzSimpleIMAPHandler.cmd_UNSELECT   sA    ;;""&+DKK#c4)UVc5*?@r$   )rQ   rR   rS   r   LOOPBACK_TIMEOUTtimeoutr   r   rm   rz   r}   r   r   r   r   r   r   r   r   __classcell__rr   s   @r"   ri   ri   t   sS    &&GLL"
"
&1<(@T=9
8G
Ar$   ri   c                   6   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!y)"NewIMAPTestsMixinNTc                 
    G d d| j                         }| j                  | j                         | j                  t        j                  df|      | _        t        j                  | j                  dz   | j
                  j                  ddi      | _
        d| j                  _        | j                  j                          |r( | j                  | j
                  j                   | _        | j                  | j
                  fS )	a  
        Sets up imap_handler for tests. imap_handler should inherit from either:
        - SimpleIMAPHandler - for testing IMAP commands,
        - socketserver.StreamRequestHandler - if raw access to stream is needed.
        Returns (client, server).
        c                       e Zd Zd Zy)/NewIMAPTestsMixin._setup.<locals>.TestTCPServerc                 F    | j                  |       | j                           )zP
                End request and raise the error if one occurs.
                close_requestserver_closer   requestclient_addresss      r"   handle_errorz<NewIMAPTestsMixin._setup.<locals>.TestTCPServer.handle_error   s!     ""7+!!#r$   NrQ   rR   rS   r   rU   r$   r"   TestTCPServerr      s    r$   r   r   z-serverpoll_interval{Gz?nametargetkwargsT)server_class
addCleanup_cleanupr   HOSTrn   	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&&%%i/;;,, $T*, ")$//4;;+E+EFDK{{DKK''r$   c                 6   | j                   3| j                   j                  dk7  r| j                   j                          | j                  j                          | j                  j	                          t        j                  | j                         d| _        y)z
        Cleans up the test server. This method should not be called manually,
        it is added to the cleanup queue in the _setup method already.
        NLOGOUT)r   stateshutdownrn   r   r   join_threadr   r'   s    r"   r   zNewIMAPTestsMixin._cleanup   sh     ;;"t{{'8'8H'DKK  "  "$$T[[1r$   c                      G d dt         j                        }| j                  |d      \  }} | j                  t        j
                  j                  | j                  g|j                    y )Nc                       e Zd Zd Zy)ONewIMAPTestsMixin.test_EOF_without_complete_welcome_message.<locals>.EOFHandlerc                 :    | j                   j                  d       y Ns   * OKrv   rw   r'   s    r"   r   zVNewIMAPTestsMixin.test_EOF_without_complete_welcome_message.<locals>.EOFHandler.handle
  s    

  )r$   NrQ   rR   rS   r   rU   r$   r"   
EOFHandlerr   	  s    *r$   r   FrB   )	socketserverStreamRequestHandlerr   rG   r   rI   abortr   r   )r   r   _rn   s       r"   )test_EOF_without_complete_welcome_messagez;NewIMAPTestsMixin.test_EOF_without_complete_welcome_message  s\    	*:: 	* KK
EK:	6'----t 	2!00	2r$   c                      G d dt               }| j                  |d      \  }} | j                  t        j                  j
                  | j                  g|j                    y )Nc                       e Zd Zd Zy)BNewIMAPTestsMixin.test_line_termination.<locals>.BadNewlineHandlerc                 L    | j                  d       | j                  |dd       y Ns   * CAPABILITY IMAP4rev1 AUTH
r   r   rz   r   r   s      r"   r   zQNewIMAPTestsMixin.test_line_termination.<locals>.BadNewlineHandler.cmd_CAPABILITY  "    

;<!!#t-CDr$   NrQ   rR   rS   r   rU   r$   r"   BadNewlineHandlerr     s    Er$   r   Fr   )ri   r   rG   r   rI   r   r   r   )r   r   r   rn   s       r"   test_line_terminationz'NewIMAPTestsMixin.test_line_termination  sZ    	E 1 	E KK 15KA	6'----t 	2!00	2r$   c                 V    G d dt               }| j                  |      \  }}| j                  |j                         | j	                  t
        j                  j                  d      5  |j                  d       d d d        | j                  |j                         y # 1 sw Y   %xY w)Nc                       e Zd ZdZy)MNewIMAPTestsMixin.test_enable_raises_error_if_not_AUTH.<locals>.EnableHandlerAUTH ENABLE UTF8=ACCEPTNrQ   rR   rS   r   rU   r$   r"   EnableHandlerr     s    4Lr$   r   zENABLE.*NONAUTHfoo)	ri   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KK.	,,-##GMM$7$79JK 	!MM% 	!,,-	! 	!s   )BB(c                     | j                  t              \  }}| j                  t        j                  j
                  d      5  |j                  d       d d d        y # 1 sw Y   y xY w)Ndoes not support ENABLEr   )r   ri   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"  sS    KK 12	##GMM$7$7)+ 	!MM% 	! 	! 	!s   AA'c                 "   | j                  t              \  }}|j                  dd      \  }}| j                  |d       | j	                  t
        j                  j                  d      5  |j                  d       d d d        y # 1 sw Y   y xY w)Nuserpassr   r  UTF8=ACCEPT)	r   ri   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(  sw    KK 12	LL0	Td###GMM$7$7)+ 	)MM-(	) 	) 	)s   *BBc                 ^    G d dt               }| j                  |      \  }}| j                  |j                  d       |j	                  dd       \  }}| j                  |d       | j                  |j
                  d       |j                  d      \  }}| j                  |d       | j                  |j                  d	       d
}|j                  d d d |j                  d	            \  }}| j                  |d       | j                  |j
                  d|z  j                  d	             y )Nc                   "    e Zd ZdZd Zd Zd Zy)HNewIMAPTestsMixin.test_enable_UTF8_True_append.<locals>.UTF8AppendServerzENABLE UTF8=ACCEPTc                 *    | j                  |dd       y Nr   zENABLE successfulr   r   s      r"   
cmd_ENABLEzSNewIMAPTestsMixin.test_enable_UTF8_True_append.<locals>.UTF8AppendServer.cmd_ENABLE3      !!#t-@Ar$   c              3   z   K   | j                  d       d | j                  _        | j                  |dd       y wN+r   zFAKEAUTH successfulr   rn   responser   r   s      r"   cmd_AUTHENTICATEzYNewIMAPTestsMixin.test_enable_UTF8_True_append.<locals>.UTF8AppendServer.cmd_AUTHENTICATE5  3     ##C(',$!!#t-BC   9;c              3   z   K   | j                  d       d | j                  _        | j                  |dd       y wNr  r   okayr  r   s      r"   
cmd_APPENDzSNewIMAPTestsMixin.test_enable_UTF8_True_append.<locals>.UTF8AppendServer.cmd_APPEND9  2     ##C(',$!!#tV4r  N)rQ   rR   rS   r   r  r  r   rU   r$   r"   UTF8AppendServerr  1  s    /LBD5r$   r"  asciiMYAUTHc                      yNs   fakerU   xs    r"   <lambda>z@NewIMAPTestsMixin.test_enable_UTF8_True_append.<locals>.<lambda>?      r$   r   
   ZmFrZQ==
r  utf-8   Subject: üñí©öðéUTF8 (%s)
)	ri   r   r   	_encodingauthenticater  r   appendr   )	r   r"  r   rn   r   r   
msg_stringr
  r  s	            r"   test_enable_UTF8_True_appendz.NewIMAPTestsMixin.test_enable_UTF8_True_append0  s   	50 	5 %56))73%%h0ABat$/:--.at$))73.
MM$dJ4E4Eg4NO	Td#z)11':	<r$   c                     G d dt               }| j                  |      \  }}|j                  dd       \  }}| j                  |d       |j	                  d      \  }}| j                  |d       | j                  |j                         | j                  t        j                  j                  d      5  |j                  dd	       d d d        y # 1 sw Y   y xY w)
Nc                       e Zd ZdZd Zd Zy)PNewIMAPTestsMixin.test_search_disallows_charset_in_utf8_mode.<locals>.UTF8Serverr   c                 *    | j                  |dd       y r  r  r   s      r"   r  z[NewIMAPTestsMixin.test_search_disallows_charset_in_utf8_mode.<locals>.UTF8Server.cmd_ENABLEN  r  r$   c              3   z   K   | j                  d       d | j                  _        | j                  |dd       y wr  r  r   s      r"   r  zaNewIMAPTestsMixin.test_search_disallows_charset_in_utf8_mode.<locals>.UTF8Server.cmd_AUTHENTICATEP  r  r  NrQ   rR   rS   r   r  r  rU   r$   r"   
UTF8Serverr6  L  s    4LBDr$   r:  r$  c                      yr&  rU   r'  s    r"   r)  zNNewIMAPTestsMixin.test_search_disallows_charset_in_utf8_mode.<locals>.<lambda>U  r*  r$   r   r  zcharset.*UTF8r   bar)ri   r   r0  r   r   
assertTruer   r   r   rI   rE   search)r   r:  r   r   r
  s        r"   *test_search_disallows_charset_in_utf8_modez<NewIMAPTestsMixin.test_search_disallows_charset_in_utf8_modeK  s    	D* 	D KK
+	$$X/@AQd#}-Qd#++,##GMM$7$7I 	(MM%'	( 	( 	(s   7CCc                      G d dt               }| j                  |      \  }}| j                  t        j                  j
                  d      5  |j                  dd        d d d        y # 1 sw Y   y xY w)Nc                       e Zd Zd Zy)6NewIMAPTestsMixin.test_bad_auth_name.<locals>.MyServerc                 N    | j                  |ddj                  |d                y NNOz#unrecognized authentication type {}r   r   formatr   s      r"   r  zGNewIMAPTestsMixin.test_bad_auth_name.<locals>.MyServer.cmd_AUTHENTICATE_  s'    !!#t9@@aIKr$   NrQ   rR   rS   r  rU   r$   r"   MyServerrB  ^  s    Kr$   rI  z'unrecognized authentication type METHODMETHODc                       yNr   rU   rU   r$   r"   r)  z6NewIMAPTestsMixin.test_bad_auth_name.<locals>.<lambda>e  r*  r$   ri   r   r   r   rI   rE   r0  r   rI  r   r   s       r"   test_bad_auth_namez$NewIMAPTestsMixin.test_bad_auth_name]  sg    	K( 	K KK)	##GMM$7$79; 	5)4	5 	5 	5   A++A4c                      G d dt               }| j                  |      \  }}| j                  t        j                  j
                  d      5  |j                  dd        d d d        y # 1 sw Y   y xY w)Nc                       e Zd Zd Zy)?NewIMAPTestsMixin.test_invalid_authentication.<locals>.MyServerc              3   f   K   | j                  d       d | _        | j                  |dd       y wNr  rE  z[AUTHENTICATIONFAILED] invalidr   r  r   r   s      r"   r  zPNewIMAPTestsMixin.test_invalid_authentication.<locals>.MyServer.cmd_AUTHENTICATEi  .     ##C( %!!#t-MN   /1NrH  rU   r$   r"   rI  rS  h  s    Or$   rI  z \[AUTHENTICATIONFAILED\] invalidr$  c                      yr&  rU   r'  s    r"   r)  z?NewIMAPTestsMixin.test_invalid_authentication.<locals>.<lambda>p  r*  r$   rM  rN  s       r"   test_invalid_authenticationz-NewIMAPTestsMixin.test_invalid_authenticationg  sh    	O( 	O
 KK)	##GMM$7$735 	=*;<	= 	= 	=rP  c                      G d dt               }| j                  |      \  }}|j                  dd       \  }}| j                  |d       | j                  |j                  d       y )Nc                       e Zd Zd Zy)CNewIMAPTestsMixin.test_valid_authentication_bytes.<locals>.MyServerc              3   z   K   | j                  d       d | j                  _        | j                  |dd       y wr  r  r   s      r"   r  zTNewIMAPTestsMixin.test_valid_authentication_bytes.<locals>.MyServer.cmd_AUTHENTICATEt  r  r  NrH  rU   r$   r"   rI  r]  s      Dr$   rI  r$  c                      yr&  rU   r'  s    r"   r)  zCNewIMAPTestsMixin.test_valid_authentication_bytes.<locals>.<lambda>y  r*  r$   r   r+  ri   r   r0  r   r  r   rI  r   rn   r   r   s         r"   test_valid_authentication_bytesz1NewIMAPTestsMixin.test_valid_authentication_bytesr  s`    	D( 	D
 X.%%h0ABat$/:r$   c                      G d dt               }| j                  |      \  }}|j                  dd       \  }}| j                  |d       | j                  |j                  d       y )Nc                       e Zd Zd Zy)HNewIMAPTestsMixin.test_valid_authentication_plain_text.<locals>.MyServerc              3   z   K   | j                  d       d | j                  _        | j                  |dd       y wr  r  r   s      r"   r  zYNewIMAPTestsMixin.test_valid_authentication_plain_text.<locals>.MyServer.cmd_AUTHENTICATE  r  r  NrH  rU   r$   r"   rI  rf  ~  r_  r$   rI  r$  c                      yNfakerU   r'  s    r"   r)  zHNewIMAPTestsMixin.test_valid_authentication_plain_text.<locals>.<lambda>  r*  r$   r   r+  ra  rb  s         r"   $test_valid_authentication_plain_textz6NewIMAPTestsMixin.test_valid_authentication_plain_text}  s`    	D( 	D
 X.%%h0@Aat$/:r$   md5opensslc                      G d dt               }| j                  |      \  }}| j                  d|j                  v        |j	                  dd      \  }}| j                  |d       y )Nc                       e Zd ZdZd Zy)@NewIMAPTestsMixin.test_login_cram_md5_bytes.<locals>.AuthHandlerLOGINDISABLED AUTH=CRAM-MD5c              3      K   | j                  d       d }|dk(  r| j                  |dd       y | j                  |dd       y wNz:+ PDE4OTYuNjk3MTcwOTUyQHBvc3RvZmZpY2UucmVzdG9uLm1jaS5uZXQ=s2   dGltIGYxY2E2YmU0NjRiOWVmYTFjY2E2ZmZkNmNmMmQ5ZjMy
r   zCRAM-MD5 successfulrE  z	No accessr   r   r   r   r   rs       r"   r  zQNewIMAPTestsMixin.test_login_cram_md5_bytes.<locals>.AuthHandler.cmd_AUTHENTICATE  P     ## %9 : 7 7%%c41FG%%c4=   AANrQ   rR   rS   r   r  rU   r$   r"   AuthHandlerrq        8L>r$   r{  AUTH=CRAM-MD5tim   tanstaaftanstaafr   ri   r   r=  r   login_cram_md5r   r   r{  r   r   rets        r"   test_login_cram_md5_bytesz+NewIMAPTestsMixin.test_login_cram_md5_bytes  sa    
	>+ 
	> KK,	6+>+>>?&&u.ABQd#r$   c                      G d dt               }| j                  |      \  }}| j                  d|j                  v        |j	                  dd      \  }}| j                  |d       y )Nc                       e Zd ZdZd Zy)ENewIMAPTestsMixin.test_login_cram_md5_plain_text.<locals>.AuthHandlerrr  c              3      K   | j                  d       d }|dk(  r| j                  |dd       y | j                  |dd       y wrt  ru  rv  s       r"   r  zVNewIMAPTestsMixin.test_login_cram_md5_plain_text.<locals>.AuthHandler.cmd_AUTHENTICATE  rx  ry  Nrz  rU   r$   r"   r{  r    r|  r$   r{  r}  r~  tanstaaftanstaafr   r  r  s        r"   test_login_cram_md5_plain_textz0NewIMAPTestsMixin.test_login_cram_md5_plain_text  sa    
	>+ 
	> KK,	6+>+>>?&&u.@AQd#r$   c                      G d dt               }| j                  |      \  }}| j                  t        j                  j
                  d      5  |j                  dd        d d d        y # 1 sw Y   y xY w)Nc                       e Zd Zd Zy)?NewIMAPTestsMixin.test_aborted_authentication.<locals>.MyServerc              3      K   | j                  d       d | _        | j                  dk(  r| j                  |dd       y | j                  |dd       y wNr  s   *
rE  z[AUTHENTICATIONFAILED] abortedr   zMYAUTH successfulrV  r   s      r"   r  zPNewIMAPTestsMixin.test_aborted_authentication.<locals>.MyServer.cmd_AUTHENTICATE  sS     ##C( %==H,%%8:
 %%c41DE   AANrH  rU   r$   r"   rI  r    s    	Fr$   rI  z \[AUTHENTICATIONFAILED\] abortedr$  c                      y r=   rU   r'  s    r"   r)  z?NewIMAPTestsMixin.test_aborted_authentication.<locals>.<lambda>  r*  r$   rM  rN  s       r"   test_aborted_authenticationz-NewIMAPTestsMixin.test_aborted_authentication  sg    
	F( 
	F KK)	##GMM$7$735 	:.9	: 	: 	:rP  zimaplib._MAXLINE
   c                      G d dt               }| j                  |d      \  }}| j                  t        j                  j
                  d      5   | j                  |j                    d d d        y # 1 sw Y   y xY w)Nc                       e Zd Zd Zy):NewIMAPTestsMixin.test_linetoolong.<locals>.TooLongHandlerc                 :    | j                   j                  d       y )Ns   * OK xxxxxxxxxxx
r   r'   s    r"   r   zANewIMAPTestsMixin.test_linetoolong.<locals>.TooLongHandler.handle  s    

  !?@r$   Nr   rU   r$   r"   TooLongHandlerr    s    Ar$   r  Fr   zgot more than 10 bytes)ri   r   r   r   rI   rE   r   r   )r   r  r   rn   s       r"   test_linetoolongz"NewIMAPTestsMixin.test_linetoolong  so    	A. 	A KKK>	6##GMM$7$7(* 	4DOOV223	4 	4 	4s   A33A<c                     | j                  t        d      \  }} | j                  |j                   5  	 d d d        y # 1 sw Y   y xY w)NFr   )r   ri   r   r   )r   r   rn   s      r"   test_simple_with_statementz,NewIMAPTestsMixin.test_simple_with_statement  sE    KK 15KA	6T__f334 		 	 	s	   ?Ac                 X   | j                  t        d      \  }} | j                  |j                  dd i5 }| j	                  |j
                  j                  d        d d d         | j                  |j                  dt        j                  i5 }| j	                  |j
                  j                  t        j                         d d d        | j                  t              5   | j                  |j                  ddi d d d        y # 1 sw Y   xY w# 1 sw Y   PxY w# 1 sw Y   y xY w)NFr   r   r   )r   ri   r   r   r   sockr   r   r   rG   
ValueError)r   r   rn   r   s       r"   test_imaplib_timeout_testz+NewIMAPTestsMixin.test_imaplib_timeout_test  s    KK 15KA	6T__f33BTB 	8fV[[00$7	8T__f33VW=U=UV 	LZ`V[[00'2J2JK	Lz* 	?DOOV22>A>	? 	?		8 	8	L 	L	? 	?s#   'D5D"D DD D)c                      G d dt               }| j                  |      \  }}|j                  d   }| j                  t              5  | j                  d|d      }d d d        y # 1 sw Y   y xY w)Nc                       e Zd Zd Zy)QNewIMAPTestsMixin.test_imaplib_timeout_functionality_test.<locals>.TimeoutHandlerc                 X    t        j                  d       t        j                  |        y rL  )r   sleepri   r   r'   s    r"   r   zXNewIMAPTestsMixin.test_imaplib_timeout_functionality_test.<locals>.TimeoutHandler.handle  s    

1!((.r$   Nr   rU   r$   r"   TimeoutHandlerr    s    /r$   r  r   	localhostgMbP?)r   )ri   r   r   rG   TimeoutErrorr   )r   r  r   rn   addrr   s         r"   'test_imaplib_timeout_functionality_testz9NewIMAPTestsMixin.test_imaplib_timeout_functionality_test  sn    	/. 	/
 KK/	6$$Q'|, 	G__[$_FF	G 	G 	Gs   A&&A/c                 &   | j                  t        d      \  }} | j                  |j                   5 }|j	                  dd       | j                  |j                  d       d d d        | j                  |j                         y # 1 sw Y   %xY wNFr   r  r  )r   ri   r   r   r  r   rp   assertIsNoner   r   rn   imaps       r"   test_with_statementz%NewIMAPTestsMixin.test_with_statement  sz    KK 15KA	6T__f334 	4JJvv&V]]F3	4 	&--(	4 	4s   /BBc                 |   | j                  t        d      \  }} | j                  |j                   5 }|j	                  dd       | j                  |j                  d       |j                          | j                  |j                         d d d        | j                  |j                         y # 1 sw Y   %xY wr  )	r   ri   r   r   r  r   rp   logoutr  r  s       r"   test_with_statement_logoutz,NewIMAPTestsMixin.test_with_statement_logout  s    KK 15KA	6T__f334 	-JJvv&V]]F3KKMfmm,		-
 	&--(	- 	-s   AB22B;c                     | j                  t              \  }}|j                  dd      \  }}| j                  |d       | j                  |d   d       | j                  |j                  d       y )Nr  r  r   r      LOGIN completedAUTH)r   ri   r  r   r   r	  s        r"   
test_loginzNewIMAPTestsMixin.test_login  sb    KK 12	LL0	Td#a"45v.r$   c                 d   | j                  t              \  }}|j                  dd      \  }}| j                  |d       | j                  |d   d       |j	                         \  }}| j                  |d||f       | j                  |d   d||f       | j                  |j
                  d       y )	Nr  r  r   r   r  BYEs   IMAP4ref1 Server logging outr   )r   ri   r  r   r  r   r	  s        r"   test_logoutzNewIMAPTestsMixin.test_logout  s    KK 12	LL0	Td#a"45MMO	Tec4[1a"AC;Ox0r$   c                      G d dt               }| j                  |      \  }}|j                  dd       |j                         \  }}| j	                  |d       | j	                  |d   d       y )Nc                       e Zd Zd Zy),NewIMAPTestsMixin.test_lsub.<locals>.LsubCmdc                 J    | j                  d       | j                  |dd      S )Nz* LSUB () "." directoryAr   zLSUB completedru  r   s      r"   cmd_LSUBz5NewIMAPTestsMixin.test_lsub.<locals>.LsubCmd.cmd_LSUB  s'    ##$>?((d4DEEr$   N)rQ   rR   rS   r  rU   r$   r"   LsubCmdr    s    Fr$   r  r  r  r   r   s   () "." directoryA)ri   r   r  lsubr   )r   r  r   r   r
  r  s         r"   	test_lsubzNewIMAPTestsMixin.test_lsub  sg    	F' 	F KK(	VV$KKM	Td#a"67r$   c                 x   | j                  t              \  }}|j                  dd       |j                         \  }}| j	                  |d       | j	                  |d   d       |j                         \  }}| j	                  |d       | j	                  |d   d       | j	                  |j                  d       y )Nr  r  r   r      2s*   Returned to authenticated state. (Success)r  )r   ri   r  selectr   unselectr   r	  s        r"   test_unselectzNewIMAPTestsMixin.test_unselect  s    KK 12	VV$MMO	Td#a$'OO%	Td#a"OPv.r$   )T)"rQ   rR   rS   r   r   r   r   r   r   r  r  r3  r?  rO  rZ  rc  rk  r   requires_hashdigestr  r  r  r   patchr  r  r  r  r  r  r  r  r  r  rU   r$   r"   r   r      s    F(B 22.!)<6($5	=	;	; (^''t<$ =$" (^''t<$ =$":" TZZ"B'4 (4
?	G))/1	8
/r$   r   c                   <    e Zd Zej                  Zej                  Zy)NewIMAPTestsN)	rQ   rR   rS   r   rI   r   r   	TCPServerr   rU   r$   r"   r  r    s    J))Lr$   r  zSSL not availablec                        e Zd ZeZeZd Zd Zy)NewIMAPSSLTestsc                 >   t        j                  t         j                        }| j                  |j                  t         j
                         | j                  |j                  d       |j                  t               t        j                  dt        j                        }| j                  t         j                  |      5  | j                  t        d      \  }} | j                   |j"                  d|i}|j%                          d d d        y # 1 sw Y   y xY w)NT(
            IP address mismatch, certificate is not valid for '127.0.0.1'   # OpenSSL
            |
            CERTIFICATE_VERIFY_FAILED                                       # AWS-LC
        )Fr   ssl_context)r[   r\   PROTOCOL_TLS_CLIENTr   verify_modeCERT_REQUIREDcheck_hostnameload_verify_locationsCAFILErecompileXr   CertificateErrorr   ri   r   r   r   )r   r  regexr   rn   r   s         r"   test_ssl_raiseszNewIMAPSSLTests.test_ssl_raises'  s    nnS%<%<=00#2C2CD33T:))&1 

  dd	
 ##C$8$8%@ 	$5uEIAv$T__f&;&; >1<>FOO		 	 	s   ADDc                 
   t        j                  t         j                        }|j                  t               | j                  t        d      \  }}| j                  d|j                  d   |      }|j                          y )NFr   r  r   r  )
r[   r\   r  r  r  r   ri   r   r   r   )r   r  r   rn   r   s        r"   test_ssl_verifiedz!NewIMAPSSLTests.test_ssl_verified9  sj    nnS%<%<=))&1KK 15KA	6f.C.CA.F-8 ! :r$   N)	rQ   rR   rS   	IMAP4_SSLr   rW   r   r  r  rU   r$   r"   r  r  "  s    J"L$r$   r  c                   p   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'jP                  dd      d                      Z)y)ThreadedNetworkedTestsc                     G d d| j                         }t        rt        d        |||      }| j                  |j                  |j
                  j                                t        rCt        d       t        d|       t        d| j                          t        d|j                         t        j                  d| j                   z  |j                  d	d
i      }d|_        |j                          t        rt        d       ||fS )Nc                       e Zd Zd Zy)4ThreadedNetworkedTests.make_server.<locals>.MyServerc                 F    | j                  |       | j                           r=   r   r   s      r"   r   zAThreadedNetworkedTests.make_server.<locals>.MyServer.handle_errorI  s    ""7+!!#r$   Nr   rU   r$   r"   rI  r  H  s    r$   rI  zcreating serverzserver createdzADDR =zCLASS =zHDLR =z
%s servingr   r   r   Tzserver running)r   r   rt   r   r   rA   getsocknameRequestHandlerClassr   r   r   r   r   )r   r  hdlrrI  rn   r9   s         r"   make_serverz"ThreadedNetworkedTests.make_serverF  s    	t(( 	 #$$%..0I0I0KL"#(D!)T../(F667 1 11'' $T*, 		"#qyr$   c                     t         rt        d       |j                          |j                          |j	                          t         rt        d       y y )Nzwaiting for serverdone)r   rt   r   r   r   )r   rn   r   s      r"   reap_serverz"ThreadedNetworkedTests.reap_serverf  s<    &'&M r$   c              #      K   | j                  t        j                  df|      \  }}	 | | j                  ||       y # | j                  ||       w xY ww)Nr   )r  r   r   r  )r   r  rn   r   s       r"   reaped_serverz$ThreadedNetworkedTests.reaped_servero  sQ     ))=+=+=q*A4H	-LVV,DVV,s   &AA  A AAc              #      K   | j                  |      5 } | j                  |j                   }	 ||f |j                          	 d d d        y # |j                          w xY w# 1 sw Y   y xY wwr=   )r  r   r   r  )r   r  rn   r   s       r"   reaped_pairz"ThreadedNetworkedTests.reaped_pairw  sj     % 	 $T__f&;&;<F fn$	  	 
 	  	 s2   A0A$AA$	A0A!!A$$A-)A0c                     | j                  t              5 } | j                  |j                   }|j	                          d d d        y # 1 sw Y   y xY wr=   )r  ri   r   r   r   r   rn   r   s      r"   test_connectz#ThreadedNetworkedTests.test_connect  sH     12 	f$T__f&;&;<FOO	 	 	s   *A		Ac                     G d dt               }| j                  |      5 \  }}|j                  dd       \  }}| j                  |d       | j                  |j                  d       |j                  d       |j                  dd	d
      \  }\  }| j                  d|       |j                  d       |j	                  d      \  }\  }| j                  d|       d d d        y # 1 sw Y   y xY w)Nc                   0     e Zd Z fdZd Zd Zd Z xZS )EThreadedNetworkedTests.test_bracket_flags.<locals>.BracketFlagHandlerc                 4    g d| _         t        | 	          y )N)AnsweredFlaggedDeletedSeenDraft)flagsrl   r   rq   s    r"   r   zLThreadedNetworkedTests.test_bracket_flags.<locals>.BracketFlagHandler.handle  s    P
 r$   c              3   z   K   | j                  d       d | j                  _        | j                  |dd       y wr  r  r   s      r"   r  zVThreadedNetworkedTests.test_bracket_flags.<locals>.BracketFlagHandler.cmd_AUTHENTICATE  r  r  c                 4   dj                  | j                        }| j                  d|z  j                  d             | j                  d       | j                  d       d|z  }| j                  |j                  d             | j	                  |dd       y )	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}     ::djj1(!: B B7 KL..G"#

7 34!!#t-MNr$   c                 T   |d   j                  d      j                  d      j                         }| j                  j                  |       ddj	                  | j                        z  }d|d   d|}| j                  |j                  d	             | j                  |d
d       y )Nr   ()z(FLAGS (%s))r  z* r   z FETCH r#  r   zSTORE completed.)ru   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??A	

!!),*UZZ

-CC	)-a)<

7 34!!#t-?@r$   )rQ   rR   rS   r   r  r   r
  r   r   s   @r"   BracketFlagHandlerr    s    !D
OAr$   r  r$  c                      yr&  rU   r'  s    r"   r)  z;ThreadedNetworkedTests.test_bracket_flags.<locals>.<lambda>  r*  r$   r   r+  test   1z+FLAGSz[test]s   [test]PERMANENTFLAGS)ri   r  r0  r   r  r  storerJ   )r   r  rn   r   r   r  r
  s          r"   test_bracket_flagsz)ThreadedNetworkedTests.test_bracket_flags  s    	A!2 	A: 01 		+5Eff,,X7HIJD$T4(V__o>MM&! ,,tXx@KC$MM)T*MM&! //*:;KC$MM)T*		+ 		+ 		+s   B<C&&C/c                     G d dt         j                        }| j                  |      5 } | j                  t        j
                  j                  | j                  g|j                    d d d        y # 1 sw Y   y xY w)Nc                       e Zd Zd Zy)9ThreadedNetworkedTests.test_issue5949.<locals>.EOFHandlerc                 :    | j                   j                  d       y r   r   r'   s    r"   r   z@ThreadedNetworkedTests.test_issue5949.<locals>.EOFHandler.handle  s    

  )r$   Nr   rU   r$   r"   r   r    s    *r$   r   )	r   r   r  rG   r   rI   r   r   r   )r   r   rn   s      r"   test_issue5949z%ThreadedNetworkedTests.test_issue5949  sr    	*:: 	*
 
+ 	GvDgmm11"ooG060E0EG	G 	G 	Gs   AA55A>c                      G d dt               }| j                  |      5 } | j                  t        j                  j
                  | j                  g|j                    d d d        y # 1 sw Y   y xY w)Nc                       e Zd Zd Zy)GThreadedNetworkedTests.test_line_termination.<locals>.BadNewlineHandlerc                 L    | j                  d       | j                  |dd       y r   r   r   s      r"   r   zVThreadedNetworkedTests.test_line_termination.<locals>.BadNewlineHandler.cmd_CAPABILITY  r   r$   Nr   rU   r$   r"   r   r    s    Er$   r   )ri   r  rG   r   rI   r   r   r   )r   r   rn   s      r"   r   z,ThreadedNetworkedTests.test_line_termination  sp    	E 1 	E  12 	GfDgmm11"ooG060E0EG	G 	G 	G   AA++A4c                       e Zd ZdZd Zd Zy)!ThreadedNetworkedTests.UTF8Serverr   c                 *    | j                  |dd       y r  r  r   s      r"   r  z,ThreadedNetworkedTests.UTF8Server.cmd_ENABLE  s    c4)<=r$   c              #   z   K   | j                  d       d | j                  _        | j                  |dd       y wr  r  r   s      r"   r  z2ThreadedNetworkedTests.UTF8Server.cmd_AUTHENTICATE  s3     $#(DKK c4)>?r  Nr9  rU   r$   r"   r:  r    s    0	>	@r$   r:  c                 @   | j                  | j                        5 \  }}| j                  |j                         | j	                  t
        j                  j                  |j                  d       | j                  |j                         d d d        y # 1 sw Y   y xY w)Nr   )	r  r:  r   r   rG   r   rI   rE   r   r  s      r"   r   z;ThreadedNetworkedTests.test_enable_raises_error_if_not_AUTH  sx    doo. 	22B66V001gmm116==%HV001	2 	2 	2s   A/BBc                      G d d| j                         }| j                  |      5 \  }}| j                  t        j                  j
                  |j                  d       d d d        y # 1 sw Y   y xY w)Nc                       e Zd ZdZy)XThreadedNetworkedTests.test_enable_raises_error_if_no_capability.<locals>.NoEnableServerr  Nr   rU   r$   r"   NoEnableServerr#    s    !Lr$   r$  r   )r:  r  rG   r   rI   rE   r   )r   r$  rn   r   s       r"   r  z@ThreadedNetworkedTests.test_enable_raises_error_if_no_capability  s`    	"T__ 	"n- 	I1A&&gmm116==%H	I 	I 	Is   9A))A2c                 `    G d dt               }| j                  t        j                  j                        5  | j                  |      5 \  }}|j                  dd      \  }}| j                  |d       |j                  d       d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nc                       e Zd Zy)\ThreadedNetworkedTests.test_enable_UTF8_raises_error_if_not_supported.<locals>.NonUTF8ServerNrg   rU   r$   r"   NonUTF8Serverr'    s    r$   r(  r  r  r   r  )	ri   rG   r   rI   rE   r  r  r   r   )r   r(  rn   r   r
  r  s         r"   r  zEThreadedNetworkedTests.test_enable_UTF8_raises_error_if_not_supported  s    	- 	w}}223 	-!!-0 -4DVV"LL8	T  d+m,-	- 	-- -	- 	-s#   B$<BB$B!	B$$B-c           	          G d d| j                         }| j                  |      5 \  }}| j                  |j                  d       |j	                  dd       \  }}| j                  |d       | j                  |j
                  d       |j                  d      \  }}| j                  |d       | j                  |j                  d	       d
}|j                  d d d |j                  d	            \  }}| j                  |d       | j                  |j
                  d|z  j                  d	             d d d        y # 1 sw Y   y xY w)Nc                       e Zd Zd Zy)MThreadedNetworkedTests.test_enable_UTF8_True_append.<locals>.UTF8AppendServerc              3   z   K   | j                  d       d | j                  _        | j                  |dd       y wr  r  r   s      r"   r   zXThreadedNetworkedTests.test_enable_UTF8_True_append.<locals>.UTF8AppendServer.cmd_APPEND  r!  r  N)rQ   rR   rS   r   rU   r$   r"   r"  r+    s    5r$   r"  r#  r$  c                      yr&  rU   r'  s    r"   r)  zEThreadedNetworkedTests.test_enable_UTF8_True_append.<locals>.<lambda>   r*  r$   r   r+  r  r,  r-  r.  )	r:  r  r   r/  r0  r  r   r1  r   )	r   r"  rn   r   r   r   r2  r
  r  s	            r"   r3  z3ThreadedNetworkedTests.test_enable_UTF8_True_append  s.   	5t 	5 ./ 	3CFFV--w7))(4EFGD!T4(V__,.mmM2GD!T4(V--w72JdD*"3"3G"<>ICS$' :-55g>	 	 	s   DD>>Ec                    | j                  | j                        5 \  }}|j                  dd       \  }}| j                  |d       |j	                  d      \  }}| j                  |d       | j                  |j                         | j                  t        j                  j                  |j                  dd       d d d        y # 1 sw Y   y xY w)Nr$  c                      yr&  rU   r'  s    r"   r)  zSThreadedNetworkedTests.test_search_disallows_charset_in_utf8_mode.<locals>.<lambda>  r*  r$   r   r  r   r<  )r  r:  r0  r   r   r=  r   rG   r   rI   rE   r>  )r   rn   r   r
  r   s        r"   r?  zAThreadedNetworkedTests.test_search_disallows_charset_in_utf8_mode  s    doo. 	P2B66((3DEFCS$']]=1FCS$'OOF//0gmm116==%O	P 	P 	Ps   B#CCc                     G d dt               }| j                  |      5 \  }}| j                  t        j                  j
                        5  |j                  dd        d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nc                       e Zd Zd Zy);ThreadedNetworkedTests.test_bad_auth_name.<locals>.MyServerc                 N    | j                  |ddj                  |d                y rD  rF  r   s      r"   r  zLThreadedNetworkedTests.test_bad_auth_name.<locals>.MyServer.cmd_AUTHENTICATE"  s&    !!#t .,,2F47O=r$   NrH  rU   r$   r"   rI  r2     s    =r$   rI  rJ  c                       yrL  rU   rU   r$   r"   r)  z;ThreadedNetworkedTests.test_bad_auth_name.<locals>.<lambda>(  r*  r$   ri   r  rG   r   rI   rE   r0  )r   rI  rn   r   s       r"   rO  z)ThreadedNetworkedTests.test_bad_auth_name  s}    	=( 	= h' 	9+;FF""7==#6#67 9##Hi89	9 	99 9	9 	9s#   -A?A3"A?3A<	8A??Bc                     G d dt               }| j                  |      5 \  }}| j                  t        j                  j
                        5  |j                  dd       \  }}d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nc                       e Zd Zd Zy)DThreadedNetworkedTests.test_invalid_authentication.<locals>.MyServerc              3   f   K   | j                  d       d | _        | j                  |dd       y wrU  rV  r   s      r"   r  zUThreadedNetworkedTests.test_invalid_authentication.<locals>.MyServer.cmd_AUTHENTICATE/  rW  rX  NrH  rU   r$   r"   rI  r8  -  s    Or$   rI  r$  c                      yr&  rU   r'  s    r"   r)  zDThreadedNetworkedTests.test_invalid_authentication.<locals>.<lambda>6  r*  r$   r5  r   rI  rn   r   r   r  s         r"   rZ  z2ThreadedNetworkedTests.test_invalid_authentication*  s    	O( 	O h' 	N+;FF""7==#6#67 N#00;LM
dN	N 	NN N	N 	N#   -BA6%B6A?	;BBc                     G d dt               }| j                  |      5 \  }}|j                  dd       \  }}| j                  |d       | j                  |j                  d       d d d        | j                  |      5 \  }}|j                  dd       \  }}| j                  |d       | j                  |j                  d       d d d        y # 1 sw Y   kxY w# 1 sw Y   y xY w)Nc                       e Zd Zd Zy)BThreadedNetworkedTests.test_valid_authentication.<locals>.MyServerc              3   z   K   | j                  d       d | j                  _        | j                  |dd       y wr  r  r   s      r"   r  zSThreadedNetworkedTests.test_valid_authentication.<locals>.MyServer.cmd_AUTHENTICATE=  r  r  NrH  rU   r$   r"   rI  r?  ;  s    Dr$   rI  r$  c                      yr&  rU   r'  s    r"   r)  zBThreadedNetworkedTests.test_valid_authentication.<locals>.<lambda>C  r*  r$   r   r+  c                      yri  rU   r'  s    r"   r)  zBThreadedNetworkedTests.test_valid_authentication.<locals>.<lambda>I  r*  r$   )ri   r  r0  r   r  r;  s         r"   test_valid_authenticationz0ThreadedNetworkedTests.test_valid_authentication8  s    	D( 	D h' 	.+;FF,,X7HIJD$T4(V__,.	. h' 	.+;FF,,X7GHJD$T4(V__,.	. 	.	. 	.	. 	.   ACACCC(rl  Trm  c                     G d dt               }| j                  |      5 \  }}| j                  d|j                  v        |j	                  dd      \  }}| j                  |d       d d d        | j                  |      5 \  }}| j                  d|j                  v        |j	                  dd      \  }}| j                  |d       d d d        y # 1 sw Y   kxY w# 1 sw Y   y xY w)Nc                       e Zd ZdZd Zy)?ThreadedNetworkedTests.test_login_cram_md5.<locals>.AuthHandlerrr  c              3      K   | j                  d       d }|dk(  r| j                  |dd       y | j                  |dd       y wrt  ru  rv  s       r"   r  zPThreadedNetworkedTests.test_login_cram_md5.<locals>.AuthHandler.cmd_AUTHENTICATEV  rx  ry  Nrz  rU   r$   r"   r{  rG  R  s    8L>r$   r{  r}  r~  r  r   r  )ri   r  r=  r   r  r   )r   r{  rn   r   r  r  s         r"   test_login_cram_md5z*ThreadedNetworkedTests.test_login_cram_md5N  s    	>+ 	> k* 	(.>vvOOOv/B/BBC--e5GHICS$'	(
 k* 	(.>vvOOOv/B/BBC--e5HIICS$'	( 	(	( 	(
	( 	(rD  c                     G d dt               }| j                  |      5 \  }}| j                  t        j                  j
                        5  |j                  dd       \  }}d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nc                       e Zd Zd Zy)DThreadedNetworkedTests.test_aborted_authentication.<locals>.MyServerc              3      K   | j                  d       d | _        | j                  dk(  r| j                  |dd       y | j                  |dd       y wr  rV  r   s      r"   r  zUThreadedNetworkedTests.test_aborted_authentication.<locals>.MyServer.cmd_AUTHENTICATEp  sM     ##C( %==H,%%c41QR%%c41DEr  NrH  rU   r$   r"   rI  rL  n  s    Fr$   rI  r$  c                      y r=   rU   r'  s    r"   r)  zDThreadedNetworkedTests.test_aborted_authentication.<locals>.<lambda>{  r*  r$   r5  r;  s         r"   r  z2ThreadedNetworkedTests.test_aborted_authenticationk  s    		F( 		F h' 	K+;FF""7==#6#67 K#00>J
dK	K 	KK K	K 	Kr<  c                      G d dt               }| j                  |      5 } | j                  t        j                  j
                  | j                  g|j                    d d d        y # 1 sw Y   y xY w)Nc                       e Zd Zd Zy)?ThreadedNetworkedTests.test_linetoolong.<locals>.TooLongHandlerc                 h    | j                   j                  dt        j                  dz  z   dz          y )Ns   * OK    xr|   )rv   rw   r   _MAXLINEr'   s    r"   r   zFThreadedNetworkedTests.test_linetoolong.<locals>.TooLongHandler.handle  s)    

  G,<,<t,C!Cg!MNr$   Nr   rU   r$   r"   r  rQ    s    Or$   r  )ri   r  rG   r   rI   rE   r   r   )r   r  rn   s      r"   r  z'ThreadedNetworkedTests.test_linetoolong~  so    	O. 	O
 / 	G6Dgmm11"ooG060E0EG	G 	G 	Gr  c                     | j                  t              5 } | j                  |j                   5  	 d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY wr=   )r  ri   r   r   )r   rn   s     r"   r  z1ThreadedNetworkedTests.test_simple_with_statement  s[      12 	f &"7"78 	 	 	 	s!   AAAA	AAc                 F   | j                  t              5 } | j                  |j                   5 }|j	                  dd       | j                  |j                  d       d d d        | j                  |j                         d d d        y # 1 sw Y   -xY w# 1 sw Y   y xY wNr  r  )r  ri   r   r   r  r   rp   r  r   rn   r  s      r"   r  z*ThreadedNetworkedTests.test_with_statement  s     12 	-f &"7"78 8D

66*  78 fmm,		- 	-8 8	- 	-s"   B/B#BB	BB c                    | j                  t              5 } | j                  |j                   5 }|j	                  dd       | j                  |j                  d       |j                          | j                  |j                         d d d        | j                  |j                         d d d        y # 1 sw Y   -xY w# 1 sw Y   y xY wrW  )	r  ri   r   r   r  r   rp   r  r  rX  s      r"   r  z1ThreadedNetworkedTests.test_with_statement_logout  s      12 	-f &"7"78 1D

66*  7!!&--0	1
 fmm,	- 	-1 1	- 	-s#   CAB6
#C6B?	;CCz Won't work if __debug__ is Falsec                 l   ddgi}| j                  t              5 } | j                  |j                   5 }t        j
                  j                  |d      5 }|j                  |       |j                  d       d d d        d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nz
READ-WRITEr$   _mesgz)untagged responses dump:READ-WRITE: [b''])	r  ri   r   r   r   r  object_dump_urassert_called_with)r   untagged_resp_dictrn   r  	mock_mesgs        r"   test_dump_urz#ThreadedNetworkedTests.test_dump_ur  s    
 +SE2 12 	f &"7"78 DZZ&&tW5 MM"4500C	 	  	 	s:   B*!B#B9BB*BBB'	#B**B3N)*rQ   rR   rS   r   r  r   r   rI   r   r  r  r   r  r  r   reap_threadsr  r  r  r   ri   r:  r   r  r  r3  r?  rO  rZ  rC  r   r  rI  r  r  r  r  r  r	   unittest
skipUnlessra  rU   r$   r"   r  r  B  sw   ))LJ@ - -     "" #
 "".+ #.+` ""	G #	G ""
G #
G	@& 	@ ""2 #2 ""I #I ""- #- "" #: ""P #P ""
9 #
9 ""N #N "". #.* ""'^''t<( = #(6 ""K #K$G "" # ""- #- ""- #- ""X$FG
 H  #
r$   r  c                   8    e Zd ZeZeZej                  d        Z	y)ThreadedNetworkedTestsSSLc                    t        j                  t         j                        }|j                  t               t        j                  dt
        j                        }| j                  t         j                  |      5  | j                  t              5 } | j                  |j                  d|i}|j                          d d d        d d d        | j                  t              5 }| j                  d|j                  d   |      }|j                          d d d        y # 1 sw Y   axY w# 1 sw Y   exY w# 1 sw Y   y xY w)Nr  r  r  r   r  )r[   r\   r  r  r  r  r  r  r   r  r  ri   r   r   r   )r   r  r  rn   r   s        r"   r  z+ThreadedNetworkedTestsSSL.test_ssl_verified  s   nnS%<%<=))&1 

  dd	
 ##C$8$8%@ 	"##$56 "&(&*?*? B5@B!"	"  12 	f__[&2G2G2J1< % >FOO	 	" "	" 	"	 	s0   =D,-D  D,%2D8 D)	%D,,D58EN)
rQ   rR   rS   rW   r   r  r   r   rb  r  rU   r$   r"   rf  rf    s$    "LJ"" #r$   rf  networkznetwork resource disabledz'cyrus.andrew.cmu.edu blocks connectionsc                   L    e Zd ZdZdZdZdZej                  Z	d Z
d Zd Zd Zy	)
RemoteIMAPTestzcyrus.andrew.cmu.edu   	anonymousr  c                     t        j                  | j                        5  | j                  | j                  | j                        | _        d d d        y # 1 sw Y   y xY wr=   )r   transient_internethostr   portrn   r'   s    r"   setUpzRemoteIMAPTest.setUp  sG    --dii8 	@//$))TYY?DK	@ 	@ 	@s   ,AAc                     | j                   Ct        j                  | j                        5  | j                   j	                          d d d        y y # 1 sw Y   y xY wr=   )rn   r   rn  ro  r  r'   s    r"   tearDownzRemoteIMAPTest.tearDown  sM    ;;"11$))< %""$% % #% %s   AAc                    t        j                  | j                        5  | j                  j                  D ]  }| j                  |t                | j                  d| j                  j                         | j                  d| j                  j                         | j                  j                  | j                  | j                        }| j                  |d   d       d d d        y # 1 sw Y   y xY w)NLOGINDISABLEDzAUTH=ANONYMOUSr   r   )r   rn  ro  rn   r   assertIsInstancestrrJ   r  usernamepasswordr   )r   caprss      r"   test_logincapazRemoteIMAPTest.test_logincapa  s    --dii8 	*{{// 0%%c3/0MM/4;;+C+CDMM*DKK,D,DE""4==$--@BRUD)	* 	* 	*s   CC,,C5c                     t        j                  | j                        5  | j                  j	                         }d | _        | j                  |d   d|       d d d        y # 1 sw Y   y xY wNr   r  )r   rn  ro  rn   r  r   )r   r{  s     r"   r  zRemoteIMAPTest.test_logout  sX    --dii8 	/##%BDKRUE2.	/ 	/ 	/   8A!!A*N)rQ   rR   rS   ro  rp  rx  ry  r   rI   r   rq  rs  r|  r  rU   r$   r"   rj  rj    s6     "DDHHJ@%
*/r$   rj  c                   $     e Zd Z fdZd Z xZS )RemoteIMAP_STARTTLSTestc                     t         |           t        j                  | j                        5  | j
                  j                         }| j                  |d   d       d d d        y # 1 sw Y   y xY w)Nr   r   )rl   rq  r   rn  ro  rn   starttlsr   )r   r{  rr   s     r"   rq  zRemoteIMAP_STARTTLSTest.setUp  sY    --dii8 	*%%'BRUD)	* 	* 	*s   0A((A1c                     | j                   j                  D ]  }| j                  |t                | j	                  d| j                   j                         y )Nru  )rn   r   rv  rw  assertNotIn)r   rz  s     r"   r|  z&RemoteIMAP_STARTTLSTest.test_logincapa  sE    ;;++ 	,C!!#s+	,$++*B*BCr$   )rQ   rR   rS   rq  r|  r   r   s   @r"   r  r    s    *Dr$   r  c                   8    e Zd ZdZeZd Zd Zd Zd Z	d Z
d Zy)	RemoteIMAP_SSLTesti  c                      y r=   rU   r'   s    r"   rq  zRemoteIMAP_SSLTest.setUp	      r$   c                      y r=   rU   r'   s    r"   rs  zRemoteIMAP_SSLTest.tearDown  r  r$   c                     t        j                  t         j                        }d|_        t         j                  |_        |j                  t               |S rk   )r[   r\   r  r  	CERT_NONEr  r^   r_   )r   r  s     r"   create_ssl_contextz%RemoteIMAP_SSLTest.create_ssl_context  s>    nnS%<%<=%*""%--##H-r$   c                    	 |j                   D ]  }| j                  |t                | j                  d|j                          | j	                  d|j                          |j                  | j                  | j                        }| j                  |d   d       |j                          y # |j                          w xY w)Nru  z
AUTH=PLAINr   r   )
r   rv  rw  r  rJ   r  rx  ry  r   r  )r   rn   rz  r{  s       r"   check_logincapaz"RemoteIMAP_SSLTest.check_logincapa  s    	** 0%%c3/0_f.A.ABMM,(;(;<dmmT]];BRUD)MMOFMMOs   BB- -B?c                     t        j                  | j                        5  | j                  | j                  | j                        }| j                  |       d d d        y # 1 sw Y   y xY wr=   )r   rn  ro  r   rp  r  )r   _servers     r"   r|  z!RemoteIMAP_SSLTest.test_logincapa!  sO    --dii8 	*oodii;G  )	* 	* 	*r  c                    t        j                  | j                        5  | j                  | j                  | j                        }|j                         }| j                  |d   d|       d d d        y # 1 sw Y   y xY wr~  )r   rn  ro  r   rp  r  r   )r   r  r{  s      r"   r  zRemoteIMAP_SSLTest.test_logout&  sc    --dii8 	/oodii;G!BRUE2.	/ 	/ 	/s   AA66A?N)rQ   rR   rS   rp  r  r   rq  rs  r  r  r|  r  rU   r$   r"   r  r    s,     DJ	*
/r$   r  __main__)9r  r   test.supportr   
contextlibr   r   os.pathosr   r   r   r   r  rA   r   r   r   r	   r
   r   r   rc  r   r   r   r   r[   ImportErrorrequires_working_socketpathr   dirname__file__curdirr_   r  TestCaser   r  rW   r  r   ri   r   r  rd  r  r  rf  is_resource_enabledskiprj  r  r  rQ   mainrU   r$   r"   <module>r     s    & %       	  _ _ ' )   2 2    t ,77<<1>RYY
N[	bggooh/<299j.	Y>;(## >;B (,00 ( !!I  I\A99 \A~G/ G/T
*$h&7&7 *
 S-.'):):  />mX.. m` S-. 6  /6 G	*,GI89/X&& / :I/@ S-.G	*,GI89Dn D :I /D S-.89%/ %/ : /%/P zHMMO o   
Cs   "K K"!K"