Your IP : 216.73.216.213


Current Path : /opt/alt/python310/lib64/python3.10/test/test_asyncio/__pycache__/
Upload File :
Current File : //opt/alt/python310/lib64/python3.10/test/test_asyncio/__pycache__/test_unix_events.cpython-310.pyc

o

0�iu��@sdZddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddlm
Z
ddlmZddlmZe	jdkrNe�d��ddlZddlmZdd	lmZdd
lmZdd�Ze
jZd
d�Zdd�Zdd�Ze�ed�Gdd�dej ��Z!e�e"ed�d�Gdd�dej ��Z#e�e"ed�d�Gdd�dej ��Z$Gdd�dej �Z%Gd d!�d!ej �Z&Gd"d#�d#ej �Z'Gd$d%�d%ej �Z(Gd&d'�d'�Z)Gd(d)�d)e)ej �Z*Gd*d+�d+e)ej �Z+Gd,d-�d-ej �Z,Gd.d/�d/ej �Z-e.d0k�re�/�dSdS)1zTests for unix_events.py.�N)�mock)�	os_helper)�
socket_helperZwin32z	UNIX only)�log)�unix_events)�utilscCst�d�dS�N)�asyncioZset_event_loop_policy�r
r
�I/opt/alt/python310/lib64/python3.10/test/test_asyncio/test_unix_events.py�tearDownModule�rcCsd|S)N��r
)Zexitcoder
r
r�EXITCODE$�rcCs,d|kr
dksntd|����d|S)N��Dzinvalid signum r)�AssertionError)Zsignumr
r
r�SIGNAL(srcCs"|jdurdS|j��d|_dSr)Z_pipe�close)�	transportr
r
r�close_pipe_transport.s


rzSignals are not supportedcsFeZdZ�fdd�Zdd�Zdd�Zdd�Ze�d	�d
d��Z	e�d	�dd
��Z
e�d	�dd��Ze�d	�dd��Ze�d	�e�d�dd���Z
e�d	�e�d�dd���Ze�d	�dd��Ze�d	�dd��Ze�d	�e�d�dd���Ze�d	�dd��Ze�d	�dd ��Ze�d	�d!d"��Ze�d#�e�d	�d$d%���Z�ZS)&�SelectorEventLoopSignalTestsc�$t���t��|_|�|j�dSr��super�setUpr	ZSelectorEventLoop�loop�set_event_loop��self��	__class__r
rr:�

z"SelectorEventLoopSignalTests.setUpcCs.|�t|jjd�|�t|jjtjd�dS)N�1r)�assertRaises�	TypeErrorrZ
_check_signal�
ValueError�signal�NSIGrr
r
r�test_check_signal?s
��z.SelectorEventLoopSignalTests.test_check_signalcCs|j�tjd�dS)Nr)r�_handle_signalr(r)rr
r
r�test_handle_signal_no_handlerEsz:SelectorEventLoopSignalTests.test_handle_signal_no_handlercCshtjt��dt��d�}|��||jjtjd<t��|j_	|j�
tjd�|jj	�tjd�dS)Nr
)rr)r	�Handler�Mock�cancelr�_signal_handlersr(r)�remove_signal_handlerr+�assert_called_with)r �hr
r
r�$test_handle_signal_cancelled_handlerHs�zASelectorEventLoopSignalTests.test_handle_signal_cancelled_handlerzasyncio.unix_events.signalcCs6tj|_tj|_t|j_|�t|jj	tj
dd��dS)NcS�dS�NTr
r
r
r
r�<lambda>Z�zRSelectorEventLoopSignalTests.test_add_signal_handler_setup_error.<locals>.<lambda>)r(r)�
valid_signalsr'�
set_wakeup_fd�side_effectr%�RuntimeErrorr�add_signal_handler�SIGINT�r �m_signalr
r
r�#test_add_signal_handler_setup_errorQs
�z@SelectorEventLoopSignalTests.test_add_signal_handler_setup_errorcCsPtj|_dd�}|}|�}|�|j�||fD]}|�td|jjtj|�qdS)Nc�s�dSrr
r
r
r
r�simple_coroutine`s�z^SelectorEventLoopSignalTests.test_add_signal_handler_coroutine_error.<locals>.simple_coroutinez1coroutines cannot be used with add_signal_handler)	r(r)�
addCleanupr�assertRaisesRegexr&rr=r>)r r@rBZ	coro_funcZcoro_obj�funcr
r
r�'test_add_signal_handler_coroutine_error\s��zDSelectorEventLoopSignalTests.test_add_signal_handler_coroutine_errorcCsXtj|_tj|_dd�}|j�tj|�|jj�tj�}|�|t	j
�|�|j|�dS)NcSr5r6r
r
r
r
rr7rr8zFSelectorEventLoopSignalTests.test_add_signal_handler.<locals>.<lambda>)
r(r)r9rr=�SIGHUPr0�get�assertIsInstancer	r-�assertEqualZ	_callback)r r@�cbr3r
r
r�test_add_signal_handlermsz4SelectorEventLoopSignalTests.test_add_signal_handlercCsTtj|_tj|_dd�}||_Gdd�dt�}||j_|�||jjtj	dd��dS)NcSs|dkrt��dS)N���)r')�fdr
r
rr:}s�zYSelectorEventLoopSignalTests.test_add_signal_handler_install_error.<locals>.set_wakeup_fdc@�eZdZejZdS)zOSelectorEventLoopSignalTests.test_add_signal_handler_install_error.<locals>.ErrN)�__name__�
__module__�__qualname__�errnoZEFAULTr
r
r
r�Err��
rTcSr5r6r
r
r
r
rr7�r8zTSelectorEventLoopSignalTests.test_add_signal_handler_install_error.<locals>.<lambda>)
r(r)r9r:�OSErrorr;r%rr=r>)r r@r:rTr
r
r�%test_add_signal_handler_install_errorxs
�zBSelectorEventLoopSignalTests.test_add_signal_handler_install_errorzasyncio.base_events.loggercCsvtj|_tj|_Gdd�dt�}||j_dd�|jjtj<|�t	|jj
tjdd��|�|j
j�|�d|jj�dS)Nc@rO)zPSelectorEventLoopSignalTests.test_add_signal_handler_install_error2.<locals>.ErrN�rPrQrRrSZEINVALr
r
r
rrT�rUrTcSr5r6r
r
r
r
rr7�r8zUSelectorEventLoopSignalTests.test_add_signal_handler_install_error2.<locals>.<lambda>cSr5r6r
r
r
r
rr7�r8r)r(r)r9rVr;rr0rGr%r<r=r>�assertFalse�info�calledrJr:�
call_count�r �	m_loggingr@rTr
r
r�&test_add_signal_handler_install_error2�s
�zCSelectorEventLoopSignalTests.test_add_signal_handler_install_error2cCsdGdd�dt�}||j_tj|_tj|_|�t|jjtj	dd��|�
|jj�|�
d|jj�dS)Nc@rO)zPSelectorEventLoopSignalTests.test_add_signal_handler_install_error3.<locals>.ErrNrXr
r
r
rrT�rUrTcSr5r6r
r
r
r
rr7�r8zUSelectorEventLoopSignalTests.test_add_signal_handler_install_error3.<locals>.<lambda>�)rVr(r;r)r9r%r<rr=r>rYrZr[rJr:r\r]r
r
r�&test_add_signal_handler_install_error3�s
�zCSelectorEventLoopSignalTests.test_add_signal_handler_install_error3cCsttj|_tj|_|j�tjdd��|�|j�tj��|�|jj	�|�|jj	�|�
tj|jf|jjd�dS)NcSr5r6r
r
r
r
rr7�r8zISelectorEventLoopSignalTests.test_remove_signal_handler.<locals>.<lambda>r)
r(r)r9rr=rG�
assertTruer1r:r[rJ�SIG_DFL�	call_argsr?r
r
r�test_remove_signal_handler�s��z7SelectorEventLoopSignalTests.test_remove_signal_handlercCs�tj|_tj|_tj|_|j�tjdd��t�|jjtj<|j	�
�|�|j�tj��|�
|j	j�|�|jj�|�tj|jf|jjd�dS)NcSr5r6r
r
r
r
rr7�r8zKSelectorEventLoopSignalTests.test_remove_signal_handler_2.<locals>.<lambda>r)r(r)r>r9rr=�objectr0rGr:�
reset_mockrbr1rYr[rJ�default_int_handlerrdr?r
r
r�test_remove_signal_handler_2�s
�

�z9SelectorEventLoopSignalTests.test_remove_signal_handler_2cCsJtj|_tj|_|j�tjdd��t|j_|j�	tj�|�
|j�dS)NcSr5r6r
r
r
r
rr7�r8zWSelectorEventLoopSignalTests.test_remove_signal_handler_cleanup_error.<locals>.<lambda>)r(r)r9rr=rGr'r:r;r1rbrZ)r r^r@r
r
r�(test_remove_signal_handler_cleanup_error�szESelectorEventLoopSignalTests.test_remove_signal_handler_cleanup_errorcCsDtj|_tj|_|j�tjdd��t|j_|�t|jj	tj�dS)NcSr5r6r
r
r
r
rr7�r8zOSelectorEventLoopSignalTests.test_remove_signal_handler_error.<locals>.<lambda>)
r(r)r9rr=rGrVr;r%r1r?r
r
r� test_remove_signal_handler_error�s�z=SelectorEventLoopSignalTests.test_remove_signal_handler_errorcCsTtj|_tj|_|j�tjdd��Gdd�dt�}||j_|�t	|jj
tj�dS)NcSr5r6r
r
r
r
rr7�r8zPSelectorEventLoopSignalTests.test_remove_signal_handler_error2.<locals>.<lambda>c@rO)zKSelectorEventLoopSignalTests.test_remove_signal_handler_error2.<locals>.ErrNrXr
r
r
rrT�rUrT)r(r)r9rr=rGrVr;r%r<r1)r r@rTr
r
r�!test_remove_signal_handler_error2�s�z>SelectorEventLoopSignalTests.test_remove_signal_handler_error2cCs�tj|_tj|_|j�tjdd��|j�tjdd��|�t|jj	�d�|j
��|j��|�t|jj	�d�|j
�
d�dS)NcSr5r6r
r
r
r
rr7�r8z9SelectorEventLoopSignalTests.test_close.<locals>.<lambda>cSr5r6r
r
r
r
rr7�r8r`rrM)r(r)r9rr=rG�SIGCHLDrJ�lenr0r:rgr�assert_called_once_withr?r
r
r�
test_close�s

