o
    HXīhś2  ć                   @   s:  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 d dlmZ d dl	Z	ej
Z
dd ZG dd de	jZG dd	 d	eZG d
d dejZG dd dejZejdd ZdefddZG dd de	jZG dd deZG dd deZeZG dd de	jZG dd de	jZG dd deZedkre	 ”  dS dS ) é    N)Śsupport)Śsocket_helperc                 C   sd   |  ”  |  ”  z$z| ” \}}| ”  W n	 ty   Y nw W | ”  d S W | ”  d S | ”  w ©N)ŚlistenŚsetŚacceptŚcloseŚTimeoutError)ŚevtZservŚconnŚaddr© r   ś=/opt/python-3.10.19/usr/lib/python3.10/test/test_telnetlib.pyŚserver   s   ’’žr   c                   @   sT   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd ZdS )ŚGeneralTestsc                 C   sn   t  ” | _t tjtj”| _| j d” t 	| j”| _
t jt| j| jfd| _d| j_| j ”  | j ”  d S )Né<   )ŚtargetŚargsT)Ś	threadingŚEventr
   ŚsocketŚAF_INETŚSOCK_STREAMŚsockŚ
settimeoutr   Z	bind_portŚportŚThreadr   ŚthreadŚdaemonŚstartŚwait©Śselfr   r   r   ŚsetUp   s   

zGeneralTests.setUpc                 C   s   | j  ”  | ` d S r   )r   Śjoinr!   r   r   r   ŚtearDown$   s   
zGeneralTests.tearDownc                 C   s   t  t| j”}|j ”  d S r   )Ś	telnetlibŚTelnetŚHOSTr   r   r   ©r"   Śtelnetr   r   r   Ś	testBasic(   s   zGeneralTests.testBasicc                 C   sN   t  t| j”}|  | ” ” W d    n1 sw   Y  |  | ” ” d S r   )r&   r'   r(   r   ZassertIsNotNoneŚ
get_socketZassertIsNone)r"   Śtnr   r   r   ŚtestContextManager-   s   ’zGeneralTests.testContextManagerc              	   C   sf   |   t ” d u ” t d” zt t| j”}W t d ” nt d ” w |  |j	 
” d” |j	 ”  d S )Né   )Ś
assertTruer   ŚgetdefaulttimeoutŚsetdefaulttimeoutr&   r'   r(   r   ŚassertEqualr   Ś
gettimeoutr   r)   r   r   r   ŚtestTimeoutDefault2   s   
zGeneralTests.testTimeoutDefaultc              	   C   sl   |   t ” d u ” t d” ztjt| jd d}W t d ” nt d ” w |   |j 	” d u ” |j 
”  d S ©Nr/   )Śtimeout)r0   r   r1   r2   r&   r'   r(   r   r   r4   r   r)   r   r   r   ŚtestTimeoutNone<   s   
zGeneralTests.testTimeoutNonec                 C   s2   t jt| jdd}|  |j ” d” |j ”  d S r6   )r&   r'   r(   r   r3   r   r4   r   r)   r   r   r   ŚtestTimeoutValueG   s   zGeneralTests.testTimeoutValuec                 C   s:   t  ” }|jt| jdd |  |j ” d” |j ”  d S r6   )	r&   r'   Śopenr(   r   r3   r   r4   r   r)   r   r   r   ŚtestTimeoutOpenL   s   zGeneralTests.testTimeoutOpenc                 C   sJ   t jt| jdd}|j}|  | ” |” |  | ” | ” ” |j ”  d S r6   )	r&   r'   r(   r   r   r3   r,   Śfilenor   )r"   r*   Zt_sockr   r   r   ŚtestGettersR   s
   zGeneralTests.testGettersN)Ś__name__Ś
__module__Ś__qualname__r#   r%   r+   r.   r5   r8   r9   r;   r=   r   r   r   r   r      s    

r   c                   @   s*   e Zd ZdZd
ddZdd Zdd Zd	S )Ś
SocketStubz* a socket proxy that re-defines sendall() r   c                 C   s   t || _g | _d| _d S )NF)ŚlistŚreadsŚwritesŚblock)r"   rC   r   r   r   Ś__init__\   s   

zSocketStub.__init__c                 C   s   | j  |” d S r   )rD   Śappend)r"   Śdatar   r   r   Śsendall`   s   zSocketStub.sendallc                 C   sj   d}| j rt||k r|| j  d”7 }| j rt||k st||kr3| j  d||d  ” |d | }|S )Nó    r   )rC   ŚlenŚpopŚinsert)r"   ŚsizeŚoutr   r   r   Śrecvb   s   ’zSocketStub.recvN)r   )r>   r?   r@   Ś__doc__rF   rI   rP   r   r   r   r   rA   Z   s
    
