Your IP : 216.73.216.213


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

�
f f�m�@s�dZddlZddlZddlZddlZddlZddlZddlZddlZyddl	Z	Wne
k
r�dZ	YnXddlZddlZddl
Z
ddlZddlZddlZddlmZddlZddlZddlmZddlmZddlmZddlmZyddlmZWn"e
k
rydd	lmZYnXd
d�Zdd
�Zed�Zed�Zed�Zed�Z idd6dd6ddffddffddffddfffd6ddffddffdd fffd!6d"d#6d$d%6Z!Gd&d'�d'ej"�Z#Gd(d)�d)e#�Z$Gd*d+�d+ej%�Z&Gd,d-�d-ej"�Z'Gd.d/�d/ej(�Z)Gd0d1�d1ej*�Z+Gd2d3�d3�Z,Gd4d5�d5�Z-ejd6krLGd7d8�d8e,ej.�Z/Gd9d:�d:e,e-ej.�Z0n�dd;lm1Z1Gd<d=�d=e,�Z2e3e1d>�r�Gd?d@�d@e2e-ej.�Z4ne3e1dA�r�GdBdC�dCe2e-ej.�Z5ne3e1dD�rGdEdF�dFe2e-ej.�Z6nGdGd8�d8e2e-ej.�Z/dHdI�Z7GdJdK�dKej.�Z8GdLdM�dMej.�Z9GdNdO�dOej.�Z:GdPdQ�dQej.�Z;GdRdS�dSej.�Z<e=dTkr�ej>�ndS)UzTests for events.py.�N)�mock)�proactor_events)�selector_events)�sslproto)�
test_utils)�support)�test_supportcCs�ttd�r@tjjtj|�}tjj|�r@|Sntjjtjjt�|�}tjj|�rw|St	|��dS)N�
TEST_HOME_DIR)
�hasattrr�os�path�joinr	�isfile�dirname�__file__�FileNotFoundError)�filename�fullname�r�B/opt/alt/python34/lib64/python3.4/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"zssl_cert.pemzssl_key.pemzkeycert3.pemzpycacert.pemZB09264B1F2DA21D1ZserialNumber�r!ZcountryNameZXYZlocalityNamezCastle AnthraxZorganizationNamezPython Software FoundationZ
commonName�	localhostZsubjectzPython Software Foundation CAz
our-ca-serverZissuerzNov 13 19:47:07 2022 GMTZnotAfterzJan  4 19:47:07 2013 GMTZ	notBeforec@s[eZdZdZdZddd�Zdd�Zdd�Zdd	�Zd
d�Z	dS)�MyBaseProtoNcCsXd|_d|_d|_|dk	rTtjd|�|_tjd|�|_ndS)N�INITIALr�loop)�	transport�state�nbytes�asyncio�Future�	connected�done)�selfr'rrr�__init__Ms			zMyBaseProto.__init__cCsP||_|jdks't|j��d|_|jrL|jjd�ndS)Nr&�	CONNECTED)r(r)�AssertionErrorr-�
set_result)r/r(rrr�connection_madeUs
			zMyBaseProto.connection_madecCs7|jdkst|j��|jt|�7_dS)Nr1)r)r2r*�len)r/�datarrr�
data_received\szMyBaseProto.data_receivedcCs+|jdkst|j��d|_dS)Nr1�EOF)r)r2)r/rrr�eof_received`szMyBaseProto.eof_receivedcCsG|jdkst|j��d|_|jrC|jjd�ndS)Nr1r8�CLOSED)z	CONNECTEDzEOF)r)r2r.r3)r/�excrrr�connection_lostds		zMyBaseProto.connection_lost)
�__name__�
__module__�__qualname__r-r.r0r4r7r9r<rrrrr%Isr%cs"eZdZ�fdd�Z�S)�MyProtocs!t�j|�|jd�dS)Ns%GET / HTTP/1.0
Host: example.com

)�superr4�write)r/r()�	__class__rrr4lszMyProto.connection_made)r=r>r?r4rr)rCrr@ksr@c@sUeZdZdZddd�Zdd�Zdd�Zdd	�Zd
d�ZdS)�MyDatagramProtoNcCs:d|_d|_|dk	r6tjd|�|_ndS)Nr&rr')r)r*r+r,r.)r/r'rrrr0ts		zMyDatagramProto.__init__cCs4||_|jdks't|j��d|_dS)Nr&�INITIALIZED)r(r)r2)r/r(rrrr4zs	zMyDatagramProto.connection_madecCs7|jdkst|j��|jt|�7_dS)NrE)r)r2r*r5)r/r6�addrrrr�datagram_receivedsz!MyDatagramProto.datagram_receivedcCs"|jdkst|j��dS)NrE)r)r2)r/r;rrr�error_received�szMyDatagramProto.error_receivedcCsG|jdkst|j��d|_|jrC|jjd�ndS)NrEr:)r)r2r.r3)r/r;rrrr<�s		zMyDatagramProto.connection_lost)	r=r>r?r.r0r4rGrHr<rrrrrDqsrDc@sUeZdZdZddd�Zdd�Zdd�Zdd	�Zd
d�ZdS)�MyReadPipeProtoNcCsFdg|_d|_d|_|dk	rBtjd|�|_ndS)Nr&rr')r)r*r(r+r,r.)r/r'rrrr0�s
		zMyReadPipeProto.__init__cCs>||_|jdgks*t|j��|jjd�dS)Nr&r1)r(r)r2�append)r/r(rrrr4�s	!zMyReadPipeProto.connection_madecCs=|jddgks$t|j��|jt|�7_dS)Nr&r1)r)r2r*r5)r/r6rrrr7�s$zMyReadPipeProto.data_receivedcCs8|jddgks$t|j��|jjd�dS)Nr&r1r8)r)r2rJ)r/rrrr9�s$zMyReadPipeProto.eof_receivedcCsyd|jkr"|jjd�n|jdddgksIt|j��|jjd�|jru|jjd�ndS)Nr8r&r1r:)r)rJr2r.r3)r/r;rrrr<�s'	zMyReadPipeProto.connection_lost)	r=r>r?r.r0r4r7r9r<rrrrrI�srIc@s=eZdZdZddd�Zdd�Zdd�ZdS)�MyWritePipeProtoNcCs:d|_d|_|dk	r6tjd|�|_ndS)Nr&r')r)r(r+r,r.)r/r'rrrr0�s		zMyWritePipeProto.__init__cCs4||_|jdks't|j��d|_dS)Nr&r1)r(r)r2)r/r(rrrr4�s	z MyWritePipeProto.connection_madecCsG|jdkst|j��d|_|jrC|jjd�ndS)Nr1r:)r)r2r.r3)r/r;rrrr<�s		z MyWritePipeProto.connection_lost)r=r>r?r.r0r4r<rrrrrK�srKc@sXeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
S)�MySubprocessProtocolcs�d|_d|_tjd��|_tjd��|_�fdd�td�D�|_idd6dd6|_d|_	itj
d��d6tj
d��d6|_dS)	Nr&r'cs%i|]}tjd��|�qS)r')r+r,)�.0�fd)r'rr�
<dictcomp>�s	z1MySubprocessProtocol.__init__.<locals>.<dictcomp>��r#�)r)r(r+r,r-�	completed�range�disconnectsr6�
returncodeZEvent�got_data)r/r'r)r'rr0�s		"	zMySubprocessProtocol.__init__cCsD||_|jdks't|j��d|_|jjd�dS)Nr&r1)r(r)r2r-r3)r/r(rrrr4�s		z$MySubprocessProtocol.connection_madecCs;|jdkst|j��d|_|jjd�dS)Nr1r:)r)r2rSr3)r/r;rrrr<�s	z$MySubprocessProtocol.connection_lostcCsD|jdkst|j��|j||7<|j|j�dS)Nr1)r)r2r6rW�set)r/rNr6rrr�pipe_data_received�sz'MySubprocessProtocol.pipe_data_receivedcCsS|jdkst|j��|r;|j|j|�n|j|j|�dS)Nr1)r)r2rUZ
set_exceptionr3)r/rNr;rrr�pipe_connection_lost�sz)MySubprocessProtocol.pipe_connection_lostcCs4|jdkst|j��|jj�|_dS)Nr1)r)r2r(Zget_returncoderV)r/rrr�process_exited�sz#MySubprocessProtocol.process_exitedN)	r=r>r?r0r4r<rYrZr[rrrrrL�srLcs�eZdZ�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*e+j,dL�dMdN��Z-dOdP�Z.dQdR�Z/dSdT�Z0ejeedU�dV�dWdX��Z1dYdZ�Z2ejeed�d�d[d\��Z3ejeed�d�d]d^��Z4d8d_d`�Z5d8dadb�Z6d8dcdd�Z7ej#e$d8kd?�dedf��Z8dgdh�Z9ej#e$d8kd?�ejeed�d�didj���Z:dkdl�Z;ej#e$d8kd?�dmdn��Z<dodp�Z=ej#e$d8kd?�ejeed�d�dqdr���Z>dsdt�Z?ej#e$d8kd?�dudv��Z@dwdx�ZAej#e$d8kd?�ejeed�d�dydz���ZBd{d|�ZCej#e$d8kd?�d}d~��ZDdd��ZEd�d��ZFd�d��ZGejeHjId��d�d���ZJd�d��ZKd�d��ZLd�d��ZMd�d��ZNejeOjPd�kd��d�d���ZQejeOjPd�kd��eHjRd�d��eHjSd��d�d�����ZTejeOjPd�kd��d�d���ZUejeOjPd�kd��d�d���ZVejeOjPd�kd��eHjRd�d��d�d����ZWd�d��ZXd�d��ZYd�d��ZZd�d��Z[d�d��Z\d�d��Z]d�d��Z^�S)��EventLoopTestsMixincs0t�j�|j�|_|j|j�dS)N)rA�setUp�create_event_loopr'�set_event_loop)r/)rCrrr]�s
zEventLoopTestsMixin.setUpcsJ|jj�s"tj|j�n|jj�tj�t�j�dS)N)	r'�	is_closedr�run_briefly�close�gcZcollectrA�tearDown)r/)rCrrrd�s


