B
    v9aj‚  ã               @   s¸   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 )é    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ÚasyncioZnew_event_loopÚloopÚset_event_loop)Úself)Ú	__class__© ú"/usr/lib/python3.7/test_streams.pyr      s    

zStreamTests.setUpc                s,   t  | j¡ | j ¡  t ¡  tƒ  ¡  d S )N)Ú
test_utilsÚrun_brieflyr	   ÚcloseÚgcZ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Ú_loopZ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	   r0   )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)r1   Ú )r2   Zserver_hostnamer	   )r   r-   r   r.   r)   r3   r	   r0   )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   Z	_protocolZ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	   r9   )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   r-   r   r.   r)   r	   r9   )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	   r=   ÚDATAr   r>   )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   r<   )	r   r   r	   r=   r@   r   r   r   r>   )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)r=   r@   r   )r   r   r   r   Úcb–   s    z!StreamTests.test_read.<locals>.cbr<   )
r   r   r	   ÚTaskr   Ú	call_soonr   r   r@   r>   )r   Ú	read_taskrD   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	   r=   r   r   r   r>   )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   rD   ®   s    z%StreamTests.test_read_eof.<locals>.cbr<   )	r   r   r	   rE   r   rF   r   r   r>   )r   rG   rD   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)r=   rK   r   )r   r   r   rD   »   s    

z+StreamTests.test_read_until_eof.<locals>.cbs   chunk1
chunk2r<   )	r   r   r	   rE   r   rF   r   r   r>   )r   rG   rD   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	   r=   r   r   r   Úset_exceptionÚ
ValueErrorr8   )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	   rM   )ÚassertRaisesRegexrQ   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é   )rS   r	   s   chunkrI   r<   )r   r   r	   r=   r   r   r   r>   )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)r=   r   )r   r   r   rD   æ   s    

z%StreamTests.test_readline.<locals>.cbs   chunk1 chunk2 chunk3 
s    chunk4)
r   r   r	   r=   rE   r   rF   r   r   r>   )r   rG   rD   Ú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 )NrV   )rS   r	   s   lis
   ne1
line2
s   line2
s   ne1r<   )
r   r   r	   r=   r8   rQ   r   r   r   r>   )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	   ÚassertFalseZat_eofr=   r   r   rK   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é   )rS   r	   c                  s*   ˆ   d¡ ˆ   d¡ ˆ   d¡ ˆ  ¡  d S )Ns   chunk1s   chunk2s   chunk3
)r=   rK   r   )r   r   r   rD     s    


z+StreamTests.test_readline_limit.<locals>.cbr<   c                  s*   ˆ   d¡ ˆ   d¡ ˆ   d¡ ˆ  ¡  d S )Ns   chunk1s   chunk2
s   chunk3
)r=   rK   r   )r   r   r   rD   -  s    


s   chunk3
s   1234567
s	   12345678
s   12345678)r   r   r	   rF   r8   rQ   r   r   r   r>   r=   )r   rD   rX   Ú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	   r=   r@   r   r   r   r>   )r   r   rX   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	   r=   rK   r   r   r   )r   r   rX   r   r   r   Útest_readline_eofU  s
    
zStreamTests.test_readline_eofc             C   s6   t j| jd}| ¡  | j | ¡ ¡}|  d|¡ d S )N)r	   r<   )r   r   r	   rK   r   r   r   )r   r   rX   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	   r]   s   line2
ls   ine3
)
r   r   r	   r=   r@   r   r   r   r   r>   )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
r<   )r   r   r	   r=   r   r   r   rP   rQ   r8   r>   )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 ber<   )Ú	separator)r   r   r	   rT   rQ   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)rf   r<   s
   lineAAAxxxs   xxx)r   r   r	   r=   r   rg   r   r>   )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
   QWEaaXYaaar<   s   XYas   aas   Xaaas   XXXs   XXXaaa)r   r   r	   r=   r   rg   r   r>   )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   AAAr<   )r   r   r	   r=   rK   r8   ÚIncompleteReadErrorr   rg   r   Ú	exceptionÚpartialÚassertIsNoneÚexpectedr>   )r   r   r^   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 )	NrV   )r	   rS   s   some dataAAz	not founds   AAAó   Azis founds   some dataAAA)
