Your IP : 216.73.217.129


Current Path : /opt/alt/python36/lib64/python3.6/test/__pycache__/
Upload File :
Current File : //opt/alt/python36/lib64/python3.6/test/__pycache__/_test_multiprocessing.cpython-36.pyc

3

� f�1�+@s�ddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddl
Z
ddlZddlZddlZddlZddlZddlmZddlZejd�Zejd�ddlZddlZddlZddlZddlZddlZddlZddlm Z yddlm!Z!e!j"Z#Wne$k
�r,dZ#YnXyddl%m&Z&m'Z'd	Z(Wne$k
�r`dZ(YnXyddl)Z)Wne$k
�r�dZ)YnXd
d�Z*dd
�Z+e j,Z-dZ.dZ/e/�r�d�\Z0Z1Z2n
d�\Z0Z1Z2e3edd�Z4ej5dkZ6ddlm7Z7dd�Z8yej9d�Z:WndZ:YnXddgZ;yddl<m=Z=m>Z>m?Z?Wn"e$k
�rRe@Z=dZ>Z?YnXdd�ZAGdd�de@�ZBGd d!�d!e@�ZCd"d#�ZDGd$d%�d%�ZEGd&d'�d'eC�ZFGd(d)�d)ejG�ZHGd*d+�d+eC�ZId,d-�ZJd.d/�ZKGd0d1�d1eC�ZLGd2d3�d3eC�ZMGd4d5�d5eC�ZNGd6d7�d7eC�ZOGd8d9�d9eC�ZPGd:d;�d;e@�ZQd<d=�ZRGd>d?�d?e@�ZSGd@dA�dAe@�ZTGdBdC�dCeC�ZUGdDdE�dEeC�ZVGdFdG�dGeC�ZWGdHdI�dIeC�ZXd�dKdL�ZYdMdN�ZZdOdP�Z[dQdR�Z\GdSdT�dTe@�Z]GdUdV�dVe^�Z_dWdX�Z`GdYdZ�dZeC�Zad[d\�Zbd]d^�ZcGd_d`�d`eC�ZdGdadb�dbeC�ZeddclmfZfmgZgmhZhGddde�dee@�Zidfdg�ZjGdhdi�dieg�ZkGdjdk�dkef�Zleljmdleidm�eljmdneid�dq�eljmdgejekdr�Gdsdt�dteC�Znejo�Zpdudv�ZqGdwdx�dxef�Zrerjmdveqdm�Gdydz�dzef�Zsesjmdv�d{ZtGd|d}�d}eC�ZuGd~d�deC�Zve*d��ZwGd�d��d�eC�ZxGd�d��d�eC�ZyGd�d��d�eC�ZzGd�d��d�eC�Z{ej|e#d��Gd�d��d�eC��Z}Gd�d��d�eC�Z~Gd�d��d�e=�ZGd�d��d�eC�Z�Gd�d��d�eC�Z�Gd�d��d�ej��Z�Gd�d��d�eC�Z�Gd�d��d�eC�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�e@�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�ej�ej5dkd��Gd�d„d�ej���Z�Gd�dĄd�ej��Z�Gd�dƄd�e@�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�copyTcCs
|jd�S)N�latin)�encode)�s�r�?/opt/alt/python36/lib64/python3.6/test/_test_multiprocessing.pyrBsrcCs"t|tjj�r|j�|j�dS)N)�
isinstance�multiprocessingZqueues�Queue�closeZjoin_thread)�queuerrr�close_queueFsr皙�����?�=
ףp=�?�ffffff�?�ffffff�?�HAVE_BROKEN_SEM_GETVALUE�win32)�waitcCs |dk	r|dkrd}t|g|�S)Ng)r)Zhandle�timeoutrrr�wait_for_handledsr�SC_OPEN_MAX��__main__z$test.test_multiprocessing_forkserver)�	Structure�c_int�c_doublecCsRd}ytjd�}Wnttfk
r*dSX|dks<||kr@dStjd|��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*tj�}z|j||�Stj�||_XdS)N)�timer-r.)r/�args�kwds�trrr�__call__�szTimingWrapper.__call__N)�__name__�
__module__�__qualname__r0r5rrrrr,�sr,c@s,eZdZdZdd�Zdd�Zdd	�ZeZd
S)�BaseTestCase�	processes�manager�threadscCstr|j||d�dS)Nr#)�
CHECK_TIMINGS�assertAlmostEqual)r/�a�brrr�assertTimingAlmostEqual�sz$BaseTestCase.assertTimingAlmostEqualcGs2y||�}Wntk
r YnX|j||�SdS)N)�NotImplementedError�assertEqual)r/�valuer-r2�resrrr�assertReturnsIfImplemented�s
z'BaseTestCase.assertReturnsIfImplementedcGstd��dS)Nz#shouldn't try to pickle a test case)rB)r/r2rrr�
__reduce__�szBaseTestCase.__reduce__N)r:r;r<)r6r7r8�
ALLOWED_TYPESrArFrG�
__reduce_ex__rrrrr9�s

r9cCs^y|j�Stk
rXy|jStk
rRy|jStk
rLt�YnXYnXYnXdS)N)�	get_valuer'Z_Semaphore__valueZ_valuerB)r/rrrrJ�srJc@seZdZdd�ZdS)�
DummyCallablecCst|t�st�|jd�dS)N�)r
rK�AssertionError�put)r/�q�crrrr5�szDummyCallable.__call__N)r6r7r8r5rrrrrK�srKc@s�eZdZd-Zdd�Zdd�Zedd��Zd	d
�Zedd��Z	d
d�Z
dd�Zdd�Zedd��Z
dd�Zedd��Zdd�Zdd�Zeifdd��Zdd �Zd!d"�Zed.d$d%��Zd&d'�Zd(d)�Zd*d+�Zd,S)/�_TestProcessr:r<cCs�|jdkr|jdj|j��|j�}|j}|j|j��|j|j�|j|t	�|jt
|�dk�|j|jt
j��|j|jd�dS)Nr<ztest not appropriate for {}r)�TYPE�skipTest�format�current_process�authkey�
assertTrue�is_alive�daemon�assertIsInstance�bytes�lenrCZidentr%�getpid�exitcode)r/�currentrVrrr�test_current�s
z_TestProcess.test_currentcCsz|jdkr|jdj|j��|j|jd�}|j|j|j�j�|j|jdd�}|j|j�|j|jdd�}|j	|j�dS)Nr<ztest not appropriate for {})�targetT)rarYF)
rRrSrT�Process�_testrCrYrUrW�assertFalse)r/Zproc0Zproc1�proc2rrr�test_daemon_argument�s
z!_TestProcess.test_daemon_argumentcOsR|j�}|j|�|j|�|j|j�|jdkrN|jt|j��|j|j�dS)Nr<)rUrN�namerRr[rV�pid)�clsrOr2r3r_rrrrc�s


z_TestProcess._testcCs�|jd�}|j�}|ddf}ddd�}d}|j|j|||d�}d|_|j�}|jd	krf|j|j|j�|j|j	�d
�|j|jd�|j
||j��|jt
|j��tk�|j|jd�|j�|j|jd�|j|j	�d�|j||j��|j|j�|dd��|j|j�|�|j|j�|j�|jd	k�rX|j|j�|j�|j|j�|j�|j�|j|jd�|j|j	�d
�|j
||j��t|�dS)Nr#��gR���Q@)�helloZbyeZSomeProcess)rar2�kwargsrgTr<Fr)r�EventrbrcrYrUrRrCrVrX�assertNotIn�active_childrenrW�type�listr^�start�assertIn�getrgrh�joinr)r/rO�er2rmrg�pr_rrr�test_process�s>



z_TestProcess.test_processcCstjd�dS)N�d)r1�sleep)rirrr�_test_terminate!sz_TestProcess._test_terminatecs�|jdkr|jdj|j��|j|jd��d�_�j�|j�j�d�|j	�|j
��|j�jd�t�j
�}|j|d�d�|j|jd�|j�j�d�|j|d
�d�|j|jd�|j�j�d�tjd��j�ttd��r>�fd	d
�}tjtj|�}ztjd�|j|�d�Wdtjd�tjtj|�Xn|j|�d�|j|jd�|j�j�d�|j�|j
���j
�dS)Nr<ztest not appropriate for {})raTrgr#�alarmcstd���dS)Nzjoin took too long: %s)�RuntimeError)r2)rxrr�handlerCsz,_TestProcess.test_terminate.<locals>.handler�
Fr$)rRrSrTrbr|rYrsrCrXrtrpr^r,rvrAr.r1r{�	terminate�hasattr�signal�SIGALRMr}ro)r/rvrZold_handlerr)rxr�test_terminate%s<




z_TestProcess.test_terminatecCsJytj�}Wntk
r$d}YnX|jt|�tk�|j|dk�dS)Nr#)r�	cpu_countrBrWrq�int)r/Zcpusrrr�test_cpu_countYs
z_TestProcess.test_cpu_countcCsp|jt|j��t�|jtjtfd�}|j||j��d|_	|j
�|j||j��|j�|j||j��dS)N)rar2T)
rCrqrprrrbr1r{�DELTArorYrsrtrv)r/rxrrr�test_active_childrenasz!_TestProcess.test_active_childrencCsV|j|�t|�dkrRx:td�D].}|j|j|||gfd�}|j�|j�q WdS)Nrj)rar2)�sendr\�rangerb�_test_recursionrsrv)ri�wconn�id�irxrrrr�ns
z_TestProcess._test_recursioncCs||jdd�\}}|j|g�tjt�g}x|j�rD|j|j��q,Wgdgddgddgdgddgddgg}|j||�dS)NF)�duplexrr#)	�Piper�r1r{r��poll�append�recvrC)r/�rconnr��result�expectedrrr�test_recursionys


z_TestProcess.test_recursioncCs|jd�dS)Ng$@)r)ri�eventrrr�_test_sentinel�sz_TestProcess._test_sentinelcCs�|jdkr|jdj|j��|j�}|j|j|fd�}|jt��|jWdQRX|j	�|j
|j�|j}|j|t
�|jt|dd��|j�|j�|jt|dd��dS)Nr<ztest not appropriate for {})rar2g)rr#)rRrSrTrnrbr��assertRaisesr(�sentinelrs�
addCleanuprvrZr�rdr�setrW)r/r�rxr�rrr�
test_sentinel�s
z_TestProcess.test_sentinelcCsft�}tj|�}|j�}|j|||fd�}~|j�|j�|j|�d�|j|j	�d�t
|�dS)N)rar2rL)rK�weakref�refrrbrsrv�assertIsrCrur)r/rP�wrrOrxrrr�test_lose_target_ref�s
z!_TestProcess.test_lose_target_refcCsXxJ|j�D]>\}}|dkr,tj�}|j�n|dks8t�d}tt|d�q
W|j�dS)Nr�remove)�items�io�StringIOrrM�setattr�sysr�)r/�evtZbreak_std_streams�stream_name�action�streamrrr�_test_error_on_stdio_flush�s
z'_TestProcess._test_error_on_stdio_flushcCs�tj�dg}|dj�x�dD]�}x||D]t}tt|�}tt||�zJ|j�}|j|j|fd�}|j	�|j
�|j|j��|j
|jd�Wdtt||�Xq(WqWdS)Nr�stdout�stderr)rar2)r�r�)r�r�r�getattrr�r�rnrbr�rsrvrW�is_setrCr^)r/Zstreamsr�r��
old_streamr��procrrr�test_error_on_stdio_flush_1�s



z(_TestProcess.test_error_on_stdio_flush_1cCs�x�dD]|}xvdD]n}tt|�}zP|j�}|j|j|||ifd�}|j�|j�|j|j��|j	|j
d�Wdtt||�XqWqWdS)	Nr�r�rr�)rar2r)r�r�)rr�)r�r�rnrbr�rsrvrWr�rCr^r�)r/r�r�r�r�r�rrr�test_error_on_stdio_flush_2�s


