Your IP : 216.73.216.85


Current Path : /opt/alt/python39/lib64/python3.9/test/__pycache__/
Upload File :
Current File : //opt/alt/python39/lib64/python3.9/test/__pycache__/_test_multiprocessing.cpython-39.pyc

a

XC?h���@s�ddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddl
Z
ddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlmZddlmZddlmZej�d�Ze��ddlZddl Z!ddl"Z!ddl#Z!ddl$Z!ddl%Z!ddl&Z!ddl!m'Z'zddl!m(Z(e(j)Z*Wne+�ybdZ*Yn0zdd	l,m-Z-m.Z.d
Z/Wne+�y�dZ/Yn0zddl!m0Z0d
Z1Wne+�y�dZ1Yn0zddl2Z2Wne+�y�dZ2Yn0ej3d
d��re�4d
��dd�Z5dd�Z6dd�Z7ej8dk�r:ddl!m9Z9dd�Z:e'j;Z<dZ=dZ>e>�rZd\Z?Z@ZAn
d\Z?Z@ZAeBedd�ZCejDdkZEddl mFZFdd�ZGze�Hd �ZIWnd!ZIYn0d"d#gZJzdd$lKmLZLmMZMmNZNmOZOWn$e+�y�ePZLdZMZNZOYn0d%d&�ZQGd'd(�d(eP�ZRGd)d*�d*eP�ZSd+d,�ZTGd-d.�d.�ZUGd/d0�d0eS�ZVGd1d2�d2e!jW�ZXGd3d4�d4eS�ZYd5d6�ZZd7d8�Z[Gd9d:�d:eS�Z\Gd;d<�d<eS�Z]Gd=d>�d>eS�Z^Gd?d@�d@eS�Z_GdAdB�dBeS�Z`GdCdD�dDeP�ZadEdF�ZbGdGdH�dHeP�ZcGdIdJ�dJeP�ZdGdKdL�dLeS�ZeGdMdN�dNeS�ZfGdOdP�dPeS�ZgGdQdR�dReS�Zhd�dTdU�ZidVdW�ZjdXdY�ZkdZd[�ZlGd\d]�d]eP�ZmGd^d_�d_en�Zod`da�ZpGdbdc�dceS�Zqddde�Zrdfdg�ZsGdhdi�dieS�ZtGdjdk�dkeS�Zuddll$mvZvmwZwmxZxGdmdn�dneP�Zydodp�ZzGdqdr�drew�Z{Gdsdt�dtev�Z|e|j}dueydv�e|j}dweydxdy�e|j}dpeze{dz�Gd{d|�d|eS�Z~e��Z�d}d~�Z�Gdd��d�ev�Z�e�j}d~e�dv�Gd�d��d�ev�Z�e��}d~�d�Z�Gd�d��d�eS�Z�e��d��Gd�d��d�eS��Z�e5d��Z�Gd�d��d�eS�Z�Gd�d��d�eS�Z�Gd�d��d�eS�Z�Gd�d��d�eS�Z�e��e*d��e��d��Gd�d��d�eS���Z�Gd�d��d�eS�Z�Gd�d��d�eL�Z�Gd�d��d�eS�Z�e��e1d��e��d��Gd�d��d�eS���Z�Gd�d��d�eS�Z�Gd�d��d�ej��Z�Gd�d��d�eS�Z�Gd�d��d�eS�Z�Gd�d��d�ej��Z�e��d��Gd�d��d�ej���Z�d�d��Z�e��d��Gd�d��d�ej���Z�d�d��Z�d�d��Z�d�d��Z�d�d��Z�Gd�d��d�eP�Z�Gd�d��d�ej��Z�Gd�d��d�ej��Z�Gd�d��d�ej��Z�Gd�d��d�ej��Z�Gd�d��d�ej��Z�Gd�dÄd�ej��Z�Gd�dńd�ej��Z�Gd�dDŽd�ej��Z�Gd�dɄd�ej��Z�Gd�d˄d�ej��Z�e��ejDdkd̡Gd�d΄d�ej���Z�Gd�dЄd�ej��Z�Gd�d҄d�ej��Z�e��d��Gd�dԄd�ej���Z�Gd�dքd�ej��Z�Gd�d؄d�eP�Z�Gd�dڄd�e��Z�Gd�d܄d�e��Z�Gd�dބd�e��Z�d�d�Z�dS)��N)�support)�hashlib_helper)�
socket_helper�_multiprocessing)�util)�	reductionF)�Value�copyT)�
shared_memory)�addressz(libasan has a pthread_create() dead lockcCs
|�d�S)N�latin)�encode)�s�r�?/opt/alt/python39/lib64/python3.9/test/_test_multiprocessing.pyrNsrcCs"t|tjj�r|��|��dS�N)�
isinstance�multiprocessing�queues�Queue�close�join_thread��queuerrr�close_queueRsrcCst�|�dSr)rr)�processrrr�join_processXsr�posix)�resource_trackercCstj||�dSr)r�_CLEANUP_FUNCS)�name�rtyperrr�_resource_unlinkasr"皙�����?)g=
ףp=�?gffffff�?gffffff�?)r#r#r#ZHAVE_BROKEN_SEM_GETVALUE�win32��waitcCs |dur|dkrd}t|g|�S)N�r%)Zhandle�timeoutrrr�wait_for_handle}sr)�SC_OPEN_MAX��__main__z$test.test_multiprocessing_forkserver)�	Structure�c_int�c_double�
c_longlongc	CsRd}zt�d�}Wnttfy*YdS0|dks<||kr@dSt�d|��dS)zACheck that the system supports enough semaphores to run the test.r+�SC_SEM_NSEMS_MAXN���zHThe OS doesn't support enough semaphores to run the test (required: %d).)�os�sysconf�AttributeError�
ValueError�unittest�SkipTest)Z	nsems_minZnsemsrrr�check_enough_semaphores�s�r9c@seZdZdd�Zdd�ZdS)�
TimingWrappercCs||_d|_dSr)�func�elapsed)�selfr;rrr�__init__�szTimingWrapper.__init__cOs>t��}z |j|i|��Wt��||_St��||_0dSr)�time�	monotonicr;r<)r=�args�kwds�trrr�__call__�s�zTimingWrapper.__call__N��__name__�
__module__�__qualname__r>rDrrrrr:�sr:c@s,eZdZdZdd�Zdd�Zdd�ZeZdS)	�BaseTestCase)�	processes�manager�threadscCstr|�||d�dS�N�)�
CHECK_TIMINGS�assertAlmostEqual�r=�a�brrr�assertTimingAlmostEqual�sz$BaseTestCase.assertTimingAlmostEqualcGs0z||�}WntyYn0|�||�SdSr)�NotImplementedError�assertEqual)r=�valuer;rA�resrrr�assertReturnsIfImplemented�s
z'BaseTestCase.assertReturnsIfImplementedcGstd��dS)Nz#shouldn't try to pickle a test case)rU)r=rArrr�
__reduce__�szBaseTestCase.__reduce__N)rFrGrH�
ALLOWED_TYPESrTrYrZ�
__reduce_ex__rrrrrI�s

rIcCsjz
|��WStydz|jWYSty^z|jWYYStyXt�Yn0Yn0Yn0dSr)�	get_valuer5Z_Semaphore__valueZ_valuerU�r=rrrr]�s
r]c@seZdZdd�ZdS)�
DummyCallablecCst|t�sJ�|�d�dS�N�)rr_�put)r=�q�crrrrD�szDummyCallable.__call__N)rFrGrHrDrrrrr_�sr_c@s�eZdZdZdd�Zdd�Zedd��Zdd	�Zed
d��Z	dd
�Z
edd��Zedd��Zdd�Z
e�ejd�dd��Zedd��Zedd��Zedd��Zdd�Zdd �Zd!d"�Zd#d$�Zd%d&�Zed'd(��Zd)d*�Zed+d,��Zd-d.�ZedPd1d2��Zd3d4�Z d5d6�Z!d7d8�Z"ed9d:��Z#d;d<�Z$ed=d>��Z%d?d@�Z&eifdAdB��Z'dCdD�Z(dEdF�Z)edQdHdI��Z*dJdK�Z+dLdM�Z,dNdO�Z-d0S)R�_TestProcess�rJrLcCs�|jdkr|�d�|j��|��}|j}|�|���|�|j�|�|t	�|�t
|�dk�|�|jt
���|�|jd�dS)NrL�test not appropriate for {}r)�TYPE�skipTest�format�current_process�authkey�
assertTrue�is_alive�daemon�assertIsInstance�bytes�lenrVZidentr3�getpid�exitcode)r=�currentrlrrr�test_current�s
z_TestProcess.test_currentcCsz|jdkr|�d�|j��|j|jd�}|�|j|��j�|j|jdd�}|�|j�|j|jdd�}|�	|j�dS)NrLrg��targetT�rxroF)
rhrirj�Process�_testrVrorkrm�assertFalse)r=Zproc0Zproc1�proc2rrr�test_daemon_argument�s
z!_TestProcess.test_daemon_argumentcOsR|��}|�|�|�|�|�|j�|jdkrN|�t|j��|�|j�dS)NrL)rkrbr rhrqrl�pid)�clsrcrArBrurrrr{s


z_TestProcess._testcCs�|jdkr|�d�|j��|�|���|jdd�\}}|j|j|fd�}|��|�	�|�
�\}}|�||��j
�|�|t���|�||��j�dS)NrLrgF�Zduplex�rxrA)rhrirj�assertIsNone�parent_process�Piperz�_test_send_parent_process�start�join�recvrVrkrr3rsr )r=�rconn�wconn�pZ
parent_pid�parent_namerrr�test_parent_process_attributess
z+_TestProcess.test_parent_process_attributescCs&ddlm}|�|�j|�jg�dS)Nr�r�)�multiprocessing.processr��sendrr �r�r�r�rrrr�!sz&_TestProcess._test_send_parent_processcCs�|jdkr|�d�|j��|jdd�\}}|j|j|fd�}|��|jtj	d�s\t
d��|��}|�|d�|�
�|��|jtj	d�s�t
d��|��}|�|d	�dS)
NrLrgFr�r��r(z(Could not communicate with child process�alive�	not alive)rhrirjr�rz�_test_create_grandchild_processr��pollr�LONG_TIMEOUT�AssertionErrorr�rV�	terminater�)r=r�r�r�Zparent_process_statusrrr�test_parent_process&s"
�z _TestProcess.test_parent_processcCs(|j|j|fd�}|��t�d�dS)Nr�i,)rz�_test_report_parent_statusr�r?�sleep)r�r�r�rrrr�?sz,_TestProcess._test_create_grandchild_processcCsPddlm}|�|���rdnd�|�jtjd�|�|���rFdnd�dS)Nrr�r�r�r�)r�r�r�rnr�r�
SHORT_TIMEOUTr�rrrr�Esz'_TestProcess._test_report_parent_statuscCs�|�d�}|��}|ddf}ddd�}d}|j|j|||d�}d|_|��}|jd	krf|�|j|j�|�|�	�d
�|�|jd�|�
||���|�t
|���tu�|�|jd�|��|�|jd�|�|�	�d�|�||���|�|��|dd��|�|��|�|�|��|j�|jd	k�rX|�|��|j�|�|��|j�|��|�|jd�|�|�	�d
�|�
||���t|�dS)NrN��gR���Q@)�helloZbyeZSomeProcess)rxrA�kwargsr TrLFr)r�Eventrzr{rorkrhrVrlrn�assertNotIn�active_childrenrm�type�listrtr��assertIn�getr rr�r)r=rc�erAr�r r�rurrr�test_processLs@



�
z_TestProcess.test_processzneeds native_idcCsr|jdkr|�d�|j��t��j}|�d�}|j|j|fd�}|�	�|�
�}|��t|�|�
||�dS)NrLrgrNr�)rhrirj�	threading�main_thread�	native_idrrz�"_test_process_mainthread_native_idr�r�r�r�assertNotEqual)r=Zcurrent_mainthread_native_idrcr�Zchild_mainthread_native_idrrr�!test_process_mainthread_native_idts


z._TestProcess.test_process_mainthread_native_idcCst��j}|�|�dSr)r�r�r�rb)r�rcZmainthread_native_idrrrr��s
z/_TestProcess._test_process_mainthread_native_idcCst�d�dS)N�d�r?r��r�rrr�_sleep_some�sz_TestProcess._sleep_somecCst�|�dSrr�)r��delayrrr�_test_sleep�sz_TestProcess._test_sleepc
s�|jdkr|�d�|j��|j|jd��d�_���|����d�|�	�|�
��|��jd�t�j
�}|�|d�d�|�|jd�|����d�|�|d�d�|�|jd�|����d�t�d�|��ttd	��rV�fd
d�}t�tj|�}z4t�d�|�|�d�Wt�d�t�tj|�nt�d�t�tj|�0n|�|�d�|�|jd�|����d
�|��|�
����
��jS)NrLrgrwTrr'r2rN�alarmcstd���dS)Nzjoin took too long: %s��RuntimeError�rA�r�rr�handler�sz+_TestProcess._kill_process.<locals>.handler�
F)rhrirjrzr�ror�rVrnr�r�rtr:r�rTr<r?r��hasattr�signal�SIGALRMr�r�)r=Zmethr�r�Zold_handlerrr�r�
_kill_process�sB




�
z_TestProcess._kill_processcCs,|�tjj�}tjdkr(|�|tj�dS�N�nt)	r�rrzr�r3r rVr��SIGTERM�r=rtrrr�test_terminate�s
z_TestProcess.test_terminatecCs,|�tjj�}tjdkr(|�|tj�dSr�)	r�rrz�killr3r rVr��SIGKILLr�rrr�	test_kill�s
z_TestProcess.test_killcCsHzt��}Wnty"d}Yn0|�t|�tu�|�|dk�dSrM)r�	cpu_countrUrmr��int)r=Zcpusrrr�test_cpu_count�s
z_TestProcess.test_cpu_countcCsp|�t|���t�|jtjtfd�}|�||���d|_	|�
�|�||���|��|�||���dS�Nr�T)
rVr�r�r�rzr?r��DELTAr�ror�r�r��r=r�rrr�test_active_children�sz!_TestProcess.test_active_childrencCsR|�|�t|�dkrNtd�D].}|j|j|||gfd�}|��|��qdS)Nr�r�)r�rr�rangerz�_test_recursionr�r�)r�r��id�ir�rrrr��s
�z_TestProcess._test_recursioncCsx|jdd�\}}|�|g�t�t�g}|��rB|�|���q*gdgddgddgdgddgddgg}|�||�dS)NFr�rrN)	r�r�r?r�r�r��appendr�rV)r=r�r��result�expectedrrr�test_recursion�s
�	z_TestProcess.test_recursioncCs|�d�dS)N�$@r%�r��eventrrr�_test_sentinelsz_TestProcess._test_sentinelcCs�|jdkr|�d�|j��|��}|j|j|fd�}|�t��|jWd�n1s\0Y|�	�|�
|j�|j}|�|t
�|�t|dd��|��|��|�t|dd��dS)NrLrgr�r'r�rN)rhrirjr�rzr��assertRaisesr6�sentinelr��
addCleanupr�rpr�r|r)�setrm)r=r�r�r�rrr�
test_sentinels
$z_TestProcess.test_sentinelrNcCs|dur|��t�|�dSr)r��sys�exit)r��rcrcrrr�_test_closesz_TestProcess._test_closecCs�|jdkr|�d�|j��|��}|j|jd|id�}d|_|��|�|�	�d�|�
t��|��Wd�n1s~0Y|�
d�|��|�|�	�d�|�|jd�|��|�
t��|�	�Wd�n1s�0Y|�
t��|��Wd�n1�s0Y|�
t��|��Wd�n1�sP0Y|��t�|�}~t��|�|�d�t|�dS)NrLrgrc)rxr�TFr)rhrirjrrzr�ror�rVrnr�r6rrbr�rtr��weakref�ref�gc�collect�assertIsr)r=rcr��wrrrr�
test_closes4
&
&((
z_TestProcess.test_closecs*�jdkr��d��j��t��}|dkr0dnd}�fdd�t|�D�}|D]}|��qN|D]}t|�q`|D]}��|j	d�qr�fd	d�t|�D�}|D]}|��q�t
�d
�|D]}|��q�|D]}t|�q�t
jdk�r&tjg}tjdk�r|�tj�|D]}��|j	|��qdS)
NrLrg�spawnrar�csg|]}�j�jdd��qS))�{�G�z�?r�)rzr���.0r�r^rr�
<listcomp>Es�z4_TestProcess.test_many_processes.<locals>.<listcomp>rcsg|]}�j�jd��qS)rw)rzr�r�r^rrr�Ns����MbP?r��darwin)rhrirjr�get_start_methodr�r�rrVrtr?r�r�r3r r�r�r��platformr�r�r�)r=�sm�N�procsr�Z	exitcodesrr^r�test_many_processes=s:

�


�




z _TestProcess.test_many_processescCsnt�}t�|�}|��}|j|||fd�}~|��|��t��|�	|�d�|�
|��d�t|�dS)Nr�ra)
r_r�r�rrzr�r�r�r�r�rVr�r)r=rdr�rcr�rrr�test_lose_target_ref`s
z!_TestProcess.test_lose_target_refcCs|�tj���|��dSr)rb�testrZfd_countr&)r=�evtrcrrr�_test_child_fd_inflationmsz%_TestProcess._test_child_fd_inflationc	s��jdkr��d��j��t��}|dkr<��d�|��d}�����������fdd�t|�D�}|D]}|��qnzR�fdd�t|�D�}��	t
t|��d|�W���|D]}|��q�t
��n$���|D]}|��q�t
��0dS)	NrLrg�forkracs g|]}�j�j��fd��qS�r�)rzr�r��r�rcr=rrr��s�z8_TestProcess.test_child_fd_inflation.<locals>.<listcomp>csg|]}����qSr�r�r��rcrrr���rN)rhrirjrr�r�rr�r�rVrrr�r�r)r=r�r�r�r�Z	fd_countsrrr�test_child_fd_inflationrs0
�


�
z$_TestProcess.test_child_fd_inflationcs>�fdd�}�fdd�}tj|d���tj|dd���dS)Ncst�d����dS)N��?�r?r�r�r�r�rr�func1�s
z2_TestProcess._test_wait_for_threads.<locals>.func1cst�d����dS)N�)r?r��clearrrrr�func2�s
z2_TestProcess._test_wait_for_threads.<locals>.func2rwTry)r��Threadr�)r=r�r	rrrr�_test_wait_for_threads�sz#_TestProcess._test_wait_for_threadscCsX|jdkr|�d�|j��|��}|j|j|fd�}|��|��|�|�	��dS)NrLrgr�)
rhrirjr�rzrr�r�rm�is_set)r=r��procrrr�test_wait_for_threads�s
z"_TestProcess.test_wait_for_threadscCsT|��D]>\}}|dkr*t��}|��n|dks6J�d}tt|d�q|��dS)Nr�remove)�items�io�StringIOr�setattrr�r�)r=r�Zbreak_std_streams�stream_name�action�streamrrr�_test_error_on_stdio_flush�s
z'_TestProcess._test_error_on_stdio_flushcCs�t��dg}|d��dD]�}|D]�}tt|�}tt||�zV|��}|j|j|fd�}|�	�|�
�|�|���|�
|jd�Wtt||�q$tt||�0q$qdS)Nr��stdout�stderrr�)rrr�getattrr�rr�rzrr�r�rmrrVrt)r=Zstreamsrr�
old_streamr�rrrr�test_error_on_stdio_flush_1�s 
�z(_TestProcess.test_error_on_stdio_flush_1cCs�dD]�}dD]z}tt|�}z\|��}|j|j|||ifd�}|��|��|�|���|�	|j
d�Wtt||�qtt||�0qqdS)Nr)rrr�r)rr�r�rzrr�r�rmrrVrtr)r=rrrr�rrrr�test_error_on_stdio_flush_2�s

