B
    18™\<%  ã               @   s  d dl mZ d dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
Z
d dlZd dlZejZdZdZG dd„ de	jƒZG dd„ d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G dd„ dejƒZedkrþe ¡  dS )é    )ÚsupportNs   QUIT
g      @c               @   s    e Zd ZdZdd„ Zdd„ ZdS )Úecho_serveré   c             C   s<   t j | ¡ || _t tjtj¡| _t 	| j¡| _
d | _d S )N)Ú	threadingÚThreadÚ__init__ÚeventÚsocketÚAF_INETÚSOCK_STREAMÚsockr   Ú	bind_portÚportÚstart_resend_event)Úselfr   © r   úV/oak/stanford/groups/akundaje/marinovg/programs/Python-3.7.3/Lib/test/test_asynchat.pyr      s
    zecho_server.__init__c             C   sØ   | j  ¡  | j ¡  | j  ¡ \}}d| _x*t| jkrR| d¡}|sDP | j| | _q*W | j td¡| _| j	rt| j	 
¡  y@x:| jr°| | jd | j… ¡}t d¡ | j|d … | _qxW W n   Y nX | ¡  | j  ¡  d S )Nó    r   gü©ñÒMbP?)r   Úlistenr   ÚsetÚacceptÚbufferÚSERVER_QUITÚrecvÚreplacer   ÚwaitÚsendÚ
chunk_sizeÚtimeÚsleepÚclose)r   ÚconnÚclientÚdataÚnr   r   r   Úrun#   s*    




zecho_server.runN)Ú__name__Ú
__module__Ú__qualname__r   r   r%   r   r   r   r   r      s   	r   c               @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )Úecho_clientc             C   s^   t j | ¡ g | _|  tjtj¡ |  t	|f¡ |  
|¡ d| _dd„ }tjdkrZdd„ }d S )Nr   c             S   s   d S )Nr   )r   r   r   r   Úhandle_connectM   s    z,echo_client.__init__.<locals>.handle_connectÚdarwinc             S   s   d S )Nr   )r   r   r   r   Úhandle_exptS   s    z)echo_client.__init__.<locals>.handle_expt)ÚasynchatÚ
async_chatr   ÚcontentsZcreate_socketr	   r
   r   ÚconnectÚHOSTÚset_terminatorr   ÚsysÚplatform)r   Ú
terminatorZserver_portr*   r,   r   r   r   r   E   s    

