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

��g�t�@s�ddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddl
Z
ddlZddlZddlZddlZddlZddlZddlZddlmZej�d�Zej�d�ddlZddlZddlZddlZddlZddlZddl Zddlm!Z!yddlm"Z"e"j#Z$Wne%k
�r8dZ$YnXyddl&m'Z'm(Z(d	Z)Wne%k
�rldZ)YnXyddl*Z*Wne%k
�r�dZ*YnXd
Z+dd�Z,d
d�Z-dd�Z.e!j/Z0dZ1dZ2e2�r�d\Z3Z4Z5n
d\Z3Z4Z5e6edd�Z7ej8dkZ9ddlm:Z:dd�Z;ye�<d�Z=WndZ=YnXddgZ>yddl?m@Z@mAZAmBZBmCZCWn&e%k
�rreDZ@dZAZBZCYnXdd�ZEGd d!�d!eD�ZFGd"d#�d#eD�ZGd$d%�ZHGd&d'�d'�ZIGd(d)�d)eG�ZJGd*d+�d+ejK�ZLGd,d-�d-eG�ZMd.d/�ZNd0d1�ZOGd2d3�d3eG�ZPGd4d5�d5eG�ZQGd6d7�d7eG�ZRGd8d9�d9eG�ZSGd:d;�d;eG�ZTGd<d=�d=eD�ZUd>d?�ZVGd@dA�dAeD�ZWGdBdC�dCeD�ZXGdDdE�dEeG�ZYGdFdG�dGeG�ZZGdHdI�dIeG�Z[GdJdK�dKeG�Z\d�dMdN�Z]dOdP�Z^dQdR�Z_dSdT�Z`GdUdV�dVeD�ZaGdWdX�dXeb�ZcdYdZ�ZdGd[d\�d\eG�Zed]d^�Zfd_d`�ZgGdadb�dbeG�ZhGdcdd�ddeG�ZiddelmjZjmkZkmlZlGdfdg�dgeD�Zmdhdi�ZnGdjdk�dkek�ZoGdldm�dmej�Zpepjqdnemdo�epjqdpemdqdr�epjqdieneods�Gdtdu�dueG�Zre�s�Ztdvdw�ZuGdxdy�dyej�Zvevjqdweudo�Gdzd{�d{ej�Zwew�qdw�d|ZxGd}d~�d~eG�ZyGdd��d�eG�Zze,d��Z{Gd�d��d�eG�Z|Gd�d��d�eG�Z}Gd�d��d�eG�Z~Gd�d��d�eG�Ze��e$d��Gd�d��d�eG��Z�Gd�d��d�eG�Z�Gd�d��d�e@�Z�Gd�d��d�eG�Z�Gd�d��d�eG�Z�Gd�d��d�ej��Z�Gd�d��d�eG�Z�Gd�d��d�eG�Z�Gd�d��d�ej��Z�Gd�d��d�ej��Z�d�d��Z�Gd�d��d�ej��Z�d�d��Z�d�d��Z�d�d��Z�d�d��Z�Gd�d��d�eD�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�d��d�ej��Z�Gd�d��d�ej��Z�Gd�d��d�ej��Z�e��ej8dkd��Gd�dÄd�ej���Z�Gd�dńd�ej��Z�Gd�dDŽd�ej��Z�Gd�dɄd�eD�Z�Gd�d˄d�e��Z�Gd�d̈́d�e��Z�Gd�dτd�e��Z�d�dфZ�dS)��N)�support�_multiprocessingzmultiprocessing.synchronize)�util)�	reductionF)�Value�copyTgN@cCs
|�d�S)N�latin)�encode)�s�r�6/usr/local/lib/python3.7/test/_test_multiprocessing.pyrFsrcCs"t|tjj�r|��|��dS)N)�
isinstance�multiprocessing�queues�Queue�close�join_thread)�queuerrr�close_queueJsrcCstj|td�dS)N)�timeout)rr�TIMEOUT)�processrrr�join_processPsrg�������?)g=
ףp=�?gffffff�?gffffff�?)g�������?g�������?g�������?ZHAVE_BROKEN_SEM_GETVALUE�win32)�waitcCs |dk	r|dkrd}t|g|�S)Ng)r)Zhandlerrrr�wait_for_handlensr�SC_OPEN_MAX��__main__z$test.test_multiprocessing_forkserver)�	Structure�c_int�c_double�
c_longlongc	CsRd}yt�d�}Wnttfk
r*dSX|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�sr+c@seZdZdd�Zdd�ZdS)�
TimingWrappercCs||_d|_dS)N)�func�elapsed)�selfr-rrr�__init__�szTimingWrapper.__init__cOs*t��}z|j||�St��||_XdS)N)�time�	monotonicr-r.)r/�args�kwds�trrr�__call__�szTimingWrapper.__call__N)�__name__�
__module__�__qualname__r0r6rrrrr,�sr,c@s,eZdZdZdd�Zdd�Zdd�ZeZdS)	�BaseTestCase)�	processes�manager�threadscCstr|�||d�dS)N�)�
CHECK_TIMINGS�assertAlmostEqual)r/�a�brrr�assertTimingAlmostEqual�sz$BaseTestCase.assertTimingAlmostEqualcGs2y||�}Wntk
r YnX|�||�SdS)N)�NotImplementedError�assertEqual)r/�valuer-r3�resrrr�assertReturnsIfImplemented�s
z'BaseTestCase.assertReturnsIfImplementedcGstd��dS)Nz#shouldn't try to pickle a test case)rD)r/r3rrr�
__reduce__�szBaseTestCase.__reduce__N)r7r8r9�
ALLOWED_TYPESrCrHrI�
__reduce_ex__rrrrr:�s

r:cCs^y|��Stk
rXy|jStk
rRy|jStk
rLt�YnXYnXYnXdS)N)�	get_valuer'Z_Semaphore__valueZ_valuerD)r/rrrrL�srLc@seZdZdd�ZdS)�
DummyCallablecCs|�d�dS)N�)�put)r/�q�crrrr6�szDummyCallable.__call__N)r7r8r9r6rrrrrM�srMc@s0eZdZdZdd�Zdd�Zedd��Zdd	�Zed
d��Z	edd
��Z
dd�Zdd�Zdd�Z
dd�Zdd�Zedd��Zdd�Zedd��Zdd�ZedAd"d#��Zd$d%�Zd&d'�Zd(d)�Zed*d+��Zd,d-�Zed.d/��Zd0d1�Zeifd2d3��Zd4d5�Zd6d7�ZedBd9d:��Zd;d<�Z d=d>�Z!d?d@�Z"d!S)C�_TestProcess)r;r=cCs�|jdkr|�d�|j��|��}|j}|�|���|�|j�|�|t	�|�t
|�dk�|�|jt
���|�|jd�dS)Nr=ztest not appropriate for {}r)�TYPE�skipTest�format�current_process�authkey�
assertTrue�is_alive�daemon�assertIsInstance�bytes�lenrEZidentr%�getpid�exitcode)r/�currentrWrrr�test_current�s
z_TestProcess.test_currentcCsz|jdkr|�d�|j��|j|jd�}|�|j|��j�|j|jdd�}|�|j�|j|jdd�}|�	|j�dS)Nr=ztest not appropriate for {})�targetT)rbrZF)
rSrTrU�Process�_testrErZrVrX�assertFalse)r/Zproc0Zproc1�proc2rrr�test_daemon_argument�s
z!_TestProcess.test_daemon_argumentcOsR|��}|�|�|�|�|�|j�|jdkrN|�t|j��|�|j�dS)Nr=)rVrO�namerSr\rW�pid)�clsrPr3r4r`rrrrd�s


z_TestProcess._testcCs�|�d�}|��}|ddf}ddd�}d}|j|j|||d�}d|_|��}|jd	krf|�|j|j�|�|�	�d
�|�|jd�|�
||���|�t
|���tk�|�|jd�|��|�|jd�|�|�	�d�|�||���|�|��|dd��|�|��|�|�|��|j�|jd	k�rX|�|��|j�|�|��|j�|��|�|jd�|�|�	�d
�|�
||���t|�dS)Nr>��gR���Q@)�helloZbyeZSomeProcess)rbr3�kwargsrhTr=Fr)r�EventrcrdrZrVrSrErWrY�assertNotIn�active_childrenrX�type�listr_�start�assertIn�getrhri�joinr)r/rP�er3rnrh�pr`rrr�test_processs>



z_TestProcess.test_processcCst�d�dS)N�d)r1�sleep)rjrrr�_sleep_some+sz_TestProcess._sleep_somecCst�|�dS)N)r1r|)rj�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	��r>�fd
d�}t�tj|�}zt�d�|�|�d�Wdt�d�t�tj|�Xn|�|�d�|�|jd�|����d
�|��|�
����
��jS)Nr=ztest not appropriate for {})rbTrgr$r>�alarmcstd���dS)Nzjoin took too long: %s)�RuntimeError)r3)ryrr�handlerQsz+_TestProcess._kill_process.<locals>.handler�
F)rSrTrUrcr}rZrtrErYrurqr_r,rwrCr.r1r|�hasattr�signal�SIGALRMr�rp)r/Zmethrwr�Zold_handlerr)ryr�
_kill_process3s>




z_TestProcess._kill_processcCs,|�tjj�}tjdkr(|�|tj�dS)N�nt)	r�rrc�	terminater%rhrEr��SIGTERM)r/r_rrr�test_terminatefs
z_TestProcess.test_terminatecCs,|�tjj�}tjdkr(|�|tj�dS)Nr�)	r�rrc�killr%rhrEr��SIGKILL)r/r_rrr�	test_killks
z_TestProcess.test_killcCsJyt��}Wntk
r$d}YnX|�t|�tk�|�|dk�dS)Nr>)r�	cpu_countrDrXrr�int)r/Zcpusrrr�test_cpu_countps
z_TestProcess.test_cpu_countcCsp|�t|���t�|jtjtfd�}|�||���d|_	|�
�|�||���|��|�||���dS)N)rbr3T)
rErrrqrsrcr1r|�DELTArprZrtrurw)r/ryrrr�test_active_childrenxsz!_TestProcess.test_active_childrencCsV|�|�t|�dkrRx:td�D].}|j|j|||gfd�}|��|��q WdS)Nrk)rbr3)�sendr]�rangerc�_test_recursionrtrw)rj�wconn�id�iryrrrr��s
z_TestProcess._test_recursioncCs||jdd�\}}|�|g�t�t�g}x|��rD|�|���q,Wgdgddgddgdgddgddgg}|�||�dS)NF)�duplexrr>)	�Piper�r1r|r��poll�append�recvrE)r/�rconnr��result�expectedrrr�test_recursion�s


z_TestProcess.test_recursioncCs|�d�dS)Ng$@)r)rj�eventrrr�_test_sentinel�sz_TestProcess._test_sentinelc	Cs�|jdkr|�d�|j��|��}|j|j|fd�}|�t��|jWdQRX|�	�|�
|j�|j}|�|t
�|�t|dd��|��|��|�t|dd��dS)Nr=ztest not appropriate for {})rbr3g)rr>)rSrTrUrorcr��assertRaisesr(�sentinelrt�
addCleanuprwr[r�rer�setrX)r/r�ryr�rrr�
test_sentinel�s
z_TestProcess.test_sentinelrNcCs|dk	r|��t�|�dS)N)rv�sys�exit)rj�rcrPrrr�_test_close�sz_TestProcess._test_closec	Cs<|jdkr|�d�|j��|��}|j|jd|id�}d|_|��|�|�	�d�|�
t��|��WdQRX|�
d�|��|�|�	�d�|�|jd�|��|�
t��|�	�WdQRX|�
t��|��WdQRX|�
t��|��WdQRX|��t�|�}~t��|�|�d�t|�dS)Nr=ztest not appropriate for {}rP)rbrnTFr)rSrTrUrrcr�rZrtrErYr�r(rrOrwr_r��weakref�ref�gc�collect�assertIsr)r/rPry�wrrrr�
test_close�s4


z_TestProcess.test_closecsF�jdkr��d��j��t��}|dkr0dnd}�fdd�t|�D�}x|D]}|��qPWx|D]}t|�qfWx|D]}��|j	d�q|W�fd	d�t|�D�}x|D]}|��q�Wt
�d
�x|D]}|��q�Wx|D]}t|�q�Wt
jdk�rBtjg}tjdk�r$|�tj�x|D]}��|j	|��q*WdS)
Nr=ztest not appropriate for {}�spawnrNr{csg|]}�j�jdd��qS))g{�G�z�?)rbr3)rcr)�.0r�)r/rr�
<listcomp>�sz4_TestProcess.test_many_processes.<locals>.<listcomp>rcsg|]}�j�jd��qS))rb)rcr})r�r�)r/rrr��sg����MbP?r��darwin)rSrTrUr�get_start_methodr�rtrrEr_r1r|r�r%rhr�r�r��platformr�r�ru)r/�sm�N�procsryZ	exitcodesr)r/r�test_many_processes�s6











z _TestProcess.test_many_processescCsft�}t�|�}|��}|j|||fd�}~|��|��|�|�d�|�|�	�d�t
|�dS)N)rbr3rN)rMr�r�rrcrtrwr�rErvr)r/rQr�rPryrrr�test_lose_target_refs
z!_TestProcess.test_lose_target_refcCs|�tj���|��dS)N)rO�testrZfd_countr)r/�evtrPrrr�_test_child_fd_inflation
sz%_TestProcess._test_child_fd_inflationc	s��jdkr��d��j��t��}|dkr<��d�|��d}�����������fdd�t|�D�}x|D]}|��qpWz0�fdd�t|�D�}��	t
t|��d|�Wd���x|D]}|��q�Wt
��XdS)	Nr=ztest not appropriate for {}�forkrNcs g|]}�j�j��fd��qS))rbr3)rcr�)r�r�)r�rPr/rrr�"sz8_TestProcess.test_child_fd_inflation.<locals>.<listcomp>csg|]}����qSr)rv)r�r�)rPrrr�(sr>)rSrTrUrr�rorr�rtrEr]r�rwr)r/r�r�r�ryZ	fd_countsr)r�rPr/r�test_child_fd_inflations&


z$_TestProcess.test_child_fd_inflationcs>�fdd�}�fdd�}tj|d���tj|dd���dS)Ncst�d����dS)Ng�?)r1r|r�r)r�rr�func13s
z2_TestProcess._test_wait_for_threads.<locals>.func1cst�d����dS)N�)r1r|�clearr)r�rr�func27s
z2_TestProcess._test_wait_for_threads.<locals>.func2)rbT)rbrZ)�	threading�Threadrt)r/r�r�r�r)r�r�_test_wait_for_threads1sz#_TestProcess._test_wait_for_threadscCsX|jdkr|�d�|j��|��}|j|j|fd�}|��|��|�|�	��dS)Nr=ztest not appropriate for {})rbr3)
rSrTrUrorcr�rtrwrX�is_set)r/r��procrrr�test_wait_for_threads>s
z"_TestProcess.test_wait_for_threadscCsLx>|��D]2\}}|dkr,t��}|��nd}tt|d�q
W|��dS)Nr)�items�io�StringIOr�setattrr�r�)r/r�Zbreak_std_streams�stream_name�action�streamrrr�_test_error_on_stdio_flushJs
z'_TestProcess._test_error_on_stdio_flushcCs�t��dg}|d��x�dD]�}x||D]t}tt|�}tt||�zJ|��}|j|j|fd�}|�	�|�
�|�|���|�
|jd�Wdtt||�Xq(WqWdS)Nr)�stdout�stderr)rbr3)r�r�r�getattrr�r�rorcr�rtrwrXr�rEr_)r/Zstreamsr�r��
old_streamr�r�rrr�test_error_on_stdio_flush_1Vs



