Your IP : 216.73.216.85


Current Path : /opt/alt/python35/lib64/python3.5/test/__pycache__/
Upload File :
Current File : //opt/alt/python35/lib64/python3.5/test/__pycache__/_test_multiprocessing.cpython-35.pyc



��Yf��-@sJ
ddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddl
Z
ddlZddlZddlZddlZddlZddlZejjd�Zejjd�ddlZddlZddlZddlZddlZddlZddlmZyddlm Z e j!Z"Wne#k
r�dZ"YnXy ddl$m%Z%m&Z&dZ'Wne#k
r�dZ'YnXyddl(Z(Wne#k
r�dZ(YnXd	d
�Z)ej*Z+dZ,dZ-e-r>dd
df\Z.Z/Z0ndddf\Z.Z/Z0e1edd�Z2ej3dkZ4ddlm5Z5dd�Z6yej7d�Z8WndZ8YnXddgZ9y ddl:m;Z;m<Z<m=Z=Wn"e#k
re>Z;dZ<Z=YnXdd�Z?Gdd�de>�Z@Gdd�de>�ZAdd �ZBGd!d"�d"�ZCGd#d$�d$eA�ZDGd%d&�d&ejE�ZFGd'd(�d(eA�ZGd)d*�ZHd+d,�ZIGd-d.�d.eA�ZJGd/d0�d0eA�ZKGd1d2�d2eA�ZLGd3d4�d4eA�ZMGd5d6�d6eA�ZNGd7d8�d8e>�ZOd9d:�ZPGd;d<�d<e>�ZQGd=d>�d>e>�ZRGd?d@�d@eA�ZSGdAdB�dBeA�ZTGdCdD�dDeA�ZUGdEdF�dFeA�ZVdGdHdI�ZWdJdK�ZXdLdM�ZYGdNdO�dOe>�ZZGdPdQ�dQe[�Z\dRdS�Z]GdTdU�dUeA�Z^dVdW�Z_dXdY�Z`GdZd[�d[eA�ZaGd\d]�d]eA�Zbdd^lmcZcmdZdmeZeGd_d`�d`e>�Zfdadb�ZgGdcdd�dded�ZhGdedf�dfec�Zieijjdgdhef�eijjdidhefdjdkdlf�eijjdbdhegdmeh�Gdndo�doeA�Zkejl�Zmdpdq�ZnGdrds�dsec�Zoeojjdqdhen�Gdtdu�duec�Zpepjjdq�dvZqGdwdx�dxeA�ZrGdydz�dzeA�Zse)d{�ZtGd|d}�d}eA�ZuGd~d�deA�ZvGd�d��d�eA�ZwGd�d��d�eA�Zxejye"d��Gd�d��d�eA��ZzGd�d��d�eA�Z{Gd�d��d�e;�Z|Gd�d��d�eA�Z}Gd�d��d�eA�Z~Gd�d��d�ej�Z�Gd�d��d�eA�Z�Gd�d��d�eA�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�ej3dkd��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�d�d��Z�dS)��N�_multiprocessingzmultiprocessing.synchronize)�util)�	reductionF)�Value�copyTcCs
|jd�S)N�latin)�encode)�s�r
�?/opt/alt/python35/lib64/python3.5/test/_test_multiprocessing.pyr@srg�������?g=
ףp=�?gffffff�?gffffff�?�HAVE_BROKEN_SEM_GETVALUE�win32)�waitcCs.|dk	r|dkrd}t|g|�S)Ng)r)Zhandle�timeoutr
r
r�wait_for_handle[sr�SC_OPEN_MAX��__main__z$test.test_multiprocessing_forkserver)�	Structure�c_int�c_doublecCskd}ytjd�}Wnttfk
r7dSYnX|dksP||krTdStjd|��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_minZnsemsr
r
r�check_enough_semaphoresss		r c@s(eZdZdd�Zdd�ZdS)�
TimingWrappercCs||_d|_dS)N)�func�elapsed)�selfr"r
r
r�__init__�s	zTimingWrapper.__init__cOs;tj�}z|j||�SWdtj�||_XdS)N)�timer"r#)r$�args�kwds�tr
r
r�__call__�szTimingWrapper.__call__N)�__name__�
__module__�__qualname__r%r*r
r
r
rr!�sr!c@s@eZdZdZdd�Zdd�Zdd	�ZeZd
S)�BaseTestCase�	processes�manager�threadscCstr|j||d�dS)Nr)�
CHECK_TIMINGS�assertAlmostEqual)r$�a�br
r
r�assertTimingAlmostEqual�sz$BaseTestCase.assertTimingAlmostEqualcGs9y||�}Wntk
r$YnX|j||�SdS)N)�NotImplementedError�assertEqual)r$�valuer"r'�resr
r
r�assertReturnsIfImplemented�s

z'BaseTestCase.assertReturnsIfImplementedcGstd��dS)Nz#shouldn't try to pickle a test case)r7)r$r'r
r
r�
__reduce__�szBaseTestCase.__reduce__N)r/r0r1)r+r,r-�
ALLOWED_TYPESr6r;r<�
__reduce_ex__r
r
r
rr.�s

r.cCsmy|j�SWnXtk
rhy|jSWn8tk
rcy|jSWntk
r^t�YnXYnXYnXdS)N)�	get_valuerZ_Semaphore__valueZ_valuer7)r$r
r
rr?�s


r?c@seZdZdd�ZdS)�
DummyCallablecCs&t|t�st�|jd�dS)N�)�
isinstancer@�AssertionError�put)r$�q�cr
r
rr*�szDummyCallable.__call__N)r+r,r-r*r
r
r
rr@�sr@c@s�eZdZdZdd�Zdd�Zedd��Zd	d
�Zedd��Z	d
d�Z
dd�Zdd�Zedd��Z
dd�Zedd��Zdd�Zdd�ZdS)�_TestProcessr/r1cCs�|jdkr(|jdj|j��|j�}|j}|j|j��|j|j�|j|t	�|jt
|�dk�|j|jt
j��|j|jd�dS)Nr1ztest not appropriate for {}r)�TYPE�skipTest�format�current_process�authkey�
assertTrue�is_alive�daemon�assertIsInstance�bytes�lenr8Zidentr�getpid�exitcode)r$�currentrLr
r
r�test_current�s	z_TestProcess.test_currentcCs�|jdkr(|jdj|j��|jd|j�}|j|j|j�j�|jd|jdd�}|j|j�|jd|jdd�}|j	|j�dS)Nr1ztest not appropriate for {}�targetrOTF)
rHrIrJ�Process�_testr8rOrKrM�assertFalse)r$Zproc0Zproc1Zproc2r
r
r�test_daemon_argument�sz!_TestProcess.test_daemon_argumentcOso|j�}|j|�|j|�|j|j�|jdkrk|jt|j��|j|j�dS)Nr1)rKrD�namerHrQrL�pid)�clsrEr'r(rUr
r
rrY�s

z_TestProcess._testc	Cs:|jd�}|j�}|ddf}ddddi}d}|jd|jd	|d
|d|�}d|_|j�}|jd
kr�|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
kr�|j|j�|j�|j|j�|j�|j�|j|jd�|j|j	�d�|j
||j��dS)Nr��hello�ZbyegR���Q@ZSomeProcessrWr'�kwargsr\Tr1Fr)�Queue�EventrXrYrOrKrHr8rLrN�assertNotIn�active_childrenrM�type�listrT�start�assertIn�getr\r]�join)r$rE�er'rbr\�prUr
r
r�test_process�s<		
 
z_TestProcess.test_processcCstjd�dS)N�d)r&�sleep)r^r
r
r�_test_terminatesz_TestProcess._test_terminatecs|jdkr(|jdj|j��|jd|j��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|�}z$tjd�|j|�d�Wdtjd�tjtj|�Xn|j|�d�|j|jd�|j�j�d�|j�|j
���j
�dS)Nr1ztest not appropriate for {}rWTrgr�alarmcstd���dS)Nzjoin took too long: %s)�RuntimeError)r')rnr
r�handler9sz,_TestProcess.test_terminate.<locals>.handler�
Fr)rHrIrJrXrrrOrir8rNrjrfrTr!rlr6r#r&rq�	terminate�hasattr�signal�SIGALRMrsre)r$rlruZold_handlerr
)rnr�test_terminates<	




z_TestProcess.test_terminatecCs[ytj�}Wntk
r*d}YnX|jt|�tk�|j|dk�dS)Nr)�multiprocessing�	cpu_countr7rMrg�int)r$Zcpusr
r
r�test_cpu_countOs
z_TestProcess.test_cpu_countcCs�|jt|j��t�|jdtjdtf�}|j||j��d|_	|j
�|j||j��|j�|j||j��dS)NrWr'T)
r8rgrfrhrXr&rq�DELTArerOrirjrl)r$rnr
r
r�test_active_childrenWs	

z!_TestProcess.test_active_childrencCsv|j|�t|�dkrrxPtd�D]B}|jd|jd|||gf�}|j�|j�q,WdS)Nr_rWr')�sendrR�rangerX�_test_recursionrirl)r^�wconn�id�irnr
r
rr�ds
	
z_TestProcess._test_recursioncCs�|jdd�\}}|j|g�tjt�g}x#|j�r`|j|j��q>Wgdgddgddgdgddgddgg}|j||�dS)N�duplexFrr)	�Piper�r&rqr��poll�append�recvr8)r$�rconnr��result�expectedr
r
r�test_recursionos
			z_TestProcess.test_recursioncCs|jd�dS)Ng$@)r)r^�eventr
r
r�_test_sentinel�sz_TestProcess._test_sentinelcCs�|jdkr(|jdj|j��|j�}|jd|jd|f�}|jt��|jWdQRX|j	�|j
|j�|j}|j|t
�|jt|dd��|j�|j�|jt|dd��dS)Nr1ztest not appropriate for {}rWr'rgr)rHrIrJrdrXr��assertRaisesr�sentinelri�
addCleanuprlrPr~rZr�setrM)r$r�rnr�r
r
r�
test_sentinel�s
	

z_TestProcess.test_sentinelcCs�t�}tj|�}|j�}|jd|d||f�}~|j�|j�|j|�d�|j|j	�d�dS)NrWr'rA)
r@�weakref�refrcrXrirl�assertIsr8rk)r$rF�wrrErnr
r
r�test_lose_target_ref�s	

z!_TestProcess.test_lose_target_refN)r/r1)r+r,r-r=rVr[�classmethodrYrorrr{rr�r�r�r�r�r�r
r
r
rrG�s
'4
rGc@s@eZdZdd�Zdd�Zdd�Zdd�Zd	S)
�_UpperCasercCs,tjj|�tj�\|_|_dS)N)r|rXr%r��
child_conn�parent_conn)r$r
r
rr%�sz_UpperCaser.__init__cCsT|jj�x3t|jjd�D]}|jj|j��q#W|jj�dS)N)r��close�iterr�r�r��upper)r$r	r
r
r�run�s
z_UpperCaser.runcCs5t|�tkst�|jj|�|jj�S)N)rg�strrCr�r�r�)r$r	r
r
r�submit�sz_UpperCaser.submitcCs.|jjd�|jj�|jj�dS)N)r�r�r�r�)r$r
r
r�stop�s
z_UpperCaser.stopN)r+r,r-r%r�r�r�r
r
r
rr��sr�c@s^eZdZd
Zdd�Zdd�Zedd��Zedd	��Zd
d�Z	dS)�_TestSubclassingProcessr/cCsft�}d|_|j�|j|jd�d�|j|jd�d�|j�|j�dS)NTr`ZHELLOZworldZWORLD)r�rOrir8r�r�rl)r$Z
uppercaserr
r
r�test_subclassing�s		

z(_TestSubclassingProcess.test_subclassingc
Cs�|jdkr(|jdj|j��tjj}|jtjj|�|jd|j	d|f�}|j
�|j�t|d��C}|j
�}|jd|�|jd|�|jd|�WdQRXdS)	Nr1ztest not appropriate for {}rWr'�r�ZeroDivisionErrorztest_multiprocessing.pyz1/0 # MARKER)rHrIrJ�test�support�TESTFNr��unlinkrX�_test_stderr_flushrirl�open�readrj)r$�testfn�proc�f�errr
r
r�test_stderr_flush�s

z)_TestSubclassingProcess.test_stderr_flushcCsGtj|tjtjBtjB�}t|ddd�t_dddS)N�w�closefdFrr)rr��O_WRONLY�O_CREAT�O_EXCL�sys�stderr)r^r��fdr
r
rr��s#z*_TestSubclassingProcess._test_stderr_flushcCsLtj|tjtjBtjB�}t|ddd�t_tj|�dS)Nr�r�F)rr�r�r�r�r�r��exit)r^�reasonr�r�r
r
r�_test_sys_exit�s#z&_TestSubclassingProcess._test_sys_exitcCsr|jdkr(|jdj|j��tjj}|jtjj|�x�dddgdfD]�}|jd|j	d||f�}d	|_
|j�|jd
�|j
|jd�t|d��}|j�}WdQRX|j
|j�t|��tj|�q`Wx_dD]W}|jdtjd|f�}d	|_
|j�|jd
�|j
|j|�qWdS)Nr1ztest not appropriate for {}rr_�zignore thisrWr'TrAr�F�)TFr�)rHrIrJr�r�r�r�r�rXr�rOrirlr8rTr�r��rstripr�rr�r�)r$r�r�rnr�Zcontentr
r
r�
test_sys_exit�s,
!	


	

