Your IP : 216.73.216.213


Current Path : /opt/alt/python34/lib64/python3.4/test/__pycache__/
Upload File :
Current File : //opt/alt/python34/lib64/python3.4/test/__pycache__/_test_multiprocessing.cpython-34.pyo

�
g f��-@s�	ddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddl
Z
ddlZddlZddlZddlZddlZejjd�Zejjd�ddlZddlZddlZddlZddlZddlZddlmZyddlmZej 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,r2dd
df\Z-Z.Z/ndddf\Z-Z.Z/e0edd�Z1ej2dkZ3ddlm4Z4dd�Z5yej6d�Z7WndZ7YnXddgZ8y ddl9m:Z:m;Z;m<Z<Wn"e"k
r�e=Z:dZ;Z<YnXdd�Z>Gdd�de=�Z?Gdd�de=�Z@dd �ZAGd!d"�d"e@�ZBGd#d$�d$ejC�ZDGd%d&�d&e@�ZEd'd(�ZFd)d*�ZGGd+d,�d,e@�ZHGd-d.�d.e@�ZIGd/d0�d0e@�ZJGd1d2�d2e@�ZKGd3d4�d4e@�ZLGd5d6�d6e=�ZMd7d8�ZNGd9d:�d:e=�ZOGd;d<�d<e=�ZPGd=d>�d>e@�ZQGd?d@�d@e@�ZRGdAdB�dBe@�ZSGdCdD�dDe@�ZTdEdFdG�ZUdHdI�ZVGdJdK�dKeW�ZXdLdM�ZYGdNdO�dOe@�ZZdPdQ�Z[dRdS�Z\GdTdU�dUe@�Z]GdVdW�dWe@�Z^ddXlm_Z_m`Z`maZaGdYdZ�dZe=�Zbd[d\�ZcGd]d^�d^e`�ZdGd_d`�d`e_�Zeeejfdadbeb�eejfdcdbebdddedff�eejfd\dbecdged�Gdhdi�die@�Zgejh�Zidjdk�ZjGdldm�dme_�Zkekjfdkdbej�Gdndo�doe_�Zleljfdk�dpZmGdqdr�dre@�ZnGdsdt�dte@�Zoe(du�ZpGdvdw�dwe@�ZqGdxdy�dye@�ZrGdzd{�d{e@�ZsGd|d}�d}e@�Ztejue!d~�Gdd��d�e@��ZvGd�d��d�e@�ZwGd�d��d�e:�ZxGd�d��d�e@�ZyGd�d��d�e@�ZzGd�d��d�ej{�Z|Gd�d��d�e@�Z}Gd�d��d�e@�Z~Gd�d��d�ej{�ZGd�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�ej2dkd��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/python34/lib64/python3.4/test/_test_multiprocessing.pyr?srg�������?g=
ףp=�?gffffff�?gffffff�?�HAVE_BROKEN_SEM_GETVALUE�win32)�waitcCs1|dk	r!|dkr!d}nt|g|�S)Ng)r)Zhandle�timeoutr
r
r�wait_for_handleZs	r�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_semaphoresrs		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�threadscCs tr|j||d�ndS)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)z	processeszmanagerr1)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@s�eZdZdZdd�Zdd�Zedd��Zd	d
�Zedd��Z	d
d�Z
dd�Zdd�Zedd��Z
dd�Zedd��Zdd�ZdS)�_TestProcessr/r1cCs�|jdkr+|jdj|j��n|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$�currentrEr
r
r�test_current�s	z_TestProcess.test_currentcCs�|jdkr+|jdj|j��n|jd|j�}|j|j|j�j�|jd|jdd�}|j|j�|jd|jdd�}|j	|j�dS)Nr1ztest not appropriate for {}�targetrHTF)
rArBrC�Process�_testr8rHrDrF�assertFalse)r$Zproc0Zproc1Zproc2r
r
r�test_daemon_argument�sz!_TestProcess.test_daemon_argumentcOsr|j�}|j|�|j|�|j|j�|jdkrn|jt|j��|j|j�ndS)Nr1)rD�put�namerArJrE�pid)�cls�qr'r(rNr
r
rrR�s

z_TestProcess._testc	CsB|jd�}|j�}|ddf}idd6dd6}d}|jd|jd	|d
|d|�}d|_|j�}|jd
kr�|j|j|j�n|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�n|j�|j|jd�|j|j	�d�|j
||j��dS)Nr���hellogR���Q@ZbyeZSomeProcessrPr'�kwargsrVTr1Fr)�Queue�EventrQrRrHrDrAr8rErG�assertNotIn�active_childrenrF�type�listrM�start�assertIn�getrVrW�join)r$rY�er'r]rV�prNr
r
r�test_process�s<		
 
z_TestProcess.test_processcCstjd�dS)N�d)r&�sleep)rXr
r
r�_test_terminatesz_TestProcess._test_terminatecs|jdkr+|jdj|j��n|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 {}rPTrgr�alarmcstd���dS)Nzjoin took too long: %s)�RuntimeError)r')rir
r�handler2sz,_TestProcess.test_terminate.<locals>.handler�
Fr)rArBrCrQrmrHrdr8rGrerarMr!rgr6r#r&rl�	terminate�hasattr�signal�SIGALRMrnr`)r$rgrpZold_handlerr
)rir�test_terminates<	




z_TestProcess.test_terminatecCs[ytj�}Wntk
r*d}YnX|jt|�tk�|j|dk�dS)Nr)�multiprocessing�	cpu_countr7rFrb�int)r$Zcpusr
r
r�test_cpu_countHs
z_TestProcess.test_cpu_countcCs�|jt|j��t�|jdtjdtf�}|j||j��d|_	|j
�|j||j��|j�|j||j��dS)NrPr'T)
r8rbrarcrQr&rl�DELTAr`rHrdrerg)r$rir
r
r�test_active_childrenPs	

z!_TestProcess.test_active_childrencCsy|j|�t|�dkruxStd�D]B}|jd|jd|||gf�}|j�|j�q,WndS)NrZrPr')�sendrK�rangerQ�_test_recursionrdrg)rX�wconn�id�irir
r
rr]s
	
z_TestProcess._test_recursioncCs�|jdd�\}}|j|g�tjt�g}x#|j�r`|j|j��q>Wgdgddgddgdgddgddgg}|j||�dS)N�duplexFrr)	�Piperr&rlr{�poll�append�recvr8)r$�rconnr��result�expectedr
r
r�test_recursionhs
			z_TestProcess.test_recursioncCs|jd�dS)Ng$@)r)rX�eventr
r
r�_test_sentinel|sz_TestProcess._test_sentinelcCs�|jdkr+|jdj|j��n|j�}|jd|jd|f�}|jt��|jWdQX|j	�|j
|j�|j}|j|t
�|jt|dd��|j�|j�|jt|dd��dS)Nr1ztest not appropriate for {}rPr'rgr)rArBrCr_rQr��assertRaisesr�sentinelrd�
addCleanuprgrIryrSr�setrF)r$r�rir�r
r
r�
test_sentinel�s

	

z_TestProcess.test_sentinelN)z	processeszthreads)r+r,r-r=rOrT�classmethodrRrjrmrvrzr|rr�r�r�r
r
r
rr@�s
'4
r@c@s@eZdZdd�Zdd�Zdd�Zdd�Zd	S)
�_UpperCasercCs,tjj|�tj�\|_|_dS)N)rwrQr%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.runcCs|jj|�|jj�S)N)r�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�rHrdr8r�r�rg)r$Z
uppercaserr
r
r�test_subclassing�s		

z(_TestSubclassingProcess.test_subclassingc
Cs�|jdkr+|jdj|j��ntjj}|jtjj|�|jd|j	d|f�}|j
�|j�t|d��C}|j
�}|jd|�|jd|�|jd|�WdQXdS)	Nr1ztest not appropriate for {}rPr'�r�ZeroDivisionErrorztest_multiprocessing.pyz1/0 # MARKER)rArBrC�test�support�TESTFNr��unlinkrQ�_test_stderr_flushrdrg�open�readre)r$�testfn�proc�f�errr
r
r�test_stderr_flush�s

z)_TestSubclassingProcess.test_stderr_flushcCst|d�t_dddS)N�wrr)r��sys�stderr)rXr�r
r
rr��sz*_TestSubclassingProcess._test_stderr_flushcCs#t|d�t_tj|�dS)Nr�)r�r�r��exit)rX�reasonr�r
r
r�_test_sys_exit�sz&_TestSubclassingProcess._test_sys_exitcCsm|jdkr+|jdj|j��ntjj}|jtjj|�x�dddgdfdfD]�\}}|jd|j	d||f�}d	|_
|j�|jd
�|j
|j|�t|d��)}|j
|j�j�t|��WdQXqiWx_dD]W}|jdtjd|f�}d	|_
|j�|jd
�|j
|j|�qWdS)Nr1ztest not appropriate for {}rrZ��ignore thisrPr'T�r�F�)r�r)TFr�)rArBrCr�r�r�r�r�rQr�rHrdrgr8rMr�r��rstrip�strr�r�)r$r�r��coderir�r
r
r�
test_sys_exit�s$(!	

,
	

z%_TestSubclassingProcess.test_sys_exitN)z	processes)
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)rsr��qsize)rYr
r
r�queue_empty�s
r�cCs-t|d�r|j�S|j�|kSdS)N�full)rsr�r�)rY�maxsizer
r
r�
queue_full�s
r�c@s�eZdZedd��Zdd�Zedd��Zdd�Zed	d
��Zdd�Z	d
d�Z
edd��Zdd�Zdd�Z
dd�ZdS)�
_TestQueuecCs9|j�xtd�D]}|j�qW|j�dS)N�)rr~rfr�)rX�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�rPr'TFrrZr��r��rr)r^r_rQr�rHrdr8r�r�rU�
put_nowaitr&rlr{r!r��pyqueueZFullr6r#�TIMEOUT1�TIMEOUT2�TIMEOUT3r�rrg)r$ZMAXSIZEr�r�r�r�rUr�r
r
r�test_putsN			





z_TestQueue.test_putcCsL|j�|jd�|jd�|jd�|jd�|j�dS)NrZr�r�r�)rrUr�)rXr�r�r�r
r
r�	_test_getAs




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)NrPr'TFrZr�rrr�r�r)r^r_rQr�rHrdr8r�r�rr&rlr{rf�
get_nowaitr!r�r��Emptyr6r#r�r�r�rg)r$r�r�r�r�rfr�r
r
r�test_getKsB			



