B
    18™\j‚  ã               @   s¼   d 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m	Z	 ddl
mZ yddlZW n ek
r€   dZY nX ddlZddlmZ G dd„ dejƒZedkr¸e ¡  dS )	zTests for streams.py.é    N)Úmock)Úsupport)Úutilsc                   sX  e Zd ZdZ‡ fdd„Z‡ fdd„Ze d¡dd„ ƒZd	d
„ Z	dd„ Z
ejdd„ ƒZdd„ Ze edkd¡dd„ ƒZeje edkd¡dd„ ƒƒZdd„ Zdd„ Zej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/d0„ Z d1d2„ Z!d3d4„ Z"d5d6„ Z#d7d8„ Z$d9d:„ Z%d;d<„ Z&d=d>„ Z'd?d@„ Z(dAdB„ Z)dCdD„ Z*dEdF„ Z+dGdH„ Z,dIdJ„ Z-dKdL„ Z.dMdN„ Z/dOdP„ Z0dQdR„ Z1dSdT„ Z2dUdV„ Z3dWdX„ Z4dYdZ„ Z5d[d\„ Z6d]d^„ Z7ejd_d`„ ƒZ8e e9j:dakdb¡dcdd„ ƒZ;dedf„ Z<dgdh„ Z=didj„ Z>dkdl„ Z?dmdn„ Z@dodp„ ZAdqdr„ ZBdsdt„ ZCdudv„ ZDdwdx„ ZEdydz„ ZFd{d|„ ZGd}d~„ ZHdd€„ ZI‡  ZJS )ÚStreamTestss   line1
line2
line3
c                s$   t ƒ  ¡  t ¡ | _|  | j¡ d S )N)ÚsuperÚsetUpÚasyncioÚnew_event_loopÚloopÚset_event_loop)Úself)Ú	__class__© úb/oak/stanford/groups/akundaje/marinovg/programs/Python-3.7.3/Lib/test/test_asyncio/test_streams.pyr      s    

zStreamTests.setUpc                s,   t  | j¡ | j ¡  t ¡  tƒ  ¡  d S )N)Ú
test_utilsÚrun_brieflyr
   ÚcloseÚgcÚcollectr   ÚtearDown)r   )r   r   r   r      s    
zStreamTests.tearDownzasyncio.streams.eventsc             C   s   t  ¡ }|  |j|jj¡ d S )N)r   ÚStreamReaderÚassertIsÚ_loopÚget_event_loopÚreturn_value)r   Zm_eventsÚstreamr   r   r   Útest_ctor_global_loop'   s    z!StreamTests.test_ctor_global_loopc             C   sj   | j  |¡\}}| d¡ | ¡ }| j  |¡}|  |d¡ | ¡ }| j  |¡}|  | d¡¡ | ¡  d S )Ns   GET / HTTP/1.0

s   HTTP/1.0 200 OK
s   

Test message)	r
   Úrun_until_completeÚwriteÚreadlineÚassertEqualÚreadÚ
assertTrueÚendswithr   )r   Úopen_connection_futÚreaderÚwriterÚfÚdatar   r   r   Ú_basetest_open_connection,   s    
z%StreamTests._basetest_open_connectionc          	   C   s6   t  ¡ $}tj|jd| jiŽ}|  |¡ W d Q R X d S )Nr
   )r   Úrun_test_serverr   Úopen_connectionÚaddressr
   r)   )r   ÚhttpdÚconn_futr   r   r   Útest_open_connection7   s    


z StreamTests.test_open_connectionc          	   C   s4   t  ¡ "}tj|j| jd}|  |¡ W d Q R X d S )N)r
   )r   Úrun_test_unix_serverr   Úopen_unix_connectionr,   r
   r)   )r   r-   r.   r   r   r   Útest_open_unix_connection=   s    

z%StreamTests.test_open_unix_connectionc          	   C   s\   z| j  |¡\}}W d t d ¡ X | d¡ | ¡ }| j  |¡}|  | d¡¡ | ¡  d S )Ns   GET / HTTP/1.0

s   

Test message)	r
   r   r   r   r   r!   r"   r#   r   )r   r$   r%   r&   r'   r(   r   r   r   Ú%_basetest_open_connection_no_loop_sslD   s    