zecho_client.__init__c             C   s   |  j |7  _ d S )N)r   )r   r#   r   r   r   Úcollect_incoming_dataV   s    z!echo_client.collect_incoming_datac             C   s   | j  | j¡ d| _d S )Nr   )r/   Úappendr   )r   r   r   r   Úfound_terminatorY   s    zecho_client.found_terminatorN)r&   r'   r(   r   r6   r8   r   r   r   r   r)   C   s   r)   c              C   s:   t  ¡ } t| ƒ}| ¡  |  ¡  |  ¡  t d¡ || fS )Ng{®Gáz„?)r   ÚEventr   Ústartr   Úclearr   r   )r   Úsr   r   r   Ústart_echo_server]   s    
r=   c               @   sˆ   e Zd 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d„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zd S )!ÚTestAsynchatFc             C   s   t  ¡ | _d S )N)r   Úthreading_setupÚ_threads)r   r   r   r   ÚsetUpj   s    zTestAsynchat.setUpc             C   s   t j| jŽ  d S )N)r   Úthreading_cleanupr@   )r   r   r   r   ÚtearDownm   s    zTestAsynchat.tearDownc             C   sª   t  ¡ }t|ƒ}||_| ¡  | ¡  | ¡  t d¡ t	||j
ƒ}| d¡ | d| ¡ | d| ¡ | t¡ tj| jddd tj|td |  |jddg¡ d S )	Ng{®Gáz„?s   hello s   worlds   I'm not dead yet!i,  )Úuse_pollÚcountÚtimeout)rF   s   hello world)r   r9   r   r   r:   r   r;   r   r   r)   r   Úpushr   ÚasyncoreÚloopÚusepollr   Újoin_threadÚTIMEOUTÚassertEqualr/   )r   ZtermZserver_chunkr   r<   Úcr   r   r   Úline_terminator_checkp   s    


z"TestAsynchat.line_terminator_checkc             C   s   xdD ]}|   d|¡ qW d S )N)r   é   é   ó   
)rO   )r   Úlr   r   r   Útest_line_terminator1†   s    
z"TestAsynchat.test_line_terminator1c             C   s   xdD ]}|   d|¡ qW d S )N)r   rP   rQ   s   
)rO   )r   rS   r   r   r   Útest_line_terminator2‹   s    
z"TestAsynchat.test_line_terminator2c             C   s   xdD ]}|   d|¡ qW d S )N)r   rP   rQ   s   qqq)rO   )r   rS   r   r   r   Útest_line_terminator3   s    
z"TestAsynchat.test_line_terminator3c             C   sj   t ƒ \}}t||jƒ}d}| |¡ | t¡ tj| jddd tj	|t
d |  |j|d |… g¡ d S )Ns   hello world, I'm not dead yet!
i,  g{®Gáz„?)rD   rE   rF   )rF   )r=   r)   r   rG   r   rH   rI   rJ   r   rK   rL   rM   r/   )r   Ztermlenr<   r   rN   r#   r   r   r   Únumeric_terminator_check•   s    


z%TestAsynchat.numeric_terminator_checkc             C   s   |   d¡ d S )Nr   )rW   )r   r   r   r   Útest_numeric_terminator1¡   s    z%TestAsynchat.test_numeric_terminator1c             C   s   |   d¡ d S )Né   )rW   )r   r   r   r   Útest_numeric_terminator2¦   s    z%TestAsynchat.test_numeric_terminator2c             C   sn   t ƒ \}}td |jƒ}d}| |¡ | t¡ tj| jddd tj	|t
d |  |jg ¡ |  |j|¡ d S )Ns   hello world, I'm not dead yet!
i,  g{®Gáz„?)rD   rE   rF   )rF   )r=   r)   r   rG   r   rH   rI   rJ   r   rK   rL   rM   r/   r   )r   r<   r   rN   r#   r   r   r   Útest_none_terminator©   s    


z!TestAsynchat.test_none_terminatorc             C   sl   t ƒ \}}td|jƒ}d}tj|t dd}| |¡ tj| j	ddd t
j|td |  |jd	d
g¡ d S )NrR   s   hello world
I'm not dead yet!
é   )Úbuffer_sizei,  g{®Gáz„?)rD   rE   rF   )rF   s   hello worlds   I'm not dead yet!)r=   r)   r   r-   Zsimple_producerr   Úpush_with_producerrH   rI   rJ   r   rK   rL   rM   r/   )r   r<   r   rN   r#   Úpr   r   r   Útest_simple_producer¶   s    

z!TestAsynchat.test_simple_producerc             C   s^   t ƒ \}}td|jƒ}d}| |t ¡ tj| jddd tj	|t
d |  |jddg¡ d S )	NrR   s   hello world
I'm not dead yet!
i,  g{®Gáz„?)rD   rE   rF   )rF   s   hello worlds   I'm not dead yet!)r=   r)   r   r^   r   rH   rI   rJ   r   rK   rL   rM   r/   )r   r<   r   rN   r#   r   r   r   Útest_string_producerÁ   s    
z!TestAsynchat.test_string_producerc             C   sb   t ƒ \}}td|jƒ}| d¡ | t¡ tj| jddd tj	|t
d |  |jddd	g¡ d S )
NrR   s   hello world