z_TestQueue.test_getcCs+x$tdd�D]}|j|�qWdS)Nrq�)r~rU)rXr�r�r
r
r�
_test_forksz_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)NrqrPr'Tr�F)r^r~rUr&rlr{rQr�rHrdr8rfr�r�r�rg)r$r�r�rir
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 implementedrr�rZ)r^r8r�r7rBrUrf)r$rYr
r
r�
test_qsize�s




z_TestQueue.test_qsizecCs8x1t|jd�D]}tjt�|j�qWdS)N)r�rfr&rlr{Z	task_done)rXrY�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)rPr')rQr�)�.0r�)r�r$r
r�
<listcomp>�s	z-_TestQueue.test_task_done.<locals>.<listcomp>r�Trq)�
JoinableQueuer~rHrdrUrg)r$Zworkersrir�r
)r�r$r�test_task_done�s
	


z_TestQueue.test_task_donecCs�tjj���d}t|dd��}|jd�WdQXtjjtj���8yt|�Wn"t	j
k
r�|jd�YnXWdQXWdQXdS)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�s
z)_TestQueue.test_no_import_lock_contentioncCsXtj�}tj�}|jtj|jdd�tj�|}|j|d�dS)NTg�������?g�(\���?)rwr^r&r�r�r�rf�assertGreaterEqual)r$rYrd�deltar
r
r�test_timeout�s
z_TestQueue.test_timeoutN)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_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)�RLockr8r�r�r��AssertionErrorro)r$r�r
r
r�
test_rlock�sz_TestLock.test_rlockcCs|j��WdQXdS)N)r�)r$r
r
r�test_lock_contexts
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)NrZTrrF)r;r?r8r�r�)r$�semr
r
r�_test_semaphoresz_TestSemaphore._test_semaphorecCsr|jd�}|j|�|j|j�d�|jdt|�|j|j�d�|jdt|�dS)NrZr�r�)�	Semaphorer�r8r�r;r?)r$r�r
r
r�test_semaphores
z_TestSemaphore.test_semaphorecCs |jd�}|j|�dS)NrZ)�BoundedSemaphorer�)r$r�r
r
r�test_bounded_semaphoresz%_TestSemaphore.test_bounded_semaphorecCs&|jdkr+|jdj|j��n|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)rArBrCr�r!r�r8r6r#r�r�r�)r$r�r�r
r
rr�%sz_TestSemaphore.test_timeoutN)r+r,r-r�r�r�r�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)rX�cond�sleeping�wokenrr
r
rr�>s




z_TestCondition.fcCst|jdkrpyI|jj�|jj�}|j|d�|j|jj�d�Wqptk
rlYqpXndS)Nr/r)rAZ_sleeping_countr?Z_woken_countr8Z_wait_semaphorer7)r$r�Zsleepersr
r
r�check_invariantFs
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)NrrPr'TrrZ)�	Conditionr�rQr�rHrdr��Threadr�r&rlr{r;r?�notifyr�r�rg)r$r�r�r�rir
r
r�test_notifyQs2$	
$	












z_TestCondition.test_notifycCss|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�xQtd�D]C}yt|�dkr'PnWntk
r=PYnXtjt�qW|jdt|�|j
|�dS)Nrr�rPr'Tr�rq)r�r�r~rQr�r�rHrdr�r�r�r;r?r�r&rlr{Z
notify_allr�r7)r$r�r�r�r�rir)r
r
r�test_notify_all|sR	
	
$	
$	




z_TestCondition.test_notify_allcCsb|j�}t|j�}|j�|t�}|j�|j|d�|j|jt�dS)NF)	r�r!rr�r�r�r8r6r#)r$r�rr:r
r
rr��s

z_TestCondition.test_timeoutcse|�Yd�_|j�|j�fdd��}|sK�jdkr[tjd�nWdQXdS)Nrcs
�jdkS)Nr�)r9r
)�stater
r�<lambda>�sz0_TestCondition._test_waitfor_f.<locals>.<lambda>r�r)r9r��wait_forr�r�)rXr�rr�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�WdQXxGt
d	�D]9}tjd
�|��j	d7_	|j
�WdQXq�W|jd�|j|j��|j|jd�dS)
Nr�rrPr'Tcs
�jdkS)Nr)r9r
)rr
rr�sz-_TestCondition.test_waitfor.<locals>.<lambda>rr�g{�G�z�?r�r)r�rrQrrHrdrrFr8r9r~r&rlr�rgrSrGrM)r$r�rir�r�r
)rr�test_waitfor�s"!	



z_TestCondition.test_waitforcs�|j�|�d}tj�}|j�fdd�d|�}tj�|}|r�|d|koz|dknr�d|_nWdQXdS)Ng�������?cs
�jdkS)Nr�)r9r
)rr
rr�sz8_TestCondition._test_waitfor_timeout_f.<locals>.<lambda>rg333333�?g$@T)r�r&rr9)rXr�r�successr�r�Zdtr�r
)rr�_test_waitfor_timeout_f�s
!+z&_TestCondition._test_waitfor_timeout_fcCs�|j�}|jdd�}|jdd�}|jd�}|jd|jd||||f�}d|_|j�|j|jdd��xGt	d	�D]9}t
jd
�|�|jd7_|j
�WdQXq�W|jd�|j|j�dS)
Nr�rFrPr'Trrqr�g{�G�z�?rr�)r�rr�rQrrHrdrFr�r~r&rlr9r�rg)r$r�rrr�rir�r
r
r�test_waitfor_timeout�s 	


z#_TestCondition.test_waitfor_timeoutc	CsJ|�|j�WdQXtjd�|dk	rFtj|tj�ndS)Nr)r�r&rlr�killrt�SIGINT)rX�crWr
r
r�_test_wait_results

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�n|j�WdQXdS)Nr
rg�������?rPr'rq)�
isinstance�ProcessesMixinr��platformrrLr�rSrrQrrdrFr��KeyboardInterruptrg)r$rWrrir
r
r�test_wait_results!
z_TestCondition.test_wait_result)r+r,r-r�r�r�r�rr�rr�
skipUnless�HAS_SHAREDCTYPESrrrrrr
r
r
rr�<s+A		r�c@s.eZdZedd��Zdd�ZdS)�
_TestEventcCstjt�|j�dS)N)r&rlr�r�)rXr�r
r
r�_test_event+s
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)NFgTrPr')r_r!rr8Zis_setr6r#r�r��clearrQrrHrd)r$r�rrir
r
r�
test_event0s$

	
z_TestEvent.test_eventN)r+r,r-r�rrr
r
r
rr)src@sLeZdZdd�Zdd�Zdd�Zdd�Zd	d
�ZdS)�
_DummyListcCsKtjjtjd��}tj�}|j||f�d|jd<dS)Nr�r)rw�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
rrcsz_DummyList.__setstate__cCs|j|jfS)N)rr )r$r
r
r�__getstate__gsz_DummyList.__getstate__cCs%|j�|jdd7<WdQXdS)Nrr)r r)r$�_r
r
rr�js
z_DummyList.appendc	Cs|j�|jdSWdQXdS)Nr)r r)r$r
r
r�__len__ns
z_DummyList.__len__N)r+r,r-r%rr"r�r$r
r
r
rr[s
rcCstjd�dS)Ng{�G�z�?)r&rlr
r
r
r�_waitrsr%c@sUeZdZdZddd�Zdd�Zdd�Zd	d
�Zdd�Zd
S)�Bunchz
    A bunch of threads.
    FcCs�||_||_||_|j�|_|j�|_|j�|_|s^|jj�nx<t	|�D].}|j
d|j�}d|_|j
�qkWdS)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.
        rPTN)r�r'�n�	DummyList�started�finishedr_�	_can_exitr�r~rQ�taskrHrd)r$�	namespacer�r'r'Zwait_before_exitr�rir
r
rr%{s				zBunch.__init__cCsXtj�}|jj|�z|j|j�Wd|jj|�|jjd�XdS)N�)	rrLr)r�r�r'r*r+r)r$rWr
r
rr,�sz
Bunch.taskcCs*x#t|j�|jkr%t�qWdS)N)rKr)r'r%)r$r
r
r�wait_for_started�szBunch.wait_for_startedcCs*x#t|j�|jkr%t�qWdS)N)rKr*r'r%)r$r
r
r�wait_for_finished�szBunch.wait_for_finishedcCs|jj�dS)N)r+r�)r$r
r
r�	do_finish�szBunch.do_finishN)	r+r,r-�__doc__r%r,r/r0r1r
r
r
rr&ws
r&c@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
rr3�sr3c@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.
    r�g>@cCs"|j|jd|j�|_dS)Nr)�Barrier�N�defaultTimeout�barrier)r$r