z%_TestSubclassingProcess.test_sys_exitN)r/)
r+r,r-r=r�r�r�r�r�r�r
r
r
rr��s	r�cCs-t|d�r|j�S|j�dkSdS)N�emptyr)rxr��qsize)rEr
r
r�queue_emptys
r�cCs-t|d�r|j�S|j�|kSdS)N�full)rxr�r�)rE�maxsizer
r
r�
queue_fulls
r�c@s�eZdZedd��Zdd�Zedd��Zdd�Zed	d
��Zdd�Z	d
d�Z
edd��Zdd�Zdd�Z
dd�Zdd�ZdS)�
_TestQueuecCs9|j�xtd�D]}|j�qW|j�dS)N�)rr�rkr�)r^�queue�child_can_start�parent_can_continuer�r
r
r�	_test_puts
z_TestQueue._test_putcCs�d}|jd|�}|j�}|j�}|jd|jd|||f�}d|_|j�|jt|�d�|jt||�d�|j	d�|j	dd�|j	d	dd�|j	d
d�|j	ddd�|j
d�tjt
�|jt|�d�|jt||�d�t|j	�}t|j
�}|jtj|dd�|j|jd
�|jtj|ddd�|j|jd
�|jtj|d�|j|jd
�|jtj|ddt�|j|jt�|jtj|ddt�|j|jd
�|jtj|dddt�|j|jt�|j�|j�|jt|�d�|jt||�d�|j�dS)Nr�r�rWr'TFrr_r��rA�rr)rcrdrXr�rOrir8r�r�rD�
put_nowaitr&rqr�r!r��pyqueueZFullr6r#�TIMEOUT1�TIMEOUT2�TIMEOUT3r�rrl)r$ZMAXSIZEr�r�r�r�rDr�r
r
r�test_put"sN			





z_TestQueue.test_putcCsL|j�|jd�|jd�|jd�|jd�|j�dS)Nr_r�r�rA)rrDr�)r^r�r�r�r
r
r�	_test_get\s




z_TestQueue._test_getcCsP|j�}|j�}|j�}|jd|jd|||f�}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|dt�|j|jt�|j�dS)NrWr'TFr_r�rrr�rAr)rcrdrXr�rOrir8r�r�rr&rqr�rk�
get_nowaitr!r�r��Emptyr6r#r�r�r�rl)r$r�r�r�r�rkr�r
r
r�test_getfsB			



z_TestQueue.test_getcCs+x$tdd�D]}|j|�qWdS)Nrv�)r�rD)r^r�r�r
r
r�
_test_fork�sz_TestQueue._test_forkcCs�|j�}x!td�D]}|j|�qWtjt�|jd|jd|f�}d|_|j	�x*td�D]}|j
|j�|�q{W|jt
j|jd�|j�dS)NrvrWr'Tr�F)rcr�rDr&rqr�rXr�rOrir8rkr�r�r�rl)r$r�r�rnr
r
r�	test_fork�s
	
z_TestQueue.test_forkcCs�|j�}y|j|j�d�Wntk
rG|jd�YnX|jd�|j|j�d�|jd�|j|j�d�|j�|j|j�d�|j�|j|j�d�dS)Nrzqsize method not implementedrrAr_)rcr8r�r7rIrDrk)r$rEr
r
r�
test_qsize�s




z_TestQueue.test_qsizecCs8x1t|jd�D]}tjt�|j�qWdS)N)r�rkr&rqr�Z	task_done)r^rE�objr
r
r�_test_task_done�s
z_TestQueue._test_task_donecs��j����fdd�td�D�}x!|D]}d|_|j�q5Wx!td�D]}�j|�q_W�j�x|D]}�jd�q�Wx|D]}|j�q�WdS)Ncs.g|]$}�jd�jd�f��qS)rWr')rXr�)�.0r�)r�r$r
r�
<listcomp>�s	z-_TestQueue.test_task_done.<locals>.<listcomp>r�Trv)�
JoinableQueuer�rOrirDrl)r$Zworkersrnr�r
)r�r$r�test_task_done�s
	


z_TestQueue.test_task_donec Cs�tjj���d}t|dd��}|jd�WdQRXtjjtj���8yt|�Wn"t	j
k
r�|jd�YnXWdQRXWdQRXdS)NZimported_by_an_imported_modulez.pyr�z�if 1:
                    import multiprocessing

                    q = multiprocessing.Queue()
                    q.put('knock knock')
                    q.get(timeout=3)
                    q.close()
                    del q
                z?Probable regression on import lock contention; see Issue #22853)r�r�Ztemp_cwdr��writeZ
DirsOnSysPathr�getcwd�
__import__r�r��fail)r$Zmodule_namer�r
r
r�test_no_import_lock_contention�sz)_TestQueue.test_no_import_lock_contentioncCsXtj�}tj�}|jtj|jdd�tj�|}|j|d�dS)NTg�������?g�(\���?)r|rcr&r�r�r�rk�assertGreaterEqual)r$rEri�deltar
r
r�test_timeout�s
z_TestQueue.test_timeoutcCs�|jdkr(|jdj|j��Gdd�dt�}tjj��G|j�}|j|��|jd�|j	|j
dd��WdQRXdS)Nr/ztest not appropriate for {}c@seZdZdd�ZdS)zF_TestQueue.test_queue_feeder_donot_stop_onexc.<locals>.NotSerializablecSs
t�dS)N)r)r$r
r
rr<szQ_TestQueue.test_queue_feeder_donot_stop_onexc.<locals>.NotSerializable.__reduce__N)r+r,r-r<r
r
r
r�NotSerializable
sr�Trg�������?)rHrIrJ�objectr�r��captured_stderrrcrDrMrk)r$r�rEr
r
r�"test_queue_feeder_donot_stop_onexcs
z-_TestQueue.test_queue_feeder_donot_stop_onexcN)r+r,r-r�r�r�r�r�r�r�r�r�r�r�r�r�r
r
r
rr�s:
4	r�c@s4eZdZdd�Zdd�Zdd�ZdS)�	_TestLockcCsq|j�}|j|j�d�|j|jd�d�|j|j�d�|jttjf|j�dS)NTF)�Lockr8�acquire�releaser�r�	threadingZThreadError)r$�lockr
r
r�	test_locks
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)�RLockr8r�r�r�rCrt)r$r�r
r
r�
test_rlock sz_TestLock.test_rlockc	Cs|j��WdQRXdS)N)r�)r$r
r
r�test_lock_context*s
z_TestLock.test_lock_contextN)r+r,r-r�r�r�r
r
r
rr�s
r�c@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)Nr_TrrF)r;r?r8r�r�)r$�semr
r
r�_test_semaphore1sz_TestSemaphore._test_semaphorecCsr|jd�}|j|�|j|j�d�|jdt|�|j|j�d�|jdt|�dS)Nr_r�r�)�	Semaphorerr8r�r;r?)r$rr
r
r�test_semaphore>s
z_TestSemaphore.test_semaphorecCs |jd�}|j|�dS)Nr_)�BoundedSemaphorer)r$rr
r
r�test_bounded_semaphoreFsz%_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|dt�d�|j|jt�dS)Nr/ztest not appropriate for {}rFgTr)rHrIrJrr!r�r8r6r#r�r�r�)r$rr�r
r
rr�Nsz_TestSemaphore.test_timeoutN)r+r,r-rrrr�r
r
r
rr�/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)�_TestConditionNcCs9|j�|j�|j|�|j�|j�dS)N)r�r�r)r^�cond�sleeping�wokenrr
r
rr�gs




z_TestCondition.fcCsq|jdkrmyI|jj�|jj�}|j|d�|j|jj�d�Wntk
rlYnXdS)Nr/r)rHZ_sleeping_countr?Z_woken_countr8Z_wait_semaphorer7)r$rZsleepersr
r
r�check_invariantos
z_TestCondition.check_invariantcCsc|j�}|jd�}|jd�}|jd|jd|||f�}d|_|j�tjd|jd|||f�}d|_|j�|j�|j�t	j
t�|jdt
|�|j�|j�|j�t	j
t�|jdt
|�|j�|j�|j�t	j
t�|jdt
|�|j|�|j�dS)NrrWr'Trr_)�	ConditionrrXr�rOrir��Threadr�r&rqr�r;r?�notifyr�r
rl)r$rrr	rnr
r
r�test_notifyzs2$	
$	












z_TestCondition.test_notifycCsp|j�}|jd�}|jd�}x�td�D]z}|jd|jd|||tf�}d|_|j�tj	d|jd|||tf�}d|_|j�q7Wxtd�D]}|j
�q�Wxtd�D]}|j
�q�W|jdt|�|j
|�x�td�D]t}|jd|jd|||f�}d|_|j�tj	d|jd|||f�}d|_|j�q$Wxtd�D]}|j
�q�Wtjt�|jdt|�|j
�|j�|j�xNtd�D]@}yt|�dkr$PWntk
r:PYnXtjt�qW|jdt|�|j
|�dS)Nrr�rWr'Tr�rv)rrr�rXr�r�rOrir�rr�r;r?r
r&rqr�Z
notify_allr�r7)r$rrr	r�rnr)r
r
r�test_notify_all�sR	
	
$	
$	




z_TestCondition.test_notify_allcCsb|j�}t|j�}|j�|t�}|j�|j|d�|j|jt�dS)NF)	rr!rr�r�r�r8r6r#)r$rrr:r
r
rr��s

z_TestCondition.test_timeoutcsc|�Vd�_|j�|j�fdd��}|sK�jdkrXtjd�WdQRXdS)Nrcs
�jdkS)Nr�)r9r
)�stater
r�<lambda>�sz0_TestCondition._test_waitfor_f.<locals>.<lambda>r�r)r9r
�wait_forr�r�)r^rrr�r
)rr�_test_waitfor_f�s	
z_TestCondition._test_waitfor_fzneeds sharedctypescs|j�}|jdd��|jd|jd|�f�}d|_|j�|�@|j�fdd��}|j|�|j�j	d�WdQRXxHt
d	�D]:}tjd
�|��j	d7_	|j
�WdQRXq�W|jd�|j|j��|j|jd�dS)
Nr�rrWr'Tcs
�jdkS)Nr)r9r
)rr
rrsz-_TestCondition.test_waitfor.<locals>.<lambda>rr�g{�G�z�?rAr)rrrXrrOrirrMr8r9r�r&rqr
rlrZrNrT)r$rrnr�r�r
)rr�test_waitfor�s"!	



z_TestCondition.test_waitforcs�|j�|�|d}tj�}|j�fdd�d|�}tj�|}|r�|d|koz|dknr�d|_WdQRXdS)Ng�������?cs
�jdkS)Nr�)r9r
)rr
rrsz8_TestCondition._test_waitfor_timeout_f.<locals>.<lambda>rg333333�?g$@T)r�r&rr9)r^rr�successrr�Zdtr�r
)rr�_test_waitfor_timeout_fs
!+z&_TestCondition._test_waitfor_timeout_fcCs�|j�}|jdd�}|jdd�}|jd�}|jd|jd||||f�}d|_|j�|j|jdd��xHt	d	�D]:}t
jd
�|�|jd7_|j
�WdQRXq�W|jd�|j|j�dS)
Nr�rFrWr'Trrvr�g{�G�z�?rrA)rrrrXrrOrirMr�r�r&rqr9r
rl)r$rrrrrnr�r
r
r�test_waitfor_timeouts 	


z#_TestCondition.test_waitfor_timeoutc
CsH|�|j�WdQRXtjd�|dk	rDtj|tj�dS)Nr)r
r&rqr�killry�SIGINT)r^rFr]r
r
r�_test_wait_result5s

z _TestCondition._test_wait_resultc
Cs�t|t�r-tjdkr-tj�}nd}|j�}|��|j|jd��|j|jd��|j	d|j
d||f�}|j�|j|jd��|dk	r�|j
t|jd�|j�WdQRXdS)Nr
rg�������?rWr'rv)rB�ProcessesMixinr��platformrrSrrZrrXrrirMr��KeyboardInterruptrl)r$r]rFrnr
r
r�test_wait_result=s!
z_TestCondition.test_wait_result)r+r,r-r�r�r
rrr�rr�
skipUnless�HAS_SHAREDCTYPESrrrrrr
r
r
rres+A		rc@s.eZdZedd��Zdd�ZdS)�
_TestEventcCstjt�|j�dS)N)r&rqr�r�)r^r�r
r
r�_test_eventTs
z_TestEvent._test_eventcCsD|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
d|jd|f�}d|_|j
�|j|�d�dS)NFgTrWr')rdr!rr8�is_setr6r#r�r��clearrXr"rOri)r$r�rrnr
r
r�
test_eventYs$

	
z_TestEvent.test_eventN)r+r,r-r�r"r%r
r
r
rr!Rsr!c@sLeZdZdd�Zdd�Zdd�Zdd�Zd	d
�ZdS)�
_DummyListcCsKtjjtjd��}tj�}|j||f�d|jd<dS)Nr�r)r|�heap�
BufferWrapper�structZcalcsizer��__setstate__�
_lengthbuf)r$�wrapperr�r
r
rr%�sz_DummyList.__init__cCs1|\|_|_|jj�jd�|_dS)Nr�)�_wrapper�_lockZcreate_memoryview�castr+)r$rr
r
rr*�sz_DummyList.__setstate__cCs|j|jfS)N)r-r.)r$r
r
r�__getstate__�sz_DummyList.__getstate__cCs&|j�|jdd7<WdQRXdS)Nrr)r.r+)r$�_r
r
rr��s
z_DummyList.appendc	Cs |j�|jdSWdQRXdS)Nr)r.r+)r$r
r
r�__len__�s
z_DummyList.__len__N)r+r,r-r%r*r0r�r2r
r
r
rr&�s
r&cCstjd�dS)Ng{�G�z�?)r&rqr
r
r
r�_wait�sr3c@saeZdZdZddd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dS)�Bunchz
    A bunch of threads.
    Fc
