HEX
Server: Apache
System: Linux zacp120.webway.host 4.18.0-553.50.1.lve.el8.x86_64 #1 SMP Thu Apr 17 19:10:24 UTC 2025 x86_64
User: govancoz (1003)
PHP: 8.3.26
Disabled: exec,system,passthru,shell_exec,proc_close,proc_open,dl,popen,show_source,posix_kill,posix_mkfifo,posix_getpwuid,posix_setpgid,posix_setsid,posix_setuid,posix_setgid,posix_seteuid,posix_setegid,posix_uname
Upload Files
File: //usr/local/lib/python3.10/test/test_asyncio/__pycache__/test_unix_events.cpython-310.pyc
o

�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_helper�win32z	UNIX only)�log)�unix_events)�utilscCst�d�dS�N)�asyncioZset_event_loop_policy�rr�?/usr/local/lib/python3.10/test/test_asyncio/test_unix_events.py�tearDownModule�r
cCsd|S)N��r)�exitcoderrr�EXITCODE$�rcCs,d|kr
dksntd|����d|S)N��Dzinvalid signum r)�AssertionError)�signumrrr�SIGNAL(srcCs"|jdurdS|j��d|_dSr	)Z_pipe�close)�	transportrrr�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__rrr:�

z"SelectorEventLoopSignalTests.setUpcCs.|�t|jjd�|�t|jjtjd�dS)N�1r)�assertRaises�	TypeErrorr Z
_check_signal�
ValueError�signal�NSIGr"rrr�test_check_signal?s
��z.SelectorEventLoopSignalTests.test_check_signalcCs|j�tjd�dS)Nr)r �_handle_signalr+r,r"rrr�test_handle_signal_no_handlerEsz:SelectorEventLoopSignalTests.test_handle_signal_no_handlercCshtjt��dt��d�}|��||jjtjd<t��|j_	|j�
tjd�|jj	�tjd�dS)Nr)r r)r
�Handler�Mock�cancelr �_signal_handlersr+r,�remove_signal_handlerr.�assert_called_with)r#�hrrr�$test_handle_signal_cancelled_handlerHs�zASelectorEventLoopSignalTests.test_handle_signal_cancelled_handlerzasyncio.unix_events.signalcCs6tj|_tj|_t|j_|�t|jj	tj
dd��dS)NcS�dS�NTrrrrr�<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_signalrrr�#test_add_signal_handler_setup_errorQs
�z@SelectorEventLoopSignalTests.test_add_signal_handler_setup_errorcCsPtj|_dd�}|}|�}|�|j�||fD]}|�td|jjtj|�qdS)Nc�s�dSr	rrrrr�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)r r@rA)r#rCrEZ	coro_funcZcoro_obj�funcrrr�'test_add_signal_handler_coroutine_error\s��zDSelectorEventLoopSignalTests.test_add_signal_handler_coroutine_errorcCsXtj|_tj|_dd�}|j�tj|�|jj�tj�}|�|t	j
�|�|j|�dS)NcSr8r9rrrrrr:rr;zFSelectorEventLoopSignalTests.test_add_signal_handler.<locals>.<lambda>)
r+r,r<r r@�SIGHUPr3�get�assertIsInstancer
r0�assertEqual�	_callback)r#rC�cbr6rrr�test_add_signal_handlermsz4SelectorEventLoopSignalTests.test_add_signal_handlercCsTtj|_tj|_dd�}||_Gdd�dt�}||j_|�||jjtj	dd��dS)NcSs|dkrt��dS)N���)r*)�fdrrrr=}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__�errnoZEFAULTrrrr�Err��
rXcSr8r9rrrrrr:�r;zTSelectorEventLoopSignalTests.test_add_signal_handler_install_error.<locals>.<lambda>)
r+r,r<r=�OSErrorr>r(r r@rA)r#rCr=rXrrr�%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@rS)zPSelectorEventLoopSignalTests.test_add_signal_handler_install_error2.<locals>.ErrN�rTrUrVrW�EINVALrrrrrX�rYrXcSr8r9rrrrrr:�r;zUSelectorEventLoopSignalTests.test_add_signal_handler_install_error2.<locals>.<lambda>cSr8r9rrrrrr:�r;r)r+r,r<rZr>r r3rJr(r?r@rA�assertFalse�info�calledrMr=�
call_count�r#�	m_loggingrCrXrrr�&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@rS)zPSelectorEventLoopSignalTests.test_add_signal_handler_install_error3.<locals>.ErrNr\rrrrrX�rYrXcSr8r9rrrrrr:�r;zUSelectorEventLoopSignalTests.test_add_signal_handler_install_error3.<locals>.<lambda>�)rZr+r>r,r<r(r?r r@rAr^r_r`rMr=rarbrrr�&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)NcSr8r9rrrrrr:�r;zISelectorEventLoopSignalTests.test_remove_signal_handler.<locals>.<lambda>r)
r+r,r<r r@rJ�
assertTruer4r=r`rM�SIG_DFL�	call_argsrBrrr�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)NcSr8r9rrrrrr:�r;zKSelectorEventLoopSignalTests.test_remove_signal_handler_2.<locals>.<lambda>r)r+r,rAr<r r@�objectr3rJr=�
reset_mockrgr4r^r`rM�default_int_handlerrirBrrr�test_remove_signal_handler_2�s
�

�z9SelectorEventLoopSignalTests.test_remove_signal_handler_2cCsJtj|_tj|_|j�tjdd��t|j_|j�	tj�|�
|j�dS)NcSr8r9rrrrrr:�r;zWSelectorEventLoopSignalTests.test_remove_signal_handler_cleanup_error.<locals>.<lambda>)r+r,r<r r@rJr*r=r>r4rgr_)r#rcrCrrr�(test_remove_signal_handler_cleanup_error�szESelectorEventLoopSignalTests.test_remove_signal_handler_cleanup_errorcCsDtj|_tj|_|j�tjdd��t|j_|�t|jj	tj�dS)NcSr8r9rrrrrr:�r;zOSelectorEventLoopSignalTests.test_remove_signal_handler_error.<locals>.<lambda>)
r+r,r<r r@rJrZr>r(r4rBrrr� test_remove_signal_handler_error�s�z=SelectorEventLoopSignalTests.test_remove_signal_handler_errorcCsTtj|_tj|_|j�tjdd��Gdd�dt�}||j_|�t	|jj
tj�dS)NcSr8r9rrrrrr:�r;zPSelectorEventLoopSignalTests.test_remove_signal_handler_error2.<locals>.<lambda>c@rS)zKSelectorEventLoopSignalTests.test_remove_signal_handler_error2.<locals>.ErrNr\rrrrrX�rYrX)r+r,r<r r@rJrZr>r(r?r4)r#rCrXrrr�!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)NcSr8r9rrrrrr:�r;z9SelectorEventLoopSignalTests.test_close.<locals>.<lambda>cSr8r9rrrrrr:�r;rerrQ)r+r,r<r r@rJ�SIGCHLDrM�lenr3r=rlr�assert_called_once_withrBrrr�
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)NcSr8r9rrrrrr:r;zGSelectorEventLoopSignalTests.test_close_on_finalizing.<locals>.<lambda>rTz skipping signal handlers removalr)r+r,r<r r@rJrMrsr3�
is_finalizing�return_valuerl�assertWarnsRegex�ResourceWarningrr^r`)r#rCZm_sysrrr�test_close_on_finalizings
��z5SelectorEventLoopSignalTests.test_close_on_finalizing)rTrUrVrr-r/r7r�patchrDrIrPr[rdrfrjrnrorprqrurz�
__classcell__rrr$rr7sF	












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)(� SelectorEventLoopUnixSocketTestscrr	rr"r$rrrr&z&SelectorEventLoopUnixSocketTests.setUpcCs�t���8}t�tj�}|�|�|�d�|��|j�dd�|�}|j�	|�}|��|j�	|�
��Wd�dS1s?wYdS)NrcS�dSr	rrrrrr:&r;z]SelectorEventLoopUnixSocketTests.test_create_unix_server_existing_path_sock.<locals>.<lambda>)�
test_utils�unix_socket_path�socketr}�bind�listenrr �create_unix_server�run_until_complete�wait_closed)r#�path�sock�coro�srvrrr�*test_create_unix_server_existing_path_socks


"�zKSelectorEventLoopUnixSocketTests.test_create_unix_server_existing_path_sockcCsnt���)}t�|�}|j�dd�|�}|j�|�}|��|j�|���Wd�dS1s0wYdS)NcSrr	rrrrrr:/r;zRSelectorEventLoopUnixSocketTests.test_create_unix_server_pathlib.<locals>.<lambda>)	r�r��pathlib�Pathr r�r�rr�)r#r�Zsrv_coror�rrr�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)NcSrr	rrrrrr:7r;zVSelectorEventLoopUnixSocketTests.test_create_unix_connection_pathlib.<locals>.<lambda>)	r�r�r�r�r �create_unix_connectionr(�FileNotFoundErrorr�)r#r�r�rrr�#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)NcSrr	rrrrrr:?r;z`SelectorEventLoopUnixSocketTests.test_create_unix_server_existing_path_nonsock.<locals>.<lambda>zAddress.*is already in use)�tempfile�NamedTemporaryFiler r��namerGrZr�)r#�filer�rrr�-test_create_unix_server_existing_path_nonsock=s
���"�zNSelectorEventLoopUnixSocketTests.test_create_unix_server_existing_path_nonsockcC�T|jjdd�ddd�}|�td��|j�|�Wd�dS1s#wYdS)NcSrr	rrrrrr:Er;zSSelectorEventLoopUnixSocketTests.test_create_unix_server_ssl_bool.<locals>.<lambda>�spamT)r��sslz"ssl argument must be an SSLContext)r r�rGr)r��r#r�rrr� test_create_unix_server_ssl_boolDs��"�zASelectorEventLoopUnixSocketTests.test_create_unix_server_ssl_boolcCsR|jjdd�dd�}|�td��|j�|�Wd�dS1s"wYdS)NcSrr	rrrrrr:Lr;zXSelectorEventLoopUnixSocketTests.test_create_unix_server_nopath_nosock.<locals>.<lambda>�r�z#path was not specified, and no sock�r r�rGr*r�r�rrr�%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)NcSrr	rrrrrr:Tr;zXSelectorEventLoopUnixSocketTests.test_create_unix_server_path_inetsock.<locals>.<lambda>�r�r��"A UNIX Domain Stream.*was expected)r�r r�rGr*r��r#r�r�rrr�%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)NcSrr	rrrrrr:]r;zUSelectorEventLoopUnixSocketTests.test_create_unix_server_path_dgram.<locals>.<lambda>r�r�)r�r}�
SOCK_DGRAMr r�rGr*r�r�rrr�"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)NcSrr	rrrrrr:nr;z^SelectorEventLoopUnixSocketTests.test_create_unix_server_path_stream_bittype.<locals>.<lambda>r�)r�r}�SOCK_STREAMr�r�r�r�r�r r�r�rr��os�unlink)r#r�r��fnr�r�rrr�+test_create_unix_server_path_stream_bittypecs&�
�
���zLSelectorEventLoopUnixSocketTests.test_create_unix_server_path_stream_bittypecCr�)NcSrr	rrrrrr:wr;zfSelectorEventLoopUnixSocketTests.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�rrr�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)NcSrr	rrrrrr:�r;z\SelectorEventLoopUnixSocketTests.test_create_unix_connection_path_inetsock.<locals>.<lambda>�r�r�)r�r r�rGr*r�r�rrr�)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)NcSrr	rrrrrr:�r;zUSelectorEventLoopUnixSocketTests.test_create_unix_server_bind_error.<locals>.<lambda>z/testr�cSrr	rrrrrr:�r;)rr1r�rwrZr�r>r r�r(r�rgrr`�MemoryError)r#Zm_socketr�r�rrr�"test_create_unix_server_bind_error�s��zCSelectorEventLoopUnixSocketTests.test_create_unix_server_bind_errorcCsX|jjdd�tjt�d�}|�td��|j�|�Wd�dS1s%wYdS)NcSrr	rrrrrr:�r;zXSelectorEventLoopUnixSocketTests.test_create_unix_connection_path_sock.<locals>.<lambda>r�zpath and sock can not be)r r�r��devnullrkrGr*r�r�rrr�%test_create_unix_connection_path_sock�s�"�zFSelectorEventLoopUnixSocketTests.test_create_unix_connection_path_sockcCsP|j�dd�d�}|�td��|j�|�Wd�dS1s!wYdS)NcSrr	rrrrrr:�r;z\SelectorEventLoopUnixSocketTests.test_create_unix_connection_nopath_nosock.<locals>.<lambda>zno path and sock were specified�r r�rGr*r�r�rrr�)test_create_unix_connection_nopath_nosock�s��"�zJSelectorEventLoopUnixSocketTests.test_create_unix_connection_nopath_nosockcC�V|jjdd�tjdd�}|�td��|j�|�Wd�dS1s$wYdS)NcSrr	rrrrrr:�r;z_SelectorEventLoopUnixSocketTests.test_create_unix_connection_nossl_serverhost.<locals>.<lambda>r�)Zserver_hostnamez"server_hostname is only meaningful�r r�r�r�rGr*r�r�rrr�,test_create_unix_connection_nossl_serverhost�s��"�zMSelectorEventLoopUnixSocketTests.test_create_unix_connection_nossl_serverhostcCr�)NcSrr	rrrrrr:�r;z_SelectorEventLoopUnixSocketTests.test_create_unix_connection_ssl_noserverhost.<locals>.<lambda>T)r�z/you have to pass server_hostname when using sslr�r�rrr�,test_create_unix_connection_ssl_noserverhost�s��"�zMSelectorEventLoopUnixSocketTests.test_create_unix_connection_ssl_noserverhostcCr�)NcSrr	rrrrrr:�r;zjSelectorEventLoopUnixSocketTests.test_create_unix_connection_ssl_timeout_with_plain_sock.<locals>.<lambda>r�rr�r�r�r�rrr�7test_create_unix_connection_ssl_timeout_with_plain_sock�r�zXSelectorEventLoopUnixSocketTests.test_create_unix_connection_ssl_timeout_with_plain_sock)rTrUrVrrZskip_unless_bind_unix_socketr�r�r�r�r�r�r�r��unittest�
skipUnless�hasattrr�r�r�r�rr{r�r�r�r�r�r�r|rrr$rr~s4

			�	
	r~�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#r rrr�__init__�s
z7SelectorEventLoopUnixSockSendfileTests.MyProto.__init__cCsd|_||_|j�d�dSr9)r�rr��
set_result)r#rrrr�connection_made�sz>SelectorEventLoopUnixSockSendfileTests.MyProto.connection_madecCs|j�|�dSr	)r��extend)r#r�rrr�
data_received�sz<SelectorEventLoopUnixSockSendfileTests.MyProto.data_receivedcCsd|_|j�d�dSr9)r�r�r�)r#�excrrr�connection_lost�sz>SelectorEventLoopUnixSockSendfileTests.MyProto.connection_lostc�s�|jIdHdSr	)r�r"rrrr��s�z:SelectorEventLoopUnixSockSendfileTests.MyProto.wait_closedN)rTrUrVr�r�r�r�r�rrrr�MyProto�sr�csFttjd��}|�|j�Wd�n1swYt���dS)N�wb)�openr�TESTFN�write�DATAr�
setUpClass)�cls�fpr$rrr��s�z1SelectorEventLoopUnixSockSendfileTests.setUpClasscst�tj�t���dSr	)rr�r�r�
tearDownClass)r�r$rrr��sz4SelectorEventLoopUnixSockSendfileTests.tearDownClasscs@t��|_|�|j�ttjd�|_|�|jj	�t
���dS)N�rb)r
�new_event_loopr r!r�rr�r�rFrrrr"r$rrr�s

z,SelectorEventLoopUnixSockSendfileTests.setUpTcCsRt�tjtj�}|�d�|�tjtjd�|�tjtjd�|r'|�|j	�|S)NFr�)
r��AF_INETr��setblocking�
setsockopt�
SOL_SOCKET�	SO_SNDBUF�	SO_RCVBUFrFr)r#�cleanupr�rrr�make_socket�s
z2SelectorEventLoopUnixSockSendfileTests.make_socketcCs|j�|�Sr	)r r�r�rrr�run_loop��z/SelectorEventLoopUnixSockSendfileTests.run_loopcs����}���j��t��}�jdd�}|�tj|f����jj�fdd�|d������j�	|tj|f�����j
����fdd�}��|�|�fS)NF)r�cs�Sr	rr)�protorrr:r;z@SelectorEventLoopUnixSockSendfileTests.prepare.<locals>.<lambda>r�cs2�j�����������������dSr	)rrr�r�r�r�r#Zserverrrr�s
z?SelectorEventLoopUnixSockSendfileTests.prepare.<locals>.cleanup)r�r�r rZfind_unused_portr�ZHOSTr��
create_serverZsock_connectr�rF)r#r��portZsrv_sockr�rr�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�rr{rGr
�SendfileNotAvailableErrorr�r �_sock_sendfile_nativer�rM�tell)r#r�r�rrr� 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�rkrGr
r�r�r r�rMr�r��r#r�r��frrr�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�BytesIOrGr
r�r�r r�rMr�r�r�rrr�test_sock_sendfile_iobuffer#s���zBSelectorEventLoopUnixSockSendfileTests.test_sock_sendfile_iobufferc	Csx|��\}}t��}d|j_|�tjd��|�|j	�
||dd��Wd�n1s,wY|�|j�
�d�dS)NrQr�r)r�rr1�filenorwrGr
r�r�r r�rMr�r�r�rrr�#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�r r�r�r��_sock_sendfile_native_implrsr�r2�
contextlib�suppressr
�CancelledErrorr�r(�KeyError�	_selector�get_key�r#r�r�r�r�rrr�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�r r�r�r�r�rsr�r2r(rrrrrrr�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�rr1�	cancelledrwr{�BlockingIOErrorr r�rsr�rr�assertIsNotNone�add_done_callbackrt�ANY)r#r�r�r�r��keyrrr�!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)Nrrr)r�r�r�r r�rr{rZr�rsr�r(rrr�	exceptionrLr
r�rMr�)r#r�r�r�r�r�rrr�&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�Nrri�)r�r�r�r r�rZrr{r�rsr�r(rrrr�assertIsrMr��r#r�r�r�r��errr�rrr�%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�r r�r
r�rr{r�rsr�r(rrrrrrMr�rrrr�test_sock_sendfile_exception|s"

���zCSelectorEventLoopUnixSockSendfileTests.test_sock_sendfile_exception)T)rTrUrVr�r
�Protocolr��classmethodr�r�rr�r�r�r�r�r�r�rrrrrrr|rrr$rr��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_loopr r��make_test_protocolr
r�protocolrr1r��	RawIOBase�piper�rwr{�startrF�stop�stat�S_IFIFO�st_mode�r#Zblocking_patcherZ
fstat_patcherZm_fstat�str$rrr��




z UnixReadPipeTransportTests.setUpNcC�(tj|j|j|j|d�}|�t|�|S�N��waiter)rZ_UnixReadPipeTransportr r"r rFr�r#r.rrrr�read_pipe_transport���z.UnixReadPipeTransportTests.read_pipe_transportcCsR|j��}|j|d�}|j�|�|jj�|�|j�d|j�|�	|�
��dS�Nr-r)r r�r0r�r r�r5�
assert_reader�_read_ready�assertIsNone�result�r#r.�trrrr�	test_ctor�s
z$UnixReadPipeTransportTests.test_ctorzos.readcCs6|��}d|_|��|�d|j�|jj�d�dS�N�datar)r0rwr4r5�max_sizer r��r#�m_readr8rrr�test__read_ready�s
z+UnixReadPipeTransportTests.test__read_readycCs\|��}d|_|��|�d|j�|�|jj�t�	|j�|j
j��|j
j�d�dS)N�r)
r0rwr4r5r<r^r �readersr��run_brieflyr Zeof_receivedr�r=rrr�test__read_ready_eof�sz/UnixReadPipeTransportTests.test__read_ready_eofcCsD|��}t|_|��|�d|j�t�|j�|�	|j
jj�dS�Nr)
r0r
r>r4r5r<r�rBr r^r r�r`r=rrr�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)r0rZr>rr1�_closer4r5r<r�ZMockPattern�MOCK_ANY)r#r>�m_logexcr8rrrr�test__read_ready_error�s
�
�z1UnixReadPipeTransportTests.test__read_ready_errorcCs8|��}t��}|j�d|�|��|�|jj�dSrD)r0rr1r �
add_reader�
pause_readingr^rA)r#r>r8�mrrr�test_pause_reading�s
z-UnixReadPipeTransportTests.test_pause_readingcCs,|��}|��|��|j�d|j�dSrD)r0rM�resume_readingr r3r4r=rrr�test_resume_reading�sz.UnixReadPipeTransportTests.test_resume_readingcCs*|��}t��|_|��|j�d�dSr	)r0rr1rHrr5r=rrrru�s
z%UnixReadPipeTransportTests.test_closecCs2|��}d|_t��|_|��|�|jj�dSr9)r0�_closingrr1rHrr^r`r=rrr�test_close_already_closing�s

z5UnixReadPipeTransportTests.test_close_already_closingcCsR|��}t�}|�|�|�|���|�|jj�t�	|j�|j
j�|�dSr	)
r0rkrHrg�
is_closingr^r rAr�rBr r�r5)r#r>r8rrrr�test__closes
z&UnixReadPipeTransportTests.test__closecC�d|��}|�|j�|�|j�d}|�|�|jj�|�|jj	��|�
|j�|�
|j�dSr	)r0r�	_protocol�_loop�_call_connection_lostr r�r5r"rr5�r#r8rrrr�test__call_connection_lost
�
z5UnixReadPipeTransportTests.test__call_connection_lostcC�f|��}|�|j�|�|j�t�}|�|�|jj�|�|j	j
��|�|j�|�|j�dSr	)r0rrWrXrZrYr r�r5r"rr5rZrrr�#test__call_connection_lost_with_err�
z>UnixReadPipeTransportTests.test__call_connection_lost_with_errcC�4|��}|��t�|j�|�|j�|��dSr	)r0rr�rBr r5rXrM�r#r8rrr�!test_pause_reading_on_closed_pipe$�
z<UnixReadPipeTransportTests.test_pause_reading_on_closed_pipecCs|��}|��|��dSr	)r0rMrarrr�!test_pause_reading_on_paused_pipe+sz<UnixReadPipeTransportTests.test_pause_reading_on_paused_pipecCr`r	)r0rr�rBr r5rXrPrarrr�"test_resume_reading_on_closed_pipe1rcz=UnixReadPipeTransportTests.test_resume_reading_on_closed_pipecCs|��}|��dSr	)r0rPrarrr�"test_resume_reading_on_paused_pipe8sz=UnixReadPipeTransportTests.test_resume_reading_on_paused_piper	)rTrUrVrr0r9rr{r?rCrErKrOrQrurSrUr[r^rbrdrerfr|rrr$rr�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�UnixWritePipeTransportTestscrr)rrrr r�rr
ZBaseProtocolr rr1r�r!r"r�rwr{r#rFr$r%�S_IFSOCKr'r(r$rrrAr*z!UnixWritePipeTransportTests.setUpNcCr+r,)rZ_UnixWritePipeTransportr r"r rFrr/rrr�write_pipe_transportSr1z0UnixWritePipeTransportTests.write_pipe_transportcCsT|j��}|j|d�}|j�|�|jj�|�|j�d|j�|�	d|�
��dSr2)r r�rir�r r�r5r3r4rMr6r7rrrr9Zs
z%UnixWritePipeTransportTests.test_ctorcCs|��}|�|���dSr	)rirgZ
can_write_eofrarrr�test_can_write_eofcsz.UnixWritePipeTransportTests.test_can_write_eofzos.writecCsF|��}d|_|�d�|�dd�|�|jj�|�t�|j	�dS)N�r;r)
rirwr�r5r^r �writersrMr��_buffer�r#�m_writer8rrr�
test_writegs
z&UnixWritePipeTransportTests.test_writecCsB|��}|�d�|�|j�|�|jj�|�td�|j�dS)Nr@)	rir�r^r`r rlrMr�rmrnrrr�test_write_no_dataps

z.UnixWritePipeTransportTests.test_write_no_datacCs>|��}d|_|�d�|j�d|j�|�td�|j�dS)Nrer;r�ta)	rirwr�r �
assert_writer�_write_readyrMr�rmrnrrr�test_write_partialxs

z.UnixWritePipeTransportTests.test_write_partialcCs^|��}|j�d|j�td�|_|�d�|�|j�|j�	d|j�|�
td�|j�dS)Nrspreviousr;spreviousdata)rir �
add_writerrtr�rmr�r^r`rsrMrnrrr�test_write_buffer�s

