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.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)�
DummyCallablecCst|t�st�|�d�dS)N�)r
rM�AssertionError�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/�currentrXrrr�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)rcr[F)
rTrUrV�Process�_testrEr[rWrY�assertFalse)r/Zproc0Zproc1�proc2rrr�test_daemon_argument�s
z!_TestProcess.test_daemon_argumentcOsR|��}|�|�|�|�|�|j�|jdkrN|�t|j��|�|j�dS)Nr=)rWrP�namerTr]rX�pid)�clsrQr3r4rarrrre�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)rcr3�kwargsriTr=Fr)r�Eventrdrer[rWrTrErXrZ�assertNotIn�active_childrenrY�type�listr`�start�assertIn�getrirj�joinr)r/rQ�er3rori�prarrr�test_processs>



z_TestProcess.test_processcCst�d�dS)N�d)r1�sleep)rkrrr�_sleep_some+sz_TestProcess._sleep_somecCst�|�dS)N)r1r})rk�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 {})rcTrgr$r>�alarmcstd���dS)Nzjoin took too long: %s)�RuntimeError)r3)rzrr�handlerQsz+_TestProcess._kill_process.<locals>.handler�
F)rTrUrVrdr~r[rurErZrvrrr`r,rxrCr.r1r}�hasattr�signal�SIGALRMr�rq)r/Zmethrxr�Zold_handlerr)rzr�
_kill_process3s>




z_TestProcess._kill_processcCs,|�tjj�}tjdkr(|�|tj�dS)N�nt)	r�rrd�	terminater%rirEr��SIGTERM)r/r`rrr�test_terminatefs
z_TestProcess.test_terminatecCs,|�tjj�}tjdkr(|�|tj�dS)Nr�)	r�rrd�killr%rirEr��SIGKILL)r/r`rrr�	test_killks
z_TestProcess.test_killcCsJyt��}Wntk
r$d}YnX|�t|�tk�|�|dk�dS)Nr>)r�	cpu_countrDrYrs�int)r/Zcpusrrr�test_cpu_countps
z_TestProcess.test_cpu_countcCsp|�t|���t�|jtjtfd�}|�||���d|_	|�
�|�||���|��|�||���dS)N)rcr3T)
rErsrrrtrdr1r}�DELTArqr[rurvrx)r/rzrrr�test_active_childrenxsz!_TestProcess.test_active_childrencCsV|�|�t|�dkrRx:td�D].}|j|j|||gfd�}|��|��q WdS)Nrl)rcr3)�sendr^�rangerd�_test_recursionrurx)rk�wconn�id�irzrrr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)rk�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 {})rcr3g)rr>)rTrUrVrprdr��assertRaisesr(�sentinelru�
addCleanuprxr\r�rfr�setrY)r/r�rzr�rrr�
test_sentinel�s
z_TestProcess.test_sentinelrNcCs|dk	r|��t�|�dS)N)rw�sys�exit)rk�rcrQrrr�_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 {}rQ)rcroTFr)rTrUrVrrdr�r[rurErZr�r(rrPrxr`r��weakref�ref�gc�collect�assertIsr)r/rQrz�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�?)rcr3)rdr�)�.0r�)r/rr�
<listcomp>�sz4_TestProcess.test_many_processes.<locals>.<listcomp>rcsg|]}�j�jd��qS))rc)rdr~)r�r�)r/rrr��sg����MbP?r��darwin)rTrUrVr�get_start_methodr�rurrEr`r1r}r�r%rir�r�r��platformr�r�rv)r/�sm�N�procsrzZ	exitcodesr)r/r�test_many_processes�s6











z _TestProcess.test_many_processescCsft�}t�|�}|��}|j|||fd�}~|��|��|�|�d�|�|�	�d�t
|�dS)N)rcr3rN)rMr�r�rrdrurxr�rErwr)r/rRr�rQrzrrr�test_lose_target_refs
z!_TestProcess.test_lose_target_refcCs|�tj���|��dS)N)rP�testrZfd_countr)r/�evtrQrrr�_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))rcr3)rdr�)r�r�)r�rQr/rrr�"sz8_TestProcess.test_child_fd_inflation.<locals>.<listcomp>csg|]}����qSr)rw)r�r�)rQrrr�(sr>)rTrUrVrr�rprr�rurEr^r�rxr)r/r�r�r�rzZ	fd_countsr)r�rQr/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)rcT)rcr[)�	threading�Threadru)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 {})rcr3)
rTrUrVrprdr�rurxrY�is_set)r/r��procrrr�test_wait_for_threads>s
z"_TestProcess.test_wait_for_threadscCsXxJ|��D]>\}}|dkr,t��}|��n|dks8t�d}tt|d�q
W|��dS)Nr�remove)�items�io�StringIOrrO�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)rcr3)r�r�r�getattrr�r�rprdr�rurxrYr�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�)rr�)rcr3r)r�r�rprdr�rurxrYr�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�rrrr�_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�?)rcr3g@)r�)rTrUrVrr�Zmultiprocessing.forkserverr��ensure_runningrprdr�ruZ_forkserver_pidr%r�r1r}rxrYr�rEr`rv)
r/�signumr�r�rr�r�rjZevt2rgrrr�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%rir�r�r�)r/rrr�test_forkserver_sigkill�s
z$_TestProcess.test_forkserver_sigkill)rN)r�)#r7r8r9rJrbrh�classmethodrer{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�rrrrrS�sD
(3
 #
&rSc@s,eZdZdd�Zdd�Zdd�Zdd�Zd	S)
�_UpperCasercCs tj�|�t��\|_|_dS)N)rrdr0r��
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&t|�tkst�|j�|�|j��S)N)rs�strrOr�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)NTrnZHELLOZworldZWORLD)r�r[rurEr�r�rx)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 {})rcr3�r�ZeroDivisionErrorztest_multiprocessing.pyz1/0 # MARKER)rTrUrVr�r�TESTFNr��unlinkrd�_test_stderr_flushrurx�open�readrv)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�)rkr��fdrrrr��sz*_TestSubclassingProcess._test_stderr_flushcCs8t�|tjtjBtjB�}t|ddd�t_t�|�dS)NrF)r)r%r�rrrr�r�r�)rk�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>rl�zignore this)rcr3Tr�)TF�)rTrUrVr�rr�r�r�rdrr[rurrEr`r�r��rstripr�r%r�r�)r/r�rrzr�Zcontentrrr�
test_sys_exit�s,