Cs�||_||_||_|j�|_|j�|_|j�|_|s[|jj�g}xIt	|�D];}|j
d|j�}d|_|j
�|j|�qnWdd�}	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.
        rWTcSsx|D]}|j�qWdS)N)rl)r1rnr
r
r�finalize�s
z Bunch.__init__.<locals>.finalizeN)r�r'�n�	DummyList�started�finishedrd�	_can_exitr�r�rX�taskrOrir�r�r5�
_finalizer)
r$�	namespacer�r'r6Zwait_before_exitr1r�rnr5r
r
rr%�s 			
	
zBunch.__init__cCsmtj�}|jj|�z|j|j�Wd|jj|�|jjd�|jj	�sht
�XdS)N�)rrSr8r�r�r'r9r:rr#rC)r$r]r
r
rr;�sz
Bunch.taskcCs*x#t|j�|jkr%t�qWdS)N)rRr8r6r3)r$r
r
r�wait_for_started�szBunch.wait_for_startedcCs*x#t|j�|jkr%t�qWdS)N)rRr9r6r3)r$r
r
r�wait_for_finished�szBunch.wait_for_finishedcCs|jj�dS)N)r:r�)r$r
r
r�	do_finish�szBunch.do_finishcCs|j�dS)N)r<)r$r
r
rr��szBunch.closeN)
r+r,r-�__doc__r%r;r?r@rAr�r
r
r
rr4�s
r4c@s(eZdZdd�Zdd�ZdS)�
AppendTruecCs
||_dS)N)r�)r$r�r
r
rr%�szAppendTrue.__init__cCs|jjd�dS)NT)r�r�)r$r
r
rr*�szAppendTrue.__call__N)r+r,r-r%r*r
r
r
rrC�srCc@s{eZdZdZdZdZdd�Zdd�Zdd	�Zd
d�Z	e
dd
��Zddd�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)6�_TestBarrierz$
    Tests for Barrier objects.
    rAg>@cCs"|j|jd|j�|_dS)Nr)�Barrier�N�defaultTimeout�barrier)r$r
r
r�setUp�sz_TestBarrier.setUpcCs|jj�d|_dS)N)rH�abort)r$r
r
r�tearDown�s
z_TestBarrier.tearDowncCs:|jdkrgS|jdkr/|jj�St�SdS)Nr1r0)rHr0rhr&)r$r
r
rr7�s

z_TestBarrier.DummyListc
CsFt||||jd�}z||�|j�Wd|j�XdS)Nr)r4rFr@r�)r$r�r'r5r
r
r�run_threads�s

z_TestBarrier.run_threadscCs�|j}||jkst�x�t|�D]�}|djd�t|d�||ksbt�|j�|djd�t|d�|d|ks�t�|j�q+Wy|jdks�t�Wntk
r�YnX|j	s�t�dS)NrTr)
�partiesrFrCr�r�rRr�	n_waitingr7�broken)r^rH�resultsr6�mr�r
r
r�	multipass�s	 
$
z_TestBarrier.multipassrcCs;|j�|j�g}|j|j|j||f�dS)z;
        Test that a barrier is passed in lockstep
        N)r7rLrRrH)r$�passesrPr
r
r�test_barriersz_TestBarrier.test_barriercCs
|jd�S)zC
        Test that a barrier works for 10 consecutive runs
        rv)rT)r$r
r
r�test_barrier_10sz_TestBarrier.test_barrier_10cCs|j�}|j|�dS)N)rrD)r^rHr�r:r
r
r�_test_wait_return_fsz _TestBarrier._test_wait_return_fcsg|j��|j|j|j�f��fdd�t|j�D�}|j|jd�d�dS)z9
        test the return value from barrier.wait
        csg|]}�j��qSr
)rk)r�r�)r�r
rr�'s	z1_TestBarrier.test_wait_return.<locals>.<listcomp>rrN)rcrLrVrHr�rFr8�count)r$rPr
)r�r�test_wait_return!s"z_TestBarrier.test_wait_returncCs&|j�t|�dkr"t�dS)Nr)rrRrt)r^rHrPr
r
r�_test_action_f*s
z_TestBarrier._test_action_fcCs]|j�}|j|jdt|��}|j|j||f�|jt|�d�dS)z,
        Test the 'action' callback
        �actionrN)r7rErFrCrLrYr8rR)r$rPrHr
r
r�test_action0sz_TestBarrier.test_actioncCs�y@|j�}||jdkr(t�|j�|jd�Wn=tjk
rd|jd�Yntk
r|j�YnXdS)Nr_T)rrFrtr�r��BrokenBarrierErrorrJ)r^rH�results1�results2r�r
r
r�
_test_abort_f9s

z_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
        rrN)	r7rLr_rHr8rRrFrMrO)r$r]r^r
r
r�
test_abortFsz_TestBarrier.test_abortcCs�|j�}||jdkrVx'|j|jdkrHtjd�q"W|j�n@y|j�|jd�Wn"tjk
r�|jd�YnX|j�|jd�dS)Nr_rg����MbP?T)	rrFrNr&rq�resetr�r�r\)r^rHr]r^�results3r�r
r
r�
_test_reset_fRs


z_TestBarrier._test_reset_fcCs�|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
        rrN)r7rLrcrHr8rRrF)r$r]r^rbr
r
r�
test_resetdsz_TestBarrier.test_resetcCs�y@|j�}||jdkr(t�|j�|jd�Wn=tjk
rd|jd�Yntk
r|j�YnX|j�|jdkr�|j�|j�|j�|jd�dS)Nr_T)rrFrtr�r�r\rJra)r^rH�barrier2r]r^rbr�r
r
r�_test_abort_and_reset_fqs




z$_TestBarrier._test_abort_and_reset_fcCs�|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.
        rrN)r7rErFrLrfrHr8rR)r$r]r^rbrer
r
r�test_abort_and_reset�sz!_TestBarrier.test_abort_and_resetcCsf|j�}||jdkr,tjd�y|jd�Wn"tjk
ra|jd�YnXdS)Nr_g�?g�?T)rrFr&rqr�r\r�)r^rHrPr�r
r
r�_test_timeout_f�s
z_TestBarrier._test_timeout_fcCsH|j�}|j|j|j|f�|jt|�|jj�dS)z$
        Test wait(timeout)
        N)r7rLrhrHr8rRrM)r$rPr
r
rr��sz_TestBarrier.test_timeoutcCsi|j|j�}||jdkr2tjd�y|j�Wn"tjk
rd|jd�YnXdS)Nr_g�?T)rrGrFr&rqr�r\r�)r^rHrPr�r
r
r�_test_default_timeout_f�s
z$_TestBarrier._test_default_timeout_fcCsZ|j|jdd�}|j�}|j|j||f�|jt|�|j�dS)z4
        Test the barrier's default timeout
        rg�?N)rErFr7rLrir8rRrM)r$rHrPr
