Your IP : 216.73.216.213


Current Path : /opt/alt/python35/lib64/python3.5/test/test_asyncio/__pycache__/
Upload File :
Current File : //opt/alt/python35/lib64/python3.5/test/test_asyncio/__pycache__/test_events.cpython-35.pyc



��Yf	��@s4dZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZyddl
Z
Wnek
r�dZ
YnXddlZddlZddlZddlZddlZddlZddlmZddlZej	dkr(ddlZddlZddlmZddlmZddlmZddlmZdd	lmZydd
lmZWn"ek
r�ddlm ZYnXe
dk	r�e
j!dddfkZ"nd
Z"dd�Z#dd�Z$dd�Z%e#d�Z&e#d�Z'e#d�Z(e#d�Z)dddddddffddffd d!ffd"d#fffd$ddffd d%ffd"d&fffd'd(d)d*iZ*Gd+d,�d,ej+�Z,Gd-d.�d.e,�Z-Gd/d0�d0ej.�Z/Gd1d2�d2ej+�Z0Gd3d4�d4ej1�Z2Gd5d6�d6ej3�Z4Gd7d8�d8�Z5Gd9d:�d:�Z6ej	dkr�Gd;d<�d<e5ej7�Z8Gd=d>�d>e5e6ej7�Z9n�dd?lm:Z:Gd@dA�dAe5�Z;e<e:dB�rGdCdD�dDe;e6ej7�Z=e<e:dE�rDGdFdG�dGe;e6ej7�Z>e<e:dH�rrGdIdJ�dJe;e6ej7�Z?GdKd<�d<e;e6ej7�Z8dLdM�Z@GdNdO�dOej7�ZAGdPdQ�dQej7�ZBGdRdS�dSej7�ZCGdTdU�dUej7�ZDGdVdW�dWej7�ZEeFdXkr0ejG�dS)YzTests for events.py.�N)�mock�win32)�
coroutines)�proactor_events)�selector_events)�sslproto)�
test_utils)�support)�test_support�FcCs�ttd�r=tjjtj|�}tjj|�r=|Stjjtjjt�|�}tjj|�rt|St	|��dS)N�
TEST_HOME_DIR)
�hasattrr	�os�path�joinr�isfile�dirname�__file__�FileNotFoundError)�filename�fullname�r�B/opt/alt/python35/lib64/python3.5/test/test_asyncio/test_events.py�	data_file/s!rcCsKtjdkrdStj�d}ttt|jd���}|dkS)z4Return True if the platform is Mac OS 10.4 or older.�darwinFr�.�
�)rr)�sys�platformZmac_ver�tuple�map�int�split)�versionrrr�	osx_tiger:s
r%cCs5dd�}tj�}tj|�|j|��S)Nc�sdS)N�hellorrrrr�doitDsz8_test_get_event_loop_new_process__sub_proc.<locals>.doit)�asyncio�new_event_loop�set_event_loop�run_until_complete)r'�looprrr�*_test_get_event_loop_new_process__sub_procCs
r-zssl_cert.pemzssl_key.pemzkeycert3.pemzpycacert.pemZserialNumberZB09264B1F2DA21D1r$ZsubjectZcountryNameZXYZlocalityNamezCastle AnthraxZorganizationNamezPython Software FoundationZ
commonName�	localhostZissuerzPython Software Foundation CAz
our-ca-serverZnotAfterzNov 13 19:47:07 2022 GMTZ	notBeforezJan  4 19:47:07 2013 GMTc@s[eZdZdZdZddd�Zdd�Zdd�Zdd	�Zd
d�Z	dS)�MyBaseProtoNcCsUd|_d|_d|_|dk	rQtjd|�|_tjd|�|_dS)N�INITIALrr,)�	transport�state�nbytesr(�Future�	connected�done)�selfr,rrr�__init__as			zMyBaseProto.__init__cCsM||_|jdks't|j��d|_|jrI|jjd�dS)Nr0�	CONNECTED)r1r2�AssertionErrorr5�
set_result)r7r1rrr�connection_madeis
			zMyBaseProto.connection_madecCs7|jdkst|j��|jt|�7_dS)Nr9)r2r:r3�len)r7�datarrr�
data_receivedpszMyBaseProto.data_receivedcCs+|jdkst|j��d|_dS)Nr9�EOF)r2r:)r7rrr�eof_receivedtszMyBaseProto.eof_receivedcCsD|jdkst|j��d|_|jr@|jjd�dS)Nr9r@�CLOSED)r9r@)r2r:r6r;)r7�excrrr�connection_lostxs		zMyBaseProto.connection_lost)
�__name__�
__module__�__qualname__r5r6r8r<r?rArDrrrrr/]sr/cs"eZdZ�fdd�Z�S)�MyProtocs!t�j|�|jd�dS)Ns%GET / HTTP/1.0
Host: example.com

)�superr<�write)r7r1)�	__class__rrr<�szMyProto.connection_made)rErFrGr<rr)rKrrHsrHc@sUeZdZdZddd�Zdd�Zdd�Zdd	�Zd
d�ZdS)�MyDatagramProtoNcCs7d|_d|_|dk	r3tjd|�|_dS)Nr0rr,)r2r3r(r4r6)r7r,rrrr8�s		zMyDatagramProto.__init__cCs4||_|jdks't|j��d|_dS)Nr0�INITIALIZED)r1r2r:)r7r1rrrr<�s	zMyDatagramProto.connection_madecCs7|jdkst|j��|jt|�7_dS)NrM)r2r:r3r=)r7r>�addrrrr�datagram_received�sz!MyDatagramProto.datagram_receivedcCs"|jdkst|j��dS)NrM)r2r:)r7rCrrr�error_received�szMyDatagramProto.error_receivedcCsD|jdkst|j��d|_|jr@|jjd�dS)NrMrB)r2r:r6r;)r7rCrrrrD�s		zMyDatagramProto.connection_lost)	rErFrGr6r8r<rOrPrDrrrrrL�srLc@sUeZdZdZddd�Zdd�Zdd�Zdd	�Zd
d�ZdS)�MyReadPipeProtoNcCsCdg|_d|_d|_|dk	r?tjd|�|_dS)Nr0rr,)r2r3r1r(r4r6)r7r,rrrr8�s
		zMyReadPipeProto.__init__cCs>||_|jdgks*t|j��|jjd�dS)Nr0r9)r1r2r:�append)r7r1rrrr<�s	!zMyReadPipeProto.connection_madecCs=|jddgks$t|j��|jt|�7_dS)Nr0r9)r2r:r3r=)r7r>rrrr?�s$zMyReadPipeProto.data_receivedcCs8|jddgks$t|j��|jjd�dS)Nr0r9r@)r2r:rR)r7rrrrA�s$zMyReadPipeProto.eof_receivedcCssd|jkr|jjd�|jdddgksFt|j��|jjd�|jro|jjd�dS)Nr@r0r9rB)r2rRr:r6r;)r7rCrrrrD�s'	zMyReadPipeProto.connection_lost)	rErFrGr6r8r<r?rArDrrrrrQ�srQc@s=eZdZdZddd�Zdd�Zdd�ZdS)�MyWritePipeProtoNcCs7d|_d|_|dk	r3tjd|�|_dS)Nr0r,)r2r1r(r4r6)r7r,rrrr8�s		zMyWritePipeProto.__init__cCs4||_|jdks't|j��d|_dS)Nr0r9)r1r2r:)r7r1rrrr<�s	z MyWritePipeProto.connection_madecCsD|jdkst|j��d|_|jr@|jjd�dS)Nr9rB)r2r:r6r;)r7rCrrrrD�s		z MyWritePipeProto.connection_lost)rErFrGr6r8r<rDrrrrrS�srSc@sXeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
S)�MySubprocessProtocolcs�d|_d|_tjd��|_tjd��|_�fdd�td�D�|_ddddi|_d|_	dtj
d��dtj
d��i|_dS)	Nr0r,cs%i|]}tjd��|�qS)r,)r(r4)�.0�fd)r,rr�
<dictcomp>�s	z1MySubprocessProtocol.__init__.<locals>.<dictcomp>�r��)r2r1r(r4r5�	completed�range�disconnectsr>�
returncodeZEvent�got_data)r7r,r)r,rr8�s		"	zMySubprocessProtocol.__init__cCsD||_|jdks't|j��d|_|jjd�dS)Nr0r9)r1r2r:r5r;)r7r1rrrr<�s		z$MySubprocessProtocol.connection_madecCs;|jdkst|j��d|_|jjd�dS)Nr9rB)r2r:r[r;)r7rCrrrrD�s	z$MySubprocessProtocol.connection_lostcCsD|jdkst|j��|j||7<|j|j�dS)Nr9)r2r:r>r_�set)r7rVr>rrr�pipe_data_received�sz'MySubprocessProtocol.pipe_data_receivedcCsS|jdkst|j��|r;|j|j|�n|j|j|�dS)Nr9)r2r:r]Z
set_exceptionr;)r7rVrCrrr�pipe_connection_lost�sz)MySubprocessProtocol.pipe_connection_lostcCs4|jdkst|j��|jj�|_dS)Nr9)r2r:r1Zget_returncoder^)r7rrr�process_exited�sz#MySubprocessProtocol.process_exitedN)	rErFrGr8r<rDrarbrcrrrrrT�srTcsoeZdZ�fdd�Z�fdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zdd�Zejeed�d�dd ��Zd!d"�Zd#d$�Zejeed%�d&�d'd(��Zejeed)�d*�d+d,��Zejeed)�d*�d-d.��Zd/d0d1�Zd2d3�Zejeed�d�d4d5��Zd6d7�Zd/d8id9d:�Z d/d8d;d<�Z!d/d8d=d>�Z"ej#e$d8kd?�d@dA��Z%dBdC�Z&ej#e$d8kd?�ejeed�d�dDdE���Z'dFdG�Z(dHdI�Z)dJdK�Z*d8d8dLdM�Z+ej#e$d8kd?�dNdO��Z,e-j.dP�dQdR��Z/dSdT�Z0dUdV�Z1dWdX�Z2ejeedY�dZ�d[d\��Z3d]d^�Z4ejeed�d�d_d`��Z5ejeed�d�dadb��Z6d8dcdd�Z7d8dedf�Z8d8dgdh�Z9ej#e$d8kd?�didj��Z:dkdl�Z;ej#e$d8kd?�ejeed�d�dmdn���Z<dodp�Z=ej#e$d8kd?�dqdr��Z>dsdt�Z?ej#e$d8kd?�ejeed�d�dudv���Z@dwdx�ZAej#e$d8kd?�ej#eBdy�dzd{���ZCd|d}�ZDej#e$d8kd?�ejeed�d�d~d���ZEd�d��ZFej#e$d8kd?�d�d���ZGd�d��ZHd�d��ZId�d��ZJejeKjLd��d�d���ZMd�d��ZNd�d��ZOd�d��ZPd�d��ZQejeRjSd�kd��d�d���ZTejeRjSd�kd��d�d���ZUejeRjSd�kd��eKjVd�d��eKjWd��d�d�����ZXejeRjSd�kd��d�d���ZYejeRjSd�kd��d�d���ZZejeRjSd�kd��eKjVd�d��d�d����Z[ejeRjSd�kd��eKjVd�d��d�d����Z\d�d��Z]d�d��Z^d�d��Z_d�d��Z`d�d��Zad�d��Zb�S)��EventLoopTestsMixincs0t�j�|j�|_|j|j�dS)N)rI�setUp�create_event_loopr,r*)r7)rKrrres
zEventLoopTestsMixin.setUpcsG|jj�stj|j�|jj�tj�t�j�dS)N)	r,�	is_closedr�run_briefly�close�gcZcollectrI�tearDown)r7)rKrrrks