z-UnixWritePipeTransportTests.test_write_buffercCsP|��}t�|_|�d�|�dtd��|j�d|j�|�	td�|j
�dSr:)rir
r>r�r5r�r rsrtrMrmrnrrr�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 transportrrez=pipe closed by peer or os.write(pipe, data) raised exception.)rirZr>rr1Z_fatal_errorr�r5r^r rlrMr�rm�
_conn_lost�warningr)r#roZm_logr8rrrr�test_write_err�s.

�




�z*UnixWritePipeTransportTests.test_write_errcCsD|��}|��|�d�|�|jd�|�d�|�|jd�dS)Nr;rre)rir4r�rMryrnrrr�test_write_close�s

z,UnixWritePipeTransportTests.test_write_closecCsX|��}|��|�|jj�|�|jj�|�|���t�	|j�|j
j�d�dSr	)
rir4r^r rArlrgrTr�rBr r�r5rarrrr?�sz,UnixWritePipeTransportTests.test__read_readycCsR|��}|j�d|j�td�|_d|_|��|�|jj�|�	t�|j�dS)Nrr;rk)
rir rvrtr�rmrwr^rlrMrnrrr�test__write_ready�s
z-UnixWritePipeTransportTests.test__write_readycCsV|��}|j�d|j�td�|_d|_|��|j�d|j�|�td�|j�dS)Nrr;��a)	rir rvrtr�rmrwrsrMrnrrr�test__write_ready_partial�s
z5UnixWritePipeTransportTests.test__write_ready_partialcCsh|��}|j�d|j�td�|_t�|_|��|�dtd��|j�	d|j�|�
td�|j�dS)Nrr;)rir rvrtr�rmr
r>r5rsrMrnrrr�test__write_ready_again�s
z3UnixWritePipeTransportTests.test__write_ready_againcCsf|��}|j�d|j�td�|_d|_|��|�dtd��|j�d|j�|�	td�|j�dS)Nrr;r)
rir rvrtr�rmrwr5rsrMrnrrr�test__write_ready_empty�s
z3UnixWritePipeTransportTests.test__write_ready_emptyrFcCs�|��}|j�d|j�td�|_t�|_}|��|�|jj	�|�|jj
�|�t�|j�|�|�
��|��|�d|j�t�|j�|jj�|�dS)Nrr;r)rir rvrtr�rmrZr>r^rlrArMrgrTZassert_not_calledryr�rBr r�r5)r#rorJr8rrrr�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;rk)rir rvrtrRr�rmrwr^rlrArMr r�r5r"rrnrrr�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)Nrsdarr)rir rvrtrLr4rm�abortr^r`rArlrMrgrTr�rBr r�r5rnrrr�
test_abort
s
z&UnixWritePipeTransportTests.test_abortcCrVr	)rirrWrXrYr r�r5r"rr5rZrrrr[r\z6UnixWritePipeTransportTests.test__call_connection_lostcCr]r	)rirrWrXrZrYr r�r5r"rr5rZrrrr^&r_z?UnixWritePipeTransportTests.test__call_connection_lost_with_errcCs0|��}t��|_|��|j��|��dSr	)rirr1�	write_eofrr5rarrrru3s


