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.pyo

�
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__cCs2||_d|_|jr.|jjd�ndS)N�	CONNECTED)r(r)r-�
set_result)r/r(rrr�connection_madeUs			zMyBaseProto.connection_madecCs|jt|�7_dS)N)r*�len)r/�datarrr�
data_received\szMyBaseProto.data_receivedcCs
d|_dS)N�EOF)r))r/rrr�eof_received`szMyBaseProto.eof_receivedcCs)d|_|jr%|jjd�ndS)N�CLOSED)r)r.r2)r/�excrrr�connection_lostds		zMyBaseProto.connection_lost)
�__name__�
__module__�__qualname__r-r.r0r3r6r8r;rrrrr%Isr%cs"eZdZ�fdd�Z�S)�MyProtocs!t�j|�|jd�dS)Ns%GET / HTTP/1.0
Host: example.com

)�superr3�write)r/r()�	__class__rrr3lszMyProto.connection_made)r<r=r>r3rr)rBrr?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__cCs||_d|_dS)N�INITIALIZED)r(r))r/r(rrrr3zs	zMyDatagramProto.connection_madecCs|jt|�7_dS)N)r*r4)r/r5�addrrrr�datagram_receivedsz!MyDatagramProto.datagram_receivedcCsdS)Nr)r/r:rrr�error_received�szMyDatagramProto.error_receivedcCs)d|_|jr%|jjd�ndS)Nr9)r)r.r2)r/r:rrrr;�s		zMyDatagramProto.connection_lost)	r<r=r>r.r0r3rFrGr;rrrrrCqsrCc@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||_|jjd�dS)Nr1)r(r)�append)r/r(rrrr3�s	zMyReadPipeProto.connection_madecCs|jt|�7_dS)N)r*r4)r/r5rrrr6�szMyReadPipeProto.data_receivedcCs|jjd�dS)Nr7)r)rI)r/rrrr8�szMyReadPipeProto.eof_receivedcCsRd|jkr"|jjd�n|jjd�|jrN|jjd�ndS)Nr7r9)r)rIr.r2)r/r:rrrr;�s
	zMyReadPipeProto.connection_lost)	r<r=r>r.r0r3r6r8r;rrrrrH�srHc@s=eZdZdZddd�Zdd�Zdd�ZdS)�MyWritePipeProtoNcCs:d|_d|_|dk	r6tjd|�|_ndS)Nr&r')r)r(r+r,r.)r/r'rrrr0�s		zMyWritePipeProto.__init__cCs||_d|_dS)Nr1)r(r))r/r(rrrr3�s	z MyWritePipeProto.connection_madecCs)d|_|jr%|jjd�ndS)Nr9)r)r.r2)r/r:rrrr;�s		z MyWritePipeProto.connection_lost)r<r=r>r.r0r3r;rrrrrJ�srJc@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�disconnectsr5�
returncodeZEvent�got_data)r/r'r)r'rr0�s		"	zMySubprocessProtocol.__init__cCs&||_d|_|jjd�dS)Nr1)r(r)r-r2)r/r(rrrr3�s		z$MySubprocessProtocol.connection_madecCsd|_|jjd�dS)Nr9)r)rRr2)r/r:rrrr;�s	z$MySubprocessProtocol.connection_lostcCs&|j||7<|j|j�dS)N)r5rV�set)r/rMr5rrr�pipe_data_received�sz'MySubprocessProtocol.pipe_data_receivedcCs5|r|j|j|�n|j|j|�dS)N)rTZ
set_exceptionr2)r/rMr:rrr�pipe_connection_lost�sz)MySubprocessProtocol.pipe_connection_lostcCs|jj�|_dS)N)r(Zget_returncoderU)r/rrr�process_exited�sz#MySubprocessProtocol.process_exitedN)	r<r=r>r0r3r;rXrYrZrrrrrK�srKcs�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)r@�setUp�create_event_loopr'�set_event_loop)r/)rBrrr\�s
zEventLoopTestsMixin.setUpcsJ|jj�s"tj|j�n|jj�tj�t�j�dS)N)	r'�	is_closedr�run_briefly�close�gcZcollectr@�tearDown)r/)rBrrrc�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)rdr/rr�coro2szBEventLoopTestsMixin.test_run_until_complete_nesting.<locals>.coro2)r+�	coroutine�assertRaises�RuntimeErrorr'rg)r/rhr)rdr/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'�timergr+�sleepre)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+rnr)r/rr�cbs
z?EventLoopTestsMixin.test_run_until_complete_stopped.<locals>.cb)r+rirjrkr'rg)r/rsZtaskr)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)rIr'rr)�arg)�resultsr/rr�callbacks
z5EventLoopTestsMixin.test_call_later.<locals>.callbackg�������?zhello worldg{�G�z�?g�������?)r'�
call_laterrm�	monotonic�run_forever�assertEqualre)r/rwrorpr)rvr/r�test_call_laters
z#EventLoopTestsMixin.test_call_latercsUg���fdd�}�jj|dd��jj��j�dg�dS)Ncs$�j||f��jj�dS)N)rIr'rr)Zarg1Zarg2)rvr/rrrw+sz4EventLoopTestsMixin.test_call_soon.<locals>.callback�hello�world)r}r~)r'�	call_soonrzr{)r/rwr)rvr/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)NrQ)rIr4r'rr)ru)rvr/rrrw7s
z?EventLoopTestsMixin.test_call_soon_threadsafe.<locals>.callbackcs!�jj�d��j�dS)Nr})r'�call_soon_threadsafe�releaser)rw�lockr/rr�
run_in_thread<szDEventLoopTestsMixin.test_call_soon_threadsafe.<locals>.run_in_thread�targetr~r})
�	threadingZLock�acquire�Thread�startr'rrzr
r{)r/r��tr)rwr�rvr/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)NrQ)rIr4r'rr)ru)rvr/rrrwMs
zKEventLoopTestsMixin.test_call_soon_threadsafe_same_thread.<locals>.callbackr}r~)r'r�rrzr{)r/rwr)rvr/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)rurrr�runXsz5EventLoopTestsMixin.test_run_in_executor.<locals>.runZyo)r'�run_in_executorrgr{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�extendrer'�
remove_reader�filenora)r5)�
bytes_read�rr/rr�readerds
	z8EventLoopTestsMixin.test_reader_callback.<locals>.readersabccst��dkS)NrO)r4r)r�rr�<lambda>ssz:EventLoopTestsMixin.test_reader_callback.<locals>.<lambda>sdefcst��dkS)N�)r4r)r�rrr�ussabcdef)r�
socketpair�setblocking�	bytearrayr'�
add_readerr�r�send�	run_untilrarrrzr{)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'rr)r5)r/r�rr�writers
z8EventLoopTestsMixin.test_writer_callback.<locals>.writer�xirQ)rr�r�r'�
add_writerr�rzre�
remove_writer�assertFalserar�r4r{)r/r�r�r5�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�rj�
ValueErrorrg�sock_connect�address�sock_sendall�	sock_recv�sock_acceptrare�
startswith)r/�httpd�sockr5rrr�_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�getsocknamerar�rj�ConnectionRefusedErrorr'rgr�)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�rgr{Z
gettimeoutZgetpeernamera)r/Zlistener�client�fZconnrErrr�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�)rj�	TypeErrorr'�add_signal_handler�remove_signal_handlerr��signal�NSIGrkr�r��SIGINTr�kill�getpidrr�rer{�	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'rrr)r�r/rrr�s
zLEventLoopTestsMixin.test_signal_handling_while_selecting.<locals>.my_handlerg{�G�z�?r#)r'r�r�r��	setitimer�ITIMER_REALrzr{)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�rxrrrzr{)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'rg�assertIsInstancer+�	Transport�Protocol�assertIsr(�assertIsNotNone�get_extra_infor.�
assertGreaterr*ra)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sUtj��C}d}�jj�jjdtj|j��}xw|D]o\}}}}}yNtjd|d|d|�}|jd��jj�jj	||��WnYqFXPqFW�jj
�fdd�d|�}	�jj|	�\}
}�j|
tj
��j|tj��jj|j��j|jd�|
j�WdQXdS)	N�type�family�protoFcstd�j�S)Nr')r?r'r)r/rrr�ZszAEventLoopTestsMixin.test_create_connection_sock.<locals>.<lambda>r�r)rr�r'rg�getaddrinfor��SOCK_STREAMr�r�r�r�r�r+r�r�r.r�r*ra)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�cipherrOrr#rQZ
ssl_object�compression)r�r�r{r�rr4�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'rgr�r+r�r�rerBr<�lowerr�r.r�r*ra)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)rrrr
rrrr�patchr{Z
call_countrj�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�rgr(r�r{ra)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�rj�OSErrorrgr{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)rLr(rrr�
<listcomp>�s	zDEventLoopTestsMixin.create_server_multiple_hosts.<locals>.<listcomp>cSs"g|]}|dddf�qS)r-rr)rLr(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)rLr�rrrr.s	)r+rir�r'r/r
r'r�r�MockZ_start_serving�
_stop_serving�
create_serverrg�
addCleanupra�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)r6r�r')r/rrr�&test_create_server_multiple_hosts_ipv4sz:EventLoopTestsMixin.test_create_server_multiple_hosts_ipv4cCs|jtjddg�dS)Nz::1z::2)r6r��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�srOr�r�r9)r?r'r2rgr{r4r4r�r�r��sendallr-r)rr�r*r�r(r�rar.)r/r�r5r�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'r2rgr{r4r4r�Z
getsockoptr��
SOL_SOCKETr<rarr`re)r/r�r5r�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_pathr3r'�create_unix_serverrg)r/�factory�kwargsr�r5r)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�`srOr9)r?r'rDr{r4r4r�r�r�r:rgr-r)rr�r*r(rar.)r/r5r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�rA�assertRaisesRegexr�rg)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)rOr'r2rgr4r�r{)
r/rBrLrMrNr�r5r�r(rrrr�_make_ssl_server�s
z$EventLoopTestsMixin._make_ssl_servercCs%|j||�}|j|d|�S)Nr)rOrD)r/rBrLrMrNrrr�_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��srOr�r9)r?r'rP�ONLYCERT�ONLYKEYr�r%rrrgrAr-r{r)r�r*r�r(rar.)r/r5r(r�f_cr�r�r)r�r�test_create_server_ssl�s"$