zEventLoopTestsMixin.tearDowncsStjdd���tj��fdd��}�jt�jj|��dS)Ncss	dVdS)Nrrrrr�coro1szBEventLoopTestsMixin.test_run_until_complete_nesting.<locals>.coro1cs-�j�jj���jj���dS)N)�
assertTruer,�
is_runningr+r)rlr7rr�coro2szBEventLoopTestsMixin.test_run_until_complete_nesting.<locals>.coro2)r(�	coroutine�assertRaises�RuntimeErrorr,r+)r7ror)rlr7r�test_run_until_complete_nestingsz3EventLoopTestsMixin.test_run_until_complete_nestingcCsr|jj�}|jjtjdd|j��|jj�}|jd||koadkn||�dS)Ng�������?r,g{�G�z�?g�������?)r,�timer+r(�sleeprm)r7�t0�t1rrr�test_run_until_completes"z+EventLoopTestsMixin.test_run_until_completecsAtj�fdd��}|�}�jt�jj|�dS)Nc3s,�jj�tjdd�j�EdHdS)Ng�������?r,)r,�stopr(rur)r7rr�cb&s
z?EventLoopTestsMixin.test_run_until_complete_stopped.<locals>.cb)r(rprqrrr,r+)r7rzZtaskr)r7r�test_run_until_complete_stopped%s		z3EventLoopTestsMixin.test_run_until_complete_stoppedcs�g���fdd�}�jjd|d�tj�}�jj�tj�}�j�dg��jd||ko�dkn||�dS)Ncs�j|��jj�dS)N)rRr,ry)�arg)�resultsr7rr�callback1s
z5EventLoopTestsMixin.test_call_later.<locals>.callbackg�������?zhello worldg{�G�z�?g�������?)r,�
call_laterrt�	monotonic�run_forever�assertEqualrm)r7r~rvrwr)r}r7r�test_call_later.s
z#EventLoopTestsMixin.test_call_latercsUg���fdd�}�jj|dd��jj��j�dg�dS)Ncs$�j||f��jj�dS)N)rRr,ry)Zarg1Zarg2)r}r7rrr~?sz4EventLoopTestsMixin.test_call_soon.<locals>.callbackr&�world)r&r�)r,�	call_soonr�r�)r7r~r)r}r7r�test_call_soon<s

z"EventLoopTestsMixin.test_call_sooncs�g�tj����fdd�����fdd�}�j�tjd|�}|j���%�jj�d��jj�WdQRX|j��j	�ddg�dS)Ncs0�j|�t��dkr,�jj�dS)NrZ)rRr=r,ry)r|)r}r7rrr~Ks
z?EventLoopTestsMixin.test_call_soon_threadsafe.<locals>.callbackcs!�jj�d��j�dS)Nr&)r,�call_soon_threadsafe�releaser)r~�lockr7rr�
run_in_threadPszDEventLoopTestsMixin.test_call_soon_threadsafe.<locals>.run_in_thread�targetr�r&)
�	threadingZLock�acquire�Thread�startr,r�r�rr�)r7r��tr)r~r�r}r7r�test_call_soon_threadsafeGs


z-EventLoopTestsMixin.test_call_soon_threadsafecshg���fdd�}�jj|d��jj|d��jj��j�ddg�dS)Ncs0�j|�t��dkr,�jj�dS)NrZ)rRr=r,ry)r|)r}r7rrr~as
zKEventLoopTestsMixin.test_call_soon_threadsafe_same_thread.<locals>.callbackr&r�)r,r�r�r�r�)r7r~r)r}r7r�%test_call_soon_threadsafe_same_thread^s
z9EventLoopTestsMixin.test_call_soon_threadsafe_same_threadcCsfdd�}|jjd|d�}|jj|�\}}|j|d�|j|tj��dS)NcSs|tj�fS)N)r��	get_ident)r|rrr�runlsz5EventLoopTestsMixin.test_run_in_executor.<locals>.runZyo)r,�run_in_executorr+r�ZassertNotEqualr�r�)r7r��f2�resZ	thread_idrrr�test_run_in_executorks
z(EventLoopTestsMixin.test_run_in_executorcs
tj�\�}�jd�t�����fdd�}�jj�j�|��jj|jd�tj	�j�fdd���jj|jd�tj	�j�fdd���jj|j
��jj�jj��jj��j
�d	�dS)
NFcsoy�jd�}Wntk
r+dSYnX|rB�j|�n)�j�jj�j����j�dS)Ni)�recv�BlockingIOError�extendrmr,�
remove_reader�filenori)r>)�
bytes_read�rr7rr�readerxs
	z8EventLoopTestsMixin.test_reader_callback.<locals>.readersabccst��dkS)NrX)r=r)r�rr�<lambda>�sz:EventLoopTestsMixin.test_reader_callback.<locals>.<lambda>sdefcst��dkS)N�)r=r)r�rrr��ssabcdef)r�
socketpair�setblocking�	bytearrayr,�
add_readerr�r��send�	run_untilriryr�r�)r7�wr�r)r�r�r7r�test_reader_callbackss
	

z(EventLoopTestsMixin.test_reader_callbackcs�tj�\}��jd���fdd�}dd}�jj�j�||��jj��j�jj�j����j	�jj�j����j
�|jt|�d�}|j
��j
||�dS)NFcs�j|��jj�dS)N)r�r,ry)r>)r7r�rr�writer�s
z8EventLoopTestsMixin.test_writer_callback.<locals>.writer�xirZ)rr�r�r,�
add_writerr�r�rm�
remove_writer�assertFalserir�r=r�)r7r�r�r>�readr)r7r�r�test_writer_callback�s




z(EventLoopTestsMixin.test_writer_callbackc Cs�t|jtj�s
|jjd�|jd�|jt��'|jj|jj	||j
��WdQRX|jt��$|jj|jj|d��WdQRX|jt��$|jj|jj|d��WdQRX|jt��!|jj|jj
|��WdQRX|jd�|jj|jj	||j
��|jj|jj|d��|jj|jj|d��}|jj|jj|d��|j�|j|jd��dS)NTsGET / HTTP/1.0

iFsHTTP/1.0 200 OK)�
isinstancer,r�BaseProactorEventLoop�	set_debugr�rq�
ValueErrorr+�sock_connect�address�sock_sendall�	sock_recv�sock_acceptrirm�
startswith)r7�httpd�sockr>rrr�_basetest_sock_client_ops�s4
	 			
				
z-EventLoopTestsMixin._basetest_sock_client_opsc
Cs6tj��#}tj�}|j||�WdQRXdS)N)r�run_test_server�socketr�)r7r�r�rrr�test_sock_client_ops�sz(EventLoopTestsMixin.test_sock_client_ops�AF_UNIXzNo UNIX Socketsc
Cs<tj��)}tjtj�}|j||�WdQRXdS)N)r�run_test_unix_serverr�r�r�)r7r�r�rrr�test_unix_sock_client_ops�sz-EventLoopTestsMixin.test_unix_sock_client_opscCs�d}z)tj�}|jd�|j�}Wd|j�Xtj�}|jd�|jt��$|jj|jj	||��WdQRX|j�dS)N�	127.0.0.1rF)r�r)
r��bind�getsocknamerir�rq�ConnectionRefusedErrorr,r+r�)r7r��sr�rrr�test_sock_client_fail�s

	z)EventLoopTestsMixin.test_sock_client_failcCs�tj�}|jd�|jd�|jd�tj�}|j|j��|jj|�}|jj|�\}}|j	|j
�d�|j	||j��|j	|j�|j��|j�|j�|j�dS)NF�	127.0.0.1rr)r�r)
r�r�r��listen�connectr�r,r�r+r�Z
gettimeoutZgetpeernameri)r7Zlistener�client�f�connrNrrr�test_sock_accept�s




z$EventLoopTestsMixin.test_sock_accept�SIGKILLz
No SIGKILLcs�d��fdd�}|jt|jjd|�|jt|jjd�|jt|jjtjd|�|jt|jjtjd�|jt|jjd|�|jt|jjd�|jt|jjd|�|jt|jjd	�|jt|jjtj	|�|j
|jjtj	��|jjtj|�tj
tj�tj�tj|j�fdd��|j|jjtj��|jtjtj�tj�|j
|jjtj��dS)
Nrcs�d7�dS)Nrrr)�caughtrr�
my_handler�sz?EventLoopTestsMixin.test_add_signal_handler.<locals>.my_handlerZboomrcs�S)Nrr)r�rrr�sz=EventLoopTestsMixin.test_add_signal_handler.<locals>.<lambda>���r�)rq�	TypeErrorr,�add_signal_handler�remove_signal_handlerr��signal�NSIGrrr�r��SIGINTr�kill�getpidrr�rmr��	getsignal�default_int_handler)r7r�r)r�r�test_add_signal_handler�s<
z+EventLoopTestsMixin.test_add_signal_handler�SIGALRMz
No SIGALRMcshd���fdd�}�jjtj|�tjtjdd��jj��j�d�dS)Nrcs�d7��jj�dS)Nr)r,ryr)r�r7rrr�"s
zLEventLoopTestsMixin.test_signal_handling_while_selecting.<locals>.my_handlerg{�G�z�?r)r,r�r�r��	setitimer�ITIMER_REALr�r�)r7r�r)r�r7r�$test_signal_handling_while_selectings
z8EventLoopTestsMixin.test_signal_handling_while_selectingcs�d�d����fdd�}�jjtj|��tjtjdd��jjd�jj��jj��j	�d�dS)	N�*rcs�d7��j|��dS)Nr)r�)�args)r�r7�	some_argsrrr�2s
zAEventLoopTestsMixin.test_signal_handling_args.<locals>.my_handlerg�������?g�?r)r�)
r,r�r�r�r�r�rryr�r�)r7r�r)r�r7r�r�test_signal_handling_args-s
z-EventLoopTestsMixin.test_signal_handling_argsTcCs�|jj|�\}}|j|tj�|j|tj�|j|j|�|rm|j|j	d��|jj|j
�|j|jd�|j
�dS)N�socknamer)r,r+�assertIsInstancer(�	Transport�Protocol�assertIsr1�assertIsNotNone�get_extra_infor6�
assertGreaterr3ri)r7�connection_fut�check_sockname�tr�prrrr�_basetest_create_connection>sz/EventLoopTestsMixin._basetest_create_connectioncsKtj��8}�jj�fdd�|j�}�j|�WdQRXdS)Ncstd�j�S)Nr,)rHr,r)r7rrr�Lsz<EventLoopTestsMixin.test_create_connection.<locals>.<lambda>)rr�r,�create_connectionr�r�)r7r��conn_futr)r7r�test_create_connectionIs	z*EventLoopTestsMixin.test_create_connectioncsXt�}tj��;}�jj�fdd�|j�}�j||�WdQRXdS)Ncstd�j�S)Nr,)rHr,r)r7rrr�WszAEventLoopTestsMixin.test_create_unix_connection.<locals>.<lambda>)r%rr�r,�create_unix_connectionr�r�)r7r�r�r�r)r7r�test_create_unix_connectionOs

	z/EventLoopTestsMixin.test_create_unix_connectioncshtj��U}d}�jj�jj|jdtj��}x�|D]o\}}}}}yNtjd|d|d|�}|jd��jj�jj	||��WnYqFXPqFWds�t