r
r�test_default_timeout�sz!_TestBarrier.test_default_timeoutcCs'|jd�}|j�|j�dS)Nr)rEr)r$r5r
r
r�test_single_thread�s
z_TestBarrier.test_single_threadc
Cs@x9t|�D]+}|j�|�|j|�WdQRXq
WdS)N)r�rr�)r^rHrS�connr�r�r
r
r�_test_thousand_f�s
z_TestBarrier._test_thousand_fc	Cs�|jdkr(|jdj|j��d}|j�}|jd�\}}xKt|j�D]:}|jd|jd|j	|||f�}|j
�q_WxDt|�D]6}x-t|j�D]}|j|j�|�q�Wq�WdS)Nr0ztest not appropriate for {}i�FrWr')
rHrIrJr�r�r�rFrXrmrHrir8r�)r$rSr�rlr��jrnr�r
r
r�
test_thousand�sz_TestBarrier.test_thousandN)r+r,r-rBrFrGrIrKr7rLr�rRrTrUrVrXrYr[r_r`rcrdrfrgrhr�rirjrkrmror
r
r
rrD�s6		

	rDc@s�eZdZdZdddded�ed
�fgZdd�Zedd��Zddd�Z	dd�Z
dd�ZdS) �
_TestValuer/r���^�d�
@g@�h����rF�x�ycCsts|jd�dS)Nz%requires multiprocessing.sharedctypes)r rI)r$r
r
rrI�sz_TestValue.setUpcCs4x-t||j�D]\}}|d|_qWdS)Nr_)�zip�codes_valuesr9)r^�values�sv�cvr
r
rrY�sz_TestValue._testFcs�|r%�fdd��jD�}n�fdd��jD�}x7t|�j�D]#\}}�j|j|d�qTW�jd�jd|f�}d|_|j�|j�x7t|�j�D]#\}}�j|j|d�q�WdS)	Ncs+g|]!\}}}�j||��qSr
)�RawValue)r��coder9r1)r$r
rr��s	z)_TestValue.test_value.<locals>.<listcomp>cs+g|]!\}}}�j||��qSr
)r)r�r�r9r1)r$r
rr��s	rrWr'Tr_)	r{rzr8r9rXrYrOrirl)r$�rawr|r}r~r�r
)r$r�
test_value�s
	

z_TestValue.test_valuecCs|jdd�dS)Nr�T)r�)r$r
r
r�
test_rawvaluesz_TestValue.test_rawvaluec
CsK|jdd�}|j�}|j�}|jdddd�}|j�}|j�}|j�}|jddd|�}|j�}	|j�}
|j||	�|jdddd�}|jt|d��|jt|d��|jt|jdddd�|j	dd�}|jt|d��|jt|d��dS)Nr�rAr�F�get_lock�get_objZnavalue)
rr�r�r�r8rZrxr�rr)
r$Zval1�lock1�obj1Zval2�lock2�obj2r�Zval3�lock3�obj3�arr4�arr5r
r
r�test_getobj_getlocks$z_TestValue.test_getobj_getlockN)r/)r�rqrr��)rsrtr�����)rur�rw)r+r,r-r=rr{rIr�rYr�r�r�r
r
r
rrp�srpc@s�eZdZdZedd��Zejedkd�ddd��Z	ejedkd�d	d
��Z
ejedkd�dd��Zejedkd�d
d��ZdS)�
_TestArrayr/cCs:x3tdt|��D]}||||d7<qWdS)Nr)r�rR)r^�seqr�r
r
rr�%sz_TestArray.fNzrequires _ctypesFc
Cswddddddddd	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|�|jd|jd|f�}d|_|j	�|j
�|jt|dd��|�dS)Ni�iri�i5���i$i�i�i?r�r�r_r�rr�r�rWr'T)�RawArray�Arrayr8rRrh�arrayr�rXrOrirl)r$r�r��arrrnr
r
r�
test_array*s$06 
	

z_TestArray.test_arraycCs�d}x�td�D]�}|jd|�}|jt|�|�|jt|�dg|�td�|dd�<|jt|�ttd���~qWdS)Nrvr�r�r)r�r�r8rRrh)r$�sizer1r�r
r
r�test_array_from_sizeCs"z_TestArray.test_array_from_sizecCs|jdd�dS)Nr�T)r�)r$r
r
r�
test_rawarrayRsz_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�rvr�Fr�r�Znotalock)r�rhr�r�r�r�r8rZrxr�rr�)
r$Zarr1r�r�Zarr2r�r�r�Zarr3r�r�r�r�r
r
r�test_getobj_getlock_objVs&$$	z"_TestArray.test_getobj_getlock_obj)r/)
r+r,r-r=r�r�r�skipIfrr�r�r�r�r
r
r
rr�!s$$r�c@s:eZdZd	Zdd�Zdd�Zdd�ZdS)
�_TestContainersr0cCs[|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|�}|j|dd�dddddddd	d
dg
ddddddddddg
g�|j|g�}|jd�|j|dd�dddddddd	d
ddgg�dS)
NrvrAr_r�r�rrr�r�r��	r`)rhr�r8�extendr�)r$r4r5rsrmr�r
r
r�	test_listxs(&&#
8>&
I
z_TestContainers.test_listcCs�|j�}ttdd��}x|D]}t|�||<q(W|j|j�tdd�|D���|jt|j��|�|jt|j��dd�|D��|jt|j	��dd�|D��dS)N�A�Fcss!|]}|t|�fVqdS)N)�chr)r�r�r
r
r�	<genexpr>�sz,_TestContainers.test_dict.<locals>.<genexpr>cSsg|]}t|��qSr
)r�)r�r�r
r
rr��s	z-_TestContainers.test_dict.<locals>.<listcomp>cSs"g|]}|t|�f�qSr
)r�)r�r�r
r
rr��s	)
�dictrhr�r�r8r�sorted�keysr|�items)r$rs�indicesr�r
r
r�	test_dict�s
))z_TestContainers.test_dictcCs�|j�}d|_d|_d|_|j|j|jfd�|`|jt|�d�|jt|d��|jt|d��dS)N�Bob�BuilderZhiddenzNamespace(name='Bob')r\�job)r�r�)�	Namespacer\r�Z_hiddenr8r�rMrx)r$r6r
r
r�test_namespace�s			z_TestContainers.test_namespaceN)r0)r+r,r-r=r�r�r�r
r
r
rr�ts
r�gcCstj|�||S)N)r&rq)rxrr
r
r�sqr�s
r�cCs||S)Nr
)rxryr
r
r�mul�sr�cCs|S)Nr
)rxr
r
r�identity�sr�c@s.eZdZdZdd�Zdd�ZdS)�
CountedObjectrcCs|jd7_tj|�S)Nr)�n_instancesr��__new__)r^r
r
rr��szCountedObject.__new__cCst|�jd8_dS)Nr)rgr�)r$r
r
r�__del__�szCountedObject.__del__N)r+r,r-r�r�r�r
r
r
rr��sr�c@seZdZdS)�SayWhenErrorN)r+r,r-r
r
r
rr��sr�ccsP|dkrtd��x1t|�D]#}||krCtd��|Vq%WdS)NrzSomebody said whenr)r�r�)ZtotalZwhenr�r
r
r�exception_throwing_generator�sr�csleZdZe�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�Z�S)5�	_TestPoolcs#t�j�|jd�|_dS)Nr�)�super�
setUpClass�Pool�pool)r^)�	__class__r
rr��s
z_TestPool.setUpClasscs4|jj�|jj�d|_t�j�dS)N)r�rwrlr��
tearDownClass)r^)r�r
rr��s

	z_TestPool.tearDownClasscCsZ|jj}|j|td�td��|j|tfddi�tdd��dS)NrArxr�)rA)r��applyr8r�)r$Zpapplyr
r
r�
test_apply�sz_TestPool.test_applycCs�|jj}|j|tttd���tttttd�����|j|tttd��dd�tttttd�����dS)Nrvrp�	chunksizer�)r��mapr8r�rhr�)r$Zpmapr
r
r�test_map�s@$z_TestPool.test_mapcCs�|jj}tttd�tddd	���}|j|t|�ttjt|���tttd�tdd
d���}|j|t|dd�ttjt|���dS)Nrvr�rrp�cr�r�rrrr)r��starmaprhrzr�r8r��	itertools)r$Zpsmap�tuplesr
r
r�test_starmap�s''z_TestPool.test_starmapcCsbtttd�tddd���}|j|jjt|�j�ttj	t|���dS)Nrpr�rrr)
rhrzr�r8r�Z
starmap_asyncr�rkr�r�)r$r�r
r
r�test_starmap_async�s'z_TestPool.test_starmap_asynccCsP|j|jjtttd���j�tttttd�����dS)Nrv)r8r��	map_asyncr�rhr�rkr�)r$r
r
r�test_map_async�s*z_TestPool.test_map_asynccCs�|jdkr|jj�ng}|jjtdgd|jd|j�j�|jdt	|��|jdg|d�|jjtdgd|jd|j�j�|jdt	|��|j
|dt�dS)	Nr0�1�callback�error_callbackrrr4r_)rHr0rhr�r�r~r�rr8rRrPr)r$�	call_argsr
r
r�test_map_async_callbacks�s$		z"_TestPool.test_map_async_callbackscCsv|jdkr(|jdj|j��Gdd�dt�}|jt��"|jjt|�gd�WdQRXdS)Nr1ztest not appropriate for {}c@seZdZdd�ZdS)z*_TestPool.test_map_unplicklable.<locals>.AcSstd��dS)Nz
cannot pickle)rt)r$r
r
rr<sz5_TestPool.test_map_unplicklable.<locals>.A.__reduce__N)r+r,r-r<r
r
r
r�Asr�rv)	rHrIrJr�r�rtr�r�r�)r$r�r
r
r�test_map_unplicklables
z_TestPool.test_map_unplicklablecCsRy)|jjtgdd�jdt�Wn"tjk
rM|jd�YnXdS)Nr�rrz2pool.map_async with chunksize stalled on null list)r�r�r�rkr�r|�TimeoutErrorr�)r$r
r
r�test_map_chunksizes)z_TestPool.test_map_chunksizec'CsA|jdkr(|jdj|j��|jt��$|jjttdd�d�WdQRX|jt��$|jjttdd	�d�WdQRX|jt��$|jjttdd�d�WdQRXGdd�d�}|jt��|jjt|�d�WdQRX|jt��|jjt|�d�WdQRXdS)
Nr0ztest not appropriate for {}rrvr�c@s4eZdZdd�Zdd�Zdd�ZdS)zE_TestPool.test_map_handle_iterable_exception.<locals>.SpecialIterablecSs|S)Nr
)r$r
r
r�__iter__&szN_TestPool.test_map_handle_iterable_exception.<locals>.SpecialIterable.__iter__cSs
t�dS)N)r�)r$r
r
r�__next__(szN_TestPool.test_map_handle_iterable_exception.<locals>.SpecialIterable.__next__cSsdS)Nrr
)r$r
r
rr2*szM_TestPool.test_map_handle_iterable_exception.<locals>.SpecialIterable.__len__N)r+r,r-r�r�r2r
r
r
r�SpecialIterable%sr�rr)	rHrIrJr�r�r�r�r�r�)r$r�r
r
r�"test_map_handle_iterable_exceptions&&& z,_TestPool.test_map_handle_iterable_exceptioncCsT|jjtdtf�}t|j�}|j|�d�|j|jt�dS)Nr��1)	r��apply_asyncr�r�r!rkr8r6r#)r$r:rkr
r
r�
test_async1sz_TestPool.test_asynccCs^|jjtdtdf�}t|j�}|jtj|dt�|j	|j
t�dS)Nr�g�?r)r�r�r�r�r!rkr�r|r�r6r#)r$r:rkr
r
r�test_async_timeout7sz_TestPool.test_async_timeoutcCs&|jjtttd���}|jt|�tttttd�����|jjtttd���}x.td�D] }|jt|�||�q�W|jt	|j
�|jjtttd��dd�}x.td�D] }|jt|�||�q�W|jt	|j
�dS)Nrvi�r�rp)r��imapr�rhr�r8r��nextr��
StopIterationr�)r$�itr�r
r
r�	test_imap=s!1!'z_TestPool.test_imapcCs�|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|�||�q�W|jt|j	�dS)
Nr0ztest not appropriate for {}rrvr�r�r�r_r�r�rr)
rHrIrJr�r�r�r�r�r�r�r�r8r�)r$r�r�r
r
r�#test_imap_handle_iterable_exceptionKs$!!!!!z-_TestPool.test_imap_handle_iterable_exceptioncCs�|jjtttd���}|jt|�tttttd�����|jjtttd��dd�}|jt|�tttttd�����dS)Ni�r��5)r��imap_unorderedr�rhr�r8r�r�)r$r�r
r
r�test_imap_unorderedes!1'z_TestPool.test_imap_unorderedcCs�|jdkr(|jdj|j��|jjttdd	�d�}|jt|j	�|jjttdd
�d�}|jt|j	�|jjttdd�d�}t
ttt
td����}|jt��Ex=td�D]/}t
|�}|j||�|j|�q�WWdQRX|jjttdd�d�}t
ttt
td����}|jt��Ex=td�D]/}t
|�}|j||�|j|�q�WWdQRXdS)Nr0ztest not appropriate for {}rrvr�r�r�r_rr)rHrIrJr�r�r�r�r�r�r�rhr�r�r�rj�remove)r$r�Zexpected_valuesr�r9r
r
r�-test_imap_unordered_handle_iterable_exceptionls8			!	!z7_TestPool.test_imap_unordered_handle_iterable_exceptionc
Cs�|jdkrtnt}|j||jd�|j||jd�|jdkr�|jd�}z|jdt|j��Wd|j�|j	�XdS)Nr0rrr�r)
rH�RemoteErrorrr�r�r8rR�_poolr�rl)r$Zexpected_errorrnr
r
r�test_make_pool�s
z_TestPool.test_make_poolcCsn|jjtjdd�td�D�dd�}|jj�t|jj�}|�|j|j	d�dS)NcSsg|]}d�qS)g�������?r
)r�r�r
r
rr��s	z,_TestPool.test_terminate.<locals>.<listcomp>i'r�rg@)
r�r�r&rqr�rwr!rl�
assertLessr#)r$r�rlr
r
rr{�s	(
z_TestPool.test_terminatecCs�|jd�}|j|jtg�g�|jt|jtg��g�|jt|jtg��g�|j|jtg�j�g�|j	�|j
�dS)Nr)r�r8r�r�rhr�r�r�rkr�rl)r$rnr
r
r�test_empty_iterable�s"""
z_TestPool.test_empty_iterablecCs�|jdkr�ttd��}dd�|D�}|jd��/}|jt|�}|j|j�|�WdQRX|jt	|jt|�dS)Nr/rvcSsg|]}t|��qSr
)r�)r�r�r
r
rr��s	z*_TestPool.test_context.<locals>.<listcomp>r_)
rHrhr�r�r�r�r8rkr�r)r$�Lr�rnr�r
r
r�test_context�sz_TestPool.test_contextcCstd��dS)N�{)rt)r^r
r
r�_test_traceback�sz_TestPool._test_tracebackc<Cs�|jdkr�|jd��V}y|j|j�Wn+tk
rb}z|}WYdd}~XnX|jd�WdQRX|jt|�t�|j	|j
d�|j}|jt|�tj
j�|jd|j�tjj��9}y
|�Wn%tk
rtjtj��YnXWdQRX|jd|j��|jd���}y |jttdd�d�Wn+tk
r�}z|}WYdd}~XnX|jd�|jt|�t�|j|jd�WdQRXdS)	Nr/rzexpected RuntimeErrorr�z&raise RuntimeError(123) # some commentzexpected SayWhenError)r�r)rHr�r�r��	Exceptionr�r�rgrtr8r'�	__cause__r|r�ZRemoteTracebackrj�tbr�r�r�r��
excepthook�exc_info�getvaluer�r�r�r�)r$rnrm�exc�cause�f1r
r
r�test_traceback�s6	

	
 
z_TestPool.test_tracebackcCstd��dS)N�foo)rt)r^r
r
r�_test_wrapped_exception�sz!_TestPool._test_wrapped_exceptioncCsD|jd��.}|jt��|j|j�WdQRXWdQRXdS)Nr)r�r�rtr�r�)r$rnr
r
r�test_wrapped_exception�sz _TestPool.test_wrapped_exceptioncCs�dd�td�D�}dd�|D�}|jjt|�~tjt�|jtdd�|D��dh�|jt	j
d�dS)NcSsg|]}t��qSr
)r�)r�r�r
r
rr��s	z4_TestPool.test_release_task_refs.<locals>.<listcomp>rvcSsg|]}tj|��qSr
)r�r�)r��or
r
rr��s	css|]}|�VqdS)Nr
)r�r�r
r
rr��sz3_TestPool.test_release_task_refs.<locals>.<genexpr>r)r�r�r�r�r&rqr�r8r�r�r�)r$ZobjsZrefsr
r
r�test_release_task_refs�s
&z _TestPool.test_release_task_refs)r+r,r-r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r{r�r�r�r�r�rrr
r
)r�rr��s4	

$
	$r�cCstd��dS)N�key)�KeyErrorr
r
r
r�raising�srcCs
dd�S)NcSsdS)N�*r
r
r
r
rrsz%unpickleable_result.<locals>.<lambda>r
r
r
r
r�unpickleable_resultsrc@s.eZdZdZdd�Zdd�ZdS)�_TestPoolWorkerErrorsr/cs�tjd�}dg��fdd�}|jtd|�}|jt|j�|j�d�|j�dt�|j	�|j
�dS)Nr_cs|�d<dS)Nrr
)r�)�
scratchpadr
r�errbacksz@_TestPoolWorkerErrors.test_async_error_callback.<locals>.errbackr�r)r|r�r�rr�rrkrMrPr�rl)r$rnr
r:r
)r	r�test_async_error_callbacks	
z/_TestPoolWorkerErrors.test_async_error_callbackcs�ddlm}tjd�}x�td�D]�}dg��fdd�}|jtd|�}|j||j��d}|j	|�|j
�d|�|j|j�|j|j
�q,W|j�|j�dS)Nr)�MaybeEncodingErrorr_r�cs|�d<dS)Nrr
)r�)r	r
rr
sz?_TestPoolWorkerErrors.test_unpickleable_result.<locals>.errbackr�)�multiprocessing.poolrr|r�r�r�rr�rkrMrPZassertIsNotNoner�r9r�rl)r$rrnZ	iterationr
r:�wrappedr
)r	r�test_unpickleable_results	


z._TestPoolWorkerErrors.test_unpickleable_resultN)r/)r+r,r-r=rrr
r
r
rrsrc@s.eZdZdZdd�Zdd�ZdS)�_TestPoolWorkerLifetimer/c	Csqtjddd�}|jdt|j��dd�|jD�}g}x0td�D]"}|j|jt|f��qWWx6t	|�D](\}}|j|j
�t|��q�W|j�d}x>|rtdd	�|jD��r|d
8}t
jt�q�Wdd�|jD�}|jd|�|jd|�|jt|�t|��|j�|j�dS)Nr��maxtasksperchildrvcSsg|]}|j�qSr
)r])r�r�r
r
rr�3s	zE_TestPoolWorkerLifetime.test_pool_worker_lifetime.<locals>.<listcomp>rp�2css|]}|j�VqdS)N)rN)r�r�r
r
rr�AszD_TestPoolWorkerLifetime.test_pool_worker_lifetime.<locals>.<genexpr>rcSsg|]}|j�qSr
)r])r�r�r
r
rr�Ds	)r|r�r8rRr�r�r�r�r��	enumeraterkZ_repopulate_pool�allr&rqr�reZassertNotEqualr�r�rl)	r$rnZorigworkerpidsrPr�rnr:Z	countdownZfinalworkerpidsr
r
r�test_pool_worker_lifetime0s&  
&

z1_TestPoolWorkerLifetime.test_pool_worker_lifetimecCs�tjddd�}g}x3td�D]%}|j|jt|df��q(W|j�|j�x6t|�D](\}}|j	|j
�t|��qrWdS)Nr�rrr�g333333�?)r|r�r�r�r�r�r�rlrr8rk)r$rnrPr�rnr:r
r
r�%test_pool_worker_lifetime_early_closeMs#

z=_TestPoolWorkerLifetime.test_pool_worker_lifetime_early_closeN)r/)r+r,r-r=rrr
r
r
rr-sr)�BaseManager�	BaseProxyr�c@s4eZdZdd�Zdd�Zdd�ZdS)�FooBarcCsdS)Nzf()r
)r$r
r
rr�aszFooBar.fcCs
t�dS)N)r)r$r
r
r�gcszFooBar.gcCsdS)Nz_h()r
)r$r
r
r�_hesz	FooBar._hN)r+r,r-r�rrr
r
r
rr`srccs$xtd�D]}||Vq
WdS)Nrv)r�)r�r
r
r�bazhsrc@s.eZdZdZdd�Zdd�ZdS)�
IteratorProxyr�cCs|S)Nr
)r$r
r
rr�nszIteratorProxy.__iter__cCs
|jd�S)Nr�)�_callmethod)r$r
r
rr�pszIteratorProxy.__next__N)r�)r+r,r-Z	_exposed_r�r�r
r
r
rrlsrc@seZdZdS)�	MyManagerN)r+r,r-r
r
r
rrssr�Foo�callable�BarZexposedr�rZ	proxytypec@sFeZdZdZdd�Zdd�Zdd�Zdd	�Zd
S)�_TestMyManagerr0cCsDt�}|j�|j|�|j�|j|jjd�dS)Nr)rri�common�shutdownr8�_processrT)r$r0r
r
r�test_mymanagers
	


