B
    18™\Ë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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 )é    N)Úsupportc             C   sT   |  ¡  |  ¡  z4y| ¡ \}}| ¡  W n tjk
r@   Y nX W d | ¡  X d S )N)ÚlistenÚsetÚacceptÚcloseÚsocketÚtimeout)ÚevtZservÚconnÚaddr© r   úW/oak/stanford/groups/akundaje/marinovg/programs/Python-3.7.3/Lib/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   Ú	bind_portÚportÚThreadr   ÚthreadÚ	setDaemonÚstartÚwait)Úselfr   r   r   ÚsetUp   s    

zGeneralTests.setUpc             C   s   | j  ¡  | ` d S )N)r   Újoin)r    r   r   r   ÚtearDown#   s    
zGeneralTests.tearDownc             C   s   t  t| j¡}|j ¡  d S )N)Ú	telnetlibÚTelnetÚHOSTr   r   r   )r    Útelnetr   r   r   Ú	testBasic'   s    zGeneralTests.testBasicc          	   C   s:   t  t| j¡}|  | ¡ ¡ W d Q R X |  | ¡ ¡ d S )N)r$   r%   r&   r   ÚassertIsNotNoneÚ
get_socketÚassertIsNone)r    Útnr   r   r   ÚtestContextManager,   s    zGeneralTests.testContextManagerc          	   C   s\   |   t ¡ d k¡ t d¡ zt t| j¡}W d t d ¡ X |  |j	 
¡ d¡ |j	 ¡  d S )Né   )Ú
assertTruer   ÚgetdefaulttimeoutÚsetdefaulttimeoutr$   r%   r&   r   ÚassertEqualr   Ú
gettimeoutr   )r    r'   r   r   r   ÚtestTimeoutDefault1   s    
zGeneralTests.testTimeoutDefaultc          	   C   sb   |   t ¡ d k¡ t d¡ ztjt| jd d}W d t d ¡ X |   |j 	¡ d k¡ |j 
¡  d S )Nr.   )r   )r/   r   r0   r1   r$   r%   r&   r   r   r3   r   )r    r'   r   r   r   ÚtestTimeoutNone;   s    
zGeneralTests.testTimeoutNonec             C   s2   t jt| jdd}|  |j ¡ d¡ |j ¡  d S )Nr.   )r   )r$   r%   r&   r   r2   r   r3   r   )r    r'   r   r   r   ÚtestTimeoutValueF   s    zGeneralTests.testTimeoutValuec             C   s:   t  ¡ }|jt| jdd |  |j ¡ d¡ |j ¡  d S )Nr.   )r   )	r$   r%   Úopenr&   r   r2   r   r3   r   )r    r'   r   r   r   ÚtestTimeoutOpenK   s    zGeneralTests.testTimeoutOpenc             C   sJ   t jt| jdd}|j}|  | ¡ |¡ |  | ¡ | ¡ ¡ |j ¡  d S )Nr.   )r   )	r$   r%   r&   r   r   r2   r*   Úfilenor   )r    r'   Zt_sockr   r   r   ÚtestGettersQ   s
    zGeneralTests.testGettersN)Ú__name__Ú
__module__Ú__qualname__r!   r#   r(   r-   r4   r5   r6   r8   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    r@   r   r   r   Ú__init__[   s    
zSocketStub.__init__c             C   s   | j  |¡ d S )N)rA   Úappend)r    Údatar   r   r   Úsendall_   s    zSocketStub.sendallc             C   s^   d}x&| j r*t|ƒ|k r*|| j  d¡7 }qW t|ƒ|krZ| j  d||d … ¡ |d |… }|S )Nó    r   )r@   ÚlenÚpopÚinsert)r    ÚsizeÚoutr   r   r   Úrecva   s    zSocketStub.recvN)r   )r;   r<   r=   Ú__doc__rC   rF   rM   r   r   r   r   r>   Y   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 )N)ÚNotImplementedError)r    r   r   r   r9   k   s    zTelnetAlike.filenoc             C   s   d S )Nr   )r    r   r   r   r   m   rG   zTelnetAlike.closec             C   s
   | j j S )N)r   rB   )r    r   r   r   Ú
sock_availn   s    zTelnetAlike.sock_availc          	   G   s>   t  ¡ }tjj| |f|žŽ  W d Q R X |  j| ¡ 7  _d S )N)r   Úcaptured_stdoutr$   r%   ÚmsgÚ	_messagesÚgetvalue)r    rS   r   rL   r   r   r   rS   p   s    
zTelnetAlike.msgN)r;   r<   r=   r9   r   rQ   rS   r   r   r   r   rO   j   s   rO   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 )N)Úkeys)r    r   r   r   rC   x   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ÚSelectorKeyrW   )r    ÚfileobjÚeventsrE   Úkeyr   r   r   Úregister   s    
zMockSelector.registerc             C   s   | j  |¡S )N)rW   rI   )r    r[   r   r   r   Ú
unregister„   s    zMockSelector.unregisterc             C   sH   d}x"| j D ]}t|tƒr|jj}P qW |r0g S dd„ | j  ¡ D ƒS d S )NFc             S   s   g | ]}||j f‘qS r   )r\   )Ú.0r]   r   r   r   ú
<listcomp>   s    z'MockSelector.select.<locals>.<listcomp>)rW   Ú
isinstancerO   r   rB   Úvalues)r    r   rB   r[   r   r   r   Úselect‡   s    
zMockSelector.selectc             C   s   | j S )N)rW   )r    r   r   r   Úget_map’   s    zMockSelector.get_map)N)N)
r;   r<   r=   rC   ÚpropertyrX   r^   r_   rd   re   r   r   r   r   rV   v   s   

rV   c             #   s0   ‡ fdd„}zt j}|t _d V  W d |t _X d S )Nc                 s   t ˆ ƒS )N)r>   )Zignored)r@   r   r   Únew_conn˜   s    ztest_socket.<locals>.new_conn)r   Úcreate_connection)r@   rg   Zold_connr   )r@   r   Útest_socket–   s    
ri   r   c          	   C   sJ   x | D ]}t |ƒtkst|ƒ‚qW t| ƒ |ddƒ}d|_W dQ R X |S )za return a telnetlib.Telnet object that uses a SocketStub with
        reads queued up to be read Údummyr   Ú N)ÚtypeÚbytesÚAssertionErrorri   rT   )r@   ÚclsÚxr'   r   r   r   Útest_telnet¢   s    


rq   c               @   s   e Zd Zdd„ Zdd„ ZdS )ÚExpectAndReadTestCasec             C   s   t j| _tt _d S )N)r$   Ú_TelnetSelectorÚold_selectorrV   )r    r   r   r   r!   ­   s    zExpectAndReadTestCase.setUpc             C   s   | j t_d S )N)rt   r$   rs   )r    r   r   r   r#   °   s    zExpectAndReadTestCase.tearDownN)r;   r<   r=   r!   r#   r   r   r   r   rr   ¬   s   rr   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   st   dg}t |ƒ}| d¡}| j|d|j|j|jjfd dddg}d |dd	… ¡}t |ƒ}| d¡}|  ||¡ dS )
zc
        read_until(expected, timeout=None)
        test the blocking version of read_util
        s   xxxmatchyyys   matchs   xxxmatch)rS   s2   xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxs2   yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyrG   Néÿÿÿÿ)rq   Z
read_untilr2   ZcookedqZrawqr   r@   r"   )r    Úwantr'   rE   r@   Úexpectr   r   r   Útest_read_until´   s    


zReadTests.test_read_untilc             C   s4   dddg}d  |¡}t|ƒ}| ¡ }|  ||¡ dS )zJ
        read_all()
          Read all data until EOF; may block.
        sô  xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxsô  yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyysô  zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzrG   N)r"   rq   Úread_allr2   )r    r@   rx   r'   rE   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.
        sô  xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxé   rG   N)rq   Z	read_somer/   rH   r2   )r    r'   rE   r   r   r   Útest_read_someÑ   s    
zReadTests.test_read_somec             C   sv   d}t |gƒ}t||ƒ}d|j_|  d|ƒ ¡ d|j_d}x*y||ƒ 7 }W q< tk
r`   P Y q<X q<W |  ||¡ dS )z
        read_*_eager()
          Read all data available already queued or on the socket,
          without blocking.
        sd   xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxTrG   FN)rq   Úgetattrr   rB   r2   ÚEOFError)r    Ú	func_namerw   r'   ÚfuncrE   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   sZ   d}t |gƒ}|  d| ¡ ¡ x|jjr2| ¡  q W | ¡ }|  ||¡ |  t|j¡ d S )Nsd   xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxrG   )rq   r2   Úread_very_lazyr   r@   Ú	fill_rawqÚassertRaisesr   )r    rw   r'   rE   r   r   r   r„   û   s    