z(_TestProcess.test_error_on_stdio_flush_1cCs�x�dD]|}xvdD]n}tt|�}zP|��}|j|j|||ifd�}|��|��|�|���|�	|j
d�Wdtt||�XqWqWdS)N)r�r�)r�remove)rbr3r)r�r�rorcr�rtrwrXr�rEr_r�)r/r�r�r�r�r�rrr�test_error_on_stdio_flush_2is


z(_TestProcess.test_error_on_stdio_flush_2�cCst�|�|��dS)N)r1r|r�)r/r�r~rrr�_sleep_and_set_eventzs
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)
Nr=ztest not appropriate for {}�
forkserverr)�_forkserverg�?)rbr3g@)r�)rSrTrUrr�Zmultiprocessing.forkserverr��ensure_runningrorcr�rtZ_forkserver_pidr%r�r1r|rwrXr�rEr_ru)
r/�signumr�r�r~r�r�riZevt2rfrrr�check_forkserver_deaths.
z#_TestProcess.check_forkserver_deathcCs|�tj�dS)N)r�r��SIGINT)r/rrr�test_forkserver_sigint�sz#_TestProcess.test_forkserver_sigintcCstjdkr|�tj�dS)Nr�)r%rhr�r�r�)r/rrr�test_forkserver_sigkill�s
z$_TestProcess.test_forkserver_sigkill)rN)r�)#r7r8r9rJrarg�classmethodrdrzr}rr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrrrrR�sD
(3
 #
&rRc@s,eZdZdd�Zdd�Zdd�Zdd�Zd	S)
�_UpperCasercCs tj�|�t��\|_|_dS)N)rrcr0r��
child_conn�parent_conn)r/rrrr0�sz_UpperCaser.__init__cCs@|j��x&t|jjd�D]}|j�|���qW|j��dS)N)r�r�iterr�r�r��upper)r/r
rrr�run�s
z_UpperCaser.runcCs|j�|�|j��S)N)r�r�r�)r/r
rrr�submit�sz_UpperCaser.submitcCs$|j�d�|j��|j��dS)N)r�r�rr�)r/rrr�stop�s
z_UpperCaser.stopN)r7r8r9r0r�r�r�rrrrr��sr�c@s@eZdZdZdd�Zdd�Zedd��Zedd	��Zd
d�Z	dS)
�_TestSubclassingProcess)r;cCsLt�}d|_|��|�|�d�d�|�|�d�d�|��|��dS)NTrmZHELLOZworldZWORLD)r�rZrtrEr�r�rw)r/Z
uppercaserrrr�test_subclassing�sz(_TestSubclassingProcess.test_subclassingc	Cs�|jdkr|�d�|j��tjj}|�tjj|�|j|j	|fd�}|�
�|��t|d��2}|�
�}|�d|�|�d|�|�d|�WdQRXdS)Nr=ztest not appropriate for {})rbr3�r�ZeroDivisionErrorztest_multiprocessing.pyz1/0 # MARKER)rSrTrUr�r�TESTFNr��unlinkrc�_test_stderr_flushrtrw�open�readru)r/�testfnr��f�errrrr�test_stderr_flush�s
z)_TestSubclassingProcess.test_stderr_flushcCs6t�|tjtjBtjB�}t|ddd�t_dddS)N�wF)�closefdr>r)r%r��O_WRONLY�O_CREAT�O_EXCLr�r�)rjr��fdrrrr��sz*_TestSubclassingProcess._test_stderr_flushcCs8t�|tjtjBtjB�}t|ddd�t_t�|�dS)Nr�F)r)r%r�rrrr�r�r�)rj�reasonr�rrrr�_test_sys_exit�sz&_TestSubclassingProcess._test_sys_exitc
Cs|jdkr|�d�|j��tjj}|�tjj|�x�dddgdfD]x}|j|j	||fd�}d|_
|��t|�|�
|jd�t|d	��}|��}WdQRX|�
|��t|��t�|�qDWxBd
D]:}|jtj|fd�}d|_
|��t|�|�
|j|�q�WdS)Nr=ztest not appropriate for {}r>rk�zignore this)rbr3Tr�)TF�)rSrTrUr�rr�r�r�rcrrZrtrrEr_r�r��rstrip�strr%r�r�)r/r�rryr�Zcontentrrr�
test_sys_exit�s,


z%_TestSubclassingProcess.test_sys_exitN)
r7r8r9rJr�r�r�r�rrrrrrr��s	r�cCs"t|d�r|��S|��dkSdS)N�emptyr)r�r�qsize)rPrrr�queue_emptys
rcCs"t|d�r|��S|��|kSdS)N�full)r�rr
)rP�maxsizerrr�
queue_fulls
rc@s�eZdZedd��Zdd�Zedd��Zdd�Zed	d
��Zdd�Z	d
d�Z
edd��Zdd�Zdd�Z
dd�Zdd�Zdd�ZdS)�
_TestQueuecCs.|��xtd�D]}|��qW|��dS)N�)rr�rvr�)rjr�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)r)rbr3TFr>rkr�rN�r)r)rrorcrrZrtrErrrO�
put_nowaitr1r|r�r,r��pyqueueZFullrCr.�TIMEOUT1�TIMEOUT2�TIMEOUT3r�rrwr)r/ZMAXSIZErrrr�rOrrrr�test_put.sP




z_TestQueue.test_putcCs<|��|�d�|�d�|�d�|�d�|��dS)NrkrrrN)rrOr�)rjrrrrrr�	_test_getis



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)N)rbr3TFrkrr>)rrrNr)rrorcrrZrtrErr�rr1r|r�rv�
get_nowaitr,r�r�EmptyrCr.rrrrwr)r/rrrr�rvr rrr�test_getssD


z_TestQueue.test_getcCs"xtdd�D]}|�|�qWdS)Nr�r�)r�rO)rjrr�rrr�
_test_fork�sz_TestQueue._test_forkcCs�|��}xtd�D]}|�|�qWt�t�|j|j|fd�}d|_|�	�x td�D]}|�
|��|�qXW|�t
j|jd�|��t|�dS)Nr�)rbr3Tr�F)rr�rOr1r|r�rcr#rZrtrErvr�rr!rwr)r/rr�ryrrr�	test_fork�s
z_TestQueue.test_forkcCs�|��}y|�|��d�Wntk
r:|�d�YnX|�d�|�|��d�|�d�|�|��d�|��|�|��d�|��|�|��d�t|�dS)Nrzqsize method not implementedr>rNrk)rrEr
rDrTrOrvr)r/rPrrr�
test_qsize�s

z_TestQueue.test_qsizecCs,x&t|jd�D]}t�t�|��qWdS)N)r�rvr1r|r�Z	task_done)rjrP�objrrr�_test_task_done�s
z_TestQueue._test_task_donecs�������fdd�td�D�}x|D]}d|_|��q&Wxtd�D]}��|�qFW���x|D]}��d�qfWx|D]}|��q~Wt��dS)Ncsg|]}�j�j�fd��qS))rbr3)rcr')r�r�)rr/rrr��sz-_TestQueue.test_task_done.<locals>.<listcomp>rTr�)�
JoinableQueuer�rZrtrOrwr)r/�workersryr�r)rr/r�test_task_done�s


z_TestQueue.test_task_donec
Cs�tj���xd}t|dd��}|�d�WdQRXtj�t����4yt|�Wn t	j
k
rr|�d�YnXWdQRXWdQRXdS)NZimported_by_an_imported_modulez.pyr�z�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_cwdr��writeZ
DirsOnSysPathr%�getcwd�
__import__rr!�fail)r/Zmodule_namer�rrr�test_no_import_lock_contention�sz)_TestQueue.test_no_import_lock_contentioncCsHt��}t��}|�tj|jdd�t��|}|�|d�t	|�dS)NTg�������?g�������?)
rrr1r2r�rr!rv�assertGreaterEqualr)r/rPrt�deltarrr�test_timeout
sz_TestQueue.test_timeoutc	Cs|jdkr|�d�|j��Gdd�dt�}tj���>|��}|�|��|�d�|�	|j
td��t|�WdQRXtj���z|jdd�}|�|��|�d�y|�
|��d�Wntk
r�YnX|�	|j
d	d��|�	|���t|�WdQRXdS)
Nr;ztest not appropriate for {}c@seZdZdd�ZdS)zF_TestQueue.test_queue_feeder_donot_stop_onexc.<locals>.NotSerializablecSst�dS)N)r')r/rrrrIszQ_TestQueue.test_queue_feeder_donot_stop_onexc.<locals>.NotSerializable.__reduce__N)r7r8r9rIrrrr�NotSerializablesr3T)rr>)rg�?)rSrTrU�objectr�r�captured_stderrrrOrXrvrrrEr
rDr)r/r3rPrrr�"test_queue_feeder_donot_stop_onexcs(


z-_TestQueue.test_queue_feeder_donot_stop_onexcc	s�|jdkr|�d�|j��Gdd�dt��G�fdd�dtjj�}��}tj�	��:|t�
�d�}|�|�|�d�|�|j
d	d
��WdQRX|�|j�|�|j�dS)Nr;ztest not appropriate for {}c@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_called)r/rrrr0AszT_TestQueue.test_queue_feeder_on_queue_feeder_error.<locals>.NotSerializable.__init__cSsd|_t�dS)NT)r7r')r/rrrrIEszV_TestQueue.test_queue_feeder_on_queue_feeder_error.<locals>.NotSerializable.__reduce__N)r7r8r9�__doc__r0rIrrrrr3?sr3cs eZdZdZe�fdd��ZdS)zE_TestQueue.test_queue_feeder_on_queue_feeder_error.<locals>.SafeQueuez1Queue with overloaded _on_queue_feeder_error hookcst|t�rt|��rd|_dS)NT)r
r'r8)rxr&)r3rr�_on_queue_feeder_errorKs

z\_TestQueue.test_queue_feeder_on_queue_feeder_error.<locals>.SafeQueue._on_queue_feeder_errorN)r7r8r9r9�staticmethodr:r)r3rr�	SafeQueueIsr<)�ctxTg�?)r)rSrTrUr4rrrr�rr5�get_contextrOrXrvr7r8)r/r<Znot_serializable_objrPr)r3r�'test_queue_feeder_on_queue_feeder_error9s



z2_TestQueue.test_queue_feeder_on_queue_feeder_errorN)r7r8r9r�rrrr"r#r$r%r'r*r/r2r6r?rrrrr$s;
5!rc@s$eZdZdd�Zdd�Zdd�ZdS)�	_TestLockcCsR|��}|�|��d�|�|�d�d�|�|��d�|�ttjf|j�dS)NTF)�LockrE�acquire�releaser�r(r�ZThreadError)r/�lockrrr�	test_lockds
z_TestLock.test_lockcCs~|��}|�|��d�|�|��d�|�|��d�|�|��d�|�|��d�|�|��d�|�ttf|j�dS)NT)�RLockrErBrCr��AssertionErrorr�)r/rDrrr�
test_rlockksz_TestLock.test_rlockc	Cs|���WdQRXdS)N)rA)r/rrr�test_lock_contextus
z_TestLock.test_lock_contextN)r7r8r9rErHrIrrrrr@bs
r@c@s,eZdZdd�Zdd�Zdd�Zdd�Zd	S)
�_TestSemaphorecCs�|�dt|�|�|��d�|�dt|�|�|��d�|�dt|�|�|�d�d�|�dt|�|�|��d�|�dt|�|�|��d�|�dt|�dS)NrkTr>rF)rHrLrErBrC)r/�semrrr�_test_semaphore|sz_TestSemaphore._test_semaphorecCsT|�d�}|�|�|�|��d�|�dt|�|�|��d�|�dt|�dS)Nrkrr)�	SemaphorerLrErCrHrL)r/rKrrr�test_semaphore�s

z_TestSemaphore.test_semaphorecCs|�d�}|�|�dS)Nrk)�BoundedSemaphorerL)r/rKrrr�test_bounded_semaphore�s
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)Nr;ztest not appropriate for {}rFgT)r)rSrTrUrMr,rBrErCr.rrr)r/rKrBrrrr2�s


z_TestSemaphore.test_timeoutN)r7r8r9rLrNrPr2rrrrrJzs
rJc@s�eZdZeddd��Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dd�Z
edd��Ze�
ed�dd��Zedd��Ze�
ed�dd��Zedd��Zdd�ZdS)�_TestConditionNcCs.|��|��|�|�|��|��dS)N)rBrCr)rj�cond�sleeping�wokenrrrrr��s

z_TestCondition.fc	Cs^xBtd�D]6}y|�|krPWntk
r4PYnXt�t�q
Wt�t�|�||�dS)Nr�)r�rDr1r|r�rH)r/r-rFr�rrr�assertReachesEventually�s

z&_TestCondition.assertReachesEventuallycCsZ|jdkrVy6|j��|j��}|�|d�|�|j��d�Wntk
rTYnXdS)Nr;r)rSZ_sleeping_countrLZ_woken_countrEZ_wait_semaphorerD)r/rRZsleepersrrr�check_invariant�s
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)Nr)rbr3Tr>rk)�	ConditionrMrcr�rZrtr�rwr�r�rBr1r|r�rHrL�notifyrCrV)r/rRrSrTryrrr�test_notify�s6





z_TestCondition.test_notifycs�|��}|�d�}|�d��xttd�D]h}|j|j||�tfd�}d|_|��|�|j	�t
j|j||�tfd�}d|_|��|�|j	�q&Wxtd�D]}|��q�Wxtd�D]}���q�W|�
dt��|�|�xptd�D]d}|j|j||�fd�}d|_|��|�|j	�t
j|j||�fd�}d|_|��|�|j	�q�Wxtd�D]}|���qZWt�t�|�
dt��|��|��|��|��fdd�d�|�|�dS)Nrr)rbr3Trcst��S)N)rLr)rTrr�<lambda>6�z0_TestCondition.test_notify_all.<locals>.<lambda>)rWrMr�rcr�rrZrtr�rwr�r�rBrHrLrVr1r|r�Z
notify_allrCrU)r/rRrSr�ryr5r)rTr�test_notify_all�sL



z_TestCondition.test_notify_allcsX|��}|�d�}|�d��xptd�D]d}|j|j||�fd�}d|_|��|�|j�t	j
|j||�fd�}d|_|��|�|j�q&Wxtd�D]}|��q�Wt�
t�|�dt��|��|jdd�|��|��fdd	�d�|��|jd
d�|��|��fdd	�d�|��|jdd�|��|�dt��|�|�dS)Nrr)rbr3Trrk)�ncst��S)N)rLr)rTrrrZZr[z._TestCondition.test_notify_n.<locals>.<lambda>rcst��S)N)rLr)rTrrrZar[)rWrMr�rcr�rZrtr�rwr�r�rBr1r|r�rHrLrXrCrUrV)r/rRrSr�ryr5r)rTr�
test_notify_n;s:


z_TestCondition.test_notify_ncCsH|��}t|j�}|��|t�}|��|�|d�|�|jt�dS)NF)	rWr,rrBrrCrErCr.)r/rRrrGrrrr2ms
z_TestCondition.test_timeoutc	sL|�>d�_|��|��fdd��}|r4�jdkr>t�d�WdQRXdS)Nrcs
�jdkS)Nr)rFr)�staterrrZ{r[z0_TestCondition._test_waitfor_f.<locals>.<lambda>rr>)rFrX�wait_forr�r�)rjrRr_r�r)r_r�_test_waitfor_fvsz_TestCondition._test_waitfor_fzneeds sharedctypesc
s�|��}|�dd��|j|j|�fd�}d|_|��|�0|��fdd��}|�|�|��j	d�WdQRXx@t
d�D]4}t�d	�|��j	d
7_	|�
�WdQRXqzWt|�|�|jd�dS)Nr�r$)rbr3Tcs
�jdkS)Nr)rFr)r_rrrZ�r[z-_TestCondition.test_waitfor.<locals>.<lambda>rrg{�G�z�?r>)rWrrcrarZrtr`rXrErFr�r1r|rXrr_)r/rRryr�r�r)r_r�test_waitfors 

z_TestCondition.test_waitforc	st|��|�^d}t��}|j�fdd�|d�}t��|}|sf|d|kr\|dkrfnnd|_WdQRXdS)Ng�������?cs
�jdkS)Nr)rFr)r_rrrZ�r[z8_TestCondition._test_waitfor_timeout_f.<locals>.<lambda>)rg333333�?g$@T)rCr1r2r`rF)rjrRr_�successrKr��dtr�r)r_r�_test_waitfor_timeout_f�s$z&_TestCondition._test_waitfor_timeout_fc
Cs�|��}|�dd�}|�dd�}|�d�}|j|j||||fd�}d|_|��|�|jt	d��x@t
d�D]4}t�d�|�|j
d	7_
|��WdQRXqlWt|�|�|j
�dS)
Nr�rF)rbr3T)rrg{�G�z�?r>)rWrrMrcrerZrtrXrBrr�r1r|rFrXr)r/rRr_rcrKryr�rrr�test_waitfor_timeout�s 

z#_TestCondition.test_waitfor_timeoutc	Cs<|�|��WdQRXt�d�|dk	r8t�|tj�dS)Nr>)rXr1r|r%r�r�r�)rjrQrirrr�_test_wait_result�s

z _TestCondition._test_wait_resultc	Cs�t|t�rtjdkrt��}nd}|��}|�r|�|�d��|�|�d��|j	|j
||fd�}|��|�|�d��|dk	r�|�
t|jd�|��WdQRXdS)Nrrg�������?)rbr3�<)r
�ProcessesMixinr�r�r%r^rWrerrcrgrtrXr��KeyboardInterruptrw)r/rirQryrrr�test_wait_result�s
z_TestCondition.test_wait_result)N)r7r8r9r�r�rUrVrYr\r^r2rar)�
skipUnless�HAS_SHAREDCTYPESrbrerfrgrkrrrrrQ�s->2		rQc@s eZdZedd��Zdd�ZdS)�
_TestEventcCst�t�|��dS)N)r1r|rr�)rjr�rrr�_test_event�s
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)NFgT)rbr3)ror,rrEr�rCr.rr�r�rcrorZrtrw)r/r�rryrrr�
test_event�s&
z_TestEvent.test_eventN)r7r8r9r�rorprrrrrn�srnc@s4eZdZdd�Zdd�Zdd�Zdd�Zd	d
�ZdS)�
_DummyListcCs6tj�t�d��}t��}|�||f�d|jd<dS)Nr�r)r�heap�
BufferWrapper�struct�calcsizerA�__setstate__�
_lengthbuf)r/�wrapperrDrrrr0
sz_DummyList.__init__cCs"|\|_|_|j���d�|_dS)Nr�)�_wrapper�_lockZcreate_memoryview�castrw)r/r_rrrrvsz_DummyList.__setstate__cCs|j|jfS)N)ryrz)r/rrr�__getstate__sz_DummyList.__getstate__c	Cs(|j�|jdd7<WdQRXdS)Nrr>)rzrw)r/�_rrrr�sz_DummyList.appendc	Cs|j�|jdSQRXdS)Nr)rzrw)r/rrr�__len__sz_DummyList.__len__N)r7r8r9r0rvr|r�r~rrrrrqs
rqcCst�d�dS)Ng{�G�z�?)r1r|rrrr�_wait"src@sBeZdZdZddd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dS)�Bunchz
    A bunch of threads.
    Fc
Cs�||_||_||_|��|_|��|_|��|_|s>|j��g}x6t	|�D]*}|j
|jd�}d|_|�
�|�|�qLWdd�}	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.
        )rbTcSsx|D]}|��qWdS)N)rw)r=ryrrr�finalizeAs
z Bunch.__init__.<locals>.finalizeN)r�r3r]�	DummyList�started�finishedro�	_can_exitr�r�rc�taskrZrtr�r�r��
_finalizer)
r/�	namespacer�r3r]Zwait_before_exitr=r�ryr�rrrr0+s 



zBunch.__init__c	CsDt��}|j�|�z|j|j�Wd|j�|�|j�d�XdS)N�)	r%r^r�r�r�r3r�r�r)r/rirrrr�Gsz
Bunch.taskcCs xt|j�|jkrt�qWdS)N)r]r�r]r)r/rrr�wait_for_startedQszBunch.wait_for_startedcCs xt|j�|jkrt�qWdS)N)r]r�r]r)r/rrr�wait_for_finishedUszBunch.wait_for_finishedcCs|j��dS)N)r�r�)r/rrr�	do_finishYszBunch.do_finishcCs|��dS)N)r�)r/rrrr\szBunch.closeN)F)
r7r8r9r9r0r�r�r�r�rrrrrr�'s