zEventLoopTestsMixin.tearDowncsStjdd���tj��fdd��}�jt�jj|��dS)Ncss	dVdS)Nrrrrr�coro1�szBEventLoopTestsMixin.test_run_until_complete_nesting.<locals>.coro1cs-�j�jj���jj���dS)N)�
assertTruer'�
is_running�run_until_completer)rer/rr�coro2szBEventLoopTestsMixin.test_run_until_complete_nesting.<locals>.coro2)r+�	coroutine�assertRaises�RuntimeErrorr'rh)r/rir)rer/r�test_run_until_complete_nesting�sz3EventLoopTestsMixin.test_run_until_complete_nestingcCsr|jj�}|jjtjdd|j��|jj�}|jd||koadkn||�dS)Ng�������?r'g{�G�z�?g�������?)r'�timerhr+�sleeprf)r/�t0�t1rrr�test_run_until_completes"z+EventLoopTestsMixin.test_run_until_completecsAtj�fdd��}|�}�jt�jj|�dS)Nc3s,�jj�tjdd�j�DdHdS)Ng�������?r')r'�stopr+ror)r/rr�cbs
z?EventLoopTestsMixin.test_run_until_complete_stopped.<locals>.cb)r+rjrkrlr'rh)r/rtZtaskr)r/r�test_run_until_complete_stoppeds		z3EventLoopTestsMixin.test_run_until_complete_stoppedcs�g���fdd�}�jjd|d�tj�}�jj�tj�}�j�dg��jd||ko�dkn||�dS)Ncs�j|��jj�dS)N)rJr'rs)�arg)�resultsr/rr�callbacks
z5EventLoopTestsMixin.test_call_later.<locals>.callbackg�������?zhello worldg{�G�z�?g�������?)r'�
call_laterrn�	monotonic�run_forever�assertEqualrf)r/rxrprqr)rwr/r�test_call_laters
z#EventLoopTestsMixin.test_call_latercsUg���fdd�}�jj|dd��jj��j�dg�dS)Ncs$�j||f��jj�dS)N)rJr'rs)Zarg1Zarg2)rwr/rrrx+sz4EventLoopTestsMixin.test_call_soon.<locals>.callback�hello�world)r~r)r'�	call_soonr{r|)r/rxr)rwr/r�test_call_soon(s

z"EventLoopTestsMixin.test_call_soonc
s�g�tj����fdd�����fdd�}�j�tjd|�}|j���%�jj�d��jj�WdQX|j��j	�ddg�dS)Ncs3�j|�t��dkr/�jj�ndS)NrR)rJr5r'rs)rv)rwr/rrrx7s
z?EventLoopTestsMixin.test_call_soon_threadsafe.<locals>.callbackcs!�jj�d��j�dS)Nr~)r'�call_soon_threadsafe�releaser)rx�lockr/rr�
run_in_thread<szDEventLoopTestsMixin.test_call_soon_threadsafe.<locals>.run_in_thread�targetrr~)
�	threadingZLock�acquire�Thread�startr'r�r{r
r|)r/r��tr)rxr�rwr/r�test_call_soon_threadsafe3s


z-EventLoopTestsMixin.test_call_soon_threadsafecshg���fdd�}�jj|d��jj|d��jj��j�ddg�dS)Ncs3�j|�t��dkr/�jj�ndS)NrR)rJr5r'rs)rv)rwr/rrrxMs
zKEventLoopTestsMixin.test_call_soon_threadsafe_same_thread.<locals>.callbackr~r)r'r�r�r{r|)r/rxr)rwr/r�%test_call_soon_threadsafe_same_threadJs
z9EventLoopTestsMixin.test_call_soon_threadsafe_same_threadcCsfdd�}|jjd|d�}|jj|�\}}|j|d�|j|tj��dS)NcSs|tj�fS)N)r��	get_ident)rvrrr�runXsz5EventLoopTestsMixin.test_run_in_executor.<locals>.runZyo)r'�run_in_executorrhr|ZassertNotEqualr�r�)r/r��f2�resZ	thread_idrrr�test_run_in_executorWs
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�extendrfr'�
remove_reader�filenorb)r6)�
bytes_read�rr/rr�readerds
	z8EventLoopTestsMixin.test_reader_callback.<locals>.readersabccst��dkS)NrP)r5r)r�rr�<lambda>ssz:EventLoopTestsMixin.test_reader_callback.<locals>.<lambda>sdefcst��dkS)N�)r5r)r�rrr�ussabcdef)r�
socketpair�setblocking�	bytearrayr'�
add_readerr�r��send�	run_untilrbrsr{r|)r/�wr�r)r�r�r/r�test_reader_callback_s
	

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'rs)r6)r/r�rr�writers
z8EventLoopTestsMixin.test_writer_callback.<locals>.writer�xirR)rr�r�r'�
add_writerr�r{rf�
remove_writer�assertFalserbr�r5r|)r/r�r�r6�readr)r/r�r�test_writer_callback{s




z(EventLoopTestsMixin.test_writer_callbackcCs�t|jtj�s	|jjd�|jd�|jt��'|jj|jj	||j
��WdQX|jt��$|jj|jj|d��WdQX|jt��$|jj|jj|d��WdQX|jt��!|jj|jj
|��WdQXn|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'rZBaseProactorEventLoop�	set_debugr�rk�
ValueErrorrh�sock_connect�address�sock_sendall�	sock_recv�sock_acceptrbrf�
startswith)r/�httpd�sockr6rrr�_basetest_sock_client_ops�s4
				
				
z-EventLoopTestsMixin._basetest_sock_client_opsc
Cs5tj��#}tj�}|j||�WdQXdS)N)r�run_test_server�socketr�)r/r�r�rrr�test_sock_client_ops�sz(EventLoopTestsMixin.test_sock_client_ops�AF_UNIXzNo UNIX Socketsc
Cs;tj��)}tjtj�}|j||�WdQXdS)N)r�run_test_unix_serverr�r�r�)r/r�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	||��WdQX|j�dS)N�	127.0.0.1rF)r�r)
r��bind�getsocknamerbr�rk�ConnectionRefusedErrorr'rhr�)r/r��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�Zlisten�connectr�r'r�rhr|Z
gettimeoutZgetpeernamerb)r/Zlistener�client�fZconnrFrrr�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)Nr#rr)�caughtrr�
my_handler�sz?EventLoopTestsMixin.test_add_signal_handler.<locals>.my_handlerZboomr#cs�S)Nrr)r�rrr�sz=EventLoopTestsMixin.test_add_signal_handler.<locals>.<lambda>���r�)rk�	TypeErrorr'�add_signal_handler�remove_signal_handlerr��signal�NSIGrlr�r��SIGINTr�kill�getpidrr�rfr|�	getsignal�default_int_handler)r/r�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'rsr)r�r/rrr�s
zLEventLoopTestsMixin.test_signal_handling_while_selecting.<locals>.my_handlerg{�G�z�?r#)r'r�r�r��	setitimer�ITIMER_REALr{r|)r/r�r)r�r/r�$test_signal_handling_while_selecting	s
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�r/�	some_argsrrr�s
zAEventLoopTestsMixin.test_signal_handling_args.<locals>.my_handlerg�������?g�?r#)r�)
r'r�r�r�r�r�ryrsr{r|)r/r�r)r�r/r�r�test_signal_handling_argss
z-EventLoopTestsMixin.test_signal_handling_argsTcCs�|jj|�\}}|j|tj�|j|tj�|j|j|�|rp|j|j	d��n|jj|j
�|j|jd�|j
�dS)N�socknamer)r'rh�assertIsInstancer+�	Transport�Protocol�assertIsr(�assertIsNotNone�get_extra_infor.�
assertGreaterr*rb)r/�connection_fut�check_sockname�tr�prrrr�_basetest_create_connection*sz/EventLoopTestsMixin._basetest_create_connectioncsJtj��8}�jj�fdd�|j�}�j|�WdQXdS)Ncstd�j�S)Nr')r@r'r)r/rrr�8sz<EventLoopTestsMixin.test_create_connection.<locals>.<lambda>)rr�r'�create_connectionr�r�)r/r��conn_futr)r/r�test_create_connection5s	z*EventLoopTestsMixin.test_create_connectioncsWt�}tj��;}�jj�fdd�|j�}�j||�WdQXdS)Ncstd�j�S)Nr')r@r'r)r/rrr�CszAEventLoopTestsMixin.test_create_unix_connection.<locals>.<lambda>)r"rr�r'�create_unix_connectionr�r�)r/r�r�r�r)r/r�test_create_unix_connection;s

	z/EventLoopTestsMixin.test_create_unix_connectioncsgtj��U}d}�jj�jjdtj|j��}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�WdQXdS)
N�type�family�protoFzCan not create socket.cstd�j�S)Nr')r@r'r)r/rrr�ZszAEventLoopTestsMixin.test_create_connection_sock.<locals>.<lambda>r�r)rr�r'rh�getaddrinfor��SOCK_STREAMr�r�r�r2r�r�r+r�r�r.r�r*rb)r/r�r��infosr�r�r��cnamer�r�r�r�r)r/r�test_create_connection_sockFs.	
		z/EventLoopTestsMixin.test_create_connection_sockNcCs�|r|j|jd��n|rA|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�cipherrPrr#rRZ
ssl_object�compression)r�r�r|r�rr5�strrr�r�Zgetpeercert)r/r�r�r�r�r�Zsslobjrrr�check_ssl_extra_infobs0		
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'rhr�r+r�r�rfrCr=�lowerrr.r�r*rb)r/r�r�r�r�r�rrr�_basetest_create_ssl_connection�sz3EventLoopTestsMixin._basetest_create_ssl_connectionc	s$|dtj��}�j|||�ttd�r�tjjdddddd�fdd�}tjdd	|��<}|dd
�}�j|||��j	|j
d�WdQXn�jtj��<}|dd
�}tj
���j|||�WdQXWdQX�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|rr�SERVER_AUTHr�dummy_ssl_context)Zpurposerrr)r/rr�_dummy_ssl_create_context�szREventLoopTestsMixin._test_create_ssl_connection.<locals>._dummy_ssl_create_contextzssl.create_default_context�side_effectTr#ZCERTIFICATE_VERIFY_FAILED)rr	rr
rrrr�patchr|Z
call_countrk�SSLError�disable_logger�	exception�reason)	r/r�r�r�r�r�r
�m�cmr)r/r�_test_create_ssl_connection�s&	
z/EventLoopTestsMixin._test_create_ssl_connectionz
No ssl modulecsbtjdd��J}tj�jj�fdd�|j�}�j||d|j�WdQXdS)N�use_sslTcstd�j�S)Nr')r@r'r)r/rrr��sz@EventLoopTestsMixin.test_create_ssl_connection.<locals>.<lambda>r�)rr��	functools�partialr'r�r�r)r/r�r�r)r/r�test_create_ssl_connection�s	z.EventLoopTestsMixin.test_create_ssl_connectioncCs!tj��|j�WdQXdS)N)r�force_legacy_ssl_supportr)r/rrr�!test_legacy_create_ssl_connection�s
z5EventLoopTestsMixin.test_legacy_create_ssl_connectionc
sut�}tjdd��S}tj�jj�fdd�|jdd�}�j|||d|j�WdQXdS)NrTcstd�j�S)Nr')r@r'r)r/rrr��szEEventLoopTestsMixin.test_create_ssl_unix_connection.<locals>.<lambda>�server_hostnamez	127.0.0.1r�)	r"rr�rrr'r�r�r)r/r�r�r�r)r/r�test_create_ssl_unix_connection�s
		z3EventLoopTestsMixin.test_create_ssl_unix_connectioncCs!tj��|j�WdQXdS)N)rrr)r/rrr�&test_legacy_create_ssl_unix_connection�s
