
    z%i#                        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Zd dlmZ d d	lmZmZmZ 	 d dlZ ej8                  d
       ej:                  j=                  ej:                  j?                  e       xs ejB                  d      Z"ej:                  j=                  ej:                  j?                  e       xs ejB                  d      Z# G d dejH                        Z%er" G d de	jL                        Z'ejP                  Z(n G d d      Z'dZ( G d de	jR                        Z* G d d      Z+ G d de+ejH                        Z, ejZ                  ed       G d de+ejH                               Z. G d dejH                        Z/ ejZ                  ed       G d de/             Z0 ejZ                   ejb                  d       d!       ejd                  d"       G d# d$ejH                                      Z3 ejZ                  ed       ejZ                   ejb                  d       d!       ejd                  d"       G d% d&e3                           Z4 ejZ                  ed       ejd                  d"       G d' d(e3                    Z5e6d)k(  r ejn                          yy# e$ r dZY yw 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)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	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      E/home/uftp/.pyenv/versions/3.12.0/lib/python3.12/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.timevalues3   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.   )r1   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)r1   r   r6   )r   r8   s     r!   ,test_that_Time2Internaldate_returns_a_resultz8TestImaplib.test_that_Time2Internaldate_returns_a_resultF   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_valueM   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'   r1   r   r:   r=   r   skip_if_tcp_blackholerO    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)r@   acceptssl
SSLContextPROTOCOL_TLS_SERVERload_cert_chainCERTFILEwrap_socket)r   	newsocketfromaddrcontext
connstreams        r!   get_requestzSecureTCPServer.get_requestb   s[    "&++"4"4"6IxnnS%<%<=G##H- ,,YD,IJx''r#   N)rP   rQ   rR   rd   rT   r#   r!   rV   rV   `   s    	(r#   rV   c                       e Zd Zy)rV   NrP   rQ   rR   rT   r#   r!   rV   rV   m   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!   rl   zSimpleIMAPHandler.setupx   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   
)ry   rw   s     r!   
_send_linezSimpleIMAPHandler._send_line   s    

7W$%r#   c                 D    | j                  |j                  d             y )NASCII)r|   encoderw   s     r!   _send_textlinez SimpleIMAPHandler._send_textline   s    w/0r#   c                 J    | j                  dj                  |||f             y )N )r   join)r   tagcoderx   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readrG   endswithr   rs   rt   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)rm   ro   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)rm   ro   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.)rm   rn   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)rm   rn   r   r   s      r!   cmd_UNSELECTzSimpleIMAPHandler.cmd_UNSELECT   sA    ;;""&+DKK#c4)UVc5*?@r#   )rP   rQ   rR   r   LOOPBACK_TIMEOUTtimeoutr   r   rl   ry   r|   r   r   r   r   r   r   r   r   __classcell__rq   s   @r!   rh   rh   s   sS    &&GLL"
"
&1<(@T=9
8G
Ar#   rh   c                   L   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 ed      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rP   rQ   rR   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_handlerrA   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shutdownrm   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ru   rv   r&   s    r!   r   zVNewIMAPTestsMixin.test_EOF_without_complete_welcome_message.<locals>.EOFHandler.handle	  s    

  )r#   NrP   rQ   rR   r   rT   r#   r!   
EOFHandlerr     s    *r#   r   FrA   )	socketserverStreamRequestHandlerr   rF   r   rH   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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   ry   r   r   s      r!   r   zQNewIMAPTestsMixin.test_line_termination.<locals>.BadNewlineHandler.cmd_CAPABILITY  "    

