
    dafd3                     f   d dl Z d dlZd dlZd dlZd dlmZ d dlmZmZ d dl	Z	 ej                  d        ej                  d      Zej                  Zd Z G d d	e	j                        Z G d
 de      Z G d dej&                        Z G d dej*                        Zej.                  d        ZdefdZ G d de	j                        Z G d de      Z G d de      ZeZ G d de	j                        Z G d de	j                        Z G d de      Z e!dk(  r e	jD                          yy)     N)support)socket_helperwarnings_helperT)module	telnetlibc                     |j                          | j                          	 |j                         \  }}|j                          |j                          y # t        $ r Y w xY w# |j                          w xY wN)listensetacceptcloseTimeoutError)evtservconnaddrs       ./root/Python-3.12.4/Lib/test/test_telnetlib.pyserverr      s\    KKMGGI[[]
d

 	

   	

s#   #A 	A"A% !A""A% %A7c                   B    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zy
)GeneralTestsc                    t        j                         | _        t        j                  t        j                  t        j
                        | _        | j                  j                  d       t        j                  | j                        | _
        t        j                  t        | j                  | j                  f      | _        d| j                  _        | j                  j                          | j                  j!                          y )N<   )targetargsT)	threadingEventr   socketAF_INETSOCK_STREAMsock