z%_TestSubclassingProcess.test_sys_exitN)
r7r8r9rJr�rr�r�rrrrrrr��s	r�cCs"t|d�r|��S|��dkSdS)N�emptyr)r�r
�qsize)rQrrr�queue_emptys
rcCs"t|d�r|��S|��|kSdS)N�full)r�rr)rQ�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�rwr�)rkr�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)rcr3TFr>rlr	�rN�r)r)rrprdrr[rurErrrP�
put_nowaitr1r}r�r,r��pyqueueZFullrCr.�TIMEOUT1�TIMEOUT2�TIMEOUT3r�rrxr)r/ZMAXSIZErrrr�rPrrrr�test_put.sP




z_TestQueue.test_putcCs<|��|�d�|�d�|�d�|�d�|��dS)Nrlr	rrN)rrPr�)rkrrrrrr�	_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)rcr3TFrlr	r>)rrrNr)rrprdr r[rurErr�rr1r}r�rw�
get_nowaitr,r�r�EmptyrCr.rrrrxr)r/rrrr�rwr!rrr�test_getssD


z_TestQueue.test_getcCs"xtdd�D]}|�|�qWdS)Nr�r�)r�rP)rkrr�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�)rcr3Tr�F)rr�rPr1r}r�rdr$r[rurErwr�rr"rxr)r/rr�rzrrr�	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>rNrl)rrErrDrUrPrwr)r/rQrrr�
test_qsize�s

z_TestQueue.test_qsizecCs,x&t|jd�D]}t�t�|��qWdS)N)r�rwr1r}r�Z	task_done)rkrQ�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))rcr3)rdr()r�r�)rr/rrr��sz-_TestQueue.test_task_done.<locals>.<listcomp>rTr�)�
JoinableQueuer�r[rurPrxr)r/�workersrzr�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.pyrz�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"rw�assertGreaterEqualr)r/rQru�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�NotSerializablesr4T)rr>)rg�?)rTrUrV�objectr�r�captured_stderrrrPrYrwrrrErrDr
)r/r4rQrrr�"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)r8r')r/rrrrIEszV_TestQueue.test_queue_feeder_on_queue_feeder_error.<locals>.NotSerializable.__reduce__N)r7r8r9�__doc__r0rIrrrrr4?sr4cs 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'r9)ryr')r4rr�_on_queue_feeder_errorKs

z\_TestQueue.test_queue_feeder_on_queue_feeder_error.<locals>.SafeQueue._on_queue_feeder_errorN)r7r8r9r:�staticmethodr;r)r4rr�	SafeQueueIsr=)�ctxTg�?)r)rTrUrVr5rrrr�rr6�get_contextrPrYrwr8r9)r/r=Znot_serializable_objrQr)r4r�'test_queue_feeder_on_queue_feeder_error9s



z2_TestQueue.test_queue_feeder_on_queue_feeder_errorN)r7r8r9r�rrr r#r$r%r&r(r+r0r3r7r@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)�RLockrErCrDr�rOr�)r/rErrr�
test_rlockksz_TestLock.test_rlockc	Cs|���WdQRXdS)N)rB)r/rrr�test_lock_contextus
z_TestLock.test_lock_contextN)r7r8r9rFrHrIrrrrrAbs
rAc@s,eZdZdd�Zdd�Zdd�Zdd�Zd	S)
�_TestSemaphorecCs�|�dt|�|�|��d�|�dt|�|�|��d�|�dt|�|�|�d�d�|�dt|�|�|��d�|�dt|�|�|��d�|�dt|�dS)NrlTr>rF)rHrLrErCrD)r/�semrrr�_test_semaphore|sz_TestSemaphore._test_semaphorecCsT|�d�}|�|�|�|��d�|�dt|�|�|��d�|�dt|�dS)Nrlr	r)�	SemaphorerLrErDrHrL)r/rKrrr�test_semaphore�s

z_TestSemaphore.test_semaphorecCs|�d�}|�|�dS)Nrl)�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)rTrUrVrMr,rCrErCr.rrr)r/rKrCrrrr3�s


z_TestSemaphore.test_timeoutN)r7r8r9rLrNrPr3rrrr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)rCrDr)rk�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)rTZ_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)rcr3Tr>rl)�	ConditionrMrdr�r[rur�rxr�r�rCr1r}r�rHrL�notifyrDrV)r/rRrSrTrzrrr�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	)rcr3Trcst��S)N)rLr)rTrr�<lambda>6�z0_TestCondition.test_notify_all.<locals>.<lambda>)rWrMr�rdr�rr[rur�rxr�r�rCrHrLrVr1r}r�Z
notify_allrDrU)r/rRrSr�rzr5r)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	)rcr3Trrl)�ncst��S)N)rLr)rTrrrZZr[z._TestCondition.test_notify_n.<locals>.<lambda>rcst��S)N)rLr)rTrrrZar[)rWrMr�rdr�r[rur�rxr�r�rCr1r}r�rHrLrXrDrUrV)r/rRrSr�rzr5r)rTr�
test_notify_n;s:


