Your IP : 216.73.216.213


Current Path : /opt/alt/python34/lib64/python3.4/test/test_asyncio/__pycache__/
Upload File :
Current File : //opt/alt/python34/lib64/python3.4/test/test_asyncio/__pycache__/test_unix_events.cpython-34.pyc

�
f fA��@sqdZddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlmZej
dkr�ejd��nddlZddlmZddlmZddlmZejZd	d
�Zejed�Gdd
�d
ej��Zejeed�d�Gdd�dej��ZGdd�dej�ZGdd�dej�ZGdd�dej�ZGdd�dej�Zejddddddf�Z Gd d!�d!�Z!Gd"d#�d#e!ej�Z"Gd$d%�d%e!ej�Z#Gd&d'�d'ej�Z$e%d(krmej&�ndS))zTests for unix_events.py.�N)�mock�win32z	UNIX only)�log)�
test_utils)�unix_eventscCs-|jdkrdS|jj�d|_dS)N)Z_pipe�close)�	transport�r	�G/opt/alt/python34/lib64/python3.4/test/test_asyncio/test_unix_events.py�close_pipe_transports
rzSignals are not supportedc@s�eZdZdd�Zdd�Zdd�Zdd�Zejd	�d
d��Z	ejd	�dd
��Z
ejd	�dd��Zejd	�dd��Zejd	�ejd�dd���Z
ejd	�ejd�dd���Zejd	�dd��Zejd	�dd��Zejd	�ejd�dd���Zejd	�dd��Zejd	�dd ��Zejd	�d!d"��Zd#S)$�SelectorEventLoopSignalTestscCs#tj�|_|j|j�dS)N)�asyncio�SelectorEventLoop�loop�set_event_loop)�selfr	r	r
�setUp)sz"SelectorEventLoopSignalTests.setUpcCs=|jt|jjd�|jt|jjtjd�dS)N�1�)�assertRaises�	TypeErrorrZ
_check_signal�
ValueError�signal�NSIG)rr	r	r
�test_check_signal-sz.SelectorEventLoopSignalTests.test_check_signalcCs|jjtjd�dS)Nr)r�_handle_signalrr)rr	r	r
�test_handle_signal_no_handler3sz:SelectorEventLoopSignalTests.test_handle_signal_no_handlercCs�tjtj�fdtj��}|j�||jjtjd<tj�|j_	|jj
tjd�|jj	jtjd�dS)Nrr)r
�Handler�MockZcancelr�_signal_handlersrr�remove_signal_handlerr�assert_called_with)r�hr	r	r
�$test_handle_signal_cancelled_handler6s
zASelectorEventLoopSignalTests.test_handle_signal_cancelled_handlerzasyncio.unix_events.signalcCsAtj|_t|j_|jt|jjtj	dd��dS)NcSsdS)NTr	r	r	r	r
�<lambda>GszRSelectorEventLoopSignalTests.test_add_signal_handler_setup_error.<locals>.<lambda>)
rrr�
set_wakeup_fd�side_effectr�RuntimeErrorr�add_signal_handler�SIGINT)r�m_signalr	r	r
�#test_add_signal_handler_setup_error?s	z@SelectorEventLoopSignalTests.test_add_signal_handler_setup_errorcCs}tj|_tjdd��}|}|�}|j|j�x6||fD](}|jtd|jj	tj
|�qMWdS)Ncss
gDdHdS)Nr	r	r	r	r
�simple_coroutineMsz^SelectorEventLoopSignalTests.test_add_signal_handler_coroutine_error.<locals>.simple_coroutinez1coroutines cannot be used with add_signal_handler)rrr
Z	coroutine�
addCleanupr�assertRaisesRegexrrr(r))rr*r,Z	coro_funcZcoro_obj�funcr	r	r
�'test_add_signal_handler_coroutine_errorIs		zDSelectorEventLoopSignalTests.test_add_signal_handler_coroutine_errorcCsptj|_dd�}|jjtj|�|jjjtj�}|j|tj	�|j
|j|�dS)NcSsdS)NTr	r	r	r	r
r$_szFSelectorEventLoopSignalTests.test_add_signal_handler.<locals>.<lambda>)rrrr(�SIGHUPr�get�assertIsInstancer
r�assertEqualZ	_callback)rr*�cbr"r	r	r
�test_add_signal_handler[sz4SelectorEventLoopSignalTests.test_add_signal_handlercCsltj|_dd�}||_Gdd�dt�}||j_|j||jjtjdd��dS)NcSs|dkrt��ndS)Nr���)r)�fdr	r	r
r%iszYSelectorEventLoopSignalTests.test_add_signal_handler_install_error.<locals>.set_wakeup_fdc@seZdZejZdS)zOSelectorEventLoopSignalTests.test_add_signal_handler_install_error.<locals>.ErrN)�__name__�
__module__�__qualname__�errnoZEFAULTr	r	r	r
�Errnsr=cSsdS)NTr	r	r	r	r
r$uszTSelectorEventLoopSignalTests.test_add_signal_handler_install_error.<locals>.<lambda>)	rrr%�OSErrorr&rrr(r))rr*r%r=r	r	r
�%test_add_signal_handler_install_errores		zBSelectorEventLoopSignalTests.test_add_signal_handler_install_errorzasyncio.base_events.loggercCs�tj|_Gdd�dt�}||j_dd�|jjtj<|jt|jj	tj
dd��|j|jj
�|jd|jj�dS)Nc@seZdZejZdS)zPSelectorEventLoopSignalTests.test_add_signal_handler_install_error2.<locals>.ErrN)r9r:r;r<�EINVALr	r	r	r
r=|sr=cSsdS)NTr	r	r	r	r
r$�szUSelectorEventLoopSignalTests.test_add_signal_handler_install_error2.<locals>.<lambda>cSsdS)NTr	r	r	r	r
r$�sr)rrr>r&rrr1rr'r(r)�assertFalse�info�calledr4r%�
call_count)r�	m_loggingr*r=r	r	r
�&test_add_signal_handler_install_error2ws	zCSelectorEventLoopSignalTests.test_add_signal_handler_install_error2cCs�Gdd�dt�}||j_tj|_|jt|jjtjdd��|j	|j
j�|jd|j
j�dS)Nc@seZdZejZdS)zPSelectorEventLoopSignalTests.test_add_signal_handler_install_error3.<locals>.ErrN)r9r:r;r<r@r	r	r	r
r=�sr=cSsdS)NTr	r	r	r	r
r$�szUSelectorEventLoopSignalTests.test_add_signal_handler_install_error3.<locals>.<lambda>�)r>rr&rrr'rr(r)rArBrCr4r%rD)rrEr*r=r	r	r
�&test_add_signal_handler_install_error3�s	zCSelectorEventLoopSignalTests.test_add_signal_handler_install_error3cCs�tj|_|jjtjdd��|j|jjtj��|j|jj�|j|jj�|j	tj|j
f|jjd�dS)NcSsdS)NTr	r	r	r	r
r$�szISelectorEventLoopSignalTests.test_remove_signal_handler.<locals>.<lambda>r)rrrr(r1�
assertTruer r%rCr4�SIG_DFL�	call_args)rr*r	r	r
�test_remove_signal_handler�sz7SelectorEventLoopSignalTests.test_remove_signal_handlercCs�tj|_tj|_|jjtjdd��t�|jjtj<|jj	�|j
|jjtj��|j|jj
�|j
|jj
�|jtj|jf|jjd�dS)NcSsdS)NTr	r	r	r	r
r$�szKSelectorEventLoopSignalTests.test_remove_signal_handler_2.<locals>.<lambda>r)rrr)rr(�objectrr1r%�
reset_mockrIr rArCr4�default_int_handlerrK)rr*r	r	r
�test_remove_signal_handler_2�s
z9SelectorEventLoopSignalTests.test_remove_signal_handler_2cCs[tj|_|jjtjdd��t|j_|jjtj�|j	|j
�dS)NcSsdS)NTr	r	r	r	r
r$�szWSelectorEventLoopSignalTests.test_remove_signal_handler_cleanup_error.<locals>.<lambda>)rrrr(r1rr%r&r rIrB)rrEr*r	r	r
�(test_remove_signal_handler_cleanup_error�s
zESelectorEventLoopSignalTests.test_remove_signal_handler_cleanup_errorcCsTtj|_|jjtjdd��t|j_|jt|jjtj�dS)NcSsdS)NTr	r	r	r	r
r$�szOSelectorEventLoopSignalTests.test_remove_signal_handler_error.<locals>.<lambda>)	rrrr(r1r>r&rr )rr*r	r	r
� test_remove_signal_handler_error�s
z=SelectorEventLoopSignalTests.test_remove_signal_handler_errorcCsjtj|_|jjtjdd��Gdd�dt�}||j_|jt|jj	tj�dS)NcSsdS)NTr	r	r	r	r
r$�szPSelectorEventLoopSignalTests.test_remove_signal_handler_error2.<locals>.<lambda>c@seZdZejZdS)zKSelectorEventLoopSignalTests.test_remove_signal_handler_error2.<locals>.ErrN)r9r:r;r<r@r	r	r	r
r=�sr=)
rrrr(r1r>r&rr'r )rr*r=r	r	r
�!test_remove_signal_handler_error2�sz>SelectorEventLoopSignalTests.test_remove_signal_handler_error2cCs�tj|_|jjtjdd��|jjtjdd��|jt|jj�d�|j	j
�|jj�|jt|jj�d�|j	jd�dS)NcSsdS)NTr	r	r	r	r
r$�sz9SelectorEventLoopSignalTests.test_close.<locals>.<lambda>cSsdS)NTr	r	r	r	r
r$�srGrrr7)
rrrr(r1�SIGCHLDr4�lenrr%rNr�assert_called_once_with)rr*r	r	r
�
test_close�s