r   r   r	   r=   rT   ÚLimitOverrunErrorr   rg   r   r>   )r   r   r^   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   r<   zless than zerorM   )r   r   r	   r=   r@   r   Úreadexactlyr   r>   rT   rQ   )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	   rO   c                  s(   ˆ  ˆ j¡ ˆ  ˆ j¡ ˆ  ˆ j¡ d S )N)r=   r@   r   )r   r   r   r   rD   å  s    z(StreamTests.test_readexactly.<locals>.cb)r   r   r	   Úlenr@   rE   ru   rF   r   r   r>   )r   ÚnrG   rD   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 )NrV   )rS   r	   s   chunkrI   r<   )r   r   r	   r=   r   ru   r   r>   )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	   rO   c                  s   ˆ  ˆ j¡ ˆ ¡  d S )N)r=   r@   rK   r   )r   r   r   r   rD   ü  s    z,StreamTests.test_readexactly_eof.<locals>.cbz-18 bytes read on a total of 36 expected bytesr<   )r   r   r	   rw   r@   rE   ru   rF   r8   rl   r   r   rm   rn   rp   Ústrr>   )r   rx   rG   rD   r^   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
rO   s   li)
r   r   r	   r=   r   ru   r   rP   rQ   r8   )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	   ro   rm   rQ   rP   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)rP   rQ   r   )r   r   r   Úset_err  s    z2StreamTests.test_exception_waiter.<locals>.set_err)r   r   r	   Ú	coroutinerE   r   r   Úwaitr8   rQ   Úresult)r   r€   Zt1Z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	   rE   r   r   r   ZcancelrP   Ú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   rE   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   r.   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   Zunix_socket_pathr	   r•   r   r   rE   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	   rS   )r	   c                  s   ˆ S )Nr   r   )Úprotocolr   r   Ú<lambda>Ó  r<   z<StreamTests.test_read_all_from_pipe_reader.<locals>.<lambda>)Zpass_fdsr	   rM   s   data)ÚosÚpipeÚsysÚ
executabler{   Úopenr   r   r	   ÚStreamReaderProtocolr   Zconnect_read_pipeZSafeChildWatcherZattach_loopZset_child_watcherZcreate_subprocess_execr‚   r   r   r   )r   ÚcodeZrfdZwfdÚargsr¯   r"   Z	transportÚ_ZwatcherZ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)Z	localhostr   r˜   )r‘   r’   Zlistenr”   ZputZ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)ÚqueueZQueueÚ	threadingZThreadZ	setDaemonr•   Úgetr8   ÚConnectionResetErrorÚBrokenPipeErrorr	   r   Újoin)r   rŠ   r¤   Z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	   rS   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	   rK   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	   r=   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†   rP   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	   ZFuturer‡   ZassertRegexrÆ   Z
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»   Z
_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   rl   ÚrangeÚpickleÚHIGHEST_PROTOCOLÚsubTestÚloadsÚdumpsr   r{   rn   rp   )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   rs   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    r[   Z
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¡   r@   r   r   r   Zpatchr   r&   r,   r   Zskip_unless_bind_unix_socketr/   r0   ÚunittestZskipIfr2   r4   r6   r9   r:   r;   r?   rA   rB   rH   rJ   rL   rN   rR   rU   rW   rY   rZ   r\   r_   ra   rb   rc   rd   re   rh   ri   rk   rq   rt   rv   ry   rz   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__)r   r®   r¿   rÓ   r‘   r°   rÀ   râ   r   Ztestr   r2   ÚImportErrorr   Ztest.test_asyncior   r   ZTestCaser   rŸ   Úmainr   r   r   r   Ú<module>   s0   
      m