z(_TestProcess.test_error_on_stdio_flush_2�cCstj|�|j�dS)N)r1r{r�)r/r��delayrrr�_sleep_and_set_event�s
z!_TestProcess._sleep_and_set_eventc
Cs|jdkr|jdj|j��tj�}|dkr<|jdj|��ddlm}|j�d}|j�}|j	|j
||fd�}|j�|j}t
j||�tj|d�|j�}|j	|j
|fd�}	|	j�|	j�|j|j��|j|	jd�|j�|j|j��|j|jd
�dS)Nr<ztest not appropriate for {}�
forkserverr)�_forkserverg�?)rar2g@�)rr�)rRrSrTr�get_start_methodZmultiprocessing.forkserverr��ensure_runningrnrbr�rsZ_forkserver_pidr%�killr1r{rvrWr�rCr^rt)
r/�signum�smr�r�r�r�rhZevt2rerrr�check_forkserver_death�s.
z#_TestProcess.check_forkserver_deathcCs|jtj�dS)N)r�r��SIGINT)r/rrr�test_forkserver_sigintsz#_TestProcess.test_forkserver_sigintcCstjdkr|jtj�dS)N�nt)r%rgr�r��SIGKILL)r/rrr�test_forkserver_sigkills
z$_TestProcess.test_forkserver_sigkillN)r:r<)r�)r6r7r8rHr`rf�classmethodrcryr|r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrrrrQ�s.
(4
&rQc@s,eZdZdd�Zdd�Zdd�Zdd�Zd	S)
�_UpperCasercCs tjj|�tj�\|_|_dS)N)rrbr0r��
child_conn�parent_conn)r/rrrr0sz_UpperCaser.__init__cCs@|jj�x&t|jjd�D]}|jj|j��qW|jj�dS)N)r�r�iterr�r�r��upper)r/r
rrr�runs
z_UpperCaser.runcCs&t|�tkst�|jj|�|jj�S)N)rq�strrMr�r�r�)r/r
rrr�submit"sz_UpperCaser.submitcCs$|jjd�|jj�|jj�dS)N)r�r�rr�)r/rrr�stop's
z_UpperCaser.stopN)r6r7r8r0r�r�r�rrrrr�sr�c@s@eZdZd
Zdd�Zdd�Zedd��Zedd	��Zd
d�Z	dS)�_TestSubclassingProcessr:cCsLt�}d|_|j�|j|jd�d�|j|jd�d�|j�|j�dS)NTrlZHELLOZworldZWORLD)r�rYrsrCr�r�rv)r/Z
uppercaserrrr�test_subclassing0sz(_TestSubclassingProcess.test_subclassingc
Cs�|jdkr|jdj|j��tj}|jtj|�|j|j|fd�}|j	�|j
�t|d��2}|j�}|j
d|�|j
d|�|j
d|�WdQRXdS)Nr<ztest not appropriate for {})rar2�r�ZeroDivisionErrorztest_multiprocessing.pyz1/0 # MARKER)rRrSrTr�TESTFNr��unlinkrb�_test_stderr_flushrsrv�open�readrt)r/�testfnr��f�errrrr�test_stderr_flush9s
z)_TestSubclassingProcess.test_stderr_flushcCs6tj|tjtjBtjB�}t|ddd�t_dddS)N�wF)�closefdr#r)r%r��O_WRONLY�O_CREAT�O_EXCLr�r�)rir��fdrrrr�Jsz*_TestSubclassingProcess._test_stderr_flushcCs8tj|tjtjBtjB�}t|ddd�t_tj|�dS)Nr�F)r�)r%r�r�r�r�r�r��exit)ri�reasonr�r�rrr�_test_sys_exitQsz&_TestSubclassingProcess._test_sys_exitcCs|jdkr|jdj|j��tj}|jtj|�x�dddgdfD]z}|j|j||fd�}d|_	|j
�|jd	�|j|j
d�t|d
��}|j�}WdQRX|j|j�t|��tj|�q@WxDd
D]<}|jtj|fd�}d|_	|j
�|jd	�|j|j
|�q�WdS)Nr<ztest not appropriate for {}r#rj�zignore this)rar2TrLr�F�)TFr�)rRrSrTrr�r�r�rbr�rYrsrvrCr^r�r��rstripr�r%r�r�)r/r�r�rxr�Zcontentrrr�
test_sys_exitWs,




z%_TestSubclassingProcess.test_sys_exitN)r:)
r6r7r8rHr�r�r�r�r�r�rrrrr�,s	r�cCs"t|d�r|j�S|j�dkSdS)N�emptyr)r�r��qsize)rOrrr�queue_emptyzs
r�cCs"t|d�r|j�S|j�|kSdS)N�full)r�r�r�)rO�maxsizerrr�
queue_full�s
r�c@s|eZdZedd��Zdd�Zedd��Zdd�Zed	d
��Zdd�Z	d
d�Z
edd��Zdd�Zdd�Z
dd�Zdd�ZdS)�
_TestQueuecCs.|j�xtd�D]}|j�qW|j�dS)N�)rr�rur�)rir�child_can_start�parent_can_continuer�rrr�	_test_put�sz_TestQueue._test_putcCs�d}|j|d�}|j�}|j�}|j|j|||fd�}d|_|j�|jt|�d�|jt||�d�|j	d�|j	dd�|j	ddd�|j	d	d�|j	d
dd�|j
d�tjt
�|jt|�d�|jt||�d�t|j	�}t|j
�}|jtj|dd�|j|jd�|jtj|ddd�|j|jd�|jtj|d�|j|jd�|jtj|ddt�|j|jt�|jtj|ddt�|j|jd�|jtj|ddtd
�|j|jt�|j�|j�|jt|�d�|jt||�d�|j�t|�dS)Nr�)r�)rar2TFr#rjr��rL�r)r)rrnrbr�rYrsrCr�r�rN�
put_nowaitr1r{r�r,r��pyqueueZFullrAr.�TIMEOUT1�TIMEOUT2�TIMEOUT3r�rrvr)r/ZMAXSIZErr�r�r�rNr�rrr�test_put�sP




z_TestQueue.test_putcCs<|j�|jd�|jd�|jd�|jd�|j�dS)Nrjr�r�rL)rrNr�)rirr�r�rrr�	_test_get�s



z_TestQueue._test_getcCs�|j�}|j�}|j�}|j|j|||fd�}d|_|j�|jt|�d�|j�|j	�t
jt�|jt|�d�|j|j
dd�d�|j|j
d�d�|j|j
dd�d�|j|j�d	�|jt|�d�t|j
�}t|j�}|jtj|d�|j|jd
�|jtj|dd�|j|jd
�|jtj|�|j|jd
�|jtj|dt�|j|jt�|jtj|dt�|j|jd
�|jtj|td�|j|jt�|j�t|�dS)N)rar2TFrjr�r#)rr�rLr)rrnrbrrYrsrCr�r�rr1r{r�ru�
get_nowaitr,r�r��EmptyrAr.r�r�r�rvr)r/rr�r�r�rurrrr�test_get�sD


z_TestQueue.test_getcCs"xtdd�D]}|j|�qWdS)Nr��)r�rN)rirr�rrr�
_test_forksz_TestQueue._test_forkcCs�|j�}xtd�D]}|j|�qWtjt�|j|j|fd�}d|_|j	�x td�D]}|j
|j�|�qXW|jt
j|jd�|j�t|�dS)Nr�)rar2TrF)rr�rNr1r{r�rbrrYrsrCrur�r�rrvr)r/rr�rxrrr�	test_forks
z_TestQueue.test_forkcCs�|j�}y|j|j�d�Wntk
r:|jd�YnX|jd�|j|j�d�|jd�|j|j�d�|j�|j|j�d�|j�|j|j�d�t|�dS)Nrzqsize method not implementedr#rLrj)rrCr�rBrSrNrur)r/rOrrr�
test_qsize/s

z_TestQueue.test_qsizecCs,x&t|jd�D]}tjt�|j�qWdS)N)r�rur1r{r�Z	task_done)rirO�objrrr�_test_task_done?s
z_TestQueue._test_task_donecs��j����fdd�td�D�}x|D]}d|_|j�q&Wxtd�D]}�j|�qFW�j�x|D]}�jd�qfWx|D]}|j�q~Wt��dS)Ncsg|]}�j�j�fd��qS))rar2)rbr
)�.0r�)rr/rr�
<listcomp>Hsz-_TestQueue.test_task_done.<locals>.<listcomp>r�Tr�)�
JoinableQueuer�rYrsrNrvr)r/Zworkersrxr�r)rr/r�test_task_doneEs


z_TestQueue.test_task_donec Cs�tj��vd}t|dd��}|jd�WdQRXtjtj���4yt|�Wn tj	k
rn|j
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)rZtemp_cwdr��writeZ
DirsOnSysPathr%�getcwd�
__import__r�r�fail)r/Zmodule_namer�rrr�test_no_import_lock_contention[s
z)_TestQueue.test_no_import_lock_contentioncCsHtj�}tj�}|jtj|jdd�tj�|}|j|d�t|�dS)NTg�������?g�������?)	rrr1r�r�rru�assertGreaterEqualr)r/rOrs�deltarrr�test_timeoutpsz_TestQueue.test_timeoutcCs||jdkr|jdj|j��Gdd�dt�}tj��>|j�}|j|��|jd�|j|j	dd��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rG�szQ_TestQueue.test_queue_feeder_donot_stop_onexc.<locals>.NotSerializable.__reduce__N)r6r7r8rGrrrr�NotSerializable�srTg�?)r)rRrSrT�objectr�captured_stderrrrNrWrur)r/rrOrrr�"test_queue_feeder_donot_stop_onexc{s


z-_TestQueue.test_queue_feeder_donot_stop_onexcN)r6r7r8r�r�rrrrrrr
rrrrrrrrr��s;
5r�c@s$eZdZdd�Zdd�Zdd�ZdS)�	_TestLockcCsR|j�}|j|j�d�|j|jd�d�|j|j�d�|jttjf|j�dS)NTF)�LockrC�acquire�releaser�r(�	threadingZThreadError)r/�lockrrr�	test_lock�s
z_TestLock.test_lockcCs~|j�}|j|j�d�|j|j�d�|j|j�d�|j|j�d�|j|j�d�|j|j�d�|jttf|j�dS)NT)�RLockrCrrr�rMr~)r/r rrr�
test_rlock�sz_TestLock.test_rlockc	Cs|j��WdQRXdS)N)r)r/rrr�test_lock_context�s
z_TestLock.test_lock_contextN)r6r7r8r!r#r$rrrrr�s
rc@s,eZdZdd�Zdd�Zdd�Zdd�Zd	S)
�_TestSemaphorecCs�|jdt|�|j|j�d�|jdt|�|j|j�d�|jdt|�|j|jd�d�|jdt|�|j|j�d�|jdt|�|j|j�d�|jdt|�dS)NrjTr#rF)rFrJrCrr)r/�semrrr�_test_semaphore�sz_TestSemaphore._test_semaphorecCsT|jd�}|j|�|j|j�d�|jdt|�|j|j�d�|jdt|�dS)Nrjr�r�)�	Semaphorer'rCrrFrJ)r/r&rrr�test_semaphore�s

z_TestSemaphore.test_semaphorecCs|jd�}|j|�dS)Nrj)�BoundedSemaphorer')r/r&rrr�test_bounded_semaphore�s
z%_TestSemaphore.test_bounded_semaphorecCs�|jdkr|jdj|j��|jd�}t|j�}|j|d�d�|j|jd�|j|dd�d�|j|jd�|j|dt	�d�|j|jd�|j|dt
�d�|j|jt
�|j|td�d�|j|jt�dS)Nr:ztest not appropriate for {}rFgT)r)rRrSrTr(r,rrCrAr.r�r�r�)r/r&rrrrr�s


z_TestSemaphore.test_timeoutN)r6r7r8r'r)r+rrrrrr%�s
r%c@s�eZdZeddd��Zdd�Zdd�Zdd	�Zd
d�Zedd
��Z	e
jed�dd��Z
edd��Ze
jed�dd��Zedd��Zdd�ZdS)�_TestConditionNcCs.|j�|j�|j|�|j�|j�dS)N)rrr)ri�cond�sleeping�wokenrrrrr��s

z_TestCondition.fcCsZ|jdkrVy6|jj�|jj�}|j|d�|j|jj�d�Wntk
rTYnXdS)Nr:r)rRZ_sleeping_countrJZ_woken_countrCZ_wait_semaphorerB)r/r-Zsleepersrrr�check_invariant�s
z_TestCondition.check_invariantcCs|j�}|jd�}|jd�}|j|j|||fd�}d|_|j�|j|j�tj	|j|||fd�}d|_|j�|j|j�|j
�|j
�tjt
�|jdt|�|j
�|j�|j�tjt
�|jdt|�|j
�|j�|j�tjt
�|jdt|�|j|�|j�dS)Nr)rar2Tr#rj)�	Conditionr(rbr�rYrsr�rvr�Threadrr1r{r�rFrJ�notifyrr0)r/r-r.r/rxrrr�test_notify�s6





z_TestCondition.test_notifycCs|j�}|jd�}|jd�}xttd�D]h}|j|j|||tfd�}d|_|j�|j|j	�t
j|j|||tfd�}d|_|j�|j|j	�q&Wxtd�D]}|j�q�Wxtd�D]}|j�q�W|j
dt|�|j|�xptd�D]d}|j|j|||fd�}d|_|j�|j|j	�t
j|j|||fd�}d|_|j�|j|j	�q�Wxtd�D]}|j��qZWtjt�|j
dt|�|j�|j�|j�xJtd�D]>}yt|�dk�r�PWntk
�r�PYnXtjt��q�W|j
dt|�|j|�dS)Nrr�)rar2Tr�r�)r1r(r�rbr�r�rYrsr�rvrr2rrFrJr0r1r{r�Z
notify_allrrB)r/r-r.r/r�rxr4rrr�test_notify_allsZ



z_TestCondition.test_notify_allcCsH|j�}t|j�}|j�|t�}|j�|j|d�|j|jt�dS)NF)	r1r,rrr�rrCrAr.)r/r-rrErrrrds
z_TestCondition.test_timeoutcsN|�@d�_|j�|j�fdd��}|s6�jdkr@tjd�WdQRXdS)Nrcs
�jdkS)Nr�)rDr)�staterr�<lambda>rsz0_TestCondition._test_waitfor_f.<locals>.<lambda>r�r#)rDr3�wait_forr�r�)rir-r6r�r)r6r�_test_waitfor_fmsz_TestCondition._test_waitfor_fzneeds sharedctypescs�|j�}|jdd��|j|j|�fd�}d|_|j�|�0|j�fdd��}|j|�|j�j	d�WdQRXx@t
d�D]4}tjd	�|��j	d7_	|j
�WdQRXqzW|jd
�|j|j��|j|jd�dS)Nr�r#)rar2Tcs
�jdkS)Nr)rDr)r6rrr7�sz-_TestCondition.test_waitfor.<locals>.<lambda>rr�g{�G�z�?rLr$)r1rrbr9rYrsr8rWrCrDr�r1r{r3rvrdrXr^)r/r-rxr�r�r)r6r�test_waitforvs"


z_TestCondition.test_waitforcsv|j�|�`d}tj�}|j�fdd�|d�}tj�|}|rh|d|ko\|dknrhd|_WdQRXdS)Ng�������?cs
�jdkS)Nr�)rDr)r6rrr7�sz8_TestCondition._test_waitfor_timeout_f.<locals>.<lambda>)rg333333�?g$@T)rr1r8rD)rir-r6�successr&r��dtr�r)r6r�_test_waitfor_timeout_f�s&z&_TestCondition._test_waitfor_timeout_fcCs�|j�}|jdd�}|jdd�}|jd�}|j|j||||fd�}d|_|j�|j|jdd��x@t	d�D]4}t
jd	�|�|jd
7_|j
�WdQRXqlW|jd�|j|j�dS)Nr�rF)rar2Tr�)rr�g{�G�z�?r#rL)r1rr(rbr=rYrsrWrr�r1r{rDr3rv)r/r-r6r;r&rxr�rrr�test_waitfor_timeout�s 


z#_TestCondition.test_waitfor_timeoutc
Cs<|�|j�WdQRXtjd�|dk	r8tj|tj�dS)Nr#)r3r1r{r%r�r�r�)rirPrhrrr�_test_wait_result�s