r
r�setUp�sz_TestBarrier.setUpcCs|jj�d|_dS)N)r8�abort)r$r
r
r�tearDown�s
z_TestBarrier.tearDowncCs:|jdkrgS|jdkr/|jj�St�SdS)Nr1r0)rAr0rcr)r$r
r
rr(�s

z_TestBarrier.DummyListcCs4t||||jd�}||�|j�dS)Nr)r&r6r0)r$r�r'r5r
r
r�run_threads�s
z_TestBarrier.run_threadscCss|j}xJt|�D]<}|djd�|j�|djd�|j�qWyWntk
rnYnXdS)NrTr)�partiesr~r�rr7)rXr8�resultsr'�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)r(r<r@r8)r$�passesr>r
r
r�test_barrier�sz_TestBarrier.test_barriercCs
|jd�S)zC
        Test that a barrier works for 10 consecutive runs
        rq)rB)r$r
r
r�test_barrier_10�sz_TestBarrier.test_barrier_10cCs|j�}|j|�dS)N)rrU)rXr8r�r:r
r
r�_test_wait_return_f�s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
)rf)r�r�)r�r
rr��s	z1_TestBarrier.test_wait_return.<locals>.<listcomp>rrN)r^r<rDr8r~r6r8�count)r$r>r
)r�r�test_wait_return�s"z_TestBarrier.test_wait_returncCs)|j�t|�dkr%t�ndS)Nr)rrKro)rXr8r>r
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)r(r5r6r3r<rGr8rK)r$r>r8r
r
r�test_action�sz_TestBarrier.test_actioncCs�yC|j�}||jdkr+t�n|j�|jd�Wn=tjk
rg|jd�Yntk
r�|j�YnXdS)NrZT)rr6ror�r��BrokenBarrierErrorr:)rXr8�results1�results2r�r
r
r�
_test_abort_fs	

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)	r(r<rMr8r8rKr6rFZbroken)r$rKrLr
r
r�
test_abortsz_TestBarrier.test_abortcCs�|j�}||jdkrVx'|j|jdkrHtjd�q"W|j�n@y|j�|jd�Wn"tjk
r�|jd�YnX|j�|jd�dS)NrZrg����MbP?T)	rr6Z	n_waitingr&rl�resetr�r�rJ)rXr8rKrL�results3r�r
r
r�
_test_reset_fs


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)r(r<rQr8r8rKr6)r$rKrLrPr
r
r�
test_reset,sz_TestBarrier.test_resetcCs�yC|j�}||jdkr+t�n|j�|jd�Wn=tjk
rg|jd�Yntk
r�|j�YnX|j�|jdkr�|j�n|j�|j�|jd�dS)NrZT)rr6ror�r�rJr:rO)rXr8�barrier2rKrLrPr�r
r
r�_test_abort_and_reset_f9s	




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)r(r5r6r<rTr8r8rK)r$rKrLrPrSr
r
r�test_abort_and_resetOsz!_TestBarrier.test_abort_and_resetcCsi|j�}||jdkr/tjd�ny|jd�Wn"tjk
rd|jd�YnXdS)NrZg�?g�?T)rr6r&rlr�rJr�)rXr8r>r�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)r(r<rVr8r8rKr=)r$r>r
r
rr�isz_TestBarrier.test_timeoutcCsl|j|j�}||jdkr5tjd�ny|j�Wn"tjk
rg|jd�YnXdS)NrZg�?T)rr7r6r&rlr�rJr�)rXr8r>r�r
r
r�_test_default_timeout_fqsz$_TestBarrier._test_default_timeout_fcCsZ|j|jdd�}|j�}|j|j||f�|jt|�|j�dS)z4
        Test the barrier's default timeout
        rg�?N)r5r6r(r<rWr8rKr=)r$r8r>r
r
r�test_default_timeout|sz!_TestBarrier.test_default_timeoutcCs'|jd�}|j�|j�dS)Nr)r5r)r$r5r
r
r�test_single_thread�s
z_TestBarrier.test_single_threadc
Cs?x8t|�D]*}|j�|�|j|�WdQXq
WdS)N)r~rr})rXr8rA�connr�r�r
r
r�_test_thousand_f�s
z_TestBarrier._test_thousand_fc	Cs�|jdkr+|jdj|j��nd}|j�}|jd�\}}xKt|j�D]:}|jd|jd|j	|||f�}|j
�qbWxDt|�D]6}x-t|j�D]}|j|j�|�q�Wq�WdS)Nr0ztest not appropriate for {}i�FrPr')
rArBrCr�r�r~r6rQr[r8rdr8r�)r$rAr�rZr��jrir�r
r
r�
test_thousand�sz_TestBarrier.test_thousandN)r+r,r-r2r6r7r9r;r(r<r�r@rBrCrDrFrGrIrMrNrQrRrTrUrVr�rWrXrYr[r]r
r
r
rr4�s6		

	r4c@s�eZdZdZdddded�ed
�fgZdd�Zedd��Zddd�Z	dd�Z
dd�ZdS) �
_TestValuer/r���^�d�
@g@�h����r�x�ycCsts|jd�ndS)Nz%requires multiprocessing.sharedctypes)rrB)r$r
r
rr9�sz_TestValue.setUpcCs4x-t||j�D]\}}|d|_qWdS)NrZ)�zip�codes_valuesr9)rX�values�sv�cvr
r
rrR�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�r�r9r#)r$r
rr��s	z)_TestValue.test_value.<locals>.<listcomp>cs+g|]!\}}}�j||��qSr
)r)r�r�r9r#)r$r
rr��s	rrPr'TrZ)	rirhr8r9rQrRrHrdrg)r$�rawrjrkrlr�r
)r$r�
test_value�s
	