z_TestCondition.test_notify_ncCsH|��}t|j�}|��|t�}|��|�|d�|�|jt�dS)NF)	rWr,rrCrrDrErCr.)r/rRrrGrrrr3ms
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�)rkrRr_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$)rcr3Tcs
�jdkS)Nr)rFr)r_rrrZ�r[z-_TestCondition.test_waitfor.<locals>.<lambda>rrg{�G�z�?r>)rWrrdrar[rur`rYrErFr�r1r}rXrr`)r/rRrzr�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)rDr1r2r`rF)rkrRr_�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)rcr3T)rr	g{�G�z�?r>)rWrrMrdrer[rurYrCrr�r1r}rFrXr)r/rRr_rcrKrzr�rrr�test_waitfor_timeout�s 

z#_TestCondition.test_waitfor_timeoutc	Cs<|�|��WdQRXt�d�|dk	r8t�|tj�dS)Nr>)rXr1r}r%r�r�r�)rkrRrjrrr�_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�������?)rcr3�<)r
�ProcessesMixinr�r�r%r_rWrfrrdrgrurYr��KeyboardInterruptrx)r/rjrRrzrrr�test_wait_result�s
z_TestCondition.test_wait_result)N)r7r8r9r�r�rUrVrYr\r^r3rar)�
skipUnless�HAS_SHAREDCTYPESrbrerfrgrkrrrrrQ�s->2		rQc@s eZdZedd��Zdd�ZdS)�
_TestEventcCst�t�|��dS)N)r1r}rr�)rkr�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)rcr3)rpr,rrEr�rCr.rr�r�rdror[rurx)r/r�rrzrrr�
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�calcsizerB�__setstate__�
_lengthbuf)r/�wrapperrErrr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.
        )rcTcSsx|D]}|��qWdS)N)rx)r=rzrrr�finalizeAs
z Bunch.__init__.<locals>.finalizeN)r�r3r]�	DummyList�started�finishedrp�	_can_exitr�r�rd�taskr[rur�r�r��
_finalizer)
r/�	namespacer�r3r]Zwait_before_exitr=r�rzr�rrrr0+s 



zBunch.__init__c	CsRt��}|j�|�z|j|j�Wd|j�|�|j�d�|j�	�sLt
�XdS)N�)r%r_r�r�r�r3r�r�rr�rO)r/rjrrr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)
r7r8r9r:r0r�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<)rTr<rtrq)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_threadscCs�|j}||jkst�xpt|�D]d}|d�d�t|d�||ksHt�|��|d�d�t|d�|d|kszt�|��qWy|jdks�t�Wntk
r�YnX|j	r�t�dS)NrTr>)
�partiesr�rOr�r�r^r�	n_waitingrD�broken)rkr��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)rrP)rkr�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)rw)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�)rkr�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)NrlT)rr�r�r�r��BrokenBarrierErrorr�)rkr��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�rYr�)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)Nrlr>g����MbP?T)	rr�r�r1r}�resetr�r�r�)rkr�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)NrlT)rr�r�r�r�r�r�r�)rkr��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)Nrlg�?g�?T)rr�r1r}r�r�r�)rkr�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r3)sz_TestBarrier.test_timeoutcCsV|�|j�}||jdkr$t�d�y|��Wn tjk
rP|�d�YnXdS)Nrlg�?T)rr�r�r1r}r�r�r�)rkr�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�)rkr�r��connrEr�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)rcr3)rTrUrVrBr�r�r�rdr�r�rur�rxrEr�)r/r�rEr�r��jrzr�rrr�
test_thousandQs
z_TestBarrier.test_thousandN)r>)r7r8r9r:r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r3r�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�����)rQllrR�x�ycCsts|�d�dS)Nz%requires multiprocessing.sharedctypes)rmrU)r/rrrr�qsz_TestValue.setUpcCs(x"t||j�D]\}}|d|_qWdS)Nrl)�zip�codes_valuesrF)rk�values�sv�cvrrrreusz_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>)rcr3Trl)	r�r�rErFrdrer[rurx)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)rEF�get_lock�get_objZnavalue)
rr�r�rBrErfr�r�r'r�)
r/Zval1�lock1�obj1Zval2�lock2�obj2rEZval3�lock3�obj3�arr4�arr5rrr�test_getobj_getlock�s$z_TestValue.test_getobj_getlockN)F)r7r8r9rJrr�r�r�rer�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^)rk�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�r	rlrr>rr
)rcr3T)�RawArray�ArrayrEr^rt�arrayr�rdr[rurx)r/r�r��arrrzrrr�
test_array�s$(
z_TestArray.test_arraycCsvd}xltd�D]`}|�d|�}|�t|�|�|�t|�dg|�td�|dd�<|�t|�ttd���~qWdS)Nr�r	r�r)r�r�rEr^rt)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�)rEFr�r�Znotalock)r�rtr�r�r�rBrErfr�r�r'r�)
r/Zarr1r�r�Zarr2r�r�rEZarr3r�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�rNrlr	rrr>rcSsg|]}|dd��qS)Nr)r�Zelementrrrr�sz-_TestContainers.test_list.<locals>.<listcomp>rr
�	rn)rtr�rE�extendr�)r/rArBr�ryr�rrr�	test_lists((,
2
z_TestContainers.test_listcCsf|�ttd���}t|�}|�t|�ttd���|�t|�g�t|�}d|d<|�t|�d�dS)Nr�r|r)rtr�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	)rtr�)r�Z_i)r/rrr�,sz;_TestContainers.test_list_proxy_in_list.<locals>.<listcomp>r	cSsg|]}|dd��qS)Nr)r��innerrrrr�-srr>rl�7r$)rtr�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)
�dictrtr�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�rtr�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)Nrlr)�ferrets�hamstersr�r	)�water�feed)�pets�suppliesr�r�rNZblanketsrr�r��rr�r>Zmarmots�X�cr$r�)r�rEr�r^rtr\)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)rrzNamespace(name='Bob')ri�job)�	NamespacerirZ_hiddenrEr�rYr�)r/r]rrr�test_namespace�sz_TestContainers.test_namespaceN)r7r8r9rJr�r�r�r�r�rrrrrr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
r	cCs|S)Nr)r�rrr�identity�sr
c@s eZdZdZdd�Zdd�ZdS)�
CountedObjectrcCs|jd7_t�|�S)Nr>)�n_instancesr5�__new__)rkrrrr
�szCountedObject.__new__cCst|�jd8_dS)Nr>)rsr)r/rrr�__del__�szCountedObject.__del__N)r7r8r9rr
rrrrrr�src@seZdZdS)�SayWhenErrorN)r7r8r9rrrrr�srccs<|dkrtd��x&t|�D]}||kr.td��|VqWdS)Nr$zSomebody said when)rr�)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)rk)�	__class__rrr�s
z_TestPool.setUpClasscs(|j��|j��d|_t���dS)N)rr�rxr�
tearDownClass)rk)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�maprErrtr�)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�starmaprtr�r�rEr�	itertools)r/Zpsmap�tuplesrrr�test_starmap�sz_TestPool.test_starmapcCsDtttd�tddd���}|�|j�t|���tt�	t|���dS)Nr|r�r$)
rtr�r�rErZ
starmap_asyncrrwrr)r/rrrr�test_starmap_async�sz_TestPool.test_starmap_asyncc	Cs8|�|j�tttd�����tttttd�����dS)Nr�)rEr�	map_asyncrrtr�rwr)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>rrArl)rTr<rtrr"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�)	rTrUrVr5r�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"rrwrr�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�r	c@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/)	rTrUrVr�rrrrr)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,rwrErCr.)r/rGrwrrr�
test_async	s
z_TestPool.test_asynccCsD|j�tdtdf�}t|j�}|jtj|td�|�	|j
t�dS)Nrg�?)r)rr2rrr,rwr�rr+rCr.)r/rGrwrrr�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�imaprrtr�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�r	r�rrlrr)
rTrUrVrr5rrr�rr.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_unorderedrrtr�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�r	r�rrl)rTrUrVrr9rrr�rr.rtrr�r�rvr�)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	)
rT�RemoteErrorr(r�rrEr^�_poolrrx)r/Zexpected_errorrzrrr�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,rx�
assertLessr.)r/r�rxrrrr��	s
z_TestPool.test_terminatecCsz|�d�}|�|�tg�g�|�t|�tg��g�|�t|�tg��g�|�|�tg���g�|�	�|�
�dS)Nr>)rrErrrtr5r9r"rwrrx)r/rzrrr�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>rl)rTrtr�rr"rrErwrxr�r()r/�Lr�rzr�rrr�test_context�	s
z_TestPool.test_contextcCstd��dS)N�{)r�)rkrrr�_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)rCz&raise RuntimeError(123) # some commentr$zexpected SayWhenError)rTrrrD�	Exceptionr/rxr�rsr�rEr3�	__cause__rrZRemoteTracebackrv�tbr�rr6r��
excepthook�exc_info�getvaluerrrr)r/rzry�exc�cause�f1rrr�test_traceback�	s:

z_TestPool.test_tracebackcCstd��dS)N�foo)r�)rkrrr�_test_wrapped_exception�	sz!_TestPool._test_wrapped_exceptionc
CsD|�d��(}|�t��|�|j�WdQRXWdQRX|��dS)Nr>)rr�r�rrPrx)r/rzrrr�test_wrapped_exception�	s z _TestPool.test_wrapped_exceptioncCs~t��}|�t��N|�d��8}z|�tddg�Wdt�d�|��|�	�XWdQRXWdQRX|�
t��|d�dS)Nrlrr>g�?g�������?)r1r2r�r(rrr	r}rrx�
assertGreater)r/Zt_startrzrrr�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�rrr
r1r}r�rEr�rr)r/ZobjsZrefsrrr�test_release_task_refs�	s
z _TestPool.test_release_task_refs) r7r8r9r�rrrrr r!r#r(r*r,r0r3r4r7r8r:r;r>r�r@rBrDrNrPrQrSrU�
__classcell__rr)rrr�s6	

$

&rcCstd��dS)N�key)�KeyErrorrrrr�raising�	srYcCsdd�S)NcSsdS)N�*rrrrrrZ
r[z%unpickleable_result.<locals>.<lambda>rrrrr�unpickleable_result
sr[c@s eZdZdZdd�Zdd�ZdS)�_TestPoolWorkerErrors)r;csjt�d�}dg��fdd�}|jt|d�}|�t|j�|��d�|��dt�|�	�|�
�dS)Nrlcs|�d<dS)Nrr)rK)�
scratchpadrr�errback
sz@_TestPoolWorkerErrors.test_async_error_callback.<locals>.errback)r&r)rrr2rYr�rXrwrYr\rrx)r/rzr^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)�MaybeEncodingErrorrlr�cs|�d<dS)Nrr)rK)r]rrr^
sz?_TestPoolWorkerErrors.test_unpickleable_result.<locals>.errback)r&)�multiprocessing.poolr`rrr�r2r[r�rwrYr\ZassertIsNotNonerKrFrrx)r/r`rzZ	iterationr^rG�wrappedr)r]r�test_unpickleable_result
s