z'SelectorEventLoopSignalTests.test_closezasyncio.unix_events.syscCs�tj|_tj|_|j�tjdd��|�t|jj�d�d|j	_
|j��|�t
d��
|j��Wd�n1s;wY|�t|jj�d�|�|jj�dS)NcSr5r6r
r
r
r
rr7r8zGSelectorEventLoopSignalTests.test_close_on_finalizing.<locals>.<lambda>rTz skipping signal handlers removalr)r(r)r9rr=rGrJrnr0�
is_finalizing�return_valuerg�assertWarnsRegex�ResourceWarningrrYr[)r r@Zm_sysr
r
r�test_close_on_finalizings
��z5SelectorEventLoopSignalTests.test_close_on_finalizing)rPrQrRrr*r,r4r�patchrArFrLrWr_rarerirjrkrlrpru�
__classcell__r
r
r!rr7sF	












r�AF_UNIXzUNIX Sockets are not supportedcs�eZdZ�fdd�Zejdd��Zejdd��Zdd�Zd	d
�Z	dd�Z
d
d�Zdd�Zdd�Z
e�eed�d�ejdd���Zdd�Zdd�Ze�d�dd��Zdd�Zd d!�Zd"d#�Zd$d%�Zd&d'�Z�ZS)(� SelectorEventLoopUnixSocketTestscrrrrr!r
rrr#z&SelectorEventLoopUnixSocketTests.setUpcCs�t���8}t�tj�}|�|�|�d�|��|j�dd�|�}|j�	|�}|��|j�	|�
��Wd�dS1s?wYdS)NrcS�dSrr
r
r
r
rr7&r8z]SelectorEventLoopUnixSocketTests.test_create_unix_server_existing_path_sock.<locals>.<lambda>)�
test_utils�unix_socket_path�socketrx�bindZlistenrr�create_unix_server�run_until_complete�wait_closed)r �path�sock�coro�srvr
r
r�*test_create_unix_server_existing_path_socks


"�zKSelectorEventLoopUnixSocketTests.test_create_unix_server_existing_path_sockcCsnt���)}t�|�}|j�dd�|�}|j�|�}|��|j�|���Wd�dS1s0wYdS)NcSrzrr
r
r
r
rr7/r8zRSelectorEventLoopUnixSocketTests.test_create_unix_server_pathlib.<locals>.<lambda>)	r{r|�pathlib�Pathrrr�rr�)r r�Zsrv_coror�r
r
r�test_create_unix_server_pathlib+s

"�z@SelectorEventLoopUnixSocketTests.test_create_unix_server_pathlibc	Cs�t���:}t�|�}|j�dd�|�}|�t��|j�|�Wd�n1s)wYWd�dSWd�dS1sAwYdS)NcSrzrr
r
r
r
rr77r8zVSelectorEventLoopUnixSocketTests.test_create_unix_connection_pathlib.<locals>.<lambda>)	r{r|r�r�r�create_unix_connectionr%�FileNotFoundErrorr�)r r�r�r
r
r�#test_create_unix_connection_pathlib4s