rA   c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
ŚTelnetAlikec                 C   s   t  r   )ŚNotImplementedErrorr!   r   r   r   r<   l   ó   zTelnetAlike.filenoc                 C   s   d S r   r   r!   r   r   r   r   n   s    zTelnetAlike.closec                 C   s
   | j j S r   )r   rE   r!   r   r   r   Ś
sock_availo   ó   
zTelnetAlike.sock_availc                 G   sT   t  ” }tjj| |g|¢R   W d    n1 sw   Y  |  j| ” 7  _d S r   )r   Zcaptured_stdoutr&   r'   ŚmsgŚ	_messagesŚgetvalue)r"   rW   r   rO   r   r   r   rW   q   s
   
’zTelnetAlike.msgN)r>   r?   r@   r<   r   rU   rW   r   r   r   r   rR   k   s
    rR   c                   @   sD   e Zd Zdd Zedd ZdddZdd	 Zdd
dZdd Z	dS )ŚMockSelectorc                 C   s
   i | _ d S r   ©Śkeysr!   r   r   r   rF   y   rV   zMockSelector.__init__c                 C   s   dS )Ngü©ńŅMbP?r   r!   r   r   r   Ś
resolution|   s   zMockSelector.resolutionNc                 C   s   t  |d||”}|| j|< |S )Nr   )Ś	selectorsŚSelectorKeyr\   )r"   ŚfileobjŚeventsrH   Śkeyr   r   r   Śregister   s   
zMockSelector.registerc                 C   s   | j  |”S r   )r\   rL   )r"   r`   r   r   r   Ś
unregister   ó   zMockSelector.unregisterc                 C   sB   d}| j D ]}t|tr|jj} nq|rg S dd | j  ” D S )NFc                 S   s   g | ]}||j fqS r   )ra   )Ś.0rb   r   r   r   Ś
<listcomp>   ó    z'MockSelector.select.<locals>.<listcomp>)r\   Ś
isinstancerR   r   rE   Śvalues)r"   r7   rE   r`   r   r   r   Śselect   s   

žzMockSelector.selectc                 C   s   | j S r   r[   r!   r   r   r   Śget_map   rT   zMockSelector.get_mapr   )
r>   r?   r@   rF   Śpropertyr]   rc   rd   rk   rl   r   r   r   r   rZ   w   s    


rZ   c                 #   s6     fdd}zt j}|t _d V  W |t _d S |t _w )Nc                     s   t  S r   )rA   )Zignored©rC   r   r   Śnew_conn   s   ztest_socket.<locals>.new_conn)r   Ścreate_connection)rC   ro   Zold_connr   rn   r   Śtest_socket   s   ’rq   r   c                 C   s\   | D ]}t |tu sJ |qt|  |dd}d|_W d   |S 1 s'w   Y  |S )za return a telnetlib.Telnet object that uses a SocketStub with
        reads queued up to be read Śdummyr   Ś N)ŚtypeŚbytesrq   rX   )rC   ŚclsŚxr*   r   r   r   Śtest_telnet£   s   


žżrx   c                   @   s   e Zd Zdd Zdd ZdS )ŚExpectAndReadTestCasec                 C   s   t j| _tt _d S r   )r&   Ś_TelnetSelectorŚold_selectorrZ   r!   r   r   r   r#   ®   s   
zExpectAndReadTestCase.setUpc                 C   s   | j t_d S r   )r{   r&   rz   r!   r   r   r   r%   ±   re   zExpectAndReadTestCase.tearDownN)r>   r?   r@   r#   r%   r   r   r   r   ry   ­   s    ry   c                   @   sD   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dS )Ś	ReadTestsc                 C   sr   dg}t |}| d”}| j|d|j|j|jjfd g d¢}d |dd ”}t |}| d”}|  ||” dS )	zc
        read_until(expected, timeout=None)
        test the blocking version of read_util
        s   xxxmatchyyyó   matchs   xxxmatch)rW   )s2   xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxr}   s2   yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyrJ   Né’’’’)rx   Z