z'SelectorEventLoopSignalTests.test_closeN)r9r:r;rrrr#r�patchr+r0r6r?rFrHrLrPrQrRrSrWr	r	r	r
r&s&	




r�AF_UNIXzUNIX Sockets are not supportedc@s�eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Ze	j
d
�dd��Zdd�Zdd�Z
dd�Zdd�ZdS)� SelectorEventLoopUnixSocketTestscCs#tj�|_|j|j�dS)N)r
rrr)rr	r	r
r�sz&SelectorEventLoopUnixSocketTests.setUpcCs�tj��w}tjtj�}|j|�|�I|jjdd�|�}|jtd��|jj	|�WdQXWdQXWdQXdS)NcSsdS)Nr	r	r	r	r
r$�sz]SelectorEventLoopUnixSocketTests.test_create_unix_server_existing_path_sock.<locals>.<lambda>zAddress.*is already in use)
rZunix_socket_path�socketrY�bindr�create_unix_serverr.r>�run_until_complete)r�path�sock�coror	r	r
�*test_create_unix_server_existing_path_sock�s
	
zKSelectorEventLoopUnixSocketTests.test_create_unix_server_existing_path_sockcCs`tj��N}|jjdd�|j�}|jtd��|jj|�WdQXWdQXdS)NcSsdS)Nr	r	r	r	r
r$�sz`SelectorEventLoopUnixSocketTests.test_create_unix_server_existing_path_nonsock.<locals>.<lambda>zAddress.*is already in use)�tempfileZNamedTemporaryFilerr]�namer.r>r^)r�filerar	r	r
�-test_create_unix_server_existing_path_nonsock�s
	