�z(_TestProcess.test_error_on_stdio_flush_2r'cCst�|�|��dSrr)r=r�r�rrr�_sleep_and_set_event�s
z!_TestProcess._sleep_and_set_eventc
Cs|jdkr|�d�|j��t��}|dkr<|�d�|��ddlm}|��d}|��}|j	|j
||fd�}|��|j}t
�||�t�|d�|��}|j	|j
|fd�}	|	��|	��|�|���|�|	jd�|��|�|���|�|jd	�dS)
NrLrg�
forkserverr)�_forkserverrr��@)r�)rhrirjrr�Zmultiprocessing.forkserverr$�ensure_runningr�rzr"r�Z_forkserver_pidr3r�r?r�r�rmrrVrtr�)
r=�signumr�r$r�r�rrZevt2r}rrr�check_forkserver_death�s.
z#_TestProcess.check_forkserver_deathcCs|�tj�dSr)r)r��SIGINTr^rrr�test_forkserver_sigintsz#_TestProcess.test_forkserver_sigintcCstjdkr|�tj�dSr�)r3r r)r�r�r^rrr�test_forkserver_sigkill	s
z$_TestProcess.test_forkserver_sigkill)rN)r').rFrGrHr[rvr~�classmethodr{r�r�r�r�r�r�r7�
skipUnlessr�Z_HAVE_THREAD_NATIVE_IDr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrrrr r!r"r)r+r,rrrrre�sj
	


(



3



 #


&rec@s,eZdZdd�Zdd�Zdd�Zdd�Zd	S)
�_UpperCasercCs tj�|�t��\|_|_dSr)rrzr>r��
child_conn�parent_connr^rrrr>sz_UpperCaser.__init__cCs<|j��t|jjd�D]}|j�|���q|j��dSr)r1r�iterr0r�r��upper�r=rrrr�runs
z_UpperCaser.runcCs&t|�tusJ�|j�|�|j��Sr)r��strr1r�r�r4rrr�submitsz_UpperCaser.submitcCs$|j�d�|j��|j��dSr)r1r�rr0r^rrr�stop$s
z_UpperCaser.stopN)rFrGrHr>r5r7r8rrrrr/sr/c@s@eZdZdZdd�Zdd�Zedd��Zedd	��Zd
d�Z	dS)
�_TestSubclassingProcess�rJcCsLt�}d|_|��|�|�d�d�|�|�d�d�|��|��dS)NTr�ZHELLOZworldZWORLD)r/ror�rVr7r8r�)r=Z
uppercaserrrr�test_subclassing-sz(_TestSubclassingProcess.test_subclassingcCs�|jdkr|�d�|j��tjj}|�tjj|�|j|j	|fd�}|�
�|��t|d��<}|�
�}|�d|�|�d|�|�d|�Wd�n1s�0YdS)NrLrgr��r�ZeroDivisionErrorztest_multiprocessing.pyz1/0 # MARKER)rhrirjr�r�TESTFNr��unlinkrz�_test_stderr_flushr�r��open�readr�)r=�testfnr�f�errrrr�test_stderr_flush6s
z)_TestSubclassingProcess.test_stderr_flushcCs6t�|tjtjBtjB�}t|ddd�t_dddS)N�wF��closefdrNr)r3rA�O_WRONLY�O_CREAT�O_EXCLr�r)r�rC�fdrrrr@Gsz*_TestSubclassingProcess._test_stderr_flushcCs8t�|tjtjBtjB�}t|ddd�t_t�|�dS)NrGFrH)r3rArJrKrLr�rr�)r��reasonrCrMrrr�_test_sys_exitNsz&_TestSubclassingProcess._test_sys_exitc		CsJ|jdkr|�d�|j��tjj}|�tjj|�gd�dfD]�}|j|j	||fd�}d|_
|��t|�|�
|jd�t|d��}|��}Wd�n1s�0Y|�
|��t|��t�|�q@gd	�}|D]j\}}|j|d
��D|jtj|d�}d|_
|��t|�|�
|j|�Wd�q�1�s:0Yq�dS)NrLrg)rNr��zignore thisr�TrNr<)))TrN))Fr))�rQ)rr)rrr�)rhrirjr�rr>r�r?rzrOror�rrVrtrArB�rstripr6r3�subTestr�r�)	r=rCrNr�rDZcontentZcasesrAr�rrr�
test_sys_exitTs0
�&z%_TestSubclassingProcess.test_sys_exitN)
rFrGrHr[r;rFr-r@rOrTrrrrr9)s	

r9cCs"t|d�r|��S|��dkSdS)N�emptyr)r�rU�qsizerrrr�queue_empty�s
rWcCs"t|d�r|��S|��|kSdS)N�full)r�rXrV)rc�maxsizerrr�
queue_full�s
rZc@s�eZdZedd��Zdd�Zedd��Zdd�Zed	d
��Zdd�Z	d
d�Z
edd��Zdd�Zdd�Z
dd�Zdd�Zdd�Zdd�ZdS)�
_TestQueuecCs*|��td�D]}|��q|��dS)N�)r&r�r�r�)r�r�child_can_start�parent_can_continuer�rrr�	_test_put�s
z_TestQueue._test_putcCs�d}|j|d�}|��}|��}|j|j|||fd�}d|_|��|�t|�d�|�t||�d�|�	d�|�	dd�|�	ddd�|�	d	d�|�	d
dd�|�
d�t�t
�|�t|�d�|�t||�d�t|j	�}t|j
�}|�tj|dd�|�|jd�|�tj|ddd�|�|jd�|�tj|d�|�|jd�|�tj|ddt�|�|jt�|�tj|ddt�|�|jd�|jtj|ddtd
�|�|jt�|��|��|�t|�d�|�t||�d�|��t|�dS)Nr\�rYr�TFrNr�rP�ra�rr�)rr�rzr_ror�rVrWrZrb�
put_nowaitr?r�r�r:r��pyqueueZFullrTr<�TIMEOUT1�TIMEOUT2�TIMEOUT3r�r&r�r)r=ZMAXSIZErr]r^rrbrcrrr�test_put�sR�




z_TestQueue.test_putcCs<|��|�d�|�d�|�d�|�d�|��dS)Nr�rPrara)r&rbr��r�rr]r^rrr�	_test_get�s



z_TestQueue._test_getcCs�|��}|��}|��}|j|j|||fd�}d|_|��|�t|�d�|��|�	�t
�t�|�t|�d�|�|�
dd�d�|�|�
d�d�|�|j
dd�d�|�|��d	�|�t|�d�t|j
�}t|j�}|�tj|d�|�|jd
�|�tj|dd�|�|jd
�|�tj|�|�|jd
�|�tj|dt�|�|jt�|�tj|dt�|�|jd
�|jtj|td�|�|jt�|��t|�dS)Nr�TFr�rPrNr�rarar)rr�rzrjror�rVrWr�r&r?r�r�r��
get_nowaitr:r�rd�EmptyrTr<rerfrgr�r)r=rr]r^rr�rkrrr�test_get�sF�


z_TestQueue.test_getcCstdd�D]}|�|�q
dS)Nr�r
)r�rb)r�rr�rrr�
_test_forksz_TestQueue._test_forkcCs�|��}td�D]}|�|�qt�t�|j|j|fd�}d|_|�	�td�D]}|�
|��|�qR|�t
j|jd�|��t|�dS)Nr�r�Tr
F)rr�rbr?r�r�rzrnror�rVr�r�rdrlr�r)r=rr�r�rrr�	test_forks
z_TestQueue.test_forkcCs�|��}z|�|��d�Wnty8|�d�Yn0|�d�|�|��d�|�d�|�|��d�|��|�|��d�|��|�|��d�t|�dS)Nrzqsize method not implementedrNrar�)rrVrVrUrirbr�r�r=rcrrr�
test_qsize5s

z_TestQueue.test_qsizecCs(t|jd�D]}t�t�|��qdSr)r2r�r?r�r�Z	task_done)r�rc�objrrr�_test_task_doneEs
z_TestQueue._test_task_donecs�������fdd�td�D�}|D]}d|_|��q$td�D]}��|�q@���|D]}��d�q\|D]}|��qpt��dS)Ncsg|]}�j�j�fd��qSr)rzrsr��rr=rrr�Ns�z-_TestQueue.test_task_done.<locals>.<listcomp>raTr�)�
JoinableQueuer�ror�rbr�r)r=Zworkersr�r�rrtr�test_task_doneKs�

z_TestQueue.test_task_donec
Cs�tj����d}t|dd��}|�d�Wd�n1s>0Ytj�t����<zt|�Wnt	j
y�|�d�Yn0Wd�n1s�0YWd�n1s�0YdS)NZimported_by_an_imported_modulez.pyrGz�if 1:
                    import multiprocessing

                    q = multiprocessing.Queue()
                    q.put('knock knock')
                    q.get(timeout=3)
                    q.close()
                    del q
                z?Probable regression on import lock contention; see Issue #22853)r�rZtemp_cwdrA�writeZ
DirsOnSysPathr3�getcwd�
__import__rdrl�fail)r=Zmodule_namerDrrr�test_no_import_lock_contentionas(
z)_TestQueue.test_no_import_lock_contentioncCsHt��}t��}|�tj|jdd�t��|}|�|d�t	|�dS)NTg�������?r#)
rrr?r@r�rdrlr��assertGreaterEqualr)r=rcr��deltarrr�test_timeoutvsz_TestQueue.test_timeoutc	Cs4|jdkr|�d�|j��Gdd�dt�}tj���J|��}|�|��|�d�|�	|j
tjd��t|�Wd�n1s�0Ytj����|jdd�}|�|��|�d�z|�
|��d�Wnty�Yn0|�	|j
tjd��|�	|���t|�Wd�n1�s&0YdS)	NrJrgc@seZdZdd�ZdS)zF_TestQueue.test_queue_feeder_donot_stop_onexc.<locals>.NotSerializablecSst�dSr)r5r^rrrrZ�szQ_TestQueue.test_queue_feeder_donot_stop_onexc.<locals>.NotSerializable.__reduce__N�rFrGrHrZrrrr�NotSerializable�sr�Tr�rNr`)rhrirj�objectr�r�captured_stderrrrbrmr�r�rrVrVrUrU)r=r�rcrrr�"test_queue_feeder_donot_stop_onexc�s(

&
z-_TestQueue.test_queue_feeder_donot_stop_onexccs�|jdkr|�d�|j��Gdd�dt��G�fdd�dtjj�}��}tj�	��F|t�
�d�}|�|�|�d�|�|j
tjd	��Wd�n1s�0Y|�|j�|�|j�dS)
NrJrgc@s eZdZdZdd�Zdd�ZdS)zK_TestQueue.test_queue_feeder_on_queue_feeder_error.<locals>.NotSerializablezMock unserializable objectcSsd|_d|_dS�NF)�reduce_was_called� on_queue_feeder_error_was_calledr^rrrr>�szT_TestQueue.test_queue_feeder_on_queue_feeder_error.<locals>.NotSerializable.__init__cSsd|_t�dS�NT)r�r5r^rrrrZ�szV_TestQueue.test_queue_feeder_on_queue_feeder_error.<locals>.NotSerializable.__reduce__N)rFrGrH�__doc__r>rZrrrrr��sr�cs eZdZdZe�fdd��ZdS)zE_TestQueue.test_queue_feeder_on_queue_feeder_error.<locals>.SafeQueuez1Queue with overloaded _on_queue_feeder_error hookcst|t�rt|��rd|_dSr�)rr5r�)r�rr�r�rr�_on_queue_feeder_error�s
�z\_TestQueue.test_queue_feeder_on_queue_feeder_error.<locals>.SafeQueue._on_queue_feeder_errorN)rFrGrHr��staticmethodr�rr�rr�	SafeQueue�sr�)�ctxTr�)rhrirjr�rrrr�rr��get_contextrbrmr�r�r�r�)r=r�Znot_serializable_objrcrr�r�'test_queue_feeder_on_queue_feeder_error�s



2z2_TestQueue.test_queue_feeder_on_queue_feeder_errorc	Cs�t��t��fD]v}|��|�td��|�d�Wd�n1sH0Y|�td��|��Wd�q1s|0YqdS)Nz	is closed�foo)rrrur�assertRaisesRegexr6rbr�rprrr�$test_closed_queue_put_get_exceptions�s(z/_TestQueue.test_closed_queue_put_get_exceptionsN)rFrGrHr-r_rhrjrmrnrorqrsrvr{r~r�r�r�rrrrr[�s$
;
	5

 &r[c@s$eZdZdd�Zdd�Zdd�ZdS)�	_TestLockcCsR|��}|�|��d�|�|�d�d�|�|��d�|�ttjf|j�dS)NTF)�LockrV�acquire�releaser�r6r�ZThreadError�r=�lockrrr�	test_lock�s
z_TestLock.test_lockcCs~|��}|�|��d�|�|��d�|�|��d�|�|��d�|�|��d�|�|��d�|�ttf|j�dSr�)�RLockrVr�r�r�r�r�r�rrr�
test_rlock�sz_TestLock.test_rlockcCs,|���Wd�n1s0YdSr)r�r^rrr�test_lock_context�s
z_TestLock.test_lock_contextN)rFrGrHr�r�r�rrrrr��s
r�c@s,eZdZdd�Zdd�Zdd�Zdd�Zd	S)
�_TestSemaphorecCs�|�dt|�|�|��d�|�dt|�|�|��d�|�dt|�|�|�d�d�|�dt|�|�|��d�|�dt|�|�|��d�|�dt|�dS)Nr�TrNrF)rYr]rVr�r��r=�semrrr�_test_semaphore�sz_TestSemaphore._test_semaphorecCsT|�d�}|�|�|�|��d�|�dt|�|�|��d�|�dt|�dS)Nr�rPra)�	Semaphorer�rVr�rYr]r�rrr�test_semaphore�s

z_TestSemaphore.test_semaphorecCs|�d�}|�|�dS�Nr�)�BoundedSemaphorer�r�rrr�test_bounded_semaphores
z%_TestSemaphore.test_bounded_semaphorecCs�|jdkr|�d�|j��|�d�}t|j�}|�|d�d�|�|jd�|�|dd�d�|�|jd�|�|dt	�d�|�|jd�|�|dt
�d�|�|jt
�|�|td�d�|�|jt�dS)NrJrgrFr'Tr�)rhrirjr�r:r�rVrTr<rerfrg)r=r�r�rrrr~	s


z_TestSemaphore.test_timeoutN)rFrGrHr�r�r�r~rrrrr��s
r�c@s�eZdZeddd��Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dd�Z
edd��Ze�
ed�dd��Zedd��Ze�
ed�dd��Zedd��Zdd�ZdS)�_TestConditionNcCs.|��|��|�|�|��|��dSr)r�r�r&)r��cond�sleeping�wokenr(rrrrD"s

z_TestCondition.fc	Cs`td�D]<}z|�|krWqFWnty8YqFYn0t�t�qt�t�|�||�dS�Nr�)r�rUr?r�r�rY)r=r;rWr�rrr�assertReachesEventually*s


z&_TestCondition.assertReachesEventuallycCsX|jdkrTz6|j��|j��}|�|d�|�|j��d�WntyRYn0dS)NrJr)rhZ_sleeping_countr]Z_woken_countrVZ_wait_semaphorerU)r=r�Zsleepersrrr�check_invariant5s
�z_TestCondition.check_invariantcCs|��}|�d�}|�d�}|j|j|||fd�}d|_|��|�|j�tj	|j|||fd�}d|_|��|�|j�|�
�|�
�t�t
�|�dt|�|�
�|��|��t�t
�|�dt|�|�
�|��|��t�t
�|�dt|�|�|�|��dS)Nrr�TrNr�)�	Conditionr�rzrDror�r�r�r�r
r�r?r�r�rYr]�notifyr�r�)r=r�r�r�r�rrr�test_notify@s6





z_TestCondition.test_notifycs�|��}|�d�}|�d��td�D]h}|j|j||�tfd�}d|_|��|�|j	�t
j|j||�tfd�}d|_|��|�|j	�q$td�D]}|��q�td�D]}���q�|�
dt��|�|�td�D]d}|j|j||�fd�}d|_|��|�|j	�t
j|j||�fd�}d|_|��|�|j	�q�td�D]}|���qHt�t�|�
dt��|��|��|��|��fdd�d�|�|�dS)NrrPr�Tr\cst��Sr�r]r�r�rr�<lambda>�rz0_TestCondition.test_notify_all.<locals>.<lambda>)r�r�r�rzrDreror�r�r�r�r
r�rYr]r�r?r�r�Z
notify_allr�r��r=r�r�r�r�rCrr�r�test_notify_allmsP


�
�



z_TestCondition.test_notify_allcsP|��}|�d�}|�d��td�D]d}|j|j||�fd�}d|_|��|�|j�t	j
|j||�fd�}d|_|��|�|j�q$td�D]}|��q�t�
t�|�dt��|��|jdd�|��|��fdd	�d�|��|jd
d�|��|��fdd	�d�|��|jdd�|��|�dt��|�|�dS)NrrPr�Tr\r�)�ncst��Srr�rr�rrr��rz._TestCondition.test_notify_n.<locals>.<lambda>racst��Srr�rr�rrr��r)r�r�r�rzrDror�r�r�r�r
r�r?r�r�rYr]r�r�r�r�r�rr�r�
test_notify_n�s:



z_TestCondition.test_notify_ncCsH|��}t|j�}|��|t�}|��|�|d�|�|jt�dSr�)	r�r:r&r�rer�rVrTr<)r=r�r&rXrrrr~�s
z_TestCondition.test_timeoutcs`|�Hd�_|��|��fdd��}|r4�jdkr>t�d�Wd�n1sR0YdS)Nrcs
�jdkS�Nra�rWr��staterrr��rz0_TestCondition._test_waitfor_f.<locals>.<lambda>rarN)rWr��wait_forr�r�)r�r�r�r�rr�r�_test_waitfor_f�sz_TestCondition._test_waitfor_fzneeds sharedctypesc	s�|��}|�dd��|j|j|�fd�}d|_|��|�:|��fdd��}|�|�|��j	d�Wd�n1sz0Yt
d�D]H}t�d	�|�&�j	d
7_	|�
�Wd�q�1s�0Yq�t|�|�|jd�dS)Nr�r2r�Tcs
�jdkS�Nrr�rr�rrr��rz-_TestCondition.test_waitfor.<locals>.<lambda>rrar�rN)r�rrzr�ror�r�rmrVrWr�r?r�r�rrt)r=r�r�r�r�rr�r�test_waitfor�s 
,
(z_TestCondition.test_waitforcs�|��|�hd}t��}|j�fdd�|d�}t��|}|sf|d|kr\|dkrfnnd|_Wd�n1sz0YdS)Nr#cs
�jdkSr�r�rr�rrr�
rz8_TestCondition._test_waitfor_timeout_f.<locals>.<lambda>r�g333333�?r�T)r�r?r@r�rW)r�r�r��successr�r��dtr�rr�r�_test_waitfor_timeout_fs$z&_TestCondition._test_waitfor_timeout_fc	Cs�|��}|�dd�}|�dd�}|�d�}|j|j||||fd�}d|_|��|�|jt	j
d��td�D]H}t�
d�|�&|jd	7_|��Wd�ql1s�0Yqlt|�|�|j�dS)
Nr�rFr�Tr�rPr�rN)r�rr�rzr�ror�rmr�rr�r�r?r�rWr�r)r=r�r�r�r�r�r�rrr�test_waitfor_timeouts"

�
(z#_TestCondition.test_waitfor_timeoutcCsP|�|��Wd�n1s"0Yt�d�|durLt�|tj�dSrM)r�r?r�r3r�r�r*)r�rdrrrr�_test_wait_result+s
&
z _TestCondition._test_wait_resultcCs�t|t�rtjdkrt��}nd}|��}|�||�|�d��|�|�d��|j	|j
||fd�}|��|�|�d��|dur�|�
t|jd�|��Wd�n1s�0YdS)Nr$rr#r��<)r�ProcessesMixinr�r�r3rsr�r|r&rzr�r�rmr��KeyboardInterruptr�)r=rrdr�rrr�test_wait_result3s
z_TestCondition.test_wait_result)N)rFrGrHr-rDr�r�r�r�r�r~r�r7r.�HAS_SHAREDCTYPESr�r�r�r�r�rrrrr� s&->2	






r�c@s eZdZedd��Zdd�ZdS)�
_TestEventcCst�t�|��dSr)r?r�rfr�r�rrr�_test_eventJs
z_TestEvent._test_eventcCs�|��}t|j�}|�|��d�|�|d�d�|�|jd�|�|t�d�|�|jt�|��|�|��d�|�|�d�|�|jd�|�|t�d�|�|jd�|�	�|j
|j|fd�}d|_|�
�|�|�d�|��dS)NFr'Tr�)r�r:r&rVrrTr<rer�rrzr�ror�r�)r=r�r&r�rrr�
test_eventOs&
z_TestEvent.test_eventN)rFrGrHr-r�r�rrrrr�Hs
r�c@s4eZdZdd�Zdd�Zdd�Zdd�Zd	d
�ZdS)�
_DummyListcCs6tj�t�d��}t��}|�||f�d|jd<dS)Nr�r)r�heap�
BufferWrapper�structZcalcsizer��__setstate__�
_lengthbuf)r=�wrapperr�rrrr>}sz_DummyList.__init__cCs"|\|_|_|j���d�|_dS)Nr�)�_wrapper�_lockZcreate_memoryview�castr�)r=r�rrrr��sz_DummyList.__setstate__cCs|j|jfSr)r�r�r^rrr�__getstate__�sz_DummyList.__getstate__cCs<|j�"|jdd7<Wd�n1s.0YdS�NrrN�r�r�)r=�_rrrr��sz_DummyList.appendcCs4|j�|jdWd�S1s&0YdSr�r�r^rrr�__len__�sz_DummyList.__len__N)rFrGrHr>r�r�r�r�rrrrr�{s
r�cCst�d�dS)Nr�r�rrrr�_wait�sr�c@sBeZdZdZddd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dS)�Bunchz
    A bunch of threads.
    Fc
Cs�||_||_||_|��|_|��|_|��|_|s>|j��g}t	|�D]*}|j
|jd�}d|_|�
�|�|�qJdd�}	t�||	|�|_dS)z�
        Construct a bunch of `n` threads running the same function `f`.
        If `wait_before_exit` is True, the threads won't terminate until
        do_finish() is called.
        rwTcSs|D]}|��qdSr)r�)rLr�rrr�finalize�sz Bunch.__init__.<locals>.finalizeN)rDrAr��	DummyList�started�finishedr��	_can_exitr�r�rz�taskror�r�r�r��
_finalizer)
r=�	namespacerDrAr�Zwait_before_exitrLr�r�r�rrrr>�s 



zBunch.__init__c	Csxt��}|j�|�z6|j|j�W|j�|�|j�d�|j�	�stJ�n(|j�|�|j�d�|j�	�srJ�0dS)N�)
r3rsr�r�rDrAr�r�r&r�r=rrrrr��s�z
Bunch.taskcCst|j�|jkrt�qdSr)rrr�r�r�r^rrr�wait_for_started�szBunch.wait_for_startedcCst|j�|jkrt�qdSr)rrr�r�r�r^rrr�wait_for_finished�szBunch.wait_for_finishedcCs|j��dSr)r�r�r^rrr�	do_finish�szBunch.do_finishcCs|��dSr)r�r^rrrr�szBunch.closeN)F)
rFrGrHr�r>r�r�r�r�rrrrrr��s

r�c@seZdZdd�Zdd�ZdS)�
AppendTruecCs
||_dSr)rr)r=rrrrrr>�szAppendTrue.__init__cCs|j�d�dSr�)rrr�r^rrrrD�szAppendTrue.__call__NrErrrrr��sr�c@s�eZdZdZdZdZdd�Zdd�Zdd	�Zd
d�Z	e
dd
��Zd6dd�Zdd�Z
e
dd��Zdd�Ze
dd��Zdd�Ze
dd��Zdd�Ze
dd ��Zd!d"�Ze
d#d$��Zd%d&�Ze
d'd(��Zd)d*�Ze
d+d,��Zd-d.�Zd/d0�Ze
d1d2��Zd3d4�Zd5S)7�_TestBarrierz$
    Tests for Barrier objects.
    rag>@cCs|j|j|jd�|_dS)Nr�)�Barrierr��defaultTimeout�barrierr^rrr�setUp�sz_TestBarrier.setUpcCs|j��d|_dSr)r��abortr^rrr�tearDown�s
z_TestBarrier.tearDowncCs,|jdkrgS|jdkr"|j��St�SdS)NrLrK)rhrKr�r�r^rrrr��s



z_TestBarrier.DummyListcCs@t||||jd�}z||�|��W|��n
|��0dSrM)r�r�r�r)r=rDrArSrrr�run_threads�s

z_TestBarrier.run_threadscCs�|j}||jksJ�t|�D]d}|d�d�t|d�||ksFJ�|��|d�d�t|d�|d|ksxJ�|��qz|jdks�J�Wnty�Yn0|jr�J�dS)NrTrN)	�partiesr�r�r�rrr&�	n_waitingrU�broken)r�r��resultsr��mr�rrr�	multipass�s
z_TestBarrier.multipassrNcCs*|��|��g}|�|j|j||f�dS)z;
        Test that a barrier is passed in lockstep
        N)r�r�r�r�)r=�passesr�rrr�test_barriersz_TestBarrier.test_barriercCs
|�d�S)zC
        Test that a barrier works for 10 consecutive runs
        r�)r�r^rrr�test_barrier_10
sz_TestBarrier.test_barrier_10cCs|��}|�|�dSr)r&rb)r�r�rrXrrr�_test_wait_return_fsz _TestBarrier._test_wait_return_fcsR|���|�|j|j�f��fdd�t|j�D�}|�|�d�d�t��dS)z9
        test the return value from barrier.wait
        csg|]}����qSrrr�rrrr�rz1_TestBarrier.test_wait_return.<locals>.<listcomp>rrNN)	rr�r�r�r�r�rV�countr�r=r�rrr�test_wait_returns
z_TestBarrier.test_wait_returncCs|��t|�dkrt�dSrM)r&rrr�)r�r�r�rrr�_test_action_f"sz_TestBarrier._test_action_fcCsB|��}|j|jt|�d�}|�|j||f�|�t|�d�dS)z,
        Test the 'action' callback
        )rrNN)r�r�r�r�r�rrVrr)r=r�r�rrr�test_action(sz_TestBarrier.test_actioncCslz0|��}||jdkrt�|��|�d�Wn6tjyN|�d�Yntyf|��Yn0dS�Nr�T)r&r�r�r�r��BrokenBarrierErrorr�)r�r��results1�results2r�rrr�
_test_abort_f1sz_TestBarrier._test_abort_fcCs^|��}|��}|�|j|j||f�|�t|�d�|�t|�|jd�|�|jj�dS)zK
        Test that an abort will put the barrier in a broken state
        rrNN)	r�r�rr�rVrrr�rmr�)r=rrrrr�
test_abort>s
�z_TestBarrier.test_abortcCs�|��}||jdkr<|j|jdkr2t�d�q|��n6z|��|�d�Wntjyp|�d�Yn0|��|�d�dS)Nr�rNr�T)	r&r�r�r?r��resetr�r�r)r�r�rr�results3r�rrr�
_test_reset_fJs
z_TestBarrier._test_reset_fcCsl|��}|��}|��}|�|j|j|||f�|�t|�d�|�t|�|jd�|�t|�|j�dS)zL
        Test that a 'reset' on a barrier frees the waiting threads
        rrNN)r�r�r
r�rVrrr�)r=rrr	rrr�
test_reset\s�z_TestBarrier.test_resetcCs�z0|��}||jdkrt�|��|�d�Wn6tjyN|�d�Yntyf|��Yn0|��|jdkr�|��|��|��|�d�dSr)r&r�r�r�r�rr�r)r�r��barrier2rrr	r�rrr�_test_abort_and_reset_fisz$_TestBarrier._test_abort_and_reset_fcCsz|��}|��}|��}|�|j�}|�|j|j||||f�|�t|�d�|�t|�|jd�|�t|�|j�dS)zF
        Test that a barrier can be reset after being broken.
        rrNN)r�r�r�r�r
r�rVrr)r=rrr	rrrr�test_abort_and_resets�z!_TestBarrier.test_abort_and_resetcCsR|��}||jdkr t�d�z|�d�WntjyL|�d�Yn0dS)Nr���?rT)r&r�r?r�r�rr��r�r�r�r�rrr�_test_timeout_f�s
z_TestBarrier._test_timeout_fcCs4|��}|�|j|j|f�|�t|�|jj�dS)z$
        Test wait(timeout)
        N)r�r�rr�rVrrr�r�rrrr~�sz_TestBarrier.test_timeoutcCsT|�|j�}||jdkr$t�d�z|��WntjyN|�d�Yn0dS)Nr�rT)r&r�r�r?r�r�rr�rrrr�_test_default_timeout_f�s
z$_TestBarrier._test_default_timeout_fcCs@|j|jdd�}|��}|�|j||f�|�t|�|j�dS)z4
        Test the barrier's default timeout
        rr�N)r�r�r�r�rrVrrr�)r=r�r�rrr�test_default_timeout�sz!_TestBarrier.test_default_timeoutcCs|�d�}|��|��dSrM)r�r&)r=rSrrr�test_single_thread�s
z_TestBarrier.test_single_threadc	CsHt|�D]:}|��|�|�|�Wd�q1s80YqdSr)r�r&r�)r�r�r��connr�r�rrr�_test_thousand_f�sz_TestBarrier._test_thousand_fcCs�|jdkr|�d�|j��d}|��}|�d�\}}t|j�D]2}|j|j|j	|||fd�}|�
�|�|j�q@t|�D]$}t|j�D]}|�
|��|�q�q|dS)NrKrg��Fr�)rhrirjr�r�r�r�rzrr�r�r�r�rVr�)r=r�r�rr0�jr�r�rrr�
test_thousand�s
�z_TestBarrier.test_thousandN)rN)rFrGrHr�r�r�r�r�r�r�r-r�r�r�r�r�rrrrr
rr
rrr~rrrrrrrrrr��sH




	







	
r�c@sZeZdZdZddddded�ed�fgZd	d
�Zedd��Zddd�Z	dd�Z
dd�ZdS)�
_TestValuer:)r�i�i�^)�dg
@g�)�hi�����)rc��rd�x�ycCsts|�d�dS�Nz%requires multiprocessing.sharedctypes�r�rir^rrrr��sz_TestValue.setUpcCs$t||j�D]\}}|d|_qdSr�)�zip�codes_valuesrW)r��values�sv�cvrrrr{�sz_TestValue._testFcs�|r�fdd��jD�}n�fdd��jD�}t|�j�D]\}}��|j|d�q:�j�j|fd�}d|_|��|��t|�j�D]\}}��|j|d�q�dS)Ncsg|]\}}}��||��qSr)�RawValue�r��coderWr�r^rrr��s�z)_TestValue.test_value.<locals>.<listcomp>csg|]\}}}��||��qSr)rr*r^rrr��s�rNr�Tr�)	r%r$rVrWrzr{ror�r�)r=�rawr&r'r(rrr^r�
test_value�s
�
�z_TestValue.test_valuecCs|jdd�dS�NT)r,)r-r^rrr�
test_rawvalue�sz_TestValue.test_rawvaluec
Cs�|�dd�}|��}|��}|jdddd�}|��}|��}|��}|jdd|d�}|��}	|��}
|�||	�|jdddd�}|�t|d��|�t|d��|jt|jdddd�|�	dd�}|�t|d��|�t|d��dS)Nr�ra�r�F�get_lock�get_objZnavalue)
rr1r2r�rVr|r�r�r5r))
r=Zval1�lock1�obj1Zval2�lock2�obj2r�Zval3�lock3�obj3�arr4�arr5rrr�test_getobj_getlocks$z_TestValue.test_getobj_getlockN)F)rFrGrHr[rr%r�r-r{r-r/r;rrrrr�s�

rc@s~eZdZdZedd��Ze�edud�ddd��Z	e�edud�d	d
��Z
e�edud�dd��Ze�edud�d
d��ZdS)�
_TestArrayr:cCs0tdt|��D]}||||d7<qdSrM)r�rr)r��seqr�rrrrDsz_TestArray.fNzrequires _ctypesFcCs�gd�}|r|�d|�}n|�d|�}|�t|�t|��|�|d|d�|�t|dd��t|dd���t�dgd��|dd�<|dd�<|�t|dd��|�|�|�|j|j|fd	�}d
|_|�	�|�
�|�t|dd��|�dS)N)
i�iri�i5���i$i�i�i?r�rPr�rb)rNr�rPrararQr�T)�RawArray�ArrayrVrrr��arrayrDrzror�r�)r=r,r=�arrr�rrr�
test_array$s$$
z_TestArray.test_arraycCsrd}td�D]`}|�d|�}|�t|�|�|�t|�dg|�td�|dd�<|�t|�ttd���~qdS)Nr�rPr�r)r�rArVrrr�)r=�sizer�rCrrr�test_array_from_size=sz_TestArray.test_array_from_sizecCs|jdd�dSr.)rDr^rrr�
test_rawarrayLsz_TestArray.test_rawarrayc
Cs
|�dttd���}|��}|��}|jdttd��dd�}|��}|��}|��}|jdttd��|d�}|��}	|��}
|�||	�|jdtd�dd�}|�t|d��|�t|d��|j	t
|jdtd�dd�|�dtd��}|�t|d��|�t|d��dS)Nr�r�r0Fr1r2Znotalock)rAr�r�r1r2r�rVr|r�r�r5r@)
r=Zarr1r3r4Zarr2r5r6r�Zarr3r7r8r9r:rrr�test_getobj_getlock_objPs(�z"_TestArray.test_getobj_getlock_obj)F)
rFrGrHr[r-rDr7�skipIfr.rDrFrGrHrrrrr<s


r<c@sPeZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dd�Z
dd�ZdS)�_TestContainers�rKcCs^|�ttd���}|�|dd�ttd���|��}|�|dd�g�|�ttd���|�|dd�ttd���|�|dd�|�|dd�gd��|d9}|�|dd�gd��|�|ddggd��|�|dd�ttd���||g}|�|�}|�dd	�|D�gd
�gd�g�|�|g�}|�d�|�|ddd�gd
��dS)Nr�rar�)r�rPra)
rrNr�rPrarrNr�rPrar\)rrNr�rPrarrNr�rPrarar\cSsg|]}|dd��qSrr)r�Zelementrrrr��rz-_TestContainers.test_list.<locals>.<listcomp>)
rrNr�rPrarar\rbrQ�	r�r)rrNr�rPrarar\rbrQrLr�)r�r�rV�extendr�)r=rRrSrr�rDrrr�	test_listrs*
�
z_TestContainers.test_listcCsf|�ttd���}t|�}|�t|�ttd���|�t|�g�t|�}d|d<|�t|�d�dS)Nr�r�r)r�r�r2rV�next)r=rR�itrrr�test_list_iter�sz_TestContainers.test_list_itercs����fdd�td�D��}��dd�|D�gd�gd�d|dd<��|ddd�gd	��td
d�D] }��||dd�gd��qn��|d
��d���t|d
�d�tddd�D]}��t||�d�q�~���}|�|�~dS)Ncsg|]}��td���qS)rP)r�r�)r�Z_ir^rrr��rz;_TestContainers.test_list_proxy_in_list.<locals>.<listcomp>rPcSsg|]}|dd��qSrr)r��innerrrrr��r)rrNr��7rr2)rrNrSrNr�)r�r�rV�poprrr�)r=rRr�rSrr^r�test_list_proxy_in_list�s 
z'_TestContainers.test_list_proxy_in_listcCs�|��}ttdd��}|D]}t|�||<q|�|��tdd�|D���|�t|���|�|�t|���dd�|D��|�t|�	��dd�|D��dS)N�A�Fcss|]}|t|�fVqdSr��chrr�rrr�	<genexpr>�rz,_TestContainers.test_dict.<locals>.<genexpr>cSsg|]}t|��qSrrXr�rrrr��rz-_TestContainers.test_dict.<locals>.<listcomp>cSsg|]}|t|�f�qSrrXr�rrrr��r)
�dictr�r�rYrVr	�sorted�keysr&r)r=r�indicesr�rrr�	test_dict�sz_TestContainers.test_dictcCsv|��}ttdd��}|D]}t|�||<qt|�}|�t|�|�|�t|�g�t|�}|��|�tt	|�dS)NrVrW)
r[r�r�rYr2rVrr�r�rO)r=rr^r�rPrrr�test_dict_iter�sz_TestContainers.test_dict_itercCs�|jddd�}|jddd�}|j||d�}|�|dd�|�|d	dd�d
|d	d<|�|dd
�|�|d	dd
�d|d	d<|�|dd�|�|d	dd�~~|�|d
dd�d|d	d<|�|d	dd�|d
}|d	}d|d<|�|dd�|�|d	dd�|��|�t|�d�|�|dd�|�|dd�|�||g�}d|dd<|�|dd�|�|ddd�~~|�|ddd�|�ddg|g�}|�|dt�|�|dddd�dS)Nr�ra)�ferrets�hamstersr�rP)�water�feed)�pets�suppliesrcrfraZblanketsrbrera�rrbrNZmarmots�X�cr2rd)r[rVrrrr�rp)r=rerfr�lZouterrrr�test_dict_proxy_nested�sFz&_TestContainers.test_dict_proxy_nestedcCsr|��}|�|���|d�d�|�|d��d�|��}|��|d<|d�d�|�|d��d�dS)Nr�{��)r�r�rrbrVr�r[rQrrr�test_nested_queue�sz!_TestContainers.test_nested_queuecCsh|��}d|_d|_d|_|�|j|jfd�|`|�t|�d�|�t|d��|�t|d��dS)N�Bob�BuilderZhidden)rorpzNamespace(name='Bob')r �job)�	Namespacer rqZ_hiddenrVr6rmr�)r=r�rrr�test_namespace�sz_TestContainers.test_namespaceN)rFrGrHr[rNrQrUr_r`rkrnrsrrrrrJns


.
rJr'cCst�|�||Srr�)r r&rrr�sqr
	s
rtcCs||Srr�r r!rrr�mul	srvcCst�|�tdd��dS)Nr i)r?r�r6r%rrr�raise_large_valuerror	s
rwcCs|Srr�r rrr�identity	sryc@s eZdZdZdd�Zdd�ZdS)�
CountedObjectrcCs|jd7_t�|�SrM)�n_instancesr��__new__r�rrrr|	szCountedObject.__new__cCst|�jd8_dSrM)r�r{r^rrr�__del__"	szCountedObject.__del__N)rFrGrHr{r|r}rrrrrz	srzc@seZdZdS)�SayWhenErrorN�rFrGrHrrrrr~%	rr~ccs8|dkrtd��t|�D]}||kr,td��|VqdS)Nr2zSomebody said when)r~r�)�totalZwhenr�rrr�exception_throwing_generator'	sr�cseZdZe�fdd��Ze�fdd��Zdd�Zdd�Zd	d
�Zdd�Z	d
d�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zdd�Zdd�Zdd�Zdd �Zd!d"�Zd#d$�Zd%d&�Zd'd(�Zd)d*�Zed+d,��Zd-d.�Zed/d0��Zd1d2�Zd3d4�Zd5d6�Zd7d8�Zd9d:�Z �Z!S);�	_TestPoolcst���|�d�|_dSr�)�super�
setUpClass�Pool�poolr���	__class__rrr�2	s
z_TestPool.setUpClasscs(|j��|j��d|_t���dSr)r�r�r�r��
tearDownClassr�r�rrr�7	s

z_TestPool.tearDownClasscCs@|jj}|�|td�td��|�|tdddi�tdd��dS)N)rararr rPrx)r��applyrVrt)r=Zpapplyrrr�
test_apply>	sz_TestPool.test_applyc	Csh|jj}|�|tttd���tttttd�����|�|tttd��dd�tttttd�����dS)Nr�r�r
�Z	chunksize)r��maprVrtr�r�)r=Zpmaprrr�test_mapC	s
,�z_TestPool.test_mapcCs�|jj}tttd�tddd���}|�|t|�tt�t|���tttd�tddd���}|�|t|dd�tt�t|���dS)Nr�rLr2r�rir
r�)r��starmapr�r$r�rVrv�	itertools)r=Zpsmap�tuplesrrr�test_starmapI	s��z_TestPool.test_starmapcCsDtttd�tddd���}|�|j�t|���tt�	t|���dS)Nr�rir2)
r�r$r�rVr�Z
starmap_asyncrvr�r�r�)r=r�rrr�test_starmap_asyncR	s�z_TestPool.test_starmap_asyncc	Cs8|�|j�tttd�����tttttd�����dSr�)rVr��	map_asyncrtr�r�r�r�r^rrr�test_map_asyncW	s�z_TestPool.test_map_asynccCs�|jdkr|j��ng}|jjtdg|j|jd���|�dt	|��|�dg|d�|jjtdg|j|jd���|�dt	|��|�
|dt�dS)NrK�1)�callback�error_callbackrNrrRr�)rhrKr�r�r�r�r�r&rVrrrpr6)r=Z	call_argsrrr�test_map_async_callbacks[	s�
�
z"_TestPool.test_map_async_callbackscCsp|jdkr|�d�|j��Gdd�dt�}|�t��&|j�t|�gd�Wd�n1sb0YdS)NrLrgc@seZdZdd�ZdS)z*_TestPool.test_map_unplicklable.<locals>.AcSstd��dS)Nz
cannot pickler�r^rrrrZm	sz5_TestPool.test_map_unplicklable.<locals>.A.__reduce__Nrrrrr�Al	sr�r�)	rhrirjr�r�r�r�r�rt)r=r�rrr�test_map_unplicklableh	s

z_TestPool.test_map_unplicklablecCsBz|jjtgdd�jtd�Wntjy<|�d�Yn0dS)NrNr�r�z2pool.map_async with chunksize stalled on null list)r�r�rtr�rer�TimeoutErrorrzr^rrr�test_map_chunksizer	sz_TestPool.test_map_chunksizecCsj|jdkr|�d�|j��|�t��&|j�ttdd�d�Wd�n1sR0Y|�t��&|j�ttdd�d�Wd�n1s�0Y|�t��&|j�ttdd�d�Wd�n1s�0YGdd�d�}|�t��"|j�t|�d�Wd�n1�s0Y|�t��"|j�t|�d�Wd�n1�s\0YdS)	NrKrgrNr2r�rPc@s$eZdZdd�Zdd�Zdd�ZdS)zE_TestPool.test_map_handle_iterable_exception.<locals>.SpecialIterablecSs|Srrr^rrr�__iter__�	szN_TestPool.test_map_handle_iterable_exception.<locals>.SpecialIterable.__iter__cSst�dSr)r~r^rrr�__next__�	szN_TestPool.test_map_handle_iterable_exception.<locals>.SpecialIterable.__next__cSsdSrMrr^rrrr��	szM_TestPool.test_map_handle_iterable_exception.<locals>.SpecialIterable.__len__N)rFrGrHr�r�r�rrrr�SpecialIterable�	sr�)	rhrirjr�r~r�r�rtr�)r=r�rrr�"test_map_handle_iterable_exceptionx	s
4442z,_TestPool.test_map_handle_iterable_exceptioncCs<|j�tdtf�}t|j�}|�|�d�|�|jt�dS)Nrb�1)	r��apply_asyncrtrer:r�rVrTr<�r=rXr�rrr�
test_async�	s
z_TestPool.test_asynccCsD|j�tdtdf�}t|j�}|jtj|td�|�	|j
t�dS)Nr\rr�)r�r�rtrfr:r�r�rr�rTr<r�rrr�test_async_timeout�	s
z_TestPool.test_async_timeoutc	Cs�|j�tttd���}|�t|�tttttd�����|j�tttd���}td�D]}|�t|�||�qV|�t	|j
�|jjtttd��dd�}td�D]}|�t|�||�q�|�t	|j
�dS�Nr�rr�r�)r��imaprtr�r�rVr�rOr��
StopIterationr��r=rPr�rrr�	test_imap�	s"z_TestPool.test_imapcCs<|jdkr|�d�|j��|j�ttdd�d�}|�t|j	�|j�ttdd�d�}|�t|j	�|j�ttdd�d�}t
d�D]}|�t|�||�q�|�t|j	�|j�ttdd�d	�}t
d
�D]}|�t|�||�q�|�t|j	�|j�ttdd�d�}t
d�D]}|�t|�||��q|�t|j	�dS)NrKrgrNr2r�rPr
rbr�r\ra)
rhrirjr�r�rtr�r�r~r�r�rVrOr�rrr�#test_imap_handle_iterable_exception�	s$
z-_TestPool.test_imap_handle_iterable_exceptionc	Csx|j�tttd���}|�t|�tttttd�����|jjtttd��dd�}|�t|�tttttd�����dSr�)r��imap_unorderedrtr�r�rVr\r�)r=rPrrr�test_imap_unordered�	s"z_TestPool.test_imap_unorderedcCsp|jdkr|�d�|j��|j�ttdd�d�}|�t|j	�|j�ttdd�d�}|�t|j	�|j�ttdd�d�}t
ttt
td����}|�t��<td�D]"}t
|�}|�||�|�|�q�Wd�n1s�0Y|j�ttdd�d	�}t
ttt
td����}|�t��>td�D]$}t
|�}|�||�|�|��q&Wd�n1�sb0YdS)
NrKrgrNr2r�rPr
rbr�)rhrirjr�r�rtr�r�r~r�r�r�r�rOr�r)r=rPZexpected_valuesr�rWrrr�-test_imap_unordered_handle_iterable_exception�	s@
���*�z7_TestPool.test_imap_unordered_handle_iterable_exceptioncCs�|jdkrtnt}|�||jd�|�||jd�|jdkr�|�d�}z&|�dt|j��W|��|�	�n|��|�	�0dS)NrKr2rrP)
rh�RemoteErrorr6r�r�rVrr�_poolrr�)r=Zexpected_errorr�rrr�test_make_pool�	s�


�z_TestPool.test_make_poolcCsP|jjtjdd�td�D�dd�}|j��t|jj�}|�|�|j	d�dS)NcSsg|]}d�qS)r#rr�rrrr�
rz,_TestPool.test_terminate.<locals>.<listcomp>i'rNr�r%)
r�r�r?r�r�r�r:r��
assertLessr<)r=r�r�rrrr�
s�
z_TestPool.test_terminatecCsz|�d�}|�|�tg�g�|�t|�tg��g�|�t|�tg��g�|�|�tg���g�|�	�|�
�dSrM)r�rVr�rtr�r�r�r�r�rr�r�rrr�test_empty_iterable

s
z_TestPool.test_empty_iterablecCs�|jdkr�ttd��}dd�|D�}|�d��,}|�t|�}|�|��|�Wd�n1s`0Y|��|�	t
|jt|�dS)NrJr�cSsg|]}t|��qSr)rtr�rrrr�
rz*_TestPool.test_context.<locals>.<listcomp>r�)rhr�r�r�r�rtrVr�r�r�r6)r=�Lr�r�r<rrr�test_context
s
.z_TestPool.test_contextcCstd��dS)Nrlr�r�rrr�_test_traceback 
sz_TestPool._test_tracebackcCs�|jdk�r�|�d��T}z|�|j�Wn(tyP}z|}WYd}~nd}~00|�d�Wd�n1sp0Y|��|�t|�t	�|�
|jd�|j}|�t|�t
jj�|�d|j�tj���:}z|�Wn t	y�tjt���Yn0Wd�n1�s0Y|�d|���|�d��|}z|�ttdd�d�Wn*t�y|}z|}WYd}~nd}~00|�d�|�t|�t�|�|jd�Wd�n1�s�0Y|��dS)NrJrNzexpected RuntimeError)rlz&raise RuntimeError(123) # some commentr2zexpected SayWhenError)rhr�r�r��	Exceptionrzr�r�r�r�rVrA�	__cause__rr�ZRemoteTracebackr��tbr�rr�r��
excepthook�exc_info�getvaluer�rtr�r~)r=r�r��exc�cause�f1rrr�test_traceback$
s<(4�
.z_TestPool.test_tracebackcCstd��dS)Nr�r�r�rrr�_test_wrapped_exceptionJ
sz!_TestPool._test_wrapped_exceptionc	Csl|�d��F}|�t��|�|j�Wd�n1s80YWd�n1sV0Y|��dSrM)r�r�r�r�r�r�r�rrr�test_wrapped_exceptionN
sHz _TestPool.test_wrapped_exceptioncCs�t��}|�t���|�d��\}z.|�tddg�Wt�d�|��|�	�nt�d�|��|�	�0Wd�n1s�0YWd�n1s�0Y|�
t��|d�dS)Nr�rrNrg�������?)r?r@r�r6r�r�rwr�rr��
assertGreater)r=Zt_startr�rrr�test_map_no_failfastU
s

�
Fz_TestPool.test_map_no_failfastcCspdd�td�D�}dd�|D�}|j�t|�~t��t�t�|�	t
dd�|D��dh�|�	tjd�dS)NcSsg|]
}t��qSr)rzr�rrrr�l
rz4_TestPool.test_release_task_refs.<locals>.<listcomp>r�cSsg|]}t�|��qSr)r�r�)r��orrrr�m
rcss|]}|�VqdSrr)r�r�rrrrZs
rz3_TestPool.test_release_task_refs.<locals>.<genexpr>r)
r�r�r�ryr�r�r?r�r�rVr�rzr{)r=ZobjsZrefsrrr�test_release_task_refsi
s
z _TestPool.test_release_task_refsc	Cs�|jdkr|�d�|�d�}|�Wd�n1s80Y|�t��4|�Wd�n1sh0YWd�n1s�0Y|��dS)NrK�test not applicable to managerrN)rhrir�r�r6r��r=r�rrr�
test_enterx
s


<z_TestPool.test_entercCsv|jdkr|�d�|�d�}|��|��tjj|_t	�
dtf��d}t	��Wd�n1sh0YdS)NrKr�rNz%unclosed running multiprocessing pool)
rhrir�r�r�rr�ZRUNZ_staterZcheck_warnings�ResourceWarning�
gc_collectr�rrr�test_resource_warning�
s



�z_TestPool.test_resource_warning)"rFrGrHr-r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r��
__classcell__rrr�rr�0	sB	

$


&
r�cCstd��dS)N�key)�KeyErrorrrrr�raising�
sr�cCsdd�S)NcSsdS)N�*rrrrrr��
rz%unpickleable_result.<locals>.<lambda>rrrrr�unpickleable_result�
sr�c@s eZdZdZdd�Zdd�ZdS)�_TestPoolWorkerErrorsr:csjt�d�}dg��fdd�}|jt|d�}|�t|j�|��d�|��dt�|�	�|�
�dS)Nr�cs|�d<dSr�r�r��Z
scratchpadrr�errback�
sz@_TestPoolWorkerErrors.test_async_error_callback.<locals>.errback�r�r)rr�r�r�r�r�r�rmrprr�)r=r�r�rXrr�r�test_async_error_callback�
s
z/_TestPoolWorkerErrors.test_async_error_callbackcs�ddlm}t�d�}td�D]l}dg��fdd�}|jt|d�}|�||j��d}|�	|�|�
�d|�|�|j�|�|j
�q|��|��dS)Nr)�MaybeEncodingErrorr�r
cs|�d<dSr�rr�r�rrr��
sz?_TestPoolWorkerErrors.test_unpickleable_result.<locals>.errbackr�)�multiprocessing.poolr�rr�r�r�r�r�r�rmrpZassertIsNotNoner�rWrr�)r=r�r�Z	iterationr�rX�wrappedrr�r�test_unpickleable_result�
s

z._TestPoolWorkerErrors.test_unpickleable_resultN)rFrGrHr[r�r�rrrrr��
sr�c@s(eZdZdZdd�Zdd�Zdd�ZdS)	�_TestPoolWorkerLifetimer:c	Cstjddd�}|�dt|j��dd�|jD�}g}td�D]}|�|�t|f��q<t	|�D]\}}|�|�
�t|��q^|��d}|r�tdd	�|jD��s�|d
8}t
�t�q�dd�|jD�}|�d|�|�d|�|�t|�t|��|��|��dS)NrPr��ZmaxtasksperchildcSsg|]
}|j�qSr�r�r�rGrrrr��
rzE_TestPoolWorkerLifetime.test_pool_worker_lifetime.<locals>.<listcomp>r��2css|]}|��VqdSr�rnr�rrrrZ�
rzD_TestPoolWorkerLifetime.test_pool_worker_lifetime.<locals>.<genexpr>rNcSsg|]
}|j�qSrr�r�rrrr��
r)rr�rVrrr�r�r�r�rt�	enumerater�Z_repopulate_pool�allr?r�r�r�r�r\rr�)	r=r�Zorigworkerpidsr�r�rrXZ	countdownZfinalworkerpidsrrr�test_pool_worker_lifetime�
s&z1_TestPoolWorkerLifetime.test_pool_worker_lifetimecCsptjddd�}g}td�D]}|�|�t|df��q|��|��t|�D]\}}|�	|�
�t|��qNdS)NrPrNr�r\g333333�?)rr�r�r�r�rtrr�r�rVr�)r=r�r�r�rrXrrr�%test_pool_worker_lifetime_early_close�
sz=_TestPoolWorkerLifetime.test_pool_worker_lifetime_early_closecCs*d}tjj�d|�\}}}|�|d�dS)Na�if 1:
            from multiprocessing import Pool
            problem = None
            class A:
                def __init__(self):
                    self.pool = Pool(processes=1)
            def test():
                global problem
                problem = A()
                problem.pool.map(float, tuple(range(10)))
            if __name__ == "__main__":
                test()
        �-cr)r�r�
script_helper�assert_python_okrV�r=�cmdr��outrErrr�>test_worker_finalization_via_atexit_handler_of_multiprocessing�
s
zV_TestPoolWorkerLifetime.test_worker_finalization_via_atexit_handler_of_multiprocessingN)rFrGrHr[r�r�r�rrrrr��
s
r�)�BaseManager�	BaseProxyr�c@s$eZdZdd�Zdd�Zdd�ZdS)�FooBarcCsdS)N�f()rr^rrrrDszFooBar.fcCst�dSr)r6r^rrr�gszFooBar.gcCsdS)N�_h()rr^rrr�_hsz	FooBar._hN)rFrGrHrDr�r�rrrrr�sr�ccstd�D]}||VqdSr�)r�)r�rrr�bazsr�c@s eZdZdZdd�Zdd�ZdS)�
IteratorProxy)r�cCs|Srrr^rrrr�szIteratorProxy.__iter__cCs
|�d�S)Nr�)�_callmethodr^rrrr�szIteratorProxy.__next__N)rFrGrHZ	_exposed_r�r�rrrrr�sr�c@seZdZdS)�	MyManagerNrrrrrr�sr��Foo)�callable�Bar)rDr�)r�Zexposed)r�Z	proxytypec@s0eZdZdZdd�Zdd�Zdd�Zdd	�Zd
S)�_TestMyManagerrKcCs<t�}|��|�|�|��|�|jjdtjf�dSr�)	r�r��common�shutdownr��_processrtr�r��r=rKrrr�test_mymanager*s

z_TestMyManager.test_mymanagercCsLt��}|�|�Wd�n1s&0Y|�|jjdtjf�dSr�)r�r�r�rrtr�r�rrrr�test_mymanager_context5s(z%_TestMyManager.test_mymanager_contextcCsPt�}|��|�|�|�Wd�n1s20Y|�|jjd�dSr�)r�r�r�rVrrtrrrr�!test_mymanager_context_prestarted=s
(z0_TestMyManager.test_mymanager_context_prestartedcs|���|���|��}�fdd�dD�}�fdd�dD�}|�|ddg�|�|ddg�|����d�|�t�j�|���d�d�|�t	�jd�|����d�|���
�d	�|���d�d�|���d�d	�|�t|�d
d�td�D��dS)Ncsg|]}t�|�r|�qSr�r��r�r )r�rrr�Irz)_TestMyManager.common.<locals>.<listcomp>)rDr�r�csg|]}t�|�r|�qSrrr)�barrrr�JrrDr�r�r�r�cSsg|]}||�qSrrr�rrrr�Yrr�)
r�r�r�rVrDr�r6r�r�r�r�r�r�)r=rKr�Zfoo_methodsZbar_methodsr)rr�rr�Ds z_TestMyManager.commonN)rFrGrHr[rrrr�rrrrr�&s
r�cCstSr)�_queuerrrr�	get_queueasr	c@seZdZdZdS)�QueueManagerz$manager class used by server processN�rFrGrHr�rrrrr
dsr
c@seZdZdZdS)�
QueueManager2z@manager class which specifies the same interface as QueueManagerNrrrrrrhsrZ	xmlrpclibc@s8eZdZdZgd�Zedd�Zedd��Zdd�ZdS)�_TestRemoteManagerrK)�hello worldNT�@uhallå världenuпривіт світs
hall� v�rldenNcCs2t||td�}|��|��}|�t|j��dS)N�rrlZ
serializer)r�
SERIALIZER�connectr	rb�tupler&�r�rrlrKrrrr�_putterys�z_TestRemoteManager._puttercCs�t�d�}ttjdf|td�}|��|�|j�|j	|j
|j|fd�}d|_|��t
|j|td�}|��|��}|�|��|j�|�t|jtj�~dS)N� rrr�T)r3�urandomr
r�HOSTrr�r�r�rzrrrorrr	rVr�r�r�r�rbr?r�)r=rlrKr�Zmanager2rrrr�test_remote�s"
��z_TestRemoteManager.test_remote)	rFrGrHr[r&r�r-rrrrrrr
os
	r
�md5c@s eZdZedd��Zdd�ZdS)�_TestManagerRestartcCs,t||td�}|��|��}|�d�dS)Nrr)r
rrr	rbrrrrr�s�z_TestManagerRestart._putterc
Cs:t�d�}ttjdf|td�}zv|��}|j}|j�	�|�
�|j|j|j|fd�}|�
�|�
�|��}|�|��d�~Wt|d�r�|��nt|d�r�|��0t||td�}z|�
�|�|j�Wndt�y4}zJ|jtjkr�t�d�t||td�}t|d��r |�|j�WYd}~n
d}~00dS)Nrrrr�rr�r)r3rr
rrrZ
get_serverr�listenerrr�rzrr�r	rVr�r�r�r��OSError�errnoZ
EADDRINUSEr?r�)r=rlrKZsrvr�addrr�rr�rrr�test_rapid_restart�sD
�


�

�
�z&_TestManagerRestart.test_rapid_restartN)rFrGrHr-rr rrrrr�s
r�c@s�eZdZdZedd��Zdd�Zdd�Zdd	�Zd
d�Z	edd
��Z
ed$dd��Ze�
ed�dd��Ze�
ed�e�ejdkd�e�edkd�e�
eed�d�dd�����Zedd��Ze�
ed�e�ejdkd�dd ���Zd!d"�Zd#S)%�_TestConnectionrfcCs(t|jt�D]}|�|�q|��dSr)r2�
recv_bytes�SENTINEL�
send_bytesr)r�r�msgrrr�_echo�sz_TestConnection._echoc
CsL|��\}}|j|j|fd�}d|_|��gd�}td�}|d}t�dttd���}|j	dkrv|�
t|���t
�|�
|�|�d�|�
|��|�|�
|�|�d�|�
|��|�|j	dk�r t�dd	gd�}t|�d	gdt|�}	|�
|�|�d�|�
|�|�t|�|j�|�
t|�|	�t�dd	gd�}d	gd
t|�d	gdt|�}	|�
|�|�d�|�
|�|d
|j�t|�|j�|�
t|�|	�ttd��}|�
|�|�d�z|�|�}
Wn8tj�y}z|�
|j|f�WYd}~nd}~00|�d
|
�t|j�}|�
|�d�|�|jd	�|�
|d�d�|�|jd	�|�
|t�d�|�|jt�|�d�t� d�|�
|t�d�|�|jd	�|�
|��d�td�d}
|�|
�|�
|��|
�|�t!�|�"�|j	dk�r@|�
|j#d�|�
|j$d�|�%t&|j�|�%t&|j�|�'�dS)Nr�T)rNrNrr�r�rarJrrPrbz(                                        zexpected BufferTooShort, got %sFr2r#�Xi)(r�rzr'ror�rrBr�r�rhrVr��filenor�r�r�r%r#rrZrecv_bytes_into�itemsize�	bytearrayrZBufferTooShortrArzr:r�rTr<rer?r�r$r�readable�writabler��EOFErrorr�)r=rr0r�r=r&ZlongmsgrC�bufferr�rXr�r�Zreally_big_msgrrr�test_connection�sv
�$�&




z_TestConnection.test_connectioncCs�|jdd�\}}|�|�d�d�|�|��d�|jdkr�|�|jd�|�|jd�|�|jd�|�|jd�|�t|jd�|�t|j�|�t|j	�dS)NFr�rNrJTr�)
r�rVr�r�rhr,r-r�rr�)r=�reader�writerrrr�test_duplex_false0s
z!_TestConnection.test_duplex_falsecCst|��\}}|j|j|fd�}d|_|��|��td�}|�|�|�|�	�|�|�t
�|��|��dS)Nr�Tr�)r�rzr'ror�rrr%rVr#r$r�)r=rr0r�r&rrr�test_spawn_close=s

z _TestConnection.test_spawn_closecCs:|jdkr|�d�|j��td�}|��\}}|�|�|�|��|�|�|d�|�|��|dd��|�|dd�|�|��|dd��|�|d�|�|��td	��|�|dd
�|�|��td	��|�t	|j|d�|�t	|j|dd�|�t	|j|dd
�|�t	|j|d�|�t	|j|dd�dS)NrJrgZabcdefghijklmnopqrstuvwxyzrarbrQ��r!r��rNr2ra)
rhrirjrr�r%rVr#r�r6)r=r&rRrSrrr�test_sendbytesRs&

z_TestConnection.test_sendbytesc
CsXzt�|�Wn@tyN}z(|jtjkr8WYd}~dS�WYd}~nd}~00dSdS)NFT)r3�fstatrr�EBADF)r�rMr�rrr�_is_fd_assignedrsz_TestConnection._is_fd_assignedFcCsd|r.tdd�D]}|�|�st�|��|�qt�|�}trJt�|tj	�}t�
||�t�|�dS)Nrr+)r�r<r3�dup2r)r�recv_handle�msvcrtZopen_osfhandlerJrwr)r�r�dataZcreate_dummy_fdsr�rMrrr�_writefd}s

z_TestConnection._writefd�$test needs multiprocessing.reductioncCs�|jdkr|�d�|jdd�\}}|j|j|dfd�}d|_|��|�tj	j
tj	j�ttj	jd��6}|�
�}tr�t�|�}t�|||j�Wd�n1s�0Y|��ttj	jd�� }|�|��d�Wd�n1s�0YdS)	NrJ�only makes sense with processesTr�sfoor��wb�rb)rhrir�rzrAror�r�r�rr?r>rAr)r?Z
get_osfhandler�send_handlerr�rVrB)r=rr0r�rDrMrrr�test_fd_transfer�s


.z _TestConnection.test_fd_transferr$�*test semantics don't make sense on Windowsr+z)largest assignable fd number is too smallr=ztest needs os.dup2()c
Cs>|jdkr|�d�|jdd�\}}|j|j|ddfd�}d|_|��|�tj	j
tj	j�ttj	jd��x}|�
�}tdt�D]}|�|�s~q�q~|�d	�t�||�zt�|||j�Wt�|�nt�|�0Wd�n1s�0Y|��ttj	jd
�� }|�|��d�Wd�n1�s00YdS)NrJrCTr�sbarr�rDr+z2could not find an unassigned large file descriptorrE)rhrir�rzrAror�r�r�rr?r>rAr)r��MAXFDr<rzr3r=rrFrrr�rVrB)r=rr0r�rDrMZnewfdrrr�test_large_fd_transfer�s(	



6z&_TestConnection.test_large_fd_transfercCst�|��d�dS)N�)r3rwr)�r=rrrr�_send_data_without_fd�sz%_TestConnection._send_data_without_fdzdoesn't make sense on WindowscCs`|jdkr|�d�|jdd�\}}|j|j|fd�}d|_|��|�tt	j
|�|��dS)NrJrCTr�r�)rhrir�rzrMror�r�r�rr>r��r=rr0r�rrr�test_missing_fd_transfer�s

z(_TestConnection.test_missing_fd_transferc	Cs�|��\}}|�p|�L|�d�|�|��d�|jdkrT|�|j�|�|j�Wd�n1sh0YWd�n1s�0Y|jdkr�|�|j�|�|j�|�t	|j�|�t	|j�dS�N�rJ)
r�r�rVr�rhr|�closedrmr�rrQrrrr��s

H
z_TestConnection.test_contextN)F)rFrGrHr[r-r'r0r3r4r9r<rAr7r.�
HAS_REDUCTIONrGrIr�r�rIr�r3rJrMrOr�rrrrr"�s<
O
 




�
��


r"c@s6eZdZdZdd�Zdd�Ze�ej	d�dd��Z
d	S)
�
_TestListenerr:cCsB|jjD]4}|jj|d�}|�|j�|�t|jj|j|�qdS)N��family)�
connection�families�Listenerr�rr�rr)r=rVrjrrr�test_multiple_bind�s�z _TestListener.test_multiple_bindc
Cs�|j����}|j�|j��R}|���*}|�d�|�|��d�Wd�n1sT0YWd�n1sr0YWd�n1s�0Y|jdkr�|�	t
|j�dSrP�rWrY�Clientr�acceptr�rVr�rhr�r)r=rjrdrrrrr��s

j
z_TestListener.test_contextz"test needs abstract socket supportc
Cs�|j�d���}|j�|j��R}|���*}|�d�|�|��d�Wd�n1sV0YWd�n1st0YWd�n1s�0Y|jdkr�|�	t
|j�dS)Nz
somethingrQrJr[)r=r�clientrrrr�test_abstract_socket�s

j
z"_TestListener.test_abstract_socketN)rFrGrHr[rZr�r7r.rZabstract_sockets_supportedr_rrrrrT�s
�rTc@s4eZdZdZedd��Zdd�Zdd�Zdd	�Zd
S)�_TestListenerClientrfcCs"|j�|�}|�d�|��dS)Nr�)rWr\r�r)r�rrrrrr{
s
z_TestListenerClient._testcCsj|jjD]\}|jj|d�}|j|j|jfd�}d|_|��|��}|�	|�
�d�|��|��qdS)NrUr�Tr�)
rWrXrYrzr{rror�r]rVr�r�r)r=rVrjr�rrrr�test_listener_client
sz(_TestListenerClient.test_listener_clientcCsj|j��}|j|j|jfd�}d|_|��t�d�|�	�}|�
|��d�|��|�
�|��dS)Nr�TrNr�)rWrYrzr{rror�r?r�r]rVr�rr�)r=rjr�rrrr�test_issue14725
s

z#_TestListenerClient.test_issue14725cCsh|jjD]Z}|jj|d�}|j�|j�}|��}|�d�|�|�d��|�	�|�	�|�	�qdS)NrU�hellorN)
rWrXrYr\rr]r%rmr�r)r=�famrjrdrRrrr�test_issue16955'
s
z#_TestListenerClient.test_issue16955N)	rFrGrHr[r-r{rarbrerrrrr`
s
r`c@sTeZdZdZdd�Zedd��Zdd�Zedd	��Zd
d�Z	edd
��Z
dd�ZdS)�	_TestPollrfcCsJ|��\}}|�|��d�|�d�|�|��d�|�|��d�dS)NFrT)r�rVr�r%rQrrr�test_empty_string6
s

z_TestPoll.test_empty_stringcCs*|D]}t�d�|�|�q|��dS�Nr#)r?r�r%r)r�r�stringsrrrr�_child_strings=
s
z_TestPoll._child_stringscCsrd}|��\}}|j|j||fd�}|��|D]4}td�D]}|�d�r<qPq<|��}|�||�q0|��dS)N)rcr�a�brsbyerslopr���r�)	r�rzrjr�r�r�r#rVr�)r=rirRrSr�rr�r rrr�test_stringsD
s
z_TestPoll.test_stringscCs|�d�dSr`)r�)r�r<rrr�_child_boundariesS
sz_TestPoll._child_boundariescCsr|�d�\}}|j|j|fd�}|��t�d�ddg}|D]}|�|�q>|��|��|�	|�
�|�dS)NFr�r�sfirstssecond)r�rzror�r?r�r%rr�r�r#)r=r<rGr�r�rrrrr�test_boundaries[
s
z_TestPoll.test_boundariescCs"|�d�|�d�|�d�dS)Nrkrl�cd)r%)r�rSrrr�_child_dont_mergeg
s

z_TestPoll._child_dont_mergecCs�|��\}}|�|�d�d�|�|�d�d�|j|j|fd�}|��|�|��d�|�|�d�d�|�|�d�d�|�|��d�|�|�d�d�|�|�d�d�|�|�d�d�|�|��d	�|��dS)
Nr'Fr#r�rkrTrlrq)r�rVr�rzrrr�r#r�)r=rRrSr�rrr�test_dont_mergem
sz_TestPoll.test_dont_mergeN)rFrGrHr[rgr-rjrnrorprrrsrrrrrf2
s


rfrBc@sPeZdZdZedd��Zedd��Zedd��Zdd	�Zed
d��Z	dd
�Z
dS)�_TestPicklingConnectionsr:cCsddlm}|jtjd�dS)Nr)�resource_sharerr�)rrur8rr�)r�rurrrr��
sz&_TestPicklingConnections.tearDownClasscCs�|D]@}|jj|d�}|�|j�|��}|�|�|��|��qt�tj	df�}|�|�
��|��\}}|�|�|��|��|��dS)NrUr)rWrYr�rr]r�socket�
create_serverrr�getsocknamer�)r�rrXrdrj�new_connrrrr�	_listener�
s


z"_TestPicklingConnections._listenercCsxt|jd�D]*\}}|j�|�}|�|���|��q|��\}}t��}|�|�|�	|���|��|��dSr)
r2r�rWr\r�r3rrvr�sendall)r�rrr&r^rrr�_remote�
s

z _TestPicklingConnections._remotecCs`|jj}|��\}}|j|j||fd�}d|_|��|��|��\}}|j|j|fd�}d|_|��|��|D]D}d|�	d�}	|�
�}
|�|
|	f�|�
�}|�|�
�|	�
��qv|�d�td�}	|�
�}
|�|
|	f�|�
�}g}|�
d�}
|
�s�q|�|
�q�d�|�}|�||	�
��|��|�d�|��|��|��|��dS)Nr�TzThis connection uses family %s�asciiz$This connection uses a normal socketr�r)rWrXr�rzrzror�rr|r
r�r�rVr3rr�r�)r=rXZlconnZlconn0Zlpr�Zrconn0Zrprdr&rry�bufrrrr�
test_pickling�
sF



z&_TestPicklingConnections.test_picklingcCsD|��}|�d�|��|��}|��}|�|d�|��dS)N�all is wellr�)r�r�r)r�rrGr<r&rrr�child_access�
s
z%_TestPicklingConnections.child_accesscCs�|��\}}|j|j|fd�}d|_|��|��|jdd�\}}|�|�|��|�|��d�|��|jdd�\}}|�|�|��|�d�|��|�|��d�|�	�dS)Nr�TFr�r�ZfoobarZfoobarfoobar)
r�rzr�ror�rr�rVr�r�)r=rr0r�r<rGrrr�test_access�
s"


z$_TestPicklingConnections.test_accessN)rFrGrHr[r-r�rzr|rr�r�rrrrrt�
s


.
rtcs<eZdZdZ�fdd�Z�fdd�Zdd�Zdd	�Z�ZS)
�	_TestHeapr:cs*t���tjjj|_tj��tjj_dSr)r�r�rr�r��_heap�old_heapZHeapr^r�rrr�s
z_TestHeap.setUpcs|jtjj_t���dSr)r�rr�r�r�r�r�r^r�rrr�sz_TestHeap.tearDownc
Csjd}d}g}tjjj}d|_t|�D]L}tt�dd�d�}tj�|�}|�	|�t
|�|krnt�|�}||=~q$|j��bg}d}	d}
t
|j���D]@}|D]6\}}
}|�	|j�|�|
|||
df�|	||
7}	q�q�|j��D]B\}}|D]4\}
}|�	|j�|�|
|||
df�|
||
7}
q�q�|�|	|
tdd	�|jD���|��tt
|�d�D]n}||dd
�\}}
}||ddd
�\}}}||k�r�|�||j|j�|�|d�n|�||��q^Wd�n1�s�0Yt�|�|�r
|���q�|�|j|j�|�t
|j�d�|�t
|j�d�|�t
|j�d|j�|�t
|j�d�dS)N�r�rrNr�free�occupiedcss|]}|jVqdSr�rE)r��arenarrrrZ@rz&_TestHeap.test_heap.<locals>.<genexpr>rP)rr�r�r�Z_DISCARD_FREE_SPACE_LARGER_THANr�r��randomZlognormvariater�rrZ	randranger�r�Z_len_to_seqr&Z_arenas�indexZ_allocated_blocksrrV�sum�sortrEZshufflerTZ_n_freesZ
_n_mallocsZ_pending_free_blocks)r=Z
iterationsZ	maxblocksZblocksr�r�rErSr�r�r�r�r�r�r8Zarena_blocksZnarenaZnstartZnstoprrr�	test_heaps`



��
�
0
z_TestHeap.test_heapcCsxt��st��|�tj�t��}|jtjg|�R�t�d�td�D](}tj	�
d�}tj	�
d�}||_||_qJdS)Nr�r�rN)r�Z	isenabledZenabler�Zdisable�
get_threshold�
set_thresholdr�rr�r�Zbuddy)r=Z
thresholdsr�rRrSrrr�test_free_from_gcZs
z_TestHeap.test_free_from_gc)	rFrGrHr[r�r�r�r�r�rrr�rr�s
@r�c@s"eZdZdefdefdefgZdS)�_Foor r!�zN)rFrGrHr.r/r0Z_fields_rrrrr�ts�r�c@s>eZdZdZdd�Zedd��Zddd�Zd	d
�Zdd�Z	d
S)�_TestSharedCTypesr:cCsts|�d�dSr"r#r^rrrr�sz_TestSharedCTypes.setUpcCsz|jd9_|jd9_|jd9_|jd9_|jd9_|jd9_tt|��D]}||d9<q`dSr�)rWr r!r�rr)r�r r!r�r�rC�stringr�rrr�_double�sz_TestSharedCTypes._doubleFc
Cstdd|d�}ttd|d�}ttd|d�}ttdd|d�}|jdttd	��|d�}|jd
d|d�}td�|_|j	|j
||||||fd
�}d|_|��|�
�|�|jd�|�|jd�|�|jd�|�|jd�|�|jd�td	�D]}	|�||	|	d�q�|�|jtd��dS)Nr�rbr0gUUUUUU�?rrPr�rr�rdr
r�r�T�gUUUUUU�?rr\�@Z
hellohello)rr/r0r�rAr�r�rrWrzr�ror�r�rVrPr r!)
r=r�r r!r�r�rCr�r�r�rrr�test_sharedctypes�s&
z#_TestSharedCTypes.test_sharedctypescCs|jdd�dS)NTr0)r�r^rrr�test_synchronize�sz"_TestSharedCTypes.test_synchronizecCsTtddd�}t|�}d|_d|_d|_|�|jd�|�|jd�|�|jd�dS)Nr��@rr)r�r	r r!r�rVrP)r=r�rrrr�	test_copy�sz_TestSharedCTypes.test_copyN)F)
rFrGrHr[r�r-r�r�r�r�rrrrr�{s


r�z&requires multiprocessing.shared_memoryc@s�eZdZdZedd��Zdd�Ze�e	j
dkd�dd	��Zd
d�Ze�e
jdkd
�dd��Ze�e
jdkd�dd��Zdd�Zdd�Zdd�Zdd�ZdS)�_TestSharedMemoryr:cCs8t|t�rt�|�}n|}||jdt|��<|��dSr)rr6r
�SharedMemoryr~rrr)Zshmem_name_or_objZbinary_dataZ	local_smsrrr�!_attach_existing_shmem_then_write�s

z3_TestSharedMemory._attach_existing_shmem_then_writecCs|tt���Sr)r6r3rs)r=�prefixrrr�
_new_shm_name�sz_TestSharedMemory._new_shm_namer$ztest is broken on Windowsc	s�|�d�}tj|ddd�}|�|j�|�|j|�|�|jd�|�t	|j
�|j�d|j
d<|�|j
dd�t�|�}|�|j
dd�|��tj|d|jd�}|�|jd|j�|��|�
t��tjdd	d�Wd�n1s�0Y|�
t��tjd
d�Wd�n1�s,0Ytj�d���}tj�|�d
�|�d�g}�fdd�|D�}||_tjddd�}|�|j�|�|j|d�||_tjddd�}|�|j�|�|j|d�Wd�n1�s�0Ytj�r�|�d�}	tj|	ddd�}
|�
t��Xz<|�|
jd�t�|	�}|��|��|
��W|
��n
|
��0Wd�n1�s�0Y|�
t�� tj|ddd�}Wd�n1�s�0Ytj�rGdd�dtj�}
|
|�}|�|j|j�|��|�
t��"t�d�}|��Wd�n1�s40Y|��|�
t��tjddd�}Wd�n1�sv0Y|�
t��tjddd�}Wd�n1�s�0Y|�
t��tjdd�}Wd�n1�s�0YdS)NZtest01_tsmbT���createrEr�rr
r����F�r�z,multiprocessing.shared_memory._make_filenameZ	test01_fnZ	test02_fncsg|]}�|�qSrrr�ZNAME_PREFIXrrr��rz?_TestSharedMemory.test_shared_memory_basics.<locals>.<listcomp>rNZtest01_dblunlinkr�c@seZdZejejBZdS)zO_TestSharedMemory.test_shared_memory_basics.<locals>.OptionalAttachSharedMemoryN)rFrGrHr3rK�O_RDWRZ_flagsrrrr�OptionalAttachSharedMemory'sr�Ztest01_nottherer2)r�r
r�r�r?rVr r|rErrr~rr�r�r6r7�mockZpatchZ_SHM_NAME_PREFIXZside_effect�_nameZ
_USE_POSIX�FileNotFoundError�FileExistsError)r=Z	name_tsmb�smsZalso_smsZsame_smsZmock_make_filename�namesZshm1Zshm2Zname_dblunlinkZsms_unoZsms_duoZthere_can_only_be_one_smsr�Zok_if_exists_smsZnonexisting_smsZsms_invalidrr�r�test_shared_memory_basics�s�


,,�2
�

4�&
(..z+_TestSharedMemory.test_shared_memory_basicscCs�tjddd�}|�|j�|j|j|jdfd�}d|_|��|�	�|�
t|jdd��d�|j|j|dfd�}d|_|��|�	�|�
t|jdd��d�|�
�dS)NTr�r�showdyr�rasHELLO)r
r�r�r?rzr�r ror�r�rVrqr~r)r=r�r�rrr�#test_shared_memory_across_processesAs&��z5_TestSharedMemory.test_shared_memory_across_processesrz#not feasible in non-posix platformscCs�tj��}|��|�td��}t�|jj	t
j�|�td��}|�t
��"t�t��t
j�Wd�n1sr0Y|��dSr�)r�managers�SharedMemoryManagerr��
ShareableListr�r3r�rrr�r*r�r�rsr�)r=�smm�slZsl2rrr�4test_shared_memory_SharedMemoryServer_ignores_sigint]s
0zF_TestSharedMemory.test_shared_memory_SharedMemoryServer_ignores_sigintzresource_tracker is posix onlycCs(d}tjj�d|�\}}}|�|�dS)Nz�if 1:
            from multiprocessing.managers import SharedMemoryManager


            smm = SharedMemoryManager()
            smm.start()
            sl = smm.ShareableList(range(10))
            smm.shutdown()
        r�)r�rr�r�r|r�rrr�>test_shared_memory_SharedMemoryManager_reuses_resource_trackerus	zP_TestSharedMemory.test_shared_memory_SharedMemoryManager_reuses_resource_trackercs�tj���|�t���jdd�Wd�n1s60Y����fdd�tdd�D�}�fdd�tdd	d
�D�}tj	|dj
jd�}|�t
|�d�tj|djd�}|�t
|j�d�|dj}���tjd
k�r|�t��tj|d�}Wd�n1�s0Ytj���.}|�	d�}|jd	d�}	|j
j}Wd�n1�sX0Ytjd
k�r�|�t��tj	|d�}
Wd�n1�s�0YdS)NrLr�csg|]}��t|���qSr)r�r�r��Zsmm1rrr��rzS_TestSharedMemory.test_shared_memory_SharedMemoryManager_basics.<locals>.<listcomp>rar�csg|]}�j|d��qS)r�)r�)r�rr�rrr��rr��r�r r$�howdy)rr�r�r�r6r�r�r�r
r��shmr rVrrr|r~r�r�r�r�)r=ZlolZlomZdoppleganger_list0Zdoppleganger_shm0Z	held_nameZ
absent_shmZsmm2r�r�Z	absent_slrr�r�-test_shared_memory_SharedMemoryManager_basics�s,
*
,
(z?_TestSharedMemory.test_shared_memory_SharedMemoryManager_basicsc	Cst�gd��}|�|jj�|�|jd�|�t|�d�t�	��`t�
d�|�t��|�
d�Wd�n1sx0Y|�|�
d�d�Wd�n1s�0Y|�|dd	�|�|d
d�|�t|�d�d|d<|�|dd�d
|d<|�|dd
�|�|jd�|�td��d|d<Wd�n1�sL0Y|�|dd
�d|d<|�|dd�|�|dd�|�td��d|d<Wd�n1�s�0Y|�|dd�|�td��d|d<Wd�n1�s0Y|�|dd�t�	��Pt�
d�|�|�d�d�|�|�d�d�|�|�d�d�Wd�n1�sz0Y|�d�}tj||d�}z�|�|jj|jj�|�||jj�|�t|�t|��|�|j|j�d|d<|�|dd�|�|dd�|j��W|j��n|j��0tj|jjd�}|�|jj|jj�d|d<|�|dd�|j��|j��t��}z~|�t|�d�|�|jd�|�|�d�d�|�t��|�
d�Wd�n1�s�0Y|j��W|j��n|j��0dS) N)r��HoWdYgX9��vq�r�NTr�z8s8sdqxxxxxx?xxxxxxxx?qrb�ignoreZ100r�rPrr�r�Tr�Zsomeraz8s8sdq8sxxxxxxx?qzexceeds available storagezfar too manyuencodésrNr�u	encodéess	123456789r�sadiosZtest03_duplicater��Mr2ipr!�any)r
r�r�r�r?rVrjrr�warnings�catch_warnings�simplefilterr�r6r�rr�r�r�r�r r�r)r=r�Zname_duplicateZsl_copyZsl_tetheredZempty_slrrr�'test_shared_memory_ShareableList_basics�s��

(0��(�(�(

2


*z9_TestSharedMemory.test_shared_memory_ShareableList_basicscCs�t�td��}|�|jj�t�|�}t�|�}|�	t
|tj��|�	|dd�|�||u�d|d<|�|dd�dt
|jj�}t�td��}|�|jj�t�|�}|�	t
|�t
|�k�|j��|j��|j��dS)Nr�r2rLZchangedrarRi�)r
r�r�r�r�r?�pickle�dumps�loadsrmrr|rVrrr r)r=r�Z
serialized_slZdeserialized_slr Z	larger_slZserialized_larger_slrrr�)test_shared_memory_ShareableList_picklings&


�


z;_TestSharedMemory.test_shared_memory_ShareableList_picklingc	Csd}tjtjdd|gtjtjd���}|j������}|�	�|�
�t��t
j}d}t��|kr�t�|�t|dd�}ztj|dd	�}WqXty�Yq�YqX0qXtd
��tjdkr�t�d|��d
�|j����}|�d|�Wd�n1s�0YdS)NaXif 1:
            import os, time, sys
            from multiprocessing import shared_memory

            # Create a shared_memory segment, and send the segment name
            sm = shared_memory.SharedMemory(create=True, size=10)
            sys.stdout.write(sm.name + '\n')
            sys.stdout.flush()
            time.sleep(100)
        �-Er�rr#r�raFr�zJA SharedMemory segment was leaked after a process was abruptly terminated.r�/r
z[resource_tracker: There appear to be 1 leaked shared_memory objects to clean up at shutdown)�
subprocess�Popenr��
executable�PIPEr�readline�strip�decoder�r&r?r@rr�r��minr
r�r�r�r3r rZ
unregisterrrBr�)r=r�r�r �deadlinerCr�rErrr�4test_shared_memory_cleaned_after_process_termination!s4
�

�zF_TestSharedMemory.test_shared_memory_cleaned_after_process_terminationN)rFrGrHr[r�r�r�r7rIr�r�r�r�r3r r�r�r�r�r�r�rrrrr��s

x

`r�c@s<eZdZdZdd�Zdd�Zedd��Zdd	�Zd
d�Z	dS)
�
_TestFinalizer:cCstj��|_tj��dSr)r�_finalizer_registryr	�registry_backuprr^rrrr�[sz_TestFinalize.setUpcCs&t��|�tj�tj�|j�dSr)r�r�r|rr��updater�r^rrrr�_sz_TestFinalize.tearDowncCs&Gdd�dt�}|�}tj||jdd�~t��|�}tj||jdd�}|�|�~t��|�}tj||jdd�|�}tj||jddd	�|�}tj||jd
dd	�|�}	tj|	|jddd	�|�}
tj|
|jd
dd	�tjd|jddd	�tjd|jddd	�t��|��t�	d�dS)Nc@seZdZdS)z)_TestFinalize._test_finalize.<locals>.FooNrrrrrr�fsr�)rRr�)rS)rd)�d10rN)rA�exitpriority)�d01r)�d02)�d03�r�i����)�STOPi����)
r�r�Finalizer�r�r�Z_exit_functionrr3�_exit)r�rr�rRrSZclose_brdr�r�r�r�rrr�_test_finalizeds4z_TestFinalize._test_finalizecCs^|��\}}|j|j|fd�}d|_|��|��dd�t|jd�D�}|�|gd��dS)Nr�TcSsg|]}|�qSrr)r�rrrrrr��rz/_TestFinalize.test_finalize.<locals>.<listcomp>r�)rRrSr�r�r�r�r�)	r�rzr�ror�r�r2r�rV)r=rr0r�r�rrr�
test_finalize�sz_TestFinalize.test_finalizec	sdd��G�fdd�dt��d�d���fdd�}���fdd	�}t��}t��}z�t�d
�t�ddd�tj|d�tj|d�g}t	j
�|��t�
d
�d�Wd�n1s�0Y�durʈ�Wt�|�tj|�t��nt�|�tj|�t��0dS)NcSsdSrrrrrr�cb�sz,_TestFinalize.test_thread_safety.<locals>.cbcseZdZ�fdd�ZdS)z-_TestFinalize.test_thread_safety.<locals>.Foocs"||_tj|�t�dd�d�dS)NrNr�)r�)r�rr�r�Zrandintr^�r�rrr>�sz6_TestFinalize.test_thread_safety.<locals>.Foo.__init__N)rFrGrHr>rr�rrr��sr�Fc
sR�sNt�t��d�zt��WqtyJ}z|�WYd}~qd}~00qdSrh)r?r�r�rZ_run_finalizersr�r�)r��finishrr�run_finalizers�sz8_TestFinalize.test_thread_safety.<locals>.run_finalizersc
sdi}�s`z$�fdd�td�D�|t�d�<Wqty\}z|�|��WYd}~qd}~00qdS)Ncsh|]
}���qSrrr�)r�rr�	<setcomp>�rzL_TestFinalize.test_thread_safety.<locals>.make_finalizers.<locals>.<setcomp>r�ra)r�r�Zgetrandbitsr�r)rr�)r�r�r�rr�make_finalizers�s$z9_TestFinalize.test_thread_safety.<locals>.make_finalizersg���ư>rarwr�T)r�r��getswitchintervalr�r��setswitchintervalr�r�r
r�rZ
start_threadsr?r�r�)r=r�r�Zold_intervalZ
old_thresholdrLr)r�r�r�r�r�test_thread_safety�s2


�
"


�

z _TestFinalize.test_thread_safetyN)
rFrGrHr[r�r�r-r�r�r�rrrrr�Ws
'r�c@seZdZdd�Zdd�ZdS)�_TestImportStarcCshddl}tj�tj�}tj�|�|�d�}|�|�}dd�|D�}dd�|D�}|�d�|�	d�|S)Nrz*.pycSs(g|] }tj�tj�|�d�d�qS)rNr)r3�path�splitext�split)r�rDrrrr��rz4_TestImportStar.get_module_names.<locals>.<listcomp>cSsg|]}d|�qS)zmultiprocessing.r)r�r�rrrr��rzmultiprocessing.__init__r)
�globr3r��dirnamer�__file__r��escaperr�)r=r�Zfolder�pattern�files�modulesrrr�get_module_names�s


z _TestImportStar.get_module_namescCs�|��}tjdkr2|�d�|�d�|�d�n|�d�tsJ|�d�tdur\|�d�|D]N}t|�tj|}|�t	|d�|�|j
D]}|�t	||�d||f�q�q`dS)	Nr$zmultiprocessing.popen_forkz multiprocessing.popen_forkserverz!multiprocessing.popen_spawn_posixz!multiprocessing.popen_spawn_win32zmultiprocessing.sharedctypes�__all__z%r does not have attribute %r)r�r�r�rrSr.ryr�rmr�r�)r=r�r �mod�attrrrr�test_import�s&








�z_TestImportStar.test_importN)rFrGrHr�rrrrrr��sr�c@s,eZdZdZdd�Zedd��Zdd�ZdS)	�_TestLoggingr:cCsDt��}|�tj�|�|du�|�d�|�d�|�t�dS)Nzthis will not be printedz
nor will this)	r�
get_logger�setLevelr�
SUBWARNINGrm�debug�info�	LOG_LEVEL)r=�loggerrrr�test_enable_loggings

z _TestLogging.test_enable_loggingcCst��}|�|���dSr)rrr�ZgetEffectiveLevel)r�rrrrr�_test_level	sz_TestLogging._test_levelc	Cs�d}d}t��}t��}|j}tjdd�\}}|�|�|j|j|fd�}|�	�|�
||���|��|�
�|�tj�|�|�|j|j|fd�}|�	�|�
||���|��|�
�|�|�|jtd�dS)Nr�%Fr�r�)�level)rr�loggingZ	getLoggerrr�rrzr
r�rVr�r�rZNOTSETr)	r=ZLEVEL1ZLEVEL2rZroot_loggerZ
root_levelr1r2r�rrr�
test_levels*


z_TestLogging.test_levelN)rFrGrHr[r	r-r
rrrrrr�s

rc@s6eZdZdZedd��Ze�ee	d�d�dd��Z
dS)	�_TestPollEintrr:cCst�d�t�|tj�dSrh)r?r�r3r�r��SIGUSR1)r�rrrr�_killerFs
z_TestPollEintr._killerr�requires SIGUSR1c
s�dg��fdd�}t��}t�tj|�}z�|j|j|fd�}|��z,|jtjdd�}|��|�	�W|�	�n
|�	�0|�
�d�|�|jd�Wt�tj|�nt�tj|�0dS)NFcsd�d<dS)NTrrr��Z
got_signalrr�recordNsz._TestPollEintr.test_poll_eintr.<locals>.recordr�)r�r)
r3rsr�rrzrr�r?r�r�rmrVrt)r=rrZ
oldhandlerZkillerr�rrr�test_poll_eintrKs
z_TestPollEintr.test_poll_eintrN)rFrGrHr[r-rr7r.r�r�rrrrrrBs

rc@s eZdZe�ed�dd��ZdS)�TestInvalidHandle�skipped on Windowsc	Cs^tj�d�}z.z|��Wnttfy0Yn0Wd|_nd|_0|�ttftjjd�dS)Ni�M�r2)rrWZ
Connectionr�r6rZ_handler�rLrrr�test_invalid_handlesfs
�z&TestInvalidHandle.test_invalid_handlesN)rFrGrHr7rI�WIN32rrrrrrds
rc@seZdZdd�Zdd�ZdS)�	OtherTestcCs,Gdd�dt�}|�tjtjj|�d�dS)Nc@seZdZdd�Zdd�ZdS)zFOtherTest.test_deliver_challenge_auth_failure.<locals>._FakeConnectioncSsdS)N�something bogusr�r=rErrrr#|szQOtherTest.test_deliver_challenge_auth_failure.<locals>._FakeConnection.recv_bytescSsdSrr�r=r@rrrr%~szQOtherTest.test_deliver_challenge_auth_failure.<locals>._FakeConnection.send_bytesN)rFrGrHr#r%rrrr�_FakeConnection{sr�abc)r�r�r�AuthenticationErrorrWZdeliver_challenge�r=rrrr�#test_deliver_challenge_auth_failurezs
�z-OtherTest.test_deliver_challenge_auth_failurecCs,Gdd�dt�}|�tjtjj|�d�dS)Nc@s$eZdZdd�Zdd�Zdd�ZdS)zEOtherTest.test_answer_challenge_auth_failure.<locals>._FakeConnectioncSs
d|_dSr�)r�r^rrrr>�szNOtherTest.test_answer_challenge_auth_failure.<locals>._FakeConnection.__init__cSs2|jd7_|jdkr tjjS|jdkr.dSdS)NrNr�rr)r�rrWZ	CHALLENGErrrrr#�s

zPOtherTest.test_answer_challenge_auth_failure.<locals>._FakeConnection.recv_bytescSsdSrrrrrrr%�szPOtherTest.test_answer_challenge_auth_failure.<locals>._FakeConnection.send_bytesN)rFrGrHr>r#r%rrrrr�srr)r�r�rr rWZanswer_challenger!rrr�"test_answer_challenge_auth_failure�s
�z,OtherTest.test_answer_challenge_auth_failureN)rFrGrHr"r#rrrrrws
rcCs|jd7_dSrM)r�)�nsrrr�initializer�sr%c@s,eZdZdd�Zdd�Zdd�Zdd�Zd	S)
�TestInitializerscCs"t��|_|j��|_d|j_dSr�)r�Manager�mgrrrr$r�r^rrrr��s
zTestInitializers.setUpcCs|j��|j��dSr)r(r�r�r^rrrr��s
zTestInitializers.tearDowncCsNtj��}|�t|jd�|�t|jf�|�|jj	d�|�
�|��dSrM)rr��SyncManagerr��	TypeErrorr�r%r$rVr�r�r�)r=r�rrr�test_manager_initializer�s
z)TestInitializers.test_manager_initializercCsH|jttjdd�t�dt|jf�}|��|��|�|jj	d�dS)NrN)r%)
r�r*rr�r%r$rr�rVr�r�rrr�test_pool_initializer�s
z&TestInitializers.test_pool_initializerN)rFrGrHr�r�r+r,rrrrr&�sr&cCs*z|jdd�}Wntjy$Yn0dS)NF)�block)r�rdrl)rc�itemrrr�_this_sub_process�sr/cCs2t��}tjt|fd�}d|_|��|��dSr�)rrrzr/ror�r�)rZsubProcrrr�
_test_process�s
r0cCs||Srrrxrrr�_afunc�sr1cCs0tjdd�}|�tgd��}|��|��dS)Nrar:)rNr�rPrarar\rb)rr�r�r1rr�)r�r rrr�pool_in_process�sr2c@s0eZdZdd�Zedd��Zdd�Zdd�Zd	S)
�
_file_likecCs||_d|_dSr)�	_delegate�_pid)r=Zdelegaterrrr>�sz_file_like.__init__cCs$t��}||jkr||_g|_|jSr)r3rsr5�_cacher�rrr�cache�s

z_file_like.cachecCs|j�|�dSr)r7r�rrrrrw�sz_file_like.writecCs|j�d�|j��g|_dS)Nr!)r4rwr�r7r6r^rrr�flush�sz_file_like.flushN)rFrGrHr>�propertyr7rwr8rrrrr3�s

r3c@s$eZdZdd�Zdd�Zdd�ZdS)�TestStdinBadfiledescriptorcCs tjtd�}|��|��dS�Nrw)rrzr0r�r�)r=rrrr�test_queue_in_process�sz0TestStdinBadfiledescriptor.test_queue_in_processcCs tjtd�}|��|��dSr;)rrzr2r�r�r�rrr�test_pool_in_process�sz/TestStdinBadfiledescriptor.test_pool_in_processcsJt��}t|����d�tj�fdd�d�}���|��dksFJ�dS)Nr�cs���Sr)r8r�Zflikerrr��rz:TestStdinBadfiledescriptor.test_flushing.<locals>.<lambda>rw)rrr3rwrrzr8r�)r=Zsiorrr>r�
test_flushing�s
z(TestStdinBadfiledescriptor.test_flushingN)rFrGrHr<r=r?rrrrr:�sr:c@sleZdZedd��Zddd�Zedd��Zddd	�Zd
d�Zdd
�Z	dd�Z
edd��Zdd�Zdd�Z
dS)�TestWaitcCsBtd�D],}|r"t�t��d�|�|t��f�q|��dS)Nr�r#)r�r?r�r�r�r3rsr)r�rG�slowr�rrr�_child_test_wait�s
zTestWait._child_test_waitFc	sddlm}g}g�g}td�D]^}tjdd�\}}tj|j||fd�}d|_|��|�	�|�
|���
|�|�|j�q |r�||�D]@}z|�
�}	Wn$ty�|�|�|�	�Yq�0|�
|	�q�q�|��t�fdd	�td
�D��}
|�||
�dS)Nrr%raFr�r�Tc3s"|]}�D]}||jfVq
qdSrr�)r�r�r��r�rrrZ rz%TestWait.test_wait.<locals>.<genexpr>r�)�multiprocessing.connectionr&r�rr�rzrBror�rr�r�r�r�r.rr�r\rV)r=rAr&�readersZmessagesr�r<rGr�r&r�rrCr�	test_waits0


zTestWait.test_waitcCsVt��}|�|�td�D].}|r4t�t��d�|�d|�d��q|��dS)Nr�r#�%s
r})	rvrr�r?r�r�r{r
r)r�rrArr�rrr�_child_test_wait_socket#s
z TestWait._child_test_wait_socketcCs2ddlm}t�tjdf�}|��}g}g}i}td�D]<}tj	|j
||fd�}	d|	_|	��|�
|	�|�|	j�q8td�D]"}|��\}
}|�
|
�g||
<q~|��|r�||�D]4}
|
�d�}|s�|�|
�|
��q�||
�
|�q�q�d�dd	�td
�D���d�}
|��D]}|�d�|�|
��qdS)
Nrr%rar�Trr!css|]}d|VqdS)rGNrr�rrrrZLrz,TestWait.test_wait_socket.<locals>.<genexpr>r�r}r)rDr&rvrwrrrxr�rrzrHror�r�r�r�r]rr�rr
r&rV)r=rAr&rjrrEr�Zdicr�r�r<r�r&r��vrrr�test_wait_socket-s:�





zTestWait.test_wait_socketcCs|�d�dSr�)rFr^rrr�test_wait_slowPszTestWait.test_wait_slowcCs|�d�dSr�)rJr^rrr�test_wait_socket_slowSszTestWait.test_wait_socket_slowcCs�ddlm}d}t��\}}t��}|||g|�}t��|}|�|g�|�||d�|�||d�|�	d�t��}|||gd�}t��|}|�||g�|�|d�dS)Nrr%rar�rr
皙�����?)
rDr&rr�r?r@rVr�r�r�)r=r&r�rRrSr�rXr}rrr�test_wait_timeoutVs
zTestWait.test_wait_timeoutcCs|��t�|�dSr)r�r?r�)r�r�Zperiodrrr�signal_and_sleepmszTestWait.signal_and_sleepcCs�ddlm}d}dd�}t�d�}t��\}}tj|j||fd�}|��|�|j	t
�|�|jdd��t
��}|||j	|g|d�}	t
��|}
|�|	|j	g�|�|
|d	�|�|
|d	�|�d�t
��}|||j	|gd�}	t
��|}
|�||	�||j	|g��|�|
d
�|�d�t
��}|||j	|gd�}	t
��|}
|�||	�|||j	|g��|�|
d
�|��|��dS)Nrr%rPcSst|dd�d�S)NcSst|�Sr)r�rxrrrr�vrz>TestWait.test_wait_integer.<locals>.<lambda>.<locals>.<lambda>)r�)r\)rjrrrr�vrz,TestWait.test_wait_integer.<locals>.<lambda>r�r
r�r�rM)rDr&rr�r�rzrOr�rpr�r�rmr�r?r@rVr�r�r�r�r�)r=r&r�Zsorted_r�rRrSr�r�rXr}rrr�test_wait_integerrs>
�

zTestWait.test_wait_integercCsfddlm}t��\}}t��}||gdd�}t��|}|�|g�|�|d�|��|��dS)Nrr%r2r�rN)	rDr&rr�r?r@rVr�r)r=r&rRrSrCrXrrr�test_neg_timeout�szTestWait.test_neg_timeoutN)F)F)rFrGrHr-rBrFrHrJrKrLrNrOrPrQrrrrr@�s


	
#
+r@c@s4eZdZe�ed�dd��Ze�ed�dd��ZdS)�TestInvalidFamilyrcCs:|�t��tj�d�Wd�n1s,0YdS)Nz\\.\test�r�r6rrWrYr^rrr�test_invalid_family�sz%TestInvalidFamily.test_invalid_familyz skipped on non-Windows platformscCs:|�t��tj�d�Wd�n1s,0YdS)Nz/var/test.piperSr^rrr�test_invalid_family_win32�sz+TestInvalidFamily.test_invalid_family_win32N)	rFrGrHr7rIrrTr.rUrrrrrR�s


rRc@s,eZdZedd��Zedd��Zdd�ZdS)�	TestFlagscCs|�ttj��dSr)r�rr��flags�r�rrrr�run_in_grandchild�szTestFlags.run_in_grandchildcCsrddl}tjdd�\}}tj|j|fd�}|��|��}|��|��|��t	t
j�|f}t|�
|��dS)NrFr�r�)�jsonrr�rzrYr�r�r�rrr�rW�printr�)r�rZr<rGr��grandchild_flagsrWrrr�run_in_child�szTestFlags.run_in_childcCsHddl}d}t�tjdddd|g�}|�|�d��\}}|�||�dS)NrzJfrom test._test_multiprocessing import TestFlags; TestFlags.run_in_child()r�z-Sz-Or�r})rZr�Zcheck_outputr�r�r�r�rV)r=rZ�progr@Zchild_flagsr\rrr�
test_flags�s�zTestFlags.test_flagsN)rFrGrHr-rYr]r_rrrrrV�s


rVc@s eZdZedd��Zdd�ZdS)�TestTimeoutscCs>t�d�|�d�|��tj�|�}|�d�|��dS)NrNrlrm)r?r�r�rrrWr\)r��childrrrrr�
_test_timeout�s


zTestTimeouts._test_timeoutc	Cs�t��}z�t�d�tjdd�\}}tjjdd�}tj|j||j	fd�}|�
�|��|�|�
�d�|��|��}|�|�
�d�|��|��t|�Wt�|�nt�|�0dS)	Nr#Tr��AF_INETrUr�rlrm)rvZgetdefaulttimeoutZsetdefaulttimeoutrr�rWrYrzrbrr�rrVr�r]r)r=Zold_timeout�parentrarjr�rrrrr~�s$
�
zTestTimeouts.test_timeoutN)rFrGrHr-rbr~rrrrr`�s
r`c@seZdZdd�ZdS)�TestNoForkBombcCs�t��}tj�tj�t�d�}|dkrVtjj	�
||�\}}}|�|d�|�d|�n2tjj	�
||�\}}}|�|��d�|�|d�dS)Nzmp_fork_bomb.pyr�rsRuntimeErrors123)rr�r3r�r�r�r�r�rr�Zassert_python_failurerVr�r�rR)r=r�r r�r�rErrr�test_noforkbomb�szTestNoForkBomb.test_noforkbombN)rFrGrHrfrrrrre�srec@s eZdZedd��Zdd�ZdS)�TestForkAwareThreadLockcCsV|dkr:tj|j|d|fd�}|��|��t|�n|�ttj	��|��dS)NrNr�)
rrzrar�rrr�rrr�_afterfork_registry)r�r�rr�rrrras
zTestForkAwareThreadLock.childcCsdt�d�\}}t��}ttj�}tj|jd|fd�}|��|�	�|�
�}t|�|�||�dS)NFrar�)
rr�rZForkAwareThreadLockrrrhrzrar�rr�rZassertLessEqual)r=r<rGrjZold_sizer�Znew_sizerrrr�s
z!TestForkAwareThreadLock.test_lockN)rFrGrHr-rar�rrrrrgs

rgc@s0eZdZdd�Zdd�Zedd��Zdd�Zd	S)
�TestCloseFdscCsZtrt����St����}g}|dkr>|�|�t�|�}q |D]}t�|�qB|SdS)Nr�)rrv�detachr�r3�dupr)r=rMZto_closer rrr�get_high_socket_fd0s
zTestCloseFds.get_high_socket_fdcCs,trtjtjtj|d���n
t�|�dS)N)r))rrvrc�SOCK_STREAMrr3)r=rMrrrrBszTestCloseFds.closec
Cs\zt�|tjtj�}Wn.tyD}z|�|�WYd}~nd}~00|��|�d�dSr)rvZfromfdrcrmr�r�r)r�rrMrr�rrr�_test_closefdsHs zTestCloseFds._test_closefdsc	Cs�tst�d��t��\}}|��}zRtj|j||fd�}|��|�	�|�
�}t|�W|�	|�|�	�|�	�n|�	|�|�	�|�	�0t��dkr�|�
|d�n.d}|�|t�|�|jtjkp�|j|k|�dS)Nzrequires fd picklingr�r�i6')rSr7r8rr�rlrzrnr�rr�rr�r�rprrmrr;Zwinerror)r=r1r2rMr�r�ZWSAENOTSOCKrrr�test_closefdRs2
�


�


�zTestCloseFds.test_closefdN)rFrGrHrlrr-rnrorrrrri.s

	ric@sfeZdZeejej�Zedd��Z	e
�ee
d�d�dd��Zedd��Ze
�ee
d�d�d	d
��ZdS)�TestIgnoreEINTRcCsFdd�}t�tj|�|�d�|��}|�|�|�d|j�dS)NcSsdSrr�r(�framerrrr�wsz-TestIgnoreEINTR._test_ignore.<locals>.handler�ready�x)r�rr�r�r%�
CONN_MAX_SIZE)r�rr�r rrr�_test_ignoreus

zTestIgnoreEINTR._test_ignorerrcCs�t��\}}z�tj|j|fd�}d|_|��|��|�|��d�t	�
d�t�|j
tj�t	�
d�|�d�|�|��d�t	�
d�t�|j
tj�|�|��d|j�t	�
d�|��W|��n
|��0dS)Nr�Trsr#i�rt)rr�rzrvror�rrVr�r?r�r3r�rr�rr�r#rur�rNrrr�test_ignores(�





zTestIgnoreEINTR.test_ignorecCsbdd�}t�tj|�tj���.}|�|j�|��}|�d�Wd�n1sT0YdS)NcSsdSrrrqrrrr��sz6TestIgnoreEINTR._test_ignore_listener.<locals>.handler�welcome)r�rrrWrYr�rr])r�rr�rjrRrrr�_test_ignore_listener�sz%TestIgnoreEINTR._test_ignore_listenercCs�t��\}}z�tj|j|fd�}d|_|��|��|��}t�	d�t
�|jt
j�t�	d�tj�|�}|�|��d�|��W|��n
|��0dS)Nr�Tr#rx)rr�rzryror�rr�r?r�r3r�rr�rrWr\rVr�)r=rr0r�rr^rrr�test_ignore_listener�s �


z$TestIgnoreEINTR.test_ignore_listenerN)rFrGrH�maxrZ
PIPE_MAX_SIZEZ
SOCK_MAX_SIZErur-rvr7r.r�r�rwryrzrrrrrpps
	

	rpc@s@eZdZedd��Zdd�Zdd�Zdd�Zd	d
�Zdd�Z	d
S)�TestStartMethodcCs|�t���dSr)r�rr�rXrrr�_check_context�szTestStartMethod._check_contextcCs^|jdd�\}}|j|j|fd�}|��|��|��}|��|��|�||���dS)NFr�r�)	r�rzr}r�rr�r�rVr�)r=r�r<rGr�Zchild_methodrrr�
check_context�szTestStartMethod.check_contextc	Cs~dD]t}zt�|�}Wnty,YqYn0|�|��|�|�|��|�|�t|jd�|�t|jd�|�|�qdS)N�r�r�r#r�)	rr�r6rVr�r�r��set_start_methodr~)r=�methodr�rrrr��s
zTestStartMethod.test_contextc
Cs�t�t�d}t��}z�dD]�}ztj|dd�WntyHYqYn0|�t��|�t��}|�|��|�|�t	|�j
���|��|�|j
j
���|��|�t�|d7}qWtj|dd�ntj|dd�0|�|d�dS)NrrT�ZforcerN)r�set_forkserver_preload�PRELOADr�r�r6rVr�rmr�rF�lower�
startswithrzr~r|)r=r�Z
old_methodr�r�rrr�test_set_get�s(

�
 zTestStartMethod.test_set_getcCs\t��}tjdkr"|�|dg�n6|�|ddgkpT|ddgkpT|gd�kpT|gd�k�dS)Nr$r�r�r)r�r�r#)rZget_all_start_methodsr�r�rVrm)r=�methodsrrr�test_get_all�s

�
�
�zTestStartMethod.test_get_allcCs�t��dkr|�d�tj�tj�t�d�}tj	j
�|�\}}}|��}|��}|�
�dksd|dkr~t|�t|�|�d�dS)Nr#z*test only relevant for 'forkserver' methodz
mp_preload.py�okr!z(failed spawning forkserver or grandchild)rr�rir3r�r�r�r�r�rr�r�r�rRr[rz)r=r r�r�rErrr�test_preload_resources�s
z&TestStartMethod.test_preload_resourcesN)
rFrGrHr-r}r~r�r�r�r�rrrrr|�s


r|rHc@sHeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zedd��Z	d
d�Z
dS)�TestResourceTrackerc
Cs�d}tjD�]�}|j|d����|dkr6Wd�q
t��\}}tjtjdd|j	||d�g|gtj
d�}t�|�t|dd	d
��4}|�
����d�}|�
����d�}Wd�n1s�0Yt||�|��|��t��tj}	t��|	k�rbt�d�zt||�Wq�t�y^}
z0|�|
jtjtjf�WYd}
~
�qrWYd}
~
q�d}
~
00q�td
|�d���|j���d�}|j��d�	|�}|� ||�|� |d|�Wd�q
1�s�0Yq
dS)Na+if 1:
            import time, os, tempfile
            import multiprocessing as mp
            from multiprocessing import resource_tracker
            from multiprocessing.shared_memory import SharedMemory

            mp.set_start_method("spawn")
            rand = tempfile._RandomNameSequence()


            def create_and_register_resource(rtype):
                if rtype == "semaphore":
                    lock = mp.Lock()
                    return lock, lock._semlock.name
                elif rtype == "shared_memory":
                    sm = SharedMemory(create=True, size=10)
                    return sm, sm._name
                else:
                    raise ValueError(
                        "Resource type {{}} not understood".format(rtype))


            resource1, rname1 = create_and_register_resource("{rtype}")
            resource2, rname2 = create_and_register_resource("{rtype}")

            os.write({w}, rname1.encode("ascii") + b"\n")
            os.write({w}, rname2.encode("ascii") + b"\n")

            time.sleep(10)
        )r!Znoopr�r�)rGr!)Zpass_fdsrrETrHr}rzA z= resource was leaked after a process was abruptly terminated.zutf-8z8resource_tracker: There appear to be 2 leaked {} objectszresource_tracker: %r: \[Errno)!rrrSr3�piper�r�r�r�rjr�rrAr�rRr�r"r�r&r?r@rr�r�rr�rZENOENTZEINVALr�rrBZassertRegex)
r=r�r!r<rGr�rDZname1Zname2r�r�rEr�rrr�test_resource_tracker�sJ��
0

&
�
�z)TestResourceTracker.test_resource_trackerc
Csdddlm}|j}|dur:t�|tj�tj|tjd�t	�
��"t	�d�|��Wd�n1sj0Y|j}t�||�t
�d�t�d�}t	j
dd���}t	�d	�|��}|��|��t�|�}~t��|�|��|�r0|�t|�d
�|d}	|�t|	jt��|�dt|	j �v�n|�t|�d�Wd�n1�sV0YdS)Nr��_resource_tracker)rtr�rr�T)r�alwaysrNzresource_tracker: process died)!� multiprocessing.resource_trackerr�r5r3r�r�r�rZwait_processr�r�r�r'r?r�rr�r�r�r�r�r�r�r�r�rVrrrm�
issubclass�category�UserWarningr6�message)
r=r(Z
should_dier�rr�Zall_warnr�r�Zthe_warnrrr�check_resource_tracker_deathIs:

&



�z0TestResourceTracker.check_resource_tracker_deathcCs|�tjd�dSr�)r�r�r*r^rrr�test_resource_tracker_sigintnsz0TestResourceTracker.test_resource_tracker_sigintcCs|�tjd�dSr�)r�r�r�r^rrr�test_resource_tracker_sigtermrsz1TestResourceTracker.test_resource_tracker_sigtermcCs|�tjd�dSr�)r�r�r�r^rrr�test_resource_tracker_sigkillvsz1TestResourceTracker.test_resource_tracker_sigkillcCs<ddlm}|��|jd|fv}||��M}|�|�dS)Nrr�)r�r�r'r5Z_check_aliver�)rrr�Zreusedrrr�_is_resource_tracker_reusedzs
z/TestResourceTracker._is_resource_tracker_reusedcCstddlm}|��|j}tjdd�\}}tj|j||fd�}|��|�	�}|�
�|��|��|�|�dS)Nrr�Fr�r�)
r�r�r'r5rr�rzr�r�r�r�rrm)r=r�rr<rGr�Zis_resource_tracker_reusedrrr�test_resource_tracker_reused�s�z0TestResourceTracker.test_resource_tracker_reusedN)rFrGrHr�r�r�r�r�r�r�r�rrrrr��sJ%
	r�c@s8eZdZedd��Zdd�Zdd�Zejj	dd��Z
d	S)
�TestSimpleQueuecCs@|��z(|�|���|�|���W|��n
|��0dSr)r&rbrUr�rirrr�_test_empty�s
zTestSimpleQueue._test_emptycCs�t��}t��}t��}tj|j|||fd�}d|_|��|�|���|�	�|�
�|�|���|�|�
�d�|�|�
�d�|�|���|��dS)Nr�TF)r�SimpleQueuer�rzr�ror�rmrUr�r&r|rVr�r�)r=rr]r^rrrr�
test_empty�s"�zTestSimpleQueue.test_emptycCst��}|��|��dSr)rr�r�r=rrrrr��szTestSimpleQueue.test_closecCs0t��}|��|�|jj�|�|jj�dSr)rr�rrmZ_readerrRZ_writerr�rrr�test_closed�szTestSimpleQueue.test_closedN)rFrGrHr-r�r�r�r�rZcpython_onlyr�rrrrr��s
	r�c@seZdZdd�ZdS)�TestPoolNotLeakOnFailurecs�d�g�G��fdd�d�}|�td��:tjjdtjj|d�d�}|��|�	�Wd�n1sh0Y|�
tdd	��D���dS)
NrPcs<eZdZ�fdd�Z�fdd�Zdd�Zdd�Zd	d
�ZdS)zRTestPoolNotLeakOnFailure.test_release_unused_processes.<locals>.FailingForkProcesscs d|_d|_d|_��|�dS)NzFake Process)r rtr�r�)r=r�)�forked_processesrrr>�sz[TestPoolNotLeakOnFailure.test_release_unused_processes.<locals>.FailingForkProcess.__init__cs"�dkrtd���d8�d|_dS)Nr�Manually induced OSErrorrNr�)rr�r^)�will_fail_inrrr��szXTestPoolNotLeakOnFailure.test_release_unused_processes.<locals>.FailingForkProcess.startcSs
d|_dS)N�stoppingr�r^rrrr��sz\TestPoolNotLeakOnFailure.test_release_unused_processes.<locals>.FailingForkProcess.terminatecSs|jdkrd|_dS)Nr�Zstoppedr�r^rrrr��s
zWTestPoolNotLeakOnFailure.test_release_unused_processes.<locals>.FailingForkProcess.joincSs|jdkp|jdkS)Nr�r�r�r^rrrrn�sz[TestPoolNotLeakOnFailure.test_release_unused_processes.<locals>.FailingForkProcess.is_aliveN)rFrGrHr>r�r�r�rnr�r�r�rr�FailingForkProcess�s
r�r�ra)rz)�contextcss|]}|��VqdSrr�)r�rrrrrZ�rzITestPoolNotLeakOnFailure.test_release_unused_processes.<locals>.<genexpr>)r�rrr�r�r7r�Z	MagicMockrr�r|r�)r=r�r�rr�r�test_release_unused_processes�s�
&�z6TestPoolNotLeakOnFailure.test_release_unused_processesN)rFrGrHr�rrrrr��sr�c@sdeZdZdZejjZdd�Zdd�Z	e
dd��ZeZdd	�Z
d
d�Ze
dd
��Zdd�Ze
dd��ZdHdd�Ze
dd��ZdIdd�Ze
dd��ZdJdd�Zdd�Ze
d d!��Zd"d#�Ze
d$d%��Zd&d'�Ze
d(d)��Zd*d+�Ze
d,d-��ZdKd/d0�Zd1d2�Z e
d3d4��Z!d5d6�Z"e
d7d8��Z#d9d:�Z$e
d;d<��Z%d=d>�Z&e
d?d@��Z'dAdB�Z(e
dCdD��Z)dEdF�Z*dGS)L�TestSyncManagerTypesa}Test all the types which can be shared between a parent and a
    child process by using a manager which acts as an intermediary
    between them.

    In the following unit-tests the base type is created in the parent
    process, the @classmethod represents the worker process and the
    shared object is readable and editable between the two.

    # The child.
    @classmethod
    def _test_list(cls, obj):
        assert obj[0] == 5
        assert obj.append(6)

    # The parent.
    def test_list(self):
        o = self.manager.list()
        o.append(5)
        self.run_worker(self._test_list, o)
        assert o[1] == 6
    cCs|��|_|j��d|_dSr)�
manager_classrKr�rr^rrrr�s

zTestSyncManagerTypes.setUpcCsB|jdur(|j��r(|j��|j��|j��d|_d|_dSr)rrnr�r�rKr�r^rrrr�s


zTestSyncManagerTypes.tearDowncCst��dSr)rZ
reap_childrenr�rrrr�szTestSyncManagerTypes.setUpClasscCsxt|j�t��}d}tt���dkrtt�|�|d9}t��|}|dkrdtj	_
t	�dt���d|�d��qtqdS)	Nr�rNr�r�T�"multiprocessing.Manager still has � active children after � seconds)rrr?r@rrrr�r�r�r�environment_altered�
print_warning)r=�
start_timerCr�rrr�wait_proc_exits

��
z#TestSyncManagerTypes.wait_proc_exitcCs@tj||fd�|_d|j_|j��|��|�|jjd�dS)Nr�Tr)rrzrror�r�rVrt)r=Zworkerrrrrr�
run_worker1s

zTestSyncManagerTypes.run_workercCs*|��sJ�|��|��|�d�dS�Nr�)rr&r�r�rrrrrr�8sz TestSyncManagerTypes._test_eventcCs:|j��}|��|�|j|�|��r,J�|�d�dSr�)rKr�r�r�r�rr&�r=r�rrrr�?s

zTestSyncManagerTypes.test_eventcCs|��dSr�r�r�rrr�
_test_lockFszTestSyncManagerTypes._test_lockr�cCs6t|j|��}|�|j|�|��|�t|j�dSr)rrKr�r�r�r�r��r=Zlnamer�rrrr�JszTestSyncManagerTypes.test_lockcCs|��|��dSr�r�r�r�rrr�_test_rlockPsz TestSyncManagerTypes._test_rlockcCs t|j|��}|�|j|�dSr)rrKr�r�r�rrrr�UszTestSyncManagerTypes.test_rlockcCs|��dSrr�r�rrrr�Ysz$TestSyncManagerTypes._test_semaphorer�cCs(t|j|��}|�|j|�|��dSr)rrKr�r�r�)r=�snamer�rrrr�]sz#TestSyncManagerTypes.test_semaphorecCs|jdd�dS)Nr�)r�)r�r^rrrr�bsz+TestSyncManagerTypes.test_bounded_semaphorecCs|��|��dSrr�r�rrr�_test_conditionesz$TestSyncManagerTypes._test_conditioncCs|j��}|�|j|�dSr)rKr�r�r�r�rrr�test_conditionjs
z#TestSyncManagerTypes.test_conditioncCs|jdksJ�|��dSr`)r�rr�rrr�
_test_barriernsz"TestSyncManagerTypes._test_barriercCs|j�d�}|�|j|�dSr`)rKr�r�r�r�rrrr�ssz!TestSyncManagerTypes.test_barriercCs(|�Wd�n1s0YdSrrr�rrr�
_test_poolwszTestSyncManagerTypes._test_poolcCs |jjdd�}|�|j|�dS)Nrar:)rKr�r�r�r�rrr�	test_pool}szTestSyncManagerTypes.test_poolcCsd|��dksJ�|��sJ�|��r(J�|��dks8J�|��rDJ�|��dksTJ�|��s`J�dS�Nr�rar\)rVrXrUr�r�rrr�_test_queue�sz TestSyncManagerTypes._test_queuercCsNt|j|�d�}|�d�|�d�|�|j|�|��s>J�|��rJJ�dSr�)rrKrbr�r�rUrX)r=Zqnamer�rrr�
test_queue�s

zTestSyncManagerTypes.test_queuecCs|�d�dS)Nru)r�r^rrr�test_joinable_queue�sz(TestSyncManagerTypes.test_joinable_queuecCst|ddksJ�|�d�dks"J�|�d�dks4J�|��|��|D]}qHt|�dks^J�|�d�dkspJ�dS)NrrarN)r�r�r��reverserrrT)r�rrr rrr�
_test_list�szTestSyncManagerTypes._test_listcCs>|j��}|�d�|�|j|�|r*J�|�t|�d�dS)Nrar)rKr�r�r�r�rVrrr�rrrrN�s


zTestSyncManagerTypes.test_listcCs�t|�dksJ�|ddks J�|�d�dks2J�t|���dgksHJ�t|���dgks^J�t|���dgkstJ�|��ddiks�J�|��dks�J�dS)NrNr�ra)r�ra)rrr�r�rr]r&r	�popitemr�rrr�
_test_dict�szTestSyncManagerTypes._test_dictcCs<|j��}d|d<|�|j|�|r(J�|�t|�d�dS)Nrar�r)rKr[r�r�rVrrr�rrrr_�s

zTestSyncManagerTypes.test_dictcCs,|jdksJ�|��dksJ�|�d�dS)NrNr�)rWr�r�r�rrr�_test_value�sz TestSyncManagerTypes._test_valuecCs>|j�dd�}|�|j|�|�|jd�|�|��d�dS)Nr�rNr�)rKrr�r�rVrWr�r�rrrr-�szTestSyncManagerTypes.test_valuecCsH|ddksJ�|ddks J�t|�dks0J�t|�ddgksDJ�dS)NrrNr�)rrr�r�rrr�_test_array�sz TestSyncManagerTypes._test_arraycCs$|j�dddg�}|�|j|�dS)Nr�rrN)rKrAr�r�r�rrrrD�szTestSyncManagerTypes.test_arraycCs |jdksJ�|jdksJ�dSr�rur�rrr�_test_namespace�sz$TestSyncManagerTypes._test_namespacecCs(|j��}d|_d|_|�|j|�dSr�)rKrrr r!r�r�r�rrrrs�s
z#TestSyncManagerTypes.test_namespaceN)r�)r�)r�)r)+rFrGrHr�rr�r)r�r�r�r-r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rNr�r_r�r-r�rDr�rsrrrrr��sd











	






r�c@seZdZdd�ZdS)�MiscTestCasecCstj|ttjddgd�dS)NZSUBDEBUGr)ZextraZ	blacklist)rZcheck__all__rr�r^rrr�test__all__�s�zMiscTestCase.test__all__N)rFrGrHr�rrrrr��sr�c@s$eZdZedd��Zedd��ZdS)�	BaseMixincCstjj��tj��f|_dSr)rr�	_danglingr	r��danglingr�rrrr��s
�zBaseMixin.setUpClasscCs�tj��ttjj�t|jd�}|r@dtj_t�	d|���d}tt
j�t|jd�}|rxdtj_t�	d|���d}dS)NrT�Dangling processes: rN�Dangling threads: )r�rr�r�rrr�r�r�r�r�)r�rJrLrrrr��s
zBaseMixin.tearDownClassN)rFrGrHr-r�r�rrrrr��s
r�c@s�eZdZdZejZejZeej�Zeej	�Z	eej
�Z
eej�Zeej�Zeej
�Z
eej�Zeej�Zeej�Zeej�Zeej�Zeej�Zeej�Zeej�Zeej�Zeej�Zeej�Zeej�ZdS)r�rJN)rFrGrHrhrrzrWr�rkr�r�r�r�rrur�r�r�r�r�r�r�rrAr)r@rrrrr�s*
















r�cs
eZdZdZejZee�d��Z	ee�d��Z
ee�d��Zee�d��Zee�d��Z
ee�d��Zee�d��Zee�d	��Zee�d
��Zee�d��Zee�d��Zee�d
��Zee�d��Zee�d��Zedd��Ze�fdd��Ze�fdd��Z�ZS)�ManagerMixinrKz
manager.Queuezmanager.JoinableQueuezmanager.Lockz
manager.RLockzmanager.Semaphorezmanager.BoundedSemaphorezmanager.Conditionz
manager.Eventzmanager.Barrierz
manager.Valuez
manager.Arrayzmanager.listzmanager.dictzmanager.NamespacecOs|jj|i|��Sr)rKr�)r�rArBrrrr�*szManagerMixin.Poolcst���t��|_dSr)r�r�rr'rKr�r�rrr�.s
zManagerMixin.setUpClasscs�t��}d}tt���dkrjt�|�|d9}t��|}|dkrdtj_t�	dt���d|�d��qjqt
��|j�
�d	kr�dtj_t�	d
�t�	|j���|j��|j��d|_t���dS)Nr�rNr�r�Tr�r�r�rz5Shared objects which still exist at manager shutdown:)r?r@rrrr�r�r�rr�r�r�r�rKZ_number_of_objectsZ_debug_infor�r�r�r�)r�r�rCr�r�rrr�3s.
��



zManagerMixin.tearDownClass)rFrGrHrhrrzr9�operator�
attrgetterrrur�r�r�r�r�r�r�rrAr�r[rrr-r�r�r�r�rrr�rr�s,
r�c@s�eZdZdZejjZejjZeejj	�Z	eejj
�Z
eejj�Zeejj�Zeejj
�Z
eejj�Zeejj�Zeejj�Zeejj�Zeejj�Zeejj�Zeejj�Zeejj�Zeejj�Zeejj�ZdS)�ThreadsMixinrLN)rFrGrHrhrZdummyrzrWr�rkr�r�r�rrur�r�r�r�r�r�r�rrArrrrr�Us$r�c
sT|d}t�}hd�}|��D]�\}}t|t�s2qt|t�r�|turFqt|j�|ks^J|j��|jD]r}d|��|dd�}||��d}	Gdd�d||	t	j
�}
|dkr�t�d	�|
�}
||
_
|
_||
_|
||<qdqt|t	j
�rGd
d�d|t�}
||
_
|
_||
_|
||<qddg�dg����fdd�}��fd
d�}||d<||d<dS)NrF>rKrLrJZWithrN�Mixinc@seZdZdS�z*install_tests_in_module_dict.<locals>.TempNrrrrr�Temp|sr�rKrc@seZdZdSr�rrrrrr��scs�t�t�tj��tjj���d<tj���d<tjdd��d<ztj	�dd�Wn t
ytt��d��Yn0t
j�d�r�zt��}Wnty�t�d��Yn0t�t��t���t�dS)	NrrNT)Z
allow_noner�z start method not supportedZlinuxz1OSError raises on RLock creation, see issue 3111!)rr�r�rZ_cleanupr�r	r�r�r�r6r7r8r�r�r�r�rr9rZget_temp_dirrrrr0�r��old_start_method�start_methodrr�setUpModule�s&

�z1install_tests_in_module_dict.<locals>.setUpModulecs�d}tj��tj�ddd�ttjj�t�d�}|rXd}dtj_t�	d|���d}tt
j�t�d�}|r�d}dtj_t�	d|���d}|r�t�d�tj
��dS)	NFrTr�r�rNr�r)r�rr�rr�r�rr�r�r�r�r?r�rZ_cleanup_tests)Z
need_sleeprJrL)r�r�rr�tearDownModule�s$

z4install_tests_in_module_dict.<locals>.tearDownModuler�r�)�globalsrrr�r�rIr�r[�
capitalizer7�TestCaser�requires_hashdigestrFrHrGr�)
Zremote_globsr�rGZlocal_globsZ	ALL_TYPESr �base�type_Znewnamer�r�r�r�rr�r�install_tests_in_module_dictms<



r�)r')�r7Z
unittest.mockrrdr?rr�r�r3r�rr�rBrvr�r
r�r�r�r�r�r�Ztest.supportr�Ztest.support.script_helperrrr�
import_modulerZ*skip_if_broken_multiprocessing_synchronizer�rDrZmultiprocessing.dummyZmultiprocessing.heapZmultiprocessing.managersr�Zmultiprocessing.queuesrrZHAVE_SEND_HANDLErS�ImportErrorZmultiprocessing.sharedctypesrr	r�r
Z	HAS_SHMEMr?Zcheck_sanitizerr8rrrr rr"rrr�rOrerfrgrZ
HAVE_GETVALUEr�rr&r)r4rIr�Zctypesr-r.r/r0r�r9r:rIr]r_rerzr/r9rWrZr[r�r�r�r�r�r�r�r�r�rr<rJrtrvrwryrzr6r~r�r�r�r�r�r�r�r�r�r�r�r�r��registerr�rrr	r
rrr
r�rr$r"rTr`rfr.rtr�r�r�r�r�r�r�rrrrr%r&r/r0r1r2r3r:r@rRrVr`rergrirpr|rIr�r�r�r�r�r�r�r�r�r�rrrr�<module>s�






�

-WG6*39FS 

	j(C:
14"0R
h8
%{+E"!2 "BCH�3)k	=