z_TestValue.test_valuecCs|jdd�dS)NrnT)ro)r$r
r
r�
test_rawvalue�sz_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�r�r�F�get_lock�get_objZnavalue)
rrqrrr�r8rSrsr�rrm)
r$Zval1�lock1�obj1Zval2�lock2�obj2r�Zval3�lock3�obj3�arr4�arr5r
r
r�test_getobj_getlock�s$z_TestValue.test_getobj_getlockN)z	processes)r�r_r`��)rarbr|����)rcr}re)r+r,r-r=rrir9r�rRrorpr{r
r
r
rr^�sr^c@s�eZdZdZedd��Zejedkd�ddd��Z	ejedkd�d	d
��Z
ejedkd�dd��Zejedkd�d
d��ZdS)�
_TestArrayr/cCs:x3tdt|��D]}||||d7<qWdS)Nr)r~rK)rX�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�rZr�rr�r�rPr'T)�RawArray�Arrayr8rKrc�arrayr�rQrHrdrg)r$rnr�arrrir
r
r�
test_array�s$06 
	

z_TestArray.test_arraycCs�d}x�td�D]�}|jd|�}|jt|�|�|jt|�dg|�td�|dd�<|jt|�ttd���~qWdS)Nrqr�r�r)r~r�r8rKrc)r$�sizer#r�r
r
r�test_array_from_sizes"z_TestArray.test_array_from_sizecCs|jdd�dS)NrnT)r�)r$r
r
r�
test_rawarraysz_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�rqr�FrqrrZnotalock)r�rcr~rqrrr�r8rSrsr�rr�)
r$Zarr1rsrtZarr2rurvr�Zarr3rwrxryrzr
r
r�test_getobj_getlock_objs&$$	z"_TestArray.test_getobj_getlock_obj)z	processes)
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)
Nrqr�rZr�r�rrr�r�r��	r\)rcr~r8�extendr�)r$r4r5rarhr�r
r
r�	test_list@s(&&#
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>dsz,_TestContainers.test_dict.<locals>.<genexpr>cSsg|]}t|��qSr
)r�)r�r�r
r
rr�fs	z-_TestContainers.test_dict.<locals>.<listcomp>cSs"g|]}|t|�f�qSr
)r�)r�r�r
r
rr�gs	)
�dictrcr~r�r8r�sorted�keysrj�items)r$ra�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')rV�job)r�r�)�	NamespacerVr�Z_hiddenr8r�rFrs)r$r'r
r
r�test_namespaceis			z_TestContainers.test_namespaceN)zmanager)r+r,r-r=r�r�r�r
r
r
rr�<s
r�gcCstj|�||S)N)r&rl)rfrr
r
r�sqrxs
r�cCs||S)Nr
)rfrgr
r
r�mul|sr�c@seZdZdS)�SayWhenErrorN)r+r,r-r
r
r
rr�sr�ccs;x4t|�D]&}||kr.td��n|Vq
WdS)NzSomebody said when)r~r�)ZtotalZwhenr�r
r
r�exception_throwing_generator�sr�csTeZdZe�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(�Zed)d*��Zd+d,�Zed-d.��Zd/d0�Z�S)1�	_TestPoolcs#t�j�|jd�|_dS)Nr�)�super�
setUpClass�Pool�pool)rX)�	__class__r
rr��s
z_TestPool.setUpClasscs4|jj�|jj�d|_t�j�dS)N)r�rrrgr��
tearDownClass)rX)r�r
rr��s

	z_TestPool.tearDownClasscCs[|jj}|j|td�td��|j|tfidd6�tdd��dS)Nr�r�rf)r�)r��applyr8r�)r$Zpapplyr
r
r�
test_apply�sz_TestPool.test_applycCs�|jj}|j|tttd���tttttd�����|j|tttd��dd�tttttd�����dS)Nrqrk�	chunksizer�)r��mapr8r�rcr~)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)Nrqr�rrk�cr�r�rrrr)r��starmaprcrhr~r8r��	itertools)r$Zpsmap�tuplesr
r
r�test_starmap�s''z_TestPool.test_starmapcCsbtttd�tddd���}|j|jjt|�j�ttj	t|���dS)Nrkr�rrr)
rcrhr~r8r�Z
starmap_asyncr�rfr�r�)r$r�r
r
r�test_starmap_async�s'z_TestPool.test_starmap_asynccCsP|j|jjtttd���j�tttttd�����dS)Nrq)r8r��	map_asyncr�rcr~rfr�)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_callbackrrr4rZ)rAr0rcr�r�ryr�rr8rKrIr)r$�	call_argsr
r
r�test_map_async_callbacks�s$		z"_TestPool.test_map_async_callbackscCsx|jdkr+|jdj|j��nGdd�dt�}|jt��"|jjt|�gd�WdQXdS)Nr1ztest not appropriate for {}c@seZdZdd�ZdS)z*_TestPool.test_map_unplicklable.<locals>.AcSstd��dS)Nz
cannot pickle)ro)r$r
r
rr<�sz5_TestPool.test_map_unplicklable.<locals>.A.__reduce__N)r+r,r-r<r
r
r
r�A�sr�rq)	rArBrC�objectr�ror�r�r�)r$r�r
r
r�test_map_unplicklable�s
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�rfr�rw�TimeoutErrorr�)r$r
r
r�test_map_chunksize�s)z_TestPool.test_map_chunksizecCsT|jjtdtf�}t|j�}|j|�d�|j|jt�dS)Nr��1)	r��apply_asyncr�r�r!rfr8r6r#)r$r:rfr
r
r�
test_async�sz_TestPool.test_asynccCs^|jjtdtdf�}t|j�}|jtj|dt�|j	|j
t�dS)Nr�g�?r)r�r�r�r�r!rfr�rwr�r6r#)r$r:rfr
r
r�test_async_timeout�sz_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)Nrqi�r�rk)r��imapr�rcr~r8r��nextr��
StopIteration�__next__)r$�itr�r
r
r�	test_imap�s!1!'z_TestPool.test_imapcCs^|jdkr+|jdj|j��n|jjttdd�d�}x.td�D] }|jt	|�||�qYW|j
t|j�|jjttdd�d�}x.td	�D] }|jt	|�||�q�W|j
t|j�|jjttdd�d
�}x.td
�D] }|jt	|�||�q#W|j
t|j�dS)Nr0ztest not appropriate for {}rqr�rr�r�rZr�r�)
rArBrCr�r�r�r�r~r8r�r�r�r�)r$r�r�r
r
r�#test_imap_handle_iterable_exception�s!!!z-_TestPool.test_imap_handle_iterable_exceptioncCs�|jjtttd���}|jt|�tttttd�����|jjtttd��dd�}|jt|�tttttd�����dS)Ni�r��5)r��imap_unorderedr�rcr~r8r�r�)r$r�r
r
r�test_imap_unordered�s!1'z_TestPool.test_imap_unorderedcCs_|jdkr+|jdj|j��n|jjttdd�d�}ttttt	d����}|j
t��Ex=t	d�D]/}t|�}|j
||�|j|�q�WWdQX|jjttdd�d�}ttttt	d����}|j
t��Ex=t	d�D]/}t|�}|j
||�|j|�q"WWdQXdS)	Nr0ztest not appropriate for {}rqr�rr�r�rZ)rArBrCr�r�r�r�rcr�r~r�r�r�re�remove)r$r�Zexpected_valuesr�r9r
r
r�-test_imap_unordered_handle_iterable_exceptions(	!	!z7_TestPool.test_imap_unordered_handle_iterable_exceptioncCsl|jttjd�|jttjd�tjd�}|jdt|j��|j�|j�dS)Nrrr�r)	r�rrwr�r8rK�_poolr�rg)r$rir
r
r�test_make_pools
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&rlr~rrr!rg�
assertLessr#)r$r�rgr
r
rrv%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�rcr�r�r�rfr�rg)r$rir
r
r�test_empty_iterable.s"""
z_TestPool.test_empty_iterablecCs�|jdkr�ttd��}dd�|D�}tjd��/}|jt|�}|j|j�|�WdQX|j	t
|jt|�ndS)Nr/rqcSsg|]}t|��qSr
)r�)r�r�r
r
rr�=s	z*_TestPool.test_context.<locals>.<listcomp>rZ)rArcr~rwr�r�r�r8rfr�r)r$�Lr�rir�r
r
r�test_context:sz_TestPool.test_contextcCstd��dS)N�{)ro)rXr
r
r�_test_tracebackCsz_TestPool._test_tracebackc&Cs=|jdkr9|jd��U}y|j|j�Wn+tk
rb}z|}WYdd}~Xn
Xtd��WdQX|jt|�t�|j	|j
d�|j}|jt|�tj
j�|jd|j�tjj��9}y
|�Wn%tk
rtjtj��YnXWdQX|jd|j��ndS)Nr/rzexpected RuntimeErrorr�z&raise RuntimeError(123) # some comment)r�)rAr�r�r��	Exceptionr��assertIsrbror8r'�	__cause__rwr�ZRemoteTracebackre�tbr�r�Zcaptured_stderrr��
excepthook�exc_info�getvalue)r$rirh�exc�cause�f1r
r
r�test_tracebackGs&	

	z_TestPool.test_tracebackcCstd��dS)N�foo)ro)rXr
r
r�_test_wrapped_exception`sz!_TestPool._test_wrapped_exceptioncCsB|jd��-}|jt��|j|j�WdQXWdQXdS)Nr)r�r�ror�r�)r$rir
r
r�test_wrapped_exceptiondsz _TestPool.test_wrapped_exception)r+r,r-r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rvr�r�r�r�r�r�r
r
)r�rr��s0	

			r�cCstd��dS)N�key)�KeyErrorr
r
r
r�raisingksr�cCs
dd�S)NcSsdS)N�*r
r
r
r
rrosz%unpickleable_result.<locals>.<lambda>r
r
r
r
r�unpickleable_resultnsr�c@s.eZdZdZdd�Zdd�ZdS)�_TestPoolWorkerErrorsr/cs�tjd�}dg��fdd�}|jtd|�}|jt|j�|j�d�|j�dt�|j	�|j
�dS)NrZcs|�d<dS)Nrr
)r�)�
scratchpadr
r�errbackxsz@_TestPoolWorkerErrors.test_async_error_callback.<locals>.errbackr�r)rwr�r�r�r�r�rfrFrIr�rg)r$rir�r:r
)r�r�test_async_error_callbackts	
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)�MaybeEncodingErrorrZr�cs|�d<dS)Nrr
)r�)r�r
rr��sz?_TestPoolWorkerErrors.test_unpickleable_result.<locals>.errbackr�)�multiprocessing.poolr�rwr�r~r�r�r�rfrFrIZassertIsNotNoner�r9r�rg)r$r�riZ	iterationr�r:�wrappedr
)r�r�test_unpickleable_result�s	