z._TestPoolWorkerErrors.test_unpickleable_resultN)r7r8r9rJr_rcrrrrr\
sr\c@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)Nr	r�)�maxtasksperchildcSsg|]
}|j�qSr)rj)r�rrrrr�2
szE_TestPoolWorkerLifetime.test_pool_worker_lifetime.<locals>.<listcomp>r|�2css|]}|��VqdS)N)rZ)r�rrrrr�@
szD_TestPoolWorkerLifetime.test_pool_worker_lifetime.<locals>.<genexpr>r>cSsg|]
}|j�qSr)rj)r�rrrrr�C
s)rrrEr^r=r�r�r2r�	enumeraterwZ_repopulate_pool�allr1r}r�rqZassertNotEqualr�rrx)	r/rzZorigworkerpidsr�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)Nr	r>)rerg333333�?)rrr�r�r2rrrxrgrErw)r/rzr�r�r�rGrrr�%test_pool_worker_lifetime_early_closeL
sz=_TestPoolWorkerLifetime.test_pool_worker_lifetime_early_closeN)r7r8r9rJrirjrrrrrd,
srd)�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�rnrorrrrrm_
srmccs xtd�D]}||Vq
WdS)Nr�)r�)r�rrr�bazg
srpc@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rqk
srqc@seZdZdS)�	MyManagerN)r7r8r9rrrrrsr
srs�Foo)�callable�Bar)r�ro)ruZexposed)ruZ	proxytypec@s0eZdZdZdd�Zdd�Zdd�Zdd	�Zd
S)�_TestMyManager)r<cCs<t�}|��|�|�|��|�|jjdtjf�dS)Nr)	rsru�common�shutdownrv�_processr`r�r�)r/r<rrr�test_mymanager~
s

z_TestMyManager.test_mymanagerc	Cs8t��}|�|�WdQRX|�|jjdtjf�dS)Nr)rsrxrvrzr`r�r�)r/r<rrr�test_mymanager_context�
sz%_TestMyManager.test_mymanager_contextc	Cs<t�}|��|�|�|�WdQRX|�|jjd�dS)Nr)rsrurxrErzr`)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�ri)rOrrr��
sz)_TestMyManager.common.<locals>.<listcomp>)r�rnrocsg|]}t�|�r|�qSr)r�)r�ri)�barrrr��
sr�rnrozf()z_h()cSsg|]}||�qSrr)r�r�rrrr��
sr�)
rtrvrprEr�r�r(rnrrr<rortr�)r/r<rpZfoo_methodsZbar_methodsr)r~rOrrx�
s z_TestMyManager.commonN)r7r8r9rJr{r|r}rxrrrrrwz
s
rwcCstS)N)�_queuerrrr�	get_queue�
sr�c@seZdZdZdS)�QueueManagerz$manager class used by server processN)r7r8r9r:rrrrr��
sr�c@seZdZdZdS)�
QueueManager2z@manager class which specifies the same interface as QueueManagerN)r7r8r9r:rrrr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)�addressrX�
serializer)r��
SERIALIZER�connectr�rP�tupler�)rkr�rXr<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�rXr�)rcr3T)r%�urandomr�r�r�HOSTr�rur�ryrdr�r�r[r�r�r�rErwr�r�rErPr1r})r/rXr<rzZmanager2rrrr�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�rXr�zhello world)r�r�r�r�rP)rkr�rXr<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�rXr�)rcr3zhello worldryg�?)r%r�r�r�rr�r�Z
get_serverr��listenerrrurdr�rxr�rErwr�ryr��OSError�errnoZ
EADDRINUSEr1r})r/rXr<Zsrvr�addrrzrryrrr�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)rkr��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)rcr3Tr>g@zhello worldr�r�rr;rr	rz(                                        zexpected BufferTooShort, got %sFr$g�������?�Xi)(r�rdr�r[rurr�rtr�rTrErs�filenor�r�r�r�r�r^Zrecv_bytes_into�itemsize�	bytearrayrZBufferTooShortr3r/r,r�rCr.rr1r}r�r�readable�writabler��EOFErrorrx)r/r�r�rzr�r�Zlongmsgr��bufferr�rGryr�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;Trl)
r�rEr�r�rTr�r�r�r�r�)r/�reader�writerrrr�test_duplex_false�s
z!_TestConnection.test_duplex_falsecCst|��\}}|j|j|fd�}d|_|��|��td�}|�|�|�|�	�|�|�t
�|��|��dS)N)rcr3Trn)r�rdr�r[rurrr�rEr�r�rx)r/r�r�rzr�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)
rTrUrVrr�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)rkrryrrr�_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)rkr��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)rcr3�wb�rb)rTrUr�rdr�r[rur�r�rr�r�r�r�r�Z
get_osfhandler�send_handlerjrxrEr�)r/r�r�rzr�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)rcr3r�rz2could not find an unassigned large file descriptorr�)rTrUr�rdr�r[rur�r�rr�r�r�r�r��MAXFDr�r/r%r�rr�rjrrxrEr�)r/r�r�rzr�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�)rcr3)rTrUr�rdr�r[rur�r�rr�rx)r/r�r�rzrrr�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�rTrf�closedrYr�r�)r/rArBrrrrB"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�rBrrrr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�rTr�r�)r/r�rRr�rrrrB=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�rTr�r�)r/r��clientr�rrr�test_abstract_socketGs

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

r�c@s4eZdZdZedd��Zdd�Zdd�Zdd	�Zd
S)�_TestListenerClient)r;r=cCs"|j�|�}|�d�|��dS)Nrn)r�r�r�r)rkr�r�rrrreXs
z_TestListenerClient._testcCsnxh|jjD]\}|jj|d�}|j|j|jfd�}d|_|��|��}|�	|�
�d�|��|��q
WdS)N)r�)rcr3Trn)
r�r�r�rdrer�r[rur�rEr�rxr)r/r�r�rzr�rrr�test_listener_client^sz(_TestListenerClient.test_listener_clientcCsj|j��}|j|j|jfd�}d|_|��t�d�|�	�}|�
|��d�|��|�
�|��dS)N)rcr3Tr>rn)r�r�rdrer�r[rur1r}r�rEr�rrx)r/r�rzr�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�rYr�r)r/�famr�rRrArrr�test_issue16955ys
z#_TestListenerClient.test_issue16955N)	r7r8r9rJr�rer�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)rkr��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)rcr3��g{�G�z�?)	r�rdr�rur�r�r�rErx)r/r�rArBrzr
r�r�rrr�test_strings�s

z_TestPoll.test_stringscCs|�d�dS)NrN)r�)rkr�rrr�_child_boundaries�sz_TestPoll._child_boundariescCsv|�d�\}}|j|j|fd�}|��t�d�ddg}x|D]}|�|�q@W|��|��|�	|�
�|�dS)NF)rcr3rlsfirstssecond)r�rdr�rur1r}r�rrxrvr�)r/r�rrzrAr'rrr�test_boundaries�s

z_TestPoll.test_boundariescCs"|�d�|�d�|�d�dS)Nr�r�scd)r�)rkrBrrr�_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�������?)rcr3r�g�?Tr�scd)r�rEr�rdr�rur�rx)r/rArBrzrrr�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)rkr�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�)rkr�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)rkr�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)rcr3TzThis connection uses family %s�asciiz$This connection uses a normal socketr|r[)r�r�r�rdr�r[rurr�r	r�r�rEr�rr�rx)r/r�ZlconnZlconn0Zlpr�Zrconn0Zrpr�r�r�r��bufr
rrr�
test_pickling
sH




z&_TestPicklingConnections.test_picklingcCsD|��}|�d�|��|��}|��}|�|d�|��dS)Nzall is wellrl)r�r�r)rkr�rr�r�rrr�child_access2
s
z%_TestPicklingConnections.child_accesscCs�|��\}}|j|j|fd�}d|_|��|��|jdd�\}}|�|�|��|�|��d�|��|jdd�\}}|�|�|��|�d�|��|�|��d�|�	�dS)N)rcr3TF)r�zall is wellZfoobarZfoobarfoobar)
r�rdr�r[rurr�rEr�rx)r/r�r�rzr�rrrr�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�rfrr>i�Zfree�occupiedr	)r�r��randomZlognormvariaterrrrsr�r^Z	randranger�rzrCr�rDrtZ_len_to_seqr�Z_arenas�indexZ_allocated_blocks�sortrY)r/Z
iterationsZ	maxblocksZblocksr�r�rBrrrhr�rAZarenarur�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�rVrr)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)rmrU)r/rrrr��
sz_TestSharedCTypes.setUpcCs~|jd9_|jd9_|jd9_|jd9_|jd9_|jd9_x$tt|��D]}||d9<qbWdS)Nrl)rFr�r�r�r^)rkr�r�r�rOr��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)rEgUUUUUU�?lr	rlr�r�rRr�rn)rcr3T�gUUUUUU�?lrg@Z
hellohello)rr!r"r�r�rtr�rrFrdr�r[rurxrEr@r�r�)
r/rEr�r�r�rOr�r�rzr�rrr�test_sharedctypes�
s&
z#_TestSharedCTypes.test_sharedctypescCs|jdd�dS)NT)rE)r�)r/rrr�test_synchronize�
sz"_TestSharedCTypes.test_synchronizecCsTtddd�}t|�}d|_d|_d|_|�|jd�|�|jd�|�|jd�dS)Nrlg@lr)r�rr�r�r�rEr@)r/rOr~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)rfrr��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rt�
srt)rA)r3)rB)rR)�d10r>)r3�exitpriority)�d01r)�d02)�d03)ryi����)�STOPi����)r5r�Finalizer�Z_exit_functionrr%�_exit)rkr�rtrArBZclose_brRrrrrrrr�_test_finalize�
s0z_TestFinalize._test_finalizec
Csh|��\}}|j|j|fd�}d|_|��|��dd�t|jd�D�}|�|dddd	d
ddg�dS)
N)rcr3TcSsg|]}|�qSrr)r�r'rrrr�*sz/_TestFinalize.test_finalize.<locals>.<listcomp>rrArBrrrrry)	r�rdr
r[rurxr�r�rE)r/r�r�rzr�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rt2srtFc
sTxN�sNt�t��d�yt��Wqtk
rJ}z|�Wdd}~XYqXqWdS)Ng�������?)r1r}r�rZ_run_finalizersrE)ry)rK�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�)rtrr�	<setcomp>MszL_TestFinalize.test_thread_safety.<locals>.make_finalizers.<locals>.<setcomp>r�rN)r�r�ZgetrandbitsrEr�)r�ry)rtrKr
rr�make_finalizersFs$z9_TestFinalize.test_thread_safety.<locals>.make_finalizersg���ư>rN)rcg@T)r5r��getswitchintervalr�r��setswitchintervalr�r�r�r�rZ
start_threadsr1r}r�)r/rrZold_intervalZ
old_thresholdr=r)rtrrKr
r�test_thread_safety-s*




z _TestFinalize.test_thread_safetyN)
r7r8r9rJr�r�r�r
rrrrrr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__rxr�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.rrYr�r)r/rri�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�
SUBWARNINGrY�debug�info�	LOG_LEVEL)r/�loggerrrr�test_enable_logging�s

z _TestLogging.test_enable_loggingcCst��}|�|���dS)N)rr$r�ZgetEffectiveLevel)rkr�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�)rcr3)�level)rr$�loggingZ	getLoggerr.r�r%rdr,rurEr�rxrZNOTSETr))	r/ZLEVEL1ZLEVEL2r*Zroot_loggerZ
root_levelr�r�rzrrr�
test_level�s*


z_TestLogging.test_levelN)r7r8r9rJr+r�r,r0rrrr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)rkrjrrr�_killer�s
z_TestPollEintr._killerr2zrequires 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)rcr3)rlr)
r%r_r�r2rdr3rur1r}rxrYrEr`)r/r5rjZ
oldhandlerZkillerrzr)r4r�test_poll_eintr�s
z_TestPollEintr.test_poll_eintrN)r7r8r9rJr�r3r)rlr�r�r6rrrrr1�sr1c@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��WIN32r8rrrrr7�sr7c@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�_FakeConnectionsr;sabc)r5r�r�AuthenticationErrorr�Zdeliver_challenge)r/r;rrr�#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>rlssomething 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r;sr;sabc)r5r�rr<r�Zanswer_challenge)r/r;rrr�"test_answer_challenge_auth_failuresz,OtherTest.test_answer_challenge_auth_failureN)r7r8r9r=r>rrrrr:
s
r:cCs|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)rCryrx)r/rrrr�7s
zTestInitializers.tearDowncCsNtj��}|�t|jd�|�t|jf�|�|jj	d�|�
�|��dS)Nr>)r�managers�SyncManagerr��	TypeErrorrur@r?rEr�ryrx)r/r�rrr�test_manager_initializer;s
z)TestInitializers.test_manager_initializercCsH|jttjdd�t�dt|jf�}|��|��|�|jj	d�dS)Nr>)r@)
r�rFrrr@r?rrxrEr�)r/rzrrr�test_pool_initializerCs
z&TestInitializers.test_pool_initializerN)r7r8r9r�r�rGrHrrrrrA1srAcCs,y|jdd�}Wntjk
r&YnXdS)NF)�block)rwrr")rQ�itemrrr�_this_sub_processOsrKcCs2t��}tjt|fd�}d|_|��|��dS)N)rcr3T)rrrdrKr[rurx)rZsubProcrrr�
_test_processUs
rLcCs||S)Nr)r�rrr�_afunc\srMc
Cs:tjdd�}|�tdddddddg�}|��|��dS)	Nr)r;r>rlr	rNrr)rrrrMrrx)rr�rrr�pool_in_process_srNc@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_rQ�_cache)r/rjrrr�cachejs