settimeoutr   	bind_portportThreadr   threaddaemonstartwaitselfs    r   setUpzGeneralTests.setUp   s    ??$MM&..&2D2DE			R !++DII6	&&fDHHTYY;OP!    c                 <    | j                   j                          | ` y r	   )r%   joinr)   s    r   tearDownzGeneralTests.tearDown'   s    Kr,   c                     t         j                  t        | j                        }|j                  j                          y r	   )r   TelnetHOSTr#   r    r   r*   telnets     r   	testBasiczGeneralTests.testBasic+   s(    !!$		2r,   c                     t         j                  t        | j                        5 }| j	                  |j                                d d d        | j                  j                                y # 1 sw Y   )xY wr	   )r   r1   r2   r#   assertIsNotNone
get_socketassertIsNone)r*   tns     r   testContextManagerzGeneralTests.testContextManager0   sU    dDII. 	2"  1	2"--/*	2 	2s    A--A6c                    | j                  t        j                         d u        t        j                  d       	 t        j                  t        | j                        }t        j                  d        | j                  |j                  j                         d       |j                  j                          y # t        j                  d        w xY w)N   )
assertTruer   getdefaulttimeoutsetdefaulttimeoutr   r1   r2   r#   assertEqualr    
gettimeoutr   r3   s     r   testTimeoutDefaultzGeneralTests.testTimeoutDefault5   s    002d:;  $	+%%dDII6F$$T*//126 $$T*s   $B: :Cc                    | j                  t        j                         d u        t        j                  d       	 t        j                  t        | j                  d       }t        j                  d        | j                  |j                  j                         d u        |j                  j                          y # t        j                  d        w xY wNr=   )timeout)r>   r   r?   r@   r   r1   r2   r#   r    rB   r   r3   s     r   testTimeoutNonezGeneralTests.testTimeoutNone?   s    002d:;  $	+%%dDIIt%DF$$T*..0D89 $$T*s   &B= =Cc                     t         j                  t        | j                  d      }| j	                  |j
                  j                         d       |j
                  j                          y rE   )r   r1   r2   r#   rA   r    rB   r   r3   s     r   testTimeoutValuezGeneralTests.testTimeoutValueJ   sJ    !!$		2!>//126r,   c                     t         j                         }|j                  t        | j                  d       | j                  |j                  j                         d       |j                  j                          y rE   )	r   r1   openr2   r#   rA   r    rB   r   r3   s     r   testTimeoutOpenzGeneralTests.testTimeoutOpenO   sS    !!#D$))R0//126r,   c                 8   t         j                  t        | j                  d      }|j                  }| j                  |j                         |       | j                  |j                         |j                                |j                  j                          y rE   )	r   r1   r2   r#   r    rA   r8   filenor   )r*   r4   t_socks      r   testGetterszGeneralTests.testGettersU   sk    !!$		2!>**,f5&--/:r,   N)__name__
__module____qualname__r+   r/   r5   r;   rC   rG   rI   rL   rP    r,   r   r   r      s/    
+
	
r,   r   c                   $    e Zd ZdZddZd Zd Zy)
SocketStubz* a socket proxy that re-defines sendall() c                 @    t        |      | _        g | _        d| _        y NF)listreadswritesblock)r*   rZ   s     r   __init__zSocketStub.__init___   s    %[

r,   c                 :    | j                   j                  |       y r	   )r[   append)r*   datas     r   sendallzSocketStub.sendallc   s    4 r,   c                    d}| j                   rGt        |      |k  r9|| j                   j                  d      z  }| j                   rt        |      |k  r9t        |      |kD  r$| j                   j                  d||d         |d | }|S )Nr,   r   )rZ   lenpopinsert)r*   sizeouts      r   recvzSocketStub.recve   sw    jjSX_4::>>!$$C jjSX_s8d?JJaTU,et*C
r,   N)rT   )rQ   rR   rS   __doc__r]   ra   rh   rT   r,   r   rV   rV   ]   s    4!r,   rV   c                   $    e Zd Zd Zd Zd Zd Zy)TelnetAlikec                     t               r	   )NotImplementedErrorr)   s    r   rN   zTelnetAlike.filenoo   s    !##r,   c                      y r	   rT   r)   s    r   r   zTelnetAlike.closeq   s    Tr,   c                 0    | j                   j                   S r	   )r    r\   r)   s    r   
sock_availzTelnetAlike.sock_availr   s    IIOO#$r,   c                     t        j                         5 }t        j                  j                  | |g|  d d d        | xj
                  j                         z  c_        y # 1 sw Y   -xY wr	   )r   captured_stdoutr   r1   msg	_messagesgetvalue)r*   rs   r   rg   s       r   rs   zTelnetAlike.msgt   sW    $$& 	3#  s2T2	3#,,.(	3 	3s   "A##A,N)rQ   rR   rS   rN   r   rp   rs   rT   r,   r   rk   rk   n   s    $%r,   rk   c                   >    e Zd Zd Zed        ZddZd ZddZd Z	y)	MockSelectorc                     i | _         y r	   keysr)   s    r   r]   zMockSelector.__init__|   s	    	r,   c                      y)NgMbP?rT   r)   s    r   
resolutionzMockSelector.resolution   s    r,   Nc                 T    t        j                  |d||      }|| j                  |<   |S )Nr   )	selectorsSelectorKeyrz   )r*   fileobjeventsr`   keys        r   registerzMockSelector.register   s+    ##GQ= 		'
r,   c                 8    | j                   j                  |      S r	   )rz   rd   )r*   r   s     r   
unregisterzMockSelector.unregister   s    yy}}W%%r,   c                     d}| j                   D ]*  }t        |t              s|j                  j                  } n |rg S | j                   j                         D cg c]  }||j                  f c}S c c}w rX   )rz   
isinstancerk   r    r\   valuesr   )r*   rF   r\   r   r   s        r   selectzMockSelector.select   sj    yy 	G';/**	 I151A1A1CD#S#**%DDDs   A4c                     | j                   S r	   ry   r)   s    r   get_mapzMockSelector.get_map   s    yyr,   r	   )
rQ   rR   rS   r]   propertyr|   r   r   r   r   rT   r,   r   rw   rw   z   s0      
&	Er,   rw   c              #       K    fd}	 t         j                  }|t         _        d  |t         _        y # t         _        w xY ww)Nc                      t              S r	   )rV   )ignoredrZ   s    r   new_connztest_socket.<locals>.new_conn   s    %  r,   )r   create_connection)rZ   r   old_conns   `  r   test_socketr      s?     !,++#+ 
#+ 
 $, s   A5 AAArT   c                     | D ]  }t        |      t        u rJ |        t        |       5   |dd      }d|_        ddd       |S # 1 sw Y   S xY w)za return a telnetlib.Telnet object that uses a SocketStub with
        reads queued up to be read dummyr    N)typebytesr   rt   )rZ   clsxr4   s       r   test_telnetr      sc      #Aw%""#	U	 Wa M Ms   AAc                       e Zd Zd Zd Zy)ExpectAndReadTestCasec                 L    t         j                  | _        t        t         _        y r	   )r   _TelnetSelectorold_selectorrw   r)   s    r   r+   zExpectAndReadTestCase.setUp   s    %55$0	!r,   c                 .    | j                   t        _        y r	   )r   r   r   r)   s    r   r/   zExpectAndReadTestCase.tearDown   s    $($5$5	!r,   N)rQ   rR   rS   r+   r/   rT   r,   r   r   r      s    16r,   r   c                   6    e Zd Zd Zd Zd Zd Zd Zd Zd Z	y)		ReadTestsc                 L   dg}t        |      }|j                  d      }| j                  |d|j                  |j                  |j
                  j                  f       g d}dj                  |dd       }t        |      }|j                  d      }| j                  ||       y)	zc
        read_until(expected, timeout=None)
        test the blocking version of read_util
        s   xxxmatchyyy   matchs   xxxmatch)rs   )s2   xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxr   s2   yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyr,   N)r   