z _TestCondition._test_wait_resultcCs�t|t�rtjdkrtj�}nd}|j�}|�r|j|jd��|j|jd��|j	|j
||fd�}|j�|j|jd��|dk	r�|j
t|jd�|j�WdQRXdS)Nrrg�������?)rar2�<)r
�ProcessesMixinr��platformr%r]r1rdrrbr?rsrWr��KeyboardInterruptrv)r/rhrPrxrrr�test_wait_result�s
z_TestCondition.test_wait_result)N)r6r7r8r�r�r0r4r5rr9r)�
skipUnless�HAS_SHAREDCTYPESr:r=r>r?rDrrrrr,�s-E		r,c@s eZdZedd��Zdd�ZdS)�
_TestEventcCstjt�|j�dS)N)r1r{r�r�)rir�rrr�_test_event�s
z_TestEvent._test_eventcCs�|j�}t|j�}|j|j�d�|j|d�d�|j|jd�|j|t�d�|j|jt�|j�|j|j�d�|j|�d�|j|jd�|j|t�d�|j|jd�|j	�|j
|j|fd�}d|_|j
�|j|�d�|j�dS)NFgT)rar2)rnr,rrCr�rAr.r�r��clearrbrHrYrsrv)r/r�rrxrrr�
test_event�s&
z_TestEvent.test_eventN)r6r7r8r�rHrJrrrrrG�srGc@s4eZdZdd�Zdd�Zdd�Zdd�Zd	d
�ZdS)�
_DummyListcCs6tjjtjd��}tj�}|j||f�d|jd<dS)Nr�r)r�heap�
BufferWrapper�structZcalcsizer�__setstate__�
_lengthbuf)r/�wrapperr rrrr0sz_DummyList.__init__cCs"|\|_|_|jj�jd�|_dS)Nr�)�_wrapper�_lockZcreate_memoryview�castrP)r/r6rrrrOsz_DummyList.__setstate__cCs|j|jfS)N)rRrS)r/rrr�__getstate__sz_DummyList.__getstate__cCs(|j�|jdd7<WdQRXdS)Nrr#)rSrP)r/�_rrrr�sz_DummyList.appendc	Cs|j�|jdSQRXdS)Nr)rSrP)r/rrr�__len__sz_DummyList.__len__N)r6r7r8r0rOrUr�rWrrrrrKs
rKcCstjd�dS)Ng{�G�z�?)r1r{rrrr�_waitsrXc@sBeZdZdZddd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dS)�Bunchz
    A bunch of threads.
    Fc
Cs�||_||_||_|j�|_|j�|_|j�|_|s>|jj�g}x6t	|�D]*}|j
|jd�}d|_|j
�|j|�qLWdd�}	tj||	|�|_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.
        )raTcSsx|D]}|j�qWdS)N)rv)r<rxrrr�finalize9s
z Bunch.__init__.<locals>.finalizeN)r�r2�n�	DummyList�started�finishedrn�	_can_exitr�r�rb�taskrYrsr�r�rZ�
_finalizer)
r/�	namespacer�r2r[Zwait_before_exitr<r�rxrZrrrr0#s 



zBunch.__init__cCsRtj�}|jj|�z|j|j�Wd|jj|�|jjd�|jj	�sLt
�XdS)N�)r%r]r]r�r�r2r^r_rr�rM)r/rhrrrr`?sz
Bunch.taskcCs xt|j�|jkrt�qWdS)N)r\r]r[rX)r/rrr�wait_for_startedIszBunch.wait_for_startedcCs xt|j�|jkrt�qWdS)N)r\r^r[rX)r/rrr�wait_for_finishedMszBunch.wait_for_finishedcCs|jj�dS)N)r_r�)r/rrr�	do_finishQszBunch.do_finishcCs|j�dS)N)ra)r/rrrrTszBunch.closeN)F)
r6r7r8�__doc__r0r`rdrerfrrrrrrYs

rYc@seZdZdd�Zdd�ZdS)�
AppendTruecCs
||_dS)N)r	)r/r	rrrr0YszAppendTrue.__init__cCs|jjd�dS)NT)r	r�)r/rrrr5[szAppendTrue.__call__N)r6r7r8r0r5rrrrrhXsrhc@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.
    rLg>@cCs|j|j|jd�|_dS)N)r)�Barrier�N�defaultTimeout�barrier)r/rrr�setUpfsz_TestBarrier.setUpcCs|jj�d|_dS)N)rm�abort)r/rrr�tearDownis
z_TestBarrier.tearDowncCs,|jdkrgS|jdkr"|jj�St�SdS)Nr<r;)rRr;rrrK)r/rrrr\ms



z_TestBarrier.DummyListc
Cs8t||||jd�}z||�|j�Wd|j�XdS)Nr#)rYrkrer)r/r�r2r@rrr�run_threadsus
z_TestBarrier.run_threadscCs�|j}||jkst�xpt|�D]d}|djd�t|d�||ksHt�|j�|djd�t|d�|d|kszt�|j�qWy|jdks�t�Wntk
r�YnX|j	s�t�dS)NrTr#)
�partiesrkrMr�r�r\r�	n_waitingrB�broken)rirm�resultsr[�mr�rrr�	multipass}sz_TestBarrier.multipassr#cCs*|j�|j�g}|j|j|j||f�dS)z;
        Test that a barrier is passed in lockstep
        N)r\rqrwrm)r/�passesrurrr�test_barrier�sz_TestBarrier.test_barriercCs
|jd�S)zC
        Test that a barrier works for 10 consecutive runs
        r�)ry)r/rrr�test_barrier_10�sz_TestBarrier.test_barrier_10cCs|j�}|j|�dS)N)rrN)rirmrrErrr�_test_wait_return_f�sz _TestBarrier._test_wait_return_fcsR|j��|j|j|j�f��fdd�t|j�D�}|j|jd�d�t��dS)z9
        test the return value from barrier.wait
        csg|]}�j��qSr)ru)rr�)rrrr�sz1_TestBarrier.test_wait_return.<locals>.<listcomp>rr#N)	rrqr{rmr�rkrC�countr)r/rur)rr�test_wait_return�s
z_TestBarrier.test_wait_returncCs|j�t|�dkrt�dS)Nr#)rr\r~)rirmrurrr�_test_action_f�sz_TestBarrier._test_action_fcCsB|j�}|j|jt|�d�}|j|j||f�|jt|�d�dS)z,
        Test the 'action' callback
        )r�r#N)r\rjrkrhrqr~rCr\)r/rurmrrr�test_action�sz_TestBarrier.test_actioncCspy0|j�}||jdkrt�|j�|jd�Wn:tjk
rP|jd�Yntk
rj|j�YnXdS)NrjT)rrkr~r�r�BrokenBarrierErrorro)rirm�results1�results2r�rrr�
_test_abort_f�sz_TestBarrier._test_abort_fcCs^|j�}|j�}|j|j|j||f�|jt|�d�|jt|�|jd�|j|jj�dS)zK
        Test that an abort will put the barrier in a broken state
        rr#N)	r\rqr�rmrCr\rkrWrt)r/r�r�rrr�
test_abort�sz_TestBarrier.test_abortcCs�|j�}||jdkr@x|j|jdkr4tjd�qW|j�n8y|j�|jd�Wn tjk
rv|jd�YnX|j�|jd�dS)Nrjr#g����MbP?T)	rrkrsr1r{�resetr�rr�)rirmr�r��results3r�rrr�
_test_reset_f�s
z_TestBarrier._test_reset_fcCsl|j�}|j�}|j�}|j|j|j|||f�|jt|�d�|jt|�|jd�|jt|�|j�dS)zL
        Test that a 'reset' on a barrier frees the waiting threads
        rr#N)r\rqr�rmrCr\rk)r/r�r�r�rrr�
test_reset�sz_TestBarrier.test_resetcCs�y0|j�}||jdkrt�|j�|jd�Wn:tjk
rP|jd�Yntk
rj|j�YnX|j�|jdkr�|j�|j�|j�|jd�dS)NrjT)rrkr~r�rr�ror�)rirm�barrier2r�r�r�r�rrr�_test_abort_and_reset_f�sz$_TestBarrier._test_abort_and_reset_fcCsz|j�}|j�}|j�}|j|j�}|j|j|j||||f�|jt|�d�|jt|�|jd�|jt|�|j�dS)zF
        Test that a barrier can be reset after being broken.
        rr#N)r\rjrkrqr�rmrCr\)r/r�r�r�r�rrr�test_abort_and_resetsz!_TestBarrier.test_abort_and_resetcCsT|j�}||jdkr tjd�y|jd�Wn tjk
rN|jd�YnXdS)Nrjg�?g�?T)rrkr1r{rr�r�)rirmrur�rrr�_test_timeout_fs
z_TestBarrier._test_timeout_fcCs4|j�}|j|j|j|f�|jt|�|jj�dS)z$
        Test wait(timeout)
        N)r\rqr�rmrCr\rr)r/rurrrr!sz_TestBarrier.test_timeoutcCsV|j|j�}||jdkr$tjd�y|j�Wn tjk
rP|jd�YnXdS)Nrjg�?T)rrlrkr1r{rr�r�)rirmrur�rrr�_test_default_timeout_f)s
z$_TestBarrier._test_default_timeout_fcCs@|j|jdd�}|j�}|j|j||f�|jt|�|j�dS)z4
        Test the barrier's default timeout
        g�?)rN)rjrkr\rqr�rCr\rr)r/rmrurrr�test_default_timeout4sz!_TestBarrier.test_default_timeoutcCs|jd�}|j�|j�dS)Nr#)rjr)r/r@rrr�test_single_thread=s
z_TestBarrier.test_single_threadc
Cs8x2t|�D]&}|j�|�|j|�WdQRXq
WdS)N)r�rr�)rirmrx�connr r�rrr�_test_thousand_fBsz_TestBarrier._test_thousand_fcCs�|jdkr|jdj|j��d}|j�}|jd�\}}x@t|j�D]2}|j|j|j	|||fd�}|j
�|j|j�qBWx4t|�D](}x"t|j�D]}|j
|j�|�q�Wq�WdS)Nr;ztest not appropriate for {}i�F)rar2)rRrSrTrr�r�rkrbr�rmrsr�rvrCr�)r/rxr r�r��jrxr�rrr�
test_thousandIs
z_TestBarrier.test_thousandN)r#)r6r7r8rgrkrlrnrpr\rqr�rwryrzr{r}r~rr�r�r�r�r�r�r�rr�r�r�r�r�rrrrri_s6

	

	ric@sXeZdZdZdddded�ed
�fgZdd�Zedd��Zd dd�Z	dd�Z
dd�ZdS)!�
_TestValuer:r���^�d�
@g@�h����rP�x�ycCsts|jd�dS)Nz%requires multiprocessing.sharedctypes)rFrS)r/rrrrnhsz_TestValue.setUpcCs(x"t||j�D]\}}|d|_qWdS)Nrj)�zip�codes_valuesrD)ri�values�sv�cvrrrrclsz_TestValue._testFcs�|r�fdd��jD�}n�fdd��jD�}x*t|�j�D]\}}�j|j|d�q<W�j�j|fd�}d|_|j�|j�x*t|�j�D]\}}�j|j|d�q�WdS)Ncsg|]\}}}�j||��qSr)�RawValue)r�coderDrV)r/rrrtsz)_TestValue.test_value.<locals>.<listcomp>csg|]\}}}�j||��qSr)r)rr�rDrV)r/rrrwsr#)rar2Trj)	r�r�rCrDrbrcrYrsrv)r/�rawr�r�r�r�r)r/r�
test_valuers


z_TestValue.test_valuecCs|jdd�dS)NT)r�)r�)r/rrr�
test_rawvalue�sz_TestValue.test_rawvaluec
Cs�|jdd�}|j�}|j�}|jdddd�}|j�}|j�}|j�}|jdd|d�}|j�}	|j�}
|j||	�|jdddd�}|jt|d��|jt|d��|jt|jdddd�|j	dd�}|jt|d��|jt|d��dS)Nr�rL)r F�get_lock�get_objZnavalue)
rr�r�rrCrdr�r�r'r�)
r/Zval1�lock1�obj1Zval2�lock2�obj2r Zval3�lock3�obj3�arr4�arr5rrr�test_getobj_getlock�s$z_TestValue.test_getobj_getlockN)r:)r�r�r���)r�r�r�����)r�r�r�)F)r6r7r8rHrr�rnr�rcr�r�r�rrrrr�]s
r�c@s~eZdZdZedd��Zejedkd�ddd��Z	ejedkd�d	d
��Z
ejedkd�dd��Zejedkd�d
d��ZdS)�
_TestArrayr:cCs4x.tdt|��D]}||||d7<qWdS)Nr#)r�r\)ri�seqr�rrrr��sz_TestArray.fNzrequires _ctypesFc
Csddddddddd	d
g
}|r*|jd|�}n|jd|�}|jt|�t|��|j|d|d�|jt|d
d��t|d
d���tjddd
ddg�|dd�<|dd�<|jt|dd��|�|j|�|j|j|fd�}d|_|j	�|j
�|jt|dd��|�dS)Ni�iri�i5���i$i�i�i?r�r�rjr�r#r�r�)rar2T)�RawArray�ArrayrCr\rr�arrayr�rbrYrsrv)r/r�r��arrrxrrr�
test_array�s$(
z_TestArray.test_arraycCsvd}xltd�D]`}|jd|�}|jt|�|�|jt|�dg|�td�|dd�<|jt|�ttd���~qWdS)Nr�r�r�r)r�r�rCr\rr)r/�sizerVr�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
|jdttd���}|j�}|j�}|jdttd��dd�}|j�}|j�}|j�}|jdttd��|d�}|j�}	|j�}
|j||	�|jdtd�dd�}|jt|d��|jt|d��|j	t
|jdtd�dd�|jdtd��}|jt|d��|jt|d��dS)Nr�r�)r Fr�r�Znotalock)r�rrr�r�r�rrCrdr�r�r'r�)
r/Zarr1r�r�Zarr2r�r�r Zarr3r�r�r�r�rrr�test_getobj_getlock_obj�s&z"_TestArray.test_getobj_getlock_obj)r:)F)
r6r7r8rHr�r�r)�skipIfr r�r�r�r�rrrrr��sr�c@sHeZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dd�Z
dS)�_TestContainersr;cCs�|jttd���}|j|dd�ttd���|j�}|j|dd�g�|jttd���|j|dd�ttd���|j|dd�|j|dd�dddg�|d9}|j|dd�ddddddddddg
�|j|ddgddddddddddddg�|j|dd�ttd���||g}|j|�}|jd	d
�|D�dddddddddd
g
ddddddddddg
g�|j|g�}|jd�|j|ddd�dddddddddd
dg�dS)Nr�rLrjr�r�rr#r�cSsg|]}|dd��qS)Nr)r�elementrrrrsz-_TestContainers.test_list.<locals>.<listcomp>r�r��	rl)rrr�rC�extendr�)r/r?r@r�rwr�rrr�	test_list�s((,
2
z_TestContainers.test_listcCsf|jttd���}t|�}|jt|�ttd���|jt|�g�t|�}d|d<|jt|�d�dS)Nr�rzr)rrr�r�rC�next)r/r?�itrrr�test_list_itersz_TestContainers.test_list_itercs�j�fdd�td�D��}�jdd�|D�dddggd�d|dd	<�j|ddd�dddg�x0tdd�D]"}�j||dd�dddg�qtW�j|dj�d��jt|d�d�x(tddd�D]}�jt||�d�q�W~�j�}|j|�~dS)
Ncsg|]}�jtd���qS)r�)rrr�)rZ_i)r/rrr#sz;_TestContainers.test_list_proxy_in_list.<locals>.<listcomp>r�cSsg|]}|dd��qS)Nr)r�innerrrrr$srr#rj�7r$)rrr�rC�popr\r�)r/r?r�r@r)r/r�test_list_proxy_in_list"s""
z'_TestContainers.test_list_proxy_in_listcCs�|j�}ttdd��}x|D]}t|�||<qW|j|j�tdd�|D���|jt|j��|�|jt|j��dd�|D��|jt|j	��dd�|D��dS)N�A�Fcss|]}|t|�fVqdS)N)�chr)rr�rrr�	<genexpr>;sz,_TestContainers.test_dict.<locals>.<genexpr>cSsg|]}t|��qSr)r�)rr�rrrr=sz-_TestContainers.test_dict.<locals>.<listcomp>cSsg|]}|t|�f�qSr)r�)rr�rrrr>s)
�dictrrr�r�rCr�sorted�keysr�r�)r/r��indicesr�rrr�	test_dict6s
z_TestContainers.test_dictcCsz|j�}ttdd��}x|D]}t|�||<qWt|�}|jt|�|�|jt|�g�t|�}|j�|jtt	|�dS)Nr�r�)
r�rrr�r�r�rCrIr�r~r�)r/r�r�r�r�rrr�test_dict_iter@s
z_TestContainers.test_dict_itercCs�|jddd�}|jddd�}|j||d�}|j|dd�|j|d	dd�d
|d	d<|j|dd
�|j|d	dd
�d|d	d<|j|dd�|j|d	dd�~~|j|d
dd�d|d	d<|j|d	dd�|d
}|d	}d|d<|j|dd�|j|d	dd�|j�|jt|�d�|j|dd�|j|dd�|j||g�}d|dd<|j|dd�|j|ddd�~~|j|ddd�|jddg|g�}|j|dt�|j|dddd�dS)Nrjr�)�ferrets�hamstersr�r�)�water�feed)�pets�suppliesr�r�rLZblanketsr�r�r��rr�r#Zmarmots�X�cr�r$r$)r�rCrIr\rrrZ)r/r�r�r��lZouterrrr�test_dict_proxy_nestedMsFz&_TestContainers.test_dict_proxy_nestedcCsh|j�}d|_d|_d|_|j|j|jfd�|`|jt|�d�|jt|d��|jt|d��dS)N�Bob�BuilderZhiddenzNamespace(name='Bob')rg�job)r�r�)�	Namespacergr�Z_hiddenrCr�rWr�)r/r[rrr�test_namespace{sz_TestContainers.test_namespaceN)r;)r6r7r8rHr�r�r�r�r�r�r�rrrrr��s