d���jj�fdd�d|�}	�jj|	�\}
}�j|
t
j��j|t
j��jj|j��j|jd	�|
j�WdQRXdS)
N�type�family�protoFzCan not create socket.cstd�j�S)Nr,)rHr,r)r7rrr�nszAEventLoopTestsMixin.test_create_connection_sock.<locals>.<lambda>r�r)rr�r,r+�getaddrinfor�r��SOCK_STREAMr�r�r:r�r�r(r�r�r6r�r3ri)r7r�r��infosr�r�r��cnamer�r�r�r�r)r7r�test_create_connection_sockZs.		
		z/EventLoopTestsMixin.test_create_connection_sockNcCs}|r|j|jd��|r>|j||jd��n|j|jd��|j||jd��|jd�}|j|t�|jt|�d|�|j|dt�|j|dt�|j|dt�|jd	�}|j|�|j|j�|jd
��|j|j	�|jd��|j|j
�|jd��|j|j�|jd
��dS)Nr��peername�peercert�cipherrXrrrZZ
ssl_object�compression)r�r�r�r�r r=�strr"rrZgetpeercert)r7r�r�rrrZsslobjrrr�check_ssl_extra_infovs0		
z(EventLoopTestsMixin.check_ssl_extra_infocCs�|jj|�\}}|j|tj�|j|tj�|jd|jjj	�k�|j
|||�|jj|j�|j|j
d�|j�dS)N�sslr)r,r+r�r(r�r�rmrKrE�lowerrr6r�r3ri)r7r�r�rr�r�rrr�_basetest_create_ssl_connection�sz3EventLoopTestsMixin._basetest_create_ssl_connectionc	s$|dtj��}�j|||�ttd�r�tjjdddddd�fdd�}tjdd	|��<}|dd
�}�j|||��j	|j
d�WdQRX�jtj��=}|dd
�}tj
���j|||�WdQRXWdQRX�j	|jjd�dS)
Nr	�Purpose�cafile�capath�cadatacs �j|tjj�tj�S)z�
                A ssl.create_default_context() replacement that doesn't enable
                cert validation.
                )r�r	r�SERVER_AUTHr�dummy_ssl_context)Zpurposer
rr)r7rr�_dummy_ssl_create_context�szREventLoopTestsMixin._test_create_ssl_connection.<locals>._dummy_ssl_create_contextzssl.create_default_context�side_effectTrZCERTIFICATE_VERIFY_FAILED)rrrr
r	rrr�patchr�Z
call_countrq�SSLError�disable_logger�	exception�reason)	r7r�r�r�rr�r�m�cmr)r7r�_test_create_ssl_connection�s&	
z/EventLoopTestsMixin._test_create_ssl_connectionz
No ssl modulecsctjdd��J}tj�jj�fdd�|j�}�j||d|j�WdQRXdS)N�use_sslTcstd�j�S)Nr,)rHr,r)r7rrr��sz@EventLoopTestsMixin.test_create_ssl_connection.<locals>.<lambda>r)rr��	functools�partialr,r�r�r)r7r�r�r)r7r�test_create_ssl_connection�s	z.EventLoopTestsMixin.test_create_ssl_connectionc	Cs"tj��|j�WdQRXdS)N)r�force_legacy_ssl_supportr)r7rrr�!test_legacy_create_ssl_connection�s
z5EventLoopTestsMixin.test_legacy_create_ssl_connectionc
svt�}tjdd��S}tj�jj�fdd�|jdd�}�j|||d|j�WdQRXdS)NrTcstd�j�S)Nr,)rHr,r)r7rrr��szEEventLoopTestsMixin.test_create_ssl_unix_connection.<locals>.<lambda>�server_hostnamez	127.0.0.1r)	r%rr�rrr,r�r�r)r7r�r�r�r)r7r�test_create_ssl_unix_connection�s
		z3EventLoopTestsMixin.test_create_ssl_unix_connectionc	Cs"tj��|j�WdQRXdS)N)rr r#)r7rrr�&test_legacy_create_ssl_unix_connection�s
z:EventLoopTestsMixin.test_legacy_create_ssl_unix_connectionc
s�tj���}tj�}�jj�fdd�|jd|jd|f�}�jj|�\}}|jj	d�d}�j
||�|j�WdQRXdS)Ncstd�j�S)Nr,)rHr,r)r7rrr��szGEventLoopTestsMixin.test_create_connection_local_addr.<locals>.<lambda>�
local_addrrr�r)rr�r	�find_unused_portr,r�r�r+r1r�r�ri)r7r��portr�r�r�Zexpectedr)r7r�!test_create_connection_local_addr�s	z5EventLoopTestsMixin.test_create_connection_local_addrcs�tj���}�jj�fdd�|jd|j�}�jt��}�jj|�WdQRX�j|j	j
t
j��jt
|j�|j	j�WdQRXdS)Ncstd�j�S)Nr,)rHr,r)r7rrr��szNEventLoopTestsMixin.test_create_connection_local_addr_in_use.<locals>.<lambda>r%)rr�r,r�r�rq�OSErrorr+r�r�errno�
EADDRINUSE�assertInr�strerror)r7r�r�rr)r7r�(test_create_connection_local_addr_in_use�s	z<EventLoopTestsMixin.test_create_connection_local_addr_in_usec	s|j�G��fdd�dt�}tj�}|jd�|jd�|j��d�d�d�����fdd	�}tjd
|dd�}|j�|j	�\}}|d
�����_�j
�j�fdd�|d|���j��j
j�|j�|jd�|j|j��|j�jd�|j�jt���|j���dS)Ncs:eZdZ��fdd�Z��fdd�Z�S)zAEventLoopTestsMixin.test_connect_accepted_socket.<locals>.MyProtocs$t�j|��j�j�dS)N)rIrDr�ry)r7rC)rKr,rrrDszQEventLoopTestsMixin.test_connect_accepted_socket.<locals>.MyProto.connection_lostcs$t�j|�|jj��dS)N)rIr?r1rJ)r7r>)rK�expected_responserrr?szOEventLoopTestsMixin.test_connect_accepted_socket.<locals>.MyProto.data_received)rErFrGrDr?r)r/r,)rKrrHsrH�	127.0.0.1rrs	test datasrogercs�y^tj�}�dk	r*�j|�}|j��|j��|jd��|j�Wn2tk
r�}ztd|�WYdd}~XnXdS)N�cz8Failure in client thread in test_connect_accepted_socket)r�Zwrap_socketr��sendallr�ri�	Exception�print)ZcsockrC)rN�
client_ssl�message�responserrr�s

z@EventLoopTestsMixin.test_connect_accepted_socket.<locals>.clientr�ZdaemonTr,cs�S)Nrr)r�rrr�,szBEventLoopTestsMixin.test_connect_accepted_socket.<locals>.<lambda>r	rB)r0r)r,r/r�r�r�r�r�r�r�Zacceptr+Zconnect_accepted_socketr�r1rirr�Zis_aliver�r2r3r=)	r7Z
server_sslr5rHZlsockr�Zthreadr��_r)rNr5r/r,r6r�r7r�test_connect_accepted_socket�s4	



	



z0EventLoopTestsMixin.test_connect_accepted_socketcCs�tjdkrBtjdkrBt|jtj�rBtjd��t	j
t	j�}|jt
t�t|d�r|d|_t	j|_t	j
t	j�}t|d�r�d|_t	j|_|j||�dS)NrrXrz=SSL not supported with proactor event loops before Python 3.5�check_hostnameF)rXr)rr�version_infor�r,rr��unittest�SkipTestr	�
SSLContext�PROTOCOL_SSLv23�load_cert_chain�ONLYCERT�ONLYKEYr
r:Z	CERT_NONE�verify_moder9)r7Zserver_contextZclient_contextrrr� test_ssl_connect_accepted_socket7s			z4EventLoopTestsMixin.test_ssl_connect_accepted_socketzasyncio.base_events.socketc	s,tj�fdd�����fdd�}t|�}�tjkrmdd�|D�|j�j_ndd�|D�|j�j_|�j_t	j
��j_t	j
��j_�jj
�fdd	�|d
�}�jj|�}�j|j�dd�|jD�}�j||�dS)
NcsW�tjkr.�tjdd||ffgS�tjdd||ddffgSdS)Nr��r)r��AF_INETr�)�hostr'r��kw)r�rrr�PszEEventLoopTestsMixin.create_server_multiple_hosts.<locals>.getaddrinfocstj�||�d�j�S)Nr,)r(�Taskr,)r��kwds)r�r7rr�getaddrinfo_taskWszJEventLoopTestsMixin.create_server_multiple_hosts.<locals>.getaddrinfo_taskcSsg|]}|df�qS)�Pr)rUrGrrr�
<listcomp>^s	zDEventLoopTestsMixin.create_server_multiple_hosts.<locals>.<listcomp>cSs"g|]}|dddf�qS)rLrr)rUrGrrrrMas	cs
t�j�S)N)rHr,r)r7rrr�eszBEventLoopTestsMixin.create_server_multiple_hosts.<locals>.<lambda>rLcSs h|]}|j�d�qS)r)�
getsockbyname)rUr�rrr�	<setcomp>hs	zCEventLoopTestsMixin.create_server_multiple_hosts.<locals>.<setcomp>)r(rpr`r�rFrNrr,r�r�MockZ_start_serving�
_stop_serving�
create_serverr+�
addCleanupri�socketsr�)	r7r�ZhostsZ	mock_sockrKZunique_hostsr��serverZserver_hostsr)r�r�r7r�create_server_multiple_hostsNs"$z0EventLoopTestsMixin.create_server_multiple_hostscCs |jtjdddg�dS)Nz1.2.3.4z5.6.7.8)rVr�rF)r7rrr�&test_create_server_multiple_hosts_ipv4ksz:EventLoopTestsMixin.test_create_server_multiple_hosts_ipv4cCs |jtjdddg�dS)Nz::1z::2)rVr��AF_INET6)r7rrr�&test_create_server_multiple_hosts_ipv6osz:EventLoopTestsMixin.test_create_server_multiple_hosts_ipv6cs�t|j��|jj�fdd�dd�}|jj|�}|jt|j�d�|jd}|j�\}}|j|d�tj�}|j	d|f�|j
d�|jj�j�|jd�j�t
j|j�fd	d��|jd
�j�|j�jjd��|jd�jjd�d��jj�|jj�j�|jd
�j�|j�|j�dS)Ncs�S)Nrr)r�rrr�usz8EventLoopTestsMixin.test_create_server.<locals>.<lambda>z0.0.0.0rrz	127.0.0.1sxxxr9cs
�jdkS)Nr)r3r)r�rrr��srXr�rrB)rHr,rRr+r�r=rTr�r�r�r2r5r2rr�r3r�r1r�rir6)r7r�rUr�rGr'r�r)r�r�test_create_serverss,$

	

z&EventLoopTestsMixin.test_create_server�SO_REUSEPORTzNo SO_REUSEPORTcsBt|j��|jj�fdd�dd�}|jj|�}|jt|j�d�|jd}|j|jt	j
t	j��|j�t
j|j�t|j��|jj�fdd�dddd�}|jj|�}|jt|j�d�|jd}|j|jt	j
t	j��|j�dS)	Ncs�S)Nrr)r�rrr��szCEventLoopTestsMixin.test_create_server_reuse_port.<locals>.<lambda>z0.0.0.0rrcs�S)Nrr)r�rrr��sZ
reuse_portT)rHr,rRr+r�r=rTr�Z
getsockoptr��
SOL_SOCKETr[rirrhrm)r7r�rUr�r)r�r�test_create_server_reuse_port�s*	

	!
z1EventLoopTestsMixin.test_create_server_reuse_portcsYtj��|j�fdd��|jj|�|�}|jj|�}|�fS)Ncstjj��otj��S)N)rr�exists�unlinkr)rrrr��sz7EventLoopTestsMixin._make_unix_server.<locals>.<lambda>)rZgen_unix_socket_pathrSr,�create_unix_serverr+)r7�factory�kwargsr�rUr)rr�_make_unix_server�s
z%EventLoopTestsMixin._make_unix_servercstd|j��|j�fdd��\}}|jt|j�d�tjtj�}|j|�|j	d�|jj
�j�|jd�j�t
j|j�fdd��|jd�j��jj�|jj
�j�|jd	�j�|j�|j�dS)
Nr,cs�S)Nrr)r�rrr��sz=EventLoopTestsMixin.test_create_unix_server.<locals>.<lambda>rsxxxr9cs
�jdkS)Nr)r3r)r�rrr��srXrB)rHr,rcr�r=rTr�r�r�r2r+r5r2rr�r3r1rir6)r7rUrr�r)r�r�test_create_unix_server�s!



z+EventLoopTestsMixin.test_create_unix_servercs�td|j��tj�}|�V|jj�fdd�dd|�}|jtd��|jj|�WdQRXWdQRXdS)Nr,cs�S)Nrr)r�rrr��szOEventLoopTestsMixin.test_create_unix_server_path_socket_error.<locals>.<lambda>z/testr�z3path and sock can not be specified at the same time)rHr,r�r`�assertRaisesRegexr�r+)r7r�r�r)r�r�)test_create_unix_server_path_socket_error�s'	
z=EventLoopTestsMixin.test_create_unix_server_path_socket_errorcCs8tjtj�}|jtjO_|j||�|S)N)r	r>r?�options�OP_NO_SSLv2r@)r7�certfile�keyfile�
sslcontextrrr�_create_ssl_context�sz'EventLoopTestsMixin._create_ssl_contextc
Cs~|j||�}|jj|ddd|�}|jj|�}|jd}|j�\}}	|j|d�|||	fS)Nz	127.0.0.1rr	)rlr,rRr+rTr�r�)
r7rarirjrkr�rUr�rGr'rrr�_make_ssl_server�s
z$EventLoopTestsMixin._make_ssl_servercCs%|j||�}|j|d|�S)Nr	)rlrc)r7rarirjrkrrr�_make_ssl_unix_server�sz)EventLoopTestsMixin._make_ssl_unix_servercsAtd|j��|j�fdd�tt�\}}}|jjt||dtj��}|jj	|�\}}|j
d�|jj	�j�|jd�j
�tj|j�fdd��|jd�j�|j|d	||f��jj�|jj	�j�|jd
�j
�|j�|j�dS)Nr,cs�S)Nrr)r�rrr��sz<EventLoopTestsMixin.test_create_server_ssl.<locals>.<lambda>r	sxxxr9cs
�jdkS)Nr)r3r)r�rrr�srXrrB)rHr,rmrArBr�r/rrr+rJr5r�r2r�r3rr1rir6)r7rUrGr'�f_cr�r�r)r�r�test_create_server_ssl�s"$