read_untilrA   cookedqrawqr    rZ   r.   )r*   wantr4   r`   rZ   expects         r   test_read_untilzReadTests.test_read_until   s    
 T"  *{fkkN_N_0`a0%*%U#  *v&r,   c                     g d}dj                  |      }t        |      }|j                         }| j                  ||       y)zJ
        read_all()
          Read all data until EOF; may block.
        )  xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxs  yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyys  zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzr,   N)r.   r   read_allrA   )r*   rZ   r   r4   r`   s        r   test_read_allzReadTests.test_read_all   s?    
 5%U# v&r,   c                     t        dg      }|j                         }| j                  t        |      dk\         t               }|j                         }| j	                  d|       y)zQ
        read_some()
          Read at least one byte or EOF; may block.
        r      r,   N)r   	read_somer>   rc   rA   )r*   r4   r`   s      r   test_read_somezReadTests.test_read_some   sW     j\*!D	Q'!d#r,   c                 
   d}t        |g      }t        ||      }d|j                  _        | j	                  d |              d|j                  _        d}	 	 | |       z  }# t
        $ r Y nw xY w| j	                  ||       y)z
        read_*_eager()
          Read all data available already queued or on the socket,
          without blocking.
        d   xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxTr,   FN)r   getattrr    r\   rA   EOFError)r*   	func_namer   r4   funcr`   s         r   _read_eagerzReadTests._read_eager   s     dV$vy) df%!   t$s   
A# #	A/.A/c                 H    | j                  d       | j                  d       y )N
read_eagerread_very_eager)r   r)   s    r   test_read_eagerzReadTests.test_read_eager   s!     	&*+r,   c                 ^   d}t        |g      }| j                  d|j                                |j                  j                  r'|j                          |j                  j                  r'|j                         }| j                  ||       | j                  t        |j                         y Nr   r,   )r   rA   read_very_lazyr    rZ   	fill_rawqassertRaisesr   )r*   r   r4   r`   s       r   r   zReadTests.read_very_lazy   s    dV$f3356kk kk$$&t$(F$9$9:r,   c                 :   d}t        |g      }| j                  d|j                                d}	 	 |j                         }||z  }|s|j                          | j                  |j                  |             I# t        $ r Y nw xY w| j                  ||       y r   )r   rA   	read_lazyr   r   r>   
startswith)r*   r   r4   r`   	read_datas        r   test_read_lazyzReadTests.test_read_lazy	  s    dV$f..01",,.		! $$& OODOOD12    	t$s   'A; ;	BBN)
rQ   rR   rS   r   r   r   r   r   r   r   rT   r,   r   r   r      s%    '"
$%(,;%r,   r   c                       e Zd ZddZd Zy)nego_collectorNc                 .    d| _         || _        d| _        y )Nr,   )seen	sb_gettersb_seen)r*   r   s     r   r]   znego_collector.__init__  s    	"r,   c                     | xj                   ||z   z  c_         |t        j                  k(  r3| j                  r&| j                         }| xj                  |z  c_        y y y r	   )r   tlSEr   r   )r*   r    cmdoptsb_datas        r   do_negoznego_collector.do_nego  sF    		S3Y	"%%<DNNnn&GLLG#L +<r,   r	   )rQ   rR   rS   r]   r   rT   r,   r   r   r     s    
$r,   r   c                       e Zd ZdZd Zy)
WriteTestszKThe only thing that write does is replace each tl.IAC for
    tl.IAC+tl.IACc                    ddt         j                  z   dz   dt         j                  z   t         j                  z   dz   t         j                  z   t         j                  dg}|D ]  }t               }|j                  |       dj	                  |j
                  j                        }| j                  |j                  t         j                  t         j                  t         j                  z         |        y )Ns   data sample without IACs   data sample withs    one IACs   a fews    iacsr,   )	r   IACr   writer.   r    r[   rA   replace)r*   data_sampler`   r4   writtens        r   