z:EventLoopTestsMixin.test_legacy_create_ssl_unix_connectioncs�tj���}tj�}�jj�fdd�d|jd|f|j�}�jj|�\}}|jj	d�d}�j
||�|j�WdQXdS)Ncstd�j�S)Nr')r@r'r)r/rrr��szGEventLoopTestsMixin.test_create_connection_local_addr.<locals>.<lambda>�
local_addrrr�r#)rr�r�find_unused_portr'r�r�rhr(r�r|rb)r/r��portr�r�r�Zexpectedr)r/r�!test_create_connection_local_addr�s	z5EventLoopTestsMixin.test_create_connection_local_addrcs�tj���}�jj�fdd�d|j|j�}�jt��}�jj|�WdQX�j|j	j
t
j��jt
|j�|j	j�WdQXdS)Ncstd�j�S)Nr')r@r'r)r/rrr��szNEventLoopTestsMixin.test_create_connection_local_addr_in_use.<locals>.<lambda>r)rr�r'r�r�rk�OSErrorrhr|r�errno�
EADDRINUSE�assertInr��strerror)r/r�r�rr)r/r�(test_create_connection_local_addr_in_use�s	z<EventLoopTestsMixin.test_create_connection_local_addr_in_usezasyncio.base_events.socketcs tj�fdd�����fdd�}�tjkradd�|D�|j�j_ndd�|D�|j�j_|�j_tj	��j_
tj	��j_�jj�fdd	�|d
�}�jj
|�}�j|j�dd�|jD�}�j||�dS)NcsW�tjkr.�tjdd||fggS�tjdd||ddfggSdS)Nr��r)r��AF_INETr�)�hostrr��kw)r�rrr��szEEventLoopTestsMixin.create_server_multiple_hosts.<locals>.getaddrinfocstj�||�d�j�S)Nr')r+�Taskr')r��kwds)r�r/rr�getaddrinfo_task�szJEventLoopTestsMixin.create_server_multiple_hosts.<locals>.getaddrinfo_taskcSsg|]}|df�qS)�Pr)rMr)rrr�
<listcomp>�s	zDEventLoopTestsMixin.create_server_multiple_hosts.<locals>.<listcomp>cSs"g|]}|dddf�qS)r.rr)rMr)rrrr/�s	cs
t�j�S)N)r@r'r)r/rrr�szBEventLoopTestsMixin.create_server_multiple_hosts.<locals>.<lambda>r.cSs g|]}|j�d�qS)r)�
getsockbyname)rMr�rrrr/s	)r+rjr�r(r0rr'r�r�MockZ_start_serving�
_stop_serving�
create_serverrh�
addCleanuprb�socketsr|)r/r�ZhostsZ	mock_sockr-r��serverZserver_hostsr)r�r�r/r�create_server_multiple_hosts�s		$z0EventLoopTestsMixin.create_server_multiple_hostscCs|jtjddg�dS)Nz1.2.3.4z5.6.7.8)r7r�r()r/rrr�&test_create_server_multiple_hosts_ipv4sz:EventLoopTestsMixin.test_create_server_multiple_hosts_ipv4cCs|jtjddg�dS)Nz::1z::2)r7r��AF_INET6)r/rrr�&test_create_server_multiple_hosts_ipv6
sz: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�sz8EventLoopTestsMixin.test_create_server.<locals>.<lambda>z0.0.0.0rr#z	127.0.0.1sxxxr1cs
�jdkS)Nr)r*r)r�rrr�srPr�r�r:)r@r'r3rhr|r5r5r�r�r��sendallr-r)rr�r*r�r(r�rbr.)r/r�r6r�r)rr�r)r�r�test_create_server
s,$

	

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�5szCEventLoopTestsMixin.test_create_server_reuse_port.<locals>.<lambda>z0.0.0.0rr#cs�S)Nrr)r�rrr�BsZ
reuse_portT)r@r'r3rhr|r5r5r�Z
getsockoptr��
SOL_SOCKETr=rbrrarf)r/r�r6r�r)r�r�test_create_server_reuse_port1s*	

	!
z1EventLoopTestsMixin.test_create_server_reuse_portcsYtj��|j�fdd��|jj|�|�}|jj|�}|�fS)Ncstjj��otj��S)N)rr�exists�unlinkr)rrrr�Msz7EventLoopTestsMixin._make_unix_server.<locals>.<lambda>)rZgen_unix_socket_pathr4r'�create_unix_serverrh)r/�factory�kwargsr�r6r)rr�_make_unix_serverKs
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�Wsz=EventLoopTestsMixin.test_create_unix_server.<locals>.<lambda>r#sxxxr1cs
�jdkS)Nr)r*r)r�rrr�`srPr:)r@r'rEr|r5r5r�r�r�r;rhr-r)rr�r*r(rbr.)r/r6rr�r)r�r�test_create_unix_serverTs!



z+EventLoopTestsMixin.test_create_unix_servercstd|j��tj�}|�U|jj�fdd�dd|�}|jtd��|jj|�WdQXWdQXdS)Nr'cs�S)Nrr)r�rrr�uszOEventLoopTestsMixin.test_create_unix_server_path_socket_error.<locals>.<lambda>z/testr�z3path and sock can not be specified at the same time)r@r'r�rB�assertRaisesRegexr�rh)r/r�r�r)r�r�)test_create_unix_server_path_socket_errorps'	
z=EventLoopTestsMixin.test_create_unix_server_path_socket_errorcCs8tjtj�}|jtjO_|j||�|S)N)r�
SSLContext�PROTOCOL_SSLv23�options�OP_NO_SSLv2Zload_cert_chain)r/�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)rPr'r3rhr5r�r|)
r/rCrMrNrOr�r6r�r)rrrr�_make_ssl_server�s
z$EventLoopTestsMixin._make_ssl_servercCs%|j||�}|j|d|�S)Nr)rPrE)r/rCrMrNrOrrr�_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>rsxxxr1cs
�jdkS)Nr)r*r)r�rrr��srPr�r:)r@r'rQ�ONLYCERT�ONLYKEYr�r%rr	rhrBr-r|r)r�r*rr(rbr.)r/r6r)r�f_cr�r�r)r�r�test_create_server_ssl�s"$


z*EventLoopTestsMixin.test_create_server_sslcCs!tj��|j�WdQXdS)N)rrrV)r/rrr�test_legacy_create_server_ssl�s
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>rrr'sxxxr1cs
�jdkS)Nr)r*r)r�rrr��srPr:)r@r'rRrSrTr�r%rr	rhrBr-r|r)r�r*r(rbr.)r/r6rrUr�r�r)r�r�test_create_unix_server_ssl�s"!		


z/EventLoopTestsMixin.test_create_unix_server_sslcCs!tj��|j�WdQXdS)N)rrrX)r/rrr�"test_legacy_create_unix_server_ssl�s
z6EventLoopTestsMixin.test_legacy_create_unix_server_sslcs.td|j��|j�fdd�t�\}}}tjtj�}|jtjO_tj	|_
t|d�r�d|_n|jj
t||d|�}tjj|jd��Ttj��1|jtjd��|jj|�WdQXWdQXtj|j�WdQX|j�j�|j�dS)	Nr'cs�S)Nrr)r�rrr��szJEventLoopTestsMixin.test_create_server_ssl_verify_failed.<locals>.<lambda>�check_hostnameTr�call_exception_handlerz(?i)certificate.verify.failed )r@r'rQ�SIGNED_CERTFILErrIrJrKrL�
CERT_REQUIRED�verify_moder
rZr�rr�objectrrrGr
rhra�assertIsNoner(rb)r/r6r)r�sslcontext_clientrUr)r�r�$test_create_server_ssl_verify_failed�s$!	

z8EventLoopTestsMixin.test_create_server_ssl_verify_failedcCs!tj��|j�WdQXdS)N)rrrb)r/rrr�+test_legacy_create_server_ssl_verify_failed�s
z?EventLoopTestsMixin.test_legacy_create_server_ssl_verify_failedcs.td|j��|j�fdd�t�\}}tjtj�}|jtjO_tj	|_
t|d�r�d|_n|jj
t|d|dd�}tjj|jd	��Ttj��1|jtjd
��|jj|�WdQXWdQXtj|j�WdQX|j�j�|j�dS)Nr'cs�S)Nrr)r�rrr��szOEventLoopTestsMixin.test_create_unix_server_ssl_verify_failed.<locals>.<lambda>rZTrrZinvalidr[z(?i)certificate.verify.failed )r@r'rRr\rrIrJrKrLr]r^r
rZr�rrr_rrrGr
rhrar`r(rb)r/r6rrarUr)r�r�)test_create_unix_server_ssl_verify_failed�s&	

z=EventLoopTestsMixin.test_create_unix_server_ssl_verify_failedcCs!tj��|j�WdQXdS)N)rrrd)r/rrr�0test_legacy_create_unix_server_ssl_verify_faileds
zDEventLoopTestsMixin.test_legacy_create_unix_server_ssl_verify_failedcs+td|j��|j�fdd�t�\}}}tjtj�}|jtjO_tj	|_
|jdt�t
|d�r�d|_n|jjt||d|�}tjj|jd��Dtj��1|jtjd	��|jj|�WdQXWdQXWdQX�jj�|j�dS)
Nr'cs�S)Nrr)r�rrr�szIEventLoopTestsMixin.test_create_server_ssl_match_failed.<locals>.<lambda>rrZTrr[z.hostname '127.0.0.1' doesn't match 'localhost')r@r'rQr\rrIrJrKrLr]r^�load_verify_locations�
SIGNING_CAr
rZr�rrr_rrrGZCertificateErrorrhr(rb)r/r6r)rrarUr)r�r�#test_create_server_ssl_match_faileds(!		