z_TestMyManager.test_mymanagerc
Cs:t��}|j|�WdQRX|j|jjd�dS)Nr)rr$r8r&rT)r$r0r
r
r�test_mymanager_context�sz%_TestMyManager.test_mymanager_contextc
CsHt�}|j�|�|j|�WdQRX|j|jjd�dS)Nr)rrir$r8r&rT)r$r0r
r
r�!test_mymanager_context_prestarted�s
	
z0_TestMyManager.test_mymanager_context_prestartedcse|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)
Ncs%g|]}t�|�r|�qSr
)rx)r�r\)r�r
rr��s	z)_TestMyManager.common.<locals>.<listcomp>r�rrcs%g|]}t�|�r|�qSr
)rx)r�r\)�barr
rr��s	zf()z_h()cSsg|]}||�qSr
r
)r�r�r
r
rr��s	rv)r�rr)r�rr)
r r"rr8r�r�rrrr�rrhr�)r$r0rZfoo_methodsZbar_methodsr
)r*r�rr$�s z_TestMyManager.commonN)r0)r+r,r-r=r'r(r)r$r
r
r
rr#{s
r#cCstS)N)�_queuer
r
r
r�	get_queue�sr,c@seZdZdZdS)�QueueManagerz$manager class used by server processN)r+r,r-rBr
r
r
rr-�sr-c@seZdZdZdS)�
QueueManager2z@manager class which specifies the same interface as QueueManagerN)r+r,r-rBr
r
r
rr.�sr.Z	xmlrpclibc@s_eZdZd
ZdddddddgZedd�Zed	d
��Zdd�ZdS)�_TestRemoteManagerr0zhello worldNTg@uhallå världenuпривіт світs
hall� v�rldencCsKtd|d|dt�}|j�|j�}|jt|j��dS)N�addressrL�
serializer)r.�
SERIALIZER�connectr,rD�tupler|)r^r0rLr0r�r
r
r�_putter�s

z_TestRemoteManager._puttercCs�tjd�}tdtjjdfd|dt�}|j�|jd|j	d|j
|f�}d|_|j�td|j
d|dt�}|j
�|j�}|j|j�|j�|jt|jtj�~|j�dS)	N� r0rrLr1rWr'T)r�urandomr-r�r��HOSTr2rirXr5r0rOr.r3r,r8rkr�r�r�rDr&rqr%)r$rLr0rnZmanager2r�r
r
r�test_remote�s!
$	

z_TestRemoteManager.test_remote)r0)	r+r,r-r=r|r�r�r5r9r
r
r
rr/�s	
r/c@s.eZdZedd��Zdd�ZdS)�_TestManagerRestartcCsBtd|d|dt�}|j�|j�}|jd�dS)Nr0rLr1zhello world)r-r2r3r,rD)r^r0rLr0r�r
r
rr5�s

z_TestManagerRestart._puttercCsdtjd�}tdtjjdfd|dt�}|j�}|j}|j	j
�|j�|jd|j
d|j|f�}d|_|j�|j�}|j|j�d	�~|j�td|d|dt�}y|j�Wnbtk
rU}zB|jtjkr�tjd
�td|d|dt�}WYdd}~XnX|j�dS)Nr6r0rrLr1rWr'Tzhello worldg�?)rr7r-r�r�r8r2Z
get_serverr0Zlistenerr�rirXr5rOr,r8rkr%�OSError�errnoZ
EADDRINUSEr&rq)r$rLr0Zsrvr�addrrnr�rmr
r
r�test_rapid_restart�s2!	

$	


(z&_TestManagerRestart.test_rapid_restartN)r+r,r-r�r5r>r
r
r
rr:�sr:�c@s`eZdZd%Zedd��Zdd�Zdd�Zd	d
�Zdd�Z	ed
d��Z
eddd��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/r1cCs8x't|jt�D]}|j|�qW|j�dS)N)r��
recv_bytes�SENTINEL�
send_bytesr�)r^rl�msgr
r
r�_echo%	sz_TestConnection._echocCsx|j�\}}|jd|jd|f�}d|_|j�dddg}td�}|d}tjdttd	���}|j	d
kr�|j
t|j��t
�|j
|j|�d�|j
|j�|�|j
|j|�d�|j
|j�|�|j	d
kr�tjddgd�}t|�dgdt|�}	|j
|j|�d�|j
|j|�t|�|j�|j
t|�|	�tjddgd�}dgdt|�dgdt|�}	|j
|j|�d�|j
|j|d|j�t|�|j�|j
t|�|	�ttd
d��}|j
|j|�d�y|j|�}
Wn>tjk
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
krj|j
|j#d�|j
|j$d�|j%t&|j�|j%t&|j�|j'�dS)NrWr'Trg@zhello worldrvr�r�r/rr�� �(zexpected BufferTooShort, got %sFg�������?�Xi�r�rii)(r�rXrErOrirr�rhr�rHr8rg�filenor~r�r�rCrArRZrecv_bytes_into�itemsize�	bytearrayr|ZBufferTooShortr'r�r!r�r6r#r�r&rqrBr��readable�writabler��EOFErrorrl)r$rlr�rnr�rDZlongmsgr��bufferr�r:rmr�Zreally_big_msgr
r
r�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)Nr�Frr/Tr_)
r�r8r�r�rHrMrNr�r;r�)r$�reader�writerr
r
r�test_duplex_falsez	sz!_TestConnection.test_duplex_falsecCs�|j�\}}|jd|jd|f�}d|_|j�|j�td�}|j|�|j|j	�|�|jt
�|j�|j�dS)NrWr'Tr`)r�rXrErOrir�rrCr8rArBrl)r$rlr�rnrDr
r
r�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 {}ZabcdefghijklmnopqrstuvwxyzrAr�r��r?r��rr��rr)
rHrIrJrr�rCr8rAr�r)r$rDr4r5r
r
r�test_sendbytes�	s&
  z_TestConnection.test_sendbytescCsZytj|�Wn>tk
rQ}z|jtjkr<dS�WYdd}~XnXdSdS)NFT)r�fstatr;r<�EBADF)r^r�rmr
r
r�_is_fd_assigned�	sz_TestConnection._is_fd_assignedFcCs�|rEx<tdd�D]+}|j|�stj|j�|�qWtj|�}trotj|tj	�}tj
||�tj|�dS)Nrr)r�r]r�dup2rJr�recv_handle�msvcrtZopen_osfhandler�r�r�)r^rl�dataZcreate_dummy_fdsr�r�r
r
r�_writefd�	sz_TestConnection._writefdz$test needs multiprocessing.reductioncCs|jdkr|jd�|jdd�\}}|jd|jd|df�}d|_|j�|jtj	j
tj	j�ttj	jd��>}|j
�}tr�tj|�}tj|||j�WdQRX|j�ttj	jd	��}|j|j�d�WdQRXdS)
Nr/zonly makes sense with processesr�TrWr'sfoo�wb�rb)rHrIr�rXrbrOrir�r�r�r�r�r�rJr`Z
get_osfhandler�send_handler]rlr8r�)r$rlr�rnr�r�r
r
r�test_fd_transfer�	s
!	

z _TestConnection.test_fd_transferr
z*test semantics don't make sense on Windowsrz)largest assignable fd number is too smallr^ztest needs os.dup2()cCsg|jdkr|jd�|jdd�\}}|jd|jd|ddf�}d|_|j�|jtj	j
tj	j�ttj	jd���}|j
�}x4td	t�D]}|j|�s�Pq�W|jd
�tj||�ztj|||j�Wdtj|�XWdQRX|j�ttj	jd��}|j|j�d�WdQRXdS)Nr/zonly makes sense with processesr�TrWr'sbarrcrz2could not find an unassigned large file descriptorrd)rHrIr�rXrbrOrir�r�r�r�r�r�rJr��MAXFDr]r�rr^rrer]r�rlr8r�)r$rlr�rnr�r�Znewfdr
r
r�test_large_fd_transfer�	s(	
$	


z&_TestConnection.test_large_fd_transfercCstj|j�d�dS)Ns)rr�rJ)r$rlr
r
r�_send_data_without_fd
sz%_TestConnection._send_data_without_fdzdoesn't make sense on WindowscCs�|jdkr|jd�|jdd�\}}|jd|jd|f�}d|_|j�|jtt	j
|�|j�dS)Nr/zonly makes sense with processesr�TrWr')rHrIr�rXrirOrir�rtrr_rl)r$rlr�rnr
r
r�test_missing_fd_transfer
s
	
z(_TestConnection.test_missing_fd_transfercCs�|j�\}}|�e|�W|jd�|j|j�d�|jdkrr|j|j�|j|j�WdQRXWdQRX|jdkr�|j|j�|j|j�|jt	|j�|jt	|j�dS)Ni�r/)
r�r�r8r�rHrZ�closedrMr�r;)r$r4r5r
r
rr�
s
z_TestConnection.test_contextN)r/r1)r+r,r-r=r�rErQrTrUrZr]rbrr�
HAS_REDUCTIONrfr�r�rrgrxrrhrirjr�r
r
r
rr@!	s*O
 *r@c@s.eZdZdZdd�Zdd�ZdS)�
_TestListenerr/cCs_xX|jjD]J}|jjd|�}|j|j�|jt|jj|j|�q
WdS)N�family)�
connection�families�Listenerr�r�r�r;r0)r$rn�lr
r
r�test_multiple_bind.
s
z _TestListener.test_multiple_bindcCs�|jj��_}|jj|j��@}|j��*}|jd�|j|j�d�WdQRXWdQRXWdQRX|jdkr�|j	t
|j�dS)Ni�r/)rorq�Clientr0�acceptr�r8r�rHr�r;)r$rrrFrsr
r
rr�5
s
+z_TestListener.test_contextN)r/)r+r,r-r=rsr�r
r
r
rrm*
srmc@sLeZdZdZedd��Zdd�Zdd�Zd	d
�ZdS)
�_TestListenerClientr/r1cCs-|jj|�}|jd�|j�dS)Nr`)rortr�r�)r^r0rlr
r
rrYC
s
z_TestListenerClient._testcCs�x�|jjD]�}|jjd|�}|jd|jd|jf�}d|_|j�|j�}|j	|j
�d�|j�|j�q
WdS)NrnrWr'Tr`)
rorprqrXrYr0rOrirur8r�rlr�)r$rnrrrnrlr
r
r�test_listener_clientI
s!	

z(_TestListenerClient.test_listener_clientcCs�|jj�}|jd|jd|jf�}d|_|j�tjd�|j	�}|j
|j�d�|j�|j
�|j�dS)NrWr'Trr`)rorqrXrYr0rOrir&rqrur8r�r�rl)r$rrrnrlr
r
r�test_issue14725T
s!	



z#_TestListenerClient.test_issue14725cCs�x�|jjD]}}|jjd|�}|jj|j�}|j�}|jd�|j|jd��|j	�|j	�|j	�q
WdS)Nrnshellor)
rorprqrtr0rurCrMr�r�)r$�famrrrFr4r
r
r�test_issue16955d
s


z#_TestListenerClient.test_issue16955N)r/r1)	r+r,r-r=r�rYrwrxrzr
r
r
rrv?
s
rvc@s|eZdZdZdd�Zedd��Zdd�Zed	d
��Zdd�Z	ed
d��Z
dd�ZdS)�	_TestPollr/r1cCse|j�\}}|j|j�d�|jd�|j|j�d�|j|j�d�dS)NF�T)r�r8r�rC)r$r4r5r
r
r�test_empty_strings
s

z_TestPoll.test_empty_stringcCs9x(|D] }tjd�|j|�qW|j�dS)Ng�������?)r&rqrCr�)r^rl�stringsr	r
r
r�_child_stringsz
s