z._TestPoolWorkerErrors.test_unpickleable_resultN)z	processes)r+r,r-r=r�r�r
r
r
rr�qsr�c@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��maxtasksperchildrqcSsg|]}|j�qSr
)rW)r�r�r
r
rr��s	zE_TestPoolWorkerLifetime.test_pool_worker_lifetime.<locals>.<listcomp>rk�2css|]}|j�VqdS)N)rG)r�r�r
r
rr��szD_TestPoolWorkerLifetime.test_pool_worker_lifetime.<locals>.<genexpr>rcSsg|]}|j�qSr
)rW)r�r�r
r
rr��s	)rwr�r8rKr�r~r�r�r��	enumeraterfZ_repopulate_pool�allr&rlr{r`ZassertNotEqualr�r�rg)	r$riZorigworkerpidsr>r�r\r:Z	countdownZfinalworkerpidsr
r
r�test_pool_worker_lifetime�s&  
&

z1_TestPoolWorkerLifetime.test_pool_worker_lifetimecCs�tjddd�}g}x3td�D]%}|j|jt|df��q(W|j�|j�x6t|�D](\}}|j	|j
�t|��qrWdS)Nr�r�rr�g333333�?)rwr�r~r�r�r�r�rgr�r8rf)r$rir>r�r\r:r
r
r�%test_pool_worker_lifetime_early_close�s#

z=_TestPoolWorkerLifetime.test_pool_worker_lifetime_early_closeN)z	processes)r+r,r-r=r�r�r
r
r
rr��sr�)�BaseManager�	BaseProxy�RemoteErrorc@s4eZdZdd�Zdd�Zdd�ZdS)�FooBarcCsdS)Nzf()r
)r$r
r
rr��szFooBar.fcCs
t�dS)N)r)r$r
r
r�g�szFooBar.gcCsdS)Nz_h()r
)r$r
r
r�_h�sz	FooBar._hN)r+r,r-r�r�rr
r
r
rr��sr�ccs$xtd�D]}||Vq
WdS)Nrq)r~)r�r
r
r�baz�src@s.eZdZdZdd�Zdd�ZdS)�
IteratorProxyr�cCs|S)Nr
)r$r
r
r�__iter__�szIteratorProxy.__iter__cCs
|jd�S)Nr�)�_callmethod)r$r
r
rr��szIteratorProxy.__next__N)z__next__)r+r,r-Z	_exposed_rr�r
r
r
rr�src@seZdZdS)�	MyManagerN)r+r,r-r
r
r
rr�sr�Foo�callable�BarZexposedr�rZ	proxytypec@sFeZdZdZdd�Zdd�Zdd�Zdd	�Zd
S)�_TestMyManagerr0cCsDt�}|j�|j|�|j�|j|jjd�dS)Nr)rrd�common�shutdownr8�_processrM)r$r0r
r
r�test_mymanager�s
	


z_TestMyManager.test_mymanagerc	Cs9t��}|j|�WdQX|j|jjd�dS)Nr)rr
r8rrM)r$r0r
r
r�test_mymanager_context�sz%_TestMyManager.test_mymanager_contextc	CsGt�}|j�|�|j|�WdQX|j|jjd�dS)Nr)rrdr
r8rrM)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
)rs)r�rV)r�r
rr�s	z)_TestMyManager.common.<locals>.<listcomp>r�r�rcs%g|]}t�|�r|�qSr
)rs)r�rV)�barr
rr�s	zf()z_h()cSsg|]}||�qSr
r
)r�r�r
r
rr�s	rq)r�r��_h)r�r�r)
rrrr8r�r�rr�rr�rrcr~)r$r0rZfoo_methodsZbar_methodsr
)rr�rr
s z_TestMyManager.commonN)zmanager)r+r,r-r=r
rrr
r
r
r
rr	�s
r	cCstS)N)�_queuer
r
r
r�	get_queuesrc@seZdZdZdS)�QueueManagerz$manager class used by server processN)r+r,r-r2r
r
r
rr"src@seZdZdZdS)�
QueueManager2z@manager class which specifies the same interface as QueueManagerN)r+r,r-r2r
r
r
rr&srZ	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�addressrE�
serializer)r�
SERIALIZER�connectrrU�tuplerj)rXrrEr0r�r
r
r�_putter7s

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� rrrErrPr'T)r�urandomrr�r��HOSTrrdrQrrrHrrrr8rfr�r�r�rUr&rlr)r$rEr0riZmanager2r�r
r
r�test_remoteAs!
$	

z_TestRemoteManager.test_remote)zmanager)	r+r,r-r=rjr�r�rr r
r
r
rr-s	
rc@s.eZdZedd��Zdd�ZdS)�_TestManagerRestartcCsBtd|d|dt�}|j�|j�}|jd�dS)NrrErzhello world)rrrrrU)rXrrEr0r�r
r
rr_s

z_TestManagerRestart._puttercCsgtjd�}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�Wnetk
rX}zE|jtjkr�ntjd
�td|d|dt�}WYdd}~XnX|j�dS)NrrrrErrPr'Tzhello worldg�?)rrrr�r�rrZ
get_serverrZlistenerr�rdrQrrHrr8rfr�OSError�errnoZ
EADDRINUSEr&rl)r$rEr0Zsrvr�addrrir�rhr
r
r�test_rapid_restartgs2!	

$	


(z&_TestManagerRestart.test_rapid_restartN)r+r,r-r�rr%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�)rXrZ�msgr
r
r�_echo�sz_TestConnection._echocCs�|j�\}}|jd|jd|f�}d|_|j�dddg}td�}|d}tjdttd	���}|j	d
kr�|j
t|j��t
�n|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}~Xq�X|jd|
�nt|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
krs|j
|j#d�|j
|j$d�|j%t&|j�|j%t&|j�n|j'�dS)NrPr'Trg@zhello worldrqr�r�r/rr�� �(zexpected BufferTooShort, got %sFg�������?�Xi�r�rii)(r�rQr,rHrdrr�rcr~rAr8rb�filenoryr}r�r*r(rKZrecv_bytes_into�itemsize�	bytearrayrwZBufferTooShortr'r�r!r�r6r#r�r&rlr)r��readable�writabler��EOFErrorrg)r$rZr�rirr+Zlongmsgr��bufferr�r:rhr�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	�ndS)Nr�Frr/TrZ)
r�r8r}r�rAr4r5r�r"r�)r$�reader�writerr
r
r�test_duplex_false�sz!_TestConnection.test_duplex_falsecCs�|j�\}}|jd|jd|f�}d|_|j�|j�td�}|j|�|j|j	�|�|jt
�|j�|j�dS)NrPr'Tr\)r�rQr,rHrdr�rr*r8r(r)rg)r$rZr�rir+r
r
r�test_spawn_close�s	




z _TestConnection.test_spawn_closecCs�|jdkr+|jdj|j��ntd�}|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 {}Zabcdefghijklmnopqrstuvwxyzr�r�r��r&r��rr��rr)
rArBrCrr�r*r8r(r�r)r$r+r4r5r
r
r�test_sendbytes	s&
  z_TestConnection.test_sendbytescCsZytj|�Wn>tk
rQ}z|jtjkr<dS�WYdd}~XnXdSdS)NFT)r�fstatr"r#�EBADF)rX�fdrhr
r
r�_is_fd_assigned(	sz_TestConnection._is_fd_assignedFcCs�|rKxBtdd�D].}|j|�stj|j�|�qqWntj|�}trxtj|tj	�}ntj
||�tj|�dS)Nrr)r~rEr�dup2r1r�recv_handle�msvcrtZopen_osfhandle�O_WRONLYr�r�)rXrZ�dataZcreate_dummy_fdsr�rDr
r
r�_writefd3	s z_TestConnection._writefdz$test needs multiprocessing.reductioncCs!|jdkr|jd�n|jdd�\}}|jd|jd|df�}d|_|j�|jtj	j
tj	j�ttj	jd��A}|j
�}tr�tj|�}ntj|||j�WdQX|j�ttj	jd	��}|j|j�d�WdQXdS)
Nr/zonly makes sense with processesr�TrPr'sfoo�wb�rb)rArBr�rQrKrHrdr�r�r�r�r�r�r1rHZ
get_osfhandler�send_handlerWrgr8r�)r$rZr�rir�rDr
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 smallrFztest needs os.dup2()cCsk|jdkr|jd�n|jdd�\}}|jd|jd|ddf�}d|_|j�|jtj	j
tj	j�ttj	jd���}|j
�}x7td	t�D]}|j|�s�Pq�q�W|jd
�tj||�ztj|||j�Wdtj|�XWdQX|j�ttj	jd��}|j|j�d�WdQXdS)Nr/zonly makes sense with processesr�TrPr'sbarrLrz2could not find an unassigned large file descriptorrM)rArBr�rQrKrHrdr�r�r�r�r�r�r1r~�MAXFDrEr�rrFrrNrWr�rgr8r�)r$rZr�rir�rDZnewfdr
r
r�test_large_fd_transferR	s(	$	


z&_TestConnection.test_large_fd_transfercCstj|j�d�dS)Ns)rr�r1)r$rZr
r
r�_send_data_without_fds	sz%_TestConnection._send_data_without_fdzdoesn't make sense on WindowscCs�|jdkr|jd�n|jdd�\}}|jd|jd|f�}d|_|j�|jtt	j
|�|j�dS)Nr/zonly makes sense with processesr�TrPr')rArBr�rQrRrHrdr�rorrGrg)r$rZr�rir
r
r�test_missing_fd_transferw	s	
z(_TestConnection.test_missing_fd_transfercCs�|j�\}}|�g|�Z|jd�|j|j�d�|jdkru|j|j�|j|j�nWdQXWdQX|jdkr�|j|j�|j|j�|jt	|j�|jt	|j�ndS)Ni�r/)
r�r}r8r�rArS�closedrFr�r")r$r4r5r
r
rr��	s
z_TestConnection.test_contextN)z	processeszthreads)r+r,r-r=r�r,r8r;r<rArErKrr�
HAS_REDUCTIONrOr�r�rrPrsrrQrRrSr�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"r)r$rW�lr
r
r�test_multiple_bind�	s
z _TestListener.test_multiple_bindcCs�|jj��]}|jj|j��?}|j��*}|jd�|j|j�d�WdQXWdQXWdQX|jdkr�|j	t
|j�ndS)Ni�r/)rXrZ�Clientr�acceptr}r8r�rAr�r")r$r[rrar
r
rr��	s
(z_TestListener.test_contextN)z	processes)r+r,r-r=r\r�r
r
r
rrV�	srVc@sLeZdZdZedd��Zdd�Zdd�Zd	d
�ZdS)
�_TestListenerClientr/r1cCs-|jj|�}|jd�|j�dS)Nr\)rXr]r}r�)rXrrZr
r
rrR�	s
z_TestListenerClient._testcCs�x�|jjD]�}|jjd|�}|jd|jd|jf�}d|_|j�|j�}|j	|j
�d�|j�|j�q
WdS)NrWrPr'Tr\)
rXrYrZrQrRrrHrdr^r8r�rgr�)r$rWr[rirZr
r
r�test_listener_client�	s!	

z(_TestListenerClient.test_listener_clientcCs�|jj�}|jd|jd|jf�}d|_|j�tjd�|j	�}|j
|j�d�|j�|j
�|j�dS)NrPr'Trr\)rXrZrQrRrrHrdr&rlr^r8r�r�rg)r$r[rirZr
r
r�test_issue14725�	s!	



z#_TestListenerClient.test_issue14725cCs�x�|jjD]}}|jjd|�}|jj|j�}|j�}|jd�|j|jd��|j	�|j	�|j	�q
WdS)NrWshellor)
rXrYrZr]rr^r*rFr�r�)r$�famr[rr4r
r
r�test_issue16955�	s


z#_TestListenerClient.test_issue16955N)z	processeszthreads)	r+r,r-r=r�rRr`rarcr
r
r
rr_�	s
r_c@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�r*)r$r4r5r
r
r�test_empty_string�	s