z*EventLoopTestsMixin.test_create_server_sslc	Cs"tj��|j�WdQRXdS)N)rr rp)r7rrr�test_legacy_create_server_ssls
z1EventLoopTestsMixin.test_legacy_create_server_sslcs(td|j��|j�fdd�tt�\}}|jjt|dtj�dd�}|jj	|�\}}|j
d�|jj	�j�|jd�j
�tj|j�fd	d��|jd
�j��jj�|jj	�j�|jd�j
�|j�|j�dS)Nr,cs�S)Nrr)r�rrr�szAEventLoopTestsMixin.test_create_unix_server_ssl.<locals>.<lambda>r	r"rEsxxxr9cs
�jdkS)Nr)r3r)r�rrr�*srXrB)rHr,rnrArBr�r/rrr+rJr5r�r2r�r3r1rir6)r7rUrror�r�r)r�r�test_create_unix_server_ssls"!		


z/EventLoopTestsMixin.test_create_unix_server_sslc	Cs"tj��|j�WdQRXdS)N)rr rr)r7rrr�"test_legacy_create_unix_server_ssl9s
z6EventLoopTestsMixin.test_legacy_create_unix_server_sslcs.td|j��|j�fdd�t�\}}}tjtj�}|jtjO_tj	|_
t|d�r�d|_|jj
t||d|�}tjj|jd��Vtj��2|jtjd��|jj|�WdQRXWdQRXtj|j�WdQRX|j�j�|j�dS)	Nr,cs�S)Nrr)r�rrr�AszJEventLoopTestsMixin.test_create_server_ssl_verify_failed.<locals>.<lambda>r:Tr	�call_exception_handlerz(?i)certificate.verify.failed)rHr,rm�SIGNED_CERTFILEr	r>r?rgrh�
CERT_REQUIREDrCr
r:r�rr�objectrrrerr+rh�assertIsNoner1ri)r7rUrGr'�sslcontext_clientror)r�r�$test_create_server_ssl_verify_failed=s$!		

z8EventLoopTestsMixin.test_create_server_ssl_verify_failedc	Cs"tj��|j�WdQRXdS)N)rr rz)r7rrr�+test_legacy_create_server_ssl_verify_failedZs
z?EventLoopTestsMixin.test_legacy_create_server_ssl_verify_failedcs.td|j��|j�fdd�t�\}}tjtj�}|jtjO_tj	|_
t|d�r~d|_|jj
t|d|dd�}tjj|jd	��Vtj��2|jtjd
��|jj|�WdQRXWdQRXtj|j�WdQRX|j�j�|j�dS)Nr,cs�S)Nrr)r�rrr�cszOEventLoopTestsMixin.test_create_unix_server_ssl_verify_failed.<locals>.<lambda>r:Tr	r"Zinvalidrtz(?i)certificate.verify.failed)rHr,rnrur	r>r?rgrhrvrCr
r:r�rrrwrrrerr+rhrxr1ri)r7rUrryror)r�r�)test_create_unix_server_ssl_verify_failed^s&		

z=EventLoopTestsMixin.test_create_unix_server_ssl_verify_failedc	Cs"tj��|j�WdQRXdS)N)rr r|)r7rrr�0test_legacy_create_unix_server_ssl_verify_failed}s
zDEventLoopTestsMixin.test_legacy_create_unix_server_ssl_verify_failedz bpo-36576: fail on OpenSSL 1.1.1cs+td|j��|j�fdd�t�\}}}tjtj�}|jtjO_tj	|_
|jdt�t
|d�r�d|_|jjt||d|�}tjj|jd��Ftj��2|jtjd	��|jj|�WdQRXWdQRXWdQRX�jj�|j�dS)
Nr,cs�S)Nrr)r�rrr��szIEventLoopTestsMixin.test_create_server_ssl_match_failed.<locals>.<lambda>r
r:Tr	rtz.hostname '127.0.0.1' doesn't match 'localhost')rHr,rmrur	r>r?rgrhrvrC�load_verify_locations�
SIGNING_CAr
r:r�rrrwrrreZCertificateErrorr+r1ri)r7rUrGr'ryror)r�r�#test_create_server_ssl_match_failed�s(!			

%
z7EventLoopTestsMixin.test_create_server_ssl_match_failedc	Cs"tj��|j�WdQRXdS)N)rr r�)r7rrr�*test_legacy_create_server_ssl_match_failed�s
z>EventLoopTestsMixin.test_legacy_create_server_ssl_match_failedcs�td|j��|j�fdd�t�\}}tjtj�}|jtjO_tj	|_
|jdt�t
|d�r�d|_|jjt|d|dd	�}|jj|�\}}�jj�|j�|j�|jj�j�dS)
Nr,cs�S)Nrr)r�rrr��szJEventLoopTestsMixin.test_create_unix_server_ssl_verified.<locals>.<lambda>r
r:Tr	r"r.)rHr,rnrur	r>r?rgrhrvrCr~rr
r:r�r+r1rir6)r7rUrryror�r�r)r�r�$test_create_unix_server_ssl_verified�s"		


z8EventLoopTestsMixin.test_create_unix_server_ssl_verifiedc	Cs"tj��|j�WdQRXdS)N)rr r�)r7rrr�+test_legacy_create_unix_server_ssl_verified�s
z?EventLoopTestsMixin.test_legacy_create_unix_server_ssl_verifiedcs$td|j��|j�fdd�t�\}}}tjtj�}|jtjO_tj	|_
|jdt�t
|d�r�d|_|jjt||d|dd	�}|jj|�\}}|j|d
||fdt��jj�|j�|j�|jj�j�dS)Nr,cs�S)Nrr)r�rrr��szEEventLoopTestsMixin.test_create_server_ssl_verified.<locals>.<lambda>r
r:Tr	r"r.rr)rHr,rmrur	r>r?rgrhrvrCr~rr
r:r�r+r�PEERCERTr1rir6)r7rUrGr'ryror�r�r)r�r�test_create_server_ssl_verified�s&!		


z3EventLoopTestsMixin.test_create_server_ssl_verifiedc	Cs"tj��|j�WdQRXdS)N)rr r�)r7rrr�&test_legacy_create_server_ssl_verified�s
z:EventLoopTestsMixin.test_legacy_create_server_ssl_verifiedc	stjd|j��G�fdd�dt�}tjdtj�}|jtjtjd�|j	d�|jj
|d|�}|jj|�}|jd}|j
||�|j�\}}|j|d�tj�}|jd	|f�|jd
�|j�|j�dS)Nr,cs%eZdZ��fdd�Z�S)z@EventLoopTestsMixin.test_create_server_sock.<locals>.TestMyProtocs!t�j|��j|�dS)N)rIr<r;)r7r1)rKr�rrr<�szPEventLoopTestsMixin.test_create_server_sock.<locals>.TestMyProto.connection_made)rErFrGr<r)r�)rKr�TestMyProto�sr�r�r�0.0.0.0rr�z	127.0.0.1sxxx)r�r)r(r4r,rHr�r��
setsockoptr\�SO_REUSEADDRr�rRr+rTr�r�r�r�r�ri)	r7r��sock_obr�rUr�rGr'r�r)r�r�test_create_server_sock�s 



z+EventLoopTestsMixin.test_create_server_sockc
Cs�tjdtj�}|jtjtjd�|jd�|jjtd|�}|jj	|�}|j
d}|j�\}}|jjtd|d|�}|jt
��}|jj	|�WdQRX|j|jjtj�|j�dS)	Nr�r�0.0.0.0rr�rGr')r�r)r�r�r�r\r�r�r,rRrHr+rTr�rqr)r�rr*r+ri)r7r�r�rUr�rGr'rrrr�test_create_server_addr_in_use�s