z_TestPoll._child_stringscCs�d}|j�\}}|jd|jd||f�}|j�xQ|D]I}x$td	�D]}|jd
�r]Pq]W|j�}|j||�qJW|j�dS)N�hellor|�a�b�bye�loprWr'��g{�G�z�?)r�r|r�r�r|r�r|r�)	r�rXrrir�r�rAr8rl)r$r~r4r5rnr	r�rxr
r
r�test_strings�
s!

z_TestPoll.test_stringscCs|jd�dS)NrA)r�)r^r�r
r
r�_child_boundaries�
sz_TestPoll._child_boundariescCs�|jd�\}}|jd|jd|f�}|j�tjd�ddg}x|D]}|j|�q]W|j�|j�|j	|j
�|�dS)NFrWr'r_sfirstssecond)r�rXr�rir&rqrCr�rlrjrA)r$r�r�rnr�r�r
r
r�test_boundaries�
s




z_TestPoll.test_boundariescCs+|jd�|jd�|jd�dS)Nr�r�scd)rC)r^r5r
r
r�_child_dont_merge�
s

z_TestPoll._child_dont_mergecCs9|j�\}}|j|jd�d�|j|jd�d�|jd|jd|f�}|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�������?rWr'r�g�?Tr�scd)r�r8r�rXr�rirArl)r$r4r5rnr
r
r�test_dont_merge�
s
z_TestPoll.test_dont_mergeN)r/r1)r+r,r-r=r}r�rr�r�r�r�r�r
r
r
rr{o
sr{z$test needs multiprocessing.reductionc@sveZdZdZedd��Zedd��Zedd��Zdd	�Zed
d��Z	dd
�Z
dS)�_TestPicklingConnectionsr/cCs$ddlm}|jdd�dS)Nr)�resource_sharerrrA)r|r�r�)r^r�r
r
rr��
sz&_TestPicklingConnections.tearDownClasscCs�x`|D]X}|jjd|�}|j|j�|j�}|j|�|j�|j�qWtj�}|jtj	j
df�|j�|j|j��|j�\}}|j|�|j�|j�|j
�dS)Nrnr)rorqr�r0rur��socket�bindr�r�r8�listen�getsocknamer�)r^rlrpryrr�new_connr=r
r
r�	_listener�
s 






z"_TestPicklingConnections._listenercCs�xOt|jd�D];\}}|jj|�}|j|j��|j�qW|j�\}}tj�}|j|�|j	|j��|j�|j�dS)N)
r�r�rortr�r�r�r�r3�sendall)r^rlr0rD�clientr
r
r�_remote�
s

z _TestPicklingConnections._remotecCs�|jj}|j�\}}|jd|jd||f�}d|_|j�|j�|j�\}}|jd|jd|f�}d|_|j�|j�xh|D]`}d|j	d�}	|j
�}
|j|
|	f�|j
�}|j|j
�|	j
��q�W|jd�td�}	|j
�}
|j|
|	f�|j
�}g}x'|j
d�}
|
swP|j|
�qaWdj|�}|j||	j
��|j�|jd�|j�|j�|j�|j�dS)	NrWr'TzThis connection uses family %s�asciiz$This connection uses a normal socketrpr|)rorpr�rXr�rOrir�r�rr�r�r8r�rr�rl)r$rpZlconnZlconn0Zlpr�Zrconn0ZrpryrDr0r�Zbufr	r
r
r�
test_pickling�
sH!	

	


 





z&_TestPicklingConnections.test_picklingcCsZ|j�}|jd�|j�|j�}|j�}|j|d�|j�dS)Nzall is wellr_)r�r�r�)r^rlr�r�rDr
r
r�child_accesss

z%_TestPicklingConnections.child_accesscCs�|j�\}}|jd|jd|f�}d|_|j�|j�|jdd�\}}|j|�|j�|j|j�d�|j�|jdd�\}}|j|�|j�|jd�|j�|j|j�d	�dS)
NrWr'Tr�Fzall is wellZfoobarr_Zfoobarfoobar)	r�rXr�rOrir�r�r8r�)r$rlr�rnr�r�r
r
r�test_access)s 	








z$_TestPicklingConnections.test_accessN)r/)r+r,r-r=r�r�r�r�r�r�r�r
r
r
rr��
s.r�c@s.eZdZdZdd�Zdd�ZdS)�	_TestHeapr/cCsd}d}g}xwt|�D]i}ttjdd�d�}tjj|�}|j|�t|�|krtj	|�}||=qWtjjj
}g}d}	|jj�|j
|jj�xct|jj��D]L}
xC|
D];\}}}
|j|jj|�||
|
|df�q�Wq�WxT|jD]I\}}}
|j|jj|�||
|
|df�|	|
|7}	q7W|j�x�tt|�d�D]o}||dd�\}}}
||ddd�\}}}|j||kr|dkp|
|k�q�WdS)	Ni�rrri�Zfree�occupiedr�)r�r~�randomZlognormvariater|r'r(r�rRZ	randrangeZ_heapr.r�r�r�rhZ_len_to_seqr|Z_arenas�indexZ_allocated_blocks�sortrM)r$Z
iterationsZ	maxblocksZblocksr�r�r5r'rr�r�Zarenarir�ZnarenaZnstartZnstopr
r
r�	test_heapLs:


!z_TestHeap.test_heapcCs�tj�s&tj�|jtj�tj�}|jtj|�tjd�xJtd�D]<}tj	j
d�}tj	j
d�}||_||_q_WdS)Nrvi�r)�gc�	isenabled�enabler��disable�
get_threshold�
set_thresholdr�r|r'r(Zbuddy)r$Z
thresholdsr�r4r5r
r
r�test_free_from_gcss

	z_TestHeap.test_free_from_gcN)r/)r+r,r-r=r�r�r
