
    0hhDH                     ~   S SK r S SKrS SKrS SKrS SKrS SKrS SKJrJr  S SKJ	r
  S SKJr  S SKJr  S SKJr  S SKJr  S SKJr  S S	KJr  \
R&                  " S
S9  \R(                  rS rSr\" \ S5      (       a  S SKrS
r\R2                  R5                  \R2                  R7                  \5      =(       d    \R:                  SS5      r\R2                  R5                  \R2                  R7                  \5      =(       d    \R:                  SS5      r\" \S5      r Sr!Sr" " S S\RF                  5      r$ " S S\RJ                  \RL                  5      r' " S S\\5      r(\(       a  S SK)J*r*   " S S\*\$5      r+\  " S S\(5      5       r,\  " S S \(5      5       r- " S! S"\5      r.S# r/\0S$:X  a  \Rb                  " 5         gg)%    N)TestCase
skipUnless)support)hashlib_helper)socket_helper)threading_helper)asynchat)asyncore)ExtraAssertionsT)moduleFPOP3_SSLcertdatazkeycert3.pemzpycacert.pemzSSL not supporteds   1 1
2 2
3 3
4 4
5 5
.
st   From: postmaster@python.org
Content-Type: text/plain
MIME-Version: 1.0
Subject: Dummy

line1
line2
line3
.
c                       \ rS rSr/ S/S.rSrS rS rS rS r	S	 r
S
 rS rS rS rS r\rS r\rS rS rS rS rS rS rS rS r\(       a  S rS rS rSrgSrg)DummyPOP3Handler3   zpython-testlib-pop-server)UIDLIMPLEMENTATIONFc                     [         R                  R                  X5        U R                  S5        / U l        U R                  S5        SU l        SU l        g )N   