.r��cCstj|�||S)N)r1r{)r�rrrr�sqr�s
r�cCs||S)Nr)r�r�rrr�mul�sr�cCstj|�tdd��dS)Nr�irji)r1r{r()rrrr�raise_large_valuerror�s
r�cCs|S)Nr)r�rrr�identity�sr�c@s eZdZdZdd�Zdd�ZdS)�
CountedObjectrcCs|jd7_tj|�S)Nr#)�n_instancesr�__new__)rirrrr��szCountedObject.__new__cCst|�jd8_dS)Nr#)rqr�)r/rrr�__del__�szCountedObject.__del__N)r6r7r8r�r�r�rrrrr��sr�c@seZdZdS)�SayWhenErrorN)r6r7r8rrrrr��sr�ccs<|dkrtd��x&t|�D]}||kr.td��|VqWdS)Nr#zSomebody said whenr$)r�r�)ZtotalZwhenr�rrr�exception_throwing_generator�sr�cseZdZe�fdd��Ze�fdd��Zdd�Zdd�Zd	d
�Zdd�Z	d
d�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zdd�Zdd�Zdd�Zdd �Zd!d"�Zd#d$�Zd%d&�Zd'd(�Zd)d*�Zed+d,��Zd-d.�Zed/d0��Zd1d2�Zd3d4�Zd5d6�Z�ZS)7�	_TestPoolcst�j�|jd�|_dS)Nr�)�super�
setUpClass�Pool�pool)ri)�	__class__rrr��s
z_TestPool.setUpClasscs(|jj�|jj�d|_t�j�dS)N)r�r�rvr��
tearDownClass)ri)r�rrr��s

z_TestPool.tearDownClasscCs@|jj}|j|td�td��|j|tfddi�tdd��dS)NrLr�r�)r�)rL)r��applyrCr�)r/Zpapplyrrr�
test_apply�sz_TestPool.test_applycCsh|jj}|j|tttd���tttttd�����|j|tttd��dd�tttttd�����dS)Nr�rzr)�	chunksize)r��maprCr�rrr�)r/Zpmaprrr�test_map�s,z_TestPool.test_mapcCs�|jj}tttd�tddd	���}|j|t|�ttjt|���tttd�tdd
d���}|j|t|dd�ttjt|���dS)Nr�r�r#rzr�r)r�r$r$r$r$)r��starmaprrr�r�rCr��	itertools)r/Zpsmap�tuplesrrr�test_starmap�sz_TestPool.test_starmapcCsDtttd�tddd���}|j|jjt|�j�ttj	t|���dS)Nrzr�r#r$r$)
rrr�r�rCr�Z
starmap_asyncr�rurr)r/rrrr�test_starmap_async�sz_TestPool.test_starmap_asynccCs8|j|jjtttd���j�tttttd�����dS)Nr�)rCr��	map_asyncr�rrr�rur�)r/rrr�test_map_async�sz_TestPool.test_map_asynccCs�|jdkr|jj�ng}|jjtdg|j|jd�j�|jdt	|��|jdg|d�|jjtdg|j|jd�j�|jdt	|��|j
|dt�dS)Nr;�1)�callback�error_callbackr#rr?rj)rRr;rrr�rr�r�rrCr\rZr()r/�	call_argsrrr�test_map_async_callbacks�sz"_TestPool.test_map_async_callbackscCs\|jdkr|jdj|j��Gdd�dt�}|jt��|jjt|�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rG�sz5_TestPool.test_map_unplicklable.<locals>.A.__reduce__N)r6r7r8rGrrrr�A�srr�)	rRrSrTrr�r~r�r�r�)r/rrrr�test_map_unplicklable�s

z_TestPool.test_map_unplicklablecCsDy|jjtgdd�jtd�Wn tjk
r>|jd�YnXdS)Nr#)r�)rz2pool.map_async with chunksize stalled on null list)r�rr�rur�r�TimeoutErrorr)r/rrr�test_map_chunksize�sz_TestPool.test_map_chunksizec'Cs|jdkr|jdj|j��|jt��|jjttdd�d�WdQRX|jt��|jjttdd	�d�WdQRX|jt��|jjttdd�d�WdQRXGdd�d�}|jt��|jjt|�d�WdQRX|jt��|jjt|�d�WdQRXdS)
Nr;ztest not appropriate for {}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rWszM_TestPool.test_map_handle_iterable_exception.<locals>.SpecialIterable.__len__N)r6r7r8rrrWrrrr�SpecialIterablesrr$r$)	rRrSrTr�r�r�r�r�r�)r/rrrr�"test_map_handle_iterable_exception�s
   z,_TestPool.test_map_handle_iterable_exceptioncCs<|jjtdtf�}t|j�}|j|�d�|j|jt�dS)Nr��1)	r��apply_asyncr�r�r,rurCrAr.)r/rErurrr�
test_asyncs
z_TestPool.test_asynccCsD|jjtdtdf�}t|j�}|jtj|td�|j	|j
t�dS)Nr�g�?)r)r�rr�r�r,rur�rrrAr.)r/rErurrr�test_async_timeouts
z_TestPool.test_async_timeoutcCs�|jjtttd���}|jt|�tttttd�����|jjtttd���}x$td�D]}|jt|�||�qXW|jt	|j
�|jjtttd��dd�}x$td�D]}|jt|�||�q�W|jt	|j
�dS)Nr�i�rz)r�)r��imapr�rrr�rCr�r�r��
StopIterationr)r/r�r�rrr�	test_imaps"z_TestPool.test_imapcCsH|jdkr|jdj|j��|jjttdd�d�}|jt|j	�|jjttdd�d�}|jt|j	�|jjttdd�d�}x$t
d�D]}|jt|�||�q�W|jt|j	�|jjttdd�d�}x$t
d	�D]}|jt|�||�q�W|jt|j	�|jjttdd�d
�}x&t
d
�D]}|jt|�||��qW|jt|j	�dS)
Nr;ztest not appropriate for {}r#r�r�rr�rjr�r�r$r$)
rRrSrTr�rr�r�r�r�rr�rCr�)r/r�r�rrr�#test_imap_handle_iterable_exception)s$
z-_TestPool.test_imap_handle_iterable_exceptioncCsx|jjtttd���}|jt|�tttttd�����|jjtttd��dd�}|jt|�tttttd�����dS)Nr�i�rz)r�)r��imap_unorderedr�rrr�rCr�r�)r/r�rrr�test_imap_unorderedCs"z_TestPool.test_imap_unorderedcCsN|jdkr|jdj|j��|jjttdd	�d�}|jt|j	�|jjttdd
�d�}|jt|j	�|jjttdd�d�}t
ttt
td����}|jt��6x.td�D]"}t
|�}|j||�|j|�q�WWdQRX|jjttdd�d�}t
ttt
td����}|jt��8x0td�D]$}t
|�}|j||�|j|��qWWdQRXdS)Nr;ztest not appropriate for {}r#r�r�rr�rjr$r$)rRrSrTr�rr�r�r�r�rrrr�r�r�rtr�)r/r�Zexpected_valuesr�rDrrr�-test_imap_unordered_handle_iterable_exceptionJs8
z7_TestPool.test_imap_unordered_handle_iterable_exceptionc
Cst|jdkrtnt}|j||jd�|j||jd�|jdkrp|jd�}z|jdt|j��Wd|j�|j	�XdS)Nr;r#rr�r$)
rR�RemoteErrorr(r�r�rCr\�_poolrrv)r/Zexpected_errorrxrrr�test_make_poolns

z_TestPool.test_make_poolcCsP|jjtjdd�td�D�dd�}|jj�t|jj�}|�|j|j	d�dS)NcSsg|]}d�qS)g�������?r)rr�rrrrsz,_TestPool.test_terminate.<locals>.<listcomp>i'r#)r�g@)
r�rr1r{r�r�r,rv�
assertLessr.)r/r�rvrrrr�}s
z_TestPool.test_terminatecCsz|jd�}|j|jtg�g�|jt|jtg��g�|jt|jtg��g�|j|jtg�j�g�|j	�|j
�dS)Nr#)r�rCr�r�rrrrrrurrv)r/rxrrr�test_empty_iterable�s
z_TestPool.test_empty_iterablecCst|jdkrpttd��}dd�|D�}|jd��"}|jt|�}|j|j�|�WdQRX|j�|j	t
|jt|�dS)Nr:r�cSsg|]}t|��qSr)r�)rr�rrrr�sz*_TestPool.test_context.<locals>.<listcomp>rj)rRrrr�r�rr�rCrurvr�r()r/�Lr�rxr�rrr�test_context�s
z_TestPool.test_contextcCstd��dS)N�{)r~)rirrr�_test_traceback�sz_TestPool._test_tracebackc<Cs�|jdk�r�|jd��H}y|j|j�Wn&tk
rN}z
|}WYdd}~XnX|jd�WdQRX|j�|jt|�t	�|j
|jd�|j}|jt|�t
jj�|jd|j�tj��2}y|�Wn"t	k
r�tjtj��YnXWdQRX|jd|j��|jd��p}y|jttdd�d�Wn(tk
�rN}z
|}WYdd}~XnX|jd�|jt|�t�|j|jd�WdQRX|j�dS)	Nr:r#zexpected RuntimeErrorr&z&raise RuntimeError(123) # some commentzexpected SayWhenError)r&r$)rRr�r�r'�	Exceptionrrvr�rqr~rCr2�	__cause__rr�ZRemoteTracebackrt�tbrrr��
excepthook�exc_info�getvaluer�r�r�r�)r/rxrw�exc�cause�f1rrr�test_traceback�s:


z_TestPool.test_tracebackcCstd��dS)N�foo)r~)rirrr�_test_wrapped_exception�sz!_TestPool._test_wrapped_exceptioncCsD|jd��(}|jt��|j|j�WdQRXWdQRX|j�dS)Nr#)r�r�r~r�r3rv)r/rxrrr�test_wrapped_exception�s z _TestPool.test_wrapped_exceptioncCs~tj�}|jt��N|jd��8}z|jtddg�Wdtjd�|j�|j�XWdQRXWdQRX|j	tj�|d�dS)Nrjrr#g�?g�������?)
r1r�r(r�r�r�r{rrv�
assertGreater)r/Zt_startrxrrr�test_map_no_failfast�s
z_TestPool.test_map_no_failfastcCshdd�td�D�}dd�|D�}|jjt|�~tjt�|jtdd�|D��dh�|jt	j
d�dS)NcSsg|]
}t��qSr)r�)rr�rrrr�sz4_TestPool.test_release_task_refs.<locals>.<listcomp>r�cSsg|]}tj|��qSr)r�r�)r�orrrr�scss|]}|�VqdS)Nr)rr�rrrr��sz3_TestPool.test_release_task_refs.<locals>.<genexpr>r)r�r�r�r�r1r{r�rCr�r�r�)r/ZobjsZrefsrrr�test_release_task_refs�s
z _TestPool.test_release_task_refs) r6r7r8r�r�r�r�r�rrrrr
rrrrrrrrr!r�r#r%r'r1r3r4r6r8�
__classcell__rr)r�rr��s6	

$