"
z7EventLoopTestsMixin.test_create_server_ssl_match_failedcCs!tj��|j�WdQXdS)N)rrrh)r/rrr�*test_legacy_create_server_ssl_match_failed7s
z>EventLoopTestsMixin.test_legacy_create_server_ssl_match_failedcstd|j��|j�fdd�t�\}}tjtj�}|jtjO_tj	|_
|jdt�t
|d�r�d|_n|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>rrZTrrr$)r@r'rRr\rrIrJrKrLr]r^rfrgr
rZr�rhr(rbr.)r/r6rrarUr�r�r)r�r�$test_create_unix_server_ssl_verified;s"	


z8EventLoopTestsMixin.test_create_unix_server_ssl_verifiedcCs!tj��|j�WdQXdS)N)rrrj)r/rrr�+test_legacy_create_unix_server_ssl_verifiedUs
z?EventLoopTestsMixin.test_legacy_create_unix_server_ssl_verifiedcs'td|j��|j�fdd�t�\}}}tjtj�}|jtjO_tj	|_
|jdt�t
|d�r�d|_n|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>rrZTrrr$r�r�)r@r'rQr\rrIrJrKrLr]r^rfrgr
rZr�rhr�PEERCERTr(rbr.)r/r6r)rrarUr�r�r)r�r�test_create_server_ssl_verifiedYs&!	


z3EventLoopTestsMixin.test_create_server_ssl_verifiedcCs!tj��|j�WdQXdS)N)rrrm)r/rrr�&test_legacy_create_server_ssl_verifiedvs
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)rAr4r3)r/r()rCr�rrr4~szPEventLoopTestsMixin.test_create_server_sock.<locals>.TestMyProto.connection_made)r=r>r?r4r)r�)rCr�TestMyProto}sror�r#�0.0.0.0rr�z	127.0.0.1sxxx)rpr)r+r,r'r@r�r��
setsockoptr>�SO_REUSEADDRr�r3rhr5r�r�r|r�r�rb)	r/ro�sock_obr�r6r�r)rr�r)r�r�test_create_server_sockzs 



z+EventLoopTestsMixin.test_create_server_sockc	Cs�tjdtj�}|jtjtjd�|jd�|jjtd|�}|jj	|�}|j
d}|j�\}}|jjtd|d|�}|jt
��}|jj	|�WdQX|j|jjtj�|j�dS)	Nr�r#�0.0.0.0rr�r)r)rur)r�r�rqr>rrr�r'r3r@rhr5r�rkr!r|rr"r#rb)r/rsr�r6r�r)rrrrr�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)rAr4r3)r/r()rC�f_protorrr4�szVEventLoopTestsMixin.test_create_server_dual_stack.<locals>.TestMyProto.connection_made)r=r>r?r4r)rw)rCrro�srorr)rr#rz	127.0.0.1sxxxz::1)r+r,r'r@rrr3rhr!r"r#ZassertGreaterEqualr�r�r�r(rbr9)	r/roZ	try_countrr�r6Zexr�r�r)rwr�test_create_server_dual_stack�s:






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'r3r@rhr5r�r�r�r�rbrkr�)r/r�r6r�r)rr�rrr�test_server_close�s



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')rAr0r')Z
inner_self)rCr/rrr0�szWEventLoopTestsMixin.test_create_datagram_endpoint.<locals>.TestMyDatagramProto.__init__cs.t�j||�|jjd||�dS)Nsresp:)rArGr(�sendto)r/r6rF)rCrrrG�sz`EventLoopTestsMixin.test_create_datagram_endpoint.<locals>.TestMyDatagramProto.datagram_received)r=r>r?r0rGr)r/)rCr�TestMyDatagramProto�sr{r�	127.0.0.1rr�rEcstd�j�S)Nr')rDr'r)r/rrr��szCEventLoopTestsMixin.test_create_datagram_endpoint.<locals>.<lambda>Zremote_addrsxxxcs�jS)N)r*r)r6rrr��srPcs�jS)N)r*r)r�rrr��s�r:)r|r)rDr'�create_datagram_endpointrhr�r�r+r�r|r)r�r(rzrr�r*r�rbr.)r/r{�coroZs_transportr)rr(r)r�r/r6r�test_create_datagram_endpoint�s6		

z1EventLoopTestsMixin.test_create_datagram_endpointcs-d}d}�jj�jjdtj|��}xw|D]]\}}}}}y<tjd|d|d|�}|jd�|j|�WnYq:XPq:Wds�td���jj�fdd	�d
|�}	�jj|	�\}
}�j	|
t
j��j	|t�|
j
��jj|j�dS)N�	127.0.0.1rr�r�r�FzCan not create socket.cstd�j�S)Nr')rDr'r)r/rrr� szHEventLoopTestsMixin.test_create_datagram_endpoint_sock.<locals>.<lambda>r�)r�r)r'rhr�r��
SOCK_DGRAMr�r�r2r�r�r+r�rDrbr.)r/r�Z
local_addressr�r�r�r�r�r�r�r�r�r)r/r�"test_create_datagram_endpoint_sock
s*	
	
z6EventLoopTestsMixin.test_create_datagram_endpoint_sockcCs�|j�}t|tj�s8|j�|jd�n|jd|j�|j�|jd|j�|j|j	�|j|j
�dS)Nz#loop is not a BaseSelectorEventLoopr#r)r^r�rZBaseSelectorEventLooprbZskipTestr|Z
_internal_fdsr`Z_csockZ_ssock)r/r'rrr�test_internal_fds's

z%EventLoopTestsMixin.test_internal_fds�win32zDon'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���DdH\}}�j|���j|�j��jddg�j��jd�j�dS)Ncs�S)Nrr)r�rrr�>szEEventLoopTestsMixin.test_read_pipe.<locals>.connect.<locals>.<lambda>r&r1r)r'�connect_read_piper�r(r|r)r*)r��p)�pipeobjr�r/rrr�;s	#z3EventLoopTestsMixin.test_read_pipe.<locals>.connect�1cs
�jdkS)Nr#)r*r)r�rrr�Gsz4EventLoopTestsMixin.test_read_pipe.<locals>.<lambda>r#s2345cs
�jdkS)Nr)r*r)r�rrr�Ksr&r1rr8r:�pipe)rIr'rr��io�openr+rjrhrBrr�r|r*r)rbr.r�r(r�)r/�rpipe�wpiper�r)r�r�r/r�test_read_pipe3s"!	
z"EventLoopTestsMixin.test_read_piperr�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���DdH\}}�j|���j|�j��jddg�j��jd�j�dS)Ncs�S)Nrr)r�rrr�eszKEventLoopTestsMixin.test_read_pty_output.<locals>.connect.<locals>.<lambda>r&r1r)r'r�r�r(r|r)r*)r�r�)�master_read_objr�r/rrr�csz9EventLoopTestsMixin.test_read_pty_output.<locals>.connectr�cs�jS)N)r*r)r�rrr�osz:EventLoopTestsMixin.test_read_pty_output.<locals>.<lambda>r#s2345cs
�jdkS)Nr)r*r)r�rrr�ssr&r1rr8r:r�)rIr'r�openptyr�r�r+rjrhrBrr�r|r*r)rbr.r�r(r�)r/�master�slaver�r)r�r�r/r�test_read_pty_outputVs"!	
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>r1r�cs&tj�d�}||7}t|�S)Ni)rr�r5)r6�chunk)r�rrr��s
z3EventLoopTestsMixin.test_write_pipe.<locals>.readercs���dkS)Nr#rr)r6r�rrr��ss2345cs���dkS)Nrrr)r6r�rrr��ss12345r�r:)rr�r�r�rKr'�connect_write_piperhr�r(r|r)rBr�rr�rbr�r�r.)r/r�r�r�r(r�r)r6r�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>r1r�r:)rr�r�r�r��detachrKr'r�rhr�r(r|r)rBr�rbr.)r/ZrsockZwsockr�r�r(r�r6r)r�r�#test_write_pipe_disconnect_on_close�s
!
!
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��sz4EventLoopTestsMixin.test_write_pty.<locals>.<lambda>r1r�cs&tj�d�}||7}t|�S)Ni)rr�r5)r6r�)r�rrr��s
z2EventLoopTestsMixin.test_write_pty.<locals>.readercs���dkS)Nr#rr)r6r�rrr��sZtimeoutrs2345cs���dkS)Nrrr)r6r�rrr��ss12345r�r:)rr�r�r�rKr'r�rhr�r(r|r)rBr�rr�rbr�r�r.)r/r�Zslave_write_objr�r(r�r)r6r�r�r�r�test_write_pty�s0!
	!