z2EventLoopTestsMixin.test_create_server_addr_in_usezIPv6 not supported or enabledc	s�tjd|j��G�fdd�dt�}d}x�y@tj�}|jj|ddd|�}|jj|�}WnZtk
r�}z:|j	t	j
kr�|d7}|jd|�w:n�WYdd}~Xq:XPq:Wtj�}|j
d	|f�|jd
�|jj��}|jj�|j�tjd|j��tjtj�}|j
d|f�|jd
�|jj��}|jj�|j�|j�dS)Nr,cs%eZdZ��fdd�Z�S)zFEventLoopTestsMixin.test_create_server_dual_stack.<locals>.TestMyProtocs!t�j|��j|�dS)N)rIr<r;)r7r1)rK�f_protorrr<szVEventLoopTestsMixin.test_create_server_dual_stack.<locals>.TestMyProto.connection_made)rErFrGr<r)r�)rKrr�sr�rrGr'rrz	127.0.0.1sxxxz::1)r(r4r,rHr	r&rRr+r)r*r+ZassertGreaterEqualr�r�r�r1rirX)	r7r�Z	try_countr'r�rUZexr�r�r)r�r�test_create_server_dual_stacks:






z1EventLoopTestsMixin.test_create_server_dual_stackcCs�|jjtdd�}|jj|�}|jd}|j�\}}tj�}|jd|f�|jd�|j	�|j	�tj�}|j
t|jd|f�|j	�dS)Nz0.0.0.0rz	127.0.0.1sxxx)r,rRrHr+rTr�r�r�r�rirqr�)r7r�rUr�rGr'r�rrr�test_server_close4s



z%EventLoopTestsMixin.test_server_closecs�G�fdd�dt�}�jj|dd�}�jj|�\}�|jd�\}}�j|tj��j�|��jd�j	��j
�j|��jj�fdd	�d
||f�}�jj|�\}��j|tj��j�t��jd�j	��j
�j|�|jd�t
j�j�fdd	���jd
�j�t
j�j�fdd	���jd�j��j|jd��|j��jj�j��jd�j	��jj�dS)Ncs7eZdZ��fdd�Z�fdd�Z�S)zNEventLoopTestsMixin.test_create_datagram_endpoint.<locals>.TestMyDatagramProtocst�jd�j�dS)Nr,)rIr8r,)Z
inner_self)rKr7rrr8HszWEventLoopTestsMixin.test_create_datagram_endpoint.<locals>.TestMyDatagramProto.__init__cs.t�j||�|jjd||�dS)Nsresp:)rIrOr1�sendto)r7r>rN)rKrrrOKsz`EventLoopTestsMixin.test_create_datagram_endpoint.<locals>.TestMyDatagramProto.datagram_received)rErFrGr8rOr)r7)rKr�TestMyDatagramProtoGsr�r%�	127.0.0.1rr�rMcstd�j�S)Nr,)rLr,r)r7rrr�ZszCEventLoopTestsMixin.test_create_datagram_endpoint.<locals>.<lambda>Zremote_addrsxxxcs�jS)N)r3r)rUrrr�dsrXcs�jS)N)r3r)r�rrr�fs�rB)r�r)rLr,�create_datagram_endpointr+r�r�r(r�r�r2r�r1r�rr�r3r�rir6)r7r��coroZs_transportrGr'r1r)r�r7rUr�test_create_datagram_endpointFs6		

z1EventLoopTestsMixin.test_create_datagram_endpointcs`tjdkr3t�jtj�r3tjd��d}d
}�jj�jj	|dt
j��}xw|D]]\}}}}}y<t
j
d|d|d|�}|jd�|j
|�WnYqmXPqmWds�td	���jj�fd
d�d|�}	�jj|	�\}
}�j|
tj��j|t�|
j��jj|j�dS)Nrz.UDP is not supported with proactor event loops�	127.0.0.1rr�r�r�FzCan not create socket.cstd�j�S)Nr,)rLr,r)r7rrr��szHEventLoopTestsMixin.test_create_datagram_endpoint_sock.<locals>.<lambda>r�)r�r)rrr�r,rr�r<r=r+r�r�Z
SOCK_DGRAMr�r�r:r�r�r(r�rLrir6)r7r�Z
local_addressrr�r�r�rr�r�r�r�r)r7r�"test_create_datagram_endpoint_sockts2			
	
z6EventLoopTestsMixin.test_create_datagram_endpoint_sockcCs�|j�}t|tj�s5|j�|jd�|jd|j�|j�|jd|j�|j|j	�|j|j
�dS)Nz#loop is not a BaseSelectorEventLooprr)rfr�rZBaseSelectorEventLoopriZskipTestr�Z
_internal_fdsrxZ_csockZ_ssock)r7r,rrr�test_internal_fds�s


z%EventLoopTestsMixin.test_internal_fdsrzDon't support pipes for Windowscsftd�j��tj�\}}tj|dd��tj���fdd��}�jj|��tj	|d�t
j�j�fdd���jd	�j
�tj	|d
�t
j�j�fdd���jdd
g�j��jd�j
�tj|��jj�j��jdd
ddg�j��j�jjd��dS)Nr,�rbic3s�jj�fdd���EdH\}}�j|���j|�j��jddg�j��jd�j�dS)Ncs�S)Nrr)r�rrr��szEEventLoopTestsMixin.test_read_pipe.<locals>.connect.<locals>.<lambda>r0r9r)r,�connect_read_piper�r1r�r2r3)r��p)�pipeobjr�r7rrr��s	#z3EventLoopTestsMixin.test_read_pipe.<locals>.connect�1cs
�jdkS)Nr)r3r)r�rrr��sz4EventLoopTestsMixin.test_read_pipe.<locals>.<lambda>rs2345cs
�jdkS)Nr)r3r)r�rrr��sr0r9rr@rB�pipe)rQr,rr��io�openr(rpr+rJrr�r�r3r2rir6r�r1r�)r7�rpipe�wpiper�r)r�r�r7r�test_read_pipe�s"!	
z"EventLoopTestsMixin.test_read_pipecs|j��td���td���tj�\}}tj|dd��tj|dd��tj�����fdd��}�j	|��\}}�j
�|jdt|��|jdt|���j
��j
�d|_
d|_
dS)Nr,r�ir�c3s\�j�fdd���EdH\}}�j�fdd���EdH\}}||fS)Ncs�S)Nrr)�
read_protorrr��szSEventLoopTestsMixin.test_unclosed_pipe_transport.<locals>.connect.<locals>.<lambda>cs�S)Nrr)�write_protorrr��s)r��connect_write_pipe)�read_transportr8�write_transport)r,r��rpipeobj�wpipeobjr�rrr��s
##zAEventLoopTestsMixin.test_unclosed_pipe_transport.<locals>.connectr�)rfrQrSrr�r�r�r(rpr+rir,�reprZ_pipe)r7r�r�r�r�r�r)r,r�r�r�r�r�test_unclosed_pipe_transport�s'	


	z0EventLoopTestsMixin.test_unclosed_pipe_transportrr�r�csftd�j��tj�\}}tj|dd��tj���fdd��}�jj|��tj	|d�t
j�j�fdd���jd	�j
�tj	|d
�t
j�j�fdd���jdd
g�j��jd�j
�tj|��jj�j��jdd
ddg�j��j�jjd��dS)Nr,r�rc3s�jj�fdd���EdH\}}�j|���j|�j��jddg�j��jd�j�dS)Ncs�S)Nrr)r�rrr��szKEventLoopTestsMixin.test_read_pty_output.<locals>.connect.<locals>.<lambda>r0r9r)r,r�r�r1r�r2r3)r�r�)�master_read_objr�r7rrr��sz9EventLoopTestsMixin.test_read_pty_output.<locals>.connectr�cs�jS)N)r3r)r�rrr��sz:EventLoopTestsMixin.test_read_pty_output.<locals>.<lambda>rs2345cs
�jdkS)Nr)r3r)r�rrr�sr0r9rr@rBr�)rQr,r�openptyr�r�r(rpr+rJrr�r�r3r2rir6r�r1r�)r7�master�slaver�r)r�r�r7r�test_read_pty_output�s"!	
z(EventLoopTestsMixin.test_read_pty_outputcs�tj�\�}tj|dd�}td|j��|jj�fdd�|�}|jj|�\}}|j|��|j|�j	�|j
d�j�|jd�t
���fdd	��tj|j��fd
d��|j
d��|jd�tj|j��fdd��|j
d
��|j
d�j�tj��|j�j	jd���j	j�|jj�j�|j
d�j�dS)N�wbir,cs�S)Nrr)r�rrr�sz5EventLoopTestsMixin.test_write_pipe.<locals>.<lambda>r9r�cs&tj�d�}||7}t|�S)Ni)rr�r=)r>�chunk)r�rrr�s
z3EventLoopTestsMixin.test_write_pipe.<locals>.readercs���dkS)Nrrr)r>r�rrr�"ss2345cs���dkS)Nrrr)r>r�rrr�&ss12345r�rB)rr�r�r�rSr,r�r+r�r1r�r2rJr�rr�rir�r�r6)r7r�r�r�r1r�r)r>r�r�r�r�test_write_pipe
s,!
	"
"

z#EventLoopTestsMixin.test_write_pipecs-tj�\}}|jd�tj|j�dd�}td|j��|jj�fdd�|�}|jj	|�\}}|j
|��|j
|�j�|jd�j
�|jd�|jj	|jj|d��}|jd|�|j�|jj	�j�|jd	�j
�dS)
NFr�ir,cs�S)Nrr)r�rrr�<szIEventLoopTestsMixin.test_write_pipe_disconnect_on_close.<locals>.<lambda>r9r�rB)rr�r�r�r��detachrSr,r�r+r�r1r�r2rJr�rir6)r7ZrsockZwsockr�r�r1r�r>r)r�r�#test_write_pipe_disconnect_on_close4s
!
!
z7EventLoopTestsMixin.test_write_pipe_disconnect_on_closecs�tj�\�}tj|dd�}td|j��|jj�fdd�|�}|jj|�\}}|j|��|j|�j	�|j
d�j�|jd�t
���fdd	��tj|j��fd
d�dd�|j
d��|jd
�tj|j��fdd�dd�|j
d��|j
d�j�tj��|j�j	jd���j	j�|jj�j�|j
d�j�dS)Nr�rr,cs�S)Nrr)r�rrr�Usz4EventLoopTestsMixin.test_write_pty.<locals>.<lambda>r9r�cs&tj�d�}||7}t|�S)Ni)rr�r=)r>r�)r�rrr�^s
z2EventLoopTestsMixin.test_write_pty.<locals>.readercs���dkS)Nrrr)r>r�rrr�cs�timeoutrs2345cs���dkS)Nrrr)r>r�rrr�hss12345r�rB)rr�r�r�rSr,r�r+r�r1r�r2rJr�rr�rir�r�r6)r7r��slave_write_objr�r1r�r)r>r�r�r�r�test_write_ptyKs0!
	!
!