��"�zDSelectorEventLoopUnixSocketTests.test_create_unix_connection_pathlibc	Cs�t���7}|j�dd�|j�}|�td��|j�|�Wd�n1s&wYWd�dSWd�dS1s>wYdS)NcSrzrr
r
r
r
rr7?r8z`SelectorEventLoopUnixSocketTests.test_create_unix_server_existing_path_nonsock.<locals>.<lambda>zAddress.*is already in use)�tempfile�NamedTemporaryFilerr�namerDrVr�)r �filer�r
r
r�-test_create_unix_server_existing_path_nonsock=s
���"�zNSelectorEventLoopUnixSocketTests.test_create_unix_server_existing_path_nonsockcC�T|jjdd�ddd�}|�td��|j�|�Wd�dS1s#wYdS)NcSrzrr
r
r
r
rr7Er8zSSelectorEventLoopUnixSocketTests.test_create_unix_server_ssl_bool.<locals>.<lambda>�spamT)r��sslz"ssl argument must be an SSLContext)rrrDr&r��r r�r
r
r� test_create_unix_server_ssl_boolDs��"�zASelectorEventLoopUnixSocketTests.test_create_unix_server_ssl_boolcCsR|jjdd�dd�}|�td��|j�|�Wd�dS1s"wYdS)NcSrzrr
r
r
r
rr7Lr8zXSelectorEventLoopUnixSocketTests.test_create_unix_server_nopath_nosock.<locals>.<lambda>�r�z#path was not specified, and no sock�rrrDr'r�r�r
r
r�%test_create_unix_server_nopath_nosockKs�"�zFSelectorEventLoopUnixSocketTests.test_create_unix_server_nopath_nosockc	Cs�t��}|�8|jjdd�d|d�}|�td��|j�|�Wd�n1s)wYWd�dSWd�dS1sAwYdS)NcSrzrr
r
r
r
rr7Tr8zXSelectorEventLoopUnixSocketTests.test_create_unix_server_path_inetsock.<locals>.<lambda>�r�r��"A UNIX Domain Stream.*was expected)r}rrrDr'r��r r�r�r
r
r�%test_create_unix_server_path_inetsockQs����"�zFSelectorEventLoopUnixSocketTests.test_create_unix_server_path_inetsockc	Cs�t�tjtj�}|�8|jjdd�d|d�}|�td��|j�|�Wd�n1s-wYWd�dSWd�dS1sEwYdS)NcSrzrr
r
r
r
rr7]r8zUSelectorEventLoopUnixSocketTests.test_create_unix_server_path_dgram.<locals>.<lambda>r�r�)r}rxZ
SOCK_DGRAMrrrDr'r�r�r
r
r�"test_create_unix_server_path_dgramZs����"�zCSelectorEventLoopUnixSocketTests.test_create_unix_server_path_dgram�
SOCK_NONBLOCKz$no socket.SOCK_NONBLOCK (linux only)c	Cs�t�tjtjtjB�}t���}|j}Wd�n1swYzD|�*|�|�|jj	dd�d|d�}|j�
|�}|��|j�
|���Wd�n1sRwYWt
�|�dSWt
�|�dSt
�|�w)NcSrzrr
r
r
r
rr7nr8z^SelectorEventLoopUnixSocketTests.test_create_unix_server_path_stream_bittype.<locals>.<lambda>r�)r}rx�SOCK_STREAMr�r�r�r�r~rrr�rr��os�unlink)r r�r��fnr�r�r
r
r�+test_create_unix_server_path_stream_bittypecs&�
�
���zLSelectorEventLoopUnixSocketTests.test_create_unix_server_path_stream_bittypecCr�)NcSrzrr
r
r
r
rr7wr8zfSelectorEventLoopUnixSocketTests.test_create_unix_server_ssl_timeout_with_plain_sock.<locals>.<lambda>r�r�r�Zssl_handshake_timeout�1ssl_handshake_timeout is only meaningful with sslr�r�r
r
r�3test_create_unix_server_ssl_timeout_with_plain_sockv���"�zTSelectorEventLoopUnixSocketTests.test_create_unix_server_ssl_timeout_with_plain_sockc	Cs�t��}|�7|jjdd�|d�}|�td��|j�|�Wd�n1s(wYWd�dSWd�dS1s@wYdS)NcSrzrr
r
r
r
rr7�r8z\SelectorEventLoopUnixSocketTests.test_create_unix_connection_path_inetsock.<locals>.<lambda>�r�r�)r}rr�rDr'r�r�r
r
r�)test_create_unix_connection_path_inetsock~s����"�zJSelectorEventLoopUnixSocketTests.test_create_unix_connection_path_inetsockzasyncio.unix_events.socketcCs�t��}||j_t|j_|jjdd�dd�}|�	t��|j�
|�Wd�n1s,wY|�|jj
�t|j_|jjdd�dd�}|�	t��|j�
|�Wd�n1s\wY|�|jj
�dS)NcSrzrr
r
r
r
rr7�r8zUSelectorEventLoopUnixSocketTests.test_create_unix_server_bind_error.<locals>.<lambda>z/testr�cSrzrr
r
r
r
rr7�r8)rr.r}rrrVr~r;rrr%r�rbrr[�MemoryError)r Zm_socketr�r�r
r
r�"test_create_unix_server_bind_error�s��zCSelectorEventLoopUnixSocketTests.test_create_unix_server_bind_errorcCsX|jjdd�tjt�d�}|�td��|j�|�Wd�dS1s%wYdS)NcSrzrr
r
r
r
rr7�r8zXSelectorEventLoopUnixSocketTests.test_create_unix_connection_path_sock.<locals>.<lambda>r�zpath and sock can not be)rr�r��devnullrfrDr'r�r�r
r
r�%test_create_unix_connection_path_sock�s�"�zFSelectorEventLoopUnixSocketTests.test_create_unix_connection_path_sockcCsP|j�dd�d�}|�td��|j�|�Wd�dS1s!wYdS)NcSrzrr
r
r
r
rr7�r8z\SelectorEventLoopUnixSocketTests.test_create_unix_connection_nopath_nosock.<locals>.<lambda>zno path and sock were specified�rr�rDr'r�r�r
r
r�)test_create_unix_connection_nopath_nosock�s��"�zJSelectorEventLoopUnixSocketTests.test_create_unix_connection_nopath_nosockcC�V|jjdd�tjdd�}|�td��|j�|�Wd�dS1s$wYdS)NcSrzrr
r
r
r
rr7�r8z_SelectorEventLoopUnixSocketTests.test_create_unix_connection_nossl_serverhost.<locals>.<lambda>r�)Zserver_hostnamez"server_hostname is only meaningful�rr�r�r�rDr'r�r�r
r
r�,test_create_unix_connection_nossl_serverhost�s��"�zMSelectorEventLoopUnixSocketTests.test_create_unix_connection_nossl_serverhostcCr�)NcSrzrr
r
r
r
rr7�r8z_SelectorEventLoopUnixSocketTests.test_create_unix_connection_ssl_noserverhost.<locals>.<lambda>T)r�z/you have to pass server_hostname when using sslr�r�r
r
r�,test_create_unix_connection_ssl_noserverhost�s��"�zMSelectorEventLoopUnixSocketTests.test_create_unix_connection_ssl_noserverhostcCr�)NcSrzrr
r
r
r
rr7�r8zjSelectorEventLoopUnixSocketTests.test_create_unix_connection_ssl_timeout_with_plain_sock.<locals>.<lambda>r�rr�r�r�r�r
r
r�7test_create_unix_connection_ssl_timeout_with_plain_sock�r�zXSelectorEventLoopUnixSocketTests.test_create_unix_connection_ssl_timeout_with_plain_sock)rPrQrRrrZskip_unless_bind_unix_socketr�r�r�r�r�r�r�r��unittest�
skipUnless�hasattrr}r�r�r�rrvr�r�r�r�r�r�rwr
r
r!rrys4

			�	
	ry�sendfilezsendfile is not supportedcs�eZdZddZGdd�dej�Ze�fdd��Ze�fdd��Z	�fd	d
�Z
d&dd
�Zdd�Zdd�Z
dd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�Zd d!�Zd"d#�Zd$d%�Z�ZS)'�&SelectorEventLoopUnixSockSendfileTestss�12345abcde12345abcde12345abcde12345abcde12345abcde12345abcde12345abcde12345abcde12345abcde12345abcde12345abcde12345abcde12345abcde12345abcde12345abcde12345abcde�c@�4eZdZdd�Zdd�Zdd�Zdd�Zd	d
�ZdS)z.SelectorEventLoopUnixSockSendfileTests.MyProtocCs2d|_d|_t�|_|��|_d|_|��|_dS)NF)�started�closed�	bytearray�data�
create_future�futr�_ready)r rr
r
r�__init__�s
z7SelectorEventLoopUnixSockSendfileTests.MyProto.__init__cCsd|_||_|j�d�dSr6)r�rr��
set_result)r rr
r
r�connection_made�sz>SelectorEventLoopUnixSockSendfileTests.MyProto.connection_madecCs|j�|�dSr)r��extend)r r�r
r
r�
data_received�sz<SelectorEventLoopUnixSockSendfileTests.MyProto.data_receivedcCsd|_|j�d�dSr6)r�r�r�)r �excr
r
r�connection_lost�sz>SelectorEventLoopUnixSockSendfileTests.MyProto.connection_lostc�s�|jIdHdSr)r�rr
r
rr��s�z:SelectorEventLoopUnixSockSendfileTests.MyProto.wait_closedN)rPrQrRr�r�r�r�r�r
r
r
r�MyProto�sr�csFttjd��}|�|j�Wd�n1swYt���dS)N�wb)�openr�TESTFN�write�DATAr�
setUpClass)�cls�fpr!r
rr��s�z1SelectorEventLoopUnixSockSendfileTests.setUpClasscst�tj�t���dSr)rr�r�r�
tearDownClass)r�r!r
rr��sz4SelectorEventLoopUnixSockSendfileTests.tearDownClasscs@t��|_|�|j�ttjd�|_|�|jj	�t
���dS)N�rb)r	�new_event_looprrr�rr�r�rCrrrrr!r
rr�s

z,SelectorEventLoopUnixSockSendfileTests.setUpTcCsRt�tjtj�}|�d�|�tjtjd�|�tjtjd�|r'|�|j	�|S)NFr�)
r}ZAF_INETr�ZsetblockingZ
setsockoptZ
SOL_SOCKETZ	SO_SNDBUFZ	SO_RCVBUFrCr)r �cleanupr�r
r
r�make_socket�s
z2SelectorEventLoopUnixSockSendfileTests.make_socketcCs|j�|�Sr)rr�r�r
r
r�run_loop��z/SelectorEventLoopUnixSockSendfileTests.run_loopcs����}���j��t��}�jdd�}|�tj|f����jj�fdd�|d������j�	|tj|f�����j
����fdd�}��|�|�fS)NF)r�cs�Srr
r
)�protor
rr7r8z@SelectorEventLoopUnixSockSendfileTests.prepare.<locals>.<lambda>r�cs2�j�����������������dSr)rrr�r�r
�r�r Zserverr
rr�s
z?SelectorEventLoopUnixSockSendfileTests.prepare.<locals>.cleanup)r�r�rrZfind_unused_portr~ZHOSTr�Z
create_serverZsock_connectr�rC)r r�ZportZsrv_sockr�r
r�r�prepare�s
�
z.SelectorEventLoopUnixSockSendfileTests.preparec
Cs�|��\}}tjdgd��,|�tjd��|�|j�||j	dd��Wd�n1s-wYWd�n1s<wY|�
|j	��d�dS)Nzasyncio.unix_events.os)�specz$os[.]sendfile[(][)] is not availabler)r�rrvrDr	�SendfileNotAvailableErrorr�r�_sock_sendfile_nativer�rJ�tell)r r�r�r
r
r� test_sock_sendfile_not_availables�����zGSelectorEventLoopUnixSockSendfileTests.test_sock_sendfile_not_availablec	Csn|��\}}t�}|�tjd��|�|j�||dd��Wd�n1s'wY|�|j	�
�d�dS�N�not a regular filer)r�rfrDr	r�r�rr�rJr�r��r r�r��fr
r
r�test_sock_sendfile_not_a_files���zDSelectorEventLoopUnixSockSendfileTests.test_sock_sendfile_not_a_filec	Csp|��\}}t��}|�tjd��|�|j�||dd��Wd�n1s(wY|�	|j
��d�dSr�)r��io�BytesIOrDr	r�r�rr�rJr�r�r�r
r
r�test_sock_sendfile_iobuffer#s���zBSelectorEventLoopUnixSockSendfileTests.test_sock_sendfile_iobufferc	Csx|��\}}t��}d|j_|�tjd��|�|j	�
||dd��Wd�n1s,wY|�|j�
�d�dS)NrMr�r)r�rr.�filenorrrDr	r�r�rr�rJr�r�r�r
r
r�#test_sock_sendfile_not_regular_file,s���zJSelectorEventLoopUnixSockSendfileTests.test_sock_sendfile_not_regular_filec
Cs�|��\}}|j��}|j��}|j�|d||ddt|j�d�|��t	�
tj��
|�
|�Wd�n1s:wY|�t��|jj�|�Wd�dS1sWwYdS�Nr)r�rr�r�r��_sock_sendfile_native_implrnr�r/�
contextlib�suppressr	ZCancelledErrorr�r%�KeyError�	_selector�get_key�r r�r�r�r�r
r
r�test_sock_sendfile_cancel16s

��"�zASelectorEventLoopUnixSockSendfileTests.test_sock_sendfile_cancel1c
Cs�|��\}}|j��}|j��}|j�|d||ddt|j�d�|��|j�||��||ddt|j�d�|�	t
��|jj�|�Wd�dS1sNwYdSr�)
r�rr�r�r�r�rnr�r/r%r�r�r�r�r
r
r�test_sock_sendfile_cancel2Cs

��"�zASelectorEventLoopUnixSockSendfileTests.test_sock_sendfile_cancel2cCs�|��\}}|j��}t��}d|j_tjdt�d��|j	�
|d||ddt|j�d�Wd�n1s6wY|j	j
�|�}|�|�|j�tj�dS)NF�os.sendfile�r;r)r�r�r�rr.Z	cancelledrrrv�BlockingIOErrorrr�rnr�r�r��assertIsNotNoneZadd_done_callbackro�ANY)r r�r�r�r��keyr
r
r�!test_sock_sendfile_blocking_errorPs
��
zHSelectorEventLoopUnixSockSendfileTests.test_sock_sendfile_blocking_errorcCs�|��\}}|j��}|j��}tjdt�d��|j�|d||ddt	|j
�d�Wd�n1s3wY|�t��|jj
�|�Wd�n1sOwY|��}|�|tj�|�d|j���dS)Nr�r�r)r�r�r�rr�rrvrVr�rnr�r%r�r�r��	exceptionrIr	r�rJr�)r r�r�r�r�r�r
r
r�&test_sock_sendfile_os_error_first_call]s

���zMSelectorEventLoopUnixSockSendfileTests.test_sock_sendfile_os_error_first_callcCs�|��\}}|j��}|j��}t�}tjd|d��|j�||��||ddt	|j
�d�Wd�n1s7wY|�t��|jj
�|�Wd�n1sSwY|��}|�||�|�d|j���dS�Nr�r�i�)r�r�r�rr�rVrrvr�rnr�r%r�r�r�r��assertIsrJr��r r�r�r�r��errr�r
r
r�%test_sock_sendfile_os_error_next_callks"

���zLSelectorEventLoopUnixSockSendfileTests.test_sock_sendfile_os_error_next_callcCs�|��\}}|j��}|j��}t��}tjd|d��|j�	||��||ddt
|j�d�Wd�n1s8wY|�t
��|jj�|�Wd�n1sTwY|��}|�||�|�d|j���dSr)r�r�r�rr�r	r�rrvr�rnr�r%r�r�r�r�rrJr�rr
r
r�test_sock_sendfile_exception|s"

���zCSelectorEventLoopUnixSockSendfileTests.test_sock_sendfile_exception)T)rPrQrRr�r	�Protocolr��classmethodr�r�rr�r�r�r�r�r�r�r�r�r�r�rrrwr
r
r!rr��s*
				



r�cs
eZdZ�fdd�Zd(dd�Zdd�Ze�d�d	d
��Ze�d�dd��Z	e�d�d
d��Z
e�d�e�d�dd���Ze�d�dd��Ze�d�dd��Z
e�d�dd��Ze�d�dd��Ze�d�dd��Zdd�Zdd�Zd d!�Zd"d#�Zd$d%�Zd&d'�Z�ZS))�UnixReadPipeTransportTestsc�t���|��|_t�tj�|_t	j
tjd�|_
d|j
j_t	�d�}|��|�|j�t	�d�}|��}t	�
�}tj|_||_|�|j�dS�N)Zspec_set�zos.set_blockingzos.fstat)rr�
new_test_looprr{�make_test_protocolr	r�protocolrr.r��	RawIOBase�piper�rrrv�startrC�stop�stat�S_IFIFO�st_mode�r Zblocking_patcherZ
fstat_patcherZm_fstat�str!r
rr��




z UnixReadPipeTransportTests.setUpNcC�(tj|j|j|j|d�}|�t|�|S�N��waiter)rZ_UnixReadPipeTransportrrrrCr�r rrr
r
r�read_pipe_transport���z.UnixReadPipeTransportTests.read_pipe_transportcCsR|j��}|j|d�}|j�|�|jj�|�|j�d|j�|�	|�
��dS�Nrr)rr�rr�rr�r2�
assert_reader�_read_ready�assertIsNone�result�r r�trr
r
r�	test_ctor�s
z$UnixReadPipeTransportTests.test_ctorzos.readcCs6|��}d|_|��|�d|j�|jj�d�dS�N�datar)rrrr"r2�max_sizerr��r �m_readr&r
r
r�test__read_ready�s
z+UnixReadPipeTransportTests.test__read_readycCs\|��}d|_|��|�d|j�|�|jj�t�	|j�|j
j��|j
j�d�dS)N�r)
rrrr"r2r*rYr�readersr{�run_brieflyrZeof_receivedr�r+r
r
r�test__read_ready_eof�sz/UnixReadPipeTransportTests.test__read_ready_eofcCsD|��}t|_|��|�d|j�t�|j�|�	|j
jj�dS�Nr)
rr�r;r"r2r*r{r0rrYrr�r[r+r
r
r�test__read_ready_blocked�sz3UnixReadPipeTransportTests.test__read_ready_blocked�asyncio.log.logger.errorcCs^|��}t�}||_t��|_|��|�d|j�|j�|�|jt	�
d�tttfd�dS)Nrz;Fatal read error on pipe transport
protocol:.*
transport:.*)�exc_info)rrVr;rr.�_closer"r2r*r{ZMockPattern�MOCK_ANY)r r,�m_logexcr&rr
r
r�test__read_ready_error�s
�
�z1UnixReadPipeTransportTests.test__read_ready_errorcCs8|��}t��}|j�d|�|��|�|jj�dSr2)rrr.r�
add_reader�
pause_readingrYr/)r r,r&�mr
r
r�test_pause_reading�s
z-UnixReadPipeTransportTests.test_pause_readingcCs,|��}|��|��|j�d|j�dSr2)rr;�resume_readingrr!r"r+r
r
r�test_resume_reading�sz.UnixReadPipeTransportTests.test_resume_readingcCs*|��}t��|_|��|j�d�dSr)rrr.r6rr2r+r
r
rrp�s
z%UnixReadPipeTransportTests.test_closecCs2|��}d|_t��|_|��|�|jj�dSr6)r�_closingrr.r6rrYr[r+r
r
r�test_close_already_closing�s

z5UnixReadPipeTransportTests.test_close_already_closingcCsR|��}t�}|�|�|�|���|�|jj�t�	|j�|j
j�|�dSr)
rrfr6rb�
is_closingrYrr/r{r0rr�r2)r r,r&rr
r
r�test__closes
z&UnixReadPipeTransportTests.test__closecC�d|��}|�|j�|�|j�d}|�|�|jj�|�|jj	��|�
|j�|�
|j�dSr)rr��	_protocol�_loop�_call_connection_lostrr�r2rrr#�r r&rr
r
r�test__call_connection_lost
�
z5UnixReadPipeTransportTests.test__call_connection_lostcC�f|��}|�|j�|�|j�t�}|�|�|jj�|�|j	j
��|�|j�|�|j�dSr)rr�rErFrVrGrr�r2rrr#rHr
r
r�#test__call_connection_lost_with_err�
z>UnixReadPipeTransportTests.test__call_connection_lost_with_errcC�4|��}|��t�|j�|�|j�|��dSr)rrr{r0rr#rFr;�r r&r
r
r�!test_pause_reading_on_closed_pipe$�
z<UnixReadPipeTransportTests.test_pause_reading_on_closed_pipecCs|��}|��|��dSr)rr;rOr
r
r�!test_pause_reading_on_paused_pipe+sz<UnixReadPipeTransportTests.test_pause_reading_on_paused_pipecCrNr)rrr{r0rr#rFr>rOr
r
r�"test_resume_reading_on_closed_pipe1rQz=UnixReadPipeTransportTests.test_resume_reading_on_closed_pipecCs|��}|��dSr)rr>rOr
r
r�"test_resume_reading_on_paused_pipe8sz=UnixReadPipeTransportTests.test_resume_reading_on_paused_piper)rPrQrRrrr'rrvr-r1r3r9r=r?rprArCrIrLrPrRrSrTrwr
r
r!rr�s:
	


	




	

rcs~eZdZ�fdd�Zd7dd�Zdd�Zdd	�Ze�d
�dd��Z	e�d
�d
d��Z
e�d
�dd��Ze�d
�dd��Ze�d
�dd��Z
e�d�e�d
�dd���Ze�d
�dd��Zdd�Ze�d
�dd��Ze�d
�dd��Ze�d
�d d!��Ze�d
�d"d#��Ze�d$�e�d
�d%d&���Ze�d
�d'd(��Ze�d
�d)d*��Zd+d,�Zd-d.�Zd/d0�Zd1d2�Zd3d4�Zd5d6�Z�ZS)8�UnixWritePipeTransportTestscr	r
)rrrrr{r
r	ZBaseProtocolrrr.r�rrr�rrrvrrCrr�S_IFSOCKrrr!r
rrArz!UnixWritePipeTransportTests.setUpNcCrr)rZ_UnixWritePipeTransportrrrrCrrr
r
r�write_pipe_transportSrz0UnixWritePipeTransportTests.write_pipe_transportcCsT|j��}|j|d�}|j�|�|jj�|�|j�d|j�|�	d|�
��dSr )rr�rWr�rr�r2r!r"rJr$r%r
r
rr'Zs
z%UnixWritePipeTransportTests.test_ctorcCs|��}|�|���dSr)rWrbZ
can_write_eofrOr
r
r�test_can_write_eofcsz.UnixWritePipeTransportTests.test_can_write_eofzos.writecCsF|��}d|_|�d�|�dd�|�|jj�|�t�|j	�dS)N�r)r)
rWrrr�r2rYr�writersrJr��_buffer�r �m_writer&r
r
r�
test_writegs
z&UnixWritePipeTransportTests.test_writecCsB|��}|�d�|�|j�|�|jj�|�td�|j�dS)Nr.)	rWr�rYr[rrZrJr�r[r\r
r
r�test_write_no_dataps

z.UnixWritePipeTransportTests.test_write_no_datacCs>|��}d|_|�d�|j�d|j�|�td�|j�dS)Nr`r)r�ta)	rWrrr�r�
assert_writer�_write_readyrJr�r[r\r
r
r�test_write_partialxs

z.UnixWritePipeTransportTests.test_write_partialcCs^|��}|j�d|j�td�|_|�d�|�|j�|j�	d|j�|�
td�|j�dS)Nrspreviousr)spreviousdata)rWr�
add_writerrbr�r[r�rYr[rarJr\r
r
r�test_write_buffer�s

z-UnixWritePipeTransportTests.test_write_buffercCsP|��}t�|_|�d�|�dtd��|j�d|j�|�	td�|j
�dSr()rWr�r;r�r2r�rrarbrJr[r\r
r
r�test_write_again�s
z,UnixWritePipeTransportTests.test_write_againzasyncio.unix_events.loggercCs�|��}t�}||_t��|_|�d�|�dd�|�|j	j
�|�t�|j
�|j�|d�|�d|j�|�d�|�d|j�|�d�|�d�|�d�|�d�|j�d�|��dS)Nr)rz#Fatal write error on pipe transportrr`z=pipe closed by peer or os.write(pipe, data) raised exception.)rWrVr;rr.Z_fatal_errorr�r2rYrrZrJr�r[�
_conn_lost�warningr)r r]Zm_logr&rr
r
r�test_write_err�s.