zNSelectorEventLoopUnixSocketTests.test_create_unix_server_existing_path_nonsockc	CsQ|jjdd�dddd�}|jtd��|jj|�WdQXdS)NcSsdS)Nr	r	r	r	r
r$szSSelectorEventLoopUnixSocketTests.test_create_unix_server_ssl_bool.<locals>.<lambda>r_�spam�sslTz"ssl argument must be an SSLContext)rr]r.rr^)rrar	r	r
� test_create_unix_server_ssl_bools
		
zASelectorEventLoopUnixSocketTests.test_create_unix_server_ssl_boolc	CsK|jjdd�dd�}|jtd��|jj|�WdQXdS)NcSsdS)Nr	r	r	r	r
r$szXSelectorEventLoopUnixSocketTests.test_create_unix_server_nopath_nosock.<locals>.<lambda>r_z#path was not specified, and no sock)rr]r.rr^)rrar	r	r
�%test_create_unix_server_nopath_nosocks	
zFSelectorEventLoopUnixSocketTests.test_create_unix_server_nopath_nosockcCsjtj�}|�R|jjdd�ddd|�}|jtd��|jj|�WdQXWdQXdS)NcSsdS)Nr	r	r	r	r
r$szXSelectorEventLoopUnixSocketTests.test_create_unix_server_path_inetsock.<locals>.<lambda>r_r`z!A UNIX Domain Socket was expected)r[rr]r.rr^)rr`rar	r	r
�%test_create_unix_server_path_inetsock
s		
zFSelectorEventLoopUnixSocketTests.test_create_unix_server_path_inetsockzasyncio.unix_events.socketcCs�tj�}||j_t|j_|jjdd�dd�}|j	t��|jj
|�WdQX|j|jj
�t|j_|jjdd�dd�}|j	t��|jj
|�WdQX|j|jj
�dS)NcSsdS)Nr	r	r	r	r
r$szUSelectorEventLoopUnixSocketTests.test_create_unix_server_bind_error.<locals>.<lambda>r_z/testcSsdS)Nr	r	r	r	r
r$#s)rrr[�return_valuer>r\r&rr]rr^rIrrC�MemoryError)rZm_socketr`rar	r	r
�"test_create_unix_server_bind_errorszCSelectorEventLoopUnixSocketTests.test_create_unix_server_bind_errorc	CsT|jjdd�tjdt��}|jtd��|jj|�WdQXdS)NcSsdS)Nr	r	r	r	r
r$*szXSelectorEventLoopUnixSocketTests.test_create_unix_connection_path_sock.<locals>.<lambda>r`zpath and sock can not be)r�create_unix_connection�os�devnullrMr.rr^)rrar	r	r
�%test_create_unix_connection_path_sock(s	zFSelectorEventLoopUnixSocketTests.test_create_unix_connection_path_sockc	CsH|jjdd�d�}|jtd��|jj|�WdQXdS)NcSsdS)Nr	r	r	r	r
r$0sz\SelectorEventLoopUnixSocketTests.test_create_unix_connection_nopath_nosock.<locals>.<lambda>zno path and sock were specified)rror.rr^)rrar	r	r
�)test_create_unix_connection_nopath_nosock.s
		
zJSelectorEventLoopUnixSocketTests.test_create_unix_connection_nopath_nosockc	CsQ|jjdd�tjdd�}|jtd��|jj|�WdQXdS)NcSsdS)Nr	r	r	r	r
r$7sz_SelectorEventLoopUnixSocketTests.test_create_unix_connection_nossl_serverhost.<locals>.<lambda>Zserver_hostnamergz"server_hostname is only meaningful)rrorprqr.rr^)rrar	r	r
�,test_create_unix_connection_nossl_serverhost5s
		
zMSelectorEventLoopUnixSocketTests.test_create_unix_connection_nossl_serverhostc	CsQ|jjdd�tjdd�}|jtd��|jj|�WdQXdS)NcSsdS)Nr	r	r	r	r
r$>sz_SelectorEventLoopUnixSocketTests.test_create_unix_connection_ssl_noserverhost.<locals>.<lambda>rhTz/you have to pass server_hostname when using ssl)rrorprqr.rr^)rrar	r	r
�,test_create_unix_connection_ssl_noserverhost<s
	
zMSelectorEventLoopUnixSocketTests.test_create_unix_connection_ssl_noserverhostN)r9r:r;rrbrfrirjrkrrXrnrrrsrtrur	r	r	r
rZ�s
	rZc@sQeZdZdd�Zddd�Zdd�Zejd�d	d
��Zejd�dd��Z	ejd�d
d��Z
ejd�ejd�dd���Zejd�dd��Zejd�dd��Z
ejd�dd��Zejd�dd��Zejd�dd��Zdd�Zdd�ZdS) �UnixReadPipeTransportTestscCs�|j�|_tjtj�|_tjdt	j
�|_d|jj_
tjd�}|j�|j|j�tjd�}|j�}tj�}tj|_||_
|j|j�dS)N�spec_set�z$asyncio.unix_events._set_nonblockingzos.fstat)�
new_test_looprr�make_test_protocolr
ZProtocol�protocolrr�io�	RawIOBase�pipe�filenorlrX�startr-�stop�stat�S_IFIFO�st_mode)r�blocking_patcher�
fstat_patcher�m_fstat�str	r	r
rHs
	z UnixReadPipeTransportTests.setUpNcCs8tj|j|j|jd|�}|jt|�|S)N�waiter)rZ_UnixReadPipeTransportrr~r{r-r)rr�rr	r	r
�read_pipe_transportYs
		z.UnixReadPipeTransportTests.read_pipe_transportcCswtjd|j�}|jd|�}|jj|�|jjj|�|jjd|j	�|j
|j��dS)Nrr�rx)r
�Futurerr�r^r{�connection_mader!�
assert_reader�_read_ready�assertIsNone�result)rr��trr	r	r
�	test_ctor`sz$UnixReadPipeTransportTests.test_ctorzos.readcCsI|j�}d|_|j�|jd|j�|jjjd�dS)Nsdatarx)r�rlr�r!�max_sizer{�
data_received)r�m_readr�r	r	r
�test__read_readyis
	