(+OK dummy pop3 server ready. <timestamp>F)r	   
async_chat__init__set_terminator	in_bufferpush
tls_activetls_startingselfconns     9/opt/python-3.13.8/usr/lib/python3.13/test/test_poplib.pyr   DummyPOP3Handler.__init__8   sG    $$T0G$		<=!    c                 :    U R                   R                  U5        g N)r   appendr   datas     r!   collect_incoming_data&DummyPOP3Handler.collect_incoming_data@   s    d#r#   c                 f   SR                  U R                  5      n[        US5      n/ U l        UR                  S5      S   R	                  5       nUR                  S5      nUS:w  a  XS-   S  nOSn[        U SU-   5      (       a  [        U SU-   5      nU" U5        g U R                  S	U-  5        g )
Nr#   
ISO-8859-1 r       cmd_z$-ERR unrecognized POP3 command "%s".)	joinr   strsplitlowerfindhasattrgetattrr   )r   linecmdspaceargmethods         r!   found_terminator!DummyPOP3Handler.found_terminatorC   s    xx'4&jjoa &&(		#B;qyz"CC4#&&T6C<0F3KII<cABr#   c                     e r%    r   s    r!   handle_errorDummyPOP3Handler.handle_errorS       r#   c                 f    [         R                  R                  XR                  S5      S-   5        g )Nr,   r   )r	   r   r   encoder'   s     r!   r   DummyPOP3Handler.pushV   s$      {{<'@7'JKr#   c                 &    U R                  U5        g r%   r   r   r<   s     r!   cmd_echoDummyPOP3Handler.cmd_echoY   s    		#r#   c                 T    US:w  a  U R                  S5        U R                  S5        g )Nguidoz-ERR no such userz+OK password requiredrJ   rK   s     r!   cmd_userDummyPOP3Handler.cmd_user]   s#    '>II)*		)*r#   c                 T    US:w  a  U R                  S5        U R                  S5        g )Npythonz-ERR wrong passwordz+OK 10 messagesrJ   rK   s     r!   cmd_passDummyPOP3Handler.cmd_passb   s#    (?II+,		#$r#   c                 &    U R                  S5        g )Nz
+OK 10 100rJ   rK   s     r!   cmd_statDummyPOP3Handler.cmd_statg   s    		,r#   c                     U(       a  U R                  SU< SU< 35        g U R                  S5        [        R                  R                  U [        5        g )Nz+OK r-   z+OK)r   r	   r   	LIST_RESPrK   s     r!   cmd_listDummyPOP3Handler.cmd_listj   s8    IIS#./IIe$$T95r#   c                     U R                  S[        [        5      -  5        [        R                  R                  U [        5        g )Nz+OK %s bytes)r   len	RETR_RESPr	   r   rK   s     r!   cmd_retrDummyPOP3Handler.cmd_retrs   s-    		.#i.01  y1r#   c                 &    U R                  S5        g )Nz +OK message marked for deletion.rJ   rK   s     r!   cmd_deleDummyPOP3Handler.cmd_deley   s    		45r#   c                 &    U R                  S5        g Nz+OK done nothing.rJ   rK   s     r!   cmd_noopDummyPOP3Handler.cmd_noop|       		%&r#   c                 &    U R                  S5        g rf   rJ   rK   s     r!   cmd_rpopDummyPOP3Handler.cmd_rpop   ri   r#   c                 &    U R                  S5        g rf   rJ   rK   s     r!   cmd_apopDummyPOP3Handler.cmd_apop   ri   r#   c                 F    U R                  S5        U R                  5         g )Nz+OK closing.)r   close_when_donerK   s     r!   cmd_quitDummyPOP3Handler.cmd_quit   s    		.!r#   c                 r    [        U R                  5      nU R                  (       d  [        (       a  / US'   U$ NSTLS)dictCAPASr   SUPPORTS_SSL)r   _capass     r!   
_get_capasDummyPOP3Handler._get_capas   s)    djj!<<F6Nr#   c                 6   U R                  S5        U R                  5       (       ab  U R                  5       R                  5        H@  u  p#U/nU(       a  UR                  U5        U R                  SR	                  U5      5        MB     U R                  S5        g )Nz+OK Capability list followsr-   .)r   r{   itemsextendr2   )r   r<   capparams_lns        r!   cmd_capaDummyPOP3Handler.cmd_capa   so    		/0??#0668eJJv&		#((3-(	  9
 			#r#   c                 V    U R                  U R                  (       a  S5        g S5        g )Nz+OK I know RFC6856z-ERR What is UTF8?!)r   enable_UTF8rK   s     r!   cmd_utf8DummyPOP3Handler.cmd_utf8   s$    		%% ' 	.,	.r#   c                    U R                   SL a  U R                  S5        [        R                  " [        R                  5      nUR                  [        5        UR                  U R                  SSSS9nU R                  5         U R                  U5        SU l         SU l        / U l        U R                  5         g U R                  S5        g )NFz+OK Begin TLS negotiationT)server_sidedo_handshake_on_connectsuppress_ragged_eofsz*-ERR Command not permitted when TLS active)r   r   ssl
SSLContextPROTOCOL_TLS_SERVERload_cert_chainCERTFILEwrap_socketsocketdel_channel
set_socketr   r   _do_tls_handshake)r   r<   contexttls_socks       r!   cmd_stlsDummyPOP3Handler.cmd_stls   s    %'		56..)@)@A''1"..t{{;?GLDI / K   ")"&$(!!#&&(		FGr#   c                 n    U R                   R                  5         SU l        SU l        g ! [        R
                   a  nUR                  S   [        R                  [        R                  4;   a   S nAg UR                  S   [        R                  :X  a  U R                  5       s S nA$ SUR                  S   ;   d  SUR                  S   ;   a  U R                  5       s S nA$ e S nAf[         a@  nUR                  S   [        R                  :X  a  U R                  5       s S nA$  S nAg S nAff = f)NTFr   SSLV3_ALERT_BAD_CERTIFICATEr/   SSLV3_ALERT_CERTIFICATE_UNKNOWN)r   do_handshaker   r   r   SSLErrorargsSSL_ERROR_WANT_READSSL_ERROR_WANT_WRITESSL_ERROR_EOFhandle_closeOSErrorerrnoECONNABORTED)r   errs     r!   r   "DummyPOP3Handler._do_tls_handshake   s    *((*  #'$)!! << 
88A;3#:#:#&#;#;#= =XXa[C$5$55,,..3sxx{B7388A;F,,.. /88A;%"4"44,,.. 5/sD   + D41C'50C'%D4+5C' D4&C''D440D/$D4/D4c                     U R                   (       a  U R                  5         g  [        R                  R	                  U 5        g ! [
        R                   a    U R                  5          g f = fr%   )r   r   r	   r   handle_readr   SSLEOFErrorr   rB   s    r!   r   DummyPOP3Handler.handle_read   sO      &&((''33D9 (%%'(s   A $A+*A+r   r   r   N) __name__
__module____qualname____firstlineno__rx   r   r   r)   r>   rC   r   rL   rP   rT   rW   r[   cmd_uidlr`   cmd_toprc   rg   rk   rn   rr   r{   r   r   ry   r   r   r   __static_attributes__rA   r#   r!   r   r   3   s    ,G+HIEK"$C L+
%
 6 H2 G6'''.
 	H$	**	(S r#   r   c                   f    \ rS rSr\r\R                  4S jrS r	S r
S rS rS r\rS rS	 rS
rg)DummyPOP3Server   c                    [         R                  R                  U 5        [        R                  R                  U 5        SU l        U R                  U[        R                  5        U R                  U5        U R                  S5        SU l        [         R                  " 5       U l        U R                  R                  5       S S u  U l        U l        S U l        g )NT   F   )	threadingThreadr   r
   
dispatcherdaemoncreate_socketr   SOCK_STREAMbindlistenactiveLockactive_lockgetsocknamehostporthandler_instance)r   addressafs      r!   r   DummyPOP3Server.__init__   s    !!$'$$T*2v112		'A$>>+#{{668!<	49 $r#   c                     [         R                  " 5       U l        [         R                  R	                  U 5        U R                  R                  5         g r%   )r   Event_DummyPOP3Server__flagr   startwaitrB   s    r!   r   DummyPOP3Server.start   s4    oo't$r#   c                    SU l         U R                  R                  5          U R                   (       ag  [        R                  (       aR  U R
                     [        R                  " SSS9  S S S 5        U R                   (       a  [        R                  (       a  MR  [        R                  " SS9  g ! , (       d  f       NK= f! [        R                  " SS9  f = f)NTg?r/   )timeoutcount)
ignore_all)r   r   setr
   
socket_mapr   loop	close_allrB   s    r!   runDummyPOP3Server.run   s    	0++("5"5%%MM#Q7 & ++("5"5"5 $/ &% $/s#   2C B0+.C 0
B>:C Cc                 2    SU l         U R                  5         g NF)r   r2   rB   s    r!   stopDummyPOP3Server.stop   s    		r#   c                 0    U R                  U5      U l        g r%   )handlerr   )r   r    addrs      r!   handle_acceptedDummyPOP3Server.handle_accepted   s     $T 2r#   c                 $    U R                  5         g r%   )closerB   s    r!   handle_connectDummyPOP3Server.handle_connect   s    

r#   c                     g)Nr   rA   rB   s    r!   writableDummyPOP3Server.writable   s    r#   c                     e r%   rA   rB   s    r!   rC   DummyPOP3Server.handle_error   rE   r#   )__flagr   r   r   r   r   r   N)r   r   r   r   r   r   r   AF_INETr   r   r   r   r   r   r   r   rC   r   rA   r#   r!   r   r      s;    G#)>> 
%0
3 Kr#   r   c                      \ rS rSrS rS rS rS rS rS r	S r
S	 rS
 rS rS rS rS rS r\R&                  " SSS9S 5       r\R&                  " SSS9S 5       rS rS rS rS rS rS r\S 5       r\S 5       r\S 5       rSr g) TestPOP3Classi  c                 (    U R                  US5        g )N   +OK)assertStartsWithr   resps     r!   assertOKTestPOP3Class.assertOK  s    dF+r#   c                    [        [        [        45      U l        U R                  R	                  5         [
        R                  " U R                  R                  U R                  R                  [        R                  S9U l        g Nr   )r   HOSTPORTserverr   poplibPOP3r   r   test_supportLOOPBACK_TIMEOUTclientrB   s    r!   setUpTestPOP3Class.setUp  sT    %tTl3kk$++"2"2DKK4D4D*6*G*GIr#   c                 z    U R                   R                  5         U R                  R                  5         S U l        g r%   )r  r   r  r   rB   s    r!   tearDownTestPOP3Class.tearDown  s)    r#   c                 X    U R                  U R                  R                  5       S5        g )Ns(   +OK dummy pop3 server ready. <timestamp>)assertEqualr  
getwelcomerB   s    r!   test_getwelcomeTestPOP3Class.test_getwelcome  s#    //1D	Fr#   c                 n    U R                  [        R                  U R                  R                  S5        g )Nz	echo -err)assertRaisesr  error_protor  	_shortcmdrB   s    r!   test_exceptionsTestPOP3Class.test_exceptions  s$    &,,dkk.C.C[Qr#   c                     U R                  U R                  R                  S5      5        U R                  [        R
                  U R                  R                  S5        g )NrO   invalid)r   r  userr  r  r  rB   s    r!   	test_userTestPOP3Class.test_user  s?    dkk&&w/0&,,dkk.>.>	Jr#   c                     U R                  U R                  R                  S5      5        U R                  [        R
                  U R                  R                  S5        g )NrS   r  )r   r  pass_r  r  r  r  rB   s    r!   
test_pass_TestPOP3Class.test_pass_  s?    dkk''12&,,dkk.>.>	Jr#   c                   ^ U R                  U R                  R                  5       S5        U R                  R                  mU4S jnXR                  l        U R	                  [
        R                  5         U R                  R                  5         S S S 5        U4S jnX R                  l        U R	                  [
        R                  5         U R                  R                  5         S S S 5        U4S jnX0R                  l        U R                  R                  5       nU R                  US5        TU R                  l        g ! , (       d  f       N= f! , (       d  f       Ns= f)N)
   d   c                 "   > U S:X  a  gT" U 5      $ )NSTATr   rA   r:   original_shortcmds    r!   mock_shortcmd_invalid_format=TestPOP3Class.test_stat.<locals>.mock_shortcmd_invalid_format&  s    f}$S))r#   c                 "   > U S:X  a  gT" U 5      $ )Nr$  s   +OK abc defrA   r%  s    r!   mock_shortcmd_invalid_data;TestPOP3Class.test_stat.<locals>.mock_shortcmd_invalid_data/  s    f}%$S))r#   c                 "   > U S:X  a  gT" U 5      $ )Nr$  s   +OK 1 2 3 4 5rA   r%  s    r!   mock_shortcmd_extra_fields;TestPOP3Class.test_stat.<locals>.mock_shortcmd_extra_fields8  s    f}'$S))r#   )r/   r   )r  r  statr  r  r  r  )r   r'  r*  r-  resultr&  s        @r!   	test_statTestPOP3Class.test_stat"  s    ))+Y7 KK11	*
 !=v112KK 3	*
 !;v112KK 3	*
 !;!!#( 1- 32 32s   7EE
E
E%c                     U R                  U R                  R                  5       SS  / SQS45        U R                  U R                  R                  S5      S5        g )Nr/   )s   1 1s   2 2s   3 3s   4 4s   5 5   1s   OK 1 1)r  r  listassertEndsWithrB   s    r!   	test_listTestPOP3Class.test_listD  sR    ))+AB/B	 	DKK,,S19=r#   c                 j    S/ SQS4nU R                   R                  S5      nU R                  X!5        g )N   +OK 116 bytess   From: postmaster@python.orgs   Content-Type: text/plains   MIME-Version: 1.0s   Subject: Dummyr#   s   line1s   line2s   line3q   foo)r  retrr  )r   expectedr>  s      r!   	test_retrTestPOP3Class.test_retrJ  s:    $8 	
 kku%'r#   c                     U R                  [        R                  U R                  R                  S[        R
                  S-   S-  -  5        g )Nzecho +%sr!  a)r  r  r  r  r  _MAXLINErB   s    r!   test_too_long_lines!TestPOP3Class.test_too_long_linesS  s;    &,,dkk.C.C$2)=(DE	Gr#   c                 X    U R                  U R                  R                  S5      5        g Nr>  )r   r  delerB   s    r!   	test_deleTestPOP3Class.test_deleW      dkk&&u-.r#   c                 V    U R                  U R                  R                  5       5        g r%   )r   r  nooprB   s    r!   	test_noopTestPOP3Class.test_noopZ  s    dkk&&()r#   c                 X    U R                  U R                  R                  S5      5        g rI  )r   r  rpoprB   s    r!   	test_rpopTestPOP3Class.test_rpop]  rM  r#   md5T)opensslc                 Z    U R                  U R                  R                  SS5      5        g )Nr>  dummypassword)r   r  apoprB   s    r!   test_apop_normalTestPOP3Class.test_apop_normal`  s    dkk&&uo>?r#   c                     SSS-  -   n[         R                  " U R                  SU5         U R                  [        R
                  U R                  R                  SS5        S S S 5        g ! , (       d  f       g = f)Nr      <i@B welcomerD  kb)r  	swap_attrr  r  r  r  rZ  )r   evil_welcomes     r!   test_apop_REDOSTestPOP3Class.test_apop_REDOSd  sY     0##DKKLIf00$++2B2BCN JIIs   7A++
A9c                 j    S/ SQS4nU R                  U R                  R                  SS5      U5        g )Nr;  r<  r=  r/   )r  r  top)r   r@  s     r!   test_topTestPOP3Class.test_topo  s7    %4 	
 	A.9r#   c                 n    U R                   R                  5         U R                   R                  S5        g rI  )r  uidlrB   s    r!   	test_uidlTestPOP3Class.test_uidlw  s$    r#   c                     SU R                   R                  l        U R                  [        R
                  U R                  R                  5        g r   )r  r   r   r  r  r  r  utf8rB   s    r!   test_utf8_raises_if_unsupported-TestPOP3Class.test_utf8_raises_if_unsupported{  s4    */'&,,dkk.>.>?r#   c                     SU R                   R                  l        SnU R                  R	                  5       nU R                  X!5        g )NTs   +OK I know RFC6856)r  r   r   r  rn  r  )r   r@  r0  s      r!   	test_utf8TestPOP3Class.test_utf8  s9    *.'(!!#*r#   c                 |    U R                   R                  5       nU R                  SUR                  5       ;   5        g )Nr   r  capa
assertTruekeysr   rv  s     r!   	test_capaTestPOP3Class.test_capa  s,    {{!(DIIK78r#   c                     U R                   R                  5       nU R                  U5        U R                  U R                   R                  5        U R                  U R                   R
                  5        g r%   )r  quitrw  assertIsNonesockfiler   s     r!   	test_quitTestPOP3Class.test_quit  sP    {{!$++**+$++**+r#   c                 |    U R                   R                  5       nU R                  SUR                  5       ;   5        g ru   ru  ry  s     r!   test_stls_capaTestPOP3Class.test_stls_capa  s+    {{!$))+-.r#   c                 ^    SnU R                   R                  5       nU R                  X!5        g )N   +OK Begin TLS negotiation)r  stlsr  )r   r@  r   s      r!   	test_stlsTestPOP3Class.test_stls  s'    /{{!(r#   c                 x   Sn[         R                  " [         R                  5      nUR                  [        5        U R                  UR                  [         R                  5        U R                  UR                  S5        U R                  [         R                  5         U R                  R                  US9nS S S 5        [        R                  " SU R                  R                   ["        R$                  S9U l        U R                  R                  US9nU R                  X15        g ! , (       d  f       Nv= f)Nr  Tr   	localhostr   )r   r   PROTOCOL_TLS_CLIENTload_verify_locationsCAFILEr  verify_modeCERT_REQUIREDcheck_hostnamer  CertificateErrorr  r  r  r  r  r   r  r  )r   r@  ctxr   s       r!   test_stls_contextTestPOP3Class.test_stls_context  s    /nnS445!!&)#*;*;<++T2s334;;##C#0D 5kk+t{{/?/?*6*G*GI{{,( 54s   !D++
D9r  r  N)!r   r   r   r   r   r  r
  r  r  r  r  r1  r8  rA  rF  rK  rP  rT  r   requires_hashdigestr[  rc  rg  rk  ro  rr  rz  r  requires_sslr  r  r  r   rA   r#   r!   r   r     s    ,IFRKK 2D>(G/*/ ''t<@ =@ ''t<O =O: @+9, / / ) )
 ) )r#   r   )SSLConnectionc                       \ rS rSrS rSrg)DummyPOP3_SSLHandleri  c                     [         R                  R                  X5        U R                  5         U R	                  S5        / U l        U R                  S5        SU l        SU l        g )Nr   r   TF)	r	   r   r   secure_connectionr   r   r   r   r   r   s     r!   r   DummyPOP3_SSLHandler.__init__  sS    ((4""$(DNII@A"DO %Dr#   r   N)r   r   r   r   r   r   rA   r#   r!   r  r    s    	&r#   r  c                   6    \ rS rSrS rS rS rS r\rS r	Sr
g)	TestPOP3_SSLClassi  c                    [        [        [        45      U l        [        U R                  l        U R                  R                  5         [        R                  " U R                  R                  U R                  R                  5      U l        g r%   )r   r   r   r  r  r   r   r  r   r   r   r  rB   s    r!   r  TestPOP3_SSLClass.setUp  sT    %tTl32oodkk&6&68H8HIr#   c                 D    U R                  S[        R                  5        g )Nr   )assertInr  __all__rB   s    r!   test__all__TestPOP3_SSLClass.test__all__  s    j&..1r#   c                 Z   [         R                  " [         R                  5      nSUl        [         R                  Ul        U R                  R                  5         [        R                  " U R                  R                  U R                  R                  US9U l        U R                  U R                  R                  [         R                  5        U R!                  U R                  R                  R"                  U5        U R%                  U R                  R'                  5       S5        g )NFr  r   )r   r   r  r  	CERT_NONEr  r  r}  r  r   r  r   r   assertIsInstancer  	SSLSocketassertIsr   r   rO  )r   r  s     r!   test_contextTestPOP3_SSLClass.test_context  s    nnS445"--oodkk&6&68H8H035dkk..>dkk&&..4dkk..0&9r#   c                 l    U R                  [        R                  U R                  R                  5        g r%   r  r  r  r  r  rB   s    r!   r  TestPOP3_SSLClass.test_stls  "    &,,dkk.>.>?r#   c                 |    U R                   R                  5       nU R                  SUR                  5       ;   5        g ru   r  rv  assertFalserx  ry  s     r!   r   TestPOP3_SSLClass.test_stls_capa  s-    {{!499;./r#   r  N)r   r   r   r   r  r  r  r  r  r  r   rA   r#   r!   r  r    s%    J2
:@ "0r#   r  c                   0    \ rS rSrS rS rS r\rS rSr	g)TestPOP3_TLSClassi  c                 B   [        [        [        45      U l        U R                  R	                  5         [
        R                  " U R                  R                  U R                  R                  [        R                  S9U l        U R                  R                  5         g r   )r   r   r   r  r   r  r  r   r   r  r  r  r  rB   s    r!   r  TestPOP3_TLSClass.setUp  sd    %tTl3kk$++"2"2DKK4D4D*6*G*GIr#   c                 @   U R                   R                  b2  U R                   R                  b   U R                   R                  5         U R                  R                  5         S U l        g ! [        R
                   a    U R                   R                  5          NRf = fr%   )	r  r  r  r}  r  r  r   r  r   rB   s    r!   r
  TestPOP3_TLSClass.tearDown  sx    ;;'DKK,<,<,H$  " 	 %% $ !!#	$s   A, ,.BBc                 l    U R                  [        R                  U R                  R                  5        g r%   r  rB   s    r!   r  TestPOP3_TLSClass.test_stls  r  r#   c                 |    U R                   R                  5       nU R                  SUR                  5       ;   5        g )Ns   STLSr  ry  s     r!   r   TestPOP3_TLSClass.test_stls_capa  s-    {{!DIIK/0r#   r  N)
r   r   r   r   r  r
  r  r  r  r   rA   r#   r!   r  r    s    @ "1r#   r  c                   8    \ rS rSrS rS rS rS rS rS r	Sr
g	)
TestTimeoutsi  c                 &   [         R                  " 5       U l        [        R                  " [        R                  [        R
                  5      U l        U R                  R                  S5        [        R                  " U R                  5      U l
        [         R                  " U R                  U R                  U R                  4S9U l        SU R                  l        U R                  R                  5         U R                  R!                  5         g )N<   )targetr   T)r   r   evtr   r   r   r  
settimeoutr   	bind_portr   r   r  threadr   r   r   rB   s    r!   r  TestTimeouts.setUp  s    ??$MM&..&2D2DE			R !++DII6	&&dkk499@UV!r#   c                 F    U R                   R                  5         S U l         g r%   )r  r2   rB   s    r!   r
  TestTimeouts.tearDown	  s    r#   c                    UR                  5         UR                  5          UR                  5       u  p4UR                  S5        UR	                  5         UR	                  5         g ! [
         a     Nf = f! UR	                  5         f = f)Ns   + Hola mundo
)r   r   acceptsendr   TimeoutError)r   r  servr    r   s        r!   r  TestTimeouts.server  sg    		JDII'(JJL JJL  		 JJLs#   3A& &
A30A6 2A33A6 6Bc                    U R                  [        R                  " 5       5        [        R                  " [        R
                  5         [        R                  " [        U R                  5      n[        R                  " S 5        U R                  UR                  R                  5       [        R
                  5        UR                  5         g ! [        R                  " S 5        f = fr%   )r~  r   getdefaulttimeoutsetdefaulttimeoutr  r  r  r  r   r   r  r  
gettimeoutr   r   pops     r!   testTimeoutDefaultTestTimeouts.testTimeoutDefault  s    &2245  !>!>?	+++dDII.C$$T*,,.0M0MN		 $$T*s   
%C C&c                    U R                  [        R                  " 5       5        [        R                  " S5         [        R
                  " [        U R                  S S9n[        R                  " S 5        U R                  UR                  R                  5       5        UR                  5         g ! [        R                  " S 5        f = f)N   r   )r~  r   r  r  r  r  r   r   r  r  r   r  s     r!   testTimeoutNoneTestTimeouts.testTimeoutNone$  s    &2245  $	+++dDIIt<C$$T*#((--/0		 $$T*s   $B0 0Cc                    [         R                  " [        U R                  [        R
                  S9nU R                  UR                  R                  5       [        R
                  5        UR                  5         U R                  [        5         [         R                  " [        U R                  SS9  S S S 5        g ! , (       d  f       g = f)Nr   r   )r  r  r   r   r  r  r  r  r  r   r  
ValueErrorr  s     r!   testTimeoutValueTestTimeouts.testTimeoutValue.  sx    kk$		<3P3PQ,,.0M0MN		z*KKdii3 +**s   %B>>
C)r  r   r  r  N)r   r   r   r   r  r
  r  r  r  r  r   rA   r#   r!   r  r    s     

4r#   r  c                  x    [         R                  " 5       n [        R                  " [         R                  /U Q76   g r%   )r   threading_setupunittestaddModuleCleanupthreading_cleanup)thread_infos    r!   setUpModuler  6  s*    "224K.@@O;Or#   __main__)2r  r   osr   r   r  r   r   testr   r  test.supportr   r   r   r	   r
   test.support.testcaser   requires_working_socketr   r   ry   r7   r   pathr2   dirname__file__curdirr   r  r  rZ   r_   r   r   r   r   r   r   test.test_ftplibr  r  r  r  r  r  r   mainrA   r#   r!   <module>r     s     	    ) ( ' & ) ! ! 1  $ $D 1
6:Lww||BGGOOH5BJP^_HWW\\"''//(3@ryy*n]F,(;< 8			[(x** [(z0h))9+;+; 0fc)Ho c)L .	&}.> 	& 0 0 0D 1 1 1B648 64rP
 zMMO r#   