test_writezWriteTests.test_write+  s    1*RVV3kA"&&(2661H<rvvEvv	
   	JD ]FLLhhv{{112GT\\"&&?I		Jr,   N)rQ   rR   rS   ri   r   rT   r,   r   r   r   '  s    
Jr,   r   c                       e Zd Zej                  ej
                  ej                  ej                  ej                  ej                  ej                  ej                  gZd Zd Zd Zd Zd Zd Zy)OptionTestsc                    t        |      }t        dj                  |            }t               }|j	                  |j
                         |j                         }|j                  }| j                  t        |      dkD         | j                  |dd | j                         | j                  |dd t        j                         | j                  |t        ||z                d|_        y)z helper for testing IAC + cmd r,   r   Nr      )r   rc   r.   r   set_option_negotiation_callbackr   r   r   r>   assertIncmdsrA   r   NOOPTr   )r*   r`   r4   data_lennegotxtr   s          r   _test_commandzOptionTests._test_command;  s    T"sxx~&..t||<ooiiC1%c"1gtyy)Qq288,3sSy>2r,   c                 r   | j                   D ]i  }| j                  t        j                  |g       | j                  dt        j                  |dg       | j                  dt        j                  |dg       k | j                  | j                   D cg c]  }t        j                  |z    c}       y c c}w )Nr   sd   yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
   xxxxxxxxxx
   yyyyyyyyyy)r   r   r   r   )r*   r   s     r   test_IAC_commandszOptionTests.test_IAC_commandsI  s    99 	BC}-
BFFCBC	2663@A	B
 	dii@cBFFSL@A@s   B4c                    t         j                  t         j                  z   t         j                  z   t         j                  z   t         j                  t         j                  z   t         j                  z   t         j                  z   t         j                  z   t         j                  z   t         j                  t         j                  z   t         j                  z   t         j                  z   dz   t         j                  z   t         j                  z   t         j                  t         j                  z   dz   t         j                  z   t         j                  z   t         j                  z   t         j                  z   t         j                  t         j                  z   dz   t         j                  z   t         j                  z   dz   t         j                  z   t         j                  z   g}t	        |      }t        |j                        }|j                  |j                         |j                         }| j                  |d       t         j                  t         j                  z   dz   t         j                  z   dz   t         j                  z   dz   }| j                  |j                  |       | j                  d|j                                d |_        y )Ns   aas   bbs   ccs   ddr,   s   aabb)r   r   SBr   r   r   read_sb_datar   r   r   rA   r   r   )r*   sendr4   r   r   want_sb_datas         r   test_SB_commandszOptionTests.test_SB_commandsQ  s   '"%%/'"&&02669BEEA'"&&058266ABEEI&/"&&8266ABEEI&/"&&85@266IBEEQ	 T"f112..t||<ooc"vv02669EABFFJUR|4f1134r,   c           	      d   dt         j                  t        dg      z   dft         j                  t         j                  z   t        dg      z   dft         j                  t         j                  z   t        dg      z   dft         j                  t         j
                  z   t        dg      z   dft         j                  t         j                  z   t        dg      z   dfg}|D ]N  \  }}t        |g      }|j                  d       |j                         }| j                  ||j                         P y )	N)   az: recv b''
X   z: IAC 88 not recognized
r   z: IAC DO 1
z: IAC DONT 1
z: IAC WILL 1
z: IAC WONT 1
)r   r   r   DODONTWILLWONTr   set_debuglevelr   r   rt   )r*   given_a_expect_babr4   r   s         r   test_debuglevel_readsz!OptionTests.test_debuglevel_readsc  s     #VVeRDk!#>?VVbee^eQCj(.9VVbggqc
*,<=VVbggqc
*,<=VVbggqc
*,<=	 % 	/DAq !%F!!!$//#CMM!V--.		/
 	r,   c                     t               }|j                  d       |j                  d       d}| j                  ||j                         y )Nr   s   xxxzsend b'xxx'
)r   r   r   r   rt   )r*   r4   expecteds      r   test_debuglevel_writez!OptionTests.test_debuglevel_writev  s<    a V"h 0 01r,   c                     t        g       5  t        dd      }d|_        d d d        j                  d       |j	                  d       | j                  |j                  d       y # 1 sw Y   HxY w)Nr   0r   r   testz0.*test)r   rk   rt   r   rs   assertRegexr3   s     r   test_debug_accepts_str_portz'OptionTests.test_debug_accepts_str_port}  sd    _ 	" #.F!F	" 	a 

6)):6	" 	"s   A''A0N)rQ   rR   rS   r   AOAYTBRKECELGAIPNOPr   r   r   r   r  r  r	  rT   r,   r   r   r   7  sW    EE266266255"%%rvvFDB$&27r,   r   c                       e Zd Zd Zy)ExpectTestsc                     g d}t        |      }|j                  dg      \  }}}| j                  |dj                  |dd              y)z
        expect(expected, [timeout])
          Read until the expected string has been seen, or a timeout is
          hit (default is no timeout); may block.
        )r   r   r   r   r,   Nr   )r   r   rA   r.   )r*   r   r4   _r`   s        r   test_expectzExpectTests.test_expect  sH     0T"]]H:.
1TsxxSb	23r,   N)rQ   rR   rS   r  rT   r,   r   r  r    s    	4r,   r  __main__)#r   r~   r   
contextlibr  r   test.supportr   r   unittestrequires_working_socketimport_deprecatedr   r2   r   TestCaser   objectrV   r1   rk   BaseSelectorrw   contextmanagerr   r   r   r   r   r   r   r   r  rQ   mainrT   r,   r   <module>r"     s=        7    t ,-O--k:		@8$$ @D "
)"" 
9)) @ 	 	 k 6H-- 6`%% `%D
$V 
$ J"" J M7(## M7`
4' 
4 zHMMO r,   