;<!!#t-CDr#   NrP   rQ   rR   r   rT   r#   r!   BadNewlineHandlerr     s    Er#   r   Fr   )rh   r   rF   r   rH   r   r   r   )r   r   r   rm   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rP   rQ   rR   r   rT   r#   r!   EnableHandlerr     s    4Lr#   r   zENABLE.*NONAUTHfoo)	rh   r   assertFalseutf8_enabledassertRaisesRegexr   rH   rD   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   rh   r   r   rH   rD   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   rh   loginr   r   r   rH   rD   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_ENABLE2      !!#t-@Ar#   c              3   z   K   | j                  d       d | j                  _        | j                  |dd       y wN+r   zFAKEAUTH successfulr   rm   responser   r   s      r!   cmd_AUTHENTICATEzYNewIMAPTestsMixin.test_enable_UTF8_True_append.<locals>.UTF8AppendServer.cmd_AUTHENTICATE4  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_APPEND8  2     ##C(',$!!#tV4r  N)rP   rQ   rR   r   r  r  r  rT   r#   r!   UTF8AppendServerr  0  s    /LBD5r#   r!  asciiMYAUTHc                      y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_append/  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_ENABLEM  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_AUTHENTICATEO  r  r  NrP   rQ   rR   r   r  r  rT   r#   r!   
UTF8Serverr5  K  s    4LBDr#   r9  r#  c                      yr%  rT   r&  s    r!   r(  zNNewIMAPTestsMixin.test_search_disallows_charset_in_utf8_mode.<locals>.<lambda>T  r)  r#   r   r  zcharset.*UTF8r   bar)rh   r   r/  r   r   
assertTruer   r   r   rH   rD   search)r   r9  r   r   r	  s        r!   *test_search_disallows_charset_in_utf8_modez<NewIMAPTestsMixin.test_search_disallows_charset_in_utf8_modeJ  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rP   rQ   rR   r  rT   r#   r!   MyServerrA  ]  s    Kr#   rH  z'unrecognized authentication type METHODMETHODc                       yNr   rT   rT   r#   r!   r(  z6NewIMAPTestsMixin.test_bad_auth_name.<locals>.<lambda>d  r)  r#   rh   r   r   r   rH   rD   r/  r   rH  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  rD  z[AUTHENTICATIONFAILED] invalidr   r  r   r   s      r!   r  zPNewIMAPTestsMixin.test_invalid_authentication.<locals>.MyServer.cmd_AUTHENTICATEh  .     ##C( %!!#t-MN   /1NrG  rT   r#   r!   rH  rR  g  s    Or#   rH  z \[AUTHENTICATIONFAILED\] invalidr#  c                      yr%  rT   r&  s    r!   r(  z?NewIMAPTestsMixin.test_invalid_authentication.<locals>.<lambda>o  r)  r#   rL  rM  s       r!   test_invalid_authenticationz-NewIMAPTestsMixin.test_invalid_authenticationf  sh    	O( 	O
 KK)	##GMM$7$735 	=*;<	= 	= 	=rO  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_AUTHENTICATEs  r  r  NrG  rT   r#   r!   rH  r\  r      Dr#   rH  r#  c                      yr%  rT   r&  s    r!   r(  zCNewIMAPTestsMixin.test_valid_authentication_bytes.<locals>.<lambda>x  r)  r#   r   r*  rh   r   r/  r   r  r   rH  r   rm   r   r   s         r!   test_valid_authentication_bytesz1NewIMAPTestsMixin.test_valid_authentication_bytesq  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  NrG  rT   r#   r!   rH  re  }  r^  r#   rH  r#  c                      yNfakerT   r&  s    r!   r(  zHNewIMAPTestsMixin.test_valid_authentication_plain_text.<locals>.<lambda>  r)  r#   r   r*  r`  ra  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 successfulrD  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rP   rQ   rR   r   r  rT   r#   r!   AuthHandlerrp        8L>r#   rz  AUTH=CRAM-MD5tim   tanstaaftanstaafr   rh   r   r<  r   login_cram_md5r   r   rz  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>.AuthHandlerrq  c              3      K   | j                  d       d }|dk(  r| j                  |dd       y | j                  |dd       y wrs  rt  ru  s       r!   r  zVNewIMAPTestsMixin.test_login_cram_md5_plain_text.<locals>.AuthHandler.cmd_AUTHENTICATE  rw  rx  Nry  rT   r#   r!   rz  r    r{  r#   rz  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   *
rD  z[AUTHENTICATIONFAILED] abortedr   zMYAUTH successfulrU  r   s      r!   r  zPNewIMAPTestsMixin.test_aborted_authentication.<locals>.MyServer.cmd_AUTHENTICATE  sS     ##C( %==H,%%8:
 %%c41DE   AANrG  rT   r#   r!   rH  r    s    	Fr#   rH  z \[AUTHENTICATIONFAILED\] abortedr#  c                      y r<   rT   r&  s    r!   r(  z?NewIMAPTestsMixin.test_aborted_authentication.<locals>.<lambda>  r)  r#   rL  rM  s       r!   test_aborted_authenticationz-NewIMAPTestsMixin.test_aborted_authentication  sg    
	F( 
	F KK)	##GMM$7$735 	:.9	: 	: 	:rO  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   rT   r#   r!   TooLongHandlerr    s    Ar#   r  Fr   zgot more than 10 bytes)rh   r   r   r   rH   rD   r   r   )r   r  r   rm   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   rh   r   r   )r   r   rm   s      r!   test_simple_with_statementz,NewIMAPTestsMixin.test_simple_with_statement  sE    KK 15KA	6T__f334 		 	 	s	   ?Awalltimec                 .   | j                  t              \  }}|j                  d   }| j                  d|d       }| j	                  |j
                  j                  d        |j                          | j                  d|t        j                        }| j	                  |j
                  j                  t        j                         |j                          | j                  t              5  | j                  d|d      }d d d        y # 1 sw Y   y xY w)Nr   	localhostr   r   )r   rh   r   r   r   sockr   r   r   r   rF   