&r�cCstd��dS)N�key)�KeyErrorrrrr�raising�sr<cCsdd�S)NcSsdS)N�*rrrrrr7�sz%unpickleable_result.<locals>.<lambda>rrrrr�unpickleable_result�sr>c@s eZdZdZdd�Zdd�ZdS)�_TestPoolWorkerErrorsr:csjtjd�}dg��fdd�}|jt|d�}|jt|j�|j�d�|j�dt�|j	�|j
�dS)Nrjcs|�d<dS)Nrr)r.)�
scratchpadrr�errback	sz@_TestPoolWorkerErrors.test_async_error_callback.<locals>.errback)r	r)rr�rr<r�r;rurWrZrrv)r/rxrArEr)r@r�test_async_error_callback�s
z/_TestPoolWorkerErrors.test_async_error_callbackcs�ddlm}tjd�}xxtd�D]l}dg��fdd�}|jt|d�}|j||j��d}|j	|�|j
�d|�|j|j�|j|j
�q W|j�|j�dS)Nr)�MaybeEncodingErrorrjrcs|�d<dS)Nrr)r.)r@rrrA	sz?_TestPoolWorkerErrors.test_unpickleable_result.<locals>.errback)r	)�multiprocessing.poolrCrr�r�rr>r�rurWrZZassertIsNotNoner.rDrrv)r/rCrxZ	iterationrArE�wrappedr)r@r�test_unpickleable_result
	s

z._TestPoolWorkerErrors.test_unpickleable_resultN)r:)r6r7r8rHrBrFrrrrr?�sr?c@s eZdZdZdd�Zdd�ZdS)�_TestPoolWorkerLifetimer:c	Cstjddd�}|jdt|j��dd�|jD�}g}x$td�D]}|j|jt|f��q>Wx(t	|�D]\}}|j|j
�t|��qdW|j�d}x0|r�tdd	�|jD��r�|d
8}t
jt�q�Wdd�|jD�}|jd|�|jd|�|jt|�t|��|j�|j�dS)Nr�r�)�maxtasksperchildcSsg|]
}|j�qSr)rh)rr�rrrr)	szE_TestPoolWorkerLifetime.test_pool_worker_lifetime.<locals>.<listcomp>rz�2css|]}|j�VqdS)N)rX)rr�rrrr�7	szD_TestPoolWorkerLifetime.test_pool_worker_lifetime.<locals>.<genexpr>r#cSsg|]
}|j�qSr)rh)rr�rrrr:	s)rr�rCr\r r�r�rr��	enumerateruZ_repopulate_pool�allr1r{r�roZassertNotEqualr�rrv)	r/rxZorigworkerpidsrur�r�rEZ	countdownZfinalworkerpidsrrr�test_pool_worker_lifetime&	s&z1_TestPoolWorkerLifetime.test_pool_worker_lifetimecCsxtjddd�}g}x&td�D]}|j|jt|df��qW|j�|j�x(t|�D]\}}|j	|j
�t|��qTWdS)Nr�r#)rHr�g333333�?)rr�r�r�rr�rrvrJrCru)r/rxrur�r�rErrr�%test_pool_worker_lifetime_early_closeC	sz=_TestPoolWorkerLifetime.test_pool_worker_lifetime_early_closeN)r:)r6r7r8rHrLrMrrrrrG#	srG)�BaseManager�	BaseProxyrc@s$eZdZdd�Zdd�Zdd�ZdS)�FooBarcCsdS)Nzf()r)r/rrrr�W	szFooBar.fcCst�dS)N)r()r/rrr�gY	szFooBar.gcCsdS)Nz_h()r)r/rrr�_h[	sz	FooBar._hN)r6r7r8r�rQrRrrrrrPV	srPccs xtd�D]}||Vq
WdS)Nr�)r�)r�rrr�baz^	srSc@s eZdZdZdd�Zdd�ZdS)�
IteratorProxyrcCs|S)Nr)r/rrrrd	szIteratorProxy.__iter__cCs
|jd�S)Nr)�_callmethod)r/rrrrf	szIteratorProxy.__next__N)r)r6r7r8Z	_exposed_rrrrrrrTb	srTc@seZdZdS)�	MyManagerN)r6r7r8rrrrrVi	srV�Foo)�callable�Barr�rR)rXZexposed)rXZ	proxytypec@s0eZdZdZdd�Zdd�Zdd�Zdd	�Zd
S)�_TestMyManagerr;cCs4t�}|j�|j|�|j�|j|jjd�dS)Nr)rVrs�common�shutdownrC�_processr^)r/r;rrr�test_mymanageru	s

z_TestMyManager.test_mymanagercCs8t��}|j|�WdQRX|j|jjdtjf�dS)Nr)rVr[rtr]r^r��SIGTERM)r/r;rrr�test_mymanager_context�	sz%_TestMyManager.test_mymanager_contextc
Cs<t�}|j�|�|j|�WdQRX|j|jjd�dS)Nr)rVrsr[rCr]r^)r/r;rrr�!test_mymanager_context_prestarted�	s
z0_TestMyManager.test_mymanager_context_prestartedcs|j��|j��|j�}�fdd�dD�}�fdd�dD�}|j|ddg�|j|ddg�|j�j�d�|jt�j�|j�jd�d�|jt	�jd�|j�j�d�|j�j
�d�|j�jd�d�|j�jd�d�|jt|�d	d�td
�D��dS)
Ncsg|]}t�|�r|�qSr)r�)rrg)r2rrr�	sz)_TestMyManager.common.<locals>.<listcomp>r�rQrRcsg|]}t�|�r|�qSr)r�)rrg)�barrrr�	szf()z_h()cSsg|]}||�qSrr)rr�rrrr�	sr�)r�rQrR)r�rQrR)
rWrYrSrCr�r�r(rQrUrrRrrr�)r/r;rSZfoo_methodsZbar_methodsr)rbr2rr[�	s z_TestMyManager.commonN)r;)r6r7r8rHr^r`rar[rrrrrZq	s
rZcCstS)N)�_queuerrrr�	get_queue�	srdc@seZdZdZdS)�QueueManagerz$manager class used by server processN)r6r7r8rgrrrrre�	srec@seZdZdZdS)�
QueueManager2z@manager class which specifies the same interface as QueueManagerN)r6r7r8rgrrrrrf�	srfZ	xmlrpclibc@sBeZdZd
ZdddddddgZedd�Zed	d
��Zdd�ZdS)�_TestRemoteManagerr;zhello worldNTg@uhallå världenuпривіт світs
hall� v�rldencCs2t||td�}|j�|j�}|jt|j��dS)N)�addressrV�
serializer)rf�
SERIALIZER�connectrdrN�tupler�)rirhrVr;rrrr�_putter�	s
z_TestRemoteManager._puttercCs�tjd�}ttjdf|td�}|j�|j|j|j	|fd�}d|_
|j�t|j	|td�}|j�|j
�}|j|j�|j�|jt|jtj�~|j�dS)N� r)rhrVri)rar2T)r%�urandomrer�HOSTrjrsrbrmrhrYrfrkrdrCrur�r�r(rNr1r{r\)r/rVr;rxZmanager2rrrr�test_remote�	s
z_TestRemoteManager.test_remote)r;)	r6r7r8rHr�r�r�rmrqrrrrrg�	s
rgc@s eZdZedd��Zdd�ZdS)�_TestManagerRestartcCs,t||td�}|j�|j�}|jd�dS)N)rhrVrizhello world)rerjrkrdrN)rirhrVr;rrrrrm�	s
z_TestManagerRestart._puttercCs�tjd�}ttjdf|td�}|j�}|j}|jj	�|j
�|j|j|j|fd�}|j
�|j
�|j�}|j|j�d�~|j�t||td�}y|j
�WnHtk
r�}z,|jtjkr��tjd�t||td�}WYdd}~XnX|j�dS)Nrnr)rhrVri)rar2zhello worldg�?)r%rorerrprjZ
get_serverrhZlistenerrrsrbrmrvrdrCrur\�OSError�errnoZ
EADDRINUSEr1r{)r/rVr;Zsrvr�addrrxrrwrrr�test_rapid_restart�	s2


z&_TestManagerRestart.test_rapid_restartN)r6r7r8r�rmrvrrrrrr�	srr�c@s�eZdZd%Zedd��Zdd�Zdd�Zd	d
�Zdd�Z	ed
d��Z
ed&dd��Zej
ed�dd��Zej
ed�ejejdkd�ejedkd�ej
eed�d�dd�����Zedd��Zej
ed�ejejdkd�d d!���Zd"d#�Zd$S)'�_TestConnectionr:r<cCs,xt|jt�D]}|j|�qW|j�dS)N)r��
recv_bytes�SENTINEL�
send_bytesr)rir��msgrrr�_echo
sz_TestConnection._echocCsP|j�\}}|j|j|fd�}d|_|j�dddg}td�}|d}tjdttd���}|j	d	krx|j
t|j��t
�|j
|j|�d�|j
|j�|�|j
|j|�d�|j
|j�|�|j	d	k�r$tjdd
gd�}t|�d
gdt|�}	|j
|j|�d�|j
|j|�t|�|j�|j
t|�|	�tjdd
gd�}d
gdt|�d
gdt|�}	|j
|j|�d�|j
|j|d|j�t|�|j�|j
t|�|	�ttdd
��}|j
|j|�d�y|j|�}
Wn6tjk
�r}z|j
|j|f�WYdd}~XnX|jd|
�t|j�}|j
|�d�|j|jd
�|j
|d�d�|j|jd
�|j
|t�d�|j|jt�|jd�tj d�|j
|t�d�|j|jd
�|j
|j�d�td�d}
|j|
�|j
|j�|
�|jt!�|j"�|j	d	k�rD|j
|j#d�|j
|j$d�|j%t&|j�|j%t&|j�|j'�dS)N)rar2Tr#g@zhello worldr�r�r�r:rr�� �(zexpected BufferTooShort, got %sFg�������?�Xi�r�r$ii)(r�rbr}rYrsrr�rrr�rRrCrq�filenor�r�r�r{ryr\Zrecv_bytes_into�itemsize�	bytearrayrZBufferTooShortr2rr,r�rAr.r�r1r{rzr�readable�writabler��EOFErrorrv)r/r�r�rxr�r|Zlongmsgr��bufferr�rErwr�Zreally_big_msgrrr�test_connection$
sr

$"




z_TestConnection.test_connectioncCs�|jdd�\}}|j|jd�d�|j|j�d�|jdkr�|j|jd�|j|jd�|j|jd�|j|jd�|jt|jd�|jt|j�|jt|j	�dS)NF)r�r#r:Trj)
r�rCr�r�rRr�r�r�rsr�)r/�reader�writerrrr�test_duplex_falses
s
z!_TestConnection.test_duplex_falsecCst|j�\}}|j|j|fd�}d|_|j�|j�td�}|j|�|j|j	�|�|jt
�|j�|j�dS)N)rar2Trl)r�rbr}rYrsrrr{rCryrzrv)r/r�r�rxr|rrr�test_spawn_close�
s

z _TestConnection.test_spawn_closecCs:|jdkr|jdj|j��td�}|j�\}}|j|�|j|j�|�|j|d�|j|j�|dd��|j|dd�|j|j�|dd��|j|d�|j|j�td��|j|dd	�|j|j�td��|jt	|j|d
�|jt	|j|dd�|jt	|j|dd�|jt	|j|d�|jt	|j|d
d�dS)Nr:ztest not appropriate for {}ZabcdefghijklmnopqrstuvwxyzrLr�r��rwr��r#r��r$r$)
rRrSrTrr�r{rCryr�r()r/r|r?r@rrr�test_sendbytes�
s&

z_TestConnection.test_sendbytescCsLytj|�Wn4tk
rB}z|jtjkr0dS�WYdd}~XnXdSdS)NFT)r%�fstatrsrt�EBADF)rir�rwrrr�_is_fd_assigned�
sz_TestConnection._is_fd_assignedFcCsh|r2x,tdd�D]}|j|�stj|j�|�qWtj|�}trNtj|tj	�}tj
||�tj|�dS)Nrr)r�r�r%�dup2r�r�recv_handle�msvcrtZopen_osfhandler�rr)rir��dataZcreate_dummy_fdsr�r�rrr�_writefd�
s

z_TestConnection._writefdz$test needs multiprocessing.reductioncCs�|jdkr|jd�|jdd�\}}|j|j|dfd�}d|_|j�|jtj	tj
�ttj
d��,}|j�}t
rzt
j|�}tj|||j�WdQRX|j�ttj
d��}|j|j�d�WdQRXdS)	Nr:zonly makes sense with processesT)r�sfoo)rar2�wb�rb)rRrSr�rbr�rYrsr�rr�r�r�r�r�Z
get_osfhandler�send_handlerhrvrCr�)r/r�r�rxr�r�rrr�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()cCs|jdkr|jd�|jdd�\}}|j|j|ddfd�}d|_|j�|jtj	tj
�ttj
d��f}|j�}x(t
dt�D]}|j|�szPqzW|jd	�tj||�ztj|||j�Wdtj|�XWdQRX|j�ttj
d
��}|j|j�d�WdQRXdS)Nr:zonly makes sense with processesT)r�sbar)rar2r�rz2could not find an unassigned large file descriptorr�)rRrSr�rbr�rYrsr�rr�r�r�r�r��MAXFDr�rr%r�rr�rhrrvrCr�)r/r�r�rxr�r�Znewfdrrr�test_large_fd_transfer�
s(	



z&_TestConnection.test_large_fd_transfercCstj|j�d�dS)N�)r%rr�)r/r�rrr�_send_data_without_fdsz%_TestConnection._send_data_without_fdzdoesn't make sense on WindowscCs`|jdkr|jd�|jdd�\}}|j|j|fd�}d|_|j�|jtt	j
|�|j�dS)Nr:zonly makes sense with processesT)r�)rar2)rRrSr�rbr�rYrsr�r~rr�rv)r/r�r�rxrrr�test_missing_fd_transfers

z(_TestConnection.test_missing_fd_transfercCs�|j�\}}|�R|�B|jd�|j|j�d�|jdkrT|j|j�|j|j�WdQRXWdQRX|jdkr�|j|j�|j|j�|jt	|j�|jt	|j�dS)Ni�r:)
r�r�rCr�rRrd�closedrWr�rs)r/r?r@rrrr%s

 
z_TestConnection.test_contextN)r:r<)F)r6r7r8rHr�r}r�r�r�r�r�r�r)rE�
HAS_REDUCTIONr�r�r�rBr�r�r%r�r�r�r%rrrrrx
s*O
 


rxc@s eZdZdZdd�Zdd�ZdS)�
_TestListenerr:cCsFx@|jjD]4}|jj|d�}|j|j�|jt|jj|j|�q
WdS)N)�family)�
connection�families�Listenerr�rr�rsrh)r/r�r�rrr�test_multiple_bind's
z _TestListener.test_multiple_bindcCsz|jj��N}|jj|j��4}|j�� }|jd�|j|j�d�WdQRXWdQRXWdQRX|jdkrv|j	t
|j�dS)Ni�r:)r�r��Clientrh�acceptr�rCr�rRr�rs)r/r�rPr�rrrr%.s