z_file_like.cachecCs|j�|�dS)N)rSr�)r/r�rrrr,ssz_file_like.writecCs|j�d�|j��g|_dS)Nr�)rPr,rxrSrR)r/rrr�flushvsz_file_like.flushN)r7r8r9r0�propertyrSr,rTrrrrrOes	rOc@s$eZdZdd�Zdd�Zdd�ZdS)�TestStdinBadfiledescriptorcCs tjtd�}|��|��dS)N)rc)rrdrLrurx)r/r�rrr�test_queue_in_process|sz0TestStdinBadfiledescriptor.test_queue_in_processcCs tjtd�}|��|��dS)N)rc)rrdrNrurx)r/rzrrr�test_pool_in_process�sz/TestStdinBadfiledescriptor.test_pool_in_processcsJt��}t|����d�tj�fdd�d�}���|��dksFt�dS)NrOcs���S)N)rTr)�flikerrrZ�r[z:TestStdinBadfiledescriptor.test_flushing.<locals>.<lambda>)rc)	r�r�rOr,rrdrTrJrO)r/Zsior�r)rYr�
test_flushing�s
z(TestStdinBadfiledescriptor.test_flushingN)r7r8r9rWrXrZrrrrrVzsrVc@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)rkr�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�)rcr3Tc3s"|]}�D]}||jfVq
qdS)N)rj)r�r�rz)r�rrr��sz%TestWait.test_wait.<locals>.<genexpr>r�)�multiprocessing.connectionrr�rr�rdr]r[rurr�r�rxr�r�r�r�r�rE)r/r\r�readers�messagesr�r�rrzr�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)rkr�r\r
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)rcr3Tr�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�rrdrbr[rur�r�rxr�rr�r�r	r�rE)r/r\rr�r�r_r�Zdicr�rzr�r}r�r��vrrr�test_wait_socket�s<