ValueError)r   r   rm   addrr   s        r!   test_imaplib_timeout_testz+NewIMAPTestsMixin.test_imaplib_timeout_test  s    KK 12	6$$Q'dDA,,d3dG<T<TU,,g.F.FGz* 	C__[$_BF	C 	C 	Cs   -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 rK  )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   rF   TimeoutErrorr   )r   r  r   rm   r  r   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   rh   r   r   r  r   ro   assertIsNoner   r   rm   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   rh   r   r   r  r   ro   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   rh   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   rh   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 completedrt  r   s      r!   cmd_LSUBz5NewIMAPTestsMixin.test_lsub.<locals>.LsubCmd.cmd_LSUB
  s'    ##$>?((d4DEEr#   N)rP   rQ   rR   r  rT   r#   r!   LsubCmdr  	  s    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  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   rh   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)#rP   rQ   rR   r   r   r   r   r   r   r  r  r2  r>  rN  rY  rb  rj  r   requires_hashdigestr  r  r  r   patchr  r  r
   r  r  r  r  r  r  r  r  rT   r#   r!   r   r      s    F(B 22.!)<6($5	=	;	; (^''t<$ =$" (^''t<$ =$":" TZZ"B'4 (4
 z"
C #
C	G))/1	8
/r#   r   c                   <    e Zd Zej                  Zej                  Zy)NewIMAPTestsN)	rP   rQ   rR   r   rH   r   r   	TCPServerr   rT   r#   r!   r  r     s    J))Lr#   r  zSSL not availablec                   L    e Zd ZeZeZ ed      d        Z ed      d        Z	y)NewIMAPSSLTestsr  c                    t        j                  t         j                        }| j                  |j                  t         j
                         | j                  |j                  d       |j                  t               | j                  t         j                  d      5  | j                  t              \  }} | 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'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    nnS%<%<=00#2C2CD33T:))&1##C$8$8 	 $56IAv$T__f&;&; >1<>FOO	 	 	s   AC--C6c                    t        j                  t         j                        }|j                  t               | j                  t              \  }}| j                  d|j                  d   |      }|j                          y )Nr  r   r  )
rZ   r[   r  r  r  r   rh   r   r   r   r  s        r!   test_ssl_verifiedz!NewIMAPSSLTests.test_ssl_verified9  sf    nnS%<%<=))&1KK 12	6f.C.CA.F-8 ! :r#   N)
rP   rQ   rR   	IMAP4_SSLr   rV   r   r
   r  r  rT   r#   r!   r  r  %  s<    J"Lz" # z" #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_errorJ  s    ""7+!!#r#   Nr   rT   r#   r!   rH  r  I  s    r#   rH  zcreating serverzserver createdzADDR =zCLASS =zHDLR =z
%s servingr   r   r   Tzserver running)r   r   rs   r   r   r@   getsocknameRequestHandlerClassr   r   r   r   r   )r   r  hdlrrH  rm   r8   s         r!   make_serverz"ThreadedNetworkedTests.make_serverG  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   rs   r   r   r   )r   rm   r   s      r!   reap_serverz"ThreadedNetworkedTests.reap_serverg  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  rm   r   s       r!   reaped_serverz$ThreadedNetworkedTests.reaped_serverp  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  rm   r   s       r!   reaped_pairz"ThreadedNetworkedTests.reaped_pairx  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  rh   r   r   r   r   rm   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)flagsrk   r   rp   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.)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??A	

!!),*UZZ

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