.
z_TestListener.test_contextN)r:)r6r7r8rHr�r%rrrrr�#sr�c@s4eZdZdZedd��Zdd�Zdd�Zd	d
�ZdS)
�_TestListenerClientr:r<cCs"|jj|�}|jd�|j�dS)Nrl)r�r�r�r)rirhr�rrrrc<s
z_TestListenerClient._testcCsnxh|jjD]\}|jj|d�}|j|j|jfd�}d|_|j�|j�}|j	|j
�d�|j�|j�q
WdS)N)r�)rar2Trl)
r�r�r�rbrcrhrYrsr�rCr�rvr)r/r�r�rxr�rrr�test_listener_clientBsz(_TestListenerClient.test_listener_clientcCsj|jj�}|j|j|jfd�}d|_|j�tjd�|j	�}|j
|j�d�|j�|j
�|j�dS)N)rar2Tr#rl)r�r�rbrcrhrYrsr1r{r�rCr�rrv)r/r�rxr�rrr�test_issue14725Ms

z#_TestListenerClient.test_issue14725cCslxf|jjD]Z}|jj|d�}|jj|j�}|j�}|jd�|j|jd��|j	�|j	�|j	�q
WdS)N)r�shellor#)
r�r�r�r�rhr�r{rWr�r)r/�famr�rPr?rrr�test_issue16955]s
z#_TestListenerClient.test_issue16955N)r:r<)	r6r7r8rHr�rcr�r�r�rrrrr�8s
r�c@sTeZdZdZdd�Zedd��Zdd�Zed	d
��Zdd�Z	ed
d��Z
dd�ZdS)�	_TestPollr:r<cCsJ|j�\}}|j|j�d�|jd�|j|j�d�|j|j�d�dS)NF�T)r�rCr�r{)r/r?r@rrr�test_empty_stringls

z_TestPoll.test_empty_stringcCs.x |D]}tjd�|j|�qW|j�dS)Ng�������?)r1r{r{r)rir��stringsr
rrr�_child_stringsss

z_TestPoll._child_stringscCsxd
}|j�\}}|j|j||fd�}|j�x>|D]6}xtd�D]}|jd	�r@Pq@W|j�}|j||�q2W|j�dS)N�hellor��a�b�bye�lop)rar2��g{�G�z�?)r�r�r�r�r�r�r�r�)	r�rbr�rsr�r�ryrCrv)r/r�r?r@rxr
r�r�rrr�test_stringszs

z_TestPoll.test_stringscCs|jd�dS)NrL)r�)rir�rrr�_child_boundaries�sz_TestPoll._child_boundariescCsv|jd�\}}|j|j|fd�}|j�tjd�ddg}x|D]}|j|�q@W|j�|j�|j	|j
�|�dS)NF)rar2rjsfirstssecond)r�rbr�rsr1r{r{rrvrtry)r/r�r�rxr$r	rrr�test_boundaries�s

z_TestPoll.test_boundariescCs"|jd�|jd�|jd�dS)Nr�r�scd)r{)rir@rrr�_child_dont_merge�s

z_TestPoll._child_dont_mergecCs�|j�\}}|j|jd�d�|j|jd�d�|j|j|fd�}|j�|j|j�d�|j|jd�d�|j|jd�d�|j|j�d�|j|jd�d�|j|jd�d�|j|jd�d�|j|j�d	�|j�dS)
NgFg�������?)rar2r�g�?Tr�scd)r�rCr�rbr�rsryrv)r/r?r@rxrrr�test_dont_merge�sz_TestPoll.test_dont_mergeN)r:r<)r6r7r8rHr�r�r�r�r�r�r�r�rrrrr�hsr�z$test needs multiprocessing.reductionc@sPeZdZdZedd��Zedd��Zedd��Zdd	�Zed
d��Z	dd
�Z
dS)�_TestPicklingConnectionsr:cCsddlm}|jdd�dS)Nr)�resource_sharerrL)r)rr�r�)rir�rrrr��sz&_TestPicklingConnections.tearDownClasscCs�xH|D]@}|jj|d�}|j|j�|j�}|j|�|j�|j�qWtj�}|jtj	df�|j
�|j|j��|j�\}}|j|�|j�|j�|j�dS)N)r�r)
r�r�r�rhr�r�socket�bindrrp�listen�getsocknamer�)rir�r�r�r��new_connrurrr�	_listener�s 


z"_TestPicklingConnections._listenercCs|x:t|jd�D]*\}}|jj|�}|j|j��|j�qW|j�\}}tj�}|j|�|j	|j��|j�|j�dS)N)
r�r�r�r�r�r�rr�rk�sendall)rir�rhr|�clientrrr�_remote�s
z _TestPicklingConnections._remotecCsf|jj}|j�\}}|j|j||fd�}d|_|j�|j�|j�\}}|j|j|fd�}d|_|j�|j�xL|D]D}d|j	d�}	|j
�}
|j|
|	f�|j
�}|j|j
�|	j
��qxW|jd�td�}	|j
�}
|j|
|	f�|j
�}g}x |j
d�}
|
�sP|j|
�q�Wdj|�}|j||	j
��|j�|jd�|j�|j�|j�|j�dS)N)rar2TzThis connection uses family %s�asciiz$This connection uses a normal socketrzr�)r�r�r�rbr�rYrsrr�r	r�r�rCr�rr�rv)r/r�ZlconnZlconn0Zlpr�Zrconn0Zrpr�r|rhr�Zbufr
rrr�
test_pickling�sH




z&_TestPicklingConnections.test_picklingcCsD|j�}|jd�|j�|j�}|j�}|j|d�|j�dS)Nzall is wellrj)r�r�r)rir�r�r�r|rrr�child_accesss
z%_TestPicklingConnections.child_accesscCs�|j�\}}|j|j|fd�}d|_|j�|j�|jdd�\}}|j|�|j�|j|j�d�|j�|jdd�\}}|j|�|j�|jd�|j�|j|j�d�|j	�dS)	N)rar2TF)r�zall is wellZfoobarrjZfoobarfoobar)
r�rbr�rYrsrr�rCr�rv)r/r�r�rxr�r�rrr�test_access"s"


z$_TestPicklingConnections.test_accessN)r:)r6r7r8rHr�r�r�r�r�r�r�rrrrr��s.r�c@s eZdZdZdd�Zdd�ZdS)�	_TestHeapr:cCs�d}d}g}xVt|�D]J}ttjdd�d�}tjj|�}|j|�t|�|krtj	|�}||=qWtjjj
}g}d}	|jj�|j
|jj�xJt|jj��D]8}
x2|
D]*\}}}
|j|jj|�||
|
|df�q�Wq�Wx@|jD]6\}}}
|j|jj|�||
|
|df�|	|
|7}	q�W|j�xltt|�d�D]X}||dd�\}}}
||ddd�\}}}|j||k�r�|dk�p�|
|k��q6WdS)	Ni�rIrr#i�Zfree�occupiedr�)r�r��randomZlognormvariaterrLrMr�r\Z	randrangeZ_heaprSrr�rrrZ_len_to_seqr�Z_arenas�indexZ_allocated_blocks�sortrW)r/Z
iterationsZ	maxblocksZblocksr�r�r@rLrKr�r$Zarenarsr�ZnarenaZnstartZnstoprrr�	test_heapGs:




z_TestHeap.test_heapcCsztj�stj�|jtj�tj�}|jtjf|��tjd�x4td�D](}tj	j
d�}tj	j
d�}||_||_qJWdS)Nr�i�r#)�gc�	isenabled�enabler��disable�
get_threshold�
set_thresholdr�rrLrMZbuddy)r/Z
thresholdsr�r?r@rrr�test_free_from_gcns
z_TestHeap.test_free_from_gcN)r:)r6r7r8rHr�r�rrrrr�Cs'r�c@seZdZdefdefgZdS)�_Foor�r�N)r6r7r8r r!Z_fields_rrrrr��sr�c@s>eZdZdZdd�Zedd��Zddd�Zd	d
�Zdd�Z	d
S)�_TestSharedCTypesr:cCsts|jd�dS)Nz%requires multiprocessing.sharedctypes)rFrS)r/rrrrn�sz_TestSharedCTypes.setUpcCsp|jd9_|jd9_|jd9_|jd9_|jd9_x$tt|��D]}||d9<qTWdS)Nrj)rDr�r�r�r\)rir�r�r2r��stringr�rrr�_double�sz_TestSharedCTypes._doubleFc	Cstdd|d�}ttd|d�}ttdd|d�}|jdttd	��|d�}|jd
d|d�}td�|_|j|j	|||||fd
�}d|_
|j�|j�|j
|jd�|j|jd�|j
|jd�|j|jd�x$td	�D]}|j|||d�q�W|j
|jtd��dS)Nr�r�)r g�?g@r�rjr�r�rPrrl)rar2T�g@r�g@Z
hellohellogUUUUUU�?gUUUUUU�?)rr!r�r�rrr�rrDrbr�rYrsrvrCr>r�r�)	r/r r�r�r2r�r�rxr�rrr�test_sharedctypes�s"
z#_TestSharedCTypes.test_sharedctypescCs|jdd�dS)NT)r )r�)r/rrr�test_synchronize�sz"_TestSharedCTypes.test_synchronizecCs>tdd�}t|�}d|_d|_|j|jd�|j|jd�dS)Nrjg@r)r�rr�r�rCr>)r/r2rbrrr�	test_copy�s
z_TestSharedCTypes.test_copyN)r:)F)
r6r7r8rHrnr�r�r�r�r�rrrrr��s