z+UnixReadPipeTransportTests.test__read_readycCs||j�}d|_|j�|jd|j�|j|jj�tj	|j�|j
jj�|j
jjd�dS)N�rx)
r�rlr�r!r�rAr�readersr�run_brieflyr{Zeof_received�connection_lost)rr�r�r	r	r
�test__read_ready_eofrs	
z/UnixReadPipeTransportTests.test__read_ready_eofcCs\|j�}t|_|j�|jd|j�tj|j�|j	|j
jj�dS)Nrx)
r��BlockingIOErrorr&r�r!r�rr�rrAr{r�rC)rr�r�r	r	r
�test__read_ready_blocked~s	
z3UnixReadPipeTransportTests.test__read_ready_blockedzasyncio.log.logger.errorcCs�|j�}t�}||_tj�|_|j�|jd|j�|jj|�|jt	j
d�dtttf�dS)Nrxz;Fatal read error on pipe transport
protocol:.*
transport:.*�exc_info)r�r>r&rr�_closer�r!r�r�MockPattern�MOCK_ANY)rr��m_logexcr��errr	r	r
�test__read_ready_error�s		
	z1UnixReadPipeTransportTests.test__read_ready_errorcCsL|j�}tj�}|jjd|�|j�|j|jj�dS)Nrx)r�rrr�
add_readerZ
pause_readingrAr�)rr�r��mr	r	r
�test_pause_reading�s

z-UnixReadPipeTransportTests.test_pause_readingcCs0|j�}|j�|jjd|j�dS)Nrx)r�Zresume_readingrr�r�)rr�r�r	r	r
�test_resume_reading�s
z.UnixReadPipeTransportTests.test_resume_readingcCs9|j�}tj�|_|j�|jjd�dS)N)r�rrr�rr!)rr�r�r	r	r
rW�s
z%UnixReadPipeTransportTests.test_closecCsE|j�}d|_tj�|_|j�|j|jj�dS)NT)r��_closingrrr�rrArC)rr�r�r	r	r
�test_close_already_closing�s
	
z5UnixReadPipeTransportTests.test_close_already_closingcCso|j�}t�}|j|�|j|j��|j|jj�tj	|j�|j
jj|�dS)N)
r�rMr�rI�
is_closingrArr�rr�r{r�r!)rr�r�r�r	r	r
�test__close�s	
z&UnixReadPipeTransportTests.test__closecCs�|j�}|j|j�|j|j�d}|j|�|jjj|�|jj	j�|j
|j�|j
|j�dS)N)r��assertIsNotNone�	_protocol�_loop�_call_connection_lostr{r�r!r~rr�)rr�r�r	r	r
�test__call_connection_lost�s
z5UnixReadPipeTransportTests.test__call_connection_lostcCs�|j�}|j|j�|j|j�t�}|j|�|jjj|�|j	j
j�|j|j�|j|j�dS)N)r�r�r�r�r>r�r{r�r!r~rr�)rr�r�r	r	r
�#test__call_connection_lost_with_err�s	
z>UnixReadPipeTransportTests.test__call_connection_lost_with_err)r9r:r;rr�r�rrXr�r�r�r�r�r�rWr�r�r�r�r	r	r	r
rvFs		


rvc@s/eZdZdd�Zddd�Zdd�Zdd	�Zejd
�dd��Z	ejd
�d
d��Z
ejd
�dd��Zejd
�dd��Zejd
�dd��Z
ejd�ejd
�dd���Zejd
�dd��Zdd�Zejd
�dd��Zejd
�dd��Zejd
�d d!��Zejd
�d"d#��Zejd$�ejd
�d%d&���Zejd
�d'd(��Zejd
�d)d*��Zd+d,�Zd-d.�Zd/d0�Zd1d2�Zd3d4�Zd5d6�ZdS)7�UnixWritePipeTransportTestscCs�|j�|_tjtj�|_tjdt	j
�|_d|jj_
tjd�}|j�|j|j�tjd�}|j�}tj�}tj|_||_
|j|j�dS)Nrwrxz$asyncio.unix_events._set_nonblockingzos.fstat)ryrrrzr
ZBaseProtocolr{rrr|r}r~rrlrXr�r-r�r��S_IFSOCKr�)rr�r�r�r�r	r	r
r�s
	z!UnixWritePipeTransportTests.setUpNcCs8tj|j|j|jd|�}|jt|�|S)Nr�)rZ_UnixWritePipeTransportrr~r{r-r)rr�rr	r	r
�write_pipe_transport�s
		z0UnixWritePipeTransportTests.write_pipe_transportcCsztjd|j�}|jd|�}|jj|�|jjj|�|jjd|j	�|j
d|j��dS)Nrr�rx)r
r�rr�r^r{r�r!r�r�r4r�)rr�r�r	r	r
r��sz%UnixWritePipeTransportTests.test_ctorcCs#|j�}|j|j��dS)N)r�rIZ
can_write_eof)rr�r	r	r
�test_can_write_eof�sz.UnixWritePipeTransportTests.test_can_write_eofzos.writecCs\|j�}d|_|jd�|jdd�|j|jj�|jg|j�dS)N�sdatarx)	r�rl�writer!rAr�writersr4�_buffer)r�m_writer�r	r	r
�
test_writes	
z&UnixWritePipeTransportTests.test_writecCsS|j�}|jd�|j|j�|j|jj�|jg|j�dS)Nr�)r�r�rArCrr�r4r�)rr�r�r	r	r
�test_write_no_datas