z*EventLoopTestsMixin.test_create_server_sslcCs!tj��|j�WdQXdS)N)rrrU)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��srOr9)r?r'rQrRrSr�r%rrrgrAr-r{r)r�r*r(rar.)r/r5rrTr�r�r)r�r�test_create_unix_server_ssl�s"!		


z/EventLoopTestsMixin.test_create_unix_server_sslcCs!tj��|j�WdQXdS)N)rrrW)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'rP�SIGNED_CERTFILErrHrIrJrK�
CERT_REQUIRED�verify_moder
rYr�rr�objectrr
rFrrgr`�assertIsNoner(ra)r/r5r(r�sslcontext_clientrTr)r�r�$test_create_server_ssl_verify_failed�s$!	

z8EventLoopTestsMixin.test_create_server_ssl_verify_failedcCs!tj��|j�WdQXdS)N)rrra)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>rYTrrZinvalidrZz(?i)certificate.verify.failed )r?r'rQr[rrHrIrJrKr\r]r
rYr�rrr^rr
rFrrgr`r_r(ra)r/r5rr`rTr)r�r�)test_create_unix_server_ssl_verify_failed�s&	

z=EventLoopTestsMixin.test_create_unix_server_ssl_verify_failedcCs!tj��|j�WdQXdS)N)rrrc)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>rrYTrrZz.hostname '127.0.0.1' doesn't match 'localhost')r?r'rPr[rrHrIrJrKr\r]�load_verify_locations�
SIGNING_CAr
rYr�rrr^rr
rFZCertificateErrorrgr(ra)r/r5r(rr`rTr)r�r�#test_create_server_ssl_match_faileds(!		

