
    7bhr                        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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      ;/opt/python-3.12.12/usr/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.timevalues4   sE    L$..*D43&&z'/	![0I'JL.0 	0r$   LC_ALLde_DEfr_FR z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"A003HXx0 #r$   c                 X    | j                         D ]  }t        j                  |        y N)r2   r   r8   )r   r:   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)Nr6   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      sv    
. +,D -D0 Xw4 *+1 , 5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 )SimpleIMAPHandlerNr6   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%  L,,- LKs   )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"  sN    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(  sr    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  s    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%' JIIs   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  s    !r$   ri   r   r   r   rI   rE   r0  r   rI  r   r   s       r"   test_bad_auth_namez$NewIMAPTestsMixin.test_bad_auth_name]  sb    	K( 	K KK)	##GMM$7$79;)4; ; ;   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  s    Gr$   rM  rN  s       r"   test_invalid_authenticationz-NewIMAPTestsMixin.test_invalid_authenticationg  sc    	O( 	O
 KK)	##GMM$7$735*;<5 5 5rP  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>  s    &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>  s    Dr$   rM  rN  s       r"   test_aborted_authenticationz-NewIMAPTestsMixin.test_aborted_authentication  sb    
	F( 
	F KK)	##GMM$7$735.95 5 5rP  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  sj    	A. 	A KKK>	6##GMM$7$7(*DOOV223* * *s   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  s<    KK 15KA	6T__f334 544s	   ?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BfV[[00$7 CT__f33VW=U=UVZ`V[[00'2J2JK Wz*DOOV22>A> +*	 CBVV**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  sa    	/. 	/
 KK/	6$$Q'|,__[$_FF -,,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  ss    KK 15KA	6T__f334JJvv&V]]F3 5 	&--( 5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,	 5
 	&--( 54s   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	 A@@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                   v   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"d Z#ej                  d        Z$ej                  d        Z%ej                  d        Z&ej                  e' e(jR                  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   r:   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  sa     %$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  s?     12f$T__f&;&;<FOO 322s   *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+  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15Eff,,X7HIJD$T4(V__o>MM&! ,,tXx@KC$MM)T*MM&! //*:;KC$MM)T* 211s   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  se    	*:: 	*
 
+vDgmm11"ooG060E0E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  sc    	E 1 	E  12fDgmm11"ooG060E0EG 322   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  so    doo.2B66V001gmm116==%HV001 /..s   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  sS    	"T__ 	"n-1A&&gmm116==%H .--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!!-04DVV"LL8	T  d+m, 1 4300 43s#   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>   s    gr$   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> 0//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>  s    Wr$   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.2B66((3DEFCS$']]=1FCS$'OOF//0gmm116==%O /..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  r3     s    =r$   rI  rJ  c                       yrL  rU   rU   r$   r"   r)  z;ThreadedNetworkedTests.test_bad_auth_name.<locals>.<lambda>(  s    ar$   ri   r  rG   r   rI   rE   r0  )r   rI  rn   r   s       r"   rO  z)ThreadedNetworkedTests.test_bad_auth_name  sk    	=( 	= h'+;FF""7==#6#67##Hi8 8 ('77 ('s#   -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  r9  -  s    Or$   rI  r$  c                      yr&  rU   r'  s    r"   r)  zDThreadedNetworkedTests.test_invalid_authentication.<locals>.<lambda>6  s    Wr$   r6  r   rI  rn   r   r   r  s         r"   rZ  z2ThreadedNetworkedTests.test_invalid_authentication*  st    	O( 	O h'+;FF""7==#6#67#00;LM
d 8 ('77 ('#   -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  s    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{  rH  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$' +* +*
 +*rE  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  rM  n  s    Fr$   rI  r$  c                      y r>   rU   r'  s    r"   r)  zDThreadedNetworkedTests.test_aborted_authentication.<locals>.<lambda>{  s    Tr$   r6  r<  s         r"   r  z2ThreadedNetworkedTests.test_aborted_authenticationk  ss    		F( 		F h'+;FF""7==#6#67#00>J
d 8 ('77 ('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  rR    s    Or$   r  )ri   r  rG   r   rI   rE   r   r   )r   r  rn   s      r"   r  z'ThreadedNetworkedTests.test_linetoolong~  sb    	O. 	O
 /6Dgmm11"ooG060E0EG 0//r  c           	         d G fddt               }t        dd      D ]  }d|z  | j                  d       5  | j                  |      5 }| j	                  t
        j                  j                        5   | j                  |j                    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   xY w)Nr   c                       e Zd Z fdZy)GThreadedNetworkedTests.test_truncated_large_literal.<locals>.BadHandlerc                 P    | j                  dz         | j                  d       y )Nz	* OK {%d}r   )r   )r   sizes    r"   r   zNThreadedNetworkedTests.test_truncated_large_literal.<locals>.BadHandler.handle  s$    ##K$$67##K0r$   Nr   )rZ  s   r"   