z.UnixWritePipeTransportTests.test_write_no_datacCsb|j�}d|_|jd�|jdd�|jjd|j�|jdg|j�dS)NrGsdatarxsta)	r�rlr�r!r�
assert_writer�_write_readyr4r�)rr�r�r	r	r
�test_write_partials	
z.UnixWritePipeTransportTests.test_write_partialcCs~|j�}|jjd|j�dg|_|jd�|j|j�|jjd|j�|j	ddg|j�dS)Nrxsprevioussdata)
r�r�
add_writerr�r�r�rArCr�r4)rr�r�r	r	r
�test_write_buffers
z-UnixWritePipeTransportTests.test_write_buffercCse|j�}t�|_|jd�|jdd�|jjd|j�|jdg|j	�dS)Nsdatarx)
r�r�r&r�r!rr�r�r4r�)rr�r�r	r	r
�test_write_again&s
z,UnixWritePipeTransportTests.test_write_againzasyncio.unix_events.loggercCs|j�}t�}||_tj�|_|jd�|jdd�|j|j	j
�|jg|j�|jj|d�|jd|j
�|jd�|jd|j
�|jd�|jd�|jd�|jd�|jjd�|j�dS)Nsdatarxz#Fatal write error on pipe transportrrGz=pipe closed by peer or os.write(pipe, data) raised exception.)r�r>r&rrZ_fatal_errorr�r!rArr�r4r��
_conn_lost�warningr)rr�Zm_logr�r�r	r	r
�test_write_err/s*		
	




	z*UnixWritePipeTransportTests.test_write_errcCsZ|j�}|j�|jd�|j|jd�|jd�|j|jd�dS)NsdatarrG)r�r�r�r4r�)rr�r�r	r	r
�test_write_closeJs


z,UnixWritePipeTransportTests.test_write_closecCsv|j�}|j�|j|jj�|j|jj�|j|j��tj	|j�|j
jjd�dS)N)
r�r�rArr�r�rIr�rr�r{r�r!)rr�r	r	r
r�Ts
z,UnixWritePipeTransportTests.test__read_readycCs~|j�}|jjd|j�ddg|_d|_|j�|jdd�|j|jj�|j	g|j�dS)Nrxsdastar�sdata)
r�rr�r�r�rlr!rAr�r4)rr�r�r	r	r
�test__write_ready]s	
z-UnixWritePipeTransportTests.test__write_readycCs�|j�}|jjd|j�ddg|_d|_|j�|jdd�|jjd|j�|jdg|j�dS)Nrxsdasta�sdata�a)	r�rr�r�r�rlr!r�r4)rr�r�r	r	r
�test__write_ready_partialhs	
z5UnixWritePipeTransportTests.test__write_ready_partialcCs�|j�}|jjd|j�ddg|_t�|_|j�|jdd�|jjd|j�|j	dg|j�dS)Nrxsdastasdata)
r�rr�r�r�r�r&r!r�r4)rr�r�r	r	r
�test__write_ready_againss
z3UnixWritePipeTransportTests.test__write_ready_againcCs�|j�}|jjd|j�ddg|_d|_|j�|jdd�|jjd|j�|jdg|j�dS)Nrxsdastarsdata)	r�rr�r�r�rlr!r�r4)rr�r�r	r	r
�test__write_ready_empty~s	
z3UnixWritePipeTransportTests.test__write_ready_emptyzasyncio.log.logger.errorcCs|j�}|jjd|j�ddg|_t�|_}|j�|jdd�|j|jj	�|j|jj
�|jg|j�|j|j
��|jtjd�dtttf�|jd|j�tj|j�|jjj|�dS)Nrxsdastasdataz<Fatal write error on pipe transport
protocol:.*
transport:.*r�r)r�rr�r�r�r>r&r!rAr�r�r4rIr�rr�r�r�r�r{r�)rr�r�r�r�r	r	r
�test__write_ready_err�s"
	z1UnixWritePipeTransportTests.test__write_ready_errcCs�|j�}|jjd|j�d|_ddg|_d|_|j�|jdd�|j|jj	�|j|jj
�|jg|j�|jj
jd�|jjj�dS)NrxTsdastar�sdata)r�rr�r�r�r�rlr!rAr�r�r4r{r�r~r)rr�r�r	r	r
�test__write_ready_closing�s		
z5UnixWritePipeTransportTests.test__write_ready_closingcCs�|j�}|jjd|j�|jjd|j�ddg|_|j�|j|j	�|j|jj
�|j|jj�|jg|j�|j
|j��tj|j�|jjjd�dS)Nrxsdasta)r�rr�r�r�r�r��abortrArCr�r�r4rIr�rr�r{r�r!)rr�r�r	r	r
�
test_abort�s
z&UnixWritePipeTransportTests.test_abortcCs�|j�}|j|j�|j|j�d}|j|�|jjj|�|jj	j�|j
|j�|j
|j�dS)N)r�r�r�r�r�r{r�r!r~rr�)rr�r�r	r	r
r��s
z6UnixWritePipeTransportTests.test__call_connection_lostcCs�|j�}|j|j�|j|j�t�}|j|�|jjj|�|j	j
j�|j|j�|j|j�dS)N)r�r�r�r�r>r�r{r�r!r~rr�)rr�r�r	r	r
r��s	
z?UnixWritePipeTransportTests.test__call_connection_lost_with_errcCs@|j�}tj�|_|j�|jj�|j�dS)N)r�rr�	write_eofrr!)rr�r	r	r
rW�s


z&UnixWritePipeTransportTests.test_closecCsE|j�}tj�|_d|_|j�|j|jj�dS)NT)r�rrr�r�rrArC)rr�r	r	r
�test_close_closing�s
	