z_TestPoll.test_empty_stringcCs9x(|D] }tjd�|j|�qW|j�dS)Ng�������?)r&rlr*r�)rXrZ�stringsr	r
r
r�_child_strings�	s

z_TestPoll._child_stringscCs�d}|j�\}}|jd|jd||f�}|j�xT|D]L}x'td	�D]}|jd
�r]Pq]q]W|j�}|j||�qJW|j�dS)N�hellore�a�b�bye�loprPr'��g{�G�z�?)rirerjrkrerlrerm)	r�rQrhrdr~r�r(r8rg)r$rgr4r5rir	r�rfr
r
r�test_strings�	s!

z_TestPoll.test_stringscCs|jd�dS)Nr�)r�)rXr�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)NFrPr'rZsfirstssecond)r�rQrprdr&rlr*r�rgrer()r$r�r�rir�r�r
r
r�test_boundaries
s




z_TestPoll.test_boundariescCs+|jd�|jd�|jd�dS)Nrjrkscd)r*)rXr5r
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�������?rPr'rjg�?Trkscd)r�r8r�rQrrrdr(rg)r$r4r5rir
r
r�test_dont_merge
s
z_TestPoll.test_dont_mergeN)z	processeszthreads)r+r,r-r=rfr�rhrorprqrrrsr
r
r
rrd�	srdz$test needs multiprocessing.reductionc@sveZdZdZedd��Zedd��Zedd��Zdd	�Zed
d��Z	dd
�Z
dS)�_TestPicklingConnectionsr/cCs$ddlm}|jdd�dS)Nr)�resource_sharerrr�)rwrur�)rXrur
r
rr�2
sz&_TestPicklingConnections.tearDownClasscCs�x`|D]X}|jjd|�}|j|j�|j�}|j|�|j�|j�qWtj�}|jtj	j
df�|jd�|j|j��|j�\}}|j|�|j�|j�|j
�dS)NrWrr)rXrZr}rr^r��socket�bindr�r�r�listen�getsocknamer�)rXrZrYrbr[�new_connr$r
r
r�	_listener7
s 






z"_TestPicklingConnections._listenercCs�xOt|jd�D];\}}|jj|�}|j|j��|j�qW|j�\}}tj�}|j|�|j	|j��|j�|j�dS)N)
r�r�rXr]r}r�r�rvr�sendall)rXrZrr+�clientr
r
r�_remoteL
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�}
|
szPn|j|
�qaWdj|�}|j||	j
��|j�|jd�|j�|j�|j�|j�dS)	NrPr'TzThis connection uses family %s�asciiz$This connection uses a normal socketrkre)rXrYr�rQr{rHrdr�r~rr�r}r8r�rr�rg)r$rYZlconnZlconn0Zlpr�Zrconn0Zrprbr+rrzZbufr	r
r
r�
test_pickling[
sH!	

	


 





z&_TestPicklingConnections.test_picklingcCsZ|j�}|jd�|j�|j�}|j�}|j|d�|j�dS)Nzall is wellrZ)r�r}r�)rXrZr�r�r+r
r
r�child_access�
s

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)
NrPr'Tr�Fzall is wellZfoobarrZZfoobarfoobar)	r�rQr�rHrdr�r}r8r�)r$rZr�rir�r�r
r
r�test_access�
s 	








z$_TestPicklingConnections.test_accessN)z	processes)r+r,r-r=r�r�r{r~r�r�r�r
r
r
rrt-
s.rtc@s.eZdZdZdd�Zdd�ZdS)�	_TestHeapr/cCsd}d}g}xzt|�D]l}ttjdd�d�}tjj|�}|j|�t|�|krtj	|�}||=qqWtjjj
}g}d}	|jj�|j
|jj�xct|jj��D]L}
xC|
D];\}}}
|j|jj|�||
|
|df�q�Wq�WxT|jD]I\}}}
|j|jj|�||
|
|df�|	|
|7}	q:W|j�x�tt|�d�D]o}||dd�\}}}
||ddd�\}}}|j||kr
|dkp|
|k�q�WdS)	Ni�r�rri�Zfree�occupiedr�)r~ry�randomZlognormvariaterwrrr�rKZ	randrangeZ_heapr r�r�r�rcZ_len_to_seqrjZ_arenas�indexZ_allocated_blocks�sortrF)r$Z
iterationsZ	maxblocksZblocksr�r�r5rr�r�r�Zarenardr�ZnarenaZnstartZnstopr
r
r�	test_heap�
s:


!z_TestHeap.test_heapcCs�tj�s)tj�|jtj�ntj�}|jtj|�tjd�xJtd�D]<}tj	j
d�}tj	j
d�}||_||_qbWdS)Nrqi�r)�gc�	isenabled�enabler��disableZ
get_thresholdZ
set_thresholdr~rwrrZbuddy)r$Z
thresholdsr�r4r5r
r
r�test_free_from_gc�
s

	z_TestHeap.test_free_from_gcN)z	processes)r+r,r-r=r�r�r
r
r
rr��
s'r�c@s(eZdZdefdefgZdS)�_FoorfrgN)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�ndS)Nz%requires multiprocessing.sharedctypes)rrB)r$r
r
rr9sz_TestSharedCTypes.setUpcCsz|jd9_|jd9_|jd9_|jd9_|jd9_x(tt|��D]}||d9<q^WdS)NrZ)r9rfrgr~rK)rXrfrgr�r��stringr�r
r
r�_doublesz_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�rZrarqrr�r\rPr'T�g@r�g@Z
hellohellogUUUUUU�?gUUUUUU�?)rrr�r�rcr~rr9rQr�rHrdrgr8r3rfrg)	r$r�rfrgr�r�r�rir�r
r
r�test_sharedctypess"$*	

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)NrZg@r)r�rrfrgr8r3)r$r�rr
r
r�	test_copy)s		z_TestSharedCTypes.test_copyN)z	processes)
r+r,r-r=r9r�r�r�r�r�r
r
r
rr��
s
r�c@s4eZdZdZedd��Zdd�ZdS)�
_TestFinalizer/cCs�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rr'r4r5r�d10Zexitpriorityr�d01r�d02�d03rhrq�STOPrk)r4)r5)r)zd10)zd01)zd02)zd03)rhi����)r�i����)r�rZFinalizer}Z_exit_functionr�r�_exit)rXrZrr4r5Zclose_brr�r�r�r�r
r
r�_test_finalize9s0							

z_TestFinalize._test_finalizec	Cs�|j�\}}|jd|jd|f�}d|_|j�|j�dd�t|jd�D�}|j|ddd	d
ddd
g�dS)NrPr'TcSsg|]}|�qSr
r
)r�r�r
r
rr�gs	z/_TestFinalize.test_finalize.<locals>.<listcomp>r�r4r5r�r�r�r�rh)	r�rQr�rHrdrgr�r�r8)r$rZr�rir�r
r
r�
test_finalize_s	

z_TestFinalize.test_finalizeN)z	processes)r+r,r-r=r�r�r�r
r
r
rr�5s&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�us	z4_TestImportStar.get_module_names.<locals>.<listcomp>cSsg|]}d|�qS)zmultiprocessing.r
)r�r?r
r
rr�vs	zmultiprocessing.__init__rw)	�globrr��dirnamerw�__file__rgr�r�)r$r�Zfolder�pattern�files�modulesr
r
r�get_module_namesps

z _TestImportStar.get_module_namescCs|j�}tjdkrE|jd�|jd�|jd�n#|jd�tsh|jd�ntdkr�|jd�nxu|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�rUrr�r�rFrsr�)r$r�rV�mod�attrr
r
r�test_import{s$





z_TestImportStar.test_importN)r+r,r-r�r�r
r
r
rr�ns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)	rw�
get_logger�setLevelr�
SUBWARNINGrF�debug�info�	LOG_LEVEL)r$�loggerr
r
r�test_enable_logging�s

z _TestLogging.test_enable_loggingcCs#tj�}|j|j��dS)N)rwr�r}ZgetEffectiveLevel)rXrZr�r
r
r�_test_level�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)	Nr�%r�FrPr'T�level)rwr��loggingZ	getLoggerr�r�r�rQr�rHrdr8r�ZNOTSETr�)	r$ZLEVEL1ZLEVEL2r�Zroot_loggerZ
root_levelr9r:rir
r
r�
test_level�s&	
	

	

z_TestLogging.test_levelN)z	processes)r+r,r-r=r�r�r�r�r
r
r
rr��sr�c@sOeZdZd	Zedd��Zejee	d�d�dd��Z
dS)
�_TestPollEintrr/cCs$tjd�tj|tj�dS)Ng�������?)r&rlrr	rt�SIGUSR1)rXrWr
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>.recordrPr'rZr)rZ)
rrLrtr�rQr�rdr&rlrgrFr8rM)r$r�rWZ
oldhandlerZkillerrir
)r�r�test_poll_eintr�s	

z_TestPollEintr.test_poll_eintrN)z	processes)r+r,r-r=r�r�rrrsrtr�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)rwrXZ
Connectionr�rr"Z_handler�)r$rZr
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
rr(szQOtherTest.test_deliver_challenge_auth_failure.<locals>._FakeConnection.recv_bytescSsdS)Nr
)r$rJr
r
rr*szQOtherTest.test_deliver_challenge_auth_failure.<locals>._FakeConnection.send_bytesN)r+r,r-r(r*r
r
r
r�_FakeConnectionsr�sabc)r�r�rw�AuthenticationErrorrXZdeliver_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)rE)r$r
r
rr%szNOtherTest.test_answer_challenge_auth_failure.<locals>._FakeConnection.__init__cSs?|jd7_|jdkr(tjjS|jdkr;dSdS)NrrZssomething bogusre)rErwrXZ	CHALLENGE)r$r�r
r
rr(!s
zPOtherTest.test_answer_challenge_auth_failure.<locals>._FakeConnection.recv_bytescSsdS)Nr
)r$rJr
r
rr*(szPOtherTest.test_answer_challenge_auth_failure.<locals>._FakeConnection.send_bytesN)r+r,r-r%r(r*r
r
r
rr�sr�sabc)r�r�rwr�rXZanswer_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�initializer2sr�c@s@eZdZdd�Zdd�Zdd�Zdd�Zd	S)
�TestInitializerscCs1tj�|_|jj�|_d|j_dS)Nr)rw�Manager�mgrr�r�r�)r$r
r
rr96szTestInitializers.setUpcCs|jj�|jj�dS)N)r�rrg)r$r
r
rr;;s
zTestInitializers.tearDowncCsitjj�}|jt|jd�|jt|jf�|j|jj	d�|j
�|j�dS)Nr)rwZmanagersZSyncManagerr��	TypeErrorrdr�r�r8r�rrg)r$r?r
r
r�test_manager_initializer?s
z)TestInitializers.test_manager_initializercCsb|jttjdd�tjdt|jf�}|j�|j�|j|jj	d�dS)Nr�r)
r�r�rwr�r�r�r�rgr8r�)r$rir
r
r�test_pool_initializerGs


z&TestInitializers.test_pool_initializerN)r+r,r-r9r;r�r�r
r
r
rr�5sr�cCs2y|jdd�}Wntjk
r-YnXdS)N�blockF)rfr�r�)rY�itemr
r
r�_this_sub_processSsr�cCsHtj�}tjdtd|f�}d|_|j�|j�dS)NrPr'T)rwr^rQr�rHrdrg)rYr�ZsubProcr
r
r�
_test_processYs
	
r�cCs||S)Nr
)rfr
r
r�_afunc`sr�c	CsQtjdd�}|jtdddddddg�}|j�|j�dS)	Nr/r�rrZr�r�r�r�)rwr�r�r�r�rg)r�rfr
r
r�pool_in_processcs'
r�c@sFeZdZdd�Zedd��Zdd�Zdd�Zd	S)
�
_file_likecCs||_d|_dS)N)�	_delegate�_pid)r$Zdelegater
r
rr%js	z_file_like.__init__cCs7tj�}||jkr0||_g|_n|jS)N)rrLr��_cache)r$rWr
r
r�cachens
	z_file_like.cachecCs|jj|�dS)N)r�r�)r$rJr