�




�z*UnixWritePipeTransportTests.test_write_errcCsD|��}|��|�d�|�|jd�|�d�|�|jd�dS)Nr)rr`)rWr"r�rJrgr\r
r
r�test_write_close�s

z,UnixWritePipeTransportTests.test_write_closecCsX|��}|��|�|jj�|�|jj�|�|���t�	|j�|j
j�d�dSr)
rWr"rYrr/rZrbrBr{r0rr�r2rOr
r
rr-�sz,UnixWritePipeTransportTests.test__read_readycCsR|��}|j�d|j�td�|_d|_|��|�|jj�|�	t�|j�dS)Nrr)rY)
rWrrdrbr�r[rrrYrZrJr\r
r
r�test__write_ready�s
z-UnixWritePipeTransportTests.test__write_readycCsV|��}|j�d|j�td�|_d|_|��|j�d|j�|�td�|j�dS)Nrr)��a)	rWrrdrbr�r[rrrarJr\r
r
r�test__write_ready_partial�s
z5UnixWritePipeTransportTests.test__write_ready_partialcCsh|��}|j�d|j�td�|_t�|_|��|�dtd��|j�	d|j�|�
td�|j�dS)Nrr))rWrrdrbr�r[r�r;r2rarJr\r
r
r�test__write_ready_again�s
z3UnixWritePipeTransportTests.test__write_ready_againcCsf|��}|j�d|j�td�|_d|_|��|�dtd��|j�d|j�|�	td�|j�dS)Nrr)r)
rWrrdrbr�r[rrr2rarJr\r
r
r�test__write_ready_empty�s
z3UnixWritePipeTransportTests.test__write_ready_emptyr4cCs�|��}|j�d|j�td�|_t�|_}|��|�|jj	�|�|jj
�|�t�|j�|�|�
��|��|�d|j�t�|j�|jj�|�dS)Nrr)r)rWrrdrbr�r[rVr;rYrZr/rJrbrBZassert_not_calledrgr{r0rr�r2)r r]r8r&rr
r
r�test__write_ready_err�s
z1UnixWritePipeTransportTests.test__write_ready_errcCs�|��}|j�d|j�d|_td�|_d|_|��|�|jj	�|�|jj
�|�t�|j�|jj
�d�|jj��dS)NrTr)rY)rWrrdrbr@r�r[rrrYrZr/rJrr�r2rrr\r
r
r�test__write_ready_closing�s
z5UnixWritePipeTransportTests.test__write_ready_closingcCs�|��}|j�d|j�|j�d|j�ddg|_|��|�|j	�|�|jj
�|�|jj�|�g|j�|�
|���t�|j�|jj�d�dS)Nrsdar`)rWrrdrbr:r"r[�abortrYr[r/rZrJrbrBr{r0rr�r2r\r
r
r�
test_abort
s
z&UnixWritePipeTransportTests.test_abortcCrDr)rWr�rErFrGrr�r2rrr#rHr
r
rrIrJz6UnixWritePipeTransportTests.test__call_connection_lostcCrKr)rWr�rErFrVrGrr�r2rrr#rHr
r
rrL&rMz?UnixWritePipeTransportTests.test__call_connection_lost_with_errcCs0|��}t��|_|��|j��|��dSr)rWrr.�	write_eofrr2rOr
r
rrp3s