7 34!!#t-?@r#   )rP   rQ   rR   r   r  r   r  r   r   s   @r!   BracketFlagHandlerr    s    !D
OAr#   r	  r#  c                      yr%  rT   r&  s    r!   r(  z;ThreadedNetworkedTests.test_bracket_flags.<locals>.<lambda>  r)  r#   r   r*  test   1z+FLAGSz[test]s   [test]PERMANENTFLAGS)rh   r  r/  r   r  r  storerI   )r   r	  rm   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   rT   r#   r!   r   r    s    *r#   r   )	r   r   r  rF   r   rH   r   r   r   )r   r   rm   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   rT   r#   r!   r   r    s    Er#   r   )rh   r  rF   r   rH   r   r   r   )r   r   rm   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  Nr8  rT   r#   r!   r9  r    s    0	>	@r#   r9  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  r9  r   r   rF   r   rH   rD   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   rT   r#   r!   NoEnableServerr!    s    !Lr#   r"  r   )r9  r  rF   r   rH   rD   r   )r   r"  rm   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>.NonUTF8ServerNrf   rT   r#   r!   NonUTF8Serverr%    s    r#   r&  r  r  r   r  )	rh   rF   r   rH   rD   r  r  r   r   )r   r&  rm   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)rP   rQ   rR   r  rT   r#   r!   r!  r)    s    5r#   r!  r"  r#  c                      yr%  rT   r&  s    r!   r(  zEThreadedNetworkedTests.test_enable_UTF8_True_append.<locals>.<lambda>  r)  r#   r   r*  r  r+  r,  r-  )	r9  r  r   r.  r/  r  r   r0  r   )	r   r!  rm   r   r   r   r1  r	  r
  s	            r!   r2  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%  rT   r&  s    r!   r(  zSThreadedNetworkedTests.test_search_disallows_charset_in_utf8_mode.<locals>.<lambda>  r)  r#   r   r  r   r;  )r  r9  r/  r   r   r<  r   rF   r   rH   rD   r=  )r   rm   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 rC  rE  r   s      r!   r  zLThreadedNetworkedTests.test_bad_auth_name.<locals>.MyServer.cmd_AUTHENTICATE#  s&    !!#t .,,2F47O=r#   NrG  rT   r#   r!   rH  r0  !  s    =r#   rH  rI  c                       yrK  rT   rT   r#   r!   r(  z;ThreadedNetworkedTests.test_bad_auth_name.<locals>.<lambda>)  r)  r#   rh   r  rF   r   rH   rD   r/  )r   rH  rm   r   s       r!   rN  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rT  rU  r   s      r!   r  zUThreadedNetworkedTests.test_invalid_authentication.<locals>.MyServer.cmd_AUTHENTICATE0  rV  rW  NrG  rT   r#   r!   rH  r6  .  s    Or#   rH  r#  c                      yr%  rT   r&  s    r!   r(  zDThreadedNetworkedTests.test_invalid_authentication.<locals>.<lambda>7  r)  r#   r3  r   rH  rm   r   r   r
  s         r!   rY  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  NrG  rT   r#   r!   rH  r=  <  s    Dr#   rH  r#  c                      yr%  rT   r&  s    r!   r(  zBThreadedNetworkedTests.test_valid_authentication.<locals>.<lambda>D  r)  r#   r   r*  c                      yrh  rT   r&  s    r!   r(  zBThreadedNetworkedTests.test_valid_authentication.<locals>.<lambda>J  r)  r#   )rh   r  r/  r   r  r9  s         r!   test_valid_authenticationz0ThreadedNetworkedTests.test_valid_authentication9  s    	D( 	D h' 	.+;FF,,X7HIJD$T4(V__,.	. h' 	.+;FF,,X7GHJD$T4(V__,.	. 	.	. 	.	. 	.   ACACCC(rk  Trl  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>.AuthHandlerrq  c              3      K   | j                  d       d }|dk(  r| j                  |dd       y | j                  |dd       y wrs  rt  ru  s       r!   r  zPThreadedNetworkedTests.test_login_cram_md5.<locals>.AuthHandler.cmd_AUTHENTICATEW  rw  rx  Nry  rT   r#   r!   rz  rE  S  s    8L>r#   rz  r|  r}  r  r   r~  )rh   r  r<  r   r  r   )r   rz  rm   r   r  r
  s         r!   test_login_cram_md5z*ThreadedNetworkedTests.test_login_cram_md5O  s    	>+ 	> k* 	(.>vvOOOv/B/BBC--e5GHICS$'	(
 k* 	(.>vvOOOv/B/BBC--e5HIICS$'	( 	(	( 	(
	( 	(rB  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  rU  r   s      r!   r  zUThreadedNetworkedTests.test_aborted_authentication.<locals>.MyServer.cmd_AUTHENTICATEq  sM     ##C( %==H,%%c41QR%%c41DEr  NrG  rT   r#   r!   rH  rJ  o  s    Fr#   rH  r#  c                      y r<   rT   r&  s    r!   r(  zDThreadedNetworkedTests.test_aborted_authentication.<locals>.<lambda>|  r)  r#   r3  r9  s         r!   r  z2ThreadedNetworkedTests.test_aborted_authenticationl  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{   )ru   rv   r   _MAXLINEr&   s    r!   r   zFThreadedNetworkedTests.test_linetoolong.<locals>.TooLongHandler.handle  s)    

  G,<,<t,C!Cg!MNr#   Nr   rT   r#   r!   r  rO    s    Or#   r  )rh   r  rF   r   rH   rD   r   r   )r   r  rm   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  rh   r   r   )r   rm   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  rh   r   r   r  r   ro   r  r   rm   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rU  )	r  rh   r   r   r  r   ro   r  r  rV  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  rh   r   r   r   r  object_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 	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)*rP   rQ   rR   r   r  r   r   rH   r   r  r  r   r  r  r   reap_threadsr  r  r  r   rh   r9  r   r  r  r2  r>  rN  rY  rA  r   r  rG  r  r  r  r  r  r	   unittest
skipUnlessr_  rT   r#   r!   r  r  C  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               | j                  t         j                  d      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  )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   nnS%<%<=))&1##$$ 	" ##$56 "&(&*?*? B5@B!"		"  12 	f__[&2G2G2J1< % >FOO	 	" "		" 	"	 	s0   D/-C<D2D<D	DDDN)
rP   rQ   rR   rV   r   r  r   r   r`  r  rT   r#   r!   rd  rd    s$    "LJ"" #r#   rd  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   portrm   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<   )rm   r   rl  rm  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   rl  rm  rm   r   assertIsInstancestrrI   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   rl  rm  rm   r  r   )r   ry  s     r!   r  zRemoteIMAPTest.test_logout  sX    --dii8 	/##%BDKRUE2.	/ 	/ 	/   8A!!A*N)rP   rQ   rR   rm  rn  rv  rw  r   rH   r   ro  rq  rz  r  rT   r#   r!   rh  rh    s6     "DDHHJ@%
*/r#   rh  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   )rk   ro  r   rl  rm  rm   starttlsr   )r   ry  rq   s     r!   ro  zRemoteIMAP_STARTTLSTest.setUp  sY    --dii8 	*%%'BRUD)	* 	* 	*s   0A((A1c                     | j                   j                  D ]  }| j                  |t                | j	                  d| j                   j                         y )Nrs  )rm   r   rt  ru  assertNotIn)r   rx  s     r!   rz  z&RemoteIMAP_STARTTLSTest.test_logincapa  sE    ;;++ 	,C!!#s+	,$++*B*BCr#   )rP   rQ   rR   ro  rz  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<   rT   r&   s    r!   ro  zRemoteIMAP_SSLTest.setUp      r#   c                      y r<   rT   r&   s    r!   rq  zRemoteIMAP_SSLTest.tearDown
  r  r#   c                     t        j                  t         j                        }d|_        t         j                  |_        |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>    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)Nrs  z
AUTH=PLAINr   r   )
r   rt  ru  r  rI   r  rv  rw  r   r  )r   rm   rx  ry  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   rl  rm  r   rn  r  )r   _servers     r!   rz  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   rl  rm  r   rn  r  r   )r   r  ry  s      r!   r  zRemoteIMAP_SSLTest.test_logout$  sc    --dii8 	/oodii;G!BRUE2.	/ 	/ 	/s   AA66A?N)rP   rQ   rR   rn  r  r   ro  rq  r  r  rz  r  rT   r#   r!   r  r    s,     DJ	*
/r#   r  __main__)8r  r   test.supportr   
contextlibr   r   os.pathosr   r   r   r   r@   r   r   r   r	   r
   r   r   ra  r   r   r   r   rZ   ImportErrorrequires_working_socketpathr   dirname__file__curdirr^   r  TestCaser   r  rV   r  r   rh   r   r  rb  r  r  rd  is_resource_enabledskiprh  r  r  rP   mainrT   r#   r!   <module>r     s    & %        _ _ ' )   2 2    t ,77<<1>RYYO	bggooh/<299n	M>;(## >;B (,00 ( !!I  I\A99 \A~K/ K/\
*$h&7&7 *
 S-.'):):  /:mX.. m` S-. 6  /0 G	*,GI89/X&& / :I/@ S-.G	*,GI89Dn D :I /D S-.89%/ %/ : /%/P zHMMO m   
Cs   K KK