z&UnixWritePipeTransportTests.test_closecCs2|��}t��|_d|_|��|�|jj�dSr9)rirr1r�rRrr^r`rarrr�test_close_closing<s

z.UnixWritePipeTransportTests.test_close_closingcCsJ|��}|��|�|���|�|jj�t�|j�|j	j
�d�dSr	)rir�rgrTr^r rAr�rBr r�r5rarrr�test_write_eofCsz*UnixWritePipeTransportTests.test_write_eofcCs:|��}dg|_|��|�|���|�|jjj�dS)Nr;)	rirmr�rgrTr^r r�r`rarrr�test_write_eof_pendingKs
z2UnixWritePipeTransportTests.test_write_eof_pendingr	)rTrUrVrrir9rjrr{rprqrurwrxr{r|r?r}r�r�r�r�r�r�r[r^rur�r�r�r|rrr$rrg?sT
	



	

		
	
	







	rgc@�eZdZdd�ZdS)�AbstractChildWatcherTestscCs�t��}t��}|�t|j||�|�t|j|�|�t|j|�|�t|j	�|�t|j
�|�t|j�|�t|j|||�dSr	)
rr1r
ZAbstractChildWatcherr(�NotImplementedError�add_child_handler�remove_child_handler�attach_looprZ	is_active�	__enter__�__exit__�r#r��watcherrrr�test_not_implementedUs.
�������z.AbstractChildWatcherTests.test_not_implementedN�rTrUrVr�rrrrr�S�r�c@r�)�BaseChildWatcherTestscCs$t��}t��}|�t|j|�dSr	)rr1rZBaseChildWatcherr(r�Z_do_waitpidr�rrrr�js
�z*BaseChildWatcherTests.test_not_implementedNr�rrrrr�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)*�ChildWatcherTestsMixinrzcspt���|��|_d|_i|_tj�|jd��|_	|�
�|_|j�|j�Wd�dS1s1wYdS)NFr@)
rrrr �running�zombiesrr{rk�m_add_signal_handler�create_watcherr�r�r"r$rrrus

�
"�zChildWatcherTestsMixin.setUpcCslt|jtj�s|dkr|�|d�z|dkr|j��WS||j�|�fWSty-Ynw|j	r3dSt
��)NrQr)rr)�
isinstancer�r
�SafeChildWatcherZ
assertGreaterr��popitem�poprr��ChildProcessError)r#�pid�flagsrrr�waitpid�s�zChildWatcherTestsMixin.waitpidcCs||j|<dSr	)r�)r#r��statusrrr�
add_zombie�rz!ChildWatcherTestsMixin.add_zombiecCs4|dkr|dSd|krdkr|dS|S|S)Nri�r)r#r�rrr�waitstatus_to_exitcode�s�z-ChildWatcherTestsMixin.waitstatus_to_exitcodecCs|j�tj|jj�dSr	)r�rtr+rrr��	_sig_chldr"rrr�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)rr{r1)�target�wrapperrrrr{�s�zIChildWatcherTestsMixin.waitpid_mocks.<locals>.wrapped_func.<locals>.patchz*asyncio.unix_events.waitstatus_to_exitcodez
os.waitpid)r�r�)r#r{�	m_waitpid�rHrr�wrapped_func�s
�P�z:ChildWatcherTestsMixin.waitpid_mocks.<locals>.wrapped_funcr)rHr�rr�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��
)rr1r�r�r�r^r`r�r�rrtrl�ignore_warningsr��clear�r#r��callbackrrr�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�+���,��r~����lFr��)rr1r�r�r�r^r`r�r�rrtrlrr�r�r��r#r��	callback1�	callback2rrr�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�)rr1r�r�r�r^r`r�r�rrrtrlr�r�rrr�.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�2rkrr�)
rr1r�r�rr�r�rtrlrr�r^r`r�rrr�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�)rr1r�r�r�r^r`r�rr�rtrlrr�r�rrr�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)rr1r�r�r�r^r`r�r�rr�r�r�rrr�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)rr1r�r�r�r^r`r�r�rtrlr�rr�r�rrr�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�7re�8r~rF)rr1r�r�r�rgr�r^r�rr�r�r`rt)r#r�r�r��	callback3rrr�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)rr1r�r�r�r*r>r{rkr�loggerrMr�rgr`)r#r�r�Zm_errorrrr� 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�:Frk�)rr1r�r�r�r^r`r�rr�r��WNOHANGrlr�r�r�r
�FastChildWatcherrtr�rrr�#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)rr1r�r�r�r�rr�r�rtr^r`r�rrr�,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�<r4r@Fr�)rr1r�r�r�r rr{rkr�rtr+rrr�r�r)r#r�r��old_loopr{Zm_old_removeZ	m_new_addrrr�
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�=�>inr4zA loop is being detached�rr@r�Fr�)rr1r�r�r�r r{rkrx�RuntimeWarningr�rtr+rrr�rrr^r`rr�rl)r#r�r�r�r�r��m_remove_signal_handlerr�rrr�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��@rr4)rr1r�r�r�rr�r�rMrsZ
_callbacksr�r
r�Z_zombiesr{rkr rrtr+rrr^)r#r�r�r�rrrruus8
�
����"�z!ChildWatcherTestsMixin.test_close)rTrUrVrr{rkrr�r�rr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rur|rrr$rr�qsH
%
B
/

%


 




=r�c@r�)�SafeChildWatcherTestscC�t��Sr	)r
r�r"rrrr��rz$SafeChildWatcherTests.create_watcherN�rTrUrVr�rrrrr���r�c@r�)�FastChildWatcherTestscCr�r	)r
r�r"rrrr��rz$FastChildWatcherTests.create_watcherNr�rrrrr��r�r�c@r�)�PolicyTestscCr�r	)r
ZDefaultEventLoopPolicyr"rrr�
create_policy�rzPolicyTests.create_policycCsL|��}|�|j�|��}|�|tj�|�|j|�|�||���dSr	)r�r5�_watcher�get_child_watcherrLr
ZThreadedChildWatcherr�r#�policyr�rrr�test_get_default_child_watcher�sz*PolicyTests.test_get_default_child_watchercCs<|��}t��}|�|�|�|j|�|�||���dSr	)r�r
r��set_child_watcherrr�r�rrrr� 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	)r!r�rLZget_event_loopr
ZAbstractEventLoopr�r�r5rXr)r��rr#rrr��s
�z4PolicyTests.test_get_child_watcher_thread.<locals>.f)r�)r�rr
r��	threading�Threadr#�join)r#r��thrrr�test_get_child_watcher_thread�sz)PolicyTests.test_get_child_watcher_threadcCs�|��}|��}|�|�t��}|�|�|�|�|�|j|�|��}|�|�|�|j|�|�d�|�|jd�|�	�|�	�dSr	)
r�r�r!r
r�rr�rrXr)r#rr r�Znew_looprrr�,test_child_watcher_replace_mainloop_existing�s




z8PolicyTests.test_child_watcher_replace_mainloop_existingN)rTrUrVr�rrr
rrrrrr��sr�c@s,eZdZdd�Zdd�Zdd�Zdd�Zd	S)
�TestFunctionalcCst��|_t�|j�dSr	)r
r�r r!r"rrrr�s
zTestFunctional.setUpcCs|j��t�d�dSr	)r rr
r!r"rrr�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)rGr*rr"rr�
assert_raises�r�zFTestFunctional.test_add_reader_invalid_argument.<locals>.assert_raisescSrr	rrrrrr:�r;zATestFunctional.test_add_reader_invalid_argument.<locals>.<lambda>)r rLrkrv�
remove_reader�
remove_writer)r#rrOrr"r� 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)rGr?rr"rrrs�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
rrrrrr:	szWTestFunctional.test_add_reader_or_writer_transport_fd.<locals>.runner.<locals>.<lambda>r�cSrr	rrrrrr:r;)r �create_connectionrLr�rrvrr)r8ZprrO�rZrsockr#rr�runnersB�����������zETestFunctional.test_add_reader_or_writer_transport_fd.<locals>.runner)r��
socketpairr r�r)r#rZwsockrrr�&test_add_reader_or_writer_transport_fds�
z5TestFunctional.test_add_reader_or_writer_transport_fdN)rTrUrVrr
rrrrrrr�s
r�__main__)0�__doc__r�rWr�r�r�r+r�r%�sysr�rr�rZtest.supportrr�platformZSkipTestr
rrZtest.test_asynciorr�r
r
rIrrrr�ZTestCaserr�r~r�rrgr�r�r�r�r�r�rrT�mainrrrr�<module>sv


	^�)�N2	)G
F