z1StreamTests._basetest_open_connection_no_loop_sslNzNo ssl modulec          	   C   s@   t jdd*}tj|jt  ¡ | jdœŽ}|  |¡ W d Q R X d S )NT)Úuse_ssl)Ússlr
   )r   r*   r   r+   r,   Údummy_ssl_contextr
   r3   )r   r-   r.   r   r   r   Ú test_open_connection_no_loop_sslP   s    z,StreamTests.test_open_connection_no_loop_sslc          	   C   s@   t jdd*}tj|jt  ¡ d| jd}|  |¡ W d Q R X d S )NT)r4   Ú )r5   Úserver_hostnamer
   )r   r0   r   r1   r,   r6   r
   r3   )r   r-   r.   r   r   r   Ú%test_open_unix_connection_no_loop_sslZ   s    
z1StreamTests.test_open_unix_connection_no_loop_sslc          	   C   s`   | j  |¡\}}|j tƒ ¡ | ¡ }|  t¡ | j  |¡ W d Q R X | ¡  t 	| j ¡ d S )N)
r
   r   Ú	_protocolÚconnection_lostÚZeroDivisionErrorr!   ÚassertRaisesr   r   r   )r   r$   r%   r&   r'   r   r   r   Ú_basetest_open_connection_errorf   s    z+StreamTests._basetest_open_connection_errorc          	   C   s6   t  ¡ $}tj|jd| jiŽ}|  |¡ W d Q R X d S )Nr
   )r   r*   r   r+   r,   r
   r?   )r   r-   r.   r   r   r   Útest_open_connection_erroro   s    


z&StreamTests.test_open_connection_errorc          	   C   s4   t  ¡ "}tj|j| jd}|  |¡ W d Q R X d S )N)r
   )r   r0   r   r1   r,   r
   r?   )r   r-   r.   r   r   r   Útest_open_unix_connection_erroru   s    

z+StreamTests.test_open_unix_connection_errorc             C   s*   t j| jd}| d¡ |  d|j¡ d S )N)r
   ó    )r   r   r
   Ú	feed_datar    Ú_buffer)r   r   r   r   r   Útest_feed_empty_data|   s    
z StreamTests.test_feed_empty_datac             C   s.   t j| jd}| | j¡ |  | j|j¡ d S )N)r
   )r   r   r
   rC   ÚDATAr    rD   )r   r   r   r   r   Útest_feed_nonempty_data‚   s    z#StreamTests.test_feed_nonempty_datac             C   sL   t j| jd}| | j¡ | j | d¡¡}|  d|¡ |  | j|j¡ d S )N)r
   r   rB   )	r   r   r
   rC   rF   r   r!   r    rD   )r   r   r(   r   r   r   Útest_read_zeroˆ   s
    zStreamTests.test_read_zeroc                sj   t jˆ jd‰t jˆ d¡ˆ jd}‡ ‡fdd„}ˆ j |¡ ˆ j |¡}ˆ  ˆ j|¡ ˆ  dˆj	¡ d S )N)r
   é   c                  s   ˆ  ˆ j¡ d S )N)rC   rF   r   )r   r   r   r   Úcb–   s    z!StreamTests.test_read.<locals>.cbrB   )
r   r   r
   ÚTaskr!   Ú	call_soonr   r    rF   rD   )r   Ú	read_taskrJ   r(   r   )r   r   r   Ú	test_read‘   s    zStreamTests.test_readc             C   sR   t j| jd}| d¡ | d¡ | j | d¡¡}|  d|¡ |  d|j¡ d S )N)r
   s   line1s   line2é   )r   r   r
   rC   r   r!   r    rD   )r   r   r(   r   r   r   Útest_read_line_breaksž   s    

z!StreamTests.test_read_line_breaksc                sf   t j| jd‰ t jˆ  d¡| jd}‡ fdd„}| j |¡ | j |¡}|  d|¡ |  dˆ j¡ d S )N)r
   i   c                  s   ˆ   ¡  d S )N)Úfeed_eofr   )r   r   r   rJ   ®   s    z%StreamTests.test_read_eof.<locals>.cbrB   )	r   r   r
   rK   r!   rL   r   r    rD   )r   rM   rJ   r(   r   )r   r   Útest_read_eof©   s    zStreamTests.test_read_eofc                sf   t j| jd‰ t jˆ  d¡| jd}‡ fdd„}| j |¡ | j |¡}|  d|¡ |  dˆ j¡ d S )N)r
   éÿÿÿÿc                  s    ˆ   d¡ ˆ   d¡ ˆ  ¡  d S )Ns   chunk1
s   chunk2)rC   rQ   r   )r   r   r   rJ   »   s    

z+StreamTests.test_read_until_eof.<locals>.cbs   chunk1
chunk2rB   )	r   r   r
   rK   r!   rL   r   r    rD   )r   rM   rJ   r(   r   )r   r   Útest_read_until_eof¶   s    zStreamTests.test_read_until_eofc             C   s^   t j| jd}| d¡ | j | d¡¡}|  d|¡ | tƒ ¡ |  	t| jj| d¡¡ d S )N)r
   s   line
é   s   li)
r   r   r
   rC   r   r!   r    Úset_exceptionÚ
ValueErrorr>   )r   r   r(   r   r   r   Útest_read_exceptionÆ   s    
zStreamTests.test_read_exceptionc          	   C   sT   |   td¡ tjd| jd W d Q R X |   td¡ tjd| jd W d Q R X d S )NZimitr   )Úlimitr
   rS   )ÚassertRaisesRegexrW   r   r   r
   )r   r   r   r   Útest_invalid_limitÑ   s    zStreamTests.test_invalid_limitc             C   sJ   t jd| jd}| d¡ | j | d¡¡}|  d|¡ |  d|j¡ d S )Né   )rY   r
   s   chunkrO   rB   )r   r   r
   rC   r   r!   r    rD   )r   r   r(   r   r   r   Útest_read_limitØ   s
    
zStreamTests.test_read_limitc                sn   t j| jd‰ ˆ  d¡ t jˆ  ¡ | jd}‡ fdd„}| j |¡ | j |¡}|  d|¡ |  dˆ j	¡ d S )N)r
   s   chunk1 c                  s"   ˆ   d¡ ˆ   d¡ ˆ   d¡ d S )Ns   chunk2 s   chunk3 s   
 chunk4)rC   r   )r   r   r   rJ   æ   s    

z%StreamTests.test_readline.<locals>.cbs   chunk1 chunk2 chunk3 
s    chunk4)
r   r   r
   rC   rK   r   rL   r   r    rD   )r   rM   rJ   Úliner   )r   r   Útest_readlineß   s    
zStreamTests.test_readlinec             C   sž   t jd| jd}| d¡ | d¡ |  t| jj| ¡ ¡ |  d|j	¡ t jd| jd}| d¡ | d¡ | d¡ |  t| jj| ¡ ¡ |  d|j	¡ d S )Nr\   )rY   r
   s   lis
   ne1
line2
s   line2
s   ne1rB   )
r   r   r
   rC   r>   rW   r   r   r    rD   )r   r   r   r   r   Ú&test_readline_limit_with_existing_datað   s    




z2StreamTests.test_readline_limit_with_existing_datac             C   s†   t j| jd}|  | ¡ ¡ | d¡ |  | ¡ ¡ | j | ¡ ¡ |  | ¡ ¡ | d¡ | ¡  | j | ¡ ¡ |  	| ¡ ¡ d S )N)r
   s
   some data
)
r   r   r
   ÚassertFalseÚat_eofrC   r   r   rQ   r"   )r   r   r   r   r   Útest_at_eof  s    

zStreamTests.test_at_eofc          	      s\  t jd| jd‰ ‡ fdd„}| j |¡ |  t| jjˆ  ¡ ¡ |  dˆ j	¡ t jd| jd‰ ‡ fdd„}| j |¡ |  t| jjˆ  ¡ ¡ |  dˆ j	¡ t jd| jd‰ ˆ  
d¡ | j ˆ  ¡ ¡}|  d|¡ |  dˆ j	¡ ˆ  
d	¡ |  t¡}| j ˆ  ¡ ¡ W d Q R X |  dˆ j	¡ ˆ  
d
¡ |  t¡}| j ˆ  ¡ ¡ W d Q R X |  dˆ j	¡ d S )Né   )rY   r
   c                  s*   ˆ   d¡ ˆ   d¡ ˆ   d¡ ˆ  ¡  d S )Ns   chunk1s   chunk2s   chunk3
)rC   rQ   r   )r   r   r   rJ     s    


z+StreamTests.test_readline_limit.<locals>.cbrB   c                  s*   ˆ   d¡ ˆ   d¡ ˆ   d¡ ˆ  ¡  d S )Ns   chunk1s   chunk2
s   chunk3
)rC   rQ   r   )r   r   r   rJ   -  s    


s   chunk3
s   1234567
s	   12345678
s   12345678)r   r   r
   rL   r>   rW   r   r   r    rD   rC   )r   rJ   r^   Úcmr   )r   r   Útest_readline_limit  s2    


zStreamTests.test_readline_limitc             C   sd   t j| jd}| | jd d… ¡ | | jdd … ¡ | j | ¡ ¡}|  d|¡ |  d|j¡ d S )N)r
   é   s   line1
s   line2
line3
)	r   r   r
   rC   rF   r   r   r    rD   )r   r   r^   r   r   r   Útest_readline_nolimit_nowaitI  s    z(StreamTests.test_readline_nolimit_nowaitc             C   s@   t j| jd}| d¡ | ¡  | j | ¡ ¡}|  d|¡ d S )N)r
   s	   some data)r   r   r
   rC   rQ   r   r   r    )r   r   r^   r   r   r   Útest_readline_eofU  s
    
zStreamTests.test_readline_eofc             C   s6   t j| jd}| ¡  | j | ¡ ¡}|  d|¡ d S )N)r
   rB   )r   r   r
   rQ   r   r   r    )r   r   r^   r   r   r   Útest_readline_empty_eof]  s    z#StreamTests.test_readline_empty_eofc             C   sZ   t j| jd}| | j¡ | j | ¡ ¡ | j | d¡¡}|  d|¡ |  d|j	¡ d S )N)r
   rd   s   line2
ls   ine3
)
r   r   r
   rC   rF   r   r   r!   r    rD   )r   r   r(   r   r   r   Útest_readline_read_byte_countd  s    z)StreamTests.test_readline_read_byte_countc             C   sh   t j| jd}| d¡ | j | ¡ ¡}|  d|¡ | tƒ ¡ |  	t| jj| ¡ ¡ |  d|j
¡ d S )N)r
   s   line
rB   )r   r   r
   rC   r   r   r    rV   rW   r>   rD   )r   r   r(   r   r   r   Útest_readline_exceptiono  s    
z#StreamTests.test_readline_exceptionc          	   C   s>   t j| jd}|  td¡ | j |jdd¡ W d Q R X d S )N)r
   zSeparator should berB   )Ú	separator)r   r   r
   rZ   rW   r   Ú	readuntil)r   r   r   r   r   Útest_readuntil_separator{  s    z$StreamTests.test_readuntil_separatorc             C   s¶   t j| jd}| d¡ | j |jdd¡}|  d|¡ |  d|j¡ | d¡ | j | d¡¡}|  d|¡ |  d|j¡ | d¡ | j | d¡¡}|  d|¡ |  d|j¡ d S )N)r
   s   lineAAAs   AAA)rm   rB   s
   lineAAAxxxs   xxx)r   r   r
   rC   r   rn   r    rD   )r   r   r(   r   r   r   Útest_readuntil_multi_chunks€  s    


z'StreamTests.test_readuntil_multi_chunksc             C   sf  t j| jd}| d¡ | d¡ | d¡ | j | d¡¡}|  d|¡ |  d|j¡ | d¡ | d¡ | d	¡ | j | d¡¡}|  d|¡ |  d|j¡ | d¡ | j | d¡¡}|  d|¡ |  d|j¡ | d
¡ | j | d¡¡}|  d
|¡ |  d|j¡ | d¡ | d¡ | d¡ | d¡ | j | d¡¡}|  d|¡ |  d|j¡ d S )N)r
   s   QWEaas   XYaaó   as   aaas
   QWEaaXYaaarB   s   XYas   aas   Xaaas   XXXs   XXXaaa)r   r   r
   rC   r   rn   r    rD   )r   r   r(   r   r   r   Útest_readuntil_multi_chunks_1’  s8    











z)StreamTests.test_readuntil_multi_chunks_1c          	   C   sz   t j| jd}| d¡ | ¡  |  t j¡}| j | d¡¡ W d Q R X |  	|j
jd¡ |  |j
j¡ |  	d|j¡ d S )N)r
   s   some dataAAs   AAArB   )r   r   r
   rC   rQ   r>   ÚIncompleteReadErrorr   rn   r    Ú	exceptionÚpartialÚassertIsNoneÚexpectedrD   )r   r   re   r   r   r   Útest_readuntil_eofµ  s    
zStreamTests.test_readuntil_eofc          	   C   sœ   t j| jdd}| d¡ |  t jd¡}| j | d¡¡ W d Q R X |  d|j	¡ | d¡ |  t jd¡}| j | d¡¡ W d Q R X |  d|j	¡ d S )	Nr\   )r
   rY   s   some dataAAz	not founds   AAAó   Azis founds   some dataAAA)
r   r   r
   rC   rZ   ÚLimitOverrunErrorr   rn   r    rD   )r   r   re   r   r   r   Útest_readuntil_limit_found_sepÀ  s    

z*StreamTests.test_readuntil_limit_found_sepc          	   C   s†   t j| jd}| | j¡ | j | d¡¡}|  d|¡ |  | j|j¡ |  	t
d¡ | j | d¡¡ W d Q R X |  | j|j¡ d S )N)r
   r   rB   zless than zerorS   )r   r   r
   rC   rF   r   Úreadexactlyr    rD   rZ   rW   )r   r   r(   r   r   r   Útest_readexactly_zero_or_lessÑ  s    z)StreamTests.test_readexactly_zero_or_lessc                s€   t jˆ jd‰dtˆ jƒ }t jˆ |¡ˆ jd}‡ ‡fdd„}ˆ j |¡ ˆ j |¡}ˆ  	ˆ jˆ j |¡ ˆ  	ˆ jˆj
¡ d S )N)r
   rU   c                  s(   ˆ  ˆ j¡ ˆ  ˆ j¡ ˆ  ˆ j¡ d S )N)rC   rF   r   )r   r   r   r   rJ   å  s    z(StreamTests.test_readexactly.<locals>.cb)r   r   r
   ÚlenrF   rK   r|   rL   r   r    rD   )r   ÚnrM   rJ   r(   r   )r   r   r   Útest_readexactlyÞ  s    zStreamTests.test_readexactlyc             C   sJ   t jd| jd}| d¡ | j | d¡¡}|  d|¡ |  d|j¡ d S )Nr\   )rY   r
   s   chunkrO   rB   )r   r   r
   rC   r   r|   r    rD   )r   r   r(   r   r   r   Útest_readexactly_limitï  s
    
z"StreamTests.test_readexactly_limitc          	      s¶   t jˆ jd‰dtˆ jƒ }t jˆ |¡ˆ jd}‡ ‡fdd„}ˆ j |¡ ˆ  t j	¡}ˆ j 
|¡ W d Q R X ˆ  |jjˆ j¡ ˆ  |jj|¡ ˆ  t|jƒd¡ ˆ  dˆj¡ d S )N)r
   rU   c                  s   ˆ  ˆ j¡ ˆ ¡  d S )N)rC   rF   rQ   r   )r   r   r   r   rJ   ü  s    z,StreamTests.test_readexactly_eof.<locals>.cbz-18 bytes read on a total of 36 expected bytesrB   )r   r   r
   r~   rF   rK   r|   rL   r>   rs   r   r    rt   ru   rw   ÚstrrD   )r   r   rM   rJ   re   r   )r   r   r   Útest_readexactly_eofö  s    z StreamTests.test_readexactly_eofc             C   s^   t j| jd}| d¡ | j | d¡¡}|  d|¡ | tƒ ¡ |  	t| jj| d¡¡ d S )N)r
   s   line
rU   s   li)
r   r   r
   rC   r   r|   r    rV   rW   r>   )r   r   r(   r   r   r   Útest_readexactly_exception	  s    
z&StreamTests.test_readexactly_exceptionc             C   s@   t j| jd}|  | ¡ ¡ tƒ }| |¡ |  | ¡ |¡ d S )N)r
   )r   r   r
   rv   rt   rW   rV   r   )r   r   Úexcr   r   r   Útest_exception  s
    
zStreamTests.test_exceptionc                st   t j| jd‰ t j‡ fdd„ƒ}t jˆ  ¡ | jd}t j|ƒ | jd}| j t j||g| jd¡ |  t	|j
¡ d S )N)r
   c                  s   ˆ   tƒ ¡ d S )N)rV   rW   r   )r   r   r   Úset_err  s    z2StreamTests.test_exception_waiter.<locals>.set_err)r   r   r
   Ú	coroutinerK   r   r   Úwaitr>   rW   Úresult)r   r‡   Út1Út2r   )r   r   Útest_exception_waiter  s    z!StreamTests.test_exception_waiterc             C   sn   t j| jd}t j| ¡ | jd}t | j¡ | ¡  t | j¡ | t	dƒ¡ t | j¡ |  
|jd ¡ d S )N)r
   Úmessage)r   r   r
   rK   r   r   r   ÚcancelrV   ÚRuntimeErrorr   Ú_waiter)r   r   Útr   r   r   Útest_exception_cancel*  s    z!StreamTests.test_exception_cancelc                s¢   G dd„ dƒ}‡ fdd„}|ˆ j ƒ}| ¡ }ˆ j  tj||ƒˆ j d¡}| ¡  ˆ  |d¡ |ˆ j ƒ}| ¡ }ˆ j  tj||ƒˆ j d¡}| ¡  ˆ  |d¡ d S )Nc               @   s<   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ ZdS )z/StreamTests.test_start_server.<locals>.MyServerc             S   s   d | _ || _d S )N)Úserverr
   )r   r
   r   r   r   Ú__init__:  s    z8StreamTests.test_start_server.<locals>.MyServer.__init__c             Ó   s2   |  ¡ I d H }| |¡ | ¡ I d H  | ¡  d S )N)r   r   Údrainr   )r   Úclient_readerÚclient_writerr(   r   r   r   Úhandle_client>  s    
z=StreamTests.test_start_server.<locals>.MyServer.handle_clientc             S   s8   t   ¡ }| d¡ | j tj| j|| jd¡| _| ¡ S )N)z	127.0.0.1r   )Úsockr
   )	ÚsocketÚbindr
   r   r   Ústart_serverr™   r”   Úgetsockname)r   rš   r   r   r   ÚstartD  s    
z5StreamTests.test_start_server.<locals>.MyServer.startc             S   s   | j  |  ||¡¡ d S )N)r
   Úcreate_taskr™   )r   r—   r˜   r   r   r   Úhandle_client_callbackM  s    zFStreamTests.test_start_server.<locals>.MyServer.handle_client_callbackc             S   sN   t   ¡ }| d¡ | ¡ }| ¡  | j tj| j|d |d | jd¡| _	|S )N)z	127.0.0.1r   r   é   )ÚhostÚportr
   )
r›   rœ   rž   r   r
   r   r   r   r¡   r”   )r   rš   Úaddrr   r   r   Ústart_callbackQ  s    
z>StreamTests.test_start_server.<locals>.MyServer.start_callbackc             S   s0   | j d k	r,| j  ¡  | j | j  ¡ ¡ d | _ d S )N)r”   r   r
   r   Úwait_closed)r   r   r   r   Ústop\  s    

z4StreamTests.test_start_server.<locals>.MyServer.stopN)	Ú__name__Ú
__module__Ú__qualname__r•   r™   rŸ   r¡   r¦   r¨   r   r   r   r   ÚMyServer8  s   	r¬   c             “   s@   t j| dˆ jiŽI d H \}}| d¡ | ¡ I d H }| ¡  |S )Nr
   s   hello world!
)r   r+   r
   r   r   r   )r¥   r%   r&   Úmsgback)r   r   r   Úclientb  s    
z-StreamTests.test_start_server.<locals>.client)r
   s   hello world!
)r
   rŸ   r   r   rK   r¨   r    r¦   )r   r¬   r®   r”   r¥   Úmsgr   )r   r   Útest_start_server6  s    *

zStreamTests.test_start_serverc          	      sÎ   G dd„ dƒ}‡ fdd„}t  ¡ J}|ˆ j|ƒ}| ¡  ˆ j tj||ƒˆ jd¡}| ¡  ˆ  |d¡ W d Q R X t  ¡ J}|ˆ j|ƒ}| 	¡  ˆ j tj||ƒˆ jd¡}| ¡  ˆ  |d¡ W d Q R X d S )Nc               @   s<   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ ZdS )z4StreamTests.test_start_unix_server.<locals>.MyServerc             S   s   d | _ || _|| _d S )N)r”   r
   Úpath)r   r
   r±   r   r   r   r•     s    z=StreamTests.test_start_unix_server.<locals>.MyServer.__init__c             Ó   s2   |  ¡ I d H }| |¡ | ¡ I d H  | ¡  d S )N)r   r   r–   r   )r   r—   r˜   r(   r   r   r   r™   †  s    
zBStreamTests.test_start_unix_server.<locals>.MyServer.handle_clientc             S   s$   | j  tj| j| j| j d¡| _d S )N)r±   r
   )r
   r   r   Ústart_unix_serverr™   r±   r”   )r   r   r   r   rŸ   Œ  s    z:StreamTests.test_start_unix_server.<locals>.MyServer.startc             S   s   | j  |  ||¡¡ d S )N)r
   r    r™   )r   r—   r˜   r   r   r   r¡   ’  s    zKStreamTests.test_start_unix_server.<locals>.MyServer.handle_client_callbackc             S   s(   t j| j| j| jd}| j |¡| _d S )N)r±   r
   )r   r²   r¡   r±   r
   r   r”   )r   rŸ   r   r   r   r¦   –  s    
zCStreamTests.test_start_unix_server.<locals>.MyServer.start_callbackc             S   s0   | j d k	r,| j  ¡  | j | j  ¡ ¡ d | _ d S )N)r”   r   r
   r   r§   )r   r   r   r   r¨   œ  s    

z9StreamTests.test_start_unix_server.<locals>.MyServer.stopN)	r©   rª   r«   r•   r™   rŸ   r¡   r¦   r¨   r   r   r   r   r¬     s   r¬   c             “   s>   t j| ˆ jdI d H \}}| d¡ | ¡ I d H }| ¡  |S )N)r
   s   hello world!
)r   r1   r
   r   r   r   )r±   r%   r&   r­   )r   r   r   r®   ¢  s    
z2StreamTests.test_start_unix_server.<locals>.client)r
   s   hello world!
)
r   Úunix_socket_pathr
   rŸ   r   r   rK   r¨   r    r¦   )r   r¬   r®   r±   r”   r¯   r   )r   r   Útest_start_unix_server|  s     #

z"StreamTests.test_start_unix_serverÚwin32zDon't have pipesc          	      sþ   d}t  ¡ \}}tjd|t|ƒg}t|ddƒ}tj| jdd}tj	|| jd‰ | j 
| j ‡ fdd	„|¡¡\}}t ¡ }	|	 | j¡ z@t |	¡ tj||h| jd
œŽ}
| j 
|
¡}| j 
| ¡ ¡ W d t d ¡ X t  |¡ | j 
| d¡¡}|  |d¡ d S )NzHimport os, sys
fd = int(sys.argv[1])
os.write(fd, b'data')
os.close(fd)
z-cÚrbr   r¢   )r
   rY   )r
   c                  s   ˆ S )Nr   r   )Úprotocolr   r   Ú<lambda>Ó  rB   z<StreamTests.test_read_all_from_pipe_reader.<locals>.<lambda>)Úpass_fdsr
   rS   s   data)ÚosÚpipeÚsysÚ
executabler‚   Úopenr   r   r
   ÚStreamReaderProtocolr   Úconnect_read_pipeÚSafeChildWatcherÚattach_loopÚset_child_watcherÚcreate_subprocess_execr‰   r   r!   r    )r   ÚcodeZrfdZwfdÚargsr»   r%   Ú	transportÚ_ÚwatcherÚcreateÚprocr(   r   )r·   r   Útest_read_all_from_pipe_reader¾  s*    

z*StreamTests.test_read_all_from_pipe_readerc             C   s6   |   tjd ¡ t | j¡ t ¡ }|  |j| j¡ d S )N)Ú
addCleanupr   r   r
   r   r   r   )r   r%   r   r   r   Útest_streamreader_constructorå  s    z)StreamTests.test_streamreader_constructorc             C   s@   |   tjd ¡ t | j¡ t ¡ }t |¡}|  |j| j¡ d S )N)	rÍ   r   r   r
   r   ÚMockr¿   r   r   )r   r%   r·   r   r   r   Ú%test_streamreaderprotocol_constructorî  s
    
z1StreamTests.test_streamreaderprotocol_constructorc          	      s|   t  ¡ ‰ ‡ fdd„}‡fdd„}tj|d}| d¡ | ¡  ˆ  ¡ }ˆ tt	f¡ ˆj
 ||Ž ¡ W d Q R X | ¡  d S )Nc           	      sV   t   ¡ } | @ |  d¡ |  d¡ |  ¡ }ˆ  |¡ |  ¡ \}}| ¡  W d Q R X d S )N)Ú	localhostr   r¢   )r›   rœ   Úlistenrž   ÚputÚacceptr   )rš   r¥   ZcltrÈ   )Úqr   r   r”     s    


z-StreamTests.test_drain_raises.<locals>.serverc             “   s>   t j| |ˆ jdI d H \}}x| d¡ | ¡ I d H  qW d S )N)r
   s   foo
)r   r+   r
   r   r–   )r£   r¤   r%   r&   )r   r   r   r®     s
    
z-StreamTests.test_drain_raises.<locals>.client)ÚtargetT)ÚqueueÚQueueÚ	threadingÚThreadÚ	setDaemonrŸ   Úgetr>   ÚConnectionResetErrorÚBrokenPipeErrorr
   r   Újoin)r   r”   r®   Úthreadr¥   r   )rÕ   r   r   Útest_drain_raisesø  s    	
zStreamTests.test_drain_raisesc             C   s"   t j| jd}|  dt|ƒ¡ d S )N)r
   z<StreamReader>)r   r   r
   r    Úrepr)r   r   r   r   r   Útest___repr__#  s    zStreamTests.test___repr__c             C   s$   t j| jdd}|  dt|ƒ¡ d S )Né{   )r
   rY   z<StreamReader limit=123>)r   r   r
   r    râ   )r   r   r   r   r   Útest___repr__nondefault_limit'  s    z)StreamTests.test___repr__nondefault_limitc             C   s*   t j| jd}| ¡  |  dt|ƒ¡ d S )N)r
   z<StreamReader eof>)r   r   r
   rQ   r    râ   )r   r   r   r   r   Útest___repr__eof+  s    zStreamTests.test___repr__eofc             C   s,   t j| jd}| d¡ |  dt|ƒ¡ d S )N)r
   s   dataz<StreamReader 4 bytes>)r   r   r
   rC   r    râ   )r   r   r   r   r   Útest___repr__data0  s    
zStreamTests.test___repr__datac             C   s2   t j| jd}tƒ }| |¡ |  dt|ƒ¡ d S )N)r
   z'<StreamReader exception=RuntimeError()>)r   r   r
   r   rV   r    râ   )r   r   r…   r   r   r   Útest___repr__exception5  s
    
z"StreamTests.test___repr__exceptionc             C   sb   t j| jd}t j| jd|_|  t|ƒd¡ |j d ¡ | j |j¡ d |_|  	dt|ƒ¡ d S )N)r
   z,<StreamReader waiter=<Future pending[\S ]*>>z<StreamReader>)
r   r   r
   ÚFuturer‘   ÚassertRegexrâ   Ú
set_resultr   r    )r   r   r   r   r   Útest___repr__waiter<  s    zStreamTests.test___repr__waiterc             C   sB   t j| jd}t ¡ |_t ¡ |j_d|jj_|  dt	|ƒ¡ d S )N)r
   z<Transport>z$<StreamReader transport=<Transport>>)
r   r   r
   r   rÏ   Ú
_transportÚ__repr__r   r    râ   )r   r   r   r   r   Útest___repr__transportG  s
    

z"StreamTests.test___repr__transportc          
   C   sˆ   t  dd¡}xvttjd ƒD ]d}| j|dN t tj||d¡}|  t	|ƒt	|ƒ¡ |  |j
|j
¡ |  |j|j¡ W d Q R X qW d S )Ns   abcé
   r¢   )Úpickle_protocol)r·   )r   rs   ÚrangeÚpickleÚHIGHEST_PROTOCOLÚsubTestÚloadsÚdumpsr    r‚   ru   rw   )r   ÚeÚprotoÚe2r   r   r   Ú#test_IncompleteReadError_pickleableN  s    z/StreamTests.test_IncompleteReadError_pickleablec          
   C   sx   t  dd¡}xfttjd ƒD ]T}| j|d> t tj||d¡}|  t	|ƒt	|ƒ¡ |  |j
|j
¡ W d Q R X qW d S )NrŽ   rð   r¢   )rñ   )r·   )r   rz   rò   ró   rô   rõ   rö   r÷   r    r‚   Úconsumed)r   rø   rù   rú   r   r   r   Ú!test_LimitOverrunError_pickleableW  s    z-StreamTests.test_LimitOverrunError_pickleablec          	   C   sº   t  ¡ ¨}| j tj|jd| jiŽ¡\}}| d¡ | ¡ }| j |¡}|  	|d¡ | 
¡ }| j |¡}|  | d¡¡ |  | ¡ ¡ | ¡  |  | ¡ ¡ | j | ¡ ¡ W d Q R X d S )Nr
   s   GET / HTTP/1.0

s   HTTP/1.0 200 OK
s   

Test message)r   r*   r
   r   r   r+   r,   r   r   r    r!   r"   r#   ra   Ú
is_closingr   r§   )r   r-   ÚrdÚwrr'   r(   r   r   r   Útest_wait_closed_on_close_  s    

z%StreamTests.test_wait_closed_on_closec          	   C   sz   t  ¡ h}| j tj|jd| jiŽ¡\}}| d¡ | ¡ }| j |¡}|  	|d¡ | 
¡  | j | ¡ ¡ W d Q R X d S )Nr
   s   GET / HTTP/1.0

s   HTTP/1.0 200 OK
)r   r*   r
   r   r   r+   r,   r   r   r    r   r§   )r   r-   rÿ   r   r'   r(   r   r   r   Ú*test_wait_closed_on_close_with_unread_datap  s    

z6StreamTests.test_wait_closed_on_close_with_unread_data)Kr©   rª   r«   rF   r   r   r   Úpatchr   r)   r/   r   Úskip_unless_bind_unix_socketr2   r3   ÚunittestÚskipIfr5   r7   r:   r?   r@   rA   rE   rG   rH   rN   rP   rR   rT   rX   r[   r]   r_   r`   rc   rf   rh   ri   rj   rk   rl   ro   rp   rr   rx   r{   r}   r€   r   rƒ   r„   r†   r   r“   r°   r´   r¼   ÚplatformrÌ   rÎ   rÐ   rá   rã   rå   ræ   rç   rè   rì   rï   rû   rý   r  r  Ú__classcell__r   r   )r   r   r      s~   
		/#FB'	
+	r   Ú__main__)Ú__doc__r   rº   r×   ró   r›   r¼   rÙ   r  r   Útestr   r5   ÚImportErrorr   Ztest.test_asyncior   r   ÚTestCaser   r©   Úmainr   r   r   r   Ú<module>   s2   
      m