zReadTests.read_very_lazyc             C   s€   d}t |gƒ}|  d| ¡ ¡ d}xLy | ¡ }||7 }|sB| ¡  W n tk
rZ   P Y nX |  | |¡¡ q$W |  ||¡ d S )Nsd   xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxrG   )rq   r2   Z	read_lazyr…   r   r/   Ú
startswith)r    rw   r'   rE   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   ru   ³   s   
ru   c               @   s   e Zd Zddd„Zdd„ ZdS )Únego_collectorNc             C   s   d| _ || _d| _d S )NrG   )ÚseenÚ	sb_getterÚsb_seen)r    r‹   r   r   r   rC     s    znego_collector.__init__c             C   s<   |  j || 7  _ |tjkr8| jr8|  ¡ }|  j|7  _d S )N)rŠ   ÚtlÚSEr‹   rŒ   )r    r   ÚcmdÚoptZsb_datar   r   r   Údo_nego  s    znego_collector.do_nego)N)r;   r<   r=   rC   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   s~   ddt j d dt j t j d t j t jdg}xH|D ]@}tƒ }| |¡ d |jj¡}|  | t jt jt j ¡|¡ q6W d S )Ns   data sample without IACs   data sample withs    one IACs   a fews    iacsrG   )	r   ÚIACrq   Úwriter"   r   rA   r2   Úreplace)r    Zdata_samplerE   r'   Zwrittenr   r   r   Ú
test_write'  s    