r�c@seZdZdd�Zdd�ZdS)�
AppendTruecCs
||_dS)N)r&)r/r&rrrr0aszAppendTrue.__init__cCs|j�d�dS)NT)r&r�)r/rrrr6cszAppendTrue.__call__N)r7r8r9r0r6rrrrr�`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.
    rNg>@cCs|j|j|jd�|_dS)N)r)�Barrierr��defaultTimeout�barrier)r/rrr�setUpnsz_TestBarrier.setUpcCs|j��d|_dS)N)r��abort)r/rrr�tearDownqs
z_TestBarrier.tearDowncCs,|jdkrgS|jdkr"|j��St�SdS)Nr=r<)rSr<rsrq)r/rrrr�us



z_TestBarrier.DummyListcCs8t||||jd�}z||�|��Wd|��XdS)Nr>)r�r�r�r)r/r�r3rBrrr�run_threads}s
z_TestBarrier.run_threadscCsb|j}x<t|�D]0}|d�d�|��|d�d�|��qWyWntk
r\YnXdS)NrTr>)�partiesr�r�rrD)rjr��resultsr]�mr�rrr�	multipass�sz_TestBarrier.multipassr>cCs*|��|��g}|�|j|j||f�dS)z;
        Test that a barrier is passed in lockstep
        N)r�r�r�r�)r/�passesr�rrr�test_barrier�sz_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|��}|�|�dS)N)rrO)rjr�rrGrrr�_test_wait_return_f�sz _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|]}����qSr)rv)r�r�)rrrr��sz1_TestBarrier.test_wait_return.<locals>.<listcomp>rr>N)	rr�r�r�r�r�rE�countr)r/r�r)rr�test_wait_return�s
z_TestBarrier.test_wait_returncCs|��t|�dkrt�dS)Nr>)rr]r�)rjr�r�rrr�_test_action_f�sz_TestBarrier._test_action_fcCsB|��}|j|jt|�d�}|�|j||f�|�t|�d�dS)z,
        Test the 'action' callback
        )r�r>N)r�r�r�r�r�r�rEr])r/r�r�rrr�test_action�sz_TestBarrier.test_actioncCspy0|��}||jdkrt�|��|�d�Wn:tjk
rP|�d�Yntk
rj|��YnXdS)NrkT)rr�r�r�r��BrokenBarrierErrorr�)rjr��results1�results2r�rrr�
_test_abort_f�sz_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
        rr>N)	r�r�r�r�rEr]r�rXZbroken)r/r�r�rrr�
test_abort�sz_TestBarrier.test_abortcCs�|��}||jdkr@x|j|jdkr4t�d�qW|��n8y|��|�d�Wn tjk
rv|�d�YnX|��|�d�dS)Nrkr>g����MbP?T)	rr�Z	n_waitingr1r|�resetr�r�r�)rjr�r�r��results3r�rrr�
_test_reset_f�s
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
        rr>N)r�r�r�r�rEr]r�)r/r�r�r�rrr�
test_reset�sz_TestBarrier.test_resetcCs�y0|��}||jdkrt�|��|�d�Wn:tjk
rP|�d�Yntk
rj|��YnX|��|jdkr�|��|��|��|�d�dS)NrkT)rr�r�r�r�r�r�r�)rjr��barrier2r�r�r�r�rrr�_test_abort_and_reset_f�sz$_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.
        rr>N)r�r�r�r�r�r�rEr])r/r�r�r�r�rrr�test_abort_and_resetsz!_TestBarrier.test_abort_and_resetcCsT|��}||jdkr t�d�y|�d�Wn tjk
rN|�d�YnXdS)Nrkg�?g�?T)rr�r1r|r�r�r�)rjr�r�r�rrr�_test_timeout_fs
z_TestBarrier._test_timeout_fcCs4|��}|�|j|j|f�|�t|�|jj�dS)z$
        Test wait(timeout)
        N)r�r�r�r�rEr]r�)r/r�rrrr2)sz_TestBarrier.test_timeoutcCsV|�|j�}||jdkr$t�d�y|��Wn tjk
rP|�d�YnXdS)Nrkg�?T)rr�r�r1r|r�r�r�)rjr�r�r�rrr�_test_default_timeout_f1s
z$_TestBarrier._test_default_timeout_fcCs@|j|jdd�}|��}|�|j||f�|�t|�|j�dS)z4
        Test the barrier's default timeout
        g�?)rN)r�r�r�r�r�rEr]r�)r/r�r�rrr�test_default_timeout<sz!_TestBarrier.test_default_timeoutcCs|�d�}|��|��dS)Nr>)r�r)r/rBrrr�test_single_threadEs
z_TestBarrier.test_single_threadc
Cs8x2t|�D]&}|��|�|�|�WdQRXq
WdS)N)r�rr�)rjr�r��connrDr�rrr�_test_thousand_fJsz_TestBarrier._test_thousand_fcCs�|jdkr|�d�|j��d}|��}|�d�\}}x@t|j�D]2}|j|j|j	|||fd�}|�
�|�|j�qBWx4t|�D](}x"t|j�D]}|�
|��|�q�Wq�WdS)Nr<ztest not appropriate for {}i�F)rbr3)rSrTrUrAr�r�r�rcr�r�rtr�rwrEr�)r/r�rDr�r��jryr�rrr�
test_thousandQs
z_TestBarrier.test_thousandN)r>)r7r8r9r9r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r2r�r�r�r�r�rrrrr�gs6

	

	r�c@sZeZdZdZddddded�ed�fgZd	d
�Zedd��Zddd�Z	dd�Z
dd�ZdS)�
_TestValue)r;)r�i�i�^)�dg
@g�)�hi�����)rPllrQ�x�ycCsts|�d�dS)Nz%requires multiprocessing.sharedctypes)rmrT)r/rrrr�qsz_TestValue.setUpcCs(x"t||j�D]\}}|d|_qWdS)Nrk)�zip�codes_valuesrF)rj�values�sv�cvrrrrdusz_TestValue._testFcs�|r�fdd��jD�}n�fdd��jD�}x*t|�j�D]\}}��|j|d�q<W�j�j|fd�}d|_|��|��x*t|�j�D]\}}��|j|d�q�WdS)Ncsg|]\}}}��||��qSr)�RawValue)r��coderFr})r/rrr�}sz)_TestValue.test_value.<locals>.<listcomp>csg|]\}}}��||��qSr)r)r�r�rFr})r/rrr��sr>)rbr3Trk)	r�r�rErFrcrdrZrtrw)r/�rawr�r�r�r�r)r/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�rN)rDF�get_lock�get_objZnavalue)
rr�r�rArErer�r�r'r�)
r/Zval1�lock1�obj1Zval2�lock2�obj2rDZval3�lock3�obj3�arr4�arr5rrr�test_getobj_getlock�s$z_TestValue.test_getobj_getlockN)F)r7r8r9rJrr�r�r�rdr�r�r�rrrrr�es
r�c@s~eZdZdZedd��Ze�edkd�ddd��Z	e�edkd�d	d
��Z
e�edkd�dd��Ze�edkd�d
d��ZdS)�
_TestArray)r;cCs4x.tdt|��D]}||||d7<qWdS)Nr>)r�r])rj�seqr�rrrr��sz_TestArray.fNzrequires _ctypesFc
Csddddddddd	d
g
}|r*|�d|�}n|�d|�}|�t|�t|��|�|d|d�|�t|d
d��t|d
d���t�ddd
ddg�|dd�<|dd�<|�t|dd��|�|�|�|j|j|fd�}d|_|�	�|�
�|�t|dd��|�dS)Ni�iri�i5���i$i�i�i?r�rrkrr>rr)rbr3T)�RawArray�ArrayrEr]rs�arrayr�rcrZrtrw)r/r�r��arrryrrr�
test_array�s$(
z_TestArray.test_arraycCsvd}xltd�D]`}|�d|�}|�t|�|�|�t|�dg|�td�|dd�<|�t|�ttd���~qWdS)Nr�rr�r)r�r�rEr]rs)r/�sizer}r�rrr�test_array_from_size�sz_TestArray.test_array_from_sizecCs|jdd�dS)NT)r�)r�)r/rrr�
test_rawarray�sz_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�)rDFr�r�Znotalock)r�rsr�r�r�rArErer�r�r'r�)
r/Zarr1r�r�Zarr2r�r�rDZarr3r�r�r�r�rrr�test_getobj_getlock_obj�s&z"_TestArray.test_getobj_getlock_obj)F)
r7r8r9rJr�r�r)�skipIfr r�r�r�r�rrrrr��sr�c@sHeZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dd�Z
dS)�_TestContainers)r<cCs�|�ttd���}|�|dd�ttd���|��}|�|dd�g�|�ttd���|�|dd�ttd���|�|dd�|�|dd�dddg�|d9}|�|dd�ddddddddddg
�|�|ddgddddddddddddg�|�|dd�ttd���||g}|�|�}|�d	d
�|D�dddddddddd
g
ddddddddddg
g�|�|g�}|�d�|�|ddd�dddddddddd
dg�dS)Nr�rNrkrrrr>rcSsg|]}|dd��qS)Nr)r�Zelementrrrr�sz-_TestContainers.test_list.<locals>.<listcomp>rr�	rm)rsr�rE�extendr�)r/rArBr�rxr�rrr�	test_lists((,
2
z_TestContainers.test_listcCsf|�ttd���}t|�}|�t|�ttd���|�t|�g�t|�}d|d<|�t|�d�dS)Nr�r{r)rsr�r�rE�next)r/rA�itrrr�test_list_iter!sz_TestContainers.test_list_itercs���fdd�td�D��}��dd�|D�dddggd�d|dd	<��|ddd�dddg�x0tdd�D]"}��||dd�dddg�qtW��|d��d���t|d�d�x(tddd�D]}��t||�d�q�W~���}|�|�~dS)
Ncsg|]}��td���qS)r)rsr�)r�Z_i)r/rrr�,sz;_TestContainers.test_list_proxy_in_list.<locals>.<listcomp>rcSsg|]}|dd��qS)Nr)r��innerrrrr�-srr>rk�7r$)rsr�rE�popr]r�)r/rAr�rBr)r/r�test_list_proxy_in_list+s""
z'_TestContainers.test_list_proxy_in_listcCs�|��}ttdd��}x|D]}t|�||<qW|�|��tdd�|D���|�t|���|�|�t|���dd�|D��|�t|�	��dd�|D��dS)N�A�Fcss|]}|t|�fVqdS)N)�chr)r�r�rrr�	<genexpr>Dsz,_TestContainers.test_dict.<locals>.<genexpr>cSsg|]}t|��qSr)r�)r�r�rrrr�Fsz-_TestContainers.test_dict.<locals>.<listcomp>cSsg|]}|t|�f�qSr)r�)r�r�rrrr�Gs)
�dictrsr�r�rEr�sorted�keysr�r�)r/r��indicesr�rrr�	test_dict?s
z_TestContainers.test_dictcCsz|��}ttdd��}x|D]}t|�||<qWt|�}|�t|�|�|�t|�g�t|�}|��|�tt	|�dS)Nr�r�)
r�rsr�r�r�rEr�r�r�r�)r/r�r�r�r�rrr�test_dict_iterIs
z_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)Nrkr)�ferrets�hamstersr�r)�water�feed)�pets�suppliesr�r�rNZblanketsrr�r��rr�r>Zmarmots�X�cr$r�)r�rEr�r]rsr[)r/r�r�r��lZouterrrr�test_dict_proxy_nestedVsFz&_TestContainers.test_dict_proxy_nestedcCsh|��}d|_d|_d|_|�|j|jfd�|`|�t|�d�|�t|d��|�t|d��dS)N�Bob�BuilderZhidden)r�rzNamespace(name='Bob')rh�job)�	NamespacerhrZ_hiddenrEr
rXr�)r/r]rrr�test_namespace�sz_TestContainers.test_namespaceN)r7r8r9rJr�r�r�r�r�r�rrrrrr��s


.r��cCst�|�||S)N)r1r|)r�rrrr�sqr�s
rcCs||S)Nr)r�r�rrr�mul�srcCst�|�tdd��dS)Nr�i)r1r|r()rrrr�raise_large_valuerror�s
rcCs|S)Nr)r�rrr�identity�src@s eZdZdZdd�Zdd�ZdS)�
CountedObjectrcCs|jd7_t�|�S)Nr>)�n_instancesr4�__new__)rjrrrr�szCountedObject.__new__cCst|�jd8_dS)Nr>)rrr
)r/rrr�__del__�szCountedObject.__del__N)r7r8r9r
rrrrrrr	�sr	c@seZdZdS)�SayWhenErrorN)r7r8r9rrrrr
�sr
ccs<|dkrtd��x&t|�D]}||kr.td��|VqWdS)Nr$zSomebody said when)r
r�)ZtotalZwhenr�rrr�exception_throwing_generator�srcseZdZe�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�Z�ZS)7�	_TestPoolcst���|�d�|_dS)Nr)�super�
setUpClass�Pool�pool)rj)�	__class__rrr�s
z_TestPool.setUpClasscs(|j��|j��d|_t���dS)N)rr�rwr�
tearDownClass)rj)rrrr�s

z_TestPool.tearDownClasscCs@|jj}|�|td�td��|�|tdddi�tdd��dS)N)rNrNrr�r)r�)r�applyrEr)r/Zpapplyrrr�
test_apply�sz_TestPool.test_applyc	Csh|jj}|�|tttd���tttttd�����|�|tttd��dd�tttttd�����dS)Nr�r{r�)�	chunksize)r�maprErrsr�)r/Zpmaprrr�test_map�s,z_TestPool.test_mapcCs�|jj}tttd�tddd���}|�|t|�tt�t|���tttd�tddd���}|�|t|dd�tt�t|���dS)Nr�r�r$r{r�r�)r)r�starmaprsr�r�rEr�	itertools)r/Zpsmap�tuplesrrr�test_starmap�sz_TestPool.test_starmapcCsDtttd�tddd���}|�|j�t|���tt�	t|���dS)Nr{r�r$)
rsr�r�rErZ
starmap_asyncrrvrr)r/rrrr�test_starmap_async�sz_TestPool.test_starmap_asyncc	Cs8|�|j�tttd�����tttttd�����dS)Nr�)rEr�	map_asyncrrsr�rvr)r/rrr�test_map_async�sz_TestPool.test_map_asynccCs�|jdkr|j��ng}|jjtdg|j|jd���|�dt	|��|�dg|d�|jjtdg|j|jd���|�dt	|��|�
|dt�dS)Nr<�1)�callback�error_callbackr>rrArk)rSr<rsrr r�r�rrEr]r[r()r/�	call_argsrrr�test_map_async_callbacks�sz"_TestPool.test_map_async_callbacksc	Cs\|jdkr|�d�|j��Gdd�dt�}|�t��|j�t|�gd�WdQRXdS)Nr=ztest not appropriate for {}c@seZdZdd�ZdS)z*_TestPool.test_map_unplicklable.<locals>.AcSstd��dS)Nz
cannot pickle)r�)r/rrrrI�sz5_TestPool.test_map_unplicklable.<locals>.A.__reduce__N)r7r8r9rIrrrr�A�sr'r�)	rSrTrUr4r�r�rrr)r/r'rrr�test_map_unplicklable�s

z_TestPool.test_map_unplicklablecCsDy|jjtgdd�jtd�Wn tjk
r>|�d�YnXdS)Nr>)r)rz2pool.map_async with chunksize stalled on null list)rr rrvrr�TimeoutErrorr.)r/rrr�test_map_chunksize�sz_TestPool.test_map_chunksizec	Cs|jdkr|�d�|j��|�t��|j�ttdd�d�WdQRX|�t��|j�ttdd�d�WdQRX|�t��|j�ttdd�d�WdQRXGdd�d�}|�t��|j�t|�d�WdQRX|�t��|j�t|�d�WdQRXdS)	Nr<ztest not appropriate for {}r>r$r�rc@s$eZdZdd�Zdd�Zdd�ZdS)zE_TestPool.test_map_handle_iterable_exception.<locals>.SpecialIterablecSs|S)Nr)r/rrr�__iter__
	szN_TestPool.test_map_handle_iterable_exception.<locals>.SpecialIterable.__iter__cSst�dS)N)r
)r/rrr�__next__	szN_TestPool.test_map_handle_iterable_exception.<locals>.SpecialIterable.__next__cSsdS)Nr>r)r/rrrr~	szM_TestPool.test_map_handle_iterable_exception.<locals>.SpecialIterable.__len__N)r7r8r9r+r,r~rrrr�SpecialIterable	sr-)	rSrTrUr�r
rrrr)r/r-rrr�"test_map_handle_iterable_exception�s
   z,_TestPool.test_map_handle_iterable_exceptioncCs<|j�tdtf�}t|j�}|�|�d�|�|jt�dS)Nr�1)	r�apply_asyncrrr,rvrErCr.)r/rGrvrrr�
test_async	s
z_TestPool.test_asynccCsD|j�tdtdf�}t|j�}|jtj|td�|�	|j
t�dS)Nrg�?)r)rr0rrr,rvr�rr)rCr.)r/rGrvrrr�test_async_timeout	s
z_TestPool.test_async_timeoutc	Cs�|j�tttd���}|�t|�tttttd�����|j�tttd���}x$td�D]}|�t|�||�qXW|�t	|j
�|jjtttd��dd�}x$td�D]}|�t|�||�q�W|�t	|j
�dS)Nr�i�r{)r)r�imaprrsr�rErr�r��
StopIterationr,)r/r�r�rrr�	test_imap$	s"z_TestPool.test_imapcCsH|jdkr|�d�|j��|j�ttdd�d�}|�t|j	�|j�ttdd�d�}|�t|j	�|j�ttdd�d�}x$t
d�D]}|�t|�||�q�W|�t|j	�|j�ttdd�d	�}x$t
d
�D]}|�t|�||�q�W|�t|j	�|j�ttdd�d�}x&t
d�D]}|�t|�||��qW|�t|j	�dS)Nr<ztest not appropriate for {}r>r$r�rr�rrkrr)
rSrTrUrr3rrr�r
r,r�rEr�)r/r�r�rrr�#test_imap_handle_iterable_exception2	s$
z-_TestPool.test_imap_handle_iterable_exceptionc	Csx|j�tttd���}|�t|�tttttd�����|jjtttd��dd�}|�t|�tttttd�����dS)Nr�i�r{)r)r�imap_unorderedrrsr�rEr�r)r/r�rrr�test_imap_unorderedL	s"z_TestPool.test_imap_unorderedc	CsN|jdkr|�d�|j��|j�ttdd�d�}|�t|j	�|j�ttdd�d�}|�t|j	�|j�ttdd�d�}t
ttt
td����}|�t��6x.td�D]"}t
|�}|�||�|�|�q�WWdQRX|j�ttdd�d	�}t
ttt
td����}|�t��8x0td�D]$}t
|�}|�||�|�|��qWWdQRXdS)
Nr<ztest not appropriate for {}r>r$r�rr�rrk)rSrTrUrr7rrr�r
r,rsrr�r�rur�)r/r�Zexpected_valuesr�rFrrr�-test_imap_unordered_handle_iterable_exceptionS	s8
z7_TestPool.test_imap_unordered_handle_iterable_exceptioncCst|jdkrtnt}|�||jd�|�||jd�|jdkrp|�d�}z|�dt|j��Wd|��|�	�XdS)Nr<r$rr)
rS�RemoteErrorr(r�rrEr]�_poolrrw)r/Zexpected_errorryrrr�test_make_poolw	s

z_TestPool.test_make_poolcCsP|jjtjdd�td�D�dd�}|j��t|jj�}|�|�|j	d�dS)NcSsg|]}d�qS)g�������?r)r�r�rrrr��	sz,_TestPool.test_terminate.<locals>.<listcomp>i'r>)rg@)
rr r1r|r�r�r,rw�
assertLessr.)r/r�rwrrrr��	s
z_TestPool.test_terminatecCsz|�d�}|�|�tg�g�|�t|�tg��g�|�t|�tg��g�|�|�tg���g�|�	�|�
�dS)Nr>)rrErrrsr3r7r rvrrw)r/ryrrr�test_empty_iterable�	s
z_TestPool.test_empty_iterablec	Cst|jdkrpttd��}dd�|D�}|�d��"}|�t|�}|�|��|�WdQRX|��|�	t
|jt|�dS)Nr;r�cSsg|]}t|��qSr)r)r�r�rrrr��	sz*_TestPool.test_context.<locals>.<listcomp>rk)rSrsr�rr rrErvrwr�r()r/�Lr�ryr�rrr�test_context�	s
z_TestPool.test_contextcCstd��dS)N�{)r�)rjrrr�_test_traceback�	sz_TestPool._test_tracebackcCs�|jdk�r�|�d��H}y|�|j�Wn&tk
rN}z|}Wdd}~XYnX|�d�WdQRX|��|�t|�t	�|�
|jd�|j}|�t|�t
jj�|�d|j�tj���2}y|�Wn"t	k
r�tjt���YnXWdQRX|�d|���|�d��p}y|�ttdd�d�Wn(tk
�rP}z|}Wdd}~XYnX|�d�|�t|�t�|�|jd�WdQRX|��dS)Nr;r>zexpected RuntimeError)rAz&raise RuntimeError(123) # some commentr$zexpected SayWhenError)rSrrrB�	Exceptionr.rwr�rrr�rEr3�	__cause__rrZRemoteTracebackru�tbr�rr5r��
excepthook�exc_info�getvaluerrrr
)r/ryrx�exc�cause�f1rrr�test_traceback�	s:

z_TestPool.test_tracebackcCstd��dS)N�foo)r�)rjrrr�_test_wrapped_exception�	sz!_TestPool._test_wrapped_exceptionc
CsD|�d��(}|�t��|�|j�WdQRXWdQRX|��dS)Nr>)rr�r�rrNrw)r/ryrrr�test_wrapped_exception�	s z _TestPool.test_wrapped_exceptioncCs~t��}|�t��N|�d��8}z|�tddg�Wdt�d�|��|�	�XWdQRXWdQRX|�
t��|d�dS)Nrkrr>g�?g�������?)r1r2r�r(rrrr|rrw�
assertGreater)r/Zt_startryrrr�test_map_no_failfast�	s
z_TestPool.test_map_no_failfastcCshdd�td�D�}dd�|D�}|j�t|�~t�t�|�tdd�|D��dh�|�t	j
d�dS)NcSsg|]
}t��qSr)r	)r�r�rrrr��	sz4_TestPool.test_release_task_refs.<locals>.<listcomp>r�cSsg|]}t�|��qSr)r�r�)r��orrrr��	scss|]}|�VqdS)Nr)r�r�rrrr��	sz3_TestPool.test_release_task_refs.<locals>.<genexpr>r)r�rrrr1r|r�rEr�r	r
)r/ZobjsZrefsrrr�test_release_task_refs�	s
z _TestPool.test_release_task_refs) r7r8r9r�rrrrrrr!r&r(r*r.r1r2r5r6r8r9r<r�r>r@rBrLrNrOrQrS�
__classcell__rr)rrr�s6	

$

&rcCstd��dS)N�key)�KeyErrorrrrr�raising�	srWcCsdd�S)NcSsdS)N�*rrrrrrZ
r[z%unpickleable_result.<locals>.<lambda>rrrrr�unpickleable_result
srYc@s eZdZdZdd�Zdd�ZdS)�_TestPoolWorkerErrors)r;csjt�d�}dg��fdd�}|jt|d�}|�t|j�|��d�|��dt�|�	�|�
�dS)Nrkcs|�d<dS)Nrr)rI)�
scratchpadrr�errback
sz@_TestPoolWorkerErrors.test_async_error_callback.<locals>.errback)r$r)rrr0rWr�rVrvrXr[rrw)r/ryr\rGr)r[r�test_async_error_callback
s
z/_TestPoolWorkerErrors.test_async_error_callbackcs�ddlm}t�d�}xxtd�D]l}dg��fdd�}|jt|d�}|�||j��d}|�	|�|�
�d|�|�|j�|�|j
�q W|��|��dS)Nr)�MaybeEncodingErrorrkr�cs|�d<dS)Nrr)rI)r[rrr\
sz?_TestPoolWorkerErrors.test_unpickleable_result.<locals>.errback)r$)�multiprocessing.poolr^rrr�r0rYr�rvrXr[ZassertIsNotNonerIrFrrw)r/r^ryZ	iterationr\rG�wrappedr)r[r�test_unpickleable_result
s

z._TestPoolWorkerErrors.test_unpickleable_resultN)r7r8r9rJr]rarrrrrZ
srZc@s eZdZdZdd�Zdd�ZdS)�_TestPoolWorkerLifetime)r;c	Cstjddd�}|�dt|j��dd�|jD�}g}x$td�D]}|�|�t|f��q>Wx(t	|�D]\}}|�|�
�t|��qdW|��d}x.|r�tdd	�|jD��s�|d
8}t
�t�q�Wdd�|jD�}|�d|�|�d|�|�t|�t|��|��|��dS)Nrr�)�maxtasksperchildcSsg|]
}|j�qSr)ri)r�r�rrrr�2
szE_TestPoolWorkerLifetime.test_pool_worker_lifetime.<locals>.<listcomp>r{�2css|]}|��VqdS)N)rY)r�r�rrrr�@
szD_TestPoolWorkerLifetime.test_pool_worker_lifetime.<locals>.<genexpr>r>cSsg|]
}|j�qSr)ri)r�r�rrrr�C
s)rrrEr]r;r�r�r0r�	enumeratervZ_repopulate_pool�allr1r|r�rpZassertNotEqualr�rrw)	r/ryZorigworkerpidsr�r�r�rGZ	countdownZfinalworkerpidsrrr�test_pool_worker_lifetime/
s&z1_TestPoolWorkerLifetime.test_pool_worker_lifetimecCsxtjddd�}g}x&td�D]}|�|�t|df��qW|��|��x(t|�D]\}}|�	|�
�t|��qTWdS)Nrr>)rcrg333333�?)rrr�r�r0rrrwrerErv)r/ryr�r�r�rGrrr�%test_pool_worker_lifetime_early_closeL
sz=_TestPoolWorkerLifetime.test_pool_worker_lifetime_early_closeN)r7r8r9rJrgrhrrrrrb,
srb)�BaseManager�	BaseProxyr:c@s$eZdZdd�Zdd�Zdd�ZdS)�FooBarcCsdS)Nzf()r)r/rrrr�`
szFooBar.fcCst�dS)N)r()r/rrr�gb
szFooBar.gcCsdS)Nz_h()r)r/rrr�_hd
sz	FooBar._hN)r7r8r9r�rlrmrrrrrk_
srkccs xtd�D]}||Vq
WdS)Nr�)r�)r�rrr�bazg
srnc@s eZdZdZdd�Zdd�ZdS)�
IteratorProxy)r,cCs|S)Nr)r/rrrr+m
szIteratorProxy.__iter__cCs
|�d�S)Nr,)�_callmethod)r/rrrr,o
szIteratorProxy.__next__N)r7r8r9Z	_exposed_r+r,rrrrrok
sroc@seZdZdS)�	MyManagerN)r7r8r9rrrrrqr
srq�Foo)�callable�Bar)r�rm)rsZexposed)rsZ	proxytypec@s0eZdZdZdd�Zdd�Zdd�Zdd	�Zd
S)�_TestMyManager)r<cCs<t�}|��|�|�|��|�|jjdtjf�dS)Nr)	rqrt�common�shutdownru�_processr_r�r�)r/r<rrr�test_mymanager~
s