z"EventLoopTestsMixin.test_write_ptyc
s�tj�\�}tj|�}tj|�tj|dd�}td|j��|jj	�fdd�|�}|jj
|�\}}|j|��|j|�j�|j
ddg�j�|j
d�j�tj|dd�}td|j��|jj�fd	d�|�}|jj
|�\}	}|j|��|j|	�j�|j
d�j�t���fd
d��|	jd�tj|j��fd
d�dd�|j
d��|j
ddg�j�|j
d�j�tj�d�tj|j�fdd�dd�|j
ddg�j�|j
d�j�|j
d�j�|	jd�tj|j��fdd�dd�|j
d��|j
ddg�j�|j
d�j�tj�d�tj|j�fdd�dd�|j
ddg�j�|j
d�j�|j
d�j�tj��|j�|jj
�j�|j
ddddg�j�|	j�|jj
�j�|j
d�j�dS)Nr�rr,cs�S)Nrr)r�rrr��sz<EventLoopTestsMixin.test_bidirectional_pty.<locals>.<lambda>r0r9r�cs�S)Nrr)r�rrr��scs&tj�d�}||7}t|�S)Ni)rr�r=)r>r�)r�rrr��s
z:EventLoopTestsMixin.test_bidirectional_pty.<locals>.readerr�cs���dkS)Nrrr)r>r�rrr��sr�r�acs
�jdkS)Nr)r3r)r�rrr��srs2345cs���dkS)Nrrr)r>r�rrr��ss12345sbcdecs
�jdkS)Nr)r3r)r�rrr��srr@rB)rr��dup�ttyZsetrawr�r�rQr,r�r+r�r1r�r2r3rSr�r�rJrr�rir6)
r7Z
read_slaveZwrite_slaveZslave_read_objZread_connectr�r�r�Z
write_connectr�r)r>r�r�r�r�r�test_bidirectional_ptywsh
			
(
(


z*EventLoopTestsMixin.test_bidirectional_ptycsDtj�\}}|jd��jj|d��t�dd�}|dk	rb�j|j�tj	��fdd��}t
j�}tj|�d�j�}�jj
�t
j�|}�j|d��j|j�d��jtj�j�|dk	r�j|j��jj|�|j�|j�dS)	NFr�ovc3s]zHy �jj�j��EdHWntjk
r@d}YnXd}Wd�jj�X|S)N�	cancelled)r,r��cancelr(�CancelledErrorry)r�)r�r7rr�main�s

z:EventLoopTestsMixin.test_prompt_cancellation.<locals>.mainr,g�������?r�)rr�r�r,r��getattrrm�pendingr(rprtr�rIr�Z
assertLessr��resultrqr�r�rQri)r7r�r�r�r�r�r��elapsedr)r�r7r�test_prompt_cancellation�s&



z,EventLoopTestsMixin.test_prompt_cancellationcs���fdd�}�jj�d�j_|�j_tj�fdd��}�jj|���j�jjdd�jjd�jjj	j
i�dS)	Ncs�jjd7_��dS)Nr)r,�_run_once_counterr)�
orig_run_oncer7rr�	_run_once�sz<EventLoopTestsMixin.test_timeout_rounding.<locals>._run_oncerc3s��j}tjdd|�EdHtjdd|�EdHtjdd|�EdHtjdd|�EdHtjdd|�EdHdS)Ng{�G�z�?r,g-C��6?g���ư>g:�0�yE>g�����|�=)r,r(ru)r,)r7rr�wait�s	z7EventLoopTestsMixin.test_timeout_rounding.<locals>.wait�Zclock_resolutionZselector)r,r�r�r(rpr+ZassertLessEqualZ_clock_resolutionZ	_selectorrKrE)r7r�r�r)r�r7r�test_timeout_rounding�s	z)EventLoopTestsMixin.test_timeout_roundingcCs�|j�}dd�}tj�\}}|j|j�|j|j�|j||�|j||�|j�|j|j|��|j|j	|��dS)NcSsdS)Nrrrrrr�szCEventLoopTestsMixin.test_remove_fds_after_closing.<locals>.<lambda>)
rfrr�rSrir�r�r�r�r�)r7r,r~r�r�rrr�test_remove_fds_after_closing�s
z1EventLoopTestsMixin.test_remove_fds_after_closingcCs�|j�}dd�}tj�\}}|j|j�|j|j�|j�|jt��|j||�WdQRX|jt��|j||�WdQRXdS)NcSsdS)Nrrrrrr�
sz@EventLoopTestsMixin.test_add_fds_after_closing.<locals>.<lambda>)	rfrr�rSrirqrrr�r�)r7r,r~r�r�rrr�test_add_fds_after_closings
z.EventLoopTestsMixin.test_add_fds_after_closingc	sUtj�fdd��}|�j�}�jt���jj|�WdQRXdS)Ncs�jj�dS)N)r,ri)r,)r7rr�
close_loopszEEventLoopTestsMixin.test_close_running_event_loop.<locals>.close_loop)r(rpr,rqrrr+)r7r�r�r)r7r�test_close_running_event_loopsz1EventLoopTestsMixin.test_close_running_event_loopcBCs�|jj�tjdd��}dd�}|�}|j|j�|jt��|jj�WdQRX|jt��*tjd|j�}|jj	|�WdQRX|jt��|jj
|�WdQRX|jt��|jj|�WdQRX|jt��|jjd|�WdQRX|jt��%|jj
|jj�d|�WdQRX|jt��|jjd|�WdQRX|jt��|jj|�WdQRX|jt��|jjtj|�WdQRXdS)NcSsdS)Nrrrrr�test#sz,EventLoopTestsMixin.test_close.<locals>.testcSsdS)NFrrrrrr�'sz0EventLoopTestsMixin.test_close.<locals>.<lambda>r,g�?g)r,rir(rprSrqrrr�r4r+r�r�r�call_atrtr��create_taskr�r��SIGTERM)r7r��funcr�Zfutrrr�
test_close s0
	'zEventLoopTestsMixin.test_close)crErFrGrerkrsrxr{r�r�r�r�r�r�r�r�r�r<�
skipUnlessr
r�r�r�r�r�r�r�r�r�r�r�rrrr�skipIfr	rr!r#r$r(r.r9rDrrrVrWrYrZr]rcrdrfrlrmrnrprqrrrsrzr{r|r}�IS_OPENSSL_1_1_1r�r�r�r�r�r�r�r�r	ZIPV6_ENABLEDr�r�r�r�r�rrr�r��requires_mac_verZrequires_freebsd_versionr�r�r�r�r�r�r�r�r�r�r�rr)rKrrd�s�		
!'',''' $$
*
8$$'	''$ *$*!*$!).""!"&!(!E$	rdc@s�eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�Zej
dd�dd��Zdd�Zdd�Zdd�Zdd�Zdd �Zd!d"�Zd#S)$�SubprocessTestsMixincCs:tjdkr"|j|t�n|jtj|�dS)Nr)rrr�r"r�r�r�)r7r^rrr�check_terminatedCsz%SubprocessTestsMixin.check_terminatedcCs:tjdkr"|j|t�n|jtj|�dS)Nr)rrr�r"r�r�r�)r7r^rrr�check_killedJsz!SubprocessTestsMixin.check_killedcCs.tjjtjjt�d�}|jjtjt	|j�t
j|�}|jj|�\}}|j
|t	�|jj|j�|jd|j�|jd�}|jd�|jj|jdj��tj��|j�WdQRX|jj|j�|j|j�|jd|jd�dS)Nzecho.pyr9rsPython The Winnerr)rrrrrr,�subprocess_execrrrTr�
executabler+r�r5r�r2�get_pipe_transportrJr_r�rrrir[r�r^r>)r7�progr��transpr��stdinrrr�test_subprocess_execQs !	

z)SubprocessTestsMixin.test_subprocess_execc	Cs�tjjtjjt�d�}|jjtjt	|j�t
j|�}|jj|�\}}|j
|t	�|jj|j�|jd|j�|jd�}|jd�|jj|jdj��|jdj�|jd|jd�|jd�|jj|jdj��|jd|jd�tj��|j�WdQRX|jj|j�|j|j�dS)Nzecho.pyr9rsPython rs
The WinnersPython The Winner)rrrrrr,r�rrrTrr�r+r�r5r�r2r�rJr_r��clearr>rrrir[r�r^)r7r�r�r�r�r�rrr�test_subprocess_interactivees(!	


z0SubprocessTestsMixin.test_subprocess_interactivecCs|jjtjt|j�d�}|jj|�\}}|j|t�|jj|j�|jd�j	�|jj|j
�|jd|j�|j
tdd�|jj�D���|j|jdjd�d�|j|jdd	�|j	�dS)
Nzecho Pythonrcss|]}|j�VqdS)N)r6)rUr�rrr�	<genexpr>�sz=SubprocessTestsMixin.test_subprocess_shell.<locals>.<genexpr>rs
sPythonrZrY)r,�subprocess_shellrrrTr+r�r5r�rir[r�r^rm�allr]�valuesr>�rstrip)r7r�r�r�rrr�test_subprocess_shells		) z*SubprocessTestsMixin.test_subprocess_shellc	Cs�|jjtjt|j�ddddddd�}|jj|�\}}|j|t�|jj|j�|jd|j	�|j
�dS)Nzexit 7r��stdout�stderr�)r,r�rrrTr+r�r[r�r^ri)r7r�r�r�rrr�test_subprocess_exitcode�s	z-SubprocessTestsMixin.test_subprocess_exitcodec	Cs�|jjtjt|j�ddddddd�}|jj|�\}}|j|t�|j|jd��|j|jd��|j|jd��|jj|j	�|j
d|j�|j|j��dS)	Nzexit 7r�r�r�rrrZr�)
r,r�rrrTr+r�rxr�r[r�r^ri)r7r�r�r�rrr�"test_subprocess_close_after_finish�s	z7SubprocessTestsMixin.test_subprocess_close_after_finishcCs�tjjtjjt�d�}|jjtjt	|j�t
j|�}|jj|�\}}|j
|t	�|jj|j�|j�|jj|j�|j|j�|j�dS)Nzecho.py)rrrrrr,r�rrrTrr�r+r�r5r�r[r�r^ri)r7r�r�r�r�rrr�test_subprocess_kill�s!	
z)SubprocessTestsMixin.test_subprocess_killcCs�tjjtjjt�d�}|jjtjt	|j�t
j|�}|jj|�\}}|j
|t	�|jj|j�|j�|jj|j�|j|j�|j�dS)Nzecho.py)rrrrrr,r�rrrTrr�r+r�r5Z	terminater[r�r^ri)r7r�r�r�r�rrr�test_subprocess_terminate�s!	
z.SubprocessTestsMixin.test_subprocess_terminateTz"Temporarily skipped (rhbz#1088233)cCs�tjjtjjt�d�}|jjtjt	|j�t
j|�}|jj|�\}}|j
|t	�|jj|j�|jtj�|jj|j�|jtj|j�|j�dS)Nzecho.py)rrrrrr,r�rrrTrr�r+r�r5Zsend_signalr��SIGHUPr[r�r^ri)r7r�r�r�r�rrr�test_subprocess_send_signal�s!	z0SubprocessTestsMixin.test_subprocess_send_signalcCstjjtjjt�d�}|jjtjt	|j�t
j|�}|jj|�\}}|j
|t	�|jj|j�|jd�}|jd�|jj|j�|j�|jd|jd�|j|jdjd�|jd�|jd|j�dS)Nzecho2.pyrstestsOUT:testrrZsERR:test)rrrrrr,r�rrrTrr�r+r�r5r�rJr[rir�r>rmr�r^)r7r�r�r�r�r�rrr�test_subprocess_stderr�s!	

'z+SubprocessTestsMixin.test_subprocess_stderrcCsItjjtjjt�d�}|jjtjt	|j�t
j|dtj
�}|jj|�\}}|j|t	�|jj|j�|jd�}|j|jd��|j|jd��|jd�|jj|j�|j|jdjd�|jd�|jd|jd�|j�|jd|j�dS)	Nzecho2.pyr�rrrZstestsOUT:testERR:testrY)rrrrrr,r�rrrTrr��
subprocessZSTDOUTr+r�r5r�r�rxrJr[rmr>r�r�rir^)r7r�r�r�r�r�rrr�)test_subprocess_stderr_redirect_to_stdout�s"!	

z>SubprocessTestsMixin.test_subprocess_stderr_redirect_to_stdoutc	Cs�tjjtjjt�d�}|jjtjt	|j�t
j|�}|jj|�\}}|j
|t	�|jj|j�|jd�}|jd�}|jd�|jj|jdj��|jd|jd�|j�|jj|jd�|jd�|jj|jdj��t
jdkrY|jd	|jd�n|jd
|jd�tj��|j�WdQRX|jj|j�|j|j�dS)Nzecho3.pyrrstestsOUT:testsxxxrZrsERR:BrokenPipeErrorsERR:OSError)rrrrrr,r�rrrTrr�r+r�r5r�rJr_r�r�r>rir]rrrr[r�r^)r7r�r�r�r�r�r�rrr�#test_subprocess_close_client_stream�s.!	



z8SubprocessTestsMixin.test_subprocess_close_client_streamccs�|jjtjt|j�ddddddddd�}|jj|�V\}}|j|t�|jj|j�|jd|j	�dS)Nzexit 7r�r�r�Zstart_new_sessionTr�)
r,r�rrrTr+r�r[r�r^)r7r�r8r�rrr�"test_subprocess_wait_no_same_group s		z7SubprocessTestsMixin.test_subprocess_wait_no_same_groupcs�tj�fdd��}�jt���jj|dd��WdQRX�jt���jj|dd��WdQRX�jt���jj|dd��WdQRXdS)Nc;s"�jjtjd|�EdHdS)N�pwd)r,r�r(�SubprocessProtocol)rJ)r7rrr�,s	zGSubprocessTestsMixin.test_subprocess_exec_invalid_args.<locals>.connect�universal_newlinesT�bufsizei�shell)r(rprqr�r,r+)r7r�r)r7r�!test_subprocess_exec_invalid_args+s  z6SubprocessTestsMixin.test_subprocess_exec_invalid_argsc s�tjd�fdd��}�jt��!�jj|ddg��WdQRX�jt���jj|dd��WdQRX�jt���jj|dd��WdQRX�jt���jj|d	d
��WdQRXdS)Nc;s.|sd}�jjtj||�EdHdS)Nr�)r,r�r(r)�cmdrJ)r7rrr�:s
	zHSubprocessTestsMixin.test_subprocess_shell_invalid_args.<locals>.connectZlsz-lrTrirF)r(rprqr�r,r+)r7r�r)r7r�"test_subprocess_shell_invalid_args9s#  z7SubprocessTestsMixin.test_subprocess_shell_invalid_argsN)rErFrGr�r�r�r�r�r�r�r�r�r<r�r�r�r�r�r�rrrrrrr�As 

!r�c@seZdZdd�ZdS)�SelectEventLoopTestscCs
tj�S)N)r(�SelectorEventLoop)r7rrrrfPsz&SelectEventLoopTests.create_event_loopN)rErFrGrfrrrrrNsrc@s�eZdZdd�Zej�s`dd�Zdd�Zdd�Zd	d
�Z	dd�Z
d
d�Zdd�Zdd�Z
dd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd �Zd!d"�Zd#S)$�ProactorEventLoopTestscCs
tj�S)N)r(ZProactorEventLoop)r7rrrrfWsz(ProactorEventLoopTests.create_event_loopcCstjd��dS)Nzneed python 3.5 (ssl.MemoryBIO))r<r=)r7rrrr[sz1ProactorEventLoopTests.test_create_ssl_connectioncCstjd��dS)Nzneed python 3.5 (ssl.MemoryBIO))r<r=)r7rrrrp^sz-ProactorEventLoopTests.test_create_server_sslcCstjd��dS)Nzneed python 3.5 (ssl.MemoryBIO))r<r=)r7rrrrzasz;ProactorEventLoopTests.test_create_server_ssl_verify_failedcCstjd��dS)Nzneed python 3.5 (ssl.MemoryBIO))r<r=)r7rrrr�dsz:ProactorEventLoopTests.test_create_server_ssl_match_failedcCstjd��dS)Nzneed python 3.5 (ssl.MemoryBIO))r<r=)r7rrrr�gsz6ProactorEventLoopTests.test_create_server_ssl_verifiedcCstjd��dS)Nz*IocpEventLoop incompatible with legacy SSL)r<r=)r7rrrr!jsz8ProactorEventLoopTests.test_legacy_create_ssl_connectioncCstjd��dS)Nz*IocpEventLoop incompatible with legacy SSL)r<r=)r7rrrrqmsz4ProactorEventLoopTests.test_legacy_create_server_sslcCstjd��dS)Nz*IocpEventLoop incompatible with legacy SSL)r<r=)r7rrrr{pszBProactorEventLoopTests.test_legacy_create_server_ssl_verify_failedcCstjd��dS)Nz*IocpEventLoop incompatible with legacy SSL)r<r=)r7rrrr�sszAProactorEventLoopTests.test_legacy_create_server_ssl_match_failedcCstjd��dS)Nz*IocpEventLoop incompatible with legacy SSL)r<r=)r7rrrr�vsz=ProactorEventLoopTests.test_legacy_create_server_ssl_verifiedcCstjd��dS)Nz(IocpEventLoop does not have add_reader())r<r=)r7rrrr�ysz+ProactorEventLoopTests.test_reader_callbackcCstjd��dS)Nz(IocpEventLoop does not have add_reader())r<r=)r7rrr�test_reader_callback_cancel|sz2ProactorEventLoopTests.test_reader_callback_cancelcCstjd��dS)Nz(IocpEventLoop does not have add_writer())r<r=)r7rrrr�sz+ProactorEventLoopTests.test_writer_callbackcCstjd��dS)Nz(IocpEventLoop does not have add_writer())r<r=)r7rrr�test_writer_callback_cancel�sz2ProactorEventLoopTests.test_writer_callback_cancelcCstjd��dS)Nz6IocpEventLoop does not have create_datagram_endpoint())r<r=)r7rrrr��sz4ProactorEventLoopTests.test_create_datagram_endpointcCstjd��dS)Nz(IocpEventLoop does not have add_reader())r<r=)r7rrrr��sz4ProactorEventLoopTests.test_remove_fds_after_closingN)rErFrGrfrZ_is_sslproto_availablerrprzr�r�r!rqr{r�r�r�r
r�rr�r�rrrrr	Ss$r	)�	selectorscs@eZdZ�fdd�Z�fdd�Zdd�Z�S)�UnixEventLoopTestsMixincs:t�j�tj�}|j|j�tj|�dS)N)rIrer(ZSafeChildWatcherZattach_loopr,�set_child_watcher)r7Zwatcher)rKrrre�s
zUnixEventLoopTestsMixin.setUpcstjd�t�j�dS)N)r(rrIrk)r7)rKrrrk�s
z UnixEventLoopTestsMixin.tearDowncs?�fdd�}�j��j�jj|��d�dS)Nc�s7tjj�}�jj|t�IdH}|j�|S)N)�
concurrentZfuturesZProcessPoolExecutorr,r�r-Zshutdown)Zpoolr�)r7rrr��s
	
zEUnixEventLoopTestsMixin.test_get_event_loop_new_process.<locals>.mainr&)Zunpatch_get_running_loopr�r,r+)r7r�r)r7r�test_get_event_loop_new_process�s

z7UnixEventLoopTestsMixin.test_get_event_loop_new_process)rErFrGrerkrrr)rKrr
�sr
�KqueueSelectorcs�eZdZdd�Zejdd�ejej	j
d�d��fdd���Zejdd��fd	d
��Z�S)�KqueueEventLoopTestscCstjtj��S)N)r(rrr)r7rrrrf�sz&KqueueEventLoopTests.create_event_loopr�	Zopenbsdztest hangs on OpenBSDcst�j�dS)N)rIr�)r7)rKrrr��sz)KqueueEventLoopTests.test_read_pty_outputcst�j�dS)N)rIr�)r7)rKrrr��sz#KqueueEventLoopTests.test_write_pty)
rErFrGrfr	r�r<r�rrr�r�r�rr)rKrr�s
r�
EpollSelectorc@seZdZdd�ZdS)�EPollEventLoopTestscCstjtj��S)N)r(rrr)r7rrrrf�sz%EPollEventLoopTests.create_event_loopN)rErFrGrfrrrrr�sr�PollSelectorc@seZdZdd�ZdS)�PollEventLoopTestscCstjtj��S)N)r(rrr)r7rrrrf�sz$PollEventLoopTests.create_event_loopN)rErFrGrfrrrrr�src@seZdZdd�ZdS)rcCstjtj��S)N)r(rrZSelectSelector)r7rrrrf�sz&SelectEventLoopTests.create_event_loopN)rErFrGrfrrrrr�scOsdS)Nr)r�rbrrr�noop�srcs�eZdZ�fdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	e
jee
jd�d�dd��Z�S)�HandleTestscs/t�j�tj�|_d|jj_dS)NT)rIrerrPr,�	get_debug�return_value)r7)rKrrre�s
zHandleTests.setUpcCs~dd�}f}tj|||j�}|j|j|�|j|j|�|j|j�|j�|j	|j�dS)NcWs|S)Nr)r�rrrr~�sz)HandleTests.test_handle.<locals>.callback)
r(�Handler,r��	_callback�_argsr��
_cancelledr�rm)r7r~r��hrrr�test_handle�s
zHandleTests.test_handlec	Cs�dd�}tj�|_tj�|j_tj|f|j�}|j�|jjjdtj	d�dtj
d|d|ji�dS)NcSs
t��dS)N)r�rrrrr~�sz:HandleTests.test_callback_with_exception.<locals>.callbackr6zException in callback.*rZhandleZsource_traceback)rrPr,rtr(rZ_run�assert_called_withrZMockPattern�ANY�_source_traceback)r7r~r rrr�test_callback_with_exception�s
	z(HandleTests.test_callback_with_exceptioncCs8tj�}tjdd�f|j�}||d<dS)NcSsdS)Nrrrrrr�	sz1HandleTests.test_handle_weakref.<locals>.<lambda>r )�weakref�WeakValueDictionaryr(rr,)r7Zwdr rrr�test_handle_weakref	szHandleTests.test_handle_weakrefcCsd|jj_tjtd|j�}tjt�\}}|jt	|�d||f�|j
�|jt	|�d�tjt�}tj|f|j�}|jt	|�d||f�tj
tdd�}tj|d|j�}dtj|�|f}|jt	|�|�tj
td	d�}tj|d|j�}d
tj|�|f}|jt	|�|�tjdkrtj}tj|�}tj|�\}}tj|f|j�}d}d
|}d|tj|�|f}|jt	|�|�dS)NFrrZz<Handle noop(1, 2) at %s:%s>z<Handle cancelled>z<Handle noop() at %s:%s>rXz%^<Handle noop\(1, 2\)\(3\) at %s:%s>$�xz'^<Handle noop\(x=1\)\(2, 3\) at %s:%s>$�z*<function HandleTests.test_handle_repr .*>z%functools.partialmethod\(%s, , \)\(\)z^<Handle %s at %s:%s>$)rrZ)rX)rZrX)rXr*)r,rrr(rrr�get_function_sourcer�r�r�rprr�re�escapeZassertRegexrr;r�test_handle_repr�
partialmethod)r7r r�linenorzZregex�methodZcb_regexrrrr.	sD
	
zHandleTests.test_handle_reprcCs�d|jj_t}tj�jd}tjt	d|j�}t
jt	�\}}|jt
|�d||||f�|j�|jt
|�d||||f�|j�|jt
|�d||||f�dS)NTrrZz-<Handle noop(1, 2) at %s:%s created at %s:%s>z7<Handle cancelled noop(1, 2) at %s:%s created at %s:%s>)rrZ)r,rrrr�	_getframe�f_linenor(rrrr+r�r�r�)r7�create_filename�
create_linenor rr0rrr�test_handle_repr_debug8	s$
	
	z"HandleTests.test_handle_repr_debugcs�tj�j�}|jd��j|��fdd�}|jt�}||�|jt�}||�|jdt�}||�|jdt�}||�dS)NTcsWtjd�jd}�j|jt��j|jddd�t|df�dS)NrrX�test_handle_source_tracebackr�)rr2r3r�r$�listr�r)r r0)r7rr�check_source_tracebackW	szHHandleTests.test_handle_source_traceback.<locals>.check_source_tracebackr)	r(�get_event_loop_policyr)r�r*r�rr�r)r7r,r9r r)r7rr7R	s

	


z(HandleTests.test_handle_source_traceback�	CoroutinezNo collections.abc.CoroutinecCs�Gdd�d�}|�}d|_|jtj|��|jtj|�d�d|_|jtj|�d�d|_|jtj|�d�|�}|jtj|�d	�dS)
Nc@s@eZdZdd�Zdd�Zdd�Zdd�Zd	S)
zEHandleTests.test_coroutine_like_object_debug_formatting.<locals>.CorocSsdS)Nr)r7�vrrrr�w	szJHandleTests.test_coroutine_like_object_debug_formatting.<locals>.Coro.sendcWsdS)Nr)r7rCrrr�throwz	szKHandleTests.test_coroutine_like_object_debug_formatting.<locals>.Coro.throwcSsdS)Nr)r7rrrri}	szKHandleTests.test_coroutine_like_object_debug_formatting.<locals>.Coro.closecSsdS)Nr)r7rrr�	__await__�	szOHandleTests.test_coroutine_like_object_debug_formatting.<locals>.Coro.__await__N)rErFrGr�r=rir>rrrr�Corov	sr?ZAAAzAAA()ZBBBzBBB()Tz
BBB() runningzCoro())	rErmr(Ziscoroutiner�rZ_format_coroutinerG�
cr_running)r7r?r�rrr�+test_coroutine_like_object_debug_formattingo	s
					z7HandleTests.test_coroutine_like_object_debug_formatting)rErFrGrer!r%r(r.r6r7r<r�r
�collections�abcrArr)rKrr�s
1rcs^eZdZ�fdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Z�S)
�
TimerTestscs t�j�tj�|_dS)N)rIrerrPr,)r7)rKrrre�	s
zTimerTests.setUpcCsPtj�}tj|dd�ftj��}|jt|�t|��dS)NcSsdS)NFrrrrrr��	sz&TimerTests.test_hash.<locals>.<lambda>)rtr�r(�TimerHandlerrPr��hash)r7�whenr rrr�	test_hash�	szTimerTests.test_hashcCs�dd�}d}tj�}tj|||tj��}|j|j|�|j|j|�|j	|j
�|j�|j|j
�|j
|j�|j
|j�|jttjd|||j�dS)NcWs|S)Nr)r�rrrr~�	sz'TimerTests.test_timer.<locals>.callbackrrZrX)rrZrX)rtr�r(rErrPr�rrr�rr�rmrxrqr:r,)r7r~r�rGr rrr�
test_timer�	s
	zTimerTests.test_timercCswd|jj_tjdtf|j�}tjt�}|jt	|�d|�|j
�|jt	|�d�dS)NF�{z&<TimerHandle when=123 noop() at %s:%s>z <TimerHandle cancelled when=123>)r,rrr(rErrr+r�r�r�)r7r �srcrrr�test_timer_repr�	s
zTimerTests.test_timer_reprcCs�d|jj_t}tj�jd}tjdt	f|j�}t
jt	�\}}|jt
|�d||||f�|j�|jt
|�d||||f�dS)NTrrJz7<TimerHandle when=123 noop() at %s:%s created at %s:%s>zA<TimerHandle cancelled when=123 noop() at %s:%s created at %s:%s>)r,rrrrr2r3r(rErrr+r�r�r�)r7r4r5r rr0rrr�test_timer_repr_debug�	s
z TimerTests.test_timer_repr_debugcCsodd�}tj�}tj||f|j�}tj||f|j�}|j||k�|j||k�|j||k�|j||k�|j||k�|j||k�|j||k�|j||k�|j||k�|j||k�|j�|j||k�tj||f|j�}tj|d|f|j�}|j||k�|j||k�|j||k�|j||k�|j||k�|j||k�|j||k�|j||k�|j||k�|j||k�tj|f|j�}|j	t
|j|��|j	t
|j|��dS)NcWs|S)Nr)r�rrrr~�	sz2TimerTests.test_timer_comparison.<locals>.callbackg$@)
rtr�r(rEr,r�rmr�rr��NotImplemented�__eq__�__ne__)r7r~rGZh1Zh2Zh3rrr�test_timer_comparison�	s>
z TimerTests.test_timer_comparison)	rErFrGrerHrIrLrMrQrr)rKrrD�	srDc@seZdZdd�ZdS)�AbstractEventLoopTestscCs�tj�}tj�}|jt|j�|jt|jd�|jt|j�|jt|j	�|jt|j
�|jt|j�|jt|jd�|jt|j
dd�|jt|j||�|jt|jd�|jt|j�|jt|jd�|jt|j||�|jt|j|�|jt|jdd�|jt|jd�|jt|j|�|jt|j|�|jt|j|�|jt|jd|�|jt|jd�|jt|jd|�|jt|jd�|jt|j|d�|jt|j|d�|jt|j||�|jt|j |�|jt|j!d|�|jt|j"d�|jt|j"d�|jt|j#|tj$j%�|jt|j&|tj$j%�|jt|j'|tj$�|jt|j(|�|jt|j)|�|jt|j*|�|jt|j+|�|jt|j,�|jt|j-|�dS)Nr.�rr)r.rS).rrPr(�AbstractEventLooprq�NotImplementedErrorr�r+ryrnrgrir�rr�r�rtr�r�Zset_default_executorr�Zgetnameinfor�rRr�r�r�r�r�r�r�r�r�r�r�r��sentinelr�r�r�r�Zset_exception_handlerZdefault_exception_handlerrtrr�)r7r�r,rrr�test_not_implemented
s�









z+AbstractEventLoopTests.test_not_implementedN)rErFrGrWrrrrrR
srRc@seZdZdd�ZdS)�ProtocolsAbsTestscCsUtj�}tj�}|j|j|��|j|j|��|j|j|��|j|j��tj	�}|j|j|��|j|j|��|j|j
|��|j|j||��tj�}|j|j|��|j|j|��|j|j
d|��|j|jd|��|j|j��dS)Nr)rrPr(r�rxr<rDr?rA�DatagramProtocolrPrOrrarbrc)r7r�r�ZdpZsprrr�
test_empty\
s"zProtocolsAbsTests.test_emptyN)rErFrGrZrrrrrXZ
srXc@s�eZdZdd�Zdd�Zdd�Zdd�Zejd	�d
d��Z	dd
�Z
dd�Zdd�Zdd�Z
dd�ZdS)�PolicyTestscCs{tj�}|jt|j�|jt|jt��|jt|j�|jt|j�|jt|j	t��dS)N)
r(�AbstractEventLoopPolicyrqrU�get_event_loopr*rwr)Zget_child_watcherr)r7�policyrrr�test_event_loop_policyt
sz"PolicyTests.test_event_loop_policycCsxtj�}|j|jj�|j�}|j|tj�|j|jj|�|j||j��|j	�dS)N)
r(�DefaultEventLoopPolicyrx�_localZ_loopr]r�rTr�ri)r7r^r,rrr�test_get_event_loop}
szPolicyTests.test_get_event_loopc	Cs[tj�}tjj|dd|j�� }|j�}|j|�WdQRX|j�dS)Nr*�wraps)	r(r`rrrwr*r]r"ri)r7r^Zm_set_event_loopr,rrr�(test_get_event_loop_calls_set_event_loop�
s		z4PolicyTests.test_get_event_loop_calls_set_event_loopcCs0tj�}|jd�|jt|j�dS)N)r(r`r*rqrrr])r7r^rrr�"test_get_event_loop_after_set_none�
s
z.PolicyTests.test_get_event_loop_after_set_nonez'asyncio.events.threading.current_threadcs<�fdd�}tjd|�}|j�|j�dS)Ncs#tj�}�jt|j�dS)N)r(r`rqrrr])r^)r7rrr��
sz1PolicyTests.test_get_event_loop_thread.<locals>.fr�)r�r�r�r)r7Zm_current_threadr�Zthr)r7r�test_get_event_loop_thread�
s
z&PolicyTests.test_get_event_loop_threadcCs9tj�}|j�}|j|tj�|j�dS)N)r(r`r)r�rTri)r7r^r,rrr�test_new_event_loop�
szPolicyTests.test_new_event_loopcCs�tj�}|j�}|jt|jt��|j�}|j|�|j||j��|j	||j��|j
�|j
�dS)N)r(r`r]rqr:r*rwr)r��assertIsNotri)r7r^Zold_loopr,rrr�test_set_event_loop�
s

zPolicyTests.test_set_event_loopcCs9tj�}|j|tj�|j|tj��dS)N)r(r:r�r\r�)r7r^rrr�test_get_event_loop_policy�
sz&PolicyTests.test_get_event_loop_policycCsh|jttjt��tj�}tj�}tj|�|j|tj��|j||�dS)N)	rqr:r(�set_event_loop_policyrwr:r`r�rh)r7�
old_policyr^rrr�test_set_event_loop_policy�
s
z&PolicyTests.test_set_event_loop_policycs�Gdd�dtj�}d�tj�}z[tj|��tj���jtj�d���fdd�}�j|��Wdtj|��dk	r��j�X�jtj�d�dS)Nc@seZdZdd�ZdS)zDPolicyTests.test_get_event_loop_returns_running_loop.<locals>.PolicycSs
t�dS)N)rU)r7rrrr]�
szSPolicyTests.test_get_event_loop_returns_running_loop.<locals>.Policy.get_event_loopN)rErFrGr]rrrr�Policy�
srnc�s0�jtj����jtj���dS)N)r�r(r]�_get_running_loopr)r,r7rrr��
szBPolicyTests.test_get_event_loop_returns_running_loop.<locals>.func)	r(r`r:rkr)r�ror+ri)r7rnrlr�r)r,r7r�(test_get_event_loop_returns_running_loop�
s
z4PolicyTests.test_get_event_loop_returns_running_loopN)rErFrGr_rbrdrerrrfrgrirjrmrprrrrr[r
s	
r[�__main__)H�__doc__�collections.abcrBZconcurrent.futuresrrrjr�rrr,r�r�r	�ImportErrorr�rr�rtr*r<rr&r�r(rrrrrr�r	r
ZOPENSSL_VERSION_INFOr�rr%r-rArBrurr�r�r/rHrYrLrQZBaseProtocolrSrrTrdr�ZTestCaserr	rr
r
rrrrrrDrRrXr[rEr�rrrr�<module>s�

		" )������H�7�nXt