z.UnixWritePipeTransportTests.test_close_closingcCsc|j�}|j�|j|j��|j|jj�tj|j�|j	j
jd�dS)N)r�r�rIr�rArr�rr�r{r�r!)rr�r	r	r
�test_write_eof�s
z*UnixWritePipeTransportTests.test_write_eofcCsO|j�}dg|_|j�|j|j��|j|jjj�dS)Nsdata)	r�r�r�rIr�rAr{r�rC)rr�r	r	r
�test_write_eof_pending�s

z2UnixWritePipeTransportTests.test_write_eof_pending)r9r:r;rr�r�r�rrXr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rWr�r�r�r	r	r	r
r��s6			
	
	

	r�c@seZdZdd�ZdS)�AbstractChildWatcherTestscCs�tj�}tj�}|jt|j||�|jt|j|�|jt|j|�|jt|j	�|jt|j
�|jt|j|||�dS)N)rrr
ZAbstractChildWatcherr�NotImplementedError�add_child_handler�remove_child_handler�attach_loopr�	__enter__�__exit__)r�f�watcherr	r	r
�test_not_implemented�s

z.AbstractChildWatcherTests.test_not_implementedN)r9r:r;r�r	r	r	r
r��sr�c@seZdZdd�ZdS)�BaseChildWatcherTestscCs2tj�}tj�}|jt|j|�dS)N)rrrZBaseChildWatcherrr�Z_do_waitpid)rr�r�r	r	r
r�sz*BaseChildWatcherTests.test_not_implementedN)r9r:r;r�r	r	r	r
r�
sr��WaitPidMocks�waitpid�	WIFEXITED�WIFSIGNALED�WEXITSTATUS�WTERMSIGc@s�eZdZejjejd�Zdd�Z	dd�Z
dd�Zdd	�Zd
d�Z
dd
�Zdd�Zdd�Zdd�Zedd��Zedd��Zedd��Zedd��Zedd��Zedd��Zed d!��Zed"d#��Zed$d%��Zed&d'��Zed(d)��Zed*d+��Zed,d-��Zed.d/��Zd0S)1�ChildWatcherTestsMixinr�c	Csk|j�|_d|_i|_tjj|jd��,|_|j�|_	|j	j
|j�WdQXdS)NFr()ryr�running�zombiesrrXrM�m_add_signal_handler�create_watcherr�r�)rr	r	r
r s			zChildWatcherTestsMixin.setUpcCs�t|jtj�s!|dkr4|j|d�ny3|dkrP|jj�S||jj|�fSWntk
r{YnX|j	r�dSt
��dS)Nrrr7)rr)�
isinstancer�r
�SafeChildWatcherZ
assertGreaterr��popitem�pop�KeyErrorr��ChildProcessError)r�pid�flagsr	r	r
r�*s!

	zChildWatcherTestsMixin.waitpidcCs|d|j|<dS)Ni�)r�)rr��
returncoder	r	r
�
add_zombie9sz!ChildWatcherTestsMixin.add_zombiecCs
|dkS)Ni�r	)r�statusr	r	r
r�<sz ChildWatcherTestsMixin.WIFEXITEDcCsd|kodkSS)Ni�i�r	)rr�r	r	r
r�?sz"ChildWatcherTestsMixin.WIFSIGNALEDcCs|j|j|��|dS)Ni�)rIr�)rr�r	r	r
r�Bsz"ChildWatcherTestsMixin.WEXITSTATUScCs|j|j|��d|S)Ni�)rIr�)rr�r	r	r
r�FszChildWatcherTestsMixin.WTERMSIGcCs |jjtj|jj�dS)N)r�rVrrTr��	_sig_chld)rr	r	r
�test_create_watcherJs	z*ChildWatcherTestsMixin.test_create_watchercs�fdd�}|S)Nc+s�dd�}|d|j���}|d|j��w}|d|j��\}|d|j��A}|d|j��&}�|t|||||��WdQXWdQXWdQXWdQXWdQXdS)NcSstj|d|dtj�S)N�wrapsZnew_callable)rrXr)�target�wrapperr	r	r
rXPszIChildWatcherTestsMixin.waitpid_mocks.<locals>.wrapped_func.<locals>.patchzos.WTERMSIGzos.WEXITSTATUSzos.WIFSIGNALEDzos.WIFEXITEDz
os.waitpid)r�r�r�r�r�r�)rrXZ
m_WTERMSIGZ
m_WEXITSTATUSZ
m_WIFSIGNALEDZm_WIFEXITEDZ	m_waitpid)r/r	r
�wrapped_funcOsz:ChildWatcherTestsMixin.waitpid_mocks.<locals>.wrapped_funcr	)r/r�r	)r/r
�
waitpid_mocksNsz$ChildWatcherTestsMixin.waitpid_mockscCs�tj�}|j�*d|_|jjd|ddd�WdQX|j|j�|j|jj�|j|jj�|j|j	j�|j|j
j�|jj�|j|j�|j|jj�|j|jj�|j|j	j�|j|j
j�d|_|jdd�|jj�|j
|jj�|j
|j	j�|j|j
j�|jddddd�|jj�|jj�|j	j�|j�|jdd�|j�|jj�WdQX|j|j�|j|j
j�|jj�|jj�|j	j�|jj�|jj�|j|j�|j|jj�|j|jj�|j|j	j�|j|j
j�dS)	NT�*�	�
�F��
)rrr�r�r�rArCr�r�r�r�r�r�rIrVrN�ignore_warningsr��clear)rr��callbackr	r	r
�test_sigchld_sR
	"
	