r
rr�wsz_file_like.writecCs)|jjdj|j��g|_dS)Nr&)r�r�rgr�r�)r$r
r
r�flushzsz_file_like.flushN)r+r,r-r%�propertyr�r�r�r
r
r
rr�is	r�c@s4eZdZdd�Zdd�Zdd�ZdS)�TestStdinBadfiledescriptorcCs?tj�}tjdtd|f�}|j�|j�dS)NrPr')rwr^rQr�rdrg)r$r�r�r
r
r�test_queue_in_process�s
z0TestStdinBadfiledescriptor.test_queue_in_processcCs*tjdt�}|j�|j�dS)NrP)rwrQr�rdrg)r$rir
r
r�test_pool_in_process�s
z/TestStdinBadfiledescriptor.test_pool_in_processcsQtj�}t|���jd�tjd�fdd��}�j�dS)Nr�rPcs
�j�S)N)r�r
)�fliker
rr�sz:TestStdinBadfiledescriptor.test_flushing.<locals>.<lambda>)�io�StringIOr�r�rwrQr�)r$Zsior�r
)r�r�
test_flushing�s

z(TestStdinBadfiledescriptor.test_flushingN)r+r,r-r�r�r�r
r
r
rr�~sr�c@s�eZdZedd��Zddd�Zedd��Zddd	�Zd
d�Zdd
�Z	dd�Z
edd��Zdd�Zdd�Z
dS)�TestWaitcCs^xMtd�D]?}|r3tjtj�d�n|j|tj�f�q
W|j�dS)Nrqg�������?)r~r&rlr�r}rrLr�)rXr��slowr�r
r
r�_child_test_wait�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�FrPr'Tc3s+|]!}�D]}||jfVq
qdS)N)rW)r�r�ri)�procsr
rr��sz%TestWait.test_wait.<locals>.<genexpr>rq)�multiprocessing.connectionrr~rwr�rQr�rHrdr�r�r�rgr�r6r�r�r�r8)r$r�r�readersZmessagesr�r�r�rir+r�r
)r�r�	test_wait�s0!	



	


%zTestWait.test_waitcCsxtj�}|j|�xNtd�D]@}|rLtjtj�d�n|jd|jd��q&W|j�dS)Nrqg�������?z%s
r)	rvrr~r&rlr�r|rr�)rXrr�r	r�r
r
r�_child_test_wait_socket�s
z TestWait._child_test_wait_socketcCs�ddlm}tj�}|jtjjdf�|jd�|j�}g}g}i}xet	d�D]W}t
jd|jd||f�}	d|	_
|	j�|j|	�|j|	j�qmWx=t	d�D]/}|j�\}
}|j|
�g||
<q�W|j�xa|ruxT||�D]F}
|
jd�}|s]|j|
�|
j�q(||
j|�q(WqWdjd	d
�t	d�D��jd�}
x-|j�D]}|jd
j|�|
�q�WdS)Nr)rr�rPr'Trr&css|]}d|VqdS)z%s
Nr
)r�r�r
r
rr��sz,TestWait.test_wait_socket.<locals>.<genexpr>rqrre)r�rrvrwr�r�rrxryr~rwrQr�rHrdr�r�rgr^r�r�r�rrjr8)r$r�rr[r$r�r�Zdicr�rir�r#r+r��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)rr�rZg�?r�g�������?)	r�rrwr�r&r8r��
assertGreaterr})r$rr�r4r5rdr:r�r
r
r�test_wait_timeout�s
zTestWait.test_wait_timeoutcCs|j�tj|�dS)N)r�r&rl)rXr�Zperiodr
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)Nr�cSs
t|�S)N)r�)rfr
r
rr
sz>TestWait.test_wait_integer.<locals>.<lambda>.<locals>.<lambda>)r�)r[r
r
rr
sz,TestWait.test_wait_integer.<locals>.<lambda>rPr'rr�rZg�������?)r�rrwr�r�rQr�rdrIr�ryrFr�r&r8r�r�r}rrrg)r$rr�Zsorted_r�r4r5rirdr: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)r�rrwr�r&r8r�r�)r$rr4r5r)r:r
r
r�test_neg_timeout8
s
zTestWait.test_neg_timeoutN)r+r,r-r�r�r�r�r�r�r�r�r�r�r�r
r
r
rr��s
%+r�c@sLeZdZejed�dd��Zejed�dd��ZdS)�TestInvalidFamilyzskipped on Windowsc	Cs*|jt��tjjd�WdQXdS)Nz\\.\test)r�rrwrXrZ)r$r
r
r�test_invalid_familyI
sz%TestInvalidFamily.test_invalid_familyz skipped on non-Windows platformsc	Cs*|jt��tjjd�WdQXdS)Nz/var/test.pipe)r�rrwrXrZ)r$r
r
r�test_invalid_family_win32N
sz+TestInvalidFamily.test_invalid_family_win32N)	r+r,r-rr�r�r�rr�r
r
r
rr�G
sr�c@s@eZdZedd��Zedd��Zdd�ZdS)�	TestFlagscCs|jttj��dS)N)r}rr��flags)rXrZr
r
r�run_in_grandchildX
szTestFlags.run_in_grandchildcCs�ddl}tjdd�\}}tjd|jd|f�}|j�|j�}|j�|j�|j�t	t
j�|f}t|j
|��dS)Nrr�FrPr')�jsonrwr�rQr�rdr�rgr�rr�r��print�dumps)rXr�r�r�ri�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�progrJZchild_flagsrr
r
r�
test_flagsi
szTestFlags.test_flagsN)r+r,r-r�r�rrr
r
r
rr�W
s
r�c@s.eZdZedd��Zdd�ZdS)�TestTimeoutscCsQtjd�|jd�|j�tjj|�}|jd�|j�dS)Nrr�i�)r&rlr}r�rwrXr])rX�childrrZr
r
r�
_test_timeoutx
s



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�TrW�AF_INETrPr'r�i�rq)rvZgetdefaulttimeoutZsetdefaulttimeoutrwr�rXrZrQr
rrdr�r8r�r^rg)r$Zold_timeout�parentr	r[rirZr
r
rr��
s"





zTestTimeouts.test_timeoutN)r+r,r-r�r
r�r
r
r
rrw
s	rc@seZdZdd�ZdS)�TestNoForkBombcCs�tj�}tjjtjjt�d�}|dkrztjj	||�\}}}|j
|d�|jd|�nDtjj||�\}}}|j
|j
�d�|j
|d�dS)Nzmp_fork_bomb.py�forkresRuntimeErrors123)rw�get_start_methodrr�rgr�r�r�Z
script_helperZassert_python_failurer8reZassert_python_okr�)r$ZsmrV�rc�outr�r
r
r�test_noforkbomb�
s!zTestNoForkBomb.test_noforkbombN)r+r,r-rr
r
r
rr
�
sr
c@s.eZdZedd��Zdd�ZdS)�TestForkAwareThreadLockcCs||dkrXtjd|jd|d|f�}|j�|j�|jdd�n|jttj	��|j�dS)NrrPr'rr�)
rwrQr	rdr�rgr}rKr�_afterfork_registry)rXr'rZrir
r
rr	�
s%