read_untilr3   ZcookedqZrawqr   rC   r$   )r"   Śwantr*   rH   rC   Śexpectr   r   r   Śtest_read_untilµ   s   

zReadTests.test_read_untilc                 C   s2   g d¢}d  |”}t|}| ” }|  ||” dS )zJ
        read_all()
          Read all data until EOF; may block.
        )óō  xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxsō  yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyysō  zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzrJ   N)r$   rx   Śread_allr3   )r"   rC   r   r*   rH   r   r   r   Śtest_read_allĘ   s   
zReadTests.test_read_allc                 C   sB   t dg}| ” }|  t|dk” t  }| ” }|  d|” dS )zQ
        read_some()
          Read at least one byte or EOF; may block.
        r   é   rJ   N)rx   Z	read_somer0   rK   r3   )r"   r*   rH   r   r   r   Śtest_read_someŅ   s   
zReadTests.test_read_somec                 C   sp   d}t |g}t||}d|j_|  d| ” d|j_d}	 z|| 7 }W n	 ty.   Y nw q|  ||” dS )z
        read_*_eager()
          Read all data available already queued or on the socket,
          without blocking.
        ód   xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxTrJ   FN)rx   Śgetattrr   rE   r3   ŚEOFError)r"   Ś	func_namer   r*   ŚfuncrH   r   r   r   Ś_read_eagerą   s   

’żzReadTests._read_eagerc                 C   s   |   d” |   d” d S )NZ
read_eagerZread_very_eager)r   r!   r   r   r   Śtest_read_eagerō   s   
zReadTests.test_read_eagerc                 C   s\   d}t |g}|  d| ” ” |jjr| ”  |jjs| ” }|  ||” |  t|j” d S ©Nr   rJ   )rx   r3   Śread_very_lazyr   rC   Ś	fill_rawqZassertRaisesr   )r"   r   r*   rH   r   r   r   r   ü   s   
’zReadTests.read_very_lazyc                 C   sz   d}t |g}|  d| ” ” d}	 z| ” }||7 }|s!| ”  W n	 ty+   Y n
w |  | |”” q|  ||” d S r   )rx   r3   Z	read_lazyr   r   r0   Ś
startswith)r"   r   r*   rH   Z	read_datar   r   r   Śtest_read_lazy  s"   
’ų	zReadTests.test_read_lazyN)
r>   r?   r@   r   r   r   r   r   r   r   r   r   r   r   r|   “   s    
r|   c                   @   s   e Zd ZdddZdd ZdS )Śnego_collectorNc                 C   s   d| _ || _d| _d S )NrJ   )ŚseenŚ	sb_getterŚsb_seen)r"   r   r   r   r   rF     s   
znego_collector.__init__c                 C   sD   |  j || 7  _ |tjkr| jr |  ” }|  j|7  _d S d S d S r   )r   ŚtlŚSEr   r   )r"   r   ŚcmdŚoptZsb_datar   r   r   Śdo_nego  s
   žznego_collector.do_negor   )r>   r?   r@   rF   r   r   r   r   r   r     s    
r   c                   @   s   e Zd ZdZdd ZdS )Ś
WriteTestszKThe only thing that write does is replace each tl.IAC for
    tl.IAC+tl.IACc                 C   sz   ddt j d dt j t j d t j t jdg}|D ] }t }| |” d |jj”}|  | t jt jt j ”|” qd S )Ns   data sample without IACs   data sample withs    one IACs   a fews    iacsrJ   )	r   ŚIACrx   Śwriter$   r   rD   r3   Śreplace)r"   Zdata_samplerH   r*   Zwrittenr   r   r   Ś