r�c@s<eZdZd
Zdd�Zdd�Zedd��Zdd	�Zd
d�Z	dS)�
_TestFinalizer:cCstjj�|_tjj�dS)N)r�_finalizer_registryr�registry_backuprI)r/rrrrn�sz_TestFinalize.setUpcCs|jtj�tjj|j�dS)N)rdrr��updater�)r/rrrrp�sz_TestFinalize.tearDowncCsGdd�dt�}|�}tj||jdd�~|�}tj||jdd�}|�|�~|�}tj||jdd�|�}tj||jddd	�|�}tj||jddd	�|�}	tj|	|jddd	�|�}
tj|
|jddd	�tjd|jddd	�tjd|jddd	�tj�|j�tjd�dS)Nc@seZdZdS)z)_TestFinalize._test_finalize.<locals>.FooN)r6r7r8rrrrrW�srWr?)r2r@rP�d10r#)r2�exitpriority�d01r�d02�d03rwr��STOPrz)r?)r@)rP)r�)r�)r�)r�)rwi����)r�i����)rr�Finalizer�Z_exit_functionrr%�_exit)rir�rWr?r@Zclose_brPr�r�r�r�rrr�_test_finalize�s0z_TestFinalize._test_finalizec	Csh|j�\}}|j|j|fd�}d|_|j�|j�dd�t|jd�D�}|j|dddd	d
ddg�dS)
N)rar2TcSsg|]}|�qSrr)rr	rrrr�sz/_TestFinalize.test_finalize.<locals>.<listcomp>r�r?r@r�r�r�r�rw)	r�rbr�rYrsrvr�r�rC)r/r�r�rxr�rrr�
test_finalize�sz_TestFinalize.test_finalizecs�dd��G�fdd�dt��d�d���fdd�}���fdd	�}tj�}tj�}zdtjd
�tjddd�tj|d�tj|d�g}t	j
|��tjd
�d�WdQRX�dk	r���Wdtj|�tj|�tj
�XdS)NcSsdS)Nrrrrr�cb
sz,_TestFinalize.test_thread_safety.<locals>.cbcseZdZ�fdd�ZdS)z-_TestFinalize.test_thread_safety.<locals>.Foocs"||_tj|�tjdd�d�dS)Nr#rz)r�)r�rr�r�Zrandint)r/)r�rrr0
sz6_TestFinalize.test_thread_safety.<locals>.Foo.__init__N)r6r7r8r0r)r�rrrW
srWFcsTxN�sNtjtj�d�ytj�Wqtk
rJ}z
|�WYdd}~XqXqWdS)Ng�������?)r1r{r�rZ_run_finalizersr()rw)r.�finishrr�run_finalizers
sz8_TestFinalize.test_thread_safety.<locals>.run_finalizerscsfi}x\�s`y$�fdd�td�D�|tjd�<Wqtk
r\}z|�|j�WYdd}~XqXqWdS)Ncsh|]
}���qSrr)rr�)rWrr�	<setcomp>!
szL_TestFinalize.test_thread_safety.<locals>.make_finalizers.<locals>.<setcomp>r�rL)r�r�Zgetrandbitsr(rI)r�rw)rWr.r�rr�make_finalizers
s$z9_TestFinalize.test_thread_safety.<locals>.make_finalizersg���ư>rL)rag@T)rr��getswitchintervalr�r��setswitchintervalr�rr2rZ
start_threadsr1r{�collect)r/r�r�Zold_intervalZ
old_thresholdr<r)rWr�r.r�r�test_thread_safety
s*




z _TestFinalize.test_thread_safetyN)r:)
r6r7r8rHrnrpr�r�r�r�rrrrr��s&r�c@seZdZdd�Zdd�ZdS)�_TestImportStarcCsbddl}tjjtj�}tjj|d�}|j|�}dd�|D�}dd�|D�}|jd�|jd�|S)Nrz*.pycSs(g|] }tjjtjj|�d�d�qS)r#r)r%�path�splitext�split)rr�rrrrC
sz4_TestImportStar.get_module_names.<locals>.<listcomp>cSsg|]}d|�qS)zmultiprocessing.r)rrvrrrrD
szmultiprocessing.__init__r)	�globr%r��dirnamer�__file__rvr�r�)r/rZfolder�pattern�files�modulesrrr�get_module_names>
s


z _TestImportStar.get_module_namescCs�|j�}tjdkr2|jd�|jd�|jd�n|jd�tsJ|jd�tdkr\|jd�xZ|D]R}t|�tj|}|jt	|d�|�x(|j
D]}|jt	||�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�rBr�r�r rrrWr�r	)r/rrg�mod�attrrrr�test_importI
s$







z_TestImportStar.test_importN)r6r7r8rrrrrrr�<
sr�c@s,eZdZd	Zdd�Zedd��Zdd�ZdS)
�_TestLoggingr:cCsDtj�}|jtj�|j|dk	�|jd�|jd�|jt�dS)Nzthis will not be printedz
nor will this)	r�
get_logger�setLevelr�
SUBWARNINGrW�debug�info�	LOG_LEVEL)r/�loggerrrr�test_enable_loggingk
s

z _TestLogging.test_enable_loggingcCstj�}|j|j��dS)N)rrr�ZgetEffectiveLevel)rir�rrrr�_test_levels
sz_TestLogging._test_levelc	Cs�d}d}tj�}tj�}|j}tjdd�\}}|j|�|j|j|fd�}|j	�|j
||j��|j�|jtj
�|j|�|j|j|fd�}|j	�|j
||j��|j�|j|�|jtd�dS)Nrn�%F)r�)rar2)�level)rr�loggingZ	getLoggerrr�rrbrrsrCr�rvZNOTSETr)	r/ZLEVEL1ZLEVEL2rZroot_loggerZ
root_levelr�r�rxrrr�
test_levelx
s&


z_TestLogging.test_levelN)r:)r6r7r8rHrr�rrrrrrr
g
sr
c@s6eZdZd	Zedd��Zejee	d�d�dd��Z
dS)
�_TestPollEintrr:cCstjd�tj|tj�dS)Ng�������?)r1r{r%r�r��SIGUSR1)rirhrrr�_killer�
s
z_TestPollEintr._killerrzrequires SIGUSR1cs�dg��fdd�}tj�}tjtj|�}zj|j|j|fd�}|j�z$|jtjdd�}|j�|j	�Wd|j	�X|j
�d�|j|jd�Wdtjtj|�XdS)NFcsd�d<dS)NTrr)r2)�
got_signalrr�record�
sz._TestPollEintr.test_poll_eintr.<locals>.record)rar2rjr)rj)
r%r]r�rrbrrsr1r{rvrWrCr^)r/rrhZ
oldhandlerZkillerrxr)rr�test_poll_eintr�
s
z_TestPollEintr.test_poll_eintrN)r:)r6r7r8rHr�rr)rEr�r�r rrrrr�
src@s eZdZejed�dd��ZdS)�TestInvalidHandlezskipped on WindowscCsZtjjd�}z*y|j�Wnttfk
r2YnXWdd|_X|jttftjjd�dS)Ni�M�r#r$)rr�Z
Connectionr�r(rsZ_handler�)r/r�rrr�test_invalid_handles�
s

z&TestInvalidHandle.test_invalid_handlesN)r6r7r8r)r��WIN32r"rrrrr!�
sr!c@seZdZdd�Zdd�ZdS)�	OtherTestcCs,Gdd�dt�}|jtjtjj|�d�dS)Nc@seZdZdd�Zdd�ZdS)zFOtherTest.test_deliver_challenge_auth_failure.<locals>._FakeConnectioncSsdS)Nssomething bogusr)r/r�rrrry�
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)r6r7r8ryr{rrrr�_FakeConnection�
sr%sabc)rr�r�AuthenticationErrorr�Zdeliver_challenge)r/r%rrr�#test_deliver_challenge_auth_failure�
sz-OtherTest.test_deliver_challenge_auth_failurecCs,Gdd�dt�}|jtjtjj|�d�dS)Nc@s$eZdZdd�Zdd�Zdd�ZdS)zEOtherTest.test_answer_challenge_auth_failure.<locals>._FakeConnectioncSs
d|_dS)Nr)r|)r/rrrr0�
szNOtherTest.test_answer_challenge_auth_failure.<locals>._FakeConnection.__init__cSs2|jd7_|jdkr tjjS|jdkr.dSdS)Nr#rjssomething bogusr�)r|rr�Z	CHALLENGE)r/r�rrrry�
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)r6r7r8r0ryr{rrrrr%�
sr%sabc)rr�rr&r�Zanswer_challenge)r/r%rrr�"test_answer_challenge_auth_failure�
sz,OtherTest.test_answer_challenge_auth_failureN)r6r7r8r'r(rrrrr$�
s
r$cCs|jd7_dS)Nr#)�test)�nsrrr�initializersr+c@s,eZdZdd�Zdd�Zdd�Zdd�Zd	S)
�TestInitializerscCs"tj�|_|jj�|_d|j_dS)Nr)r�Manager�mgrr�r*r))r/rrrrns
zTestInitializers.setUpcCs|jj�|jj�dS)N)r.r\rv)r/rrrrp	s
zTestInitializers.tearDowncCsNtjj�}|jt|jd�|jt|jf�|j|jj	d�|j
�|j�dS)Nr#)rZmanagersZSyncManagerr��	TypeErrorrsr+r*rCr)r\rv)r/rvrrr�test_manager_initializer
s
z)TestInitializers.test_manager_initializercCsH|jttjdd�tjdt|jf�}|j�|j�|j|jj	d�dS)Nr#)r+)
r�r/rr�r+r*rrvrCr))r/rxrrr�test_pool_initializers
z&TestInitializers.test_pool_initializerN)r6r7r8rnrpr0r1rrrrr,sr,cCs,y|jdd�}Wntjk
r&YnXdS)NF)�block)rur�r)rO�itemrrr�_this_sub_process!sr4cCs2tj�}tjt|fd�}d|_|j�|j�dS)N)rar2T)rrrbr4rYrsrv)rZsubProcrrr�
_test_process's
r5cCs||S)Nr)r�rrr�_afunc.sr6c	Cs:tjdd�}|jtdddddddg�}|j�|j�dS)	Nr�)r:r#rjr�rLr�r�)rr�r�r6rrv)r�r�rrr�pool_in_process1sr7c@s0eZdZdd�Zedd��Zdd�Zdd�Zd	S)
�
_file_likecCs||_d|_dS)N)�	_delegate�_pid)r/Zdelegaterrrr08sz_file_like.__init__cCs$tj�}||jkr||_g|_|jS)N)r%r]r:�_cache)r/rhrrr�cache<s

z_file_like.cachecCs|jj|�dS)N)r<r�)r/r�rrrrEsz_file_like.writecCs|jjdj|j��g|_dS)Nrw)r9rrvr<r;)r/rrr�flushHsz_file_like.flushN)r6r7r8r0�propertyr<rr=rrrrr87s	r8c@s$eZdZdd�Zdd�Zdd�ZdS)�TestStdinBadfiledescriptorcCs tjtd�}|j�|j�dS)N)ra)rrbr5rsrv)r/r�rrr�test_queue_in_processNsz0TestStdinBadfiledescriptor.test_queue_in_processcCs tjtd�}|j�|j�dS)N)ra)rrbr7rsrv)r/rxrrr�test_pool_in_processSsz/TestStdinBadfiledescriptor.test_pool_in_processcsJtj�}t|���jd�tj�fdd�d�}�j�|j�dksFt�dS)Nr2cs�j�S)N)r=r)�flikerrr7\sz:TestStdinBadfiledescriptor.test_flushing.<locals>.<lambda>)ra)	r�r�r8rrrbr=r-rM)r/Zsior�r)rBr�
test_flushingXs
z(TestStdinBadfiledescriptor.test_flushingN)r6r7r8r@rArCrrrrr?Lsr?c@sleZdZedd��Zddd�Zedd��Zddd	�Zd
d�Zdd
�Z	dd�Z
edd��Zdd�Zdd�Z
dS)�TestWaitcCsFx8td�D],}|r$tjtj�d�|j|tj�f�q
W|j�dS)Nr�g�������?)r�r1r{r�r�r%r]r)rir��slowr�rrr�_child_test_waitcs
zTestWait._child_test_waitFcsddlm}g}g�g}xjtd�D]^}tjdd�\}}tj|j||fd�}d|_|j�|j	�|j
|��j
|�|j|j�q"WxX|r�xN||�D]B}y|j
�}	Wn&tk
r�|j|�|j	�Yq�X|j
|	�q�Wq�W|j�t�fdd	�td
�D��}
|j||
�dS)Nr)rr�F)r�)rar2Tc3s"|]}�D]}||jfVq
qdS)N)rh)rr�rx)�procsrrr��sz%TestWait.test_wait.<locals>.<genexpr>r�)�multiprocessing.connectionrr�rr�rbrFrYrsrr�r�rvr�r�r�r�r�rC)r/rEr�readersZmessagesr�r�r�rxr|r�r)rGr�	test_waitks0


zTestWait.test_waitcCsZtj�}|j|�x:td�D].}|r6tjtj�d�|jd|jd��qW|j�dS)Nr�g�������?z%s
r�)	r�rkr�r1r{r�r�r	r)rirhrEr
r�rrr�_child_test_wait_socket�s
z TestWait._child_test_wait_socketcCsXddlm}tj�}|jtjdf�|j�|j�}g}g}i}xHtd�D]<}t	j
|j||fd�}	d|	_|	j
�|j|	�|j|	j�qJWx.td�D]"}|j�\}
}|j|
�g||
<q�W|j�xL|�rx@||�D]4}
|
jd�}|s�|j|
�|
j�q�||
j|�q�Wq�Wdjdd	�td
�D��jd�}
x$|j�D]}|jdj|�|
��q8WdS)
Nr)rr�)rar2Trnrwcss|]}d|VqdS)z%s
Nr)rr�rrrr��sz,TestWait.test_wait_socket.<locals>.<genexpr>r�r�r�)rHrr�r�rrpr�r�r�rrbrKrYrsr�r�rvr�rr�r�r	r�rC)r/rErr�rurIrGZdicr�rxr�rVr|r��vrrr�test_wait_socket�s<




zTestWait.test_wait_socketcCs|jd�dS)NT)rJ)r/rrr�test_wait_slow�szTestWait.test_wait_slowcCs|jd�dS)NT)rM)r/rrr�test_wait_socket_slow�szTestWait.test_wait_socket_slowcCs�ddlm}d}tj�\}}tj�}|||g|�}tj�|}|j|g�|j||d�|j||d�|jd�tj�}|||gd�}tj�|}|j||g�|j|d�dS)Nr)rrLrjg�?rg�������?)	rHrrr�r1rCr"r5r�)r/rr�r?r@rsrErrrr�test_wait_timeout�s
zTestWait.test_wait_timeoutcCs|j�tj|�dS)N)rr1r{)rir&Zperiodrrr�signal_and_sleep�szTestWait.signal_and_sleepcCs�ddlm}d}dd�}tjd�}tj�\}}tj|j||fd�}|j�|j|j	t
�|j|jdd��t
j
�}|||j	|g|d�}	t
j
�|}
|j|	|j	g�|j|
|d	�|j|
|d	�|jd�t
j
�}|||j	|gd�}	t
j
�|}
|j||	�||j	|g��|j|
d
�|jd�t
j
�}|||j	|gd�}	t
j
�|}
|j||	�|||j	|g��|j|
d
�|j�|j�dS)Nr)rr�cSst|dd�d�S)NcSst|�S)N)r�)r�rrrr7�sz>TestWait.test_wait_integer.<locals>.<lambda>.<locals>.<lambda>)r:)r�)r�rrrr7�sz,TestWait.test_wait_integer.<locals>.<lambda>)rar2r)rrjg�������?)rHrrr(r�rbrQrsrZr�r�rWrr1rCr"r5r�r�rv)r/rr�Zsorted_r&r?r@rxrsrErrrr�test_wait_integer�s<


zTestWait.test_wait_integercCsfddlm}tj�\}}tj�}||gdd�}tj�|}|j|g�|j|d�|j�|j�dS)Nr)rr#)rr$)rHrrr�r1rCr"r)r/rr?r@r4rErrr�test_neg_timeoutszTestWait.test_neg_timeoutN)F)F)r6r7r8r�rFrJrKrMrNrOrPrQrRrSrrrrrDas


%+rDc@s4eZdZejed�dd��Zejed�dd��ZdS)�TestInvalidFamilyzskipped on Windowsc	Cs&|jt��tjjd�WdQRXdS)Nz\\.\test)r�r(rr�r�)r/rrr�test_invalid_familysz%TestInvalidFamily.test_invalid_familyz skipped on non-Windows platformsc	Cs&|jt��tjjd�WdQRXdS)Nz/var/test.pipe)r�r(rr�r�)r/rrr�test_invalid_family_win32sz+TestInvalidFamily.test_invalid_family_win32N)	r6r7r8r)r�r#rUrErVrrrrrTsrTc@s,eZdZedd��Zedd��Zdd�ZdS)�	TestFlagscCs|jttj��dS)N)r�rlr��flags)rir�rrr�run_in_grandchild%szTestFlags.run_in_grandchildcCsrddl}tjdd�\}}tj|j|fd�}|j�|j�}|j�|j�|j�t	t
j�|f}t|j
|��dS)NrF)r�)rar2)�jsonrr�rbrYrsr�rvrrlr�rX�print�dumps)rirZr�r�rx�grandchild_flagsrXrrr�run_in_child)szTestFlags.run_in_childcCsPddl}ddl}d	}|jtjdddd|g�}|j|jd��\}}|j||�dS)
Nrz2from test._test_multiprocessing import TestFlags; zTestFlags.run_in_child()z-Ez-Sz-Oz-cr�zJfrom test._test_multiprocessing import TestFlags; TestFlags.run_in_child())rZ�
subprocessZcheck_outputr��
executable�loads�decoderC)r/rZr_�progr�Zchild_flagsr]rrr�
test_flags6szTestFlags.test_flagsN)r6r7r8r�rYr^rdrrrrrW$s
rWc@s eZdZedd��Zdd�ZdS)�TestTimeoutscCs>tjd�|jd�|j�tjj|�}|jd�|j�dS)Nr#r&i�)r1r{r�rrr�r�)ri�childrhr�rrr�
_test_timeoutEs


zTestTimeouts._test_timeoutcCs�tj�}z�tjd�tjdd�\}}tjjdd�}tj|j||j	fd�}|j
�|j�|j|j
�d�|j�|j�}|j|j
�d�|j�|j�|jd	�Wdtj|�XdS)
Ng�������?T)r��AF_INET)r�)rar2r&i�r�)r�ZgetdefaulttimeoutZsetdefaulttimeoutrr�r�r�rbrgrhrsrrCr�r�rv)r/Zold_timeout�parentrfr�rxr�rrrrNs"
zTestTimeouts.test_timeoutN)r6r7r8r�rgrrrrrreDs	rec@seZdZdd�ZdS)�TestNoForkBombcCs�tj�}tjjtjjt�d�}|dkrTtjj	||�\}}}|j
|d�|jd|�n0tjj||�\}}}|j
|j
�d�|j
|d�dS)Nzmp_fork_bomb.py�forkr�sRuntimeErrors123)rr�r%r�rvrrr�
script_helperZassert_python_failurerCrt�assert_python_okr�)r/r�rg�rc�outr�rrr�test_noforkbombgszTestNoForkBomb.test_noforkbombN)r6r7r8rprrrrrjfsrjc@s eZdZedd��Zdd�ZdS)�TestForkAwareThreadLockcCsZ|dkr>tj|j|d|fd�}|j�|j�|jdd�n|jttj	��|j�dS)Nr#)rar2rL)r)
rrbrfrsrrvr�r\r�_afterfork_registry)rir[r�rxrrrrf|szTestForkAwareThreadLock.childcCshtjd�\}}tj�}ttj�}tj|jd|fd�}|j�|j	�|j
�}|jdd�|j||�dS)NFrL)rar2)r)
rr�rZForkAwareThreadLockr\rrrbrfrsrr�rvZassertLessEqual)r/r�r�r�Zold_sizerxZnew_sizerrrr!�s
z!TestForkAwareThreadLock.test_lockN)r6r7r8r�rfr!rrrrrqwsrqc@s0eZdZdd�Zdd�Zedd��Zdd�Zd	S)
�TestCloseFdscCsbtrtj�j�Stj�j�}g}x |dkr@|j|�tj|�}q"Wx|D]}tj|�qHW|SdS)NrI)r#r��detachr�r%�dupr)r/r�Zto_closer�rrr�get_high_socket_fd�s


zTestCloseFds.get_high_socket_fdcCs$trtj|d�j�n
tj|�dS)N)r�)r#r�rr%)r/r�rrrr�szTestCloseFds.closecCsZytj|tjtj�}Wn,tk
rB}z|j|�WYdd}~XnX|j�|jd�dS)N)r�ZfromfdrhZSOCK_STREAMr(r�r)rir�r�r
rwrrr�_test_closefds�szTestCloseFds._test_closefdscCs�tstjd��tj�\}}|j�}z<tj|j||fd�}|j�|j	�|j
�}|jdd�Wd|j	|�|j	�|j	�Xtj�dkr�|j
|d�n.d}|j|t�|j|jtjkp�|j|k|�dS)Nzrequires fd pickling)rar2rL)rrki6')r�r)r*rr�rvrbrwrsrr�rvr�r�rZrsrWrtr�Zwinerror)r/r�r�r�rxrwZWSAENOTSOCKrrr�test_closefd�s(


zTestCloseFds.test_closefdN)r6r7r8rvrr�rwrxrrrrrs�s
rsc@sfeZdZeejej�Zedd��Z	e
jee
d�d�dd��Zedd��Ze
jee
d�d�d	d
��ZdS)�TestIgnoreEINTRcCsFdd�}tjtj|�|jd�|j�}|j|�|jd|j�dS)NcSsdS)Nr)r��framerrrr�sz-TestIgnoreEINTR._test_ignore.<locals>.handler�ready�x)r�rr�r�r{�
CONN_MAX_SIZE)rir�rr�rrr�_test_ignore�s

zTestIgnoreEINTR._test_ignorerzrequires SIGUSR1c
Cs�tj�\}}z�tj|j|fd�}d|_|j�|j�|j|j�d�t	j
d�tj|j
tj�t	j
d�|jd�|j|j�d�t	j
d�tj|j
tj�|j|j�d|j�t	j
d�|j�Wd|j�XdS)N)rar2Tr{g�������?i�r|)rr�rbr~rYrsrrCr�r1r{r%r�rhr�rr�ryr}rv)r/r�r�rxrrr�test_ignore�s&





zTestIgnoreEINTR.test_ignorec	CsNdd�}tjtj|�tjj��$}|j|j�|j�}|jd�WdQRXdS)NcSsdS)Nr)r�rzrrrrsz6TestIgnoreEINTR._test_ignore_listener.<locals>.handler�welcome)r�rrr�r�r�rhr�)rir�rr�r?rrr�_test_ignore_listener�sz%TestIgnoreEINTR._test_ignore_listenerc
Cs�tj�\}}z|tj|j|fd�}d|_|j�|j�|j�}tj	d�t
j|jt
j�tj	d�tjj|�}|j|j�d�|j�Wd|j�XdS)N)rar2Tg�������?r�)rr�rbr�rYrsrr�r1r{r%r�rhr�rr�r�rCrv)r/r�r�rxrhr�rrr�test_ignore_listeners


z$TestIgnoreEINTR.test_ignore_listenerN)r6r7r8�maxrZ
PIPE_MAX_SIZEZ
SOCK_MAX_SIZEr}r�r~r)rEr�r�rr�r�rrrrry�s


ryc@s@eZdZedd��Zdd�Zdd�Zdd�Zd	d
�Zdd�Z	d
S)�TestStartMethodcCs|jtj��dS)N)r�rr�)rir�rrr�_check_contextszTestStartMethod._check_contextcCs^|jdd�\}}|j|j|fd�}|j�|j�|j�}|j�|j�|j||j��dS)NF)r�)rar2)	r�rbr�rsrr�rvrCr�)r/�ctxr�r�rxZchild_methodrrr�
check_context szTestStartMethod.check_contextc
Cs�x|dD]t}ytj|�}Wntk
r.wYnX|j|j�|�|j|j�|�|jt|jd�|jt|jd�|j|�qWdS)Nrk�spawnr�)rkr�r�)	r�get_contextr(rCr�r�r��set_start_methodr�)r/�methodr�rrrr%*s
zTestStartMethod.test_contextcCs�tjt�d}tj�}z�x�dD]�}ytj|dd�Wntk
rJwYnX|jtj�|�tj�}|j|j�|�|jt	|�j
j�j|��|j|j
j
j�j|��|jt�|d7}qWWdtj|dd�X|j|d�dS)	Nrrkr�r�T)�forcer#)rkr�r�)r�set_forkserver_preload�PRELOADr�r�r(rCr�rWrqr6�lower�
startswithrbr�r)r/r|Z
old_methodr�r�rrr�test_set_get6s&


zTestStartMethod.test_set_getcCsFtj�}tjdkr"|j|dg�n |j|ddgkp>|dddgk�dS)Nrr�rkr�)rZget_all_start_methodsr�rBrCrW)r/�methodsrrr�test_get_allLs

zTestStartMethod.test_get_allcCs�tj�dkr|jd�tjjtjjt�d�}tj	j
|�\}}}|j�}|j�}|j�dksb|dkr|t
|�t
|�|jd�dS)Nr�z*test only relevant for 'forkserver' methodz
mp_preload.py�okrwz(failed spawning forkserver or grandchild)rr�rSr%r�rvrrrrlrmrbr�r[r)r/rgrnror�rrr�test_preload_resourcesTs
z&TestStartMethod.test_preload_resourcesN)
r6r7r8r�r�r�r%r�r�r�rrrrr�s
r�z*test semantics don't make sense on Windowsc@s,eZdZdd�Zdd�Zdd�Zdd�Zd	S)
�TestSemaphoreTrackercCs ddl}d}tj�\}}|jtjdd|||fg|g|jd�}tj|�t|ddd��*}|j	�j
�jd	�}|j	�j
�jd	�}WdQRXtj
|�|j�|j�tjd
�|jt��}	tj
|�WdQRX|j|	jjtjtjf�|jj�jd�}
|jj�d}|j|
|�|j|
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)r�r�g@zutf-8z9semaphore_tracker: There appear to be 2 leaked semaphoreszsemaphore_tracker: %r: \[Errno)r_r%�pipe�Popenr�r`�PIPErr��readliner�rbrZ
sem_unlinkr�rr1r{r�rsrtZ	exceptionrt�ENOENTZEINVALr�r�ZassertRegex)r/r_�cmdr�r�rxr�Zname1Zname2r�r�r�rrr�test_semaphore_trackeres.	