zTestForkAwareThreadLock.childcCs�tjd�\}}tj�}ttj�}tjd|jdd|f�}|j�|j	�|j
�}|jdd�|j||�dS)NFrPr'r�r)
rwr�rZForkAwareThreadLockrKrrQr	rdr�r�rgZassertLessEqual)r$r�r�r[Zold_sizeriZnew_sizer
r
rr��
s!

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

zTestCloseFds.get_high_socket_fdcCs0trtjd|�j�n
tj|�dS)Nr1)r�rvr�r)r$rDr
r
rr��
szTestCloseFds.closecCsoytj|tjtj�}Wn2tk
rS}z|j|�WYdd}~XnX|j�|jd�dS)N)rvZfromfdrZSOCK_STREAMr�r}r�)rXrZrDr	rhr
r
r�_test_closefds�
s 
zTestCloseFds._test_closefdscCststjd��ntj�\}}|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 picklingrPr'rr�ri6')rUrrrwr�rrQrrdr�r�rgrr�rIr"rFr#rCZwinerror)r$r9r:rDrirhZWSAENOTSOCKr
r
r�test_closefd�
s(



zTestCloseFds.test_closefdN)r+r,r-rr�r�rrr
r
r
rr�
s
rc@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
rrpsz-TestIgnoreEINTR._test_ignore.<locals>.handler�ready�xii)rtr�r}r�r*)rXrZrprfr
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)
NrPr'Trg�������?i�rii)rwr�rQr rHrdr�r8r�r&rlrr	rWrtr�r}r(rg)r$rZr�rir
r
r�test_ignores&	






zTestIgnoreEINTR.test_ignorec	Csddd�}tjtj|�tjj��0}|j|j�|j�}|jd�WdQXdS)NcSsdS)Nr
)rrr
r
rrp0sz6TestIgnoreEINTR._test_ignore_listener.<locals>.handler�welcome)rtr�rwrXrZr}rr^)rXrZrpr[r4r
r
r�_test_ignore_listener.s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)NrPr'Tg�������?r")rwr�rQr#rHrdr�r�r&rlrr	rWrtr�rXr]r8rg)r$rZr�rirr}r
r
r�test_ignore_listener8s	



z$TestIgnoreEINTR.test_ignore_listenerN)r+r,r-r�r rrrsrtr!r#r$r
r
r
rrs
'
rc@sReZdZedd��Zdd�Zdd�Zdd�Zd	d
�ZdS)�TestStartMethodcCs|jtj��dS)N)r}rwr)rXrZr
r
r�_check_contextLszTestStartMethod._check_contextcCs�|jdd�\}}|jd|jd|f�}|j�|j�|j�}|j�|j�|j||j��dS)Nr�FrPr')	r�rQr&rdr�r�rgr8r)r$�ctxr�r�riZchild_methodr
r
r�
check_contextPs



zTestStartMethod.check_contextc
Cs�x�dD]�}ytj|�}Wntk
r7wYnX|j|j�|�|j|j�|�|jt|jd�|jt|jd�|j|�qWdS)Nr�spawn�
forkserver)zforkr)r*)	rw�get_contextrr8rr�r��set_start_methodr()r$�methodr'r
r
rr�Zs

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)	Nrrr)r*�forceTr)zforkzspawnz
forkserver)rw�set_forkserver_preload�PRELOADrr,rr8r+rFrbr+�lower�
startswithrQr(r�)r$rEZ
old_methodr-r'r
r
r�test_set_getfs&


%
zTestStartMethod.test_set_getcCsctj�}tjdkr1|j|dg�n.|j|ddgkp[|dddgk�dS)Nr
r)rr*)rwZget_all_start_methodsr�rr8rF)r$�methodsr
r
r�test_get_all|s
zTestStartMethod.test_get_allN)	r+r,r-r�r&r(r�r3r5r
r
r
rr%Ks

r%z*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	�}WdQXtj
|�|j�|j�tjd
�|jt��}	tj
|�WdQX|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�rM�closefdTrg@zutf-8z9semaphore_tracker: There appear to be 2 leaked semaphoreszsemaphore_tracker: %r: \[Errno)rr�pipe�Popenr�r�PIPEr�r��readliner�rrZ
sem_unlinkrrrr&rlr�r"reZ	exceptionr#�ENOENTZEINVALr�r�ZassertRegex)r$r�cmdr�r�rir�Zname1Zname2r'r�r�r
r
r�test_semaphore_tracker�s.		
!



"
z+TestSemaphoreTracker.test_semaphore_trackerN)r+r,r-r>r
r
r
rr6�sr6c@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-rArwrQrX�staticmethodrDrar�r�r^r�r�r�r�r�r�r_r5rr�rmr�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�)rXr'r(r
r
rr��szManagerMixin.PoolcCstj�|_dS)N)rwr�r0)rXr
r
rr��szManagerMixin.setUpClasscCs�d}x?ttj��dkrG|dkrGtj|�|d9}q	Wtj�|jj�dkr�t	d�t	|jj
��n|jj�|jj�d|_dS)Ng{�G�z�?rr�rZrz5Shared objects which still exist at manager shutdown:)
rKrwrar&rlr��collectr0Z_number_of_objectsr�Z_debug_inforrg)rXr)r
r
rr��s'




zManagerMixin.tearDownClassN)r+r,r-rArwrQr��operator�
attrgetterr^r�r�r�r�r�r�r_r5rr�rcr�r�r�r�r�r�r
r
r
rr@�s&	r@c@s9eZdZdZejjZejjZeejj	�Z	eejj
�Z
eej�Zeejj�Zeejj
�Z
eejj�Zeejj�Zeejj�Zeejj�Zeejj�Zeejj�Zeejj�Zeejj�Zeejj�Zeejj�ZdS)�ThreadsMixinr1N)r+r,r-rArwZdummyrQrXr?rDrar�r�r^r�r�r�r�r�r�r_r5rr�r
r
r
rrD�s$rDc
s�|d}t�}dddh}x,|j�D]\}}t|t�sPq/nt|t�r�|tkrqq/nx�|jD]z}d|j�|dd�}||j�d}	Gdd	�d	||	tj	�}
||
_
|
_||
_|
||<q{Wq/t|tj	�r/Gd
d	�d	|t
�}
||
_
|
_||
_|
||<q/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�TempsrFc@seZdZdS)z*install_tests_in_module_dict.<locals>.TempN)r+r,r-r
r
r
rrF$scs	tjt�tjj�tjjj��d<tjj��d<tjdd��d<ytj	�dd�Wn%t
k
r�tj�d��YnXt
jjd�r�ytj�}Wq�tk
r�tjd��Yq�Xnt�tj�tj�jt�dS)	NrrZ
allow_noneTr.z start method not supported�linuxz1OSError raises on RLock creation, see issue 3111!)rwr/r0�process�_cleanup�	_danglingrr�rr,rrrr�rr2r�r"r rZget_temp_dirr�r�r�)r�)�dangling�old_start_method�start_methodr
r�setUpModule-s$


	

z1install_tests_in_module_dict.<locals>.setUpModulecs�tj�ddd�tjd�tjj�tj�ttjj	�t�d�}|rzt
d|dtj�n~tt
j	�t�d�}|r�t
d|dtj�ndS)	Nrr.Tg�?zDangling processes:�filerzDangling threads:)rwr,r&rlrHrIr�rAr�rJr�r�r�r�)Ztmp)rKrLr
r�tearDownModuleCs


 z4install_tests_in_module_dict.<locals>.tearDownModulerNrP)�globalsr�r
rb�
issubclassr.r=�
capitalizer�TestCaser+r-r,r�)
Zremote_globsrMr,Zlocal_globsZ	ALL_TYPESrV�baseZtype_ZnewnamerErFrNrPr
)rKrLrMr�install_tests_in_module_dicts6
				
rV)�rr�r�r&r�r�r�rr�r#rtr�rvr�r�rrBZtest.supportr�Ztest.script_helperr��
import_modulerr�Zmultiprocessing.dummyrwr�Zmultiprocessing.managersZmultiprocessing.heapr�rrZHAVE_SEND_HANDLErU�ImportErrorZmultiprocessing.sharedctypesrrrrHrr�r�r{r2r�r�r��getattrZ
HAVE_GETVALUErr�rrrrPr0Zctypesrrrr�r r!r.r?r@rQr�r�r�r�r�r�r�r�rrr%r&r3r4r^r~r�r�r�rr�r�r�r�r�r�r�r�r�r�r�rrr�registerr	r^rrrrrrr!r)r'rVr_rdrrtr�r�r�r�rTr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rr
rrrr%r�r6rr@rDrVr
r
r
r�<module>s0




	
 
�F�6�2-�ES<�(17
0.�
0R�E69+C"!� "B@='/