"
z7EventLoopTestsMixin.test_create_server_ssl_match_failedcCs!tj��|j�WdQXdS)N)rrrg)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>rrYTrrr$)r?r'rQr[rrHrIrJrKr\r]rerfr
rYr�rgr(rar.)r/r5rr`rTr�r�r)r�r�$test_create_unix_server_ssl_verified;s"	


z8EventLoopTestsMixin.test_create_unix_server_ssl_verifiedcCs!tj��|j�WdQXdS)N)rrri)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>rrYTrrr$r�r�)r?r'rPr[rrHrIrJrKr\r]rerfr
rYr�rgr��PEERCERTr(rar.)r/r5r(rr`rTr�r�r)r�r�test_create_server_ssl_verifiedYs&!	


z3EventLoopTestsMixin.test_create_server_ssl_verifiedcCs!tj��|j�WdQXdS)N)rrrl)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)r@r3r2)r/r()rBr�rrr3~szPEventLoopTestsMixin.test_create_server_sock.<locals>.TestMyProto.connection_made)r<r=r>r3r)r�)rBr�TestMyProto}srnr�r#�0.0.0.0rr�z	127.0.0.1sxxx)ror)r+r,r'r?r�r��
setsockoptr=�SO_REUSEADDRr�r2rgr4r�r�r{r�r�ra)	r/rn�sock_obr�r5r�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)rtr)r�r�rpr=rqr�r'r2r?rgr4r�rjr r{rr!r"ra)r/rrr�r5r�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)r@r3r2)r/r()rB�f_protorrr3�szVEventLoopTestsMixin.test_create_server_dual_stack.<locals>.TestMyProto.connection_made)r<r=r>r3r)rv)rBrrn�srnrr(rr#rz	127.0.0.1sxxxz::1)r+r,r'r?rrr2rgr r!r"ZassertGreaterEqualr�r�r�r(rar8)	r/rnZ	try_countrr�r5Zexr�r�r)rvr�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'r2r?rgr4r�r�r�r�rarjr�)r/r�r5r�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')r@r0r')Z
inner_self)rBr/rrr0�szWEventLoopTestsMixin.test_create_datagram_endpoint.<locals>.TestMyDatagramProto.__init__cs.t�j||�|jjd||�dS)Nsresp:)r@rFr(�sendto)r/r5rE)rBrrrF�sz`EventLoopTestsMixin.test_create_datagram_endpoint.<locals>.TestMyDatagramProto.datagram_received)r<r=r>r0rFr)r/)rBr�TestMyDatagramProto�srzr�	127.0.0.1rr�rDcstd�j�S)Nr')rCr'r)r/rrr��szCEventLoopTestsMixin.test_create_datagram_endpoint.<locals>.<lambda>Zremote_addrsxxxcs�jS)N)r*r)r5rrr��srOcs�jS)N)r*r)r�rrr��s�r9)r{r)rCr'�create_datagram_endpointrgr�r�r+r�r{r)r�r(ryrr�r*r�rar.)r/rz�coroZs_transportr(rr(r)r�r/r5r�test_create_datagram_endpoint�s6		

z1EventLoopTestsMixin.test_create_datagram_endpointcsd}d
}�jj�jjdtj|��}xe|D]]\}}}}}y<tjd|d|d|�}|jd�|j|�WnYq:XPq:W�jj�fdd�d	|�}	�jj|	�\}
}�j|
t	j
��j|t�|
j��jj|j
�dS)N�	127.0.0.1rr�r�r�Fcstd�j�S)Nr')rCr'r)r/rrr� szHEventLoopTestsMixin.test_create_datagram_endpoint_sock.<locals>.<lambda>r�)r�r)r'rgr�r��
SOCK_DGRAMr�r�r�r�r+r�rCrar.)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�rZBaseSelectorEventLoopraZskipTestr{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&r1rr7r9�pipe)rHr'rr��io�openr+rirgrArr�r{r*r)rar.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&r1rr7r9r�)rHr'r�openptyr�r�r+rirgrArr�r{r*r)rar.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�r4)r5�chunk)r�rrr��s
z3EventLoopTestsMixin.test_write_pipe.<locals>.readercs���dkS)Nr#rr)r5r�rrr��ss2345cs���dkS)Nrrr)r5r�rrr��ss12345r�r9)rr�r�r�rJr'�connect_write_pipergr�r(r{r)rAr�rr�rar�r�r.)r/r�r�r�r(r�r)r5r�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�r9)rr�r�r�r��detachrJr'r�rgr�r(r{r)rAr�rar.)r/ZrsockZwsockr�r�r(r�r5r)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�r4)r5r�)r�rrr��s
z2EventLoopTestsMixin.test_write_pty.<locals>.readercs���dkS)Nr#rr)r5r�rrr��sZtimeoutrs2345cs���dkS)Nrrr)r5r�rrr��ss12345r�r9)rr�r�r�rJr'r�rgr�r(r{r)rAr�rr�rar�r�r.)r/r�Zslave_write_objr�r(r�r)r5r�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+�CancelledErrorrr)r�)r�r/rr�main�s

z:EventLoopTestsMixin.test_prompt_cancellation.<locals>.mainr'g�������?r�)rr�r�r'r��getattrre�pendingr+rirmryr*rzZ
assertLessr{�resultrjr�r�r1ra)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+rn)r')r/rr�waits	z7EventLoopTestsMixin.test_timeout_rounding.<locals>.wait�Zclock_resolutionZselector)r'r�r�r+rirgZassertLessEqualZ_clock_resolutionZ	_selectorrBr<)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�r8r�r�r�r'r�rjr�rgr#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�r3rar�r�r�r�r�)r/r'rwr�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�r3rarjrkr�r�)r/r'rwr�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'ra)r')r/rr�
close_loopSszEEventLoopTestsMixin.test_close_running_event_loop.<locals>.close_loop)r+rir'rjrkrg)r/r�r~r)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'rar+rir3rjrkrzr,rgrr�rx�call_atrmr��create_taskr�r��SIGTERM)r/r��funcr~Zfutrrr�
test_close[s0
	&zEventLoopTestsMixin.test_close)_r<r=r>r\rcrlrqrtr|r�r�r�r�r�r�r�r��unittestZ
skipUnlessr
r�r�r�r�r�r�r�r�r�r�r�r�r�rr�skipIfrrrrrrr%rrr6r7r9r;r>rDrErGrOrPrQrUrVrWrXrarbrcrdrgrhrirjrlrmrsrurr�rwrxrr�r�rrr��requires_mac_verZrequires_freebsd_versionr�r�r�r�r�r�r�r�r�r�r�rr)rBrr[�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/rUrrr�check_terminated~sz%SubprocessTestsMixin.check_terminatedcCs:tjdkr"|j|t�n|jtj|�dS)Nr�)rrr�rr{r�r�)r/rUrrr�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_execrrrKr�
executablergr�r-r{r)�get_pipe_transportrArVr�rr
rarRr�rUr5)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�rrrKrr�rgr�r-r{r)r�rArVr��clearr5rr
rarRr�rU)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.)rLr�rrr�	<genexpr>�sz=SubprocessTestsMixin.test_subprocess_shell.<locals>.<genexpr>r#s
sPythonrQrP)r'�subprocess_shellrrrKrgr�r-r�rarRr{rUre�allrT�valuesr5�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�rrrKrgr�rRr{rUra)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#rQr�)
r'r�rrrKrgr�r_r�rRr{rUra)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�rrrKrr�rgr�r-r�rRr�rUra)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�rrrKrr�rgr�r-Z	terminaterRr�rUra)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�rrrKrr�rgr�r-Zsend_signalr��SIGHUPrRr{rUra)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#rQsERR:test)rrr
rrr'r�rrrKrr�rgr�r-r�rArRrar{r5rer�rU)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#rQstestsOUT:testERR:testrP)rrr
rrr'r�rrrKrr��
subprocessZSTDOUTrgr�r-r�r�r_rArRrer5r�r{rarU)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:testsxxxrQr�sERR:BrokenPipeErrorsERR:OSError)rrr
rrr'r�rrrKrr�rgr�r-r�rArVr�r{r5rarTrrr
rRr�rU)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�rrrKrgr�rRr{rU)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+rirjr�r'rg)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+rirjr�r'rg)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/rrrrU�sz-ProactorEventLoopTests.test_create_server_sslcCstjd��dS)Nzneed python 3.5 (ssl.MemoryBIO))r�r�)r/rrrra�sz;ProactorEventLoopTests.test_create_server_ssl_verify_failedcCstjd��dS)Nzneed python 3.5 (ssl.MemoryBIO))r�r�)r/rrrrg�sz:ProactorEventLoopTests.test_create_server_ssl_match_failedcCstjd��dS)Nzneed python 3.5 (ssl.MemoryBIO))r�r�)r/rrrrl�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/rrrrV�sz4ProactorEventLoopTests.test_legacy_create_server_sslcCstjd��dS)Nz*IocpEventLoop incompatible with legacy SSL)r�r�)r/rrrrb�szBProactorEventLoopTests.test_legacy_create_server_ssl_verify_failedcCstjd��dS)Nz*IocpEventLoop incompatible with legacy SSL)r�r�)r/rrrrh�szAProactorEventLoopTests.test_legacy_create_server_ssl_match_failedcCstjd��dS)Nz*IocpEventLoop incompatible with legacy SSL)r�r�)r/rrrrm�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_availablerrUrargrlrrVrbrhrmr�r�r�r�rr�rrrrr��s$r�)�	selectorscs4eZdZ�fdd�Z�fdd�Z�S)�UnixEventLoopTestsMixincs:t�j�tj�}|j|j�tj|�dS)N)r@r\r+ZSafeChildWatcherZattach_loopr'�set_child_watcher)r/Zwatcher)rBrrr\�s
zUnixEventLoopTestsMixin.setUpcstjd�t�j�dS)N)r+r�r@rc)r/)rBrrrc�s
z UnixEventLoopTestsMixin.tearDown)r<r=r>r\rcrr)rBrr��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)r@r�)r/)rBrrr��sz)KqueueEventLoopTests.test_read_pty_outputcst�j�dS)N)r@r�)r/)rBrrr��sz#KqueueEventLoopTests.test_write_pty)
r<r=r>r]rr�r�r�rrr�r�r�rr)rBrr��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)rr0r'�	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�rrrrwsz)HandleTests.test_handle.<locals>.callback)
r+�Handler'r��	_callback�_argsr��
_cancelledr�re)r/rwr��hrrr�test_handles
zHandleTests.test_handlecCsJdd�}tj|fd|j�}|jttj|f|j�dS)NcWs|S)Nr)r�rrrrwsz5HandleTests.test_handle_from_handle.<locals>.callbackr')r+r�r'rj�AssertionError)r/rw�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�rrrrrw%sz:HandleTests.test_callback_with_exception.<locals>.callbackzException in callback.*�messagerZhandleZsource_traceback)rr0r'rZr+r�Z_run�assert_called_withrZMockPattern�ANY�_source_traceback)r/rwr�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#rQz<Handle noop(1, 2) at %s:%s>z<Handle cancelled>z<Handle noop() at %s:%s>rOz%^<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#rQ)rO)rOr
)r'r�r�r+r�r�r�get_function_sourcer{�reprr�rirr�re�escapeZassertRegexr�version_infor��test_handle_repr�
partialmethod)r/r�r�linenorsZregex�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#rQz-<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#rQ)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#rO�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^rr�r�rx)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)rr0r')r/rrrr\�szTimerTests.setUpcCsPtj�}tj|dd�ftj��}|jt|�t|��dS)NcSsdS)NFrrrrrr��sz&TimerTests.test_hash.<locals>.<lambda>)rmryr+�TimerHandlerr0r{�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�rrrrw�sz'TimerTests.test_timer.<locals>.callbackr#rQrO)r#rQrO)rmryr+rrr0r�r�r�r�r�r�rer_rjr�r')r/rwr�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�rrrrw�sz2TimerTests.test_timer_comparison.<locals>.callbackg$@)
rmryr+rr'r�rer�r�r��NotImplemented�__eq__�__ne__)r/rwr!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-).rr0r+�AbstractEventLooprj�NotImplementedErrorrzrgrrrfr_rar�rxr�rrmr�r�Zset_default_executorr�Zgetnameinfor�r2r}r�r�r�r�r�r�r�r�r�r�r��sentinelr�r�r�r�Zset_exception_handlerZdefault_exception_handlerrZr�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#)rr0r+r�r_r3r;r6r8�DatagramProtocolrGrFr�rXrYrZ)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+�AbstractEventLoopPolicyrjr/�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�ra)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:rrr^r^r7rra)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^rjrkr7)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:rjrkr7)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.ra)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:r7rjr�r^r^rr��assertIsNotra)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)	rjr�r+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?rrr@rArCrDrErrrrr5y	s	
r5�__main__)?�__doc__rrbr�rrr
r�r�r�ImportErrorr�rr�rmr!r�rrr+rrrrr�rrrr"rRrSr[rfrkr�r%r?r3rCrHZBaseProtocolrJr�rKr[r�ZTestCaser�r�r�r�r
r�r�r�r�r�rr,r2r5r<r�rrrr�<module>s�

	

" )�������7�mX[