zTestWait.test_wait_socketcCs|�d�dS)NT)ra)r/rrr�test_wait_slow�szTestWait.test_wait_slowcCs|�d�dS)NT)rd)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)rrNrlg�?r�g�������?)
r^rrr�r1r2rEr?rRr�)r/rr�rArBrurGr2rrr�test_wait_timeout�s
zTestWait.test_wait_timeoutcCs|��t�|�dS)N)rDr1r})rkrKZperiodrrr�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)rr	cSst|dd�d�S)NcSst|�S)N)r�)r�rrrrZr[z>TestWait.test_wait_integer.<locals>.<lambda>.<locals>.<lambda>)rW)r�)r�rrrrZr[z,TestWait.test_wait_integer.<locals>.<lambda>)rcr3r�)rrlg�������?)r^rrrMr�rdrhrur\r�r�rYrCr1r2rEr?rRr�r�rx)r/rr�Zsorted_rKrArBrzrurGr2rrr�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]rarbrdrerfrgrhrirjrrrrr[�s


%+r[c@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�r9rlrlrmrrrrrkBsrkc@s,eZdZedd��Zedd��Zdd�ZdS)�	TestFlagscCs|�ttj��dS)N)r�r�r��flags)rkr�rrr�run_in_grandchildSszTestFlags.run_in_grandchildcCsrddl}tjdd�\}}tj|j|fd�}|��|��}|��|��|��t	t
j�|f}t|�
|��dS)NrF)r�)rcr3)�jsonrr�rdrprur�rxrr�r�ro�print�dumps)rkrqr�rrz�grandchild_flagsrorrr�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�)rq�
subprocessZcheck_outputr��
executable�loads�decoderE)r/rqrv�progr�Zchild_flagsrtrrr�
test_flagsdszTestFlags.test_flagsN)r7r8r9r�rprur{rrrrrnRs
rnc@s eZdZedd��Zdd�ZdS)�TestTimeoutscCs>t�d�|�d�|��tj�|�}|�d�|��dS)Nr>rCi�)r1r}r�rrr�r�)rk�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�)rcr3rCi�)r�ZgetdefaulttimeoutZsetdefaulttimeoutrr�r�r�rdr~r�rurrEr�r�r)r/Zold_timeout�parentr}r�rzr�rrrr3|s"
zTestTimeouts.test_timeoutN)r7r8r9r�r~r3rrrrr|rs	r|c@seZdZdd�ZdS)�TestNoForkBombcCs�t��}tj�tj�t�d�}|dkrVtjj	�
||�\}}}|�|d�|�d|�n2tjj	�
||�\}}}|�|��d�|�|d�dS)Nzmp_fork_bomb.pyr�r[sRuntimeErrors123)rr�r%rrxrrr�r�
script_helperZassert_python_failurerErv�assert_python_okr)r/r�rir��outr�rrr�test_noforkbomb�szTestNoForkBomb.test_noforkbombN)r7r8r9r�rrrrr��sr�c@s eZdZedd��Zdd�ZdS)�TestForkAwareThreadLockcCsV|dkr:tj|j|d|fd�}|��|��t|�n|�ttj	��|��dS)Nr>)rcr3)
rrdr}rurrr�r^r�_afterfork_registry)rkr]r�rzrrrr}�s
zTestForkAwareThreadLock.childcCsdt�d�\}}t��}ttj�}tj|jd|fd�}|��|�	�|�
�}t|�|�||�dS)NFrN)rcr3)
rr�rZForkAwareThreadLockr^r�rdr}rurr�rZassertLessEqual)r/r�rr�Zold_sizerzZnew_sizerrrrF�s
z!TestForkAwareThreadLock.test_lockN)r7r8r9r�r}rFrrrrr��sr�c@s0eZdZdd�Zdd�Zedd��Zdd�Zd	S)
�TestCloseFdscCsbtrt����St����}g}x |dkr@|�|�t�|�}q"Wx|D]}t�|�qHW|SdS)Nrf)r9r��detachr�r%�dupr)r/rZto_closer�rrr�get_high_socket_fd�s


zTestCloseFds.get_high_socket_fdcCs,trtjtjtj|d���n
t�|�dS)N)r�)r9r�r�SOCK_STREAMrr%)r/rrrrr�szTestCloseFds.closec
CsZyt�|tjtj�}Wn,tk
rB}z|�|�Wdd}~XYnX|��|�d�dS)N)r�Zfromfdrr�rEr�r)rkr�rr
ryrrr�_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)rcr3r�i6')r�r)r*rr�r�rdr�rurr�rr�r�r\r�rYr�r�Zwinerror)r/r�r�rrzryZWSAENOTSOCKrrr�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�r2r�r�r��
CONN_MAX_SIZE)rkr�r�r�rrr�_test_ignores

zTestIgnoreEINTR._test_ignorer2zrequires 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)rcr3Tr�g�������?i�r�)rr�rdr�r[rurrEr�r1r}r%r�rjr�r2r�r�r�rx)r/r�r�rzrrr�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�r2rr�r�r�r�r�)rkr�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)rcr3Tg�������?r�)rr�rdr�r[rurr�r1r}r%r�rjr�r2r�r�rErx)r/r�r�rzr�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�)rkr�rrr�_check_contextJszTestStartMethod._check_contextcCs^|jdd�\}}|j|j|fd�}|��|��|��}|��|��|�||���dS)NF)r�)rcr3)	r�rdr�rurr�rxrEr�)r/r>r�rrzZ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rBXs
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?rYrsr7�lower�
startswithrdr�r1)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�rErY)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�rUr%rrxrrr�rr�r�ryrrrr/)r/rir�r�r�rrr�test_preload_resources�s
z&TestStartMethod.test_preload_resourcesN)
r7r8r9r�r�r�rBr�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)rvr%�pipe�Popenr�rw�PIPErr��readlinerryrZ
sem_unlinkr�rr1r}r�r�rvZ	exceptionr��ENOENTZEINVALr�r�ZassertRegex)r/rv�cmdr�rrzr�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�rQr%r�r1r}rr?�
contextlib�	ExitStack�
enter_contextZassertWarnsRegex�UserWarningrMrCrDr�r�r�r�ZassertIsNone)	r/r�Z
should_dier�rjr>�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)rrPr
r�)rkrrrrrr�_test_empty�s
zTestSimpleQueue._test_emptycCs�t��}t��}t��}tj|j|||fd�}d|_|��|�|���|�	�|�
�|�|���|�|�
�d�|�|�
�d�|�|���|��dS)N)rcr3TF)rZSimpleQueuerprdr�r[rurYr
r�rrfrErwrx)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<rur�)r/rrrr�s

zTestSyncManagerTypes.setUpcCsB|jdk	r(|j��r(|j��|j��|j��d|_d|_dS)N)r�rZr�rxr<ry)r/rrrr�s


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


z#TestSyncManagerTypes.wait_proc_exitcCs@tj||fd�|_d|j_|j��|��|�|jjd�dS)N)rcr3Tr)rrdr�r[rur�rEr`)r/Zworkerr'rrr�
run_worker=s