z_TestMyManager.test_mymanagerc	Cs8t��}|�|�WdQRX|�|jjdtjf�dS)Nr)rqrvrurxr_r�r�)r/r<rrr�test_mymanager_context�
sz%_TestMyManager.test_mymanager_contextc	Cs<t�}|��|�|�|�WdQRX|�|jjd�dS)Nr)rqrtrvrErxr_)r/r<rrr�!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�rh)rMrrr��
sz)_TestMyManager.common.<locals>.<listcomp>)r�rlrmcsg|]}t�|�r|�qSr)r�)r�rh)�barrrr��
sr�rlrmzf()z_h()cSsg|]}||�qSrr)r�r�rrrr��
sr�)
rrrtrnrEr�r�r(rlrpr:rmrsr�)r/r<rnZfoo_methodsZbar_methodsr)r|rMrrv�
s z_TestMyManager.commonN)r7r8r9rJryrzr{rvrrrrruz
s
rucCstS)N)�_queuerrrr�	get_queue�
sr~c@seZdZdZdS)�QueueManagerz$manager class used by server processN)r7r8r9r9rrrrr�
src@seZdZdZdS)�
QueueManager2z@manager class which specifies the same interface as QueueManagerN)r7r8r9r9rrrrr��
sr�Z	xmlrpclibc@sBeZdZdZdddddddgZedd�Zed	d
��Zdd�ZdS)
�_TestRemoteManager)r<zhello worldNTg@uhallå världenuпривіт світs
hall� v�rldencCs2t||td�}|��|��}|�t|j��dS)N)�addressrW�
serializer)r��
SERIALIZER�connectr~rO�tupler�)rjr�rWr<rrrr�_putter�
s
z_TestRemoteManager._puttercCs�t�d�}ttjjdf|td�}|��|�|j	�|j
|j|j|fd�}d|_
|��t|j|td�}|��|��}|�|��|j�|�t|jtj�~dS)N� r)r�rWr�)rbr3T)r%�urandomrr�r�HOSTr�rtr�rwrcr�r�rZr�r�r~rErvr�r�rCrOr1r|)r/rWr<ryZmanager2rrrr�test_remote�
s
z_TestRemoteManager.test_remote)	r7r8r9rJr�r�r�r�r�rrrrr��
s
r�c@s eZdZedd��Zdd�ZdS)�_TestManagerRestartcCs,t||td�}|��|��}|�d�dS)N)r�rWr�zhello world)rr�r�r~rO)rjr�rWr<rrrrr��
s
z_TestManagerRestart._putterc
Cs(t�d�}ttjjdf|td�}zd|��}|j}|j	�
�|��|j|j
|j|fd�}|��|��|��}|�|��d�~Wdt|d�r�|��Xt||td�}y|��|�|j�Wnbtk
�r"}zB|jtjkr�t�d�t||td�}t|d��r|�|j�Wdd}~XYnXdS)Nr�r)r�rWr�)rbr3zhello worldrwg�?)r%r�rr�rr�r�Z
get_serverr��listenerrrtrcr�rwr~rErvr�rwr��OSError�errnoZ
EADDRINUSEr1r|)r/rWr<Zsrvr�addrryrrxrrr�test_rapid_restart�
s:




z&_TestManagerRestart.test_rapid_restartN)r7r8r9r�r�r�rrrrr��
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)%�_TestConnection)r;r=cCs,xt|jt�D]}|�|�qW|��dS)N)r��
recv_bytes�SENTINEL�
send_bytesr)rjr��msgrrr�_echo-sz_TestConnection._echoc
CsL|��\}}|j|j|fd�}d|_|��dddg}td�}|d}t�dttd���}|j	d	krx|�
t|���t
�|�
|�|�d�|�
|��|�|�
|�|�d�|�
|��|�|j	d	k�r t�dd
gd�}t|�d
gdt|�}	|�
|�|�d�|�
|�|�t|�|j�|�
t|�|	�t�dd
gd�}d
gdt|�d
gdt|�}	|�
|�|�d�|�
|�|d|j�t|�|j�|�
t|�|	�ttd
��}|�
|�|�d�y|�|�}
Wn6tjk
�r}z|�
|j|f�Wdd}~XYnX|�d|
�t|j�}|�
|�d�|�|jd
�|�
|d�d�|�|jd
�|�
|t�d�|�|jt�|�d�t� d�|�
|t�d�|�|jd
�|�
|��d�td�d}
|�|
�|�
|��|
�|�t!�|�"�|j	d	k�r@|�
|j#d�|�
|j$d�|�%t&|j�|�%t&|j�|�'�dS)N)rbr3Tr>g@zhello worldr�r�rr;rrrz(                                        zexpected BufferTooShort, got %sFr$g�������?�Xi)(r�rcr�rZrtrr�rsr�rSrErr�filenor�r�r�r�r�r]Zrecv_bytes_into�itemsize�	bytearrayrZBufferTooShortr3r.r,r�rCr.rr1r|r�r�readable�writabler��EOFErrorrw)r/r�r�ryr�r�Zlongmsgr��bufferr�rGrxr�Zreally_big_msgrrr�test_connection3sr

$"




z_TestConnection.test_connectioncCs�|jdd�\}}|�|�d�d�|�|��d�|jdkr�|�|jd�|�|jd�|�|jd�|�|jd�|�t|jd�|�t|j�|�t|j	�dS)NF)r�r>r;Trk)
r�rEr�r�rSr�r�r�r�r�)r/�reader�writerrrr�test_duplex_false�s
z!_TestConnection.test_duplex_falsecCst|��\}}|j|j|fd�}d|_|��|��td�}|�|�|�|�	�|�|�t
�|��|��dS)N)rbr3Trm)r�rcr�rZrtrrr�rEr�r�rw)r/r�r�ryr�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)Nr;ztest not appropriate for {}ZabcdefghijklmnopqrstuvwxyzrNrr��r�r��r>r$r)
rSrTrUrr�r�rEr�r�r()r/r�rArBrrr�test_sendbytes�s&

z_TestConnection.test_sendbytesc
CsLyt�|�Wn4tk
rB}z|jtjkr0dS�Wdd}~XYnXdSdS)NFT)r%�fstatr�r��EBADF)rjrrxrrr�_is_fd_assigned�sz_TestConnection._is_fd_assignedFcCsh|r2x,tdd�D]}|�|�st�|��|�qWt�|�}trNt�|tj	�}t�
||�t�|�dS)Nrr)r�r�r%�dup2r�r�recv_handle�msvcrtZopen_osfhandlerr+r)rjr��dataZcreate_dummy_fdsr�rrrr�_writefd�s

z_TestConnection._writefdz$test needs multiprocessing.reductionc	Cs�|jdkr|�d�|jdd�\}}|j|j|dfd�}d|_|��|�tj	j
tj	j�ttj	jd��,}|�
�}tr�t�|�}t�|||j�WdQRX|��ttj	jd��}|�|��d�WdQRXdS)	Nr;zonly makes sense with processesT)r�sfoo)rbr3�wb�rb)rSrTr�rcr�rZrtr�r�rr�r�r�r�r�Z
get_osfhandler�send_handlerirwrEr�)r/r�r�ryr�rrrr�test_fd_transfer�s


z _TestConnection.test_fd_transferrz*test semantics don't make sense on Windowsrz)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��f}|�
�}x(tdt�D]}|�|�s�Pq�W|�d	�t�||�zt�|||j�Wdt�|�XWdQRX|��ttj	jd
��}|�|��d�WdQRXdS)Nr;zonly makes sense with processesT)r�sbar)rbr3r�rz2could not find an unassigned large file descriptorr�)rSrTr�rcr�rZrtr�r�rr�r�r�r�r��MAXFDr�r.r%r�rr�rirrwrEr�)r/r�r�ryr�rZnewfdrrr�test_large_fd_transfer�s(	



z&_TestConnection.test_large_fd_transfercCst�|��d�dS)N�)r%r+r�)r/r�rrr�_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)Nr;zonly makes sense with processesT)r�)rbr3)rSrTr�rcr�rZrtr�r�rr�rw)r/r�r�ryrrr�test_missing_fd_transfers

z(_TestConnection.test_missing_fd_transferc
Cs�|��\}}|�R|�B|�d�|�|��d�|jdkrT|�|j�|�|j�WdQRXWdQRX|jdkr�|�|j�|�|j�|�t	|j�|�t	|j�dS)Ni�r;)
r�r�rEr�rSre�closedrXr�r�)r/rArBrrrr@"s

 
z_TestConnection.test_contextN)F)r7r8r9rJr�r�r�r�r�r�r�r�r)rl�
HAS_REDUCTIONr�r�r�r�r�r�r%r�r�r�r@rrrrr�)s*O
 


r�c@s6eZdZdZdd�Zdd�Ze�ej	d�dd��Z
d	S)
�
_TestListener)r;cCsFx@|jjD]4}|jj|d�}|�|j�|�t|jj|j|�q
WdS)N)�family)�
connection�families�Listenerr�rr�r�r�)r/r�r�rrr�test_multiple_bind6s
z _TestListener.test_multiple_bindcCsz|j���N}|j�|j��4}|��� }|�d�|�|��d�WdQRXWdQRXWdQRX|jdkrv|�	t
|j�dS)Ni�r;)r�r��Clientr��acceptr�rEr�rSr�r�)r/r�rQr�rrrr@=s

.
z_TestListener.test_contextz"test needs abstract socket supportcCs||j�d��N}|j�|j��4}|��� }|�d�|�|��d�WdQRXWdQRXWdQRX|jdkrx|�	t
|j�dS)Nz
somethingi�r;)r�r�r�r�r�r�rEr�rSr�r�)r/r��clientr�rrr�test_abstract_socketGs

.
z"_TestListener.test_abstract_socketN)r7r8r9rJr�r@r)rlrZabstract_sockets_supportedr�rrrrr�2s

r�c@s4eZdZdZedd��Zdd�Zdd�Zdd	�Zd
S)�_TestListenerClient)r;r=cCs"|j�|�}|�d�|��dS)Nrm)r�r�r�r)rjr�r�rrrrdXs
z_TestListenerClient._testcCsnxh|jjD]\}|jj|d�}|j|j|jfd�}d|_|��|��}|�	|�
�d�|��|��q
WdS)N)r�)rbr3Trm)
r�r�r�rcrdr�rZrtr�rEr�rwr)r/r�r�ryr�rrr�test_listener_client^sz(_TestListenerClient.test_listener_clientcCsj|j��}|j|j|jfd�}d|_|��t�d�|�	�}|�
|��d�|��|�
�|��dS)N)rbr3Tr>rm)r�r�rcrdr�rZrtr1r|r�rEr�rrw)r/r�ryr�rrr�test_issue14725is

z#_TestListenerClient.test_issue14725cCslxf|jjD]Z}|jj|d�}|j�|j�}|��}|�d�|�|�d��|�	�|�	�|�	�q
WdS)N)r�shellor>)
r�r�r�r�r�r�r�rXr�r)r/�famr�rQrArrr�test_issue16955ys
z#_TestListenerClient.test_issue16955N)	r7r8r9rJr�rdr�r�r�rrrrr�Ts
r�c@sTeZdZdZdd�Zedd��Zdd�Zedd	��Zd
d�Z	edd
��Z
dd�ZdS)�	_TestPoll)r;r=cCsJ|��\}}|�|��d�|�d�|�|��d�|�|��d�dS)NFr[T)r�rEr�r�)r/rArBrrr�test_empty_string�s

z_TestPoll.test_empty_stringcCs.x |D]}t�d�|�|�qW|��dS)Ng�������?)r1r|r�r)rjr��stringsr
rrr�_child_strings�s

z_TestPoll._child_stringscCsxd}|��\}}|j|j||fd�}|��x>|D]6}xtd�D]}|�d�r@Pq@W|��}|�||�q2W|��dS)N)shellor[�a�br[sbyer[slop)rbr3��g{�G�z�?)	r�rcr�rtr�r�r�rErw)r/r�rArBryr
r�r�rrr�test_strings�s

z_TestPoll.test_stringscCs|�d�dS)NrN)r�)rjr�rrr�_child_boundaries�sz_TestPoll._child_boundariescCsv|�d�\}}|j|j|fd�}|��t�d�ddg}x|D]}|�|�q@W|��|��|�	|�
�|�dS)NF)rbr3rksfirstssecond)r�rcr�rtr1r|r�rrwrur�)r/r�r�ryr?r&rrr�test_boundaries�s

z_TestPoll.test_boundariescCs"|�d�|�d�|�d�dS)Nr�r�scd)r�)rjrBrrr�_child_dont_merge�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)
NgFg�������?)rbr3r�g�?Tr�scd)r�rEr�rcr�rtr�rw)r/rArBryrrr�test_dont_merge�sz_TestPoll.test_dont_mergeN)r7r8r9rJr�r�r�r�r�r�r�r�rrrrr��sr�z$test needs multiprocessing.reductionc@sPeZdZdZedd��Zedd��Zedd��Zdd	�Zed
d��Z	dd
�Z
dS)�_TestPicklingConnections)r;cCsddlm}|jtd�dS)Nr)�resource_sharer)r)rr�r�r)rjr�rrrr�sz&_TestPicklingConnections.tearDownClasscCs�xH|D]@}|jj|d�}|�|j�|��}|�|�|��|��qWt��}|�tj	j
df�|��|�|���|��\}}|�|�|��|��|�
�dS)N)r�r)r�r�r�r�r�r�socket�bindr�rr��listen�getsocknamer�)rjr�r�r�r��new_connr�rrr�	_listener�s 


z"_TestPicklingConnections._listenercCs|x:t|jd�D]*\}}|j�|�}|�|���|��qW|��\}}t��}|�|�|�	|���|��|��dS)N)
r�r�r�r�r�r�rr�r��sendall)rjr�r�r�r�rrr�_remote�s
z _TestPicklingConnections._remotecCsf|jj}|��\}}|j|j||fd�}d|_|��|��|��\}}|j|j|fd�}d|_|��|��xL|D]D}d|�	d�}	|�
�}
|�|
|	f�|�
�}|�|�
�|	�
��qxW|�d�td�}	|�
�}
|�|
|	f�|�
�}g}x |�
d�}
|
�sP|�|
�q�Wd�|�}|�||	�
��|��|�d�|��|��|��|��dS)N)rbr3TzThis connection uses family %s�asciiz$This connection uses a normal socketr{r[)r�r�r�rcr�rZrtrr�r	r�r�rEr�rr�rw)r/r�ZlconnZlconn0Zlpr�Zrconn0Zrpr�r�r�r��bufr
rrr�
test_pickling
sH




z&_TestPicklingConnections.test_picklingcCsD|��}|�d�|��|��}|��}|�|d�|��dS)Nzall is wellrk)r�r�r)rjr�r�r�r�rrr�child_access2
s
z%_TestPicklingConnections.child_accesscCs�|��\}}|j|j|fd�}d|_|��|��|jdd�\}}|�|�|��|�|��d�|��|jdd�\}}|�|�|��|�d�|��|�|��d�|�	�dS)N)rbr3TF)r�zall is wellZfoobarZfoobarfoobar)
r�rcr�rZrtrr�rEr�rw)r/r�r�ryr�r�rrr�test_access>
s"


z$_TestPicklingConnections.test_accessN)r7r8r9rJr�rr�r�r�r�r�rrrrr��s.r�cs<eZdZdZ�fdd�Z�fdd�Zdd�Zdd	�Z�ZS)
�	_TestHeap)r;cs*t���tjjj|_tj��tjj_dS)N)rr�rrrrs�_heap�old_heapZHeap)r/)rrrr�c
s
z_TestHeap.setUpcs|jtjj_t���dS)N)r�rrrrsr�rr�)r/)rrrr�i
sz_TestHeap.tearDownc	Cs�d}d}g}xVt|�D]J}tt�dd�d�}tj�|�}|�|�t|�|krt�	|�}||=qWtjjj
}g}d}	|j��|�
|jj�xJt|j���D]8}
x2|
D]*\}}}
|�|j�|�||
|
|df�q�Wq�Wx@|jD]6\}}}
|�|j�|�||
|
|df�|	|
|7}	q�W|��xltt|�d�D]X}||dd�\}}}
||ddd�\}}}|�||k�r�|dk�p�|
|k��q6WdS)	Ni�rdrr>i�Zfree�occupiedr)r�r��randomZlognormvariaterrrrsr�r]Z	randranger�rzrBr�rCrsZ_len_to_seqr�Z_arenas�indexZ_allocated_blocks�sortrX)r/Z
iterationsZ	maxblocksZblocksr�r�rBrrrfr�r?Zarenartr�ZnarenaZnstartZnstoprrr�	test_heapm
s:




z_TestHeap.test_heapcCszt��st��|�tj�t��}|jtjf|��t�d�x4td�D](}tj	�
d�}tj	�
d�}||_||_qJWdS)Nr�i�r>)r�Z	isenabledZenabler�Zdisable�
get_threshold�
set_thresholdr�rrrrsZbuddy)r/Z
thresholdsr�rArBrrr�test_free_from_gc�
s
z_TestHeap.test_free_from_gc)	r7r8r9rJr�r�r�r�rTrr)rrr�_
s
'r�c@s"eZdZdefdefdefgZdS)�_Foor�r��zN)r7r8r9r r!r"Z_fields_rrrrr��
sr�c@s>eZdZdZdd�Zedd��Zddd�Zd	d
�Zdd�Z	d
S)�_TestSharedCTypes)r;cCsts|�d�dS)Nz%requires multiprocessing.sharedctypes)rmrT)r/rrrr��
sz_TestSharedCTypes.setUpcCs~|jd9_|jd9_|jd9_|jd9_|jd9_|jd9_x$tt|��D]}||d9<qbWdS)Nrk)rFr�r�r�r])rjr�r�r�rMr��stringr�rrr�_double�
sz_TestSharedCTypes._doubleFc
Cs tdd|d�}ttd|d�}ttd|d�}ttdd|d�}|jdttd	��|d�}|jd
d|d�}td�|_|j	|j
||||||fd
�}d|_|��|�
�|�|jd�|�|jd�|�|jd�|�|jd�|�|jd�x$td	�D]}	|�||	|	d�q�W|�|jtd��dS)Nr�r)rDgUUUUUU�?lrrkr�r�rQr�rm)rbr3T�gUUUUUU�?lrg@Z
hellohello)rr!r"r�r�rsr�rrFrcr�rZrtrwrEr@r�r�)
r/rDr�r�r�rMr�r�ryr�rrr�test_sharedctypes�
s&
z#_TestSharedCTypes.test_sharedctypescCs|jdd�dS)NT)rD)r�)r/rrr�test_synchronize�
sz"_TestSharedCTypes.test_synchronizecCsTtddd�}t|�}d|_d|_d|_|�|jd�|�|jd�|�|jd�dS)Nrkg@lr)r�rr�r�r�rEr@)r/rMr|rrr�	test_copy�
sz_TestSharedCTypes.test_copyN)F)
r7r8r9rJr�r�r�r�r�r�rrrrr��
s
r�c@s<eZdZdZdd�Zdd�Zedd��Zdd	�Zd
d�Z	dS)
�
_TestFinalize)r;cCstj��|_tj��dS)N)r�_finalizer_registryr�registry_backupr�)r/rrrr��
sz_TestFinalize.setUpcCs|�tj�tj�|j�dS)N)rerr��updater�)r/rrrr��
sz_TestFinalize.tearDowncCsGdd�dt�}|�}tj||jdd�~|�}tj||jdd�}|�|�~|�}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>.FooN)r7r8r9rrrrrr�
srr)rA)r3)rB)rQ)�d10r>)r3�exitpriority)�d01r)�d02)�d03)rxi����)�STOPi����)r4r�Finalizer�Z_exit_functionrr%�_exit)rjr�rrrArBZclose_brQrrrrrrr�_test_finalize�
s0z_TestFinalize._test_finalizec
Csh|��\}}|j|j|fd�}d|_|��|��dd�t|jd�D�}|�|dddd	d
ddg�dS)
N)rbr3TcSsg|]}|�qSrr)r�r&rrrr�*sz/_TestFinalize.test_finalize.<locals>.<listcomp>rrArBrrrrrx)	r�rcrrZrtrwr�r�rE)r/r�r�ryr�rrr�
test_finalize"sz_TestFinalize.test_finalizec	s�dd��G�fdd�dt��d�d���fdd�}���fdd	�}t��}t��}zft�d
�t�ddd�tj|d�tj|d�g}t	j
�|��t�
d
�d�WdQRX�dk	r���Wdt�|�tj|�t��XdS)NcSsdS)Nrrrrr�cb/sz,_TestFinalize.test_thread_safety.<locals>.cbcseZdZ�fdd�ZdS)z-_TestFinalize.test_thread_safety.<locals>.Foocs"||_tj|�t�dd�d�dS)Nr>r{)r)r�rrr�Zrandint)r/)r
rrr03sz6_TestFinalize.test_thread_safety.<locals>.Foo.__init__N)r7r8r9r0r)r
rrrr2srrFc
sTxN�sNt�t��d�yt��Wqtk
rJ}z|�Wdd}~XYqXqWdS)Ng�������?)r1r|r�rZ_run_finalizersrC)rx)rI�finishrr�run_finalizers;sz8_TestFinalize.test_thread_safety.<locals>.run_finalizersc
sfi}x\�s`y$�fdd�td�D�|t�d�<Wqtk
r\}z|�|��Wdd}~XYqXqWdS)Ncsh|]
}���qSrr)r�r�)rrrr�	<setcomp>MszL_TestFinalize.test_thread_safety.<locals>.make_finalizers.<locals>.<setcomp>r�rN)r�r�ZgetrandbitsrCr�)r�rx)rrrIrrr�make_finalizersFs$z9_TestFinalize.test_thread_safety.<locals>.make_finalizersg���ư>rN)rbg@T)r4r��getswitchintervalr�r��setswitchintervalr�r�r�r�rZ
start_threadsr1r|r�)r/rrZold_intervalZ
old_thresholdr=r)rrr
rIrr�test_thread_safety-s*




z _TestFinalize.test_thread_safetyN)
r7r8r9rJr�r�r�rr	rrrrrr��
s&r�c@seZdZdd�Zdd�ZdS)�_TestImportStarcCsbddl}tj�tj�}tj�|d�}|�|�}dd�|D�}dd�|D�}|�d�|�d�|S)Nrz*.pycSs(g|] }tj�tj�|�d�d�qS)r>r)r%�path�splitext�split)r�r�rrrr�osz4_TestImportStar.get_module_names.<locals>.<listcomp>cSsg|]}d|�qS)zmultiprocessing.r)r�r�rrrr�pszmultiprocessing.__init__r)	�globr%r�dirnamer�__file__rwr�r�)r/rZfolder�pattern�files�modulesrrr�get_module_namesjs


z _TestImportStar.get_module_namescCs�|��}tjdkr2|�d�|�d�|�d�n|�d�tsJ|�d�tdkr\|�d�xZ|D]R}t|�tj|}|�t	|d�|�x(|j
D]}|�t	||�d||f�q�WqbWdS)	Nrzmultiprocessing.popen_forkz multiprocessing.popen_forkserverz!multiprocessing.popen_spawn_posixz!multiprocessing.popen_spawn_win32zmultiprocessing.sharedctypes�__all__z%r does not have attribute %r)rr�r�r�r�r r-rrXr�r)r/rrh�mod�attrrrr�test_importus$







z_TestImportStar.test_importN)r7r8r9rr rrrrrhsrc@s,eZdZdZdd�Zedd��Zdd�ZdS)	�_TestLogging)r;cCsDt��}|�tj�|�|dk	�|�d�|�d�|�t�dS)Nzthis will not be printedz
nor will this)	r�
get_logger�setLevelr�
SUBWARNINGrX�debug�info�	LOG_LEVEL)r/�loggerrrr�test_enable_logging�s

z _TestLogging.test_enable_loggingcCst��}|�|���dS)N)rr"r�ZgetEffectiveLevel)rjr�r(rrr�_test_level�sz_TestLogging._test_levelc	Cs�d}d}t��}t��}|j}tjdd�\}}|�|�|j|j|fd�}|�	�|�
||���|��|�
�|�tj�|�|�|j|j|fd�}|�	�|�
||���|��|�
�|�|�|jtd�dS)Nr��%F)r�)rbr3)�level)rr"�loggingZ	getLoggerr,r�r#rcr*rtrEr�rwrZNOTSETr')	r/ZLEVEL1ZLEVEL2r(Zroot_loggerZ
root_levelr�r�ryrrr�
test_level�s*


z_TestLogging.test_levelN)r7r8r9rJr)r�r*r.rrrrr!�sr!c@s6eZdZdZedd��Ze�ee	d�d�dd��Z
dS)	�_TestPollEintr)r;cCst�d�t�|tj�dS)Ng�������?)r1r|r%r�r��SIGUSR1)rjrirrr�_killer�s
z_TestPollEintr._killerr0zrequires SIGUSR1c
s�dg��fdd�}t��}t�tj|�}zj|j|j|fd�}|��z$|jtjdd�}|��|�	�Wd|�	�X|�
�d�|�|jd�Wdt�tj|�XdS)NFcsd�d<dS)NTrr)r3)�
got_signalrr�record�sz._TestPollEintr.test_poll_eintr.<locals>.record)rbr3)rkr)
r%r^r�r0rcr1rtr1r|rwrXrEr_)r/r3riZ
oldhandlerZkillerryr)r2r�test_poll_eintr�s
z_TestPollEintr.test_poll_eintrN)r7r8r9rJr�r1r)rlr�r�r4rrrrr/�sr/c@s eZdZe�ed�dd��ZdS)�TestInvalidHandlezskipped on Windowsc	CsZtj�d�}z*y|��Wnttfk
r2YnXWdd|_X|�ttftjjd�dS)Ni�M�r$)rr�Z
Connectionr�r(r�Z_handler�)r/r�rrr�test_invalid_handles�s

z&TestInvalidHandle.test_invalid_handlesN)r7r8r9r)r��WIN32r6rrrrr5�sr5c@seZdZdd�Zdd�ZdS)�	OtherTestcCs,Gdd�dt�}|�tjtjj|�d�dS)Nc@seZdZdd�Zdd�ZdS)zFOtherTest.test_deliver_challenge_auth_failure.<locals>._FakeConnectioncSsdS)Nssomething bogusr)r/r�rrrr�szQOtherTest.test_deliver_challenge_auth_failure.<locals>._FakeConnection.recv_bytescSsdS)Nr)r/r�rrrr�szQOtherTest.test_deliver_challenge_auth_failure.<locals>._FakeConnection.send_bytesN)r7r8r9r�r�rrrr�_FakeConnectionsr9sabc)r4r�r�AuthenticationErrorr�Zdeliver_challenge)r/r9rrr�#test_deliver_challenge_auth_failuresz-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|_dS)Nr)r�)r/rrrr0szNOtherTest.test_answer_challenge_auth_failure.<locals>._FakeConnection.__init__cSs2|jd7_|jdkr tjjS|jdkr.dSdS)Nr>rkssomething bogusr[)r�rr�Z	CHALLENGE)r/r�rrrr�s

zPOtherTest.test_answer_challenge_auth_failure.<locals>._FakeConnection.recv_bytescSsdS)Nr)r/r�rrrr�$szPOtherTest.test_answer_challenge_auth_failure.<locals>._FakeConnection.send_bytesN)r7r8r9r0r�r�rrrrr9sr9sabc)r4r�rr:r�Zanswer_challenge)r/r9rrr�"test_answer_challenge_auth_failuresz,OtherTest.test_answer_challenge_auth_failureN)r7r8r9r;r<rrrrr8
s
r8cCs|jd7_dS)Nr>)r�)�nsrrr�initializer.sr>c@s,eZdZdd�Zdd�Zdd�Zdd�Zd	S)
�TestInitializerscCs"t��|_|j��|_d|j_dS)Nr)r�Manager�mgrrr=r�)r/rrrr�2s
zTestInitializers.setUpcCs|j��|j��dS)N)rArwrw)r/rrrr�7s
zTestInitializers.tearDowncCsNtj��}|�t|jd�|�t|jf�|�|jj	d�|�
�|��dS)Nr>)r�managers�SyncManagerr��	TypeErrorrtr>r=rEr�rwrw)r/r�rrr�test_manager_initializer;s
z)TestInitializers.test_manager_initializercCsH|jttjdd�t�dt|jf�}|��|��|�|jj	d�dS)Nr>)r>)
r�rDrrr>r=rrwrEr�)r/ryrrr�test_pool_initializerCs
z&TestInitializers.test_pool_initializerN)r7r8r9r�r�rErFrrrrr?1sr?cCs,y|jdd�}Wntjk
r&YnXdS)NF)�block)rvrr!)rP�itemrrr�_this_sub_processOsrIcCs2t��}tjt|fd�}d|_|��|��dS)N)rbr3T)rrrcrIrZrtrw)rZsubProcrrr�
_test_processUs
rJcCs||S)Nr)r�rrr�_afunc\srKc
Cs:tjdd�}|�tdddddddg�}|��|��dS)	Nr)r;r>rkrrNrr)rrrrKrrw)rr�rrr�pool_in_process_srLc@s0eZdZdd�Zedd��Zdd�Zdd�Zd	S)
�
_file_likecCs||_d|_dS)N)�	_delegate�_pid)r/Zdelegaterrrr0fsz_file_like.__init__cCs$t��}||jkr||_g|_|jS)N)r%r^rO�_cache)r/rirrr�cachejs

z_file_like.cachecCs|j�|�dS)N)rQr�)r/r�rrrr+ssz_file_like.writecCs|j�d�|j��g|_dS)Nr�)rNr+rwrQrP)r/rrr�flushvsz_file_like.flushN)r7r8r9r0�propertyrQr+rRrrrrrMes	rMc@s$eZdZdd�Zdd�Zdd�ZdS)�TestStdinBadfiledescriptorcCs tjtd�}|��|��dS)N)rb)rrcrJrtrw)r/r�rrr�test_queue_in_process|sz0TestStdinBadfiledescriptor.test_queue_in_processcCs tjtd�}|��|��dS)N)rb)rrcrLrtrw)r/ryrrr�test_pool_in_process�sz/TestStdinBadfiledescriptor.test_pool_in_processcs:t��}t|����d�tj�fdd�d�}���dS)NrMcs���S)N)rRr)�flikerrrZ�r[z:TestStdinBadfiledescriptor.test_flushing.<locals>.<lambda>)rb)r�r�rMr+rrcrR)r/Zsior�r)rWr�
test_flushing�s
z(TestStdinBadfiledescriptor.test_flushingN)r7r8r9rUrVrXrrrrrTzsrTc@sleZdZedd��Zddd�Zedd��Zddd	�Zd
d�Zdd
�Z	dd�Z
edd��Zdd�Zdd�Z
dS)�TestWaitcCsFx8td�D],}|r$t�t��d�|�|t��f�q
W|��dS)Nr�g�������?)r�r1r|r�r�r%r^r)rjr��slowr�rrr�_child_test_wait�s
zTestWait._child_test_waitFc	sddlm}g}g�g}xjtd�D]^}tjdd�\}}tj|j||fd�}d|_|��|�	�|�
|���
|�|�|j�q"WxX|r�xN||�D]B}y|�
�}	Wn&tk
r�|�|�|�	�Yq�X|�
|	�q�Wq�W|��t�fdd	�td
�D��}
|�||
�dS)Nr)rrF)r�)rbr3Tc3s"|]}�D]}||jfVq
qdS)N)ri)r�r�ry)r�rrr��sz%TestWait.test_wait.<locals>.<genexpr>r�)�multiprocessing.connectionrr�rr�rcr[rZrtrr�r�rwr�r�r�r�r�rE)r/rZr�readers�messagesr�r�r�ryr�r�r)r�r�	test_wait�s0


zTestWait.test_waitcCsZt��}|�|�x:td�D].}|r6t�t��d�|�d|�d��qW|��dS)Nr�g�������?z%s
r�)	r�r�r�r1r|r�r�r	r)rjr�rZr
r�rrr�_child_test_wait_socket�s
z TestWait._child_test_wait_socketcCsZddlm}t��}|�tjjdf�|��|��}g}g}i}xHt	d�D]<}t
j|j||fd�}	d|	_
|	��|�|	�|�|	j�qLWx.t	d�D]"}|��\}
}|�|
�g||
<q�W|��xL|�rx@||�D]4}
|
�d�}|s�|�|
�|
��q�||
�|�q�Wq�Wd�dd	�t	d
�D���d�}
x$|��D]}|�d�|�|
��q:WdS)
Nr)rr)rbr3Tr�r�css|]}d|VqdS)z%s
Nr)r�r�rrrr��sz,TestWait.test_wait_socket.<locals>.<genexpr>r�r�r[)r\rr�r�r�rr�r�r�r�rrcr`rZrtr�r�rwr�rr�r�r	r�rE)r/rZrr�r�r]r�Zdicr�ryr�r}r�r��vrrr�test_wait_socket�s<




zTestWait.test_wait_socketcCs|�d�dS)NT)r_)r/rrr�test_wait_slow�szTestWait.test_wait_slowcCs|�d�dS)NT)rb)r/rrr�test_wait_socket_slow�szTestWait.test_wait_socket_slowcCs�ddlm}d}t��\}}t��}|||g|�}t��|}|�|g�|�||d�|�||d�|�	d�t��}|||gd�}t��|}|�||g�|�|d�dS)Nr)rrNrkg�?r�g�������?)
r\rrr�r1r2rEr=rPr�)r/rr�rArBrtrGr1rrr�test_wait_timeout�s
zTestWait.test_wait_timeoutcCs|��t�|�dS)N)rCr1r|)rjrKZperiodrrr�signal_and_sleepszTestWait.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)Nr)rrcSst|dd�d�S)NcSst|�S)N)r�)r�rrrrZr[z>TestWait.test_wait_integer.<locals>.<lambda>.<locals>.<lambda>)rU)r�)r�rrrrZr[z,TestWait.test_wait_integer.<locals>.<lambda>)rbr3r�)rrkg�������?)r\rrrMr�rcrfrtr[r�r�rXrBr1r2rEr=rPr�r�rw)r/rr�Zsorted_rKrArBryrtrGr1rrr�test_wait_integers<


zTestWait.test_wait_integercCsfddlm}t��\}}t��}||gdd�}t��|}|�|g�|�|d�|��|��dS)Nr)rr$)rr>)	r\rrr�r1r2rEr=r)r/rrArBr5rGrrr�test_neg_timeout3szTestWait.test_neg_timeoutN)F)F)r7r8r9r�r[r_r`rbrcrdrerfrgrhrrrrrY�s


%+rYc@s4eZdZe�ed�dd��Ze�ed�dd��ZdS)�TestInvalidFamilyzskipped on Windowsc	Cs&|�t��tj�d�WdQRXdS)Nz\\.\test)r�r(rr�r�)r/rrr�test_invalid_familyDsz%TestInvalidFamily.test_invalid_familyz skipped on non-Windows platformsc	Cs&|�t��tj�d�WdQRXdS)Nz/var/test.pipe)r�r(rr�r�)r/rrr�test_invalid_family_win32Isz+TestInvalidFamily.test_invalid_family_win32N)	r7r8r9r)r�r7rjrlrkrrrrriBsric@s,eZdZedd��Zedd��Zdd�ZdS)�	TestFlagscCs|�ttj��dS)N)r�r�r��flags)rjr�rrr�run_in_grandchildSszTestFlags.run_in_grandchildcCsrddl}tjdd�\}}tj|j|fd�}|��|��}|��|��|��t	t
j�|f}t|�
|��dS)NrF)r�)rbr3)�jsonrr�rcrnrtr�rwrr�r�rm�print�dumps)rjror�r�ry�grandchild_flagsrmrrr�run_in_childWszTestFlags.run_in_childcCsPddl}ddl}d}|�tjdddd|g�}|�|�d��\}}|�||�dS)NrzJfrom test._test_multiprocessing import TestFlags; TestFlags.run_in_child()z-Ez-Sz-Oz-cr�)ro�
subprocessZcheck_outputr��
executable�loads�decoderE)r/rort�progr�Zchild_flagsrrrrr�
test_flagsdszTestFlags.test_flagsN)r7r8r9r�rnrsryrrrrrlRs
rlc@s eZdZedd��Zdd�ZdS)�TestTimeoutscCs>t�d�|�d�|��tj�|�}|�d�|��dS)Nr>rAi�)r1r|r�rrr�r�)rj�childr�r�rrr�
_test_timeoutss


zTestTimeouts._test_timeoutc	Cs�t��}z�t�d�tjdd�\}}tjjdd�}tj|j||j	fd�}|�
�|��|�|�
�d�|��|��}|�|�
�d�|��|��t|�Wdt�|�XdS)	Ng�������?T)r��AF_INET)r�)rbr3rAi�)r�ZgetdefaulttimeoutZsetdefaulttimeoutrr�r�r�rcr|r�rtrrEr�r�r)r/Zold_timeout�parentr{r�ryr�rrrr2|s"
zTestTimeouts.test_timeoutN)r7r8r9r�r|r2rrrrrzrs	rzc@seZdZdd�ZdS)�TestNoForkBombcCs�t��}tj�tj�t�d�}|dkrVtjj	�
||�\}}}|�|d�|�d|�n2tjj	�
||�\}}}|�|��d�|�|d�dS)Nzmp_fork_bomb.pyr�r[sRuntimeErrors123)rr�r%rrwrrr�r�
script_helperZassert_python_failurerEru�assert_python_okr	)r/r�rhr��outr�rrr�test_noforkbomb�szTestNoForkBomb.test_noforkbombN)r7r8r9r�rrrrr�src@s eZdZedd��Zdd�ZdS)�TestForkAwareThreadLockcCsV|dkr:tj|j|d|fd�}|��|��t|�n|�ttj	��|��dS)Nr>)rbr3)
rrcr{rtrrr�r]r�_afterfork_registry)rjr]r�ryrrrr{�s
zTestForkAwareThreadLock.childcCsdt�d�\}}t��}ttj�}tj|jd|fd�}|��|�	�|�
�}t|�|�||�dS)NFrN)rbr3)
rr�rZForkAwareThreadLockr]r�rcr{rtrr�rZassertLessEqual)r/r�r�r�Zold_sizeryZnew_sizerrrrE�s
z!TestForkAwareThreadLock.test_lockN)r7r8r9r�r{rErrrrr��sr�c@s0eZdZdd�Zdd�Zedd��Zdd�Zd	S)
�TestCloseFdscCsbtrt����St����}g}x |dkr@|�|�t�|�}q"Wx|D]}t�|�qHW|SdS)Nrd)r7r��detachr�r%�dupr)r/rZto_closer�rrr�get_high_socket_fd�s


zTestCloseFds.get_high_socket_fdcCs,trtjtjtj|d���n
t�|�dS)N)r�)r7r�r}�SOCK_STREAMrr%)r/rrrrr�szTestCloseFds.closec
CsZyt�|tjtj�}Wn,tk
rB}z|�|�Wdd}~XYnX|��|�d�dS)N)r�Zfromfdr}r�rCr�r)rjr�rr
rxrrr�_test_closefds�szTestCloseFds._test_closefdsc	Cs�tst�d��t��\}}|��}z8tj|j||fd�}|��|�	�|�
�}t|�Wd|�	|�|�	�|�	�Xt��dkr�|�
|d�n.d}|�|t�|�|jtjkp�|j|k|�dS)Nzrequires fd pickling)rbr3r�i6')r�r)r*rr�r�rcr�rtrr�rr�r�r[r�rXr�r�Zwinerror)r/r�r�rryrxZWSAENOTSOCKrrr�test_closefd�s(


zTestCloseFds.test_closefdN)r7r8r9r�rr�r�r�rrrrr��s
r�c@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)NcSsdS)Nr)r��framerrrr�
sz-TestIgnoreEINTR._test_ignore.<locals>.handler�ready�x)r�r0r�r�r��
CONN_MAX_SIZE)rjr�r�r�rrr�_test_ignores

zTestIgnoreEINTR._test_ignorer0zrequires SIGUSR1cCs�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�|��Wd|��XdS)N)rbr3Tr�g�������?i�r�)rr�rcr�rZrtrrEr�r1r|r%r�rir�r0r�r�r�rw)r/r�r�ryrrr�test_ignores&





zTestIgnoreEINTR.test_ignorec	CsNdd�}t�tj|�tj���$}|�|j�|��}|�d�WdQRXdS)NcSsdS)Nr)r�r�rrrr�.sz6TestIgnoreEINTR._test_ignore_listener.<locals>.handler�welcome)r�r0rr�r�r�r�r�)rjr�r�r�rArrr�_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�|��Wd|��XdS)N)rbr3Tg�������?r�)rr�rcr�rZrtrr�r1r|r%r�rir�r0r�r�rErw)r/r�r�ryr�r�rrr�test_ignore_listener6s


z$TestIgnoreEINTR.test_ignore_listenerN)r7r8r9�maxrZ
PIPE_MAX_SIZEZ
SOCK_MAX_SIZEr�r�r�r)rlr�r�r�r�r�rrrrr�s


r�c@s@eZdZedd��Zdd�Zdd�Zdd�Zd	d
�Zdd�Z	d
S)�TestStartMethodcCs|�t���dS)N)r�rr�)rjr�rrr�_check_contextJszTestStartMethod._check_contextcCs^|jdd�\}}|j|j|fd�}|��|��|��}|��|��|�||���dS)NF)r�)rbr3)	r�rcr�rtrr�rwrEr�)r/r=r�r�ryZchild_methodrrr�
check_contextNszTestStartMethod.check_contextc	Cs�x|dD]t}yt�|�}Wntk
r.wYnX|�|��|�|�|��|�|�t|jd�|�t|jd�|�|�qWdS)N)r�r�r�r�)	rr>r(rEr�r�r��set_start_methodr�)r/�methodr=rrrr@Xs
zTestStartMethod.test_contextc
Cs�t�t�d}t��}z�x�dD]�}ytj|dd�Wntk
rJwYnX|�t��|�t��}|�|��|�|�t	|�j
���|��|�|j
j
���|��|�t�|d7}qWWdtj|dd�X|�|d�dS)Nr)r�r�r�T)�forcer>)r�set_forkserver_preload�PRELOADr�r�r(rEr>rXrrr7�lower�
startswithrcr�r0)r/r�Z
old_methodr�r=rrr�test_set_getds&


zTestStartMethod.test_set_getcCsFt��}tjdkr"|�|dg�n |�|ddgkp>|dddgk�dS)Nrr�r�r�)rZget_all_start_methodsr�r�rErX)r/�methodsrrr�test_get_allzs

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�rTr%rrwrrr�rr�r�rwr	rpr.)r/rhr�r�r�rrr�test_preload_resources�s
z&TestStartMethod.test_preload_resourcesN)
r7r8r9r�r�r�r@r�r�r�rrrrr�Is
r�z*test semantics don't make sense on Windowsc@s,eZdZdd�Zdd�Zdd�Zdd�Zd	S)
�TestSemaphoreTrackerc	Cs ddl}d}t��\}}|jtjdd|||fg|g|jd�}t�|�t|ddd��*}|�	��
��d	�}|�	��
��d	�}WdQRXt�
|�|��|��t�d
�|�t��}	t�
|�WdQRX|�|	jjtjtjf�|j���d�}
|j��d}|�|
|�|�|
d
|�dS)NraMif 1:
            import multiprocessing as mp, time, os
            mp.set_start_method("spawn")
            lock1 = mp.Lock()
            lock2 = mp.Lock()
            os.write(%d, lock1._semlock.name.encode("ascii") + b"\n")
            os.write(%d, lock2._semlock.name.encode("ascii") + b"\n")
            time.sleep(10)
        z-Ez-c)Zpass_fdsr�r�T)rr�g@zutf-8z9semaphore_tracker: There appear to be 2 leaked semaphoreszsemaphore_tracker: %r: \[Errno)rtr%�pipe�Popenr�ru�PIPErr��readliner	rwrZ
sem_unlinkr�rr1r|r�r�ruZ	exceptionr��ENOENTZEINVALr�r�ZassertRegex)r/rt�cmdr�r�ryr�Zname1Zname2r=r�r�rrr�test_semaphore_tracker�s.	




z+TestSemaphoreTracker.test_semaphore_trackerc		Cs�ddlm}|��|j}t�||�t�d�t�	d�}t
���T}|rZ|�|�
td��|��}|��|��t�|�}~t��|�|��WdQRXdS)Nr)�_semaphore_trackerg�?r�zsemaphore_tracker: process died)Z!multiprocessing.semaphore_trackerr�r�rOr%r�r1r|rr>�
contextlib�	ExitStack�
enter_contextZassertWarnsRegex�UserWarningrMrBrCr�r�r�r�ZassertIsNone)	r/r�Z
should_dier�rir=�stackrKr�rrr�check_semaphore_tracker_death�s$



z2TestSemaphoreTracker.check_semaphore_tracker_deathcCs|�tjd�dS)NF)r�r�r�)r/rrr�test_semaphore_tracker_sigint�sz2TestSemaphoreTracker.test_semaphore_tracker_sigintcCs|�tjd�dS)NT)r�r�r�)r/rrr�test_semaphore_tracker_sigkill�sz3TestSemaphoreTracker.test_semaphore_tracker_sigkillN)r7r8r9r�r�r�r�rrrrr��s%r�c@s eZdZedd��Zdd�ZdS)�TestSimpleQueuecCs8|��z |�|���|�|���Wd|��XdS)N)rrOrr�)rjrrrrrr�_test_empty�s
zTestSimpleQueue._test_emptycCs�t��}t��}t��}tj|j|||fd�}d|_|��|�|���|�	�|�
�|�|���|�|�
�d�|�|�
�d�|�|���|��dS)N)rbr3TF)rZSimpleQueuerorcr�rZrtrXrr�rrerErvrw)r/rrrr�rrr�
test_empty�s zTestSimpleQueue.test_emptyN)r7r8r9r�r�r�rrrrr��s
r�c@sdeZdZdZejjZdd�Zdd�Z	e
dd��ZeZdd	�Z
d
d�Ze
dd
��ZdHdd�Zdd�Ze
dd��Zdd�Ze
dd��ZdIdd�Ze
dd��ZdJdd�Ze
d d!��ZdKd#d$�Zd%d&�Ze
d'd(��Zd)d*�Ze
d+d,��Zd-d.�Ze
d/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|_dS)N)�
manager_classr<rtr�)r/rrrr�s

zTestSyncManagerTypes.setUpcCsB|jdk	r(|j��r(|j��|j��|j��d|_d|_dS)N)r�rYr�rwr<rw)r/rrrr�s


zTestSyncManagerTypes.tearDowncCst��dS)N)rZ
reap_children)rjrrrr$szTestSyncManagerTypes.setUpClasscCszt|j�t��}d}x^tt���dkrtt�|�|d9}t��|}|dkrdtj	_
tdt��|ftj
d�PqWdS)Ng{�G�z�?r>rkg@TzPWarning -- multiprocessing.Manager still has %s active children after %s seconds)�file)rr�r1r2r]rrqr|r�r�environment_alteredrpr�r�)r/�
start_timer5rdrrr�wait_proc_exit*s


z#TestSyncManagerTypes.wait_proc_exitcCs@tj||fd�|_d|j_|j��|��|�|jjd�dS)N)rbr3Tr)rrcr�rZrtr�rEr_)r/Zworkerr&rrr�
run_worker=s

zTestSyncManagerTypes.run_workercCsdS)Nr)rjr&rrr�_test_queueDsz TestSyncManagerTypes._test_queuercCs6t|j|�d�}|�d�|�d�|�|j|�dS)NrkrNr)r�r<rOr�r�)r/ZqnamerRrrr�
test_queueNs


zTestSyncManagerTypes.test_queuecCs|�d�dS)Nr()r�)r/rrr�test_joinable_queueVsz(TestSyncManagerTypes.test_joinable_queuecCs|��|��|�d�dS)Ng����MbP?)rr�)rjr&rrrroYsz TestSyncManagerTypes._test_eventcCs.|j��}|��|�|j|�|�d�dS)Ng����MbP?)r<ror�r�ror)r/rRrrrrp`s
zTestSyncManagerTypes.test_eventcCs|��dS)N)rB)rjr&rrr�
_test_lockgszTestSyncManagerTypes._test_lockrAcCs6t|j|��}|�|j|�|��|�t|j�dS)N)r�r<r�r�rCr�r�)r/�lnamerRrrrrEkszTestSyncManagerTypes.test_lockcCs|��|��dS)N)rBrC)rjr&rrr�_test_rlockqsz TestSyncManagerTypes._test_rlockcCs t|j|��}|�|j|�dS)N)r�r<r�r�)r/r�rRrrrrHvszTestSyncManagerTypes.test_rlockcCs|��dS)N)rB)rjr&rrrrLzsz$TestSyncManagerTypes._test_semaphorerMcCs(t|j|��}|�|j|�|��dS)N)r�r<r�rLrC)r/�snamerRrrrrN~sz#TestSyncManagerTypes.test_semaphorecCs|jdd�dS)NrO)r�)rN)r/rrrrP�sz+TestSyncManagerTypes.test_bounded_semaphorecCs|��|��dS)N)rBrC)rjr&rrr�_test_condition�sz$TestSyncManagerTypes._test_conditioncCs|j��}|�|j|�dS)N)r<rWr�r�)r/rRrrr�test_condition�s
z#TestSyncManagerTypes.test_conditioncCs|��dS)N)r�)rjr&rrr�
_test_barrier�sz"TestSyncManagerTypes._test_barriercCs|j�d�}|�|j|�dS)NrN)r<r�r�r�)r/rRrrrr��sz!TestSyncManagerTypes.test_barrierc	Cs|�WdQRXdS)Nr)rjr&rrr�
_test_pool�szTestSyncManagerTypes._test_poolcCs |jjdd�}|�|j|�dS)Nr)r;)r<rr�r�)r/rRrrr�	test_pool�szTestSyncManagerTypes.test_poolcCs"|��|��x|D]}qWdS)N)r��reverse)rjr&r�rrr�
_test_list�s

zTestSyncManagerTypes._test_listcCs6|j��}|�d�|�|j|�|�t|�d�dS)NrNr)r<rsr�r�r�rEr])r/rRrrrr��s

zTestSyncManagerTypes.test_listcCsdS)Nr)rjr&rrr�
_test_dict�s	zTestSyncManagerTypes._test_dictcCs4|j��}d|d<|�|j|�|�t|�d�dS)NrNrMr)r<r�r�r�rEr])r/rRrrrr��s
zTestSyncManagerTypes.test_dictcCs|�d�dS)Nrk)r�)rjr&rrr�_test_value�sz TestSyncManagerTypes._test_valuecCs>|j�dd�}|�|j|�|�|jd�|�|��d�dS)Nr�r>rk)r<rr�r�rErFrv)r/rRrrrr��szTestSyncManagerTypes.test_valuecCsdS)Nr)rjr&rrr�_test_array�sz TestSyncManagerTypes._test_arraycCs$|j�dddg�}|�|j|�dS)Nr�rr>)r<r�r�r�)r/rRrrrr��szTestSyncManagerTypes.test_arraycCsdS)Nr)rjr&rrr�_test_namespace�sz$TestSyncManagerTypes._test_namespacecCs(|j��}d|_d|_|�|j|�dS)Nrr>)r<rr�r�r�r�)r/rRrrrr�s
z#TestSyncManagerTypes.test_namespaceN)r)rA)rA)rM)+r7r8r9r9rrBrCr�r�r�r�rrr�r�r�r�r�rorpr�rEr�rHrLrNrPr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrrrrr��sH




r�c@s$eZdZedd��Zedd��ZdS)�	BaseMixincCstjj��tj��f|_dS)N)rr�	_danglingrr��dangling)rjrrrr�s
zBaseMixin.setUpClasscCs�tj��ttjj�t|jd�}|rBdtj_t	d|t
jd�d}ttj�t|jd�}|r|dtj_t	d|t
jd�d}dS)NrTz!Warning -- Dangling processes: %s)r�r>zWarning -- Dangling threads: %s)
r�r�
gc_collectr�rrr�r�r�rpr�r�r�)rjr;r=rrrr�s


zBaseMixin.tearDownClassN)r7r8r9r�rrrrrrr��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�ZdS)rir;N)r7r8r9rSrrcr�r;rVrqrr�rr(rArFrMrOrWror�rr�r�r�rrrrri	s(















rics
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)�ManagerMixinr<z
manager.Queuezmanager.JoinableQueuezmanager.Lockz
manager.RLockzmanager.Semaphorezmanager.BoundedSemaphorezmanager.Conditionz
manager.Eventzmanager.Barrierz
manager.Valuez
manager.Arrayzmanager.listzmanager.dictzmanager.NamespacecOs|jj||�S)N)r<r)rjr3r4rrrr2szManagerMixin.Poolcst���t��|_dS)N)rrrr@r<)rj)rrrr6s
zManagerMixin.setUpClasscs�t��}d}x^tt���dkrjt�|�|d9}t��|}|dkrdtj_t	dt��|ft
jd�PqWt�
�|j��dkr�dtj_t	d	�t	|j���|j��|j��d|_t���dS)
Ng{�G�z�?r>rkg@TzPWarning -- multiprocessing.Manager still has %s active children after %s seconds)r�rz@Warning -- Shared objects which still exist at manager shutdown:)r1r2r]rrqr|r�rr�rpr�r�r�r�r<Z_number_of_objectsZ_debug_inforwrwrr)rjr�r5rd)rrrr;s*



zManagerMixin.tearDownClass)r7r8r9rSrrcrS�operator�
attrgetterrr(rArFrMrOrWror�rr�rsr�rr�rrrrTrr)rrr� s&r�c@s�eZdZdZejjZejjZeejj	�Z	eejj
�Z
eejj�Zeejj�Zeejj
�Z
eejj�Zeejj�Zeejj�Zeejj�Zeejj�Zeejj�Zeejj�Zeejj�Zeejj�Zeejj�ZdS)�ThreadsMixinr=N)r7r8r9rSrZdummyrcr�r;rVrqrr�rr(rArFrMrOrWror�rr�rrrrr�^s$r�c
s0|d}t�}dddh}x�|��D]�\}}t|t�s6q"t|t�r�|tkrJq"x�|jD]\}d|��|dd�}||��d}	Gdd	�d	||	tj	�}
||
_
|
_||
_|
||<qRWq"t|tj	�r"Gd
d	�d	|t
�}
||
_
|
_||
_|
||<q"Wddg�dg����fdd�}��fd
d�}||d<||d<dS)Nr7r;r=r<ZWithr>�Mixinc@seZdZdS)z*install_tests_in_module_dict.<locals>.TempN)r7r8r9rrrr�Temp�sr�c@seZdZdS)z*install_tests_in_module_dict.<locals>.TempN)r7r8r9rrrrr��scs�t�t�tj��tjj���d<tj���d<tjdd��d<ytj	�dd�Wn"t
k
rvt��d��YnXt
j�d�r�yt��}Wntk
r�t�d��YnXt�t��t���t�dS)	Nrr>T)Z
allow_none)r�z start method not supportedZlinuxz1OSError raises on RLock creation, see issue 3111!)rr�r�rZ_cleanupr�rr�r�r�r(r)r*r�r�r�rFr�r+rZget_temp_dirr"r#r')rD)r��old_start_method�start_methodrr�setUpModule�s$

z1install_tests_in_module_dict.<locals>.setUpModulecs�d}tj��tj�ddd�ttjj�t�d�}|rZd}dtj_t	d|t
jd�d}ttj�t�d�}|r�d}dtj_t	d|t
jd�d}|r�t
�d	�tj��dS)
NFrT)r�z!Warning -- Dangling processes: %s)r�r>zWarning -- Dangling threads: %sg�?)r�rr�rr�r�rr�r�rpr�r�r�r1r|rZ_cleanup_tests)Z
need_sleepr;r=)r�r�rr�tearDownModule�s(



z4install_tests_in_module_dict.<locals>.tearDownModuler�r�)�globalsr�r
rr�
issubclassr:rJ�
capitalizer)�TestCaser7r9r8r4)
Zremote_globsr�r8Zlocal_globsZ	ALL_TYPESrh�baseZtype_Znewnamer�r�r�r�r)r�r�r�r�install_tests_in_module_dictvs6


r�)r)�r)rrr�r1r�rr�r%r�r�r�r�r�r�r-rtr�r�Ztest.supportr�Ztest.support.script_helperr�
import_modulerr�r\rZmultiprocessing.dummyZmultiprocessing.heapZmultiprocessing.managersr_Zmultiprocessing.queuesrrZHAVE_SEND_HANDLEr��ImportErrorZmultiprocessing.sharedctypesrrrmr�rrrrr$r'r�r?rrrr�Z
HAVE_GETVALUEr�r7rrr&r�r�Zctypesrr r!r"r4r+r,r:rLrMrRrcr�r�rrrr@rJrQrnrqrr�r�r�r�r�r�rrrrr	r(r
rrrWrYrZrbrirjr:rkrnrorq�registerrurr}r~rr�r�r�r�r�r�r�r�r�rlr�r�r�r�r�r�rr!r/r5r8r>r?rIrJrKrLrMrTrYrirlrzrr�r�r�r�r�r�r�r�r�rir�r�r�rrrr�<module>sl








[N@6*39FS

	J(1:
04"0R	O;x+E"!4 "BCF
I%p>