z#ChildWatcherTestsMixin.test_sigchldcCs�tj�}tj�}|j�'d|_|jjd|dd�WdQX|j|j�|j|j�|j|jj�|j|jj�|j|j	j�|j|j
j�|j�|jjd|dd�WdQX|j|j�|j|j�|j|jj�|j|jj�|j|j	j�|j|j
j�|jj�|j|j�|j|j�|j|jj�|j|jj�|j|j	j�|j|j
j�|jdd
�|jj�|j
dddd�|j|j�|j|jj�|j|j	j�|j|j
j�|jj�|jj�|j
j�|j�|jj�|j|j�|j|j�|j|jj�|j|jj�|j|j	j�|j|j
j�|jdd	�d
|_|jj�|j
dd	dd�|j|j�|j|jj�|j|j	j�|j|j
j�|jj�|jj�|j	j�|j�|jdd�|jdd�|j�|jj�WdQX|j|j�|j|j�|j|j
j�|jj�|jj�|j	j�|jj�|jj�|j|j�|j|j�|j|jj�|j|jj�|j|j	j�|j|j
j�dS)NT�+���,��r��lFr����r)rrr�r�r�rArCr�r�r�r�r�r�rVrIrNrr�r)rr��	callback1�	callback2r	r	r
�test_sigchld_two_children�s�
	







	










z0ChildWatcherTestsMixin.test_sigchld_two_childrencCs.tj�}tj�}|j�'d|_|jjd|dd�WdQX|j|j�|j|j�|j|jj�|j|jj�|j|j	j�|j|j
j�|j�|jjd|dd�WdQX|j|j�|j|j�|j|jj�|j|jj�|j|j	j�|j|j
j�|jj�|j|j�|j|j�|j|jj�|j|jj�|j|j	j�|j|j
j�|jdd�|jdd
�d
|_|jj�|j
dddd�|j
dddd�|j|jj�|j|jj�|j|j	j�|j|j
j�|jj�|jj�|j
j�|j	j�|j�|j�|jdd�|jdd�|j�|jj�WdQX|j|j�|j|j�|j|j
j�dS)NT�-�r
�.i{r
�NrxFrr���r)rrr�r�r�rArCr�r�r�r�r�r�rVrIrNr)rr�rrr	r	r
�.test_sigchld_two_children_terminating_togethersb
	

	







zEChildWatcherTestsMixin.test_sigchld_two_children_terminating_togethercCs�tj�}|j�;|jdd�|jj�|jjd|dd�WdQX|jdddd�|j�|jdd�|j�|jj�WdQX|j	|j
�dS)N�2r�rrr7)rrr�r�r�r�rVrNrrArC)rr�rr	r	r
�test_sigchld_race_conditionIs



z2ChildWatcherTestsMixin.test_sigchld_race_conditioncCs\tj�}tj�}|j�$d|_|jjd|d�WdQX|j|j�|j|j�|j|jj�|j|jj�|j|j	j�|j|j
j�|j�|jjd|d�WdQX|j|j�|j|j�|j|jj�|j|jj�|j|j	j�|j|j
j�d|_|jdd�|jj�|j
dd	d�|j|j�|j|jj�|j|j	j�|j|j
j�|jj�|jj�|j
j�|j�|jdd�|j�|jj�WdQX|j|j�|j|j�|j|j
j�dS)
NT�3��Fr
ri����i����)rrr�r�r�rArCr�r�r�r�r�r�rVrIrNr)rr�rrr	r	r
�test_sigchld_replace_handler_sJ
	
	





z3ChildWatcherTestsMixin.test_sigchld_replace_handlercCsMtj�}|j�$d|_|jjd|d�WdQX|j|j�|j|jj�|j|jj�|j|j	j�|j|j
j�|jjd�|j|j�|j|jj�|j|jj�|j|j	j�|j|j
j�d|_|jdd�|j
�|jj�WdQX|j|j�dS)NT�4i�F�c)rrr�r�r�rArCr�r�r�r�r�r�rr�)rr�rr	r	r
�test_sigchld_remove_handler�s(
		
z2ChildWatcherTestsMixin.test_sigchld_remove_handlercCs~tj�}|j�$d|_|jjd|d�WdQX|j|j�|j|jj�|j|jj�|j|j	j�|j|j
j�d|jd<d|_|jj�|j
ddd�|j|jj�|j|jj�|j|j	j�|j|j
j�|j�|jj�|jj�|jdd�|j�|jj�WdQX|j|j�dS)	NT�5ri�F�ei��i��)rrr�r�r�rArCr�r�r�r�r�r�rVrIrNr�r)rr�rr	r	r
�test_sigchld_unknown_status�s0
	
	




z2ChildWatcherTestsMixin.test_sigchld_unknown_statuscCsptj�}tj�}tj�}|j�Pd|_|jjd|d�|jjd|d�|jjd|d�WdQX|j|jjd��|j|jjd��|j|jjd��|j|jjd��|jdd�|jdd�|jdd�d	|_|j	�|jj
�WdQX|j|j�|j|j�|jddd�dS)
NT�6r�7rG�8r�rF)
rrr�r�r�rIr�rAr�rr�rCrV)rr�rr�	callback3r	r	r
�test_remove_child_handler�s*
		
z0ChildWatcherTestsMixin.test_remove_child_handlercCs�tj�}|j�!d|_|jjd|�WdQXt|j_tjj	t
jd��0}|j|jj
�d�|j|j�WdQXdS)NT�9�error)rrr�r�r�rr�r&rXrMr�loggerr4r�rIrC)rr�rZm_errorr	r	r
� test_sigchld_unhandled_exception�s
	z7ChildWatcherTestsMixin.test_sigchld_unhandled_exceptioncCs&tj�}|j�!d|_|jjd|�WdQX|j|j�|j|jj�|j|jj�|j|j	j�|j|j