r
r
rr�Hs'r�c@s(eZdZdefdefgZdS)�_FoorxryN)r+r,r-rrZ_fields_r
r
r
rr��s	r�c@s[eZdZdZdd�Zedd��Zddd�Zd	d
�Zdd�Z	d
S)�_TestSharedCTypesr/cCsts|jd�dS)Nz%requires multiprocessing.sharedctypes)r rI)r$r
r
rrI�sz_TestSharedCTypes.setUpcCsz|jd9_|jd9_|jd9_|jd9_|jd9_x(tt|��D]}||d9<q^WdS)Nr_)r9rxryr�rR)r^rxryr�r��stringr�r
r
r�_double�sz_TestSharedCTypes._doubleFc		Csltddd|�}ttdd|�}ttddd|�}|jdttd	��d|�}|jd
dd|�}td�|_|jd
|j	d|||||f�}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�r_rsrvrFr�r`rWr'T�g@r�g@Z
hellohellogUUUUUU�?gUUUUUU�?)rrr�r�rhr�rr9rXr�rOrirlr8r3rxry)	r$r�rxryr�r�r�rnr�r
r
r�test_sharedctypes�s"$*	

z#_TestSharedCTypes.test_sharedctypescCs|jdd�dS)Nr�T)r�)r$r
r
r�test_synchronize�sz"_TestSharedCTypes.test_synchronizecCsWtdd�}t|�}d|_d|_|j|jd�|j|jd�dS)Nr_g@r)r�rrxryr8r3)r$r�r*r
r
r�	test_copy�s		z_TestSharedCTypes.test_copyN)r/)
r+r,r-r=rIr�r�r�r�r�r
r
r
rr��s
r�c@sXeZdZd
Zdd�Zdd�Zedd��Zdd	�Zd
d�Z	dS)�
_TestFinalizer/cCs#tjj�|_tjj�dS)N)r�_finalizer_registryr�registry_backupr$)r$r
r
rrI�sz_TestFinalize.setUpcCs'|jtj�tjj|j�dS)N)rZrr��updater�)r$r
r
rrK�sz_TestFinalize.tearDowncCs�Gdd�dt�}|�}tj||jdd�~|�}tj||jdd�}|�|�~|�}tj||jdd�|�}tj||jdddd	�|�}tj||jdddd�|�}	tj|	|jdddd�|�}
tj|
|jdddd�tjd|jdddd�tjd|jdddd�tj�|j�tjd�dS)Nc@seZdZdS)z)_TestFinalize._test_finalize.<locals>.FooN)r+r,r-r
r
r
rr �sr r'r4r5rF�d10�exitpriorityr�d01r�d02�d03rmrv�STOPrp)r4)r5)rF)r�)r�)r�)r�)rmi����)r�i����)r�r�Finalizer�Z_exit_functionr�r�_exit)r^rlr r4r5Zclose_brFr�r�r�r�r
r
r�_test_finalize�s0							

z_TestFinalize._test_finalizec	Cs�|j�\}}|jd|jd|f�}d|_|j�|j�dd�t|jd�D�}|j|ddd	d
ddd
g�dS)NrWr'TcSsg|]}|�qSr
r
)r�r�r
r
rr�s	z/_TestFinalize.test_finalize.<locals>.<listcomp>r�r4r5r�r�r�r�rm)	r�rXr�rOrirlr�r�r8)r$rlr�rnr�r
r
r�
test_finalize�s	

z_TestFinalize.test_finalizecs,dd��G�fdd�dt��d�d���fdd�}���fdd	�}tj�}tj�}z�tjd
�tjddd�tjd|�tjd|�g}t	j
j|��tj
d
�d�WdQRX�dk	r���Wdtj|�tj|�tj�XdS)NcSsdS)Nr
r
r
r
r�cbsz,_TestFinalize.test_thread_safety.<locals>.cbcs"eZdZ�fdd�ZdS)z-_TestFinalize.test_thread_safety.<locals>.Foocs/||_tj|�dtjdd��dS)Nr�rrp)r�rr�r�Zrandint)r$)r�r
rr%s	z6_TestFinalize.test_thread_safety.<locals>.Foo.__init__N)r+r,r-r%r
)r�r
rr sr Fcsdx]�s_tjtj�d�ytj�Wqtk
r[}z|�WYdd}~XqXqWdS)Ng�������?)r&rqr�rZ_run_finalizersr�)rm)r��finishr
r�run_finalizerss	z8_TestFinalize.test_thread_safety.<locals>.run_finalizerscsi}xr�szy0�fdd�td�D�|tjd�<Wq	tk
rv}z|�|j�WYdd}~Xq	Xq	WdS)Ncsh|]}���qSr
r
)r�r�)r r
r�	<setcomp>&s	zL_TestFinalize.test_thread_safety.<locals>.make_finalizers.<locals>.<setcomp>rvrA)r�r�Zgetrandbitsr�r$)rsrm)r r�r�r
r�make_finalizerss	0z9_TestFinalize.test_thread_safety.<locals>.make_finalizersg���ư>rArWg@T)r�r��getswitchintervalr�r��setswitchintervalr�r�rr�r�Z
start_threadsr&rq�collect)r$r�r�Zold_intervalZ
old_thresholdr1r
)r r�r�r�r�test_thread_safetys*





z _TestFinalize.test_thread_safetyN)r/)
r+r,r-r=rIrKr�r�r�r�r
r
r
rr��s&r�c@s(eZdZdd�Zdd�ZdS)�_TestImportStarcCs�ddl}tjjtj�}tjj|d�}|j|�}dd�|D�}dd�|D�}|jd�|jd�|S)Nrz*.pycSs6g|],}tjjtjj|�d�d�qS)rr)r�path�splitext�split)r�r�r
r
rr�Hs	z4_TestImportStar.get_module_names.<locals>.<listcomp>cSsg|]}d|�qS)zmultiprocessing.r
)r�rQr
r
rr�Is	zmultiprocessing.__init__r|)	�globrr��dirnamer|�__file__rlr�r�)r$r�Zfolder�pattern�files�modulesr
r
r�get_module_namesCs

z _TestImportStar.get_module_namescCs�|j�}tjdkrE|jd�|jd�|jd�n |jd�tse|jd�tdkr~|jd�xu|D]m}t|�tj|}|jt	|d�|�x4|j
D])}|jt	||�d||f�q�Wq�WdS)	Nr
zmultiprocessing.popen_forkz multiprocessing.popen_forkserverz!multiprocessing.popen_spawn_posixz!multiprocessing.popen_spawn_win32zmultiprocessing.sharedctypes�__all__z%r does not have attribute %r)r�r�rr�rlrr�r�rMrxr�)r$r�r\�mod�attrr
r
r�test_importNs$







z_TestImportStar.test_importN)r+r,r-r�r�r
r
r
rr�Asr�c@s@eZdZd	Zdd�Zedd��Zdd�ZdS)
�_TestLoggingr/cCsZtj�}|jtj�|j|dk	�|jd�|jd�|jt�dS)Nzthis will not be printedz
nor will this)	r|�
get_logger�setLevelr�
SUBWARNINGrM�debug�info�	LOG_LEVEL)r$�loggerr
r
r�test_enable_loggingps

z _TestLogging.test_enable_loggingcCs#tj�}|j|j��dS)N)r|r�r�ZgetEffectiveLevel)r^rlr�r
r
r�_test_levelxsz_TestLogging._test_levelc	Csd}d}tj�}tj�}|j}tjdd�\}}|j|�|jd|jd|f�}d|_	|j
�|j||j��|jtj
�|j|�|jd|jd|f�}d|_	|j
�|j||j��|j|�|jdt�dS)	Nr6�%r�FrWr'T�level)r|r��loggingZ	getLoggerr�r�r�rXr�rOrir8r�ZNOTSETr�)	r$ZLEVEL1ZLEVEL2r�Zroot_loggerZ
root_levelrRrSrnr
r
r�
test_level}s&	
	

	

z_TestLogging.test_levelN)r/)r+r,r-r=r�r�r�r�r
r
r
rr�lsr�c@sOeZdZd	Zedd��Zejee	d�d�dd��Z
dS)
�_TestPollEintrr/cCs$tjd�tj|tj�dS)Ng�������?)r&rqrrry�SIGUSR1)r^r]r
r
r�_killer�s
z_TestPollEintr._killerr�zrequires SIGUSR1cs�dg��fdd�}tj�}tjtj|�}z�|jd|jd|f�}|j�z3|jdtjdd�}|j�|j	�Wd|j	�X|j
�d�|j|jd�Wdtjtj|�XdS)	NFcsd�d<dS)NTrr
)r')�
got_signalr
r�record�sz._TestPollEintr.test_poll_eintr.<locals>.recordrWr'r_r)r_)
rrSryr�rXr�rir&rqrlrMr8rT)r$r�r]Z
oldhandlerZkillerrnr
)r�r�test_poll_eintr�s	

z_TestPollEintr.test_poll_eintrN)r/)r+r,r-r=r�r�rrrxryr�r
r
r
rr��sr�c@s.eZdZejed�dd��ZdS)�TestInvalidHandlezskipped on WindowscCsotjjd�}z-y|j�Wnttfk
r=YnXWdd|_X|jttftjjd�dS)Ni�M�rr)r|roZ
Connectionr�rr;Z_handler�)r$rlr
r
r�test_invalid_handles�s	
z&TestInvalidHandle.test_invalid_handlesN)r+r,r-rr��WIN32r�r
r
r
rr��sr�c@s(eZdZdd�Zdd�ZdS)�	OtherTestcCs<Gdd�dt�}|jtjtjj|�d�dS)Nc@s(eZdZdd�Zdd�ZdS)zFOtherTest.test_deliver_challenge_auth_failure.<locals>._FakeConnectioncSsdS)Nssomething bogusr
)r$r�r
r
rrA�szQOtherTest.test_deliver_challenge_auth_failure.<locals>._FakeConnection.recv_bytescSsdS)Nr
)r$rar
r
rrC�szQOtherTest.test_deliver_challenge_auth_failure.<locals>._FakeConnection.send_bytesN)r+r,r-rArCr
r
r
r�_FakeConnection�sr�sabc)r�r�r|�AuthenticationErrorroZdeliver_challenge)r$r�r
r
r�#test_deliver_challenge_auth_failure�s	z-OtherTest.test_deliver_challenge_auth_failurecCs<Gdd�dt�}|jtjtjj|�d�dS)Nc@s4eZdZdd�Zdd�Zdd�ZdS)zEOtherTest.test_answer_challenge_auth_failure.<locals>._FakeConnectioncSs
d|_dS)Nr)rW)r$r
r
rr%�szNOtherTest.test_answer_challenge_auth_failure.<locals>._FakeConnection.__init__cSs?|jd7_|jdkr(tjjS|jdkr;dSdS)Nrr_ssomething bogusr|)rWr|roZ	CHALLENGE)r$r�r
r
rrA�s
zPOtherTest.test_answer_challenge_auth_failure.<locals>._FakeConnection.recv_bytescSsdS)Nr
)r$rar
r
rrC�szPOtherTest.test_answer_challenge_auth_failure.<locals>._FakeConnection.send_bytesN)r+r,r-r%rArCr
r
r
rr��sr�sabc)r�r�r|r�roZanswer_challenge)r$r�r
r
r�"test_answer_challenge_auth_failure�s	z,OtherTest.test_answer_challenge_auth_failureN)r+r,r-r�r�r
r
r
rr��s
r�cCs|jd7_dS)Nr)r�)�nsr
r
r�initializer
sr�c@s@eZdZdd�Zdd�Zdd�Zdd�Zd	S)
�TestInitializerscCs1tj�|_|jj�|_d|j_dS)Nr)r|�Manager�mgrr�r�r�)r$r
r
rrI	
szTestInitializers.setUpcCs|jj�|jj�dS)N)r�r%rl)r$r
r
rrK
s
zTestInitializers.tearDowncCsitjj�}|jt|jd�|jt|jf�|j|jj	d�|j
�|j�dS)Nr)r|ZmanagersZSyncManagerr��	TypeErrorrir�r�r8r�r%rl)r$rQr
r
r�test_manager_initializer
s
z)TestInitializers.test_manager_initializercCsb|jttjdd�tjdt|jf�}|j�|j�|j|jj	d�dS)Nr�r)
r�r�r|r�r�r�r�rlr8r�)r$rnr
r
r�test_pool_initializer
s


z&TestInitializers.test_pool_initializerN)r+r,r-rIrKr�r�r
r
r
rr�
sr�cCs2y|jdd�}Wntjk
r-YnXdS)N�blockF)rkr�r�)rE�itemr
r
r�_this_sub_process&
sr�cCsHtj�}tjdtd|f�}d|_|j�|j�dS)NrWr'T)r|rcrXr�rOrirl)rEr�ZsubProcr
r
r�
_test_process,
s
	
r�cCs||S)Nr
)rxr
r
r�_afunc3
sr�c	CsQtjdd�}|jtdddddddg�}|j�|j�dS)	Nr/r�rr_r�rAr�r�)r|r�r�r�r�rl)r�rxr
r
r�pool_in_process6
s'
r�c@sFeZdZdd�Zedd��Zdd�Zdd�Zd	S)
�
_file_likecCs||_d|_dS)N)�	_delegate�_pid)r$Zdelegater
r
rr%=
s	z_file_like.__init__cCs4tj�}||jkr-||_g|_|jS)N)rrSr�_cache)r$r]r
r
r�cacheA
s
		z_file_like.cachecCs|jj|�dS)N)rr�)r$rar
r
rr�J
sz_file_like.writecCs)|jjdj|j��g|_dS)Nr?)rr�rlrr)r$r
r
r�flushM
sz_file_like.flushN)r+r,r-r%�propertyrr�rr
r
r
rr�<
s	r�c@s4eZdZdd�Zdd�Zdd�ZdS)�TestStdinBadfiledescriptorcCs?tj�}tjdtd|f�}|j�|j�dS)NrWr')r|rcrXr�rirl)r$r�r�r
r
r�test_queue_in_processS
s
z0TestStdinBadfiledescriptor.test_queue_in_processcCs*tjdt�}|j�|j�dS)NrW)r|rXr�rirl)r$rnr
r
r�test_pool_in_processY
s
z/TestStdinBadfiledescriptor.test_pool_in_processcsitj�}t|���jd�tjd�fdd��}�j�|j�dkset�dS)Nr�rWcs
�j�S)N)rr
)�fliker
rrb
sz:TestStdinBadfiledescriptor.test_flushing.<locals>.<lambda>)	�io�StringIOr�r�r|rXrr�rC)r$Zsior�r
)r	r�
test_flushing^
s

z(TestStdinBadfiledescriptor.test_flushingN)r+r,r-rrrr
r
r
rrQ
src@s�eZdZedd��Zddd�Zedd��Zddd	�Zd
d�Zdd
�Z	dd�Z
edd��Zdd�Zdd�Z
dS)�TestWaitcCs[xJtd�D]<}|r0tjtj�d�|j|tj�f�q
W|j�dS)Nrvg�������?)r�r&rqr�r�rrSr�)r^r��slowr�r
r
r�_child_test_waiti
s
zTestWait._child_test_waitFcsiddlm}g}g�g}x�td�D]�}tjdd�\}}tjd|jd||f�}d|_|j�|j	�|j
|��j
|�|j|j�q/Wxj|r%x]||�D]O}y|j
�}	Wn)tk
r|j|�|j	�Yq�X|j
|	�q�Wq�W|j�t�fd	d
�td�D��}
|j||
�dS)Nr)rr�r�FrWr'Tc3s+|]!}�D]}||jfVq
qdS)N)r])r�r�rn)�procsr
rr��
sz%TestWait.test_wait.<locals>.<genexpr>rv)�multiprocessing.connectionrr�r|r�rXrrOrir�r�r�rlr�rOr�r�r�r8)r$rr�readersZmessagesr�r�r�rnrDr�r
)rr�	test_waitq
s0!	



	


%zTestWait.test_waitcCsutj�}|j|�xKtd�D]=}|rItjtj�d�|jd|jd��q&W|j�dS)Nrvg�������?z%s
r�)	r�r3r�r&rqr�r�rr�)r^r0rr	r�r
r
r�_child_test_wait_socket�
s
z TestWait._child_test_wait_socketcCs�ddlm}tj�}|jtjjdf�|j�|j�}g}g}i}xet	d�D]W}t
jd|jd||f�}	d|	_
|	j�|j|	�|j|	j�qjWx=t	d�D]/}|j�\}
}|j|
�g||
<q�W|j�xa|rrxT||�D]F}
|
jd�}|sZ|j|
�|
j�q%||
j|�q%WqWdjd	d
�t	d�D��jd�}
x-|j�D]}|jd
j|�|
�q�WdS)Nr)rr�rWr'Tr6r?css|]}d|VqdS)z%s
Nr
)r�r�r
r
rr��
sz,TestWait.test_wait_socket.<locals>.<genexpr>rvr�r|)rrr�r�r�r�r8r�r�r�r|rXrrOrir�r�rlrur�r�r�rr|r8)r$rrrrr=rrZdicr�rnr�r1rDr��vr
r
r�test_wait_socket�
s<
	



	

+zTestWait.test_wait_socketcCs|jd�dS)NT)r)r$r
r
r�test_wait_slow�
szTestWait.test_wait_slowcCs|jd�dS)NT)r)r$r
r
r�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)rrAr_g�?r�g�������?)	rrr|r�r&r8r��
assertGreaterr�)r$rr�r4r5rir:r�r
r
r�test_wait_timeout�
s
zTestWait.test_wait_timeoutcCs|j�tj|�dS)N)r�r&rq)r^rZperiodr
r
r�signal_and_sleep�
s
zTestWait.signal_and_sleepcCs ddlm}d}dd�}tjd�}tj�\}}tjd|jd||f�}|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|ddd��S)NrcSs
t|�S)N)r�)rxr
r
rr�
sz>TestWait.test_wait_integer.<locals>.<lambda>.<locals>.<lambda>)r�)rrr
r
rr�
sz,TestWait.test_wait_integer.<locals>.<lambda>rWr'rr�r_g�������?)rrr|rr�rXrrirPr�r~rMr�r&r8r�rr�rwrl)r$rr�Zsorted_rr4r5rnrir:r�r
r
r�test_wait_integer�
s<

%
(
zTestWait.test_wait_integercCs�ddlm}tj�\}}tj�}||gdd�}tj�|}|j|g�|j|d�|j�|j�dS)Nr)rrrr)rrr|r�r&r8r�r�)r$rr4r5r)r:r
r
r�test_neg_timeouts
zTestWait.test_neg_timeoutN)r+r,r-r�rrrrrrrrrrr
r
r
rr
g
s
%+r
c@sLeZdZejed�dd��Zejed�dd��ZdS)�TestInvalidFamilyzskipped on Windowsc	Cs+|jt��tjjd�WdQRXdS)Nz\\.\test)r�rr|rorq)r$r
r
r�test_invalid_familysz%TestInvalidFamily.test_invalid_familyz skipped on non-Windows platformsc	Cs+|jt��tjjd�WdQRXdS)Nz/var/test.pipe)r�rr|rorq)r$r
r
r�test_invalid_family_win32!sz+TestInvalidFamily.test_invalid_family_win32N)	r+r,r-rr�r�rrr r
r
r
rrsrc@s@eZdZedd��Zedd��Zdd�ZdS)�	TestFlagscCs|jttj��dS)N)r�r4r��flags)r^rlr
r
r�run_in_grandchild+szTestFlags.run_in_grandchildcCs�ddl}tjdd�\}}tjd|jd|f�}|j�|j�}|j�|j�|j�t	t
j�|f}t|j
|��dS)Nrr�FrWr')�jsonr|r�rXr#rir�rlr�r4r�r"�print�dumps)r^r$r�r�rn�grandchild_flagsr"r
r
r�run_in_child/s



zTestFlags.run_in_childcCsxddl}ddl}dd}|jtjdddd|g�}|j|jd��\}}|j||�dS)	Nrz2from test._test_multiprocessing import TestFlags; zTestFlags.run_in_child()z-Ez-Sz-Oz-cr�)r$�
subprocessZcheck_outputr��
executable�loads�decoder8)r$r$r)�prograZchild_flagsr'r
r
r�
test_flags<szTestFlags.test_flagsN)r+r,r-r�r#r(r.r
r
r
rr!*s
r!c@s.eZdZedd��Zdd�ZdS)�TestTimeoutscCsQtjd�|jd�|j�tjj|�}|jd�|j�dS)Nrr�i�)r&rqr�r�r|rort)r^�childr0rlr
r
r�
_test_timeoutKs



zTestTimeouts._test_timeoutcCs�tj�}z�tjd�tjdd�\}}tjjdd�}tjd|jd||j	f�}|j
�|j�|j|j
�d�|j�|j�}|j|j
�d	�|j�|j�|jd
�Wdtj|�XdS)Ng�������?r�Trn�AF_INETrWr'r�i�rv)r�ZgetdefaulttimeoutZsetdefaulttimeoutr|r�rorqrXr1r0rir�r8r�rurl)r$Zold_timeout�parentr0rrrnrlr
r
rr�Ts"





zTestTimeouts.test_timeoutN)r+r,r-r�r1r�r
r
r
rr/Js	r/c@seZdZdd�ZdS)�TestNoForkBombcCs�tj�}tjjtjjt�d�}|dkr}tjj	j
||�\}}}|j|d�|jd|�nGtjj	j
||�\}}}|j|j�d�|j|d�dS)Nzmp_fork_bomb.py�forkr|sRuntimeErrors123)r|�get_start_methodrr�rlr�r�r�r��
script_helperZassert_python_failurer8rj�assert_python_okr�)r$Zsmr\�rc�outr�r
r
r�test_noforkbombms!!!zTestNoForkBomb.test_noforkbombN)r+r,r-r;r
r
r
rr4lsr4c@s.eZdZedd��Zdd�ZdS)�TestForkAwareThreadLockcCs||dkrXtjd|jd|d|f�}|j�|j�|jdd�n|jttj	��|j�dS)NrrWr'rrA)
r|rXr0rir�rlr�rRr�_afterfork_registry)r^r6rlrnr
r
rr0�s%

zTestForkAwareThreadLock.childcCs�tjd�\}}tj�}ttj�}tjd|jdd|f�}|j�|j	�|j
�}|jdd�|j||�dS)NFrWr'rAr)
r|r�rZForkAwareThreadLockrRr=rXr0rir�r�rlZassertLessEqual)r$r�r�rrZold_sizernZnew_sizer
r
rr��s!

z!TestForkAwareThreadLock.test_lockN)r+r,r-r�r0r�r
r
r
rr<}sr<c@sFeZdZdd�Zdd�Zedd��Zdd�Zd	S)
�TestCloseFdscCs�trtj�j�Stj�j�}g}x,|dkr\|j|�tj|�}q1Wx|D]}tj|�qdW|SdS)Nr)r�r��detachr�r�dupr�)r$r�Zto_closerxr
r
r�get_high_socket_fd�s

zTestCloseFds.get_high_socket_fdcCs0trtjd|�j�n
tj|�dS)NrJ)r�r�r�r)r$r�r
r
rr��szTestCloseFds.closecCsoytj|tjtj�}Wn2tk
rS}z|j|�WYdd}~XnX|j�|jd�dS)N)r�Zfromfdr2ZSOCK_STREAMr�r�r�)r^rlr�r	rmr
r
r�_test_closefds�s 
zTestCloseFds._test_closefdscCststjd��tj�\}}|j�}zUtjd|jd||f�}|j�|j	�|j
�}|jdd�Wd|j	|�|j	�|j	�Xtj�dkr�|j
|d�nAd}|j|t�|j|jtjkp|j|k|�dS)Nzrequires fd picklingrWr'rrAr5i6')rlrrr|r�rArXrBrir�r�rlr6r�rPr;rMr<r\Zwinerror)r$rRrSr�rnrmZWSAENOTSOCKr
r
r�test_closefd�s(



zTestCloseFds.test_closefdN)r+r,r-rAr�r�rBrCr
r
r
rr>�s
r>c@s�eZdZedd��Zejeed�d�dd��Z	edd��Z
ejeed�d�d	d
��ZdS)�TestIgnoreEINTRcCsZdd�}tjtj|�|jd�|j�}|j|�|jdd�dS)NcSsdS)Nr
)�signum�framer
r
rru�sz-TestIgnoreEINTR._test_ignore.<locals>.handler�ready�xii)ryr�r�r�rC)r^rlrurxr
r
r�_test_ignore�s

zTestIgnoreEINTR._test_ignorer�zrequires SIGUSR1cCs tj�\}}z�tjd|jd|f�}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�dd	�t	j
d�|j�Wd|j�XdS)
NrWr'TrGg�������?i�rHii)r|r�rXrIrOrir�r8r�r&rqrrr]ryr�r�rArl)r$rlr�rnr
r
r�test_ignore�s&	






zTestIgnoreEINTR.test_ignorec	Csedd�}tjtj|�tjj��0}|j|j�|j�}|jd�WdQRXdS)NcSsdS)Nr
)rErFr
r
rrusz6TestIgnoreEINTR._test_ignore_listener.<locals>.handler�welcome)ryr�r|rorqr�r0ru)r^rlrurrr4r
r
r�_test_ignore_listenersz%TestIgnoreEINTR._test_ignore_listenercCs�tj�\}}z�tjd|jd|f�}d|_|j�|j�|j�}tj	d�t
j|jt
j�tj	d�tjj|�}|j|j�d�|j�Wd|j�XdS)NrWr'Tg�������?rK)r|r�rXrLrOrir�r�r&rqrrr]ryr�rortr8rl)r$rlr�rnr0r�r
r
r�test_ignore_listeners	



z$TestIgnoreEINTR.test_ignore_listenerN)r+r,r-r�rIrrrxryrJrLrMr
r
r
rrD�s
'
rDc@s^eZdZedd��Zdd�Zdd�Zdd�Zd	d
�Zdd�Z	d
S)�TestStartMethodcCs|jtj��dS)N)r�r|r6)r^rlr
r
r�_check_contextszTestStartMethod._check_contextcCs�|jdd�\}}|jd|jd|f�}|j�|j�|j�}|j�|j�|j||j��dS)Nr�FrWr')	r�rXrOrir�r�rlr8r6)r$�ctxr�r�rnZchild_methodr
r
r�
check_context#s



zTestStartMethod.check_contextc
Cs�x�dD]�}ytj|�}Wntk
r7wYnX|j|j�|�|j|j�|�|jt|jd�|jt|jd�|j|�qWdS)Nr5�spawn�
forkserver)r5rRrS)	r|�get_contextrr8r6r�r��set_start_methodrQ)r$�methodrPr
r
rr�-s

zTestStartMethod.test_contextcCs$tjt�d}tj�}z�x�dD]�}ytj|dd�Wntk
r]w)YnX|jtj�|�tj�}|j|j�|�|jt	|�j
j�j|��|j|j
j
j�j|��|jt�|d7}q)WWdtj|dd�X|j|d�dS)	Nrr5rRrS�forceTr)r5rRrS)r|�set_forkserver_preload�PRELOADr6rUrr8rTrMrgr+�lower�
startswithrXrQr�)r$rWZ
old_methodrVrPr
r
r�test_set_get9s&


%
zTestStartMethod.test_set_getcCsctj�}tjdkr1|j|dg�n.|j|ddgkp[|dddgk�dS)Nr
rRr5rS)r|Zget_all_start_methodsr�rr8rM)r$Zmethodsr
r
r�test_get_allOs
zTestStartMethod.test_get_allcCs�tj�dkr|jd�tjjtjjt�d�}tj	j
j|�\}}}|j�}|j�}|j
�dks�|dkr�t|�t|�|jd�dS)NrSz*test only relevant for 'forkserver' methodz
mp_preload.py�okr?z(failed spawning forkserver or grandchild)r|r6rIrr�rlr�r�r�r�r7r8r,r�r%r�)r$r\r9r:r�r
r
r�test_preload_resourcesWs
!

z&TestStartMethod.test_preload_resourcesN)
r+r,r-r�rOrQr�r\r]r_r
r
r
rrNs
rNz*test semantics don't make sense on Windowsc@seZdZdd�ZdS)�TestSemaphoreTrackercCs�ddl}d}tj�\}}|jtjd|||fgd|gd|j�}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-cZpass_fdsr�rdr�Tr�g@zutf-8z9semaphore_tracker: There appear to be 2 leaked semaphoreszsemaphore_tracker: %r: \[Errno)r)r�pipe�Popenr�r*�PIPEr�r��readliner�r,rZ
sem_unlinkrwrr&rqr�r;rjZ	exceptionr<�ENOENTZEINVALr�r�ZassertRegex)r$r)�cmdr�r�rnr�Zname1Zname2rPr�r�r
r
r�test_semaphore_trackerks.		
"



"
z+TestSemaphoreTracker.test_semaphore_trackerN)r+r,r-rgr
r
r
rr`hsr`c@s.eZdZedd��Zdd�ZdS)�TestSimpleQueuec
CsF|j�z*|j|j��|j|j��Wd|j�XdS)N)rrDr�r�)r^r�r�r�r
r
r�_test_empty�s

zTestSimpleQueue._test_emptycCs�tj�}tj�}tj�}tjd|jd|||f�}d|_|j�|j|j��|j	�|j
�|j|j��|j|j
�d�|j|j
�d�|j|j��|j�dS)NrWr'TF)r|ZSimpleQueuerdrXrirOrirMr�r�rrZr8rkrl)r$r�r�r�r�r
r
r�
test_empty�s 			


zTestSimpleQueue.test_emptyN)r+r,r-r�rirjr
r
r
rrh�s
rhc@s'eZdZdZejZejZeej�Zeej	�Z	eej
�Z
eej�Zeej�Zeej
�Z
eej�Zeej�Zeej�Zeej�Zeej�Zeej�Zeej�Zeej�Zeej�Zeej�Zeej�ZdS)rr/N)r+r,r-rHr|rXro�staticmethodrKrfr�r�rcr�r�r�rrrrdrErr�rr�r
r
r
rr�s(		rc@s{eZdZdZejZeejd��Z	eejd��Z
eejd��Zeejd��Zeejd��Z
eejd��Zeejd��Zeejd	��Zeejd
��Zeejd��Zeejd��Zeejd
��Zeejd��Zeejd��Zedd��Zedd��Zedd��ZdS)�ManagerMixinr0z
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)r0r�)r^r'r(r
r
rr��szManagerMixin.PoolcCstj�|_dS)N)r|r�r0)r^r
r
rr��szManagerMixin.setUpClasscCs�d}x?ttj��dkrG|dkrGtj|�|d9}q	Wtj�|jj�dkr�t	d�t	|jj
��|jj�|jj�d|_dS)Ng{�G�z�?rrAr_rz5Shared objects which still exist at manager shutdown:)
rRr|rfr&rqr�r�r0Z_number_of_objectsr%Z_debug_infor%rl)r^r)r
r
rr��s'




zManagerMixin.tearDownClassN)r+r,r-rHr|rXr�operator�
attrgetterrcr�r�r�rrrrdrErr�rhr�r�r�r�r�r�r
r
r
rrl�s&	rlc@s<eZdZdZejjZejjZeejj	�Z	eejj
�Z
eejj�Zeejj�Zeejj
�Z
eejj�Zeejj�Zeejj�Zeejj�Zeejj�Zeejj�Zeejj�Zeejj�Zeejj�Zeejj�ZdS)�ThreadsMixinr1N)r+r,r-rHr|ZdummyrXrorkrKrfr�r�rcr�r�r�rrrrdrErr�r
r
r
rro�s$roc
s�|d}t�}dddh}xG|j�D]9\}}t|t�sMq/t|t�r|tkrkq/t|j�|ks�t|j��x�|jD]z}d|j	�|dd�}||j	�d}	Gdd	�d	||	t
j�}
||
_|
_
||
_|
||<q�Wq/t|t
j�r/Gd
d	�d	|t�}
||
_|
_
||
_|
||<q/Wddg�dg����fdd�}��fd
d�}||d<||d<dS)Nr+r/r1r0ZWithr�Mixinc@seZdZdS)z*install_tests_in_module_dict.<locals>.TempN)r+r,r-r
r
r
r�Temp"srqc@seZdZdS)z*install_tests_in_module_dict.<locals>.TempN)r+r,r-r
r
r
rrq(scstjt�tjj�tjjj��d<tjj��d<tjdd��d<ytj	�dd�Wn%t
k
r�tj�d��YnXt
jjd�r�ytj�}Wn!tk
r�tjd��YnXt�tj�tj�jt�dS)	NrrZ
allow_noneTrWz start method not supported�linuxz1OSError raises on RLock creation, see issue 3111!)r|rXrY�process�_cleanup�	_danglingrr�r6rUrrrr�rr[r�r;r rZget_temp_dirr�r�r�)r�)�dangling�old_start_method�start_methodr
r�setUpModule1s$


	

z1install_tests_in_module_dict.<locals>.setUpModulecs�tj�ddd�tjd�tjj�tj�ttjj	�t�d�}|rwt
d|dtj�~tt
j	�t�d�}|r�t
d|dtj�dS)	NrrWTg�?zDangling processes:�filerzDangling threads:)r|rUr&rqrsrtr�r�r�rur%r�r�r�)Ztmp)rvrwr
r�tearDownModuleGs


 z4install_tests_in_module_dict.<locals>.tearDownModuleryr{)�globalsr�rBrg�
issubclassr.r�r=rC�
capitalizer�TestCaser+r-r,r�)
Zremote_globsrxr,Zlocal_globsZ	ALL_TYPESr\�baseZtype_Znewnamerprqryr{r
)rvrwrxr�install_tests_in_module_dicts8
	$			
r�)�rr�r�r&r
r�r�rr�r<ryr�r�r�r�r)rmr�Ztest.supportr�Ztest.support.script_helperr��
import_modulerr�Zmultiprocessing.dummyr|rZmultiprocessing.managersZmultiprocessing.heapr
rrZHAVE_SEND_HANDLErl�ImportErrorZmultiprocessing.sharedctypesrrr r`rr�r�r�r2r�r�r��getattrZ
HAVE_GETVALUErr�rrrrgrYZctypesrrrr�r r!r.r?r@rGrXr�r�r�r�r�r�r�rr!r&r3r4rCrDrpr�r�r�r�r�r�rr�r�r�rrrrrrr�rrrr�registerr#rcr+r,r-r.r2r/r:rBr@rmrvr{rr�r�r�r�r�rr�r�r�r�r�r�r�r�r�r�r�r�rr
rr!r/r4r<r>rDrNr�r`rhrrlror�r
r
r
r�<module>s<




	
 
�N�6�29�ES<
	�1(17
0.�
0R�E6x+C"!� "B@J#(/