z&UnixWritePipeTransportTests.test_closecCs2|��}t��|_d|_|��|�|jj�dSr6)rWrr.rur@rrYr[rOr
r
r�test_close_closing<s

z.UnixWritePipeTransportTests.test_close_closingcCsJ|��}|��|�|���|�|jj�t�|j�|j	j
�d�dSr)rWrurbrBrYrr/r{r0rr�r2rOr
r
r�test_write_eofCsz*UnixWritePipeTransportTests.test_write_eofcCs:|��}dg|_|��|�|���|�|jjj�dS)Nr))	rWr[rurbrBrYrr�r[rOr
r
r�test_write_eof_pendingKs
z2UnixWritePipeTransportTests.test_write_eof_pendingr)rPrQrRrrWr'rXrrvr^r_rcrerfrirjr-rkrnrorprqrrrtrIrLrprvrwrxrwr
r
r!rrU?sT
	



	

		
	
	







	rUc@�eZdZdd�ZdS)�AbstractChildWatcherTestscCs�t��}t��}|�t|j||�|�t|j|�|�t|j|�|�t|j	�|�t|j
�|�t|j�|�t|j|||�dSr)
rr.r	ZAbstractChildWatcherr%�NotImplementedError�add_child_handler�remove_child_handler�attach_looprZ	is_active�	__enter__�__exit__�r r��watcherr
r
r�test_not_implementedUs.
�������z.AbstractChildWatcherTests.test_not_implementedN�rPrQrRr�r
r
r
rrzS�rzc@ry)�BaseChildWatcherTestscCs$t��}t��}|�t|j|�dSr)rr.rZBaseChildWatcherr%r{Z_do_waitpidr�r
r
rr�js
�z*BaseChildWatcherTests.test_not_implementedNr�r
r
r
rr�hr�r�cs�eZdZej�ejd�Z�fdd�Z	dd�Z
dd�Zdd	�Zd
d�Z
dd
�Zedd��Zedd��Zedd��Zedd��Zedd��Zedd��Zedd��Zedd��Zedd��Zed d!��Zed"d#��Zed$d%��Zed&d'��Zed(d)��Z�ZS)*�ChildWatcherTestsMixinrhcspt���|��|_d|_i|_tj�|jd��|_	|�
�|_|j�|j�Wd�dS1s1wYdS)NFr=)
rrrr�running�zombiesrrvrf�m_add_signal_handler�create_watcherr�r~rr!r
rrus