zWriteTests.test_writeN)r;   r<   r=   rN   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 rG   r   Nr|   é   )rq   rH   r"   r‰   Úset_option_negotiation_callbackr‘   rz   rŠ   r/   ÚassertInÚcmdsr2   r   ZNOOPTr‹   )r    rE   r'   Zdata_lenÚnegoÚtxtr   r   r   r   Ú_test_command7  s    zOptionTests._test_commandc             C   sb   xF| j D ]<}|  tj|g¡ |  dtj|dg¡ |  dtj|dg¡ qW |  dd„ | j D ƒ¡ d S )Nsd   xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxsd   yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyys
   xxxxxxxxxxs
   yyyyyyyyyyc             S   s   g | ]}t j| ‘qS r   )r   r“   )r`   r   r   r   r   ra   K  s    z1OptionTests.test_IAC_commands.<locals>.<listcomp>)r›   rž   r   r“   )r    r   r   r   r   Útest_IAC_commandsE  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   ddrG   s   aabb)r   r“   ZSBrŽ   rq   r‰   Zread_sb_datar™   r‘   rz   r2   rŒ   r‹   )r    Úsendr'   rœ   r   Zwant_sb_datar   r   r   Útest_SB_commandsM  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}x:|D ]2\}}t|gƒ}| d¡ | 	¡ }|  
||j¡ q~W 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“   rm   ZDOZDONTZWILLZWONTrq   Úset_debuglevelrz   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'
)rq   r¤   r”   rš   rT   )r    r'   Úexpectedr   r   r   Útest_debuglevel_writer  s
    

z!OptionTests.test_debuglevel_writec          	   C   sJ   t g ƒ tddƒ}d|_W d Q R X | d¡ | d¡ |  |jd¡ d S )Nrj   Ú0rk   r|   Útestz0.*test)ri   rO   rT   r¤   rS   ÚassertRegex)r    r'   r   r   r   Útest_debug_accepts_str_porty  s    



z'OptionTests.test_debug_accepts_str_portN)r;   r<   r=   r   ZAOZAYTZBRKZECZELZGAZIPÚNOPr›   rž   rŸ   r¡   r§   r©   r­   r   r   r   r   r—   3  s   $r—   c               @   s   e Zd Zdd„ ZdS )ÚExpectTestsc             C   sB   dddg}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.
        s
   xxxxxxxxxxs   matchs
   yyyyyyyyyyrG   Nrv   )rq   rx   r2   r"   )r    rw   r'   Ú_rE   r   r   r   Útest_expect„  s    
zExpectTests.test_expectN)r;   r<   r=   r±   r   r   r   r   r¯   ƒ  s   r¯   Ú__main__)r   rY   r$   r   Ú
contextlibr«   r   Úunittestr&   r   ÚTestCaser   Úobjectr>   r%   rO   ÚBaseSelectorrV   Úcontextmanagerri   rq   rr   ru   r‰   r   r’   r—   r¯   r;   Úmainr   r   r   r   Ú<module>   s.   B 
bP