!

z"EventLoopTestsMixin.test_write_ptycsJtj�\}}|jd��jj|d��t�dd�}|dk	re�j|j�ntj	��fdd��}t
j�}tj|�d�j�}�jj
�t
j�|}�j|d��j|j�d��jtj�j�|dk	r"�j|j�n�jj|�|j�|j�dS)	NFr#�ovc3s]zHy �jj�j��DdHWntjk
r@d}YnXd}Wd�jj�X|S)N�	cancelled)r'r��cancelr+�CancelledErrorrs)r�)r�r/rr�main�s

z:EventLoopTestsMixin.test_prompt_cancellation.<locals>.mainr'g�������?r�)rr�r�r'r��getattrrf�pendingr+rjrnrzr+r{Z
assertLessr|�resultrkr�r�r2rb)r/r�r�r�r�r�r��elapsedr)r�r/r�test_prompt_cancellation�s&



z,EventLoopTestsMixin.test_prompt_cancellationcs���fdd�}�jj�d�j_|�j_tj�fdd��}�jj|���j�jjdi�jjd6�jjj	j
d6�dS)	Ncs�jjd7_��dS)Nr#)r'�_run_once_counterr)�
orig_run_oncer/rr�	_run_once
sz<EventLoopTestsMixin.test_timeout_rounding.<locals>._run_oncerc3s��j}tjdd|�DdHtjdd|�DdHtjdd|�DdHtjdd|�DdHtjdd|�DdHdS)Ng{�G�z�?r'g-C��6?g���ư>g:�0�yE>g�����|�=)r'r+ro)r')r/rr�waits	z7EventLoopTestsMixin.test_timeout_rounding.<locals>.wait�Zclock_resolutionZselector)r'r�r�r+rjrhZassertLessEqualZ_clock_resolutionZ	_selectorrCr=)r/r�r�r)r�r/r�test_timeout_roundings	z)EventLoopTestsMixin.test_timeout_roundingcCs�tjdfg}tjrC|jtjdftjdff�nx�|D]�\}}x�tjtjfD]�}tj||�}|�h|jd�|j	j
||�}|jt��}|j	j
|�WdQX|jdt|j��WdQXqiWqJWdS)	N�www.python.orgr.rFzaddress must be resolved)r�r.)r�r.)r�r.rr)r�r(r�IPV6_ENABLEDr�r9r�r�r�r'r�rkr�rhr$r�r)r/Z	addressesr�r�Z	sock_typer�r�rrrr�test_sock_connect_address's	
	z-EventLoopTestsMixin.test_sock_connect_addresscCs�|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>)
r^rr�r4rbr�r�r�r�r�)r/r'rxr�r�rrr�test_remove_fds_after_closing:s
z1EventLoopTestsMixin.test_remove_fds_after_closingcCs�|j�}dd�}tj�\}}|j|j�|j|j�|j�|jt��|j||�WdQX|jt��|j||�WdQXdS)NcSsdS)Nrrrrrr�Hsz@EventLoopTestsMixin.test_add_fds_after_closing.<locals>.<lambda>)	r^rr�r4rbrkrlr�r�)r/r'rxr�r�rrr�test_add_fds_after_closingFs
z.EventLoopTestsMixin.test_add_fds_after_closingc	sTtj�fdd��}|�j�}�jt���jj|�WdQXdS)Ncs�jj�dS)N)r'rb)r')r/rr�
close_loopSszEEventLoopTestsMixin.test_close_running_event_loop.<locals>.close_loop)r+rjr'rkrlrh)r/r�rr)r/r�test_close_running_event_loopRsz1EventLoopTestsMixin.test_close_running_event_loopc:Cs�|jj�tjdd��}dd�}|�}|j|j�|jt��|jj�WdQX|jt��*tjd|j�}|jj	|�WdQX|jt��|jj
|�WdQX|jt��|jj|�WdQX|jt��|jjd|�WdQX|jt��%|jj
|jj�d|�WdQX|jt��|jjd|�WdQX|jt��|jj|�WdQX|jt��|jjtj|�WdQXdS)NcSsdS)Nrrrrr�test^sz,EventLoopTestsMixin.test_close.<locals>.testcSsdS)NFrrrrrr�bsz0EventLoopTestsMixin.test_close.<locals>.<lambda>r'g�?g)r'rbr+rjr4rkrlr{r,rhr�r�ry�call_atrnr��create_taskr�r��SIGTERM)r/r��funcrZfutrrr�
test_close[s0
	&zEventLoopTestsMixin.test_close)_r=r>r?r]rdrmrrrur}r�r�r�r�r�r�r�r��unittestZ