BadHandlerrX    s    1r$   r[     @   r   zsize=2e)
ri   rangesubTestr  rG   r   rI   r   r   r   )r   r[  exponentrn   rZ  s       @r"   test_truncated_large_literalz3ThreadedNetworkedTests.test_truncated_large_literal  s    	1* 	1
 b"H=Dv./''
3v**7==+>+>?')>)>? @ 4 0/ & @? 43 0/s;   C*B:9B.	B:C.B73B::C?CC	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  sI      12f &"7"78 9 3288 32s!   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2f &"7"78D

66*  7 9 fmm,	 3288 32s"   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rd  )	r  ri   r   r   r  r   rp   r  r  re  s      r"   r  z1ThreadedNetworkedTests.test_with_statement_logout  s      12f &"7"78D

66*  7!!&--0	 9
 fmm, 3288 32s#   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2f &"7"78DZZ&&tW5MM"4500C 6 9 3255 98 32s:   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  rD  r   r  rJ  r  r  ra  r  r  r  r	   unittest
skipUnlessrn  rU   r$   r"   r  r  B  s}   ))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! 7 A  12f__[&2G2G2J1< % >FOO 32 76 A@ 32s0   =D,-D  D,%2D8 D)	%D,,D58EN)
rQ   rR   rS   rW   r   r  r   r   ro  r  rU   r$   r"   rs  rs    s$    "LJ"" #r$   rs  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  s:    --dii8//$))TYY?DK 988s   ,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   r{  r|  r  r'   s    r"   tearDownzRemoteIMAPTest.tearDown  sB    ;;"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   r{  r|  rn   r   assertIsInstancestrrJ   r  usernamepasswordr   )r   caprss      r"   test_logincapazRemoteIMAPTest.test_logincapa  s    --dii8{{//%%c3/ 0MM/4;;+C+CDMM*DKK,D,DE""4==$--@BRUD) 988s   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   r{  r|  rn   r  r   )r   r  s     r"   r  zRemoteIMAPTest.test_logout  sO    --dii8##%BDKRUE2. 988   8A!!A*N)rQ   rR   rS   r|  r}  r  r  r   rI   r   r~  r  r  r  rU   r$   r"   rw  rw    s6     "DDHHJ@%
*/r$   rw  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   r~  r   r{  r|  rn   starttlsr   )r   r  rr   s     r"   r~  zRemoteIMAP_STARTTLSTest.setUp  sP    --dii8%%'BRUD) 988s   0A((A1c                     | j                   j                  D ]  }| j                  |t                | j	                  d| j                   j                         y )Nr  )rn   r   r  r  assertNotIn)r   r  s     r"   r  z&RemoteIMAP_STARTTLSTest.test_logincapa  s@    ;;++C!!#s+ ,$++*B*BCr$   )rQ   rR   rS   r~  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"   r~  zRemoteIMAP_SSLTest.setUp      r$   c                      y r>   rU   r'   s    r"   r  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)Nr  z
AUTH=PLAINr   r   )
r   r  r  r  rJ   r  r  r  r   r  )r   rn   r  r  s       r"   check_logincapaz"RemoteIMAP_SSLTest.check_logincapa$  s    	**%%c3/ +_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   r{  r|  r   r}  r  )r   _servers     r"   r  z!RemoteIMAP_SSLTest.test_logincapa/  sF    --dii8oodii;G  ) 988r  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   r{  r|  r   r}  r  r   )r   r  r  s      r"   r  zRemoteIMAP_SSLTest.test_logout4  sZ    --dii8oodii;G!BRUE2. 988s   AA66A?N)rQ   rR   rS   r}  r  r   r~  r  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   rp  r   r   r   r   r[   ImportErrorrequires_working_socketpathr   dirname__file__curdirr_   r  TestCaser   r  rW   r  r   ri   r   r  rq  r  r  rs  is_resource_enabledskiprw  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-.'):):  />{X.. {| 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 K!  
Cs   "K K"!K"