test_write(  s   ü
 üzWriteTests.test_writeN)r>   r?   r@   rQ   r    r   r   r   r   r   $  s    r   c                   @   s`   e Zd Zejejejejejej	ej
ejgZdd Zdd Zdd Zdd Zd	d
 Zdd ZdS )ŚOptionTestsc                 C   s   t |}td |”}t }| |j” | ” }|j}|  t|dk” |  	|dd | j
” |  |dd tj” |  |t|| ” d|_dS )z helper for testing IAC + cmd rJ   r   Nr   é   )rx   rK   r$   r   Śset_option_negotiation_callbackr   r   r   r0   ŚassertInŚcmdsr3   r   ZNOOPTr   )r"   rH   r*   Zdata_lenŚnegoŚtxtr   r   r   r   Ś_test_command8  s   
zOptionTests._test_commandc                 C   s^   | j D ]}|  tj|g” |  dtj|dg” |  dtj|dg” q|  dd | j D ” d S )Nr   sd   yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyó
   xxxxxxxxxxó
   yyyyyyyyyyc                 S   s   g | ]}t j| qS r   )r   r   )rf   r   r   r   r   rg   L  rh   z1OptionTests.test_IAC_commands.<locals>.<listcomp>)r„   rØ   r   r   )r"   r   r   r   r   Śtest_IAC_commandsF  s
   
zOptionTests.test_IAC_commandsc                 C   s0  t jt j t j t j t jt j t j t j t j t j t jt j t j t j d t j t j t jt j d t j t j t j t j t jt j d t j t j d t j t j g}t|}t|j}| |j” | 	” }|  
|d” t jt j d t j d t j d }|  
|j|” |  
d| ” ” d |_d S )Ns   aas   bbs   ccs   ddrJ   s   aabb)r   r   ZSBr   rx   r   Zread_sb_datar£   r   r   r3   r   r   )r"   Śsendr*   r¦   r§   Zwant_sb_datar   r   r   Śtest_SB_commandsN  s   "&&*ü
$
zOptionTests.test_SB_commandsc                 C   s“   dt jtdg dft jt j tdg dft jt j tdg dft jt j tdg dft jt j tdg dfg}|D ]\}}t|g}| d” | 	” }|  
||j” q>d S )	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   ru   ZDOZDONTZWILLZWONTrx   Śset_debuglevelr   r¤   rX   )r"   Zgiven_a_expect_bŚaŚbr*   r§   r   r   r   Śtest_debuglevel_reads`  s   ų


z!OptionTests.test_debuglevel_readsc                 C   s0   t  }| d” | d” d}|  ||j” d S )Nr   s   xxxzsend b'xxx'
)rx   r°   r   r¤   rX   )r"   r*   Zexpectedr   r   r   Śtest_debuglevel_writes  s
   

z!OptionTests.test_debuglevel_writec                 C   s^   t g  tdd}d|_W d    n1 sw   Y  | d” | d” |  |jd” d S )Nrr   Ś0rs   r   Śtestz0.*test)rq   rR   rX   r°   rW   ZassertRegexr)   r   r   r   Śtest_debug_accepts_str_portz  s   

ž

z'OptionTests.test_debug_accepts_str_portN)r>   r?   r@   r   ZAOZAYTZBRKZECZELZGAZIPZNOPr„   rØ   r«   r­   r³   r“   r·   r   r   r   r   r”   4  s    $r”   c                   @   s   e Zd Zdd ZdS )ŚExpectTestsc                 C   s@   g d¢}t |}| dg”\}}}|  |d |dd ”” dS )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}   rJ   Nr~   )rx   r   r3   r$   )r"   r   r*   Ś_rH   r   r   r   Śtest_expect  s   zExpectTests.test_expectN)r>   r?   r@   rŗ   r   r   r   r   rø     s    rø   Ś__main__) r   r^   r&   r   Ś
contextlibr¶   r   Ztest.supportr   Zunittestr(   r   ZTestCaser   ŚobjectrA   r'   rR   ŚBaseSelectorrZ   Ścontextmanagerrq   rx   ry   r|   r   r   r   r”   rø   r>   Śmainr   r   r   r   Ś<module>   s6    B 

bP’