skipUnlessr
r�r�r�r�r�r�r�r�r�r�r�r�rrr�skipIfrrrrrr r&rrr7r8r:r<r?rErFrHrPrQrRrVrWrXrYrbrcrdrerhrirjrkrmrnrtrvrr�rxryr�r�r�rrr��requires_mac_verZrequires_freebsd_versionr�r�r�r�r�r�r�r�r�r�r�rr)rCrr\�s�		
!'',''' $$
*
$'	''$ *$*$*$!)."!"&!($	r\c@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�rr|r�r�)r/rVrrr�check_terminated~sz%SubprocessTestsMixin.check_terminatedcCs:tjdkr"|j|t�n|jtj|�dS)Nr�)rrr�rr|r�r�)r/rVrrr�check_killed�sz!SubprocessTestsMixin.check_killedc
Cs-tjjtjjt�d�}|jjtjt	|j�t
j|�}|jj|�\}}|j
|t	�|jj|j�|jd|j�|jd�}|jd�|jj|jdj��tj��|j�WdQX|jj|j�|j|j�|jd|jd�dS)Nzecho.pyr1rsPython The Winnerr#)rrr
rrr'�subprocess_execrrrLr�
executablerhr�r-r|r)�get_pipe_transportrBrWr�rrrbrSr�rVr6)r/�progr��transpr��stdinrrr�test_subprocess_exec�s !	

z)SubprocessTestsMixin.test_subprocess_execcCstjjtjjt�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�WdQX|jj|j�|j|j�dS)Nzecho.pyr1rsPython r#s
The WinnersPython The Winner)rrr
rrr'r�rrrLrr�rhr�r-r|r)r�rBrWr��clearr6rrrbrSr�rV)r/r�r�r�r�r�rrr�test_subprocess_interactive�s(!	


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)r.)rMr�rrr�	<genexpr>�sz=SubprocessTestsMixin.test_subprocess_shell.<locals>.<genexpr>r#s
sPythonrRrQ)r'�subprocess_shellrrrLrhr�r-r�rbrSr|rVrf�allrU�valuesr6�rstrip)r/r�r�r�rrr�test_subprocess_shell�s		) z*SubprocessTestsMixin.test_subprocess_shellc	Cs�|jjtjt|j�ddddddd�}|jj|�\}}|j|t�|jj|j�|jd|j	�|j
�dS)Nzexit 7r��stdout�stderr�)r'r�rrrLrhr�rSr|rVrb)r/r�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�rr#rRr�)
r'r�rrrLrhr�r`r�rSr|rVrb)r/r�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)rrr
rrr'r�rrrLrr�rhr�r-r�rSr�rVrb)r/r�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)rrr
rrr'r�rrrLrr�rhr�r-Z	terminaterSr�rVrb)r/r�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)rrr
rrr'r�rrrLrr�rhr�r-Zsend_signalr��SIGHUPrSr|rVrb)r/r�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:testr#rRsERR:test)rrr
rrr'r�rrrLrr�rhr�r-r�rBrSrbr|r6rfr�rV)r/r�r�r�r�r�rrr�test_subprocess_stderrs!	

'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�rr#rRstestsOUT:testERR:testrQ)rrr
rrr'r�rrrLrr��
subprocessZSTDOUTrhr�r-r�r�r`rBrSrfr6r�r|rbrV)r/r�r�r�r�r�rrr�)test_subprocess_stderr_redirect_to_stdout#s"!	

z>SubprocessTestsMixin.test_subprocess_stderr_redirect_to_stdoutcCs�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�WdQX|jj|j�|j|j�dS)Nzecho3.pyrr#stestsOUT:testsxxxrRr�sERR:BrokenPipeErrorsERR:OSError)rrr
rrr'r�rrrLrr�rhr�r-r�rBrWr�r|r6rbrUrrrrSr�rV)r/r�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�rrrLrhr�rSr|rV)r/r��_r�rrr�"test_subprocess_wait_no_same_group[s		z7SubprocessTestsMixin.test_subprocess_wait_no_same_groupcs�tj�fdd��}�jt���jj|dd��WdQX�jt���jj|dd��WdQX�jt���jj|dd��WdQXdS)Nc;s"�jjtjd|�DdHdS)N�pwd)r'r�r+�SubprocessProtocol)r,)r/rrr�gs	zGSubprocessTestsMixin.test_subprocess_exec_invalid_args.<locals>.connect�universal_newlinesT�bufsizei�shell)r+rjrkr�r'rh)r/r�r)r/r�!test_subprocess_exec_invalid_argsfsz6SubprocessTestsMixin.test_subprocess_exec_invalid_argscs�tjd�fdd��}�jt��!�jj|ddg��WdQX�jt���jj|dd��WdQX�jt���jj|dd��WdQX�jt���jj|d	d
��WdQXdS)Nc;s1|sd}n�jjtj||�DdHdS)Nr�)r'r�r+r�)�cmdr,)r/rrr�us
		zHSubprocessTestsMixin.test_subprocess_shell_invalid_args.<locals>.connectZlsz-lr�Tr�ir�F)r+rjrkr�r'rh)r/r�r)r/r�"test_subprocess_shell_invalid_argsts"z7SubprocessTestsMixin.test_subprocess_shell_invalid_argsN)r=r>r?r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrrrr�|s 

!r�r�c@seZdZdd�ZdS)�SelectEventLoopTestscCs
tj�S)N)r+�SelectorEventLoop)r/rrrr^�sz&SelectEventLoopTests.create_event_loopN)r=r>r?r^rrrrr��sr�c@s�eZdZdd�Zej�scdd�Zdd�Zdd�Zd	d
�Z	dd�Z
nd
d�Zdd�Zdd�Z
dd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd �Zd!d"�Zd#S)$�ProactorEventLoopTestscCs
tj�S)N)r+ZProactorEventLoop)r/rrrr^�sz(ProactorEventLoopTests.create_event_loopcCstjd��dS)Nzneed python 3.5 (ssl.MemoryBIO))r��SkipTest)r/rrrr�sz1ProactorEventLoopTests.test_create_ssl_connectioncCstjd��dS)Nzneed python 3.5 (ssl.MemoryBIO))r�r�)r/rrrrV�sz-ProactorEventLoopTests.test_create_server_sslcCstjd��dS)Nzneed python 3.5 (ssl.MemoryBIO))r�r�)r/rrrrb�sz;ProactorEventLoopTests.test_create_server_ssl_verify_failedcCstjd��dS)Nzneed python 3.5 (ssl.MemoryBIO))r�r�)r/rrrrh�sz:ProactorEventLoopTests.test_create_server_ssl_match_failedcCstjd��dS)Nzneed python 3.5 (ssl.MemoryBIO))r�r�)r/rrrrm�sz6ProactorEventLoopTests.test_create_server_ssl_verifiedcCstjd��dS)Nz*IocpEventLoop incompatible with legacy SSL)r�r�)r/rrrr�sz8ProactorEventLoopTests.test_legacy_create_ssl_connectioncCstjd��dS)Nz*IocpEventLoop incompatible with legacy SSL)r�r�)r/rrrrW�sz4ProactorEventLoopTests.test_legacy_create_server_sslcCstjd��dS)Nz*IocpEventLoop incompatible with legacy SSL)r�r�)r/rrrrc�szBProactorEventLoopTests.test_legacy_create_server_ssl_verify_failedcCstjd��dS)Nz*IocpEventLoop incompatible with legacy SSL)r�r�)r/rrrri�szAProactorEventLoopTests.test_legacy_create_server_ssl_match_failedcCstjd��dS)Nz*IocpEventLoop incompatible with legacy SSL)r�r�)r/rrrrn�sz=ProactorEventLoopTests.test_legacy_create_server_ssl_verifiedcCstjd��dS)Nz(IocpEventLoop does not have add_reader())r�r�)r/rrrr��sz+ProactorEventLoopTests.test_reader_callbackcCstjd��dS)Nz(IocpEventLoop does not have add_reader())r�r�)r/rrr�test_reader_callback_cancel�sz2ProactorEventLoopTests.test_reader_callback_cancelcCstjd��dS)Nz(IocpEventLoop does not have add_writer())r�r�)r/rrrr��sz+ProactorEventLoopTests.test_writer_callbackcCstjd��dS)Nz(IocpEventLoop does not have add_writer())r�r�)r/rrr�test_writer_callback_cancel�sz2ProactorEventLoopTests.test_writer_callback_cancelcCstjd��dS)Nz6IocpEventLoop does not have create_datagram_endpoint())r�r�)r/rrrr��sz4ProactorEventLoopTests.test_create_datagram_endpointcCstjd��dS)Nz(IocpEventLoop does not have add_reader())r�r�)r/rrrr��sz4ProactorEventLoopTests.test_remove_fds_after_closingN)r=r>r?r^rZ_is_sslproto_availablerrVrbrhrmrrWrcrirnr�r�r�r�r�r�rrrrr��s$r�)�	selectorscs4eZdZ�fdd�Z�fdd�Z�S)�UnixEventLoopTestsMixincs:t�j�tj�}|j|j�tj|�dS)N)rAr]r+ZSafeChildWatcherZattach_loopr'�set_child_watcher)r/Zwatcher)rCrrr]�s
zUnixEventLoopTestsMixin.setUpcstjd�t�j�dS)N)r+r�rArd)r/)rCrrrd�s
z UnixEventLoopTestsMixin.tearDown)r=r>r?r]rdrr)rCrr��sr��KqueueSelectorcs�eZdZdd�Zejdd�ejej	j
d�d��fdd���Zejdd��fd	d
��Z�S)�KqueueEventLoopTestscCstjtj��S)N)r+r�r�r�)r/rrrr^�sz&KqueueEventLoopTests.create_event_loopr�	Zopenbsdztest hangs on OpenBSDcst�j�dS)N)rAr�)r/)rCrrr��sz)KqueueEventLoopTests.test_read_pty_outputcst�j�dS)N)rAr�)r/)rCrrr��sz#KqueueEventLoopTests.test_write_pty)
r=r>r?r^rr�r�r�rrr�r�r�rr)rCrr��s
r��
EpollSelectorc@seZdZdd�ZdS)�EPollEventLoopTestscCstjtj��S)N)r+r�r�r�)r/rrrr^�sz%EPollEventLoopTests.create_event_loopN)r=r>r?r^rrrrr��sr��PollSelectorc@seZdZdd�ZdS)�PollEventLoopTestscCstjtj��S)N)r+r�r�r�)r/rrrr^�sz$PollEventLoopTests.create_event_loopN)r=r>r?r^rrrrr��sr�c@seZdZdd�ZdS)r�cCstjtj��S)N)r+r�r�ZSelectSelector)r/rrrr^sz&SelectEventLoopTests.create_event_loopN)r=r>r?r^rrrrr��scGsdS)Nr)r�rrr�noopsr�c@speZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dS)�HandleTestscCs"tj�|_d|jj_dS)NT)rr1r'�	get_debug�return_value)r/rrrr]szHandleTests.setUpcCs~dd�}f}tj|||j�}|j|j|�|j|j|�|j|j�|j�|j	|j�dS)NcWs|S)Nr)r�rrrrxsz)HandleTests.test_handle.<locals>.callback)
r+�Handler'r��	_callback�_argsr��
_cancelledr�rf)r/rxr��hrrr�test_handles
zHandleTests.test_handlecCsJdd�}tj|fd|j�}|jttj|f|j�dS)NcWs|S)Nr)r�rrrrxsz5HandleTests.test_handle_from_handle.<locals>.callbackr')r+r�r'rkr2)r/rx�h1rrr�test_handle_from_handlesz#HandleTests.test_handle_from_handlecCs�dd�}tj�|_tj�|j_tj|f|j�}|j�|jjjitj	d�d6tj
d6|d6|jd6�dS)NcSs
t��dS)N)r�rrrrrx%sz:HandleTests.test_callback_with_exception.<locals>.callbackzException in callback.*�messagerZhandleZsource_traceback)rr1r'r[r+r�Z_run�assert_called_withrZMockPattern�ANY�_source_traceback)r/rxr�rrr�test_callback_with_exception$s

z(HandleTests.test_callback_with_exceptioncCs8tj�}tjdd�f|j�}||d<dS)NcSsdS)Nrrrrrr�7sz1HandleTests.test_handle_weakref.<locals>.<lambda>r�)�weakref�WeakValueDictionaryr+r�r')r/Zwdr�rrr�test_handle_weakref5szHandleTests.test_handle_weakrefcCs�d|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	|�|�tjdkr�tj}tj|�}tj|�\}}tj|f|j�}d
}d|}d|tj|�|f}|jt	|�|�ndS)NFr#rRz<Handle noop(1, 2) at %s:%s>z<Handle cancelled>z<Handle noop() at %s:%s>rPz%^<Handle noop\(1, 2\)\(3\) at %s:%s>$�z*<function HandleTests.test_handle_repr .*>z%functools.partialmethod\(%s, , \)\(\)z^<Handle %s at %s:%s>$)r#rR)rP)rPr
)r'r�r�r+r�r�r�get_function_sourcer|�reprr�rjrr�re�escapeZassertRegexr�version_infor��test_handle_repr�
partialmethod)r/r�r�linenortZregex�methodZcb_regexrrrr:s:
	
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)NTr#rRz-<Handle noop(1, 2) at %s:%s created at %s:%s>z7<Handle cancelled noop(1, 2) at %s:%s created at %s:%s>)r#rR)r'r�r�rr�	_getframe�f_linenor+r�r�rrr|rr�)r/�create_filename�
create_linenor�rrrrr�test_handle_repr_debugds$
	
	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)Nr#rP�test_handle_source_tracebackr�)rrrr�r�listr|r)r�r)r/rr�check_source_traceback�szHHandleTests.test_handle_source_traceback.<locals>.check_source_tracebackr)	r+�get_event_loop_policy�new_event_loopr�r_r�r�r�ry)r/r'rr�r)r/rr~s

	


z(HandleTests.test_handle_source_tracebackN)r=r>r?r]r�rrr	rrrrrrrr�
s
*r�c@sXeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
S)�
TimerTestscCstj�|_dS)N)rr1r')r/rrrr]�szTimerTests.setUpcCsPtj�}tj|dd�ftj��}|jt|�t|��dS)NcSsdS)NFrrrrrr��sz&TimerTests.test_hash.<locals>.<lambda>)rnrzr+�TimerHandlerr1r|�hash)r/�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�rrrrx�sz'TimerTests.test_timer.<locals>.callbackr#rRrP)r#rRrP)rnrzr+rrr1r�r�r�r�r�r�rfr`rkr2r')r/rxr�r!r�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'r�r�r+rr�rrr|rr�)r/r��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)NTr#r$z7<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'r�r�rrrrr+rr�rrr|rr�)r/rrr�rrrrr�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�rrrrx�sz2TimerTests.test_timer_comparison.<locals>.callbackg$@)
rnrzr+rr'r�rfr�r�r��NotImplemented�__eq__�__ne__)r/rxr!rZh2Zh3rrr�test_timer_comparison�s>
z TimerTests.test_timer_comparisonN)	r=r>r?r]r"r#r&r'r+rrrrr�src@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$�r#r)z	localhostr-).rr1r+�AbstractEventLooprk�NotImplementedErrorr{rhrsrgr`rbr�ryr�r�rnr�r�Zset_default_executorr�Zgetnameinfor�r3r~r�r�r�r�r�r�r�r�r�r�r��sentinelr�r�r�r�Zset_exception_handlerZdefault_exception_handlerr[r�r�)r/r�r'rrr�test_not_implemented	s�









z+AbstractEventLoopTests.test_not_implementedN)r=r>r?r1rrrrr,		sr,c@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#)rr1r+r�r`r4r<r7r9�DatagramProtocolrHrGr�rYrZr[)r/r�r�ZdpZsprrr�
test_emptyc	s"zProtocolsAbsTests.test_emptyN)r=r>r?r4rrrrr2a	sr2c@s�eZdZdd�Zdd�Zdd�Zdd�Zejd	�d
d��Z	dd
�Z
dd�Zdd�Zdd�Z
dS)�PolicyTestscCs{tj�}|jt|j�|jt|jt��|jt|j�|jt|j�|jt|j	t��dS)N)
r+�AbstractEventLoopPolicyrkr/�get_event_loopr_r_rZget_child_watcherr�)r/�policyrrr�test_event_loop_policy{	sz"PolicyTests.test_event_loop_policycCsxtj�}|j|jj�|j�}|j|tj�|j|jj|�|j||j��|j	�dS)N)
r+�DefaultEventLoopPolicyr`�_localZ_loopr7r�r.r�rb)r/r8r'rrr�test_get_event_loop�	szPolicyTests.test_get_event_loopc	CsZtj�}tjj|dd|j�� }|j�}|j|�WdQX|j�dS)Nr_�wraps)	r+r:rrr_r_r7rrb)r/r8Zm_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_rkrlr7)r/r8rrr�"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:rkrlr7)r8)r/rrr��	sz1PolicyTests.test_get_event_loop_thread.<locals>.fr�)r�r�r�r
)r/Zm_current_threadr�Zthr)r/r�test_get_event_loop_thread�	s
z&PolicyTests.test_get_event_loop_threadcCs9tj�}|j�}|j|tj�|j�dS)N)r+r:rr�r.rb)r/r8r'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:r7rkr2r_r_rr��assertIsNotrb)r/r8Zold_loopr'rrr�test_set_event_loop�	s

zPolicyTests.test_set_event_loopcCs9tj�}|j|tj�|j|tj��dS)N)r+rr�r6r�)r/r8rrr�test_get_event_loop_policy�	sz&PolicyTests.test_get_event_loop_policycCsh|jttjt��tj�}tj�}tj|�|j|tj��|j||�dS)N)	rkr2r+Zset_event_loop_policyr_rr:r�rB)r/Z
old_policyr8rrr�test_set_event_loop_policy�	s
z&PolicyTests.test_set_event_loop_policyN)r=r>r?r9r<r>r?rrr@rArCrDrErrrrr5y	s	
r5�__main__)?�__doc__rrcr�rrr
r�r�r�ImportErrorr�rr�rnr"r�rrr+rrrrr�rrrr"rSrTr\rgrlr�r%r@r3rDrIZBaseProtocolrKr�rLr\r�ZTestCaser�r�r�r�r
r�r�r�r�r�rr,r2r5r=r�rrrr�<module>s�

	

" )�������7�mX[