I'm not dead yet!
i,  g{®Gáz„?)rD   rE   rF   )rF   s   hello worldr   s   I'm not dead yet!)r=   r)   r   rG   r   rH   rI   rJ   r   rK   rL   rM   r/   )r   r<   r   rN   r   r   r   Útest_empty_lineË   s    


zTestAsynchat.test_empty_linec             C   sŠ   t ƒ \}}t ¡ |_td|jƒ}| d¡ | t¡ | ¡  t	j
| jddd |j ¡  tj|td |  |jg ¡ |  t|jƒd¡ d S )NrR   s   hello world
I'm not dead yet!
i,  g{®Gáz„?)rD   rE   rF   )rF   r   )r=   r   r9   r   r)   r   rG   r   Zclose_when_donerH   rI   rJ   r   r   rK   rL   rM   r/   ÚassertGreaterÚlenr   )r   r<   r   rN   r   r   r   Útest_close_when_done×   s    




z!TestAsynchat.test_close_when_donec             C   s¢   t ƒ \}}td|jƒ}d}| |¡ | t|ƒ¡ | t|ƒ¡ |  t|jd¡ |  t|jd¡ | t¡ t	j
| jddd tj|td |  |jd	d	d	g¡ d S )
NrR   s   bytes
é
   Úunicodei,  g{®Gáz„?)rD   rE   rF   )rF   s   bytes)r=   r)   r   rG   Ú	bytearrayÚ
memoryviewÚassertRaisesÚ	TypeErrorr   rH   rI   rJ   r   rK   rL   rM   r/   )r   r<   r   rN   r#   r   r   r   Ú	test_pushí   s    


zTestAsynchat.test_pushN)r&   r'   r(   rJ   rA   rC   rO   rT   rU   rV   rW   rX   rZ   r[   r`   ra   rb   re   rl   r   r   r   r   r>   g   s    
r>   c               @   s   e Zd ZdZdS )ÚTestAsynchat_WithPollTN)r&   r'   r(   rJ   r   r   r   r   rm   þ   s   rm   c               @   s   e Zd Zdd„ ZdS )ÚTestAsynchatMockedc          	   C   sj   t j ¡ }ttjƒ|j_t 	¡ }| 
|¡ |  |j¡ t jj |d¡}| ¡  W d Q R X |  |j¡ d S )NZhandle_error)ÚunittestZmockZMockÚBlockingIOErrorÚerrnoÚEAGAINr   Zside_effectr-   r.   Z
set_socketÚ
addCleanupZdel_channelÚpatchÚobjectZhandle_readÚassertFalseÚcalled)r   r   Z
dispatcherÚerrorr   r   r   Útest_blockingioerror  s    

z'TestAsynchatMocked.test_blockingioerrorN)r&   r'   r(   ry   r   r   r   r   rn     s   rn   c               @   s   e Zd Zdd„ ZdS )ÚTestHelperFunctionsc             C   s,   |   t dd¡d¡ |   t dd¡d¡ d S )Nzqwertyz
r   Z
qwertydkjfr   )rM   r-   Zfind_prefix_at_end)r   r   r   r   Útest_find_prefix_at_end  s    z+TestHelperFunctions.test_find_prefix_at_endN)r&   r'   r(   r{   r   r   r   r   rz     s   rz   c               @   s   e Zd Zdd„ ZdS )ÚTestNotConnectedc             C   s   t  ¡ }|  t|jd¡ d S )Néÿÿÿÿ)r-   r.   rj   Ú
ValueErrorr2   )r   r"   r   r   r   Ú!test_disallow_negative_terminator  s    z2TestNotConnected.test_disallow_negative_terminatorN)r&   r'   r(   r   r   r   r   r   r|     s   r|   Ú__main__)Útestr   r-   rH   rq   r	   r3   Ú_threadÚthreadr   r   ro   Zunittest.mockr1   r   rL   r   r   r.   r)   r=   ÚTestCaser>   rm   rn   rz   r|   r&   Úmainr   r   r   r   Ú<module>   s0   .
 