�
"�zChildWatcherTestsMixin.setUpcCslt|jtj�s|dkr|�|d�z|dkr|j��WS||j�|�fWSty-Ynw|j	r3dSt
��)NrMr)rr)�
isinstancer�r	�SafeChildWatcherZ
assertGreaterr��popitem�popr�r��ChildProcessError)r �pid�flagsr
r
r�waitpid�s�zChildWatcherTestsMixin.waitpidcCs||j|<dSr)r�)r r��statusr
r
r�
add_zombie�r
z!ChildWatcherTestsMixin.add_zombiecCs4|dkr|dSd|krdkr|dS|S|S)Nri�r
)r r�r
r
r�waitstatus_to_exitcode�s�z-ChildWatcherTestsMixin.waitstatus_to_exitcodecCs|j�tj|jj�dSr)r�ror(rmr��	_sig_chldrr
r
r�test_create_watcher�s
�z*ChildWatcherTestsMixin.test_create_watchercs�fdd�}|S)Nc	s�dd�}|d|j��,|d|j��
}�||�Wd�n1s!wYWd�dSWd�dS1s9wYdS)NcSstj||tjd�S)N)�wrapsZnew_callable)rrvr.)�target�wrapperr
r
rrv�s�zIChildWatcherTestsMixin.waitpid_mocks.<locals>.wrapped_func.<locals>.patchz*asyncio.unix_events.waitstatus_to_exitcodez
os.waitpid)r�r�)r rv�	m_waitpid�rEr
r�wrapped_func�s
�P�z:ChildWatcherTestsMixin.waitpid_mocks.<locals>.wrapped_funcr
)rEr�r
r�r�
waitpid_mocks�sz$ChildWatcherTestsMixin.waitpid_mockscCst��}|j�d|_|j�d|ddd�Wd�n1swY|�|j�|j��|�|j�d|_|�dt	d��|j��|�
ddddd�|��|�dt	d��|j�
|j��Wd�n1smwY|�|j�|j
��|j��|�|j�dS)	NT�*�	�
�F��
)rr.r�r�r|rYr[r�r�rrorg�ignore_warningsr��clear�r r��callbackr
r
r�test_sigchld�s*�

�

z#ChildWatcherTestsMixin.test_sigchldcCst��}t��}|j�d|_|j�d|dd�Wd�n1s"wY|�|j�|�|j�|j�|j�d|dd�Wd�n1sJwY|�|j�|�|j�|j��|�|j�|�|j�|�dt	d��|j��|�
dd	dd�|�|j�|��|j��|�|j�|�|j�|�dtd
��d|_|j��|�
dd
dd�|�|j�|��|�dtd��|�dtd
��|j
�
|j��Wd�n1s�wY|�|j�|�|j�|j��|j��|�|j�|�|j�dS)NT�+���,��rl����lFr��)rr.r�r�r|rYr[r�r�rrorgrr�r�r��r r��	callback1�	callback2r
r
r�test_sigchld_two_children�sR��



�

z0ChildWatcherTestsMixin.test_sigchld_two_childrencCs�t��}t��}|j�d|_|j�d|dd�Wd�n1s"wY|�|j�|�|j�|j�|j�d|dd�Wd�n1sJwY|�|j�|�|j�|j��|�|j�|�|j�|�dt	d��|�dt
d	��d
|_|j��|�dddd�|�dddd�|��|��|�dt	d��|�dt	d
��|j
�
|j��Wd�n1s�wY|�|j�|�|j�dS)NT�-�r��.i{r��NrF���r�r�)rr.r�r�r|rYr[r�r�rrrorgr�r�r
r
r�.test_sigchld_two_children_terminating_togethers>��

�zEChildWatcherTestsMixin.test_sigchld_two_children_terminating_togethercCs�t��}|j�|�dtd��|j��|j�d|dd�Wd�n1s(wY|�dddd�|��|�dt	d��|j
�
|j��Wd�n1sTwY|�|j�dS)N�2rYrr�)
rr.r�r�rr�r|rorgrr�rYr[r�r
r
r�test_sigchld_race_conditionBs
��z2ChildWatcherTestsMixin.test_sigchld_race_conditioncCsPt��}t��}|j�d|_|j�d|d�Wd�n1s!wY|�|j�|�|j�|j�|j�d|d�Wd�n1sHwY|�|j�|�|j�d|_|�dtd��|j�	�|�
ddd�|�|j�|��|�dtd��|j
�
|j�	�Wd�n1s�wY|�|j�|�|j�dS)	NT�3��Fr�i����r�)rr.r�r�r|rYr[r�rr�rorgrr�r�r
r
r�test_sigchld_replace_handlerXs2��
�z3ChildWatcherTestsMixin.test_sigchld_replace_handlercCs�t��}|j�d|_|j�d|d�Wd�n1swY|�|j�|j�d�|�|j�d|_|�dt	d��|j
�
|j��Wd�n1sRwY|�|j�dS)NT�4i�F�c)rr.r�r�r|rYr[r}r�rr�r�r�r
r
r�test_sigchld_remove_handler~s��z2ChildWatcherTestsMixin.test_sigchld_remove_handlercCs�t��}|j�d|_|j�d|d�Wd�n1swY|�|j�d|jd<d|_|j��|�	ddd�|�
�|�dtd��|j
�
|j��Wd�n1s[wY|�|j�dS)NT�5i��i�F�e)rr.r�r�r|rYr[r�r�rorgr�rr�r�r
r
r�test_sigchld_unknown_status�s �

�z2ChildWatcherTestsMixin.test_sigchld_unknown_statuscCsLt��}t��}t��}|j�#d|_|j�d|d�|j�d|d�|j�d|d�Wd�n1s5wY|�|j�d��|�|j�d��|�|j�d��|�|j�d��|�dt	d��|�dt	d��|�dt	d��d	|_|j
�
|j��Wd�n1s�wY|�|j�|�|j�|�
ddd�dS)
NT�6r�7r`�8rlrF)rr.r�r�r|rbr}rYr�rr�r�r[ro)r r�r�r��	callback3r
r
r�test_remove_child_handler�s.��z0ChildWatcherTestsMixin.test_remove_child_handlercCs�t��}|j�d|_|j�d|�Wd�n1swYt|_tj�t	j
d��}|�|j��d�|�
|j�Wd�dS1sGwYdS)NT�9�error)rr.r�r�r|r'r;rvrfr�loggerrJr�rbr[)r r�r�Zm_errorr
r
r� test_sigchld_unhandled_exception�s�
�"�z7ChildWatcherTestsMixin.test_sigchld_unhandled_exceptioncCs�t��}|j�d|_|j�d|�Wd�n1swY|�|j�d|_|�dtd��t	�
dt	j�|��|j
�
|j��Wd�n1sPwYt|jtj�rd|�|j�dS|�dd�dS)NT�:FrY�)rr.r�r�r|rYr[r�rr�r��WNOHANGrgr�r�r�r	�FastChildWatcherror�r
r
r�#test_sigchld_child_reaped_elsewhere�s ��z:ChildWatcherTestsMixin.test_sigchld_child_reaped_elsewherec	Cs�t��}t��}|j�A|j�.d|_|�dtd��|�dtd��|j��|j�d|�|j�d|�Wd�n1s@wYWd�n1sOwY|�	dd�|�
|j�dS)NTiOr�iQr�iP)rr.r�r�r�r�rr�r|rorYr[r�r
r
r�,test_sigchld_unknown_pid_during_registrations
��zCChildWatcherTestsMixin.test_sigchld_unknown_pid_during_registrationc	Cst��}|j�d|_|j�d|�Wd�n1swY|j}|��|_tjj}||d��4}||jd��}|j�	|j�|�
tj�|�
tj|jj
�Wd�n1sZwYWd�n1siwYd|_|�dtd��|j�
�|�
dd�dS)NT�<r1r=Fr�)rr.r�r�r|rrrvrfr~ror(rmr�r�r)r r�r��old_looprvZm_old_removeZ	m_new_addr
r
r�
test_set_loops4�

��
���
z$ChildWatcherTestsMixin.test_set_loopc	Cst��}t��}t��}|j� d|_|j�d|�|j�d|�|j�d|�Wd�n1s2wY|j}d|_tj�|d��*}|�t	d��|j�
d�Wd�n1s\wY|�tj
�Wd�n1sqwY|�dtd��|�dtd��|�|j�|�|j�|�|j�|��|_tj�|jd	��*}|j�
|j�|�tj
|jj�|�dd�|�dd
�|�|j�Wd�n1s�wY|��|��d|_|�dtd��|j��|�|j�|�|j�|�dd�dS)
NT�=�>inr1zA loop is being detached�rr=r�Fr�)rr.r�r�r|rrvrfrs�RuntimeWarningr~ror(rmr�rrrYr[rr�rg)r r�r�r�r�r��m_remove_signal_handlerr�r
r
r�test_set_loop_race_condition7sd������
�
��
z3ChildWatcherTestsMixin.test_set_loop_race_conditionc	Cs6t��}|j��d|_|�dtd��|�dtd��|j��|j�d|�|j�d|�|�t	|jj
�d�t|jtj
�rI|�t	|jj�d�tj�|jd��(}|j��|�tj�|�|jj
�t|jtj
�rr|�|jj�Wd�n1s|wYWd�dSWd�dS1s�wYdS)	NT�?r��Ar��@rr1)rr.r�r�r�rr�r|rJrnZ
_callbacksr�r	r�Z_zombiesrvrfrrror(rmrY)r r�r�r�r
r
rrpus8
�
����"�z!ChildWatcherTestsMixin.test_close)rPrQrRrrvrfrr�r�rr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rprwr
r
r!rr�qsH
%
B
/

%


 




=r�c@ry)�SafeChildWatcherTestscC�t��Sr)r	r�rr
r
rr��rz$SafeChildWatcherTests.create_watcherN�rPrQrRr�r
r
r
rr���r�c@ry)�FastChildWatcherTestscCr�r)r	r�rr
r
rr��rz$FastChildWatcherTests.create_watcherNr�r
r
r
rr��r�r�c@r�)�PolicyTestscCr�r)r	ZDefaultEventLoopPolicyrr
r
r�
create_policy�rzPolicyTests.create_policycCsL|��}|�|j�|��}|�|tj�|�|j|�|�||���dSr)r�r#�_watcher�get_child_watcherrIr	ZThreadedChildWatcherr�r �policyr�r
r
r�test_get_default_child_watcher�sz*PolicyTests.test_get_default_child_watchercCs<|��}t��}|�|�|�|j|�|�||���dSr)r�r	r��set_child_watcherrr�r�r�r
r
r� test_get_child_watcher_after_set�s

z,PolicyTests.test_get_child_watcher_after_setcsD��fdd�}������t���tj|d�}|��|��dS)NcsR�����������tj����}��|tj���|j	�����
�dSr)rr�rIZget_event_loopr	ZAbstractEventLoopr�r�r#rFr)r��r�r r
rr��s
�z4PolicyTests.test_get_child_watcher_thread.<locals>.f)r�)r�r�r	r��	threadingZThreadr�join)r r�Zthr
r�r�test_get_child_watcher_thread�sz)PolicyTests.test_get_child_watcher_threadcCs�|��}|��}|�|�t��}|�|�|�|�|�|j|�|��}|�|�|�|j|�|�d�|�|jd�|�	�|�	�dSr)
r�r�rr	r�r�r~rrFr)r r�rr�Znew_loopr
r
r�,test_child_watcher_replace_mainloop_existing�s




z8PolicyTests.test_child_watcher_replace_mainloop_existingN)rPrQrRr�r�r�r�r�r
r
r
rr��sr�c@s,eZdZdd�Zdd�Zdd�Zdd�Zd	S)
�TestFunctionalcCst��|_t�|j�dSr)r	r�rrrr
r
rr�s
zTestFunctional.setUpcCs|j��t�d�dSr)rrr	rrr
r
r�tearDown�s
zTestFunctional.tearDowncs��fdd�}dd�}|���j�t�|�Wd�n1s wY|���j�t�|�Wd�n1s;wY|���j�t��Wd�n1sUwY|���j�t��Wd�dS1spwYdS)Nc���td�S)NzInvalid file object)rDr'r
rr
r�
assert_raises�r�zFTestFunctional.test_add_reader_invalid_argument.<locals>.assert_raisescSrzrr
r
r
r
rr7�r8zATestFunctional.test_add_reader_invalid_argument.<locals>.<lambda>)rr:rfrd�
remove_reader�
remove_writer)r r�rKr
rr� test_add_reader_invalid_argument�s���"�z/TestFunctional.test_add_reader_invalid_argumentcs`�fdd�����fdd�}t��\�}z�j�|��W���|��dS���|��w)Ncr�)Nz'File descriptor .* is used by transport)rDr<r
rr
rr�s�zLTestFunctional.test_add_reader_or_writer_transport_fd.<locals>.assert_raisesc�s���jjdd��d�IdH\}}z�dd�}����j��|�Wd�n1s*wY����j����|�Wd�n1sFwY����j���Wd�n1s_wY����j�����Wd�n1szwY����j��|�Wd�n1s�wY����j����|�Wd�n1s�wY����j���Wd�n1s�wY����j�����Wd�n1s�wYW|��dSW|��dS|��w)NcSr�r)r	rr
r
r
rr7	szWTestFunctional.test_add_reader_or_writer_transport_fd.<locals>.runner.<locals>.<lambda>r�cSrzrr
r
r
r
rr7r8)rZcreate_connectionr:r�r�rdr�r)r&ZprrK�r�Zrsockr r
r�runnersB�����������zETestFunctional.test_add_reader_or_writer_transport_fd.<locals>.runner)r}Z
socketpairrr�r)r rZwsockr
r�r�&test_add_reader_or_writer_transport_fds�
z5TestFunctional.test_add_reader_or_writer_transport_fdN)rPrQrRrr�r�rr
r
r
rr��s
r��__main__)0�__doc__r�rSr�r�r�r(r}r�sysr�r�r�rZtest.supportrr�platformZSkipTestr	rrZtest.test_asynciorr{rr�r7rrrr�ZTestCaserr�ryr�rrUrzr�r�r�r�r�r�rP�mainr
r
r
r�<module>sv


	^�)�N2	)G
F