j�d|_|jdd�tj
dtj�|j
j�|j�|jj�WdQXt|jtj�r|j|j�n|jdd�dS)NT�:Fr��)rrr�r�r�rArCr�r�r�r�r�rpr��WNOHANGrNrr�r�r
�FastChildWatcherrV)rr�rr	r	r
�#test_sigchld_child_reaped_elsewheres$
		

z:ChildWatcherTestsMixin.test_sigchld_child_reaped_elsewherecCs�tj�}tj�}|j�q|j�ad|_|jdd�|jdd�|jj�|jjd|�|jjd|�WdQXWdQX|jdd�|j	|j
�dS)NTiOr	iQriP)rrrr�r�r�r�r�rVrArC)rr�rrr	r	r
�,test_sigchld_unknown_pid_during_registration/s	
zCChildWatcherTestsMixin.test_sigchld_unknown_pid_during_registrationcCstj�}|j�!d|_|jjd|�WdQX|j}|j�|_tjj}||d��^}||jd��C}|jj	|j�|j
tj�|j
tj|jj
�WdQXWdQXd|_|jdd�|jj
�|j
dd�dS)NT�<r r(Fr�)rrr�r�r�rryrXrMr�rVrrTr�r�)rr�r�old_looprXZm_old_removeZ	m_new_addr	r	r
�
test_set_loopDs$
		
	
z$ChildWatcherTestsMixin.test_set_loopcCstj�}tj�}tj�}|j�Gd|_|jjd|�|jjd|�|jjd|�WdQX|j}d|_tjj|d��'}|jjd�|j	t
j�WdQX|jdd�|jdd�|j
|j�|j
|j�|j
|j�|j�|_tjj|jd��c}|jj|j�|j	t
j|jj�|j	dd�|j	dd�|j
|j�WdQX|j�|j�d	|_|jdd
�|jj�|j
|j�|j
|j�|j	dd
�dS)
NT�=�>inr �rxr(Frrr)rrr�r�r�rrXrMr�rVrrTr�rArCryr�rN)rr�rrr)r6�m_remove_signal_handlerr�r	r	r
�test_set_loop_race_conditioncsJ
					

	
z3ChildWatcherTestsMixin.test_set_loop_race_conditioncCsHtj�}|j�-d|_|jdd�|jdd�|jj�|jjd|�|jjd|�|jt|jj	�d�t
|jtj�r�|jt|jj
�d�ntjj|jd��b}|jj�|jtj�|j|jj	�t
|jtj�r8|j|jj
�nWdQXWdQXdS)	NT�?r��Ar
�@rr )rrr�r�r�r�r�r4rUZ
_callbacksr�r
r2Z_zombiesrXrMrrrVrrTrA)rr�rr;r	r	r
rW�s(
	
	

z!ChildWatcherTestsMixin.test_closeN) r9r:r;rrXrMrr-rrr�r�r�r�r�r�r�r�rrrrrr"r%r*r.r3r4r7r<rWr	r	r	r
r�s0
=hE5 %!#<r�c@seZdZdd�ZdS)�SafeChildWatcherTestscCs
tj�S)N)r
r�)rr	r	r
r��sz$SafeChildWatcherTests.create_watcherN)r9r:r;r�r	r	r	r
r@�sr@c@seZdZdd�ZdS)�FastChildWatcherTestscCs
tj�S)N)r
r2)rr	r	r
r��sz$FastChildWatcherTests.create_watcherN)r9r:r;r�r	r	r	r
rA�srAc@sXeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
S)�PolicyTestscCs
tj�S)N)r
ZDefaultEventLoopPolicy)rr	r	r
�
create_policy�szPolicyTests.create_policycCsx|j�}|j|j�|j�}|j|tj�|j|j|�|j||j��|j|j�dS)N)	rCr��_watcher�get_child_watcherr3r
r��assertIsr�)r�policyr�r	r	r
�test_get_child_watcher�sz"PolicyTests.test_get_child_watchercCsR|j�}tj�}|j|�|j|j|�|j||j��dS)N)rCr
r2Zset_child_watcherrFrDrE)rrGr�r	r	r
� test_get_child_watcher_after_set�s

z,PolicyTests.test_get_child_watcher_after_setcCsh|j�}|j�}|j|j�|j�}|j|tj�|j|j	|�|j
�dS)N)rC�get_event_loopr�rDrEr3r
r�rFr�r)rrGrr�r	r	r
�-test_get_child_watcher_with_mainloop_existing�sz9PolicyTests.test_get_child_watcher_with_mainloop_existingcsK��fdd�}�j��tjd|�}|j�|j�dS)Ncso�j�j���j�j�tj��j�}�j|tj��j|j	��j�j
�dS)N)r�new_event_loopr3rJr
ZAbstractEventLooprEr�r�r�r)r�)rGrr	r
r��s
z4PolicyTests.test_get_child_watcher_thread.<locals>.fr�)rC�	threadingZThreadr��join)rr�Zthr	)rGrr
�test_get_child_watcher_thread�s

z)PolicyTests.test_get_child_watcher_threadcCs�|j�}|j�}|j�}|j|j|�|j�}|j|�|j|j|�|jd�|j|jd�|j�|j�dS)N)rCrJrErFr�rLrr)rrGrr�Znew_loopr	r	r
�,test_child_watcher_replace_mainloop_existings


z8PolicyTests.test_child_watcher_replace_mainloop_existingN)	r9r:r;rCrHrIrKrOrPr	r	r	r
rB�srB�__main__)'�__doc__�collectionsr<r|rprr[r��sysrcrMZunittestr�platformZSkipTestr
rrr�ANYr�rZ
skipUnlessZTestCaser�hasattrrZrvr�r�r��
namedtupler�r�r@rArBr9�mainr	r	r	r
�<module>sX		�]��		���N