zTestSyncManagerTypes.run_workercCsd|��dkst�|��st�|��r(t�|��dks8t�|��rDt�|��dksTt�|��s`t�dS)NrlrNr)rrOrr
rw)rkr'rrr�_test_queueDsz TestSyncManagerTypes._test_queuercCsNt|j|�d�}|�d�|�d�|�|j|�|��s>t�|��rJt�dS)NrlrNr)r�r<rPr�r�r
rOr)r/ZqnamerTrrr�
test_queueNs

zTestSyncManagerTypes.test_queuecCs|�d�dS)Nr))r�)r/rrr�test_joinable_queueVsz(TestSyncManagerTypes.test_joinable_queuecCs*|��st�|��|��|�d�dS)Ng����MbP?)r�rOrr�)rkr'rrrroYsz TestSyncManagerTypes._test_eventcCs:|j��}|��|�|j|�|��r,t�|�d�dS)Ng����MbP?)r<rpr�r�ror�rOr)r/rTrrrrp`s

zTestSyncManagerTypes.test_eventcCs|��dS)N)rC)rkr'rrr�
_test_lockgszTestSyncManagerTypes._test_lockrBcCs6t|j|��}|�|j|�|��|�t|j�dS)N)r�r<r�r�rDr�r�)r/�lnamerTrrrrFkszTestSyncManagerTypes.test_lockcCs|��|��dS)N)rCrD)rkr'rrr�_test_rlockqsz TestSyncManagerTypes._test_rlockcCs t|j|��}|�|j|�dS)N)r�r<r�r�)r/r�rTrrrrHvszTestSyncManagerTypes.test_rlockcCs|��dS)N)rC)rkr'rrrrLzsz$TestSyncManagerTypes._test_semaphorerMcCs(t|j|��}|�|j|�|��dS)N)r�r<r�rLrD)r/�snamerTrrrrN~sz#TestSyncManagerTypes.test_semaphorecCs|jdd�dS)NrO)r�)rN)r/rrrrP�sz+TestSyncManagerTypes.test_bounded_semaphorecCs|��|��dS)N)rCrD)rkr'rrr�_test_condition�sz$TestSyncManagerTypes._test_conditioncCs|j��}|�|j|�dS)N)r<rWr�r�)r/rTrrr�test_condition�s
z#TestSyncManagerTypes.test_conditioncCs|jdkst�|��dS)NrN)r�rOr�)rkr'rrr�
_test_barrier�sz"TestSyncManagerTypes._test_barriercCs|j�d�}|�|j|�dS)NrN)r<r�r�r�)r/rTrrrr��sz!TestSyncManagerTypes.test_barrierc	Cs|�WdQRXdS)Nr)rkr'rrr�
_test_pool�szTestSyncManagerTypes._test_poolcCs |jjdd�}|�|j|�dS)Nr)r;)r<rr�r�)r/rTrrr�	test_pool�szTestSyncManagerTypes.test_poolcCsx|ddkst�|�d�dks"t�|�d�dks4t�|��|��x|D]}qJWt|�dksbt�|�d�dkstt�dS)NrrNr>)rOr�r�r��reverser^r�)rkr'r�rrr�
_test_list�s
zTestSyncManagerTypes._test_listcCs>|j��}|�d�|�|j|�|r*t�|�t|�d�dS)NrNr)r<rtr�r�r�rOrEr^)r/rTrrrr��s


zTestSyncManagerTypes.test_listcCs�t|�dkst�|ddks t�|�d�dks2t�t|���dgksHt�t|���dgks^t�t|���dgkstt�|��ddiks�t�|��dks�t�dS)Nr>rOrN)rOrN)	r^rOrwrtr�r�r�r�popitem)rkr'rrr�
_test_dict�szTestSyncManagerTypes._test_dictcCs<|j��}d|d<|�|j|�|r(t�|�t|�d�dS)NrNrOr)r<r�r�r�rOrEr^)r/rTrrrr��s

zTestSyncManagerTypes.test_dictcCs,|jdkst�|��dkst�|�d�dS)Nr>rl)rFrOrwr�)rkr'rrr�_test_value�sz TestSyncManagerTypes._test_valuecCs>|j�dd�}|�|j|�|�|jd�|�|��d�dS)Nr�r>rl)r<rr�r�rErFrw)r/rTrrrr��szTestSyncManagerTypes.test_valuecCsH|ddkst�|ddks t�t|�dks0t�t|�ddgksDt�dS)Nrr>rl)rOr^rt)rkr'rrr�_test_array�sz TestSyncManagerTypes._test_arraycCs$|j�dddg�}|�|j|�dS)Nr�rr>)r<r�r�r�)r/rTrrrr��szTestSyncManagerTypes.test_arraycCs |jdkst�|jdkst�dS)Nrr>)r�rOr�)rkr'rrr�_test_namespace�sz$TestSyncManagerTypes._test_namespacecCs(|j��}d|_d|_|�|j|�dS)Nrr>)r<rr�r�r�r�)r/rTrrrr�s
z#TestSyncManagerTypes.test_namespaceN)r)rB)rB)rM)+r7r8r9r:rrDrEr�r�r�r�rrr�r�r�r�r�rorpr�rFr�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)rkrrr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�rrr�r�r�)rkr;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)r7r8r9rTrrdr�r<rWrrrr�rr)rBrGrMrOrWrpr�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)rkr3r4rrrr2szManagerMixin.Poolcst���t��|_dS)N)rrrrBr<)rk)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>rlg@TzPWarning -- multiprocessing.Manager still has %s active children after %s seconds)r�rz@Warning -- Shared objects which still exist at manager shutdown:)r1r2r^rrrr}r�rr�rrr�r�r�r�r<Z_number_of_objectsZ_debug_inforyrxrr)rkr�r5rd)rrrr;s*



zManagerMixin.tearDownClass)r7r8r9rTrrdrU�operator�
attrgetterrr)rBrGrMrOrWrpr�rr�rtr�rr�rrrrVrr)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)r7r8r9rTrZdummyrdr�r<rWrrrr�rr)rBrGrMrOrWrpr�rr�rrrrr�^s$r�c
sH|d}t�}dddh}x�|��D]�\}}t|t�s6q"t|t�r�|tkrJq"t|j�|ksbt|j��x�|jD]\}d|�	�|dd�}||�	�d}	Gdd	�d	||	t
j�}
||
_|
_
||
_|
||<qjWq"t|t
j�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�rGr�r+rZget_temp_dirr$r%r))rE)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�rrr�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
rs�
issubclassr:r�rJrO�
capitalizer)�TestCaser7r9r8r5)
Zremote_globsr�r8Zlocal_globsZ	ALL_TYPESri�baseZtype_Znewnamer�r�r�r�r)r�r�r�r�install_tests_in_module_dictvs8


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.managersraZmultiprocessing.queuesrrZHAVE_SEND_HANDLEr��ImportErrorZmultiprocessing.sharedctypesrrrmr�rrrrr&r)r�r?rrrr�Z
HAVE_GETVALUEr�r9rrr&r�r�Zctypesrr r!r"r5r+r,r:rLrMrSrdr�r�rrrrArJrQrnrqrr�r�r�r�r�r�rrr	r
rr(rrrrYr[r\rdrkrlr<rmrprqrs�registerrwrrr�r�r�r�r�r�r�r�r�r�r�rlr�r�r�r�r�r�rr#r1r7r:r@rArKrLrMrNrOrVr[rkrnr|r�r�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>