a
    äzež2  ć                   @   s8  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r4e	 ”  dS ) é    N)Śsupport)Śsocket_helperc                 C   sZ   |  ”  |  ”  z:z| ” \}}| ”  W n tjy>   Y n0 W | ”  n
| ”  0 d S ©N)ŚlistenŚsetŚacceptŚcloseŚsocketŚtimeout)ŚevtZservŚconnŚaddr© r   ś)/usr/lib/python3.9/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   sr   t  ” | _t tjtj”| _| j d” t 	| j”| _
t jt| j| jfd| _| j d” | j ”  | j ”  d S )Né<   )ŚtargetŚargsT)Ś	threadingŚEventr   r	   ŚAF_INETŚSOCK_STREAMŚsockŚ
settimeoutr   Z	bind_portŚportŚThreadr   ŚthreadŚ	setDaemonŚ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 s20    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 ” 0 |  |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 ” 0 |   |j 	” d u ” |j 
”  d S ©Nr/   )r
   )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   r7   r8   r:   r<   r   r   r   r   r      s   

r   c                   @   s&   e Zd Zd	ddZdd Zdd ZdS )
Ś
SocketStubr   c                 C   s   t || _g | _d| _d S )NF)ŚlistŚreadsŚwritesŚblock)r"   rB   r   r   r   Ś__init__\   s    
zSocketStub.__init__c                 C   s   | j  |” d S r   )rC   Śappend)r"   Śdatar   r   r   Śsendall`   s    zSocketStub.sendallc                 C   sZ   d}| j r(t||k r(|| j  d”7 }qt||krV| j  d||d  ” |d | }|S )Nó    r   )rB   ŚlenŚpopŚinsert)r"   ŚsizeŚoutr   r   r   Śrecvb   s    zSocketStub.recvN)r   )r=   r>   r?   rE   rH   rO   r   r   r   r   r@   Z   s   
r@   c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
ŚTelnetAlikec                 C   s
   t  d S r   )ŚNotImplementedErrorr!   r   r   r   r;   l   s    zTelnetAlike.filenoc                 C   s   d S r   r   r!   r   r   r   r   n   rI   zTelnetAlike.closec                 C   s
   | j j S r   )r   rD   r!   r   r   r   Ś
sock_availo   s    zTelnetAlike.sock_availc                 G   sT   t  ” &}tjj| |g|¢R   W d    n1 s40    Y  |  j| ” 7  _d S r   )r   Zcaptured_stdoutr&   r'   ŚmsgŚ	_messagesŚgetvalue)r"   rS   r   rN   r   r   r   rS   q   s    
4zTelnetAlike.msgN)r=   r>   r?   r;   r   rR   rS   r   r   r   r   rP   k   s   rP   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   rE   y   s    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ŚSelectorKeyrX   )r"   ŚfileobjŚeventsrG   Śkeyr   r   r   Śregister   s    
zMockSelector.registerc                 C   s   | j  |”S r   )rX   rK   )r"   r\   r   r   r   Ś
unregister   s    zMockSelector.unregisterc                 C   sF   d}| j D ]}t|tr
|jj} q&q
|r.g S dd | j  ” D S d S )NFc                 S   s   g | ]}||j fqS r   )r]   )Ś.0r^   r   r   r   Ś
<listcomp>   rI   z'MockSelector.select.<locals>.<listcomp>)rX   Ś
isinstancerP   r   rD   Śvalues)r"   r
   rD   r\   r   r   r   Śselect   s    

zMockSelector.selectc                 C   s   | j S r   rW   r!   r   r   r   Śget_map   s    zMockSelector.get_map)N)N)
r=   r>   r?   rE   ŚpropertyrY   r_   r`   re   rf   r   r   r   r   rV   w   s   


rV   c                 #   s6    fdd}zt j}|t _d V  W |t _n|t _0 d S )Nc                     s   t  S r   )r@   )Zignored©rB   r   r   Śnew_conn   s    ztest_socket.<locals>.new_conn)r	   Ścreate_connection)rB   ri   Zold_connr   rh   r   Śtest_socket   s    rk   r   c                 C   sF   | D ]}qt |   |dd}d|_W d    n1 s80    Y  |S )NŚdummyr   Ś )rk   rT   )rB   ŚclsŚxr*   r   r   r   Śtest_telnet£   s    

$rp   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_selectorrV   r!   r   r   r   r#   ®   s    zExpectAndReadTestCase.setUpc                 C   s   | j t_d S r   )rs   r&   rr   r!   r   r   r   r%   ±   s    zExpectAndReadTestCase.tearDownN)r=   r>   r?   r#   r%   r   r   r   r   rq   ­   s   rq   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 )Ns   xxxmatchyyyó   matchs   xxxmatch)rS   )s2   xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxru   s2   yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyrI   é’’’’)rp   Z
read_untilr3   ZcookedqZrawqr   rB   r$   )r"   Śwantr*   rG   rB   Śexpectr   r   r   Śtest_read_untilµ   s    

zReadTests.test_read_untilc                 C   s2   g d¢}d  |”}t|}| ” }|  ||” d S )N)óō  xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxsō  yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyysō  zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzrI   )r$   rp   Śread_allr3   )r"   rB   rx   r*   rG   r   r   r   Śtest_read_allĘ   s    
zReadTests.test_read_allc                 C   sB   t dg}| ” }|  t|dk” t  }| ” }|  d|” d S )Nrz   é   rI   )rp   Z	read_somer0   rJ   r3   )r"   r*   rG   r   r   r   Śtest_read_someŅ   s    
zReadTests.test_read_somec                 C   sr   d}t |g}t||}d|j_|  d| ” d|j_d}z|| 7 }W q: ty^   Y qbY q:0 q:|  ||” d S )Nód   xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxTrI   F)rp   Śgetattrr   rD   r3   ŚEOFError)r"   Ś	func_namerw   r*   ŚfuncrG   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   sV   d}t |g}|  d| ” ” |jjr0| ”  q| ” }|  ||” |  t|j” d S ©Nr   rI   )rp   r3   Śread_very_lazyr   rB   Ś	fill_rawqZassertRaisesr   )r"   rw   r*   rG   r   r   r   r   ü   s    

zReadTests.read_very_lazyc                 C   s|   d}t |g}|  d| ” ” d}z | ” }||7 }|s@| ”  W n tyX   Y qlY n0 |  | |”” q"|  ||” d S r   )rp   r3   Z	read_lazyr   r   r0   Ś
startswith)r"   rw   r*   rG   Z	read_datar   r   r   Śtest_read_lazy  s    

zReadTests.test_read_lazyN)
r=   r>   r?   ry   r|   r~   r   r   r   r   r   r   r   r   rt   “   s   
rt   c                   @   s   e Zd ZdddZdd ZdS )Śnego_collectorNc                 C   s   d| _ || _d| _d S )NrI   )ŚseenŚ	sb_getterŚsb_seen)r"   r   r   r   r   rE     s    znego_collector.__init__c                 C   s<   |  j || 7  _ |tjkr8| jr8|  ” }|  j|7  _d S r   )r   ŚtlŚSEr   r   )r"   r   ŚcmdŚoptZsb_datar   r   r   Śdo_nego  s    znego_collector.do_nego)N)r=   r>   r?   rE   r   r   r   r   r   r     s   
r   c                   @   s   e Zd Zdd ZdS )Ś
WriteTestsc                 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 ”|” q4d S )Ns   data sample without IACs   data sample withs    one IACs   a fews    iacsrI   )	r   ŚIACrp   Śwriter$   r   rC   r3   Śreplace)r"   Zdata_samplerG   r*   Zwrittenr   r   r   Ś
test_write(  s    ü
zWriteTests.test_writeN)r=   r>   r?   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 )NrI   r   r}   é   )rp   rJ   r$   r   Śset_option_negotiation_callbackr   r{   r   r0   ŚassertInŚcmdsr3   r   ZNOOPTr   )r"   rG   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   )ra   r   r   r   r   rb   L  rI   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   ddrI   s   aabb)r   r   ZSBr   rp   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 ]2\}}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   ŚbytesZDOZDONTZWILLZWONTrp   Śset_debuglevelr{   r   rT   )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'
)rp   r©   r   r   rT   )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.0    Y  | d” | d” |  |jd” d S )Nrl   Ś0rm   r}   Śtestz0.*test)rk   rP   rT   r©   rS   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 )N)r”   ru   r¢   ru   rI   rv   )rp   rx   r3   r$   )r"   rw   r*   Ś_rG   r   r   r   Śtest_expect  s    zExpectTests.test_expectN)r=   r>   r?   r³   r   r   r   r   r±     s   r±   Ś__main__) r	   rZ   r&   r   Ś
contextlibrÆ   r   Ztest.supportr   Zunittestr(   r   ZTestCaser   Śobjectr@   r'   rP   ŚBaseSelectorrV   Ścontextmanagerrk   rp   rq   rt   r   r   r   r   r±   r=   Śmainr   r   r   r   Ś<module>   s2   B 

bP