z+TestSemaphoreTracker.test_semaphore_trackerc	Cs�ddlm}|j�|j}tj||�tjd�tj	d�}t
j��T}|rZ|j|j
td��|j�}|j�|j�tj|�}~tj�|j|��WdQRXdS)Nr)�_semaphore_trackerg�?r�zsemaphore_tracker: process died)Z!multiprocessing.semaphore_trackerr�r�r:r%r�r1r{rr��
contextlib�	ExitStack�
enter_contextZassertWarnsRegex�UserWarningr(rrr�r�r�r�ZassertIsNone)	r/r�Z
should_dier�rhr��stackr&r�rrr�check_semaphore_tracker_death�s$



z2TestSemaphoreTracker.check_semaphore_tracker_deathcCs|jtjd�dS)NF)r�r�r�)r/rrr�test_semaphore_tracker_sigint�sz2TestSemaphoreTracker.test_semaphore_tracker_sigintcCs|jtjd�dS)NT)r�r�r�)r/rrr�test_semaphore_tracker_sigkill�sz3TestSemaphoreTracker.test_semaphore_tracker_sigkillN)r6r7r8r�r�r�r�rrrrr�as%r�c@s eZdZedd��Zdd�ZdS)�TestSimpleQueuec
Cs8|j�z |j|j��|j|j��Wd|j�XdS)N)rrNr�r�)rirr�r�rrr�_test_empty�s
zTestSimpleQueue._test_emptycCs�tj�}tj�}tj�}tj|j|||fd�}d|_|j�|j|j��|j	�|j
�|j|j��|j|j
�d�|j|j
�d�|j|j��|j�dS)N)rar2TF)rZSimpleQueuernrbr�rYrsrWr�r�rrdrCrurv)r/rr�r�r�rrr�
test_empty�s zTestSimpleQueue.test_emptyN)r6r7r8r�r�r�rrrrr��s
r�c@s$eZdZedd��Zedd��ZdS)�	BaseMixincCstjjj�tjj�f|_dS)N)r�process�	_danglingrr�dangling)rirrrr��s
zBaseMixin.setUpClasscCsrtj�ttjj�t|jd�}|r8td|tj	d�d}tt
j�t|jd�}|rjtd|tj	d�d}dS)Nrz!Warning -- Dangling processes: %s)�filer#zWarning -- Dangling threads: %s)r�
gc_collectr�rr�r�r�r[r�r�r)rir:r<rrrr��s

zBaseMixin.tearDownClassN)r6r7r8r�r�r�rrrr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)rAr:N)r6r7r8rRrrbr��staticmethodrUrpr�r�rr
rr"r(r*r1rnrjrr�r�r�rrrrrA�s(















rAcs
eZdZdZejZeejd��Z	eejd��Z
eejd��Zeejd��Zeejd��Z
eejd��Zeejd��Zeejd	��Zeejd
��Zeejd��Zeejd��Zeejd
��Zeejd��Zeejd��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�)rir2r3rrrr�szManagerMixin.Poolcst�j�tj�|_dS)N)r�r�rr-r;)ri)r�rrr�s
zManagerMixin.setUpClasscs�tj�}d}xVttj��dkrbtj|�|d9}tj�|}|dkrtdtj�|ftjd�PqWt	j
�|jj�dkr�td�t|jj
��|jj�|jj�d|_t�j�dS)	Ng{�G�z�?r#rjg@zPWarning -- multiprocessing.Manager still has %s active children after %s seconds)r�rz@Warning -- Shared objects which still exist at manager shutdown:)r1Z	monotonicr\rrpr{r[r�r�r�r�r;Z_number_of_objectsZ_debug_infor\rvr�r�)riZ
start_timer4r<)r�rrr�s&



zManagerMixin.tearDownClass)r6r7r8rRrrbr>�operator�
attrgetterrr
rr"r(r*r1rnrjrr�rrr�r�r�r�r�r�r9rr)r�r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)r6r7r8rRrZdummyrbr�r�rUrpr�r�rr
rr"r(r*r1rnrjrr�rrrrr�@s$r�c
sH|d}t�}dddh}x�|j�D]�\}}t|t�s6q"t|t�r�|tkrJq"t|j�|ksbt|j��x�|jD]\}d|j	�|dd�}||j	�d}	Gdd	�d	||	t
j�}
||
_|
_
||
_|
||<qjWq"t|t
j�r"Gd
d	�d	|t�}
||
_|
_
||
_|
||<q"Wddg�dg����fdd�}��fd
d�}||d<||d<dS)Nr6r:r<r;ZWithr#�Mixinc@seZdZdS)z*install_tests_in_module_dict.<locals>.TempN)r6r7r8rrrr�Tempgsr�c@seZdZdS)z*install_tests_in_module_dict.<locals>.TempN)r6r7r8rrrrr�mscs�tjt�tjj�tjjj��d<tjj��d<tjdd��d<ytj	�dd�Wn"t
k
rvtj�d��YnXt
jjd�r�ytj�}Wntk
r�tjd��YnXt�tj�tj�jt�dS)	Nrr#T)Z
allow_none)r�z start method not supported�linuxz1OSError raises on RLock creation, see issue 3111!)rr�r�r��_cleanupr�rrr�r�r(r)r*r�rBr�r"rsr+rZget_temp_dirrrr)r )r��old_start_method�start_methodrr�setUpModulevs$

z1install_tests_in_module_dict.<locals>.setUpModulecs�d}tj�tj�ddd�ttjj�t�d�}|rPd}td|tj	d�d}tt
j�t�d�}|r�d}td|tj	d�d}|r�tjd	�tjj
�tj�dS)
NFrT)r�z!Warning -- Dangling processes: %s)r�r#zWarning -- Dangling threads: %sg�?)rr�rr�r�r�r�r[r�r�rr1r{r�)Z
need_sleepr:r<)r�r�rr�tearDownModule�s&



z4install_tests_in_module_dict.<locals>.tearDownModuler�r�)�globalsr�r
rq�
issubclassr9r�rHrM�
capitalizer)�TestCaser6r8r7r)
Zremote_globsr�r7Zlocal_globsZ	ALL_TYPESrg�baseZtype_Znewnamer�r�r�r�r)r�r�r�r�install_tests_in_module_dictXs8


r�)rrr)rrr)r�)r�rR)�r)rr�r�r1r�rr�r%r�rtr�r�r�r�rrNr�r�r)rZtest.support.script_helper�
import_modulerrrHrZmultiprocessing.dummyZmultiprocessing.heapZmultiprocessing.managersrDZmultiprocessing.queuesrrZHAVE_SEND_HANDLEr��ImportErrorZmultiprocessing.sharedctypesrrrFr�rrrrr�r=r�r�r�r�Z
HAVE_GETVALUErBr#rrr&r�r�Zctypesrr r!rr+r,r9rJrKrQrbr�r�r�r�r�rr%r,rGrKrXrYrhrir�r�r�r�r�r�r�r�r(r�r�r�r<r>r?rGrNrOrrPrSrTrV�registerrZrrcrdrerfrjrgrrrzrxr�r�r�rEr�r�r�r�r�r�r�r
rr!r$r+r,r4r5r6r7r8r?rDrTrWrerjrqrsryr�r�r�r�r�rAr�r�r�rrrr�<module>s^










GN
6t39ES

	J(19
0/0R	E6x+C"!4 "BCF
I(<