B
    u9avq ã               @   sÈ  d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
Z
d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlmZ ej d¡Zej d¡ d dlZd dlZd dlZd dlZd dlZd dlZd dl Zd dlm!Z! yd dlm"Z" e"j#Z$W n e%k
r8   dZ$Y nX yd dl&m'Z'm(Z( d	Z)W n e%k
rl   dZ)Y nX yd dl*Z*W n e%k
r”   dZ*Y nX d
Z+dd„ Z,dd„ Z-dd„ Z.e!j/Z0dZ1dZ2e2rÒd\Z3Z4Z5n
d\Z3Z4Z5e6eddƒ Z7ej8dkZ9d dlm:Z: dd„ Z;ye <d¡Z=W n   dZ=Y nX ddgZ>yd dl?m@Z@mAZAmBZBmCZC W n& e%k
rr   eDZ@d ZA ZBZCY nX dd„ ZEG d d!„ d!eDƒZFG d"d#„ d#eDƒZGd$d%„ ZHG d&d'„ d'ƒZIG d(d)„ d)eGƒZJG d*d+„ d+ejKƒZLG d,d-„ d-eGƒZMd.d/„ ZNd0d1„ ZOG d2d3„ d3eGƒZPG d4d5„ d5eGƒZQG d6d7„ d7eGƒZRG d8d9„ d9eGƒZSG d:d;„ d;eGƒZTG d<d=„ d=eDƒZUd>d?„ ZVG d@dA„ dAeDƒZWG dBdC„ dCeDƒZXG dDdE„ dEeGƒZYG dFdG„ dGeGƒZZG dHdI„ dIeGƒZ[G dJdK„ dKeGƒZ\dÒdMdN„Z]dOdP„ Z^dQdR„ Z_dSdT„ Z`G dUdV„ dVeDƒZaG dWdX„ dXebƒZcdYdZ„ ZdG d[d\„ d\eGƒZed]d^„ Zfd_d`„ ZgG dadb„ dbeGƒZhG dcdd„ ddeGƒZid delmjZjmkZkmlZl G dfdg„ dgeDƒZmdhdi„ ZnG djdk„ dkekƒZoG dldm„ dmejƒZpepjqdnemdo epjqdpemdqdr epjqdieneods G dtdu„ dueGƒZre s¡ Ztdvdw„ ZuG dxdy„ dyejƒZvevjqdweudo G dzd{„ d{ejƒZwew qdw¡ d|ZxG d}d~„ d~eGƒZyG dd€„ d€eGƒZze,dƒZ{G d‚dƒ„ dƒeGƒZ|G d„d…„ d…eGƒZ}G d†d‡„ d‡eGƒZ~G dˆd‰„ d‰eGƒZe  €e$dŠ¡G d‹dŒ„ dŒeGƒƒZG ddŽ„ dŽeGƒZ‚G dd„ de@ƒZƒG d‘d’„ d’eGƒZ„G d“d”„ d”eGƒZ…G d•d–„ d–e j†ƒZ‡G d—d˜„ d˜eGƒZˆG d™dš„ dšeGƒZ‰G d›dœ„ dœe j†ƒZŠG ddž„ dže j†ƒZ‹dŸd „ ZŒG d¡d¢„ d¢e j†ƒZd£d¤„ ZŽd¥d¦„ Zd§d¨„ Zd©dª„ Z‘G d«d¬„ d¬eDƒZ’G d­d®„ d®e j†ƒZ“G d¯d°„ d°e j†ƒZ”G d±d²„ d²e j†ƒZ•G d³d´„ d´e j†ƒZ–G dµd¶„ d¶e j†ƒZ—G d·d¸„ d¸e j†ƒZ˜G d¹dº„ dºe j†ƒZ™G d»d¼„ d¼e j†ƒZšG d½d¾„ d¾e j†ƒZ›G d¿dÀ„ dÀe j†ƒZœe  ej8dkdÁ¡G dÂdÃ„ dÃe j†ƒƒZžG dÄdÅ„ dÅe j†ƒZŸG dÆdÇ„ dÇe j†ƒZ G dÈdÉ„ dÉeDƒZ¡G dÊdË„ dËe¡ƒZ¢G dÌdÍ„ dÍe¡ƒZ£G dÎdÏ„ dÏe¡ƒZ¤dÐdÑ„ Z¥dS )Óé    N)ÚsupportÚ_multiprocessingzmultiprocessing.synchronize)Úutil)Ú	reductionF)ÚValueÚcopyTg      N@c             C   s
   |   d¡S )NÚlatin)Úencode)Ús© r   ú+/usr/lib/python3.7/_test_multiprocessing.pyr   F   s    r   c             C   s"   t | tjjƒr|  ¡  |  ¡  d S )N)Ú
isinstanceÚmultiprocessingÚqueuesÚQueueÚcloseÚjoin_thread)Úqueuer   r   r   Úclose_queueJ   s    r   c             C   s   t j| td d S )N)Útimeout)r   r   ÚTIMEOUT)Úprocessr   r   r   Újoin_processP   s    r   gš™™™™™¹?)g=
×£p=ê?gffffffÖ?gffffffö?)gš™™™™™¹?gš™™™™™¹?gš™™™™™¹?ZHAVE_BROKEN_SEM_GETVALUEÚwin32)Úwaitc             C   s    |d k	r|dk rd }t | g|ƒS )Ng        )r   )Zhandler   r   r   r   Úwait_for_handlen   s    r   ÚSC_OPEN_MAXé   Ú__main__z$test.test_multiprocessing_forkserver)Ú	StructureÚc_intÚc_doubleÚ
c_longlongc           	   C   sR   d} yt  d¡}W n ttfk
r*   d S X |dks<|| kr@d S t d|  ¡‚d S )Nr   ÚSC_SEM_NSEMS_MAXéÿÿÿÿzHThe OS doesn't support enough semaphores to run the test (required: %d).)ÚosÚsysconfÚAttributeErrorÚ
ValueErrorÚunittestÚSkipTest)Z	nsems_minZnsemsr   r   r   Úcheck_enough_semaphores†   s    r+   c               @   s   e Zd Zdd„ Zdd„ ZdS )ÚTimingWrapperc             C   s   || _ d | _d S )N)ÚfuncÚelapsed)Úselfr-   r   r   r   Ú__init__›   s    zTimingWrapper.__init__c             O   s*   t  ¡ }z| j||ŽS t  ¡ | | _X d S )N)ÚtimeÚ	monotonicr-   r.   )r/   ÚargsÚkwdsÚtr   r   r   Ú__call__Ÿ   s    zTimingWrapper.__call__N)Ú__name__Ú
__module__Ú__qualname__r0   r6   r   r   r   r   r,   ™   s   r,   c               @   s,   e Zd ZdZdd„ Zdd„ Zdd„ ZeZdS )	ÚBaseTestCase)Ú	processesÚmanagerÚthreadsc             C   s   t r|  ||d¡ d S )Né   )ÚCHECK_TIMINGSÚassertAlmostEqual)r/   ÚaÚbr   r   r   ÚassertTimingAlmostEqual®   s    z$BaseTestCase.assertTimingAlmostEqualc             G   s2   y||Ž }W n t k
r    Y nX |  ||¡S d S )N)ÚNotImplementedErrorÚassertEqual)r/   Úvaluer-   r3   Úresr   r   r   ÚassertReturnsIfImplemented²   s
    z'BaseTestCase.assertReturnsIfImplementedc             G   s   t dƒ‚d S )Nz#shouldn't try to pickle a test case)rD   )r/   r3   r   r   r   Ú
__reduce__¼   s    zBaseTestCase.__reduce__N)r7   r8   r9   ÚALLOWED_TYPESrC   rH   rI   Ú__reduce_ex__r   r   r   r   r:   ª   s
   
r:   c             C   s^   y|   ¡ S  tk
rX   y| jS  tk
rR   y| jS  tk
rL   t‚Y nX Y nX Y nX d S )N)Ú	get_valuer'   Z_Semaphore__valueZ_valuerD   )r/   r   r   r   rL   Å   s    rL   c               @   s   e Zd Zdd„ ZdS )ÚDummyCallablec             C   s   |  d¡ d S )Né   )Úput)r/   ÚqÚcr   r   r   r6   Ö   s    zDummyCallable.__call__N)r7   r8   r9   r6   r   r   r   r   rM   Õ   s   rM   c               @   s0  e Zd ZdZdd„ Zdd„ Zedd„ ƒZdd	„ Zed
d„ ƒZ	edd„ ƒZ
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zedd„ ƒZdd„ Zedd„ ƒZdd„ ZedAd"d#„ƒZd$d%„ Zd&d'„ Zd(d)„ Zed*d+„ ƒZd,d-„ Zed.d/„ ƒZd0d1„ Zei fd2d3„ƒZd4d5„ Zd6d7„ ZedBd9d:„ƒZd;d<„ Z d=d>„ Z!d?d@„ Z"d!S )CÚ_TestProcess)r;   r=   c             C   sˆ   | j dkr|  d | j ¡¡ |  ¡ }|j}|  | ¡ ¡ |  |j ¡ |  |t	¡ |  t
|ƒdk¡ |  |jt ¡ ¡ |  |jd ¡ d S )Nr=   ztest not appropriate for {}r   )ÚTYPEÚskipTestÚformatÚcurrent_processÚauthkeyÚ
assertTrueÚis_aliveÚdaemonÚassertIsInstanceÚbytesÚlenrE   Zidentr%   ÚgetpidÚexitcode)r/   ÚcurrentrW   r   r   r   Útest_currentß   s    
z_TestProcess.test_currentc             C   sz   | j dkr|  d | j ¡¡ | j| jd}|  |j|  ¡ j¡ | j| jdd}|  |j¡ | j| jdd}|  	|j¡ d S )Nr=   ztest not appropriate for {})ÚtargetT)rb   rZ   F)
rS   rT   rU   ÚProcessÚ_testrE   rZ   rV   rX   ÚassertFalse)r/   Zproc0Zproc1Úproc2r   r   r   Útest_daemon_argumentí   s    
z!_TestProcess.test_daemon_argumentc             O   sR   |   ¡ }| |¡ | |¡ | |j¡ | jdkrN| t|jƒ¡ | |j¡ d S )Nr=   )rV   rO   ÚnamerS   r\   rW   Úpid)ÚclsrP   r3   r4   r`   r   r   r   rd   ù   s    


z_TestProcess._testc             C   sš  |   d¡}|  ¡ }|ddf}dddœ}d}| j| j|||d}d|_|  ¡ }| jd	krf|  |j|j¡ |  | 	¡ d
¡ |  |jd¡ |  
||  ¡ ¡ |  t|  ¡ ƒtk¡ |  |jd ¡ | ¡  |  |jd ¡ |  | 	¡ d¡ |  ||  ¡ ¡ |  | ¡ |dd … ¡ |  | ¡ |¡ |  | ¡ |j¡ | jd	krX|  | ¡ |j¡ |  | ¡ |j¡ | ¡  |  |jd¡ |  | 	¡ d
¡ |  
||  ¡ ¡ t|ƒ d S )Nr>   é   é   gR¸…ëQ@)ÚhelloZbyeZSomeProcess)rb   r3   Úkwargsrh   Tr=   Fr   )r   ÚEventrc   rd   rZ   rV   rS   rE   rW   rY   ÚassertNotInÚactive_childrenrX   ÚtypeÚlistr_   ÚstartÚassertInÚgetrh   ri   Újoinr   )r/   rP   Úer3   rn   rh   Úpr`   r   r   r   Útest_process  s>    



z_TestProcess.test_processc             C   s   t  d¡ d S )Néd   )r1   Úsleep)rj   r   r   r   Ú_sleep_some+  s    z_TestProcess._sleep_somec             C   s   t  |¡ d S )N)r1   r|   )rj   Údelayr   r   r   Ú_test_sleep/  s    z_TestProcess._test_sleepc          
      sˆ  | j dkr|  d | j ¡¡ | j| jd‰ dˆ _ˆ  ¡  |  ˆ  ¡ d¡ |  	ˆ |  
¡ ¡ |  ˆ jd ¡ tˆ jƒ}|  |dƒd ¡ |  |jd¡ |  ˆ  ¡ d¡ |  |dƒd ¡ |  |jd¡ |  ˆ  ¡ d¡ t d¡ |ˆ ƒ ttd	ƒr>‡ fd
d„}t tj|¡}zt d¡ |  |ƒ d ¡ W d t d¡ t tj|¡ X n|  |ƒ d ¡ |  |jd¡ |  ˆ  ¡ d¡ |  ˆ |  
¡ ¡ ˆ  ¡  ˆ jS )Nr=   ztest not appropriate for {})rb   Tr   g        r$   r>   Úalarmc                 s   t dˆ  ƒ‚d S )Nzjoin took too long: %s)ÚRuntimeError)r3   )ry   r   r   ÚhandlerQ  s    z+_TestProcess._kill_process.<locals>.handleré
   F)rS   rT   rU   rc   r}   rZ   rt   rE   rY   ru   rq   r_   r,   rw   rC   r.   r1   r|   ÚhasattrÚsignalÚSIGALRMr€   rp   )r/   Zmethrw   r‚   Zold_handlerr   )ry   r   Ú_kill_process3  s>    




z_TestProcess._kill_processc             C   s,   |   tjj¡}tjdkr(|  |tj ¡ d S )NÚnt)	r‡   r   rc   Ú	terminater%   rh   rE   r…   ÚSIGTERM)r/   r_   r   r   r   Útest_terminatef  s    
z_TestProcess.test_terminatec             C   s,   |   tjj¡}tjdkr(|  |tj ¡ d S )Nrˆ   )	r‡   r   rc   Úkillr%   rh   rE   r…   ÚSIGKILL)r/   r_   r   r   r   Ú	test_killk  s    
z_TestProcess.test_killc             C   sJ   yt  ¡ }W n tk
r$   d}Y nX |  t|ƒtk¡ |  |dk¡ d S )Nr>   )r   Ú	cpu_countrD   rX   rr   Úint)r/   Zcpusr   r   r   Útest_cpu_countp  s    
z_TestProcess.test_cpu_countc             C   sp   |   t|  ¡ ƒt¡ | jtjtfd}|  ||  ¡ ¡ d|_	| 
¡  |  ||  ¡ ¡ | ¡  |  ||  ¡ ¡ d S )N)rb   r3   T)rE   rr   rq   rs   rc   r1   r|   ÚDELTArp   rZ   rt   ru   rw   )r/   ry   r   r   r   Útest_active_childrenx  s    z!_TestProcess.test_active_childrenc             C   sV   |  |¡ t|ƒdk rRx:tdƒD ].}| j| j|||g fd}| ¡  | ¡  q W d S )Nrk   )rb   r3   )Úsendr]   Úrangerc   Ú_test_recursionrt   rw   )rj   ÚwconnÚidÚiry   r   r   r   r–   …  s    
z_TestProcess._test_recursionc             C   s|   | j dd\}}|  |g ¡ t t¡ g }x| ¡ rD| | ¡ ¡ q,W g dgddgddgdgddgddgg}|  ||¡ d S )NF)Úduplexr   r>   )	ÚPiper–   r1   r|   r’   ÚpollÚappendÚrecvrE   )r/   Úrconnr—   ÚresultÚexpectedr   r   r   Útest_recursion  s    


z_TestProcess.test_recursionc             C   s   |  d¡ d S )Ng      $@)r   )rj   Úeventr   r   r   Ú_test_sentinel¤  s    z_TestProcess._test_sentinelc          	   C   s°   | j dkr|  d | j ¡¡ |  ¡ }| j| j|fd}|  t¡ |j W d Q R X | 	¡  |  
|j¡ |j}|  |t¡ |  t|dd¡ | ¡  | ¡  |  t|dd¡ d S )Nr=   ztest not appropriate for {})rb   r3   g        )r   r>   )rS   rT   rU   ro   rc   r¤   ÚassertRaisesr(   Úsentinelrt   Ú
addCleanuprw   r[   r   re   r   ÚsetrX   )r/   r£   ry   r¦   r   r   r   Útest_sentinel¨  s    
z_TestProcess.test_sentinelr   Nc             C   s   |d k	r|  ¡  t |¡ d S )N)rv   ÚsysÚexit)rj   ÚrcrP   r   r   r   Ú_test_close¸  s    z_TestProcess._test_closec          	   C   s<  | j dkr|  d | j ¡¡ |  ¡ }| j| jd|id}d|_| ¡  |  | 	¡ d¡ |  
t¡ | ¡  W d Q R X | d ¡ | ¡  |  | 	¡ d¡ |  |jd¡ | ¡  |  
t¡ | 	¡  W d Q R X |  
t¡ | ¡  W d Q R X |  
t¡ | ¡  W d Q R X | ¡  t |¡}~t ¡  |  |ƒ d ¡ t|ƒ d S )Nr=   ztest not appropriate for {}rP   )rb   rn   TFr   )rS   rT   rU   r   rc   r­   rZ   rt   rE   rY   r¥   r(   r   rO   rw   r_   r‰   ÚweakrefÚrefÚgcÚcollectÚassertIsr   )r/   rP   ry   Úwrr   r   r   Ú
test_close¾  s4    


z_TestProcess.test_closec                sF  ˆ j dkrˆ  d ˆ j ¡¡ t ¡ }|dkr0dnd}‡ fdd„t|ƒD ƒ}x|D ]}| ¡  qPW x|D ]}t|ƒ qfW x|D ]}ˆ  |j	d¡ q|W ‡ fd	d„t|ƒD ƒ}x|D ]}| ¡  q®W t
 d
¡ x|D ]}| ¡  qÎW x|D ]}t|ƒ qäW tjdkrBtj g}tjdkr$| tj ¡ x|D ]}ˆ  |j	|¡ q*W d S )Nr=   ztest not appropriate for {}ÚspawnrN   r{   c                s   g | ]}ˆ j ˆ jd d‘qS ))g{®Gáz„?)rb   r3   )rc   r   )Ú.0r™   )r/   r   r   ú
<listcomp>æ  s   z4_TestProcess.test_many_processes.<locals>.<listcomp>r   c                s   g | ]}ˆ j ˆ jd ‘qS ))rb   )rc   r}   )r¶   r™   )r/   r   r   r·   ï  s   gü©ñÒMbP?rˆ   Údarwin)rS   rT   rU   r   Úget_start_methodr•   rt   r   rE   r_   r1   r|   r‰   r%   rh   r…   rŠ   rª   Úplatformr   r   ru   )r/   ÚsmÚNÚprocsry   Z	exitcodesr   )r/   r   Útest_many_processesÞ  s6    











z _TestProcess.test_many_processesc             C   sf   t ƒ }t |¡}|  ¡ }| j|||fd}~| ¡  | ¡  |  |ƒ d ¡ |  | 	¡ d¡ t
|ƒ d S )N)rb   r3   rN   )rM   r®   r¯   r   rc   rt   rw   r²   rE   rv   r   )r/   rQ   r³   rP   ry   r   r   r   Útest_lose_target_ref  s    
z!_TestProcess.test_lose_target_refc             C   s   |  tj ¡ ¡ | ¡  d S )N)rO   Útestr   Zfd_countr   )r/   ÚevtrP   r   r   r   Ú_test_child_fd_inflation  s    z%_TestProcess._test_child_fd_inflationc          	      sÞ   ˆj dkrˆ d ˆj ¡¡ t ¡ }|dkr<ˆ d |¡¡ d}ˆ ¡ ‰ ˆ ¡ ‰‡ ‡‡fdd„t|ƒD ƒ}x|D ]}| ¡  qpW z0‡fdd„t|ƒD ƒ}ˆ 	t
t|ƒƒd|¡ W d ˆ  ¡  x|D ]}| ¡  qÀW tˆƒ X d S )	Nr=   ztest not appropriate for {}ÚforkrN   c                s    g | ]}ˆj ˆjˆ ˆfd ‘qS ))rb   r3   )rc   rÂ   )r¶   r™   )rÁ   rP   r/   r   r   r·   "  s   z8_TestProcess.test_child_fd_inflation.<locals>.<listcomp>c                s   g | ]}ˆ   ¡ ‘qS r   )rv   )r¶   r™   )rP   r   r   r·   (  s    r>   )rS   rT   rU   r   r¹   ro   r   r•   rt   rE   r]   r¨   rw   r   )r/   r»   r¼   r½   ry   Z	fd_countsr   )rÁ   rP   r/   r   Útest_child_fd_inflation  s&    


z$_TestProcess.test_child_fd_inflationc                s>   ‡ fdd„}‡ fdd„}t j|d ¡  t j|dd ¡  d S )Nc                  s   t  d¡ ˆ  ¡  d S )Ng      à?)r1   r|   r¨   r   )rÁ   r   r   Úfunc13  s    
z2_TestProcess._test_wait_for_threads.<locals>.func1c                  s   t  d¡ ˆ  ¡  d S )Né   )r1   r|   Úclearr   )rÁ   r   r   Úfunc27  s    
z2_TestProcess._test_wait_for_threads.<locals>.func2)rb   T)rb   rZ   )Ú	threadingÚThreadrt   )r/   rÁ   rÅ   rÈ   r   )rÁ   r   Ú_test_wait_for_threads1  s    z#_TestProcess._test_wait_for_threadsc             C   sX   | j dkr|  d | j ¡¡ |  ¡ }| j| j|fd}| ¡  | ¡  |  | 	¡ ¡ d S )Nr=   ztest not appropriate for {})rb   r3   )
rS   rT   rU   ro   rc   rË   rt   rw   rX   Úis_set)r/   rÁ   Úprocr   r   r   Útest_wait_for_threads>  s    
z"_TestProcess.test_wait_for_threadsc             C   sL   x>|  ¡ D ]2\}}|dkr,t ¡ }| ¡  nd }tt|d ƒ q
W | ¡  d S )Nr   )ÚitemsÚioÚStringIOr   Úsetattrrª   r¨   )r/   rÁ   Zbreak_std_streamsÚstream_nameÚactionÚstreamr   r   r   Ú_test_error_on_stdio_flushJ  s    
z'_TestProcess._test_error_on_stdio_flushc             C   s¨   t  ¡ d g}|d  ¡  xŠdD ]‚}x||D ]t}tt|ƒ}tt||ƒ zJ|  ¡ }| j| j|fd}| 	¡  | 
¡  |  | ¡ ¡ |  |jd¡ W d tt||ƒ X q(W qW d S )Nr   )ÚstdoutÚstderr)rb   r3   )rÐ   rÑ   r   Úgetattrrª   rÒ   ro   rc   rÖ   rt   rw   rX   rÌ   rE   r_   )r/   ZstreamsrÓ   rÕ   Ú
old_streamrÁ   rÍ   r   r   r   Útest_error_on_stdio_flush_1V  s    



z(_TestProcess.test_error_on_stdio_flush_1c             C   sŠ   x„dD ]|}xvdD ]n}t t|ƒ}zP|  ¡ }| j| j|||ifd}| ¡  | ¡  |  | ¡ ¡ |  	|j
d¡ W d tt||ƒ X qW qW d S )N)r×   rØ   )r   Úremove)rb   r3   r   )rÙ   rª   ro   rc   rÖ   rt   rw   rX   rÌ   rE   r_   rÒ   )r/   rÓ   rÔ   rÚ   rÁ   rÍ   r   r   r   Útest_error_on_stdio_flush_2i  s    


z(_TestProcess.test_error_on_stdio_flush_2ç        c             C   s   t  |¡ | ¡  d S )N)r1   r|   r¨   )r/   rÁ   r~   r   r   r   Ú_sleep_and_set_eventz  s    
z!_TestProcess._sleep_and_set_eventc       
      C   s  | j dkr|  d | j ¡¡ t ¡ }|dkr<|  d |¡¡ ddlm} | ¡  d}|  ¡ }| j	| j
||fd}| ¡  |j}t ||¡ t |d ¡ |  ¡ }| j	| j
|fd}	|	 ¡  |	 ¡  |  | ¡ ¡ |  |	jd¡ | ¡  |  | ¡ ¡ |  |jd	¡ d S )
Nr=   ztest not appropriate for {}Ú
forkserverr   )Ú_forkserverg      à?)rb   r3   g       @)r   éÿ   )rS   rT   rU   r   r¹   Zmultiprocessing.forkserverrá   Úensure_runningro   rc   rß   rt   Z_forkserver_pidr%   rŒ   r1   r|   rw   rX   rÌ   rE   r_   ru   )
r/   Úsignumr»   rá   r~   rÁ   rÍ   ri   Zevt2rf   r   r   r   Úcheck_forkserver_death  s.    
z#_TestProcess.check_forkserver_deathc             C   s   |   tj¡ d S )N)rå   r…   ÚSIGINT)r/   r   r   r   Útest_forkserver_sigint¥  s    z#_TestProcess.test_forkserver_sigintc             C   s   t jdkr|  tj¡ d S )Nrˆ   )r%   rh   rå   r…   r   )r/   r   r   r   Útest_forkserver_sigkill©  s    
z$_TestProcess.test_forkserver_sigkill)r   N)rÞ   )#r7   r8   r9   rJ   ra   rg   Úclassmethodrd   rz   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   r   r   rR   Û   sD   
(3 #&rR   c               @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
Ú_UpperCaserc             C   s    t j | ¡ t  ¡ \| _| _d S )N)r   rc   r0   r›   Ú
child_connÚparent_conn)r/   r   r   r   r0   µ  s    z_UpperCaser.__init__c             C   s@   | j  ¡  x&t| jjd ƒD ]}| j | ¡ ¡ qW | j ¡  d S )N)rì   r   Úiterrë   rž   r”   Úupper)r/   r
   r   r   r   Úrun¹  s    
z_UpperCaser.runc             C   s   | j  |¡ | j  ¡ S )N)rì   r”   rž   )r/   r
   r   r   r   Úsubmit¿  s    z_UpperCaser.submitc             C   s$   | j  d ¡ | j  ¡  | j ¡  d S )N)rì   r”   r   rë   )r/   r   r   r   ÚstopÄ  s    
z_UpperCaser.stopN)r7   r8   r9   r0   rï   rð   rñ   r   r   r   r   rê   ³  s   rê   c               @   s@   e Zd ZdZdd„ Zdd„ Zedd„ ƒZedd	„ ƒZd
d„ Z	dS )Ú_TestSubclassingProcess)r;   c             C   sL   t ƒ }d|_| ¡  |  | d¡d¡ |  | d¡d¡ | ¡  | ¡  d S )NTrm   ZHELLOZworldZWORLD)rê   rZ   rt   rE   rð   rñ   rw   )r/   Z
uppercaserr   r   r   Útest_subclassingÍ  s    z(_TestSubclassingProcess.test_subclassingc          	   C   sœ   | j dkr|  d | j ¡¡ tjj}|  tjj|¡ | j| j	|fd}| 
¡  | ¡  t|dƒ2}| ¡ }|  d|¡ |  d|¡ |  d|¡ W d Q R X d S )Nr=   ztest not appropriate for {})rb   r3   ÚrÚZeroDivisionErrorztest_multiprocessing.pyz1/0 # MARKER)rS   rT   rU   rÀ   r   ÚTESTFNr§   Úunlinkrc   Ú_test_stderr_flushrt   rw   ÚopenÚreadru   )r/   ÚtestfnrÍ   ÚfÚerrr   r   r   Útest_stderr_flushÖ  s    
z)_TestSubclassingProcess.test_stderr_flushc             C   s6   t  |t jt jB t jB ¡}t|dddt_dd  d S )NÚwF)Úclosefdr>   r   )r%   rù   ÚO_WRONLYÚO_CREATÚO_EXCLrª   rØ   )rj   rû   Úfdr   r   r   rø   ç  s    z*_TestSubclassingProcess._test_stderr_flushc             C   s8   t  |t jt jB t jB ¡}t|dddt_t |¡ d S )Nrÿ   F)r   )r%   rù   r  r  r  rª   rØ   r«   )rj   Úreasonrû   r  r   r   r   Ú_test_sys_exitî  s    z&_TestSubclassingProcess._test_sys_exitc          
   C   s  | j dkr|  d | j ¡¡ tjj}|  tjj|¡ xŠdddgdfD ]x}| j| j	||fd}d|_
| ¡  t|ƒ |  |jd¡ t|d	ƒ}| ¡ }W d Q R X |  | ¡ t|ƒ¡ t |¡ qDW xBd
D ]:}| jtj|fd}d|_
| ¡  t|ƒ |  |j|¡ qÆW d S )Nr=   ztest not appropriate for {}r>   rk   é   zignore this)rb   r3   Trô   )TFé   )rS   rT   rU   rÀ   r   rö   r§   r÷   rc   r  rZ   rt   r   rE   r_   rù   rú   ÚrstripÚstrr%   rª   r«   )r/   rû   r  ry   rü   Zcontentr   r   r   Útest_sys_exitô  s,    


z%_TestSubclassingProcess.test_sys_exitN)
r7   r8   r9   rJ   ró   rþ   ré   rø   r  r  r   r   r   r   rò   É  s   	rò   c             C   s"   t | dƒr|  ¡ S |  ¡ dkS d S )NÚemptyr   )r„   r  Úqsize)rP   r   r   r   Úqueue_empty  s    
r  c             C   s"   t | dƒr|  ¡ S |  ¡ |kS d S )NÚfull)r„   r  r  )rP   Úmaxsizer   r   r   Ú
queue_full  s    
r  c               @   s„   e Zd Zedd„ ƒZdd„ Zedd„ ƒZdd„ Zed	d
„ ƒZdd„ Z	dd„ Z
edd„ ƒZdd„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS )Ú
_TestQueuec             C   s.   |  ¡  xtdƒD ]}| ¡  qW | ¡  d S )Né   )r   r•   rv   r¨   )rj   r   Úchild_can_startÚparent_can_continuer™   r   r   r   Ú	_test_put'  s    z_TestQueue._test_putc             C   sü  d}| j |d}|  ¡ }|  ¡ }| j| j|||fd}d|_| ¡  |  t|ƒd¡ |  t||ƒd¡ | 	d¡ | 	dd¡ | 	ddd ¡ | 	d	d¡ | 	d
dd ¡ | 
d¡ t t¡ |  t|ƒd¡ |  t||ƒd¡ t|j	ƒ}t|j
ƒ}|  tj|dd¡ |  |jd¡ |  tj|ddd ¡ |  |jd¡ |  tj|d¡ |  |jd¡ |  tj|ddt¡ |  |jt¡ |  tj|ddt¡ |  |jd¡ | jtj|ddtd |  |jt¡ | ¡  | ¡  |  t|ƒd¡ |  t||ƒd¡ | ¡  t|ƒ d S )Nr  )r  )rb   r3   TFr>   rk   r  é   rN   é   r   )r   )r   ro   rc   r  rZ   rt   rE   r  r  rO   Ú
put_nowaitr1   r|   r’   r,   r¥   ÚpyqueueZFullrC   r.   ÚTIMEOUT1ÚTIMEOUT2ÚTIMEOUT3r¨   r   rw   r   )r/   ZMAXSIZEr   r  r  rÍ   rO   r  r   r   r   Útest_put.  sP    




z_TestQueue.test_putc             C   s<   |  ¡  | d¡ | d¡ | d¡ | d¡ | ¡  d S )Nrk   r  r  rN   )r   rO   r¨   )rj   r   r  r  r   r   r   Ú	_test_geti  s    



z_TestQueue._test_getc             C   s²  |   ¡ }|  ¡ }|  ¡ }| j| j|||fd}d|_| ¡  |  t|ƒd¡ | ¡  | 	¡  t
 t¡ |  t|ƒd¡ |  | dd ¡d¡ |  | d¡d¡ |  |jddd¡ |  | ¡ d	¡ |  t|ƒd¡ t|jƒ}t|jƒ}|  tj|d¡ |  |jd
¡ |  tj|dd ¡ |  |jd
¡ |  tj|¡ |  |jd
¡ |  tj|dt¡ |  |jt¡ |  tj|dt¡ |  |jd
¡ | jtj|td |  |jt¡ | ¡  t|ƒ d S )N)rb   r3   TFrk   r  r>   )r   r  rN   r   )r   ro   rc   r  rZ   rt   rE   r  r¨   r   r1   r|   r’   rv   Ú
get_nowaitr,   r¥   r  ÚEmptyrC   r.   r  r  r  rw   r   )r/   r   r  r  rÍ   rv   r   r   r   r   Útest_gets  sD    


z_TestQueue.test_getc             C   s"   xt ddƒD ]}| |¡ qW d S )Nrƒ   rÆ   )r•   rO   )rj   r   r™   r   r   r   Ú
_test_fork¨  s    z_TestQueue._test_forkc             C   s–   |   ¡ }xtdƒD ]}| |¡ qW t t¡ | j| j|fd}d|_| 	¡  x tdƒD ]}|  
| ¡ |¡ qXW |  tj|jd¡ | ¡  t|ƒ d S )Nrƒ   )rb   r3   TrÆ   F)r   r•   rO   r1   r|   r’   rc   r#  rZ   rt   rE   rv   r¥   r  r!  rw   r   )r/   r   r™   ry   r   r   r   Ú	test_fork°  s    
z_TestQueue.test_forkc             C   s¬   |   ¡ }y|  | ¡ d¡ W n tk
r:   |  d¡ Y nX | d¡ |  | ¡ d¡ | d¡ |  | ¡ d¡ | ¡  |  | ¡ d¡ | ¡  |  | ¡ d¡ t|ƒ d S )Nr   zqsize method not implementedr>   rN   rk   )r   rE   r  rD   rT   rO   rv   r   )r/   rP   r   r   r   Ú
test_qsizeÌ  s    

z_TestQueue.test_qsizec             C   s,   x&t |jd ƒD ]}t t¡ | ¡  qW d S )N)rí   rv   r1   r|   r’   Z	task_done)rj   rP   Úobjr   r   r   Ú_test_task_doneÜ  s    
z_TestQueue._test_task_donec                sš   ˆ  ¡ ‰ ‡ ‡fdd„tdƒD ƒ}x|D ]}d|_| ¡  q&W xtdƒD ]}ˆ  |¡ qFW ˆ  ¡  x|D ]}ˆ  d ¡ qfW x|D ]}| ¡  q~W tˆ ƒ d S )Nc                s   g | ]}ˆj ˆjˆ fd ‘qS ))rb   r3   )rc   r'  )r¶   r™   )r   r/   r   r   r·   å  s   z-_TestQueue.test_task_done.<locals>.<listcomp>r  Trƒ   )ÚJoinableQueuer•   rZ   rt   rO   rw   r   )r/   Úworkersry   r™   r   )r   r/   r   Útest_task_doneâ  s    


z_TestQueue.test_task_donec          
   C   sŒ   t j ¡ x d}t|d dƒ}| d¡ W d Q R X t j t ¡ ¡4 yt|ƒ W n  t	j
k
rr   |  d¡ Y nX W d Q R X W d Q R X d S )NZimported_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   Ztemp_cwdrù   ÚwriteZDirsOnSysPathr%   ÚgetcwdÚ
__import__r  r!  Úfail)r/   Zmodule_namerü   r   r   r   Útest_no_import_lock_contentionø  s    z)_TestQueue.test_no_import_lock_contentionc             C   sH   t  ¡ }t ¡ }|  tj|jdd¡ t ¡ | }|  |d¡ t	|ƒ d S )NTgš™™™™™É?gš™™™™™¹?)
r   r   r1   r2   r¥   r  r!  rv   ÚassertGreaterEqualr   )r/   rP   rt   Údeltar   r   r   Útest_timeout  s    z_TestQueue.test_timeoutc          	   C   s  | j dkr|  d | j ¡¡ G dd„ dtƒ}tj ¡ > |  ¡ }| |ƒ ¡ | d¡ |  	|j
dd¡ t|ƒ W d Q R X tj ¡ z | jdd	}| |ƒ ¡ | d¡ y|  | ¡ d¡ W n tk
rÐ   Y nX |  	|j
dd¡ |  	| ¡ ¡ t|ƒ W d Q R X d S )
Nr;   ztest not appropriate for {}c               @   s   e Zd Zdd„ ZdS )zF_TestQueue.test_queue_feeder_donot_stop_onexc.<locals>.NotSerializablec             S   s   t ‚d S )N)r'   )r/   r   r   r   rI     s    zQ_TestQueue.test_queue_feeder_donot_stop_onexc.<locals>.NotSerializable.__reduce__N)r7   r8   r9   rI   r   r   r   r   ÚNotSerializable  s   r3  Tg      ð?)r   r>   )r  )rS   rT   rU   ÚobjectrÀ   r   Úcaptured_stderrr   rO   rX   rv   r   rE   r  rD   r  )r/   r3  rP   r   r   r   Ú"test_queue_feeder_donot_stop_onexc  s(    


z-_TestQueue.test_queue_feeder_donot_stop_onexcc          	      s°   | j dkr|  d | j ¡¡ G dd„ dtƒ‰ G ‡ fdd„dtjjƒ}ˆ ƒ }tj 	¡ : |t 
¡ d}| |¡ | d¡ |  |jd	d
¡ W d Q R X |  |j¡ |  |j¡ d S )Nr;   ztest not appropriate for {}c               @   s   e Zd Zdd„ Zdd„ ZdS )zK_TestQueue.test_queue_feeder_on_queue_feeder_error.<locals>.NotSerializablec             S   s   d| _ d| _d S )NF)Úreduce_was_calledÚ on_queue_feeder_error_was_called)r/   r   r   r   r0   B  s    zT_TestQueue.test_queue_feeder_on_queue_feeder_error.<locals>.NotSerializable.__init__c             S   s   d| _ t‚d S )NT)r7  r'   )r/   r   r   r   rI   F  s    zV_TestQueue.test_queue_feeder_on_queue_feeder_error.<locals>.NotSerializable.__reduce__N)r7   r8   r9   r0   rI   r   r   r   r   r3  @  s   r3  c                   s   e Zd Ze‡ fdd„ƒZdS )zE_TestQueue.test_queue_feeder_on_queue_feeder_error.<locals>.SafeQueuec                s   t | tƒrt |ˆ ƒrd|_d S )NT)r   r'   r8  )rx   r&  )r3  r   r   Ú_on_queue_feeder_errorL  s    

z\_TestQueue.test_queue_feeder_on_queue_feeder_error.<locals>.SafeQueue._on_queue_feeder_errorN)r7   r8   r9   Ústaticmethodr9  r   )r3  r   r   Ú	SafeQueueJ  s   r;  )ÚctxTg      ð?)r   )rS   rT   rU   r4  r   r   r   rÀ   r   r5  Úget_contextrO   rX   rv   r7  r8  )r/   r;  Znot_serializable_objrP   r   )r3  r   Ú'test_queue_feeder_on_queue_feeder_error:  s    



z2_TestQueue.test_queue_feeder_on_queue_feeder_errorN)r7   r8   r9   ré   r  r  r  r"  r#  r$  r%  r'  r*  r/  r2  r6  r>  r   r   r   r   r  $  s   ;
5"r  c               @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )Ú	_TestLockc             C   sR   |   ¡ }|  | ¡ d¡ |  | d¡d¡ |  | ¡ d ¡ |  ttjf|j¡ d S )NTF)ÚLockrE   ÚacquireÚreleaser¥   r(   rÉ   ZThreadError)r/   Úlockr   r   r   Ú	test_locke  s
    z_TestLock.test_lockc             C   s~   |   ¡ }|  | ¡ d¡ |  | ¡ d¡ |  | ¡ d¡ |  | ¡ d ¡ |  | ¡ d ¡ |  | ¡ d ¡ |  ttf|j¡ d S )NT)ÚRLockrE   rA  rB  r¥   ÚAssertionErrorr   )r/   rC  r   r   r   Ú
test_rlockl  s    z_TestLock.test_rlockc          	   C   s   |   ¡  W d Q R X d S )N)r@  )r/   r   r   r   Útest_lock_contextv  s    
z_TestLock.test_lock_contextN)r7   r8   r9   rD  rG  rH  r   r   r   r   r?  c  s   
r?  c               @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
Ú_TestSemaphorec             C   sª   |   dt|¡ |  | ¡ d¡ |   dt|¡ |  | ¡ d¡ |   dt|¡ |  | d¡d¡ |   dt|¡ |  | ¡ d ¡ |   dt|¡ |  | ¡ d ¡ |   dt|¡ d S )Nrk   Tr>   r   F)rH   rL   rE   rA  rB  )r/   Úsemr   r   r   Ú_test_semaphore}  s    z_TestSemaphore._test_semaphorec             C   sT   |   d¡}|  |¡ |  | ¡ d ¡ |  dt|¡ |  | ¡ d ¡ |  dt|¡ d S )Nrk   r  r  )Ú	SemaphorerK  rE   rB  rH   rL   )r/   rJ  r   r   r   Útest_semaphoreŠ  s    

z_TestSemaphore.test_semaphorec             C   s   |   d¡}|  |¡ d S )Nrk   )ÚBoundedSemaphorerK  )r/   rJ  r   r   r   Útest_bounded_semaphore’  s    
z%_TestSemaphore.test_bounded_semaphorec             C   sÒ   | j dkr|  d | j ¡¡ |  d¡}t|jƒ}|  |dƒd¡ |  |jd¡ |  |dd ƒd¡ |  |jd¡ |  |dt	ƒd¡ |  |jd¡ |  |dt
ƒd¡ |  |jt
¡ |  |tdd¡ |  |jt¡ d S )Nr;   ztest not appropriate for {}r   Fg        T)r   )rS   rT   rU   rL  r,   rA  rE   rC   r.   r  r  r  )r/   rJ  rA  r   r   r   r2  š  s    


z_TestSemaphore.test_timeoutN)r7   r8   r9   rK  rM  rO  r2  r   r   r   r   rI  {  s   rI  c               @   sž   e Zd Zeddd„ƒZdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dd„ Z
edd„ ƒZe ed¡dd„ ƒZedd„ ƒZe ed¡dd„ ƒZedd„ ƒZdd„ ZdS )Ú_TestConditionNc             C   s.   |  ¡  | ¡  | |¡ | ¡  | ¡  d S )N)rA  rB  r   )rj   ÚcondÚsleepingÚwokenr   r   r   r   rü   ³  s
    
z_TestCondition.fc          	   C   s^   xBt dƒD ]6}y|ƒ |krP W n tk
r4   P Y nX t t¡ q
W t t¡ |  ||¡ d S )Nrƒ   )r•   rD   r1   r|   r’   rH   )r/   r-   rF   r™   r   r   r   ÚassertReachesEventually»  s    

z&_TestCondition.assertReachesEventuallyc             C   sZ   | j dkrVy6|j ¡ |j ¡  }|  |d¡ |  |j ¡ d¡ W n tk
rT   Y nX d S )Nr;   r   )rS   Z_sleeping_countrL   Z_woken_countrE   Z_wait_semaphorerD   )r/   rQ  Zsleepersr   r   r   Úcheck_invariantÆ  s    
z_TestCondition.check_invariantc             C   s  |   ¡ }|  d¡}|  d¡}| j| j|||fd}d|_| ¡  |  |j¡ tj	| j|||fd}d|_| ¡  |  |j¡ | 
¡  | 
¡  t t¡ |  dt|¡ | 
¡  | ¡  | ¡  t t¡ |  dt|¡ | 
¡  | ¡  | ¡  t t¡ |  dt|¡ |  |¡ | ¡  d S )Nr   )rb   r3   Tr>   rk   )Ú	ConditionrL  rc   rü   rZ   rt   r§   rw   rÉ   rÊ   rA  r1   r|   r’   rH   rL   ÚnotifyrB  rU  )r/   rQ  rR  rS  ry   r   r   r   Útest_notifyÑ  s6    





z_TestCondition.test_notifyc                s¾  |   ¡ }|  d¡}|  d¡‰ xttdƒD ]h}| j| j||ˆ tfd}d|_| ¡  |  |j	¡ t
j| j||ˆ tfd}d|_| ¡  |  |j	¡ q&W xtdƒD ]}| ¡  qœW xtdƒD ]}ˆ  ¡  q¶W |  dtˆ ¡ |  |¡ xptdƒD ]d}| j| j||ˆ fd}d|_| ¡  |  |j	¡ t
j| j||ˆ fd}d|_| ¡  |  |j	¡ qèW xtdƒD ]}| ¡  qZW t t¡ |  dtˆ ¡ | ¡  | ¡  | ¡  |  ‡ fdd„d¡ |  |¡ d S )Nr   r  )rb   r3   Tr  c                  s   t ˆ ƒS )N)rL   r   )rS  r   r   Ú<lambda>7  ó    z0_TestCondition.test_notify_all.<locals>.<lambda>)rV  rL  r•   rc   rü   r  rZ   rt   r§   rw   rÉ   rÊ   rA  rH   rL   rU  r1   r|   r’   Z
notify_allrB  rT  )r/   rQ  rR  r™   ry   r5   r   )rS  r   Útest_notify_allþ  sL    



z_TestCondition.test_notify_allc                sX  |   ¡ }|  d¡}|  d¡‰ xptdƒD ]d}| j| j||ˆ fd}d|_| ¡  |  |j¡ t	j
| j||ˆ fd}d|_| ¡  |  |j¡ q&W xtdƒD ]}| ¡  q˜W t t¡ |  dtˆ ¡ | ¡  |jdd | ¡  |  ‡ fdd	„d¡ | ¡  |jd
d | ¡  |  ‡ fdd	„d¡ | ¡  |jdd | ¡  |  dtˆ ¡ |  |¡ d S )Nr   r  )rb   r3   Tr  rk   )Únc                  s   t ˆ ƒS )N)rL   r   )rS  r   r   rY  [  rZ  z._TestCondition.test_notify_n.<locals>.<lambda>r  c                  s   t ˆ ƒS )N)rL   r   )rS  r   r   rY  b  rZ  )rV  rL  r•   rc   rü   rZ   rt   r§   rw   rÉ   rÊ   rA  r1   r|   r’   rH   rL   rW  rB  rT  rU  )r/   rQ  rR  r™   ry   r5   r   )rS  r   Útest_notify_n<  s:    


z_TestCondition.test_notify_nc             C   sH   |   ¡ }t|jƒ}| ¡  |tƒ}| ¡  |  |d¡ |  |jt¡ d S )NF)	rV  r,   r   rA  r  rB  rE   rC   r.   )r/   rQ  r   rG   r   r   r   r2  n  s    
z_TestCondition.test_timeoutc          	      sL   |> dˆ _ | ¡  | ‡ fdd„¡}|r4ˆ j dkr>t d¡ W d Q R X d S )Nr   c                  s
   ˆ j dkS )Nr  )rF   r   )Ústater   r   rY  |  rZ  z0_TestCondition._test_waitfor_f.<locals>.<lambda>r  r>   )rF   rW  Úwait_forrª   r«   )rj   rQ  r^  r    r   )r^  r   Ú_test_waitfor_fw  s    z_TestCondition._test_waitfor_fzneeds sharedctypesc          
      sÌ   |   ¡ }|  dd¡‰ | j| j|ˆ fd}d|_| ¡  |0 | ‡ fdd„¡}|  |¡ |  ˆ j	d¡ W d Q R X x@t
dƒD ]4}t d	¡ | ˆ  j	d
7  _	| ¡  W d Q R X qzW t|ƒ |  |jd¡ d S )Nr™   r$   )rb   r3   Tc                  s
   ˆ j dkS )Nr   )rF   r   )r^  r   r   rY  ‹  rZ  z-_TestCondition.test_waitfor.<locals>.<lambda>r   r  g{®Gáz„?r>   )rV  r   rc   r`  rZ   rt   r_  rX   rE   rF   r•   r1   r|   rW  r   r_   )r/   rQ  ry   r    r™   r   )r^  r   Útest_waitfor€  s     

z_TestCondition.test_waitforc          	      st   |  ¡  |^ d}t ¡ }|j‡ fdd„|d}t ¡ | }|sf|d |  k r\|d k rfn nd|_W d Q R X d S )Ngš™™™™™¹?c                  s
   ˆ j dkS )Nr  )rF   r   )r^  r   r   rY  ž  rZ  z8_TestCondition._test_waitfor_timeout_f.<locals>.<lambda>)r   g333333ã?g      $@T)rB  r1   r2   r_  rF   )rj   rQ  r^  ÚsuccessrJ  r¡   Údtr    r   )r^  r   Ú_test_waitfor_timeout_f˜  s    $z&_TestCondition._test_waitfor_timeout_fc          
   C   s¼   |   ¡ }|  dd¡}|  dd¡}|  d¡}| j| j||||fd}d|_| ¡  |  |jt	d¡ x@t
dƒD ]4}t d¡ | | jd	7  _| ¡  W d Q R X qlW t|ƒ |  |j¡ d S )
Nr™   r   F)rb   r3   T)r   r  g{®Gáz„?r>   )rV  r   rL  rc   rd  rZ   rt   rX   rA  r   r•   r1   r|   rF   rW  r   )r/   rQ  r^  rb  rJ  ry   r™   r   r   r   Útest_waitfor_timeout¤  s     

z#_TestCondition.test_waitfor_timeoutc          	   C   s<   | |  ¡  W d Q R X t d¡ |d k	r8t |tj¡ d S )Nr>   )rW  r1   r|   r%   rŒ   r…   ræ   )rj   rQ   ri   r   r   r   Ú_test_wait_result¼  s
    
z _TestCondition._test_wait_resultc          	   C   sª   t | tƒrtjdkrt ¡ }nd }|  ¡ }|r |  | d¡¡ |  | d¡¡ | j	| j
||fd}| ¡  |  | d¡¡ |d k	r”|  t|jd¡ | ¡  W d Q R X d S )Nr   r   gš™™™™™¹?)rb   r3   é<   )r   ÚProcessesMixinrª   rº   r%   r^   rV  re   r   rc   rf  rt   rX   r¥   ÚKeyboardInterruptrw   )r/   ri   rQ   ry   r   r   r   Útest_wait_resultÄ  s    
z_TestCondition.test_wait_result)N)r7   r8   r9   ré   rü   rT  rU  rX  r[  r]  r2  r`  r)   Ú
skipUnlessÚHAS_SHAREDCTYPESra  rd  re  rf  rj  r   r   r   r   rP  ±  s   ->2		rP  c               @   s    e Zd Zedd„ ƒZdd„ ZdS )Ú
_TestEventc             C   s   t  t¡ | ¡  d S )N)r1   r|   r  r¨   )rj   r£   r   r   r   Ú_test_eventÛ  s    
z_TestEvent._test_eventc             C   sò   |   ¡ }t|jƒ}|  | ¡ d¡ |  |dƒd¡ |  |jd¡ |  |tƒd¡ |  |jt¡ | ¡  |  | ¡ d¡ |  |ƒ d¡ |  |jd¡ |  |tƒd¡ |  |jd¡ | 	¡  | j
| j|fd}d|_| ¡  |  |ƒ d¡ | ¡  d S )NFg        T)rb   r3   )ro   r,   r   rE   rÌ   rC   r.   r  r¨   rÇ   rc   rn  rZ   rt   rw   )r/   r£   r   ry   r   r   r   Ú
test_eventà  s&    
z_TestEvent.test_eventN)r7   r8   r9   ré   rn  ro  r   r   r   r   rm  Ù  s   rm  c               @   s4   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ ZdS )Ú
_DummyListc             C   s6   t j t d¡¡}t  ¡ }|  ||f¡ d| jd< d S )Nr™   r   )r   ÚheapÚBufferWrapperÚstructÚcalcsizer@  Ú__setstate__Ú
_lengthbuf)r/   ÚwrapperrC  r   r   r   r0     s    z_DummyList.__init__c             C   s"   |\| _ | _| j  ¡  d¡| _d S )Nr™   )Ú_wrapperÚ_lockZcreate_memoryviewÚcastrv  )r/   r^  r   r   r   ru    s    z_DummyList.__setstate__c             C   s   | j | jfS )N)rx  ry  )r/   r   r   r   Ú__getstate__  s    z_DummyList.__getstate__c          	   C   s(   | j  | jd  d7  < W d Q R X d S )Nr   r>   )ry  rv  )r/   Ú_r   r   r   r     s    z_DummyList.appendc          	   C   s   | j  | jd S Q R X d S )Nr   )ry  rv  )r/   r   r   r   Ú__len__  s    z_DummyList.__len__N)r7   r8   r9   r0   ru  r{  r   r}  r   r   r   r   rp    s
   rp  c               C   s   t  d¡ d S )Ng{®Gáz„?)r1   r|   r   r   r   r   Ú_wait#  s    r~  c               @   s>   e Zd Zddd„Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ ZdS )ÚBunchFc       
      C   s–   || _ || _|| _| ¡ | _| ¡ | _| ¡ | _|s>| j ¡  g }x6t	|ƒD ]*}|j
| jd}d|_| ¡  | |¡ qLW dd„ }	t | |	|¡| _d S )N)rb   Tc             S   s   x| D ]}|  ¡  qW d S )N)rw   )r=   ry   r   r   r   ÚfinalizeB  s    
z Bunch.__init__.<locals>.finalize)rü   r3   r\  Ú	DummyListÚstartedÚfinishedro   Ú	_can_exitr¨   r•   rc   ÚtaskrZ   rt   r   r®   r€  Ú
_finalizer)
r/   Ú	namespacerü   r3   r\  Zwait_before_exitr=   r™   ry   r€  r   r   r   r0   ,  s     



zBunch.__init__c          	   C   sD   t  ¡ }| j |¡ z| j| jŽ  W d | j |¡ | j d¡ X d S )Né   )	r%   r^   r‚  r   rü   r3   rƒ  r„  r   )r/   ri   r   r   r   r…  H  s    z
Bunch.taskc             C   s    xt | jƒ| jk rtƒ  qW d S )N)r]   r‚  r\  r~  )r/   r   r   r   Úwait_for_startedR  s    zBunch.wait_for_startedc             C   s    xt | jƒ| jk rtƒ  qW d S )N)r]   rƒ  r\  r~  )r/   r   r   r   Úwait_for_finishedV  s    zBunch.wait_for_finishedc             C   s   | j  ¡  d S )N)r„  r¨   )r/   r   r   r   Ú	do_finishZ  s    zBunch.do_finishc             C   s   |   ¡  d S )N)r†  )r/   r   r   r   r   ]  s    zBunch.closeN)F)	r7   r8   r9   r0   r…  r‰  rŠ  r‹  r   r   r   r   r   r  (  s   

r  c               @   s   e Zd Zdd„ Zdd„ ZdS )Ú
AppendTruec             C   s
   || _ d S )N)r&  )r/   r&  r   r   r   r0   b  s    zAppendTrue.__init__c             C   s   | j  d¡ d S )NT)r&  r   )r/   r   r   r   r6   d  s    zAppendTrue.__call__N)r7   r8   r9   r0   r6   r   r   r   r   rŒ  a  s   rŒ  c               @   sú   e Zd ZdZdZdd„ Zdd„ Zdd„ Zd	d
„ Ze	dd„ ƒZ
d5dd„Zdd„ Ze	dd„ ƒZdd„ Ze	dd„ ƒZdd„ Ze	dd„ ƒZdd„ Ze	dd„ ƒZd d!„ Ze	d"d#„ ƒZd$d%„ Ze	d&d'„ ƒZd(d)„ Ze	d*d+„ ƒZd,d-„ Zd.d/„ Ze	d0d1„ ƒZd2d3„ Zd4S )6Ú_TestBarrierrN   g      >@c             C   s   | j | j| jd| _d S )N)r   )ÚBarrierr¼   ÚdefaultTimeoutÚbarrier)r/   r   r   r   ÚsetUpo  s    z_TestBarrier.setUpc             C   s   | j  ¡  d | _ d S )N)r  Úabort)r/   r   r   r   ÚtearDownr  s    
z_TestBarrier.tearDownc             C   s,   | j dkrg S | j dkr"| j ¡ S tƒ S d S )Nr=   r<   )rS   r<   rs   rp  )r/   r   r   r   r  v  s
    


z_TestBarrier.DummyListc             C   s8   t | ||| jd ƒ}z||Ž  | ¡  W d | ¡  X d S )Nr>   )r  r¼   rŠ  r   )r/   rü   r3   rB   r   r   r   Úrun_threads~  s
    z_TestBarrier.run_threadsc             C   sb   |j }x<t|ƒD ]0}|d  d¡ | ¡  |d  d¡ | ¡  qW yW n tk
r\   Y nX d S )Nr   Tr>   )Úpartiesr•   r   r   rD   )rj   r  Úresultsr\  Úmr™   r   r   r   Ú	multipass†  s    z_TestBarrier.multipassr>   c             C   s*   |   ¡ |   ¡ g}|  | j| j||f¡ d S )N)r  r”  r˜  r  )r/   Úpassesr–  r   r   r   Útest_barrier—  s    z_TestBarrier.test_barrierc             C   s
   |   d¡S )Nrƒ   )rš  )r/   r   r   r   Útest_barrier_10ž  s    z_TestBarrier.test_barrier_10c             C   s   |  ¡ }| |¡ d S )N)r   rO   )rj   r  r   rG   r   r   r   Ú_test_wait_return_f¤  s    z _TestBarrier._test_wait_return_fc                sR   |   ¡ ‰ |  | j| jˆ f¡ ‡ fdd„t| jƒD ƒ}|  | d¡d¡ tˆ ƒ d S )Nc                s   g | ]}ˆ   ¡ ‘qS r   )rv   )r¶   r™   )r   r   r   r·   ¯  s    z1_TestBarrier.test_wait_return.<locals>.<listcomp>r   r>   )	r   r”  rœ  r  r•   r¼   rE   Úcountr   )r/   r–  r   )r   r   Útest_wait_return©  s
    z_TestBarrier.test_wait_returnc             C   s   |  ¡  t|ƒdkrt‚d S )Nr>   )r   r]   r   )rj   r  r–  r   r   r   Ú_test_action_f³  s    z_TestBarrier._test_action_fc             C   sB   |   ¡ }| j| jt|ƒd}|  | j||f¡ |  t|ƒd¡ d S )N)rÔ   r>   )r  rŽ  r¼   rŒ  r”  rŸ  rE   r]   )r/   r–  r  r   r   r   Útest_action¹  s    z_TestBarrier.test_actionc             C   sp   y0|  ¡ }|| jd krt‚|  ¡  | d¡ W n: tjk
rP   | d¡ Y n tk
rj   | ¡  Y nX d S )Nrk   T)r   r¼   r   r   rÉ   ÚBrokenBarrierErrorr’  )rj   r  Úresults1Úresults2r™   r   r   r   Ú_test_abort_fÂ  s    z_TestBarrier._test_abort_fc             C   s^   |   ¡ }|   ¡ }|  | j| j||f¡ |  t|ƒd¡ |  t|ƒ| jd ¡ |  | jj¡ d S )Nr   r>   )	r  r”  r¤  r  rE   r]   r¼   rX   Zbroken)r/   r¢  r£  r   r   r   Ú
test_abortÏ  s    z_TestBarrier.test_abortc             C   sŽ   |  ¡ }|| jd kr@x|j| jd k r4t d¡ qW | ¡  n8y|  ¡  | d¡ W n  tjk
rv   | d¡ Y nX |  ¡  | d¡ d S )Nrk   r>   gü©ñÒMbP?T)	r   r¼   Z	n_waitingr1   r|   Úresetr   rÉ   r¡  )rj   r  r¢  r£  Úresults3r™   r   r   r   Ú_test_reset_fÛ  s    
z_TestBarrier._test_reset_fc             C   sl   |   ¡ }|   ¡ }|   ¡ }|  | j| j|||f¡ |  t|ƒd¡ |  t|ƒ| jd ¡ |  t|ƒ| j¡ d S )Nr   r>   )r  r”  r¨  r  rE   r]   r¼   )r/   r¢  r£  r§  r   r   r   Ú
test_resetí  s    z_TestBarrier.test_resetc             C   s¤   y0|  ¡ }|| jd krt‚|  ¡  | d¡ W n: tjk
rP   | d¡ Y n tk
rj   | ¡  Y nX |  ¡ | jd kr†| ¡  |  ¡  |  ¡  | d¡ d S )Nrk   T)r   r¼   r   r   rÉ   r¡  r’  r¦  )rj   r  Úbarrier2r¢  r£  r§  r™   r   r   r   Ú_test_abort_and_reset_fú  s    z$_TestBarrier._test_abort_and_reset_fc             C   sz   |   ¡ }|   ¡ }|   ¡ }|  | j¡}|  | j| j||||f¡ |  t|ƒd¡ |  t|ƒ| jd ¡ |  t|ƒ| j¡ d S )Nr   r>   )r  rŽ  r¼   r”  r«  r  rE   r]   )r/   r¢  r£  r§  rª  r   r   r   Útest_abort_and_reset  s    z!_TestBarrier.test_abort_and_resetc             C   sT   |  ¡ }|| jd kr t d¡ y|  d¡ W n  tjk
rN   | d¡ Y nX d S )Nrk   g      ð?g      à?T)r   r¼   r1   r|   rÉ   r¡  r   )rj   r  r–  r™   r   r   r   Ú_test_timeout_f  s    
z_TestBarrier._test_timeout_fc             C   s4   |   ¡ }|  | j| j|f¡ |  t|ƒ| jj¡ d S )N)r  r”  r­  r  rE   r]   r•  )r/   r–  r   r   r   r2  *  s    z_TestBarrier.test_timeoutc             C   sV   |  | j¡}|| jd kr$t d¡ y|  ¡  W n  tjk
rP   | d¡ Y nX d S )Nrk   g      ð?T)r   r  r¼   r1   r|   rÉ   r¡  r   )rj   r  r–  r™   r   r   r   Ú_test_default_timeout_f2  s    
z$_TestBarrier._test_default_timeout_fc             C   s@   | j | jdd}|  ¡ }|  | j||f¡ |  t|ƒ|j¡ d S )Ng      à?)r   )rŽ  r¼   r  r”  r®  rE   r]   r•  )r/   r  r–  r   r   r   Útest_default_timeout=  s    z!_TestBarrier.test_default_timeoutc             C   s   |   d¡}| ¡  | ¡  d S )Nr>   )rŽ  r   )r/   rB   r   r   r   Útest_single_threadF  s    
z_TestBarrier.test_single_threadc          
   C   s8   x2t |ƒD ]&}| ¡  | | |¡ W d Q R X q
W d S )N)r•   r   r”   )rj   r  r™  ÚconnrC  r™   r   r   r   Ú_test_thousand_fK  s    z_TestBarrier._test_thousand_fc             C   s²   | j dkr|  d | j ¡¡ d}|  ¡ }|  d¡\}}x@t| jƒD ]2}| j| j| j	|||fd}| 
¡  |  |j¡ qBW x4t|ƒD ](}x"t| jƒD ]}|  | ¡ |¡ q’W q‚W d S )Nr<   ztest not appropriate for {}iè  F)rb   r3   )rS   rT   rU   r@  r›   r•   r¼   rc   r²  r  rt   r§   rw   rE   rž   )r/   r™  rC  r±  rë   Újry   r™   r   r   r   Útest_thousandR  s    
z_TestBarrier.test_thousandN)r>   )r7   r8   r9   r¼   r  r‘  r“  r  r”  ré   r˜  rš  r›  rœ  rž  rŸ  r   r¤  r¥  r¨  r©  r«  r¬  r­  r2  r®  r¯  r°  r²  r´  r   r   r   r   r  h  s4   

		r  c               @   sZ   e Zd ZdZdddddedƒedƒfgZd	d
„ Zedd„ ƒZddd„Z	dd„ Z
dd„ ZdS )Ú
_TestValue)r;   )r™   i÷  iª^  )Údg      @g      À)Úhiÿÿÿéê   )rP   l        l        rQ   ÚxÚyc             C   s   t s|  d¡ d S )Nz%requires multiprocessing.sharedctypes)rl  rT   )r/   r   r   r   r‘  r  s    z_TestValue.setUpc             C   s(   x"t || jƒD ]\}}|d |_qW d S )Nrk   )ÚzipÚcodes_valuesrF   )rj   ÚvaluesÚsvÚcvr   r   r   rd   v  s    z_TestValue._testFc                s²   |r‡ fdd„ˆ j D ƒ}n‡ fdd„ˆ j D ƒ}x*t|ˆ j ƒD ]\}}ˆ  |j|d ¡ q<W ˆ jˆ j|fd}d|_| ¡  | ¡  x*t|ˆ j ƒD ]\}}ˆ  |j|d ¡ qW d S )Nc                s   g | ]\}}}ˆ   ||¡‘qS r   )ÚRawValue)r¶   ÚcoderF   r|  )r/   r   r   r·   ~  s   z)_TestValue.test_value.<locals>.<listcomp>c                s   g | ]\}}}ˆ   ||¡‘qS r   )r   )r¶   rÁ  rF   r|  )r/   r   r   r·     s   r>   )rb   r3   Trk   )	r¼  r»  rE   rF   rc   rd   rZ   rt   rw   )r/   Úrawr½  r¾  r¿  rÍ   r   )r/   r   Ú
test_value|  s    


z_TestValue.test_valuec             C   s   | j dd d S )NT)rÂ  )rÃ  )r/   r   r   r   Útest_rawvalue  s    z_TestValue.test_rawvaluec             C   sæ   |   dd¡}| ¡ }| ¡ }| j ddd d}| ¡ }| ¡ }|  ¡ }| j dd|d}| ¡ }	| ¡ }
|  ||	¡ | j dddd}|  t|dƒ¡ |  t|dƒ¡ | jt| j dddd |  	dd¡}|  t|dƒ¡ |  t|dƒ¡ d S )Nr™   rN   )rC  FÚget_lockÚget_objZnavalue)
r   rÅ  rÆ  r@  rE   re   r„   r¥   r'   rÀ  )r/   Zval1Úlock1Úobj1Zval2Úlock2Úobj2rC  Zval3Úlock3Úobj3Úarr4Úarr5r   r   r   Útest_getobj_getlock’  s$    z_TestValue.test_getobj_getlockN)F)r7   r8   r9   rJ   r   r¼  r‘  ré   rd   rÃ  rÄ  rÏ  r   r   r   r   rµ  f  s   
rµ  c               @   s~   e Zd ZdZedd„ ƒZe edkd¡ddd„ƒZ	e edkd¡d	d
„ ƒZ
e edkd¡dd„ ƒZe edkd¡dd„ ƒZdS )Ú
_TestArray)r;   c             C   s4   x.t dt|ƒƒD ]}||  ||d  7  < qW d S )Nr>   )r•   r]   )rj   Úseqr™   r   r   r   rü   °  s    z_TestArray.fNzrequires _ctypesFc          
   C   s  ddddddddd	d
g
}|r*|   d|¡}n|  d|¡}|  t|ƒt|ƒ¡ |  |d |d ¡ |  t|dd… ƒt|dd… ƒ¡ t dddddg¡ |dd…< |dd…< |  t|d d … ƒ|¡ |  |¡ | j| j|fd}d|_| 	¡  | 
¡  |  t|d d … ƒ|¡ d S )Ni¨  ir  i¦  i5  é–   éé   i$  iÖ  iÊ  i?  r™   r  rk   r  r>   r  r  )rb   r3   T)ÚRawArrayÚArrayrE   r]   rs   Úarrayrü   rc   rZ   rt   rw   )r/   rÂ  rÑ  Úarrry   r   r   r   Ú
test_arrayµ  s    $(
z_TestArray.test_arrayc             C   sv   d}xlt dƒD ]`}|  d|¡}|  t|ƒ|¡ |  t|ƒdg| ¡ t dƒ|d d …< |  t|ƒtt dƒƒ¡ ~qW d S )Nrƒ   r  r™   r   )r•   rÕ  rE   r]   rs   )r/   Úsizer|  r×  r   r   r   Útest_array_from_sizeÎ  s    z_TestArray.test_array_from_sizec             C   s   | j dd d S )NT)rÂ  )rØ  )r/   r   r   r   Útest_rawarrayÝ  s    z_TestArray.test_rawarrayc             C   s
  |   dttdƒƒ¡}| ¡ }| ¡ }| j dttdƒƒd d}| ¡ }| ¡ }|  ¡ }| j dttdƒƒ|d}| ¡ }	| ¡ }
|  ||	¡ | j dtdƒdd}|  t|dƒ¡ |  t|dƒ¡ | j	t
| j dtdƒdd |  dtdƒ¡}|  t|dƒ¡ |  t|dƒ¡ d S )Nr™   rƒ   )rC  FrÅ  rÆ  Znotalock)rÕ  rs   r•   rÅ  rÆ  r@  rE   re   r„   r¥   r'   rÔ  )r/   Zarr1rÇ  rÈ  Zarr2rÉ  rÊ  rC  Zarr3rË  rÌ  rÍ  rÎ  r   r   r   Útest_getobj_getlock_objá  s&    z"_TestArray.test_getobj_getlock_obj)F)r7   r8   r9   rJ   ré   rü   r)   ÚskipIfr    rØ  rÚ  rÛ  rÜ  r   r   r   r   rÐ  ¬  s   rÐ  c               @   sH   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dd„ Z
dS )Ú_TestContainers)r<   c             C   s¶  |   t tdƒƒ¡}|  |d d … t tdƒƒ¡ |   ¡ }|  |d d … g ¡ | t tdƒƒ¡ |  |d d … t tdƒƒ¡ |  |d d¡ |  |dd… dddg¡ |d9 }|  |d d … ddddddddddg
¡ |  |ddg ddddddddddddg¡ |  |d d … t tdƒƒ¡ ||g}|   |¡}|  d	d
„ |D ƒddddddddddg
ddddddddddg
g¡ |   |g¡}| d¡ |  |d d d … dddddddddddg¡ d S )Nrƒ   rN   rk   r  r  r   r>   r  c             S   s   g | ]}|d d … ‘qS )Nr   )r¶   Zelementr   r   r   r·     s    z-_TestContainers.test_list.<locals>.<listcomp>r  r  é	   rm   )rs   r•   rE   Úextendr   )r/   rA   rB   r¶  rx   rü   r   r   r   Ú	test_list  s(    (,
2
z_TestContainers.test_listc             C   sf   |   t tdƒƒ¡}t|ƒ}|  t |ƒt tdƒƒ¡ |  t |ƒg ¡ t|ƒ}d|d< |  t|ƒd¡ d S )Nrƒ   r{   r   )rs   r•   rí   rE   Únext)r/   rA   Úitr   r   r   Útest_list_iter"  s    z_TestContainers.test_list_iterc                s  ˆ   ‡ fdd„tdƒD ƒ¡}ˆ  dd„ |D ƒdddggd ¡ d|d d	< ˆ  |d d d … dddg¡ x0tddƒD ]"}ˆ  || d d … dddg¡ qtW ˆ  |d  ¡ d¡ ˆ  t|d ƒd¡ x(tdddƒD ]}ˆ  t|| ƒd¡ qÐW ~ˆ   ¡ }| |¡ ~d S )
Nc                s   g | ]}ˆ   td ƒ¡‘qS )r  )rs   r•   )r¶   Z_i)r/   r   r   r·   -  s    z;_TestContainers.test_list_proxy_in_list.<locals>.<listcomp>r  c             S   s   g | ]}|d d … ‘qS )Nr   )r¶   Úinnerr   r   r   r·   .  s    r   r>   rk   é7   r$   )rs   r•   rE   Úpopr]   r   )r/   rA   r™   rB   r   )r/   r   Útest_list_proxy_in_list,  s    ""
z'_TestContainers.test_list_proxy_in_listc             C   s¢   |   ¡ }ttddƒƒ}x|D ]}t|ƒ||< qW |  | ¡ t dd„ |D ƒƒ¡ |  t| ¡ ƒ|¡ |  t| ¡ ƒdd„ |D ƒ¡ |  t| 	¡ ƒdd„ |D ƒ¡ d S )NéA   éF   c             s   s   | ]}|t |ƒfV  qd S )N)Úchr)r¶   r™   r   r   r   ú	<genexpr>E  s    z,_TestContainers.test_dict.<locals>.<genexpr>c             S   s   g | ]}t |ƒ‘qS r   )rë  )r¶   r™   r   r   r   r·   G  s    z-_TestContainers.test_dict.<locals>.<listcomp>c             S   s   g | ]}|t |ƒf‘qS r   )rë  )r¶   r™   r   r   r   r·   H  s    )
Údictrs   r•   rë  rE   r   ÚsortedÚkeysr½  rÏ   )r/   r¶  Úindicesr™   r   r   r   Ú	test_dict@  s    
z_TestContainers.test_dictc             C   sz   |   ¡ }ttddƒƒ}x|D ]}t|ƒ||< qW t|ƒ}|  t|ƒ|¡ |  t|ƒg ¡ t|ƒ}| ¡  |  tt	|¡ d S )Nré  rê  )
rí  rs   r•   rë  rí   rE   rÇ   r¥   r   râ  )r/   r¶  rð  r™   rã  r   r   r   Útest_dict_iterJ  s    
z_TestContainers.test_dict_iterc             C   sî  | j ddd}| j ddd}| j ||d}|  |d d¡ |  |d	 d d¡ d
|d	 d< |  |d d
¡ |  |d	 d d
¡ d|d	 d< |  |d d¡ |  |d	 d d¡ ~~|  |d d d¡ d|d	 d< |  |d	 d d¡ |d }|d	 }d|d< |  |d d¡ |  |d	 d d¡ | ¡  |  t|ƒd¡ |  |d d¡ |  |d d¡ |  ||g¡}d|d d< |  |d d¡ |  |d d d¡ ~~|  |d d d¡ |  ddg|g¡}|  |d t¡ |  |d d d d¡ d S )Nrk   r  )ÚferretsÚhamstersrƒ   r  )ÚwaterÚfeed)ÚpetsÚsuppliesrõ  rø  rN   Zblanketsr  r÷  ró  é   r   rô  r>   ZmarmotséX   éc   r$   rö  )rí  rE   rÇ   r]   rs   r[   )r/   r÷  rø  r¶  ÚlZouterr   r   r   Útest_dict_proxy_nestedW  sF    z&_TestContainers.test_dict_proxy_nestedc             C   sh   |   ¡ }d|_d|_d|_|  |j|jfd¡ |`|  t|ƒd¡ |  t|dƒ¡ |  t|dƒ ¡ d S )NÚBobÚBuilderZhidden)rþ  rÿ  zNamespace(name='Bob')rh   Újob)Ú	Namespacerh   r   Z_hiddenrE   r
  rX   r„   )r/   r\  r   r   r   Útest_namespace…  s    z_TestContainers.test_namespaceN)r7   r8   r9   rJ   rá  rä  rè  rñ  rò  rý  r  r   r   r   r   rÞ  ÿ  s   

.rÞ  ç        c             C   s   t  |¡ | |  S )N)r1   r|   )r¹  r   r   r   r   Úsqr”  s    
r  c             C   s   | | S )Nr   )r¹  rº  r   r   r   Úmul˜  s    r  c             C   s   t  | ¡ tdd ƒ‚d S )Nr¹  i   )r1   r|   r(   )r   r   r   r   Úraise_large_valuerror›  s    
r  c             C   s   | S )Nr   )r¹  r   r   r   ÚidentityŸ  s    r  c               @   s    e Zd ZdZdd„ Zdd„ ZdS )ÚCountedObjectr   c             C   s   |  j d7  _ t | ¡S )Nr>   )Ún_instancesr4  Ú__new__)rj   r   r   r   r
  ¥  s    zCountedObject.__new__c             C   s   t | ƒ jd8  _d S )Nr>   )rr   r	  )r/   r   r   r   Ú__del__©  s    zCountedObject.__del__N)r7   r8   r9   r	  r
  r  r   r   r   r   r  ¢  s   r  c               @   s   e Zd ZdS )ÚSayWhenErrorN)r7   r8   r9   r   r   r   r   r  ¬  s    r  c             c   s<   |dkrt dƒ‚x&t| ƒD ]}||kr.t dƒ‚|V  qW d S )Nr$   zSomebody said when)r  r•   )ZtotalZwhenr™   r   r   r   Úexception_throwing_generator®  s    r  c                   s   e Zd Ze‡ fdd„ƒZe‡ fdd„ƒZdd„ Zdd„ Zd	d
„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zd!d"„ Zd#d$„ Zd%d&„ Zd'd(„ Zd)d*„ Zed+d,„ ƒZd-d.„ Zed/d0„ ƒZd1d2„ Zd3d4„ Zd5d6„ Z‡  ZS )7Ú	_TestPoolc                s   t ƒ  ¡  |  d¡| _d S )Nr  )ÚsuperÚ
setUpClassÚPoolÚpool)rj   )Ú	__class__r   r   r  ¹  s    
z_TestPool.setUpClassc                s(   | j  ¡  | j  ¡  d | _ tƒ  ¡  d S )N)r  r‰   rw   r  ÚtearDownClass)rj   )r  r   r   r  ¾  s    

z_TestPool.tearDownClassc             C   s@   | j j}|  |tdƒtdƒ¡ |  |tdddiƒtdd¡ d S )N)rN   rN   r   r¹  r  )r¹  )r  ÚapplyrE   r  )r/   Zpapplyr   r   r   Ú
test_applyÅ  s    z_TestPool.test_applyc          	   C   sh   | j j}|  |tttdƒƒƒtttttdƒƒƒƒ¡ |  |tttdƒƒddtttttdƒƒƒƒ¡ d S )Nrƒ   r{   rÆ   )Ú	chunksize)r  ÚmaprE   r  rs   r•   )r/   Zpmapr   r   r   Útest_mapÊ  s    ,z_TestPool.test_mapc             C   s€   | j j}tttdƒtdddƒƒƒ}|  |t|ƒtt t|¡ƒ¡ tttdƒtdddƒƒƒ}|  |t|ddtt t|¡ƒ¡ d S )Nrƒ   rß  r$   r{   rû  rÆ   )r  )r  Ústarmaprs   r»  r•   rE   r  Ú	itertools)r/   ZpsmapÚtuplesr   r   r   Útest_starmapÐ  s    z_TestPool.test_starmapc             C   sD   t ttdƒtdddƒƒƒ}|  | j t|¡ ¡ t t 	t|¡ƒ¡ d S )Nr{   rû  r$   )
rs   r»  r•   rE   r  Zstarmap_asyncr  rv   r  r  )r/   r  r   r   r   Útest_starmap_asyncÙ  s    z_TestPool.test_starmap_asyncc          	   C   s8   |   | j tttdƒƒ¡ ¡ tttttdƒƒƒƒ¡ d S )Nrƒ   )rE   r  Ú	map_asyncr  rs   r•   rv   r  )r/   r   r   r   Útest_map_asyncÞ  s    z_TestPool.test_map_asyncc             C   sš   | j dkr| j ¡ ng }| jjtdg|j|jd ¡  |  dt	|ƒ¡ |  dg|d ¡ | jjtdg|j|jd ¡  |  dt	|ƒ¡ |  
|d t¡ d S )Nr<   Ú1)ÚcallbackÚerror_callbackr>   r   rA   rk   )rS   r<   rs   r  r  r   r   r   rE   r]   r[   r(   )r/   Ú	call_argsr   r   r   Útest_map_async_callbacksâ  s    z"_TestPool.test_map_async_callbacksc          	   C   s\   | j dkr|  d | j ¡¡ G dd„ dtƒ}|  t¡ | j t|ƒ gd ¡ W d Q R X d S )Nr=   ztest not appropriate for {}c               @   s   e Zd Zdd„ ZdS )z*_TestPool.test_map_unplicklable.<locals>.Ac             S   s   t dƒ‚d S )Nzcannot pickle)r   )r/   r   r   r   rI   ô  s    z5_TestPool.test_map_unplicklable.<locals>.A.__reduce__N)r7   r8   r9   rI   r   r   r   r   ÚAó  s   r&  rƒ   )	rS   rT   rU   r4  r¥   r   r  r  r  )r/   r&  r   r   r   Útest_map_unplicklableï  s
    
z_TestPool.test_map_unplicklablec             C   sD   y| j jtg ddjtd W n  tjk
r>   |  d¡ Y nX d S )Nr>   )r  )r   z2pool.map_async with chunksize stalled on null list)r  r  r  rv   r  r   ÚTimeoutErrorr.  )r/   r   r   r   Útest_map_chunksizeù  s    z_TestPool.test_map_chunksizec          	   C   s  | j dkr|  d | j ¡¡ |  t¡ | j ttddƒd¡ W d Q R X |  t¡ | j ttddƒd¡ W d Q R X |  t¡ | j ttddƒd¡ W d Q R X G dd„ dƒ}|  t¡ | j t|ƒ d¡ W d Q R X |  t¡ | j t|ƒ d¡ W d Q R X d S )	Nr<   ztest not appropriate for {}r>   r$   rƒ   r  c               @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )zE_TestPool.test_map_handle_iterable_exception.<locals>.SpecialIterablec             S   s   | S )Nr   )r/   r   r   r   Ú__iter__	  s    zN_TestPool.test_map_handle_iterable_exception.<locals>.SpecialIterable.__iter__c             S   s   t ‚d S )N)r  )r/   r   r   r   Ú__next__	  s    zN_TestPool.test_map_handle_iterable_exception.<locals>.SpecialIterable.__next__c             S   s   dS )Nr>   r   )r/   r   r   r   r}  	  s    zM_TestPool.test_map_handle_iterable_exception.<locals>.SpecialIterable.__len__N)r7   r8   r9   r*  r+  r}  r   r   r   r   ÚSpecialIterable	  s   r,  )	rS   rT   rU   r¥   r  r  r  r  r  )r/   r,  r   r   r   Ú"test_map_handle_iterable_exceptionÿ  s    
   z,_TestPool.test_map_handle_iterable_exceptionc             C   s<   | j  tdtf¡}t|jƒ}|  |ƒ d¡ |  |jt¡ d S )Nr  é1   )	r  Úapply_asyncr  r  r,   rv   rE   rC   r.   )r/   rG   rv   r   r   r   Ú
test_async	  s    
z_TestPool.test_asyncc             C   sD   | j  tdtd f¡}t|jƒ}| jtj|td |  	|j
t¡ d S )Nr  g      ð?)r   )r  r/  r  r  r,   rv   r¥   r   r(  rC   r.   )r/   rG   rv   r   r   r   Útest_async_timeout	  s    
z_TestPool.test_async_timeoutc          	   C   sÔ   | j  tttdƒƒ¡}|  t|ƒtttttdƒƒƒƒ¡ | j  tttdƒƒ¡}x$tdƒD ]}|  t|ƒ|| ¡ qXW |  t	|j
¡ | j jtttdƒƒdd}x$tdƒD ]}|  t|ƒ|| ¡ q¦W |  t	|j
¡ d S )Nrƒ   iè  r{   )r  )r  Úimapr  rs   r•   rE   r  râ  r¥   ÚStopIterationr+  )r/   rã  r™   r   r   r   Ú	test_imap%	  s    "z_TestPool.test_imapc             C   sH  | j dkr|  d | j ¡¡ | j ttddƒd¡}|  t|j	¡ | j ttddƒd¡}|  t|j	¡ | j ttddƒd¡}x$t
dƒD ]}|  t|ƒ|| ¡ q„W |  t|j	¡ | j ttddƒd	¡}x$t
d
ƒD ]}|  t|ƒ|| ¡ qÎW |  t|j	¡ | j ttddƒd¡}x&t
dƒD ]}|  t|ƒ|| ¡ qW |  t|j	¡ d S )Nr<   ztest not appropriate for {}r>   r$   rƒ   r  rÆ   r  rk   r  r  )rS   rT   rU   r  r2  r  r  r¥   r  r+  r•   rE   râ  )r/   rã  r™   r   r   r   Ú#test_imap_handle_iterable_exception3	  s$    
z-_TestPool.test_imap_handle_iterable_exceptionc          	   C   sx   | j  tttdƒƒ¡}|  t|ƒtttttdƒƒƒƒ¡ | j jtttdƒƒdd}|  t|ƒtttttdƒƒƒƒ¡ d S )Nrƒ   iè  r{   )r  )r  Úimap_unorderedr  rs   r•   rE   rî  r  )r/   rã  r   r   r   Útest_imap_unorderedM	  s    "z_TestPool.test_imap_unorderedc          	   C   sN  | j dkr|  d | j ¡¡ | j ttddƒd¡}|  t|j	¡ | j ttddƒd¡}|  t|j	¡ | j ttddƒd¡}t
ttt
tdƒƒƒƒ}|  t¡6 x.tdƒD ]"}t|ƒ}|  ||¡ | |¡ q¦W W d Q R X | j ttddƒd	¡}t
ttt
tdƒƒƒƒ}|  t¡8 x0tdƒD ]$}t|ƒ}|  ||¡ | |¡ qW W d Q R X d S )
Nr<   ztest not appropriate for {}r>   r$   rƒ   r  rÆ   r  rk   )rS   rT   rU   r  r6  r  r  r¥   r  r+  rs   r  r•   râ  ru   rÜ   )r/   rã  Zexpected_valuesr™   rF   r   r   r   Ú-test_imap_unordered_handle_iterable_exceptionT	  s8    
z7_TestPool.test_imap_unordered_handle_iterable_exceptionc             C   st   | j dkrtnt}|  || jd¡ |  || jd¡ | j dkrp|  d¡}z|  dt|jƒ¡ W d | ¡  | 	¡  X d S )Nr<   r$   r   r  )
rS   ÚRemoteErrorr(   r¥   r  rE   r]   Ú_poolr   rw   )r/   Zexpected_errorry   r   r   r   Útest_make_poolx	  s    

z_TestPool.test_make_poolc             C   sP   | j jtjdd„ tdƒD ƒdd}| j  ¡  t| j jƒ}|ƒ  |  |j	d¡ d S )Nc             S   s   g | ]}d ‘qS )gš™™™™™¹?r   )r¶   r™   r   r   r   r·   ‰	  s    z,_TestPool.test_terminate.<locals>.<listcomp>i'  r>   )r  g       @)
r  r  r1   r|   r•   r‰   r,   rw   Ú
assertLessr.   )r/   r    rw   r   r   r   r‹   ‡	  s    
z_TestPool.test_terminatec             C   sz   |   d¡}|  | tg ¡g ¡ |  t| tg ¡ƒg ¡ |  t| tg ¡ƒg ¡ |  | tg ¡ ¡ g ¡ | 	¡  | 
¡  d S )Nr>   )r  rE   r  r  rs   r2  r6  r  rv   r   rw   )r/   ry   r   r   r   Útest_empty_iterable‘	  s    
z_TestPool.test_empty_iterablec          	   C   st   | j dkrpttdƒƒ}dd„ |D ƒ}|  d¡"}| t|¡}|  | ¡ |¡ W d Q R X | ¡  |  	t
|jt|¡ d S )Nr;   rƒ   c             S   s   g | ]}t |ƒ‘qS r   )r  )r¶   r™   r   r   r   r·    	  s    z*_TestPool.test_context.<locals>.<listcomp>rk   )rS   rs   r•   r  r  r  rE   rv   rw   r¥   r(   )r/   ÚLr¡   ry   rô   r   r   r   Útest_context	  s    
z_TestPool.test_contextc             C   s   t dƒ‚d S )Né{   )r   )rj   r   r   r   Ú_test_traceback§	  s    z_TestPool._test_tracebackc             C   s  | j dkrŒ|  d¡H}y| | j¡ W n& tk
rN } z|}W d d }~X Y nX |  d¡ W d Q R X | ¡  |  t|ƒt	¡ |  
|jd¡ |j}|  t|ƒtjj¡ |  d|j¡ tj ¡ 2}y|‚W n" t	k
rè   tjt ¡ Ž  Y nX W d Q R X |  d| ¡ ¡ |  d¡p}y| ttddƒd¡ W n( tk
rP } z|}W d d }~X Y nX |  d¡ |  t|ƒt¡ |  |jd ¡ W d Q R X | ¡  d S )Nr;   r>   zexpected RuntimeError)r@  z&raise RuntimeError(123) # some commentr$   zexpected SayWhenError)rS   r  r  rA  Ú	Exceptionr.  rw   r²   rr   r   rE   r3   Ú	__cause__r   r  ZRemoteTracebackru   ÚtbrÀ   r   r5  rª   Ú
excepthookÚexc_infoÚgetvaluer  r  r  r  )r/   ry   rx   ÚexcÚcauseÚf1r   r   r   Útest_traceback«	  s:    

z_TestPool.test_tracebackc             C   s   t dƒ‚d S )NÚfoo)r   )rj   r   r   r   Ú_test_wrapped_exceptionÑ	  s    z!_TestPool._test_wrapped_exceptionc          
   C   sD   |   d¡(}|  t¡ | | j¡ W d Q R X W d Q R X | ¡  d S )Nr>   )r  r¥   r   r  rM  rw   )r/   ry   r   r   r   Útest_wrapped_exceptionÕ	  s     z _TestPool.test_wrapped_exceptionc             C   s~   t  ¡ }|  t¡N |  d¡8}z| tddg¡ W d t  d¡ | ¡  | 	¡  X W d Q R X W d Q R X |  
t  ¡ | d¡ d S )Nrk   r   r>   g      à?gÍÌÌÌÌÌì?)r1   r2   r¥   r(   r  r  r  r|   r   rw   ÚassertGreater)r/   Zt_startry   r   r   r   Útest_map_no_failfastÜ	  s    
z_TestPool.test_map_no_failfastc             C   sh   dd„ t dƒD ƒ}dd„ |D ƒ}| j t|¡ ~t t¡ |  tdd„ |D ƒƒd h¡ |  t	j
d¡ d S )Nc             S   s   g | ]
}t ƒ ‘qS r   )r  )r¶   r™   r   r   r   r·   ó	  s    z4_TestPool.test_release_task_refs.<locals>.<listcomp>rƒ   c             S   s   g | ]}t  |¡‘qS r   )r®   r¯   )r¶   Úor   r   r   r·   ô	  s    c             s   s   | ]}|ƒ V  qd S )Nr   )r¶   r³   r   r   r   rì  ù	  s    z3_TestPool.test_release_task_refs.<locals>.<genexpr>r   )r•   r  r  r  r1   r|   r’   rE   r¨   r  r	  )r/   ZobjsZrefsr   r   r   Útest_release_task_refsð	  s    
z _TestPool.test_release_task_refs) r7   r8   r9   ré   r  r  r  r  r  r  r   r%  r'  r)  r-  r0  r1  r4  r5  r7  r8  r;  r‹   r=  r?  rA  rK  rM  rN  rP  rR  Ú__classcell__r   r   )r  r   r  ·  s6   	
$

&r  c               C   s   t dƒ‚d S )NÚkey)ÚKeyErrorr   r   r   r   Úraisingÿ	  s    rV  c               C   s   dd„ S )Nc               S   s   dS )Né*   r   r   r   r   r   rY  
  rZ  z%unpickleable_result.<locals>.<lambda>r   r   r   r   r   Úunpickleable_result
  s    rX  c               @   s    e Zd ZdZdd„ Zdd„ ZdS )Ú_TestPoolWorkerErrors)r;   c                sj   t  d¡}d g‰ ‡ fdd„}|jt|d}|  t|j¡ |  ˆ d ¡ |  ˆ d t¡ | 	¡  | 
¡  d S )Nrk   c                s   | ˆ d< d S )Nr   r   )rH  )Ú
scratchpadr   r   Úerrback
  s    z@_TestPoolWorkerErrors.test_async_error_callback.<locals>.errback)r#  r   )r   r  r/  rV  r¥   rU  rv   rX   r[   r   rw   )r/   ry   r[  rG   r   )rZ  r   Útest_async_error_callback
  s    
z/_TestPoolWorkerErrors.test_async_error_callbackc                s¤   ddl m} t d¡}xxtdƒD ]l}d g‰ ‡ fdd„}|jt|d}|  ||j¡ ˆ d }|  	|¡ |  
ˆ d |¡ |  |j¡ |  |j¡ q W | ¡  | ¡  d S )Nr   )ÚMaybeEncodingErrorrk   rÆ   c                s   | ˆ d< d S )Nr   r   )rH  )rZ  r   r   r[  
  s    z?_TestPoolWorkerErrors.test_unpickleable_result.<locals>.errback)r#  )Úmultiprocessing.poolr]  r   r  r•   r/  rX  r¥   rv   rX   r[   ZassertIsNotNonerH  rF   r   rw   )r/   r]  ry   Z	iterationr[  rG   Úwrappedr   )rZ  r   Útest_unpickleable_result
  s    

z._TestPoolWorkerErrors.test_unpickleable_resultN)r7   r8   r9   rJ   r\  r`  r   r   r   r   rY  
  s   rY  c               @   s    e Zd ZdZdd„ Zdd„ ZdS )Ú_TestPoolWorkerLifetime)r;   c       	      C   s  t jddd}|  dt|jƒ¡ dd„ |jD ƒ}g }x$tdƒD ]}| | t|f¡¡ q>W x(t	|ƒD ]\}}|  | 
¡ t|ƒ¡ qdW | ¡  d}x.|r¾tdd	„ |jD ƒƒs¾|d
8 }t t¡ q’W dd„ |jD ƒ}|  d |¡ |  d |¡ |  t|ƒt|ƒ¡ | ¡  | ¡  d S )Nr  rƒ   )Úmaxtasksperchildc             S   s   g | ]
}|j ‘qS r   )ri   )r¶   rÿ   r   r   r   r·   3
  s    zE_TestPoolWorkerLifetime.test_pool_worker_lifetime.<locals>.<listcomp>r{   é2   c             s   s   | ]}|  ¡ V  qd S )N)rY   )r¶   rÿ   r   r   r   rì  A
  s    zD_TestPoolWorkerLifetime.test_pool_worker_lifetime.<locals>.<genexpr>r>   c             S   s   g | ]
}|j ‘qS r   )ri   )r¶   rÿ   r   r   r   r·   D
  s    )r   r  rE   r]   r:  r•   r   r/  r  Ú	enumeraterv   Z_repopulate_poolÚallr1   r|   r’   rp   ZassertNotEqualrî  r   rw   )	r/   ry   Zorigworkerpidsr–  r™   r³  rG   Z	countdownZfinalworkerpidsr   r   r   Útest_pool_worker_lifetime0
  s&    z1_TestPoolWorkerLifetime.test_pool_worker_lifetimec             C   sx   t jddd}g }x&tdƒD ]}| | t|df¡¡ qW | ¡  | ¡  x(t|ƒD ]\}}|  	| 
¡ t|ƒ¡ qTW d S )Nr  r>   )rb  r  g333333Ó?)r   r  r•   r   r/  r  r   rw   rd  rE   rv   )r/   ry   r–  r™   r³  rG   r   r   r   Ú%test_pool_worker_lifetime_early_closeM
  s    z=_TestPoolWorkerLifetime.test_pool_worker_lifetime_early_closeN)r7   r8   r9   rJ   rf  rg  r   r   r   r   ra  -
  s   ra  )ÚBaseManagerÚ	BaseProxyr9  c               @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚFooBarc             C   s   dS )Nzf()r   )r/   r   r   r   rü   a
  s    zFooBar.fc             C   s   t ‚d S )N)r(   )r/   r   r   r   Úgc
  s    zFooBar.gc             C   s   dS )Nz_h()r   )r/   r   r   r   Ú_he
  s    z	FooBar._hN)r7   r8   r9   rü   rk  rl  r   r   r   r   rj  `
  s   rj  c              c   s    xt dƒD ]} | |  V  q
W d S )Nrƒ   )r•   )r™   r   r   r   Úbazh
  s    rm  c               @   s    e Zd ZdZdd„ Zdd„ ZdS )ÚIteratorProxy)r+  c             C   s   | S )Nr   )r/   r   r   r   r*  n
  s    zIteratorProxy.__iter__c             C   s
   |   d¡S )Nr+  )Ú_callmethod)r/   r   r   r   r+  p
  s    zIteratorProxy.__next__N)r7   r8   r9   Z	_exposed_r*  r+  r   r   r   r   rn  l
  s   rn  c               @   s   e Zd ZdS )Ú	MyManagerN)r7   r8   r9   r   r   r   r   rp  s
  s   rp  ÚFoo)ÚcallableÚBar)rü   rl  )rr  Zexposed)rr  Z	proxytypec               @   s0   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
S )Ú_TestMyManager)r<   c             C   s4   t ƒ }| ¡  |  |¡ | ¡  |  |jjd¡ d S )Nr   )rp  rt   ÚcommonÚshutdownrE   Ú_processr_   )r/   r<   r   r   r   Útest_mymanager
  s
    
z_TestMyManager.test_mymanagerc          	   C   s8   t ƒ }|  |¡ W d Q R X |  |jjdtj f¡ d S )Nr   )rp  ru  ru   rw  r_   r…   rŠ   )r/   r<   r   r   r   Útest_mymanager_contextŠ
  s    z%_TestMyManager.test_mymanager_contextc          	   C   s<   t ƒ }| ¡  | |  |¡ W d Q R X |  |jjd¡ d S )Nr   )rp  rt   ru  rE   rw  r_   )r/   r<   r   r   r   Ú!test_mymanager_context_prestarted‘
  s
    z0_TestMyManager.test_mymanager_context_prestartedc                s  |  ¡ ‰| ¡ ‰ | ¡ }‡fdd„dD ƒ}‡ fdd„dD ƒ}|  |ddg¡ |  |ddg¡ |  ˆ ¡ d¡ |  tˆj¡ |  ˆ d¡d¡ |  t	ˆjd¡ |  ˆ  ¡ d¡ |  ˆ  
¡ d	¡ |  ˆ  d¡d¡ |  ˆ  d¡d	¡ |  t|ƒd
d„ tdƒD ƒ¡ d S )Nc                s   g | ]}t ˆ |ƒr|‘qS r   )r„   )r¶   rh   )rL  r   r   r·   
  s    z)_TestMyManager.common.<locals>.<listcomp>)rü   rk  rl  c                s   g | ]}t ˆ |ƒr|‘qS r   )r„   )r¶   rh   )Úbarr   r   r·   ž
  s    rü   rk  rl  zf()z_h()c             S   s   g | ]}|| ‘qS r   r   )r¶   r™   r   r   r   r·   ­
  s    rƒ   )rq  rs  rm  rE   rü   r¥   r(   rk  ro  r9  rl  rs   r•   )r/   r<   rm  Zfoo_methodsZbar_methodsr   )r{  rL  r   ru  ˜
  s     z_TestMyManager.commonN)r7   r8   r9   rJ   rx  ry  rz  ru  r   r   r   r   rt  {
  s
   rt  c               C   s   t S )N)Ú_queuer   r   r   r   Ú	get_queueµ
  s    r}  c               @   s   e Zd ZdS )ÚQueueManagerN)r7   r8   r9   r   r   r   r   r~  ¸
  s   r~  c               @   s   e Zd ZdS )ÚQueueManager2N)r7   r8   r9   r   r   r   r   r  ¼
  s   r  Z	xmlrpclibc               @   sB   e Zd ZdZdddddddgZedd… Zed	d
„ ƒZdd„ ZdS )Ú_TestRemoteManager)r<   zhello worldNTg      @u   hallÃ¥ vÃ¤rldenu   Ð¿Ñ€Ð¸Ð²Ñ–Ñ‚ ÑÐ²Ñ–Ñ‚s   hallå världenc             C   s2   t ||td}| ¡  | ¡ }| t| jƒ¡ d S )N)ÚaddressrW   Ú
serializer)r  Ú
SERIALIZERÚconnectr}  rO   Útupler½  )rj   r  rW   r<   r   r   r   r   Ú_putterÍ
  s
    z_TestRemoteManager._putterc             C   s¢   t  d¡}ttjjdf|td}| ¡  |  |j	¡ | j
| j|j|fd}d|_| ¡  t|j|td}| ¡  | ¡ }|  | ¡ | j¡ |  t|jtj¡ ~d S )Né    r   )r  rW   r‚  )rb   r3   T)r%   Úurandomr~  rÀ   r   ÚHOSTrƒ  rt   r§   rv  rc   r†  r  rZ   r  r„  r}  rE   rv   r    r¥   rB  rO   r1   r|   )r/   rW   r<   ry   Zmanager2r   r   r   r   Útest_remote×
  s    
z_TestRemoteManager.test_remote)	r7   r8   r9   rJ   r½  r    ré   r†  rŠ  r   r   r   r   r€  Ã
  s   
r€  c               @   s    e Zd Zedd„ ƒZdd„ ZdS )Ú_TestManagerRestartc             C   s,   t ||td}| ¡  | ¡ }| d¡ d S )N)r  rW   r‚  zhello world)r~  rƒ  r„  r}  rO   )rj   r  rW   r<   r   r   r   r   r†  õ
  s
    z_TestManagerRestart._putterc          
   C   s(  t  d¡}ttjjdf|td}zd| ¡ }|j}|j	 
¡  | ¡  | j| j|j|fd}| ¡  | ¡  | ¡ }|  | ¡ d¡ ~W d t|dƒr˜| ¡  X t||td}y| ¡  |  |j¡ W nb tk
r" } zB|jtjkrâ‚ t d¡ t||td}t|dƒr|  |j¡ W d d }~X Y nX d S )Nr‡  r   )r  rW   r‚  )rb   r3   zhello worldrv  g      ð?)r%   rˆ  r~  rÀ   r   r‰  rƒ  Z
get_serverr  Zlistenerr   rt   rc   r†  rw   r}  rE   rv   r„   rv  r§   ÚOSErrorÚerrnoZ
EADDRINUSEr1   r|   )r/   rW   r<   ZsrvrÚaddrry   r   rx   r   r   r   Útest_rapid_restartý
  s:    




z&_TestManagerRestart.test_rapid_restartN)r7   r8   r9   ré   r†  r  r   r   r   r   r‹  ó
  s   r‹  Ú c               @   sì   e Zd ZdZedd„ ƒZdd„ Zdd„ Zdd	„ Zd
d„ Z	edd„ ƒZ
ed$dd„ƒZe ed¡dd„ ƒZe ed¡e ejdkd¡e edkd¡e eedƒd¡dd„ ƒƒƒƒZedd„ ƒZe ed¡e ejdkd¡dd „ ƒƒZd!d"„ Zd#S )%Ú_TestConnection)r;   r=   c             C   s,   xt |jtƒD ]}| |¡ qW | ¡  d S )N)rí   Ú
recv_bytesÚSENTINELÚ
send_bytesr   )rj   r±  Úmsgr   r   r   Ú_echo-  s    z_TestConnection._echoc          
   C   sL  |   ¡ \}}| j| j|fd}d|_| ¡  ddd g}tdƒ}|d }t dttdƒƒ¡}| j	d	krx|  
t| ¡ ƒt¡ |  
| |¡d ¡ |  
| ¡ |¡ |  
| |¡d ¡ |  
| ¡ |¡ | j	d	kr t dd
gd ¡}t|ƒd
gdt|ƒ   }	|  
| |¡d ¡ |  
| |¡t|ƒ|j ¡ |  
t|ƒ|	¡ t dd
gd ¡}d
gd t|ƒ d
gdt|ƒ   }	|  
| |¡d ¡ |  
| |d|j ¡t|ƒ|j ¡ |  
t|ƒ|	¡ ttdƒƒ}|  
| |¡d ¡ y| |¡}
W n6 tjk
r } z|  
|j|f¡ W d d }~X Y nX |  d|
 ¡ t|jƒ}|  
|ƒ d¡ |  |jd
¡ |  
|dƒd¡ |  |jd
¡ |  
|tƒd¡ |  |jt¡ | d ¡ t  d¡ |  
|tƒd¡ |  |jd
¡ |  
| ¡ d ¡ tdƒd }| |¡ |  
| ¡ |¡ | t!¡ | "¡  | j	d	kr@|  
|j#d¡ |  
|j$d¡ |  %t&|j¡ |  %t&|j¡ | '¡  d S )N)rb   r3   Tr>   g      @zhello worldrƒ   r™   r  r;   r   r  r  z(                                        zexpected BufferTooShort, got %sFr$   gš™™™™™¹?ÚXi   )(r›   rc   r–  rZ   rt   r   rÖ  rs   r•   rS   rE   rr   Úfilenor   r”   rž   r”  r’  r]   Zrecv_bytes_intoÚitemsizeÚ	bytearrayr   ZBufferTooShortr3   r.  r,   rœ   rC   r.   r  r1   r|   r“  r   ÚreadableÚwritabler¥   ÚEOFErrorrw   )r/   r±  rë   ry   rÑ  r•  Zlongmsgr×  Úbufferr¡   rG   rx   rœ   Zreally_big_msgr   r   r   Útest_connection3  sr    

$"




z_TestConnection.test_connectionc             C   s¤   | j dd\}}|  | d¡d ¡ |  | ¡ d¡ | jdkr |  |jd¡ |  |jd¡ |  |jd¡ |  |jd¡ |  t|jd¡ |  t|j¡ |  t|j	¡ d S )NF)rš   r>   r;   Trk   )
r›   rE   r”   rž   rS   r›  rœ  r¥   rŒ  rœ   )r/   ÚreaderÚwriterr   r   r   Útest_duplex_false‚  s    
z!_TestConnection.test_duplex_falsec             C   st   |   ¡ \}}| j| j|fd}d|_| ¡  | ¡  tdƒ}| |¡ |  | 	¡ |¡ | t
¡ | ¡  | ¡  d S )N)rb   r3   Trm   )r›   rc   r–  rZ   rt   r   r   r”  rE   r’  r“  rw   )r/   r±  rë   ry   r•  r   r   r   Útest_spawn_close  s    

z _TestConnection.test_spawn_closec             C   s:  | j dkr|  d | j ¡¡ tdƒ}|  ¡ \}}| |¡ |  | ¡ |¡ | |d¡ |  | ¡ |dd … ¡ | |dd¡ |  | ¡ |dd… ¡ | |d¡ |  | ¡ td	ƒ¡ | |dd
¡ |  | ¡ td	ƒ¡ |  t	|j|d¡ |  t	|j|dd¡ |  t	|j|dd¡ |  t	|j|d¡ |  t	|j|dd¡ d S )Nr;   ztest not appropriate for {}ZabcdefghijklmnopqrstuvwxyzrN   r  r  é   é   r  r   é   é   r>   r$   r  )
rS   rT   rU   r   r›   r”  rE   r’  r¥   r(   )r/   r•  rA   rB   r   r   r   Útest_sendbytes¤  s&    

z_TestConnection.test_sendbytesc          
   C   sL   yt  |¡ W n4 tk
rB } z|jtjkr0dS ‚ W d d }~X Y nX dS d S )NFT)r%   ÚfstatrŒ  r  ÚEBADF)rj   r  rx   r   r   r   Ú_is_fd_assignedÄ  s    z_TestConnection._is_fd_assignedFc             C   sh   |r2x,t ddƒD ]}|  |¡st | ¡ |¡ qW t |¡}trNt |tj	¡}t 
||¡ t |¡ d S )Nr   r   )r•   r«  r%   Údup2r˜  r   Úrecv_handleÚmsvcrtZopen_osfhandler  r+  r   )rj   r±  ÚdataZcreate_dummy_fdsr™   r  r   r   r   Ú_writefdÏ  s    

z_TestConnection._writefdz$test needs multiprocessing.reductionc          	   C   sÐ   | j dkr|  d¡ | jdd\}}| j| j|dfd}d|_| ¡  |  tj	j
tj	j¡ ttj	jdƒ,}| ¡ }tr€t |¡}t |||j¡ W d Q R X | ¡  ttj	jdƒ}|  | ¡ d¡ W d Q R X d S )	Nr;   zonly makes sense with processesT)rš   s   foo)rb   r3   ÚwbÚrb)rS   rT   r›   rc   r°  rZ   rt   r§   rÀ   r   r÷   rö   rù   r˜  r®  Zget_osfhandler   Úsend_handleri   rw   rE   rú   )r/   r±  rë   ry   rü   r  r   r   r   Útest_fd_transferÛ  s    


z _TestConnection.test_fd_transferr   z*test semantics don't make sense on Windowsr   z)largest assignable fd number is too smallr¬  ztest needs os.dup2()c          
   C   s  | j dkr|  d¡ | jdd\}}| j| j|ddfd}d|_| ¡  |  tj	j
tj	j¡ ttj	jdƒf}| ¡ }x(tdtƒD ]}|  |¡s€P q€W |  d	¡ t ||¡ zt |||j¡ W d t |¡ X W d Q R X | ¡  ttj	jd
ƒ}|  | ¡ d¡ W d Q R X d S )Nr;   zonly makes sense with processesT)rš   s   bar)rb   r3   r±  r   z2could not find an unassigned large file descriptorr²  )rS   rT   r›   rc   r°  rZ   rt   r§   rÀ   r   r÷   rö   rù   r˜  r•   ÚMAXFDr«  r.  r%   r¬  r   r³  ri   r   rw   rE   rú   )r/   r±  rë   ry   rü   r  Znewfdr   r   r   Útest_large_fd_transferî  s(    	



z&_TestConnection.test_large_fd_transferc             C   s   t  | ¡ d¡ d S )Nó    )r%   r+  r˜  )r/   r±  r   r   r   Ú_send_data_without_fd  s    z%_TestConnection._send_data_without_fdzdoesn't make sense on Windowsc             C   s`   | j dkr|  d¡ | jdd\}}| j| j|fd}d|_| ¡  |  tt	j
|¡ | ¡  d S )Nr;   zonly makes sense with processesT)rš   )rb   r3   )rS   rT   r›   rc   r¸  rZ   rt   r¥   r   r   r­  rw   )r/   r±  rë   ry   r   r   r   Útest_missing_fd_transfer  s    

z(_TestConnection.test_missing_fd_transferc          
   C   sª   |   ¡ \}}|R |B | d¡ |  | ¡ d¡ | jdkrT|  |j¡ |  |j¡ W d Q R X W d Q R X | jdkr¦|  |j¡ |  |j¡ |  t	|j¡ |  t	|j¡ d S )NiÁ  r;   )
r›   r”   rE   rž   rS   re   ÚclosedrX   r¥   rŒ  )r/   rA   rB   r   r   r   r?  "  s    

 
z_TestConnection.test_contextN)F)r7   r8   r9   rJ   ré   r–  rŸ  r¢  r£  r¨  r«  r°  r)   rk  ÚHAS_REDUCTIONr´  rÝ  rª   rº   rµ  r„   r%   r¶  r¸  r¹  r?  r   r   r   r   r‘  )  s*   O 


r‘  c               @   s    e Zd ZdZdd„ Zdd„ ZdS )Ú_TestListener)r;   c             C   sF   x@| j jD ]4}| j j|d}|  |j¡ |  t| j j|j|¡ q
W d S )N)Úfamily)Ú
connectionÚfamiliesÚListenerr§   r   r¥   rŒ  r  )r/   r½  rü  r   r   r   Útest_multiple_bind6  s
    z _TestListener.test_multiple_bindc             C   sz   | j  ¡ N}| j  |j¡4}| ¡  }| d¡ |  | ¡ d¡ W d Q R X W d Q R X W d Q R X | jdkrv|  	t
|j¡ d S )NiÁ  r;   )r¾  rÀ  ÚClientr  Úacceptr”   rE   rž   rS   r¥   rŒ  )r/   rü  rQ   r¶  r   r   r   r?  =  s    

.
z_TestListener.test_contextN)r7   r8   r9   rJ   rÁ  r?  r   r   r   r   r¼  2  s   r¼  c               @   s4   e Zd ZdZedd„ ƒZdd„ Zdd„ Zdd	„ Zd
S )Ú_TestListenerClient)r;   r=   c             C   s"   | j  |¡}| d¡ | ¡  d S )Nrm   )r¾  rÂ  r”   r   )rj   r  r±  r   r   r   rd   K  s    
z_TestListenerClient._testc             C   sn   xh| j jD ]\}| j j|d}| j| j|jfd}d|_| ¡  | ¡ }|  	| 
¡ d¡ | ¡  | ¡  q
W d S )N)r½  )rb   r3   Trm   )r¾  r¿  rÀ  rc   rd   r  rZ   rt   rÃ  rE   rž   rw   r   )r/   r½  rü  ry   r±  r   r   r   Útest_listener_clientQ  s    z(_TestListenerClient.test_listener_clientc             C   sj   | j  ¡ }| j| j|jfd}d|_| ¡  t d¡ | 	¡ }|  
| ¡ d¡ | ¡  | ¡  | ¡  d S )N)rb   r3   Tr>   rm   )r¾  rÀ  rc   rd   r  rZ   rt   r1   r|   rÃ  rE   rž   r   rw   )r/   rü  ry   r±  r   r   r   Útest_issue14725\  s    

z#_TestListenerClient.test_issue14725c             C   sl   xf| j jD ]Z}| j j|d}| j  |j¡}| ¡ }| d¡ |  | d¡¡ | 	¡  | 	¡  | 	¡  q
W d S )N)r½  s   hellor>   )
r¾  r¿  rÀ  rÂ  r  rÃ  r”  rX   rœ   r   )r/   Úfamrü  rQ   rA   r   r   r   Útest_issue16955l  s    
z#_TestListenerClient.test_issue16955N)	r7   r8   r9   rJ   ré   rd   rÅ  rÆ  rÈ  r   r   r   r   rÄ  G  s
   rÄ  c               @   sT   e Zd ZdZdd„ Zedd„ ƒZdd„ Zedd	„ ƒZd
d„ Z	edd„ ƒZ
dd„ ZdS )Ú	_TestPoll)r;   r=   c             C   sJ   |   ¡ \}}|  | ¡ d¡ | d¡ |  | ¡ d¡ |  | ¡ d¡ d S )NFrZ  T)r›   rE   rœ   r”  )r/   rA   rB   r   r   r   Útest_empty_string{  s
    
z_TestPoll.test_empty_stringc             C   s.   x |D ]}t  d¡ | |¡ qW | ¡  d S )Ngš™™™™™¹?)r1   r|   r”  r   )rj   r±  Ústringsr
   r   r   r   Ú_child_strings‚  s    

z_TestPoll._child_stringsc             C   sx   d}|   ¡ \}}| j| j||fd}| ¡  x>|D ]6}xtdƒD ]}| d¡r@P q@W | ¡ }|  ||¡ q2W | ¡  d S )N)s   hellorZ  ó   aó   brZ  s   byerZ  s   lop)rb   r3   éÈ   g{®Gáz„?)	r›   rc   rÌ  rt   r•   rœ   r’  rE   rw   )r/   rË  rA   rB   ry   r
   r™   r¹  r   r   r   Útest_strings‰  s    

z_TestPoll.test_stringsc             C   s   |  d¡ d S )NrN   )rœ   )rj   rô   r   r   r   Ú_child_boundaries˜  s    z_TestPoll._child_boundariesc             C   sv   |   d¡\}}| j| j|fd}| ¡  t d¡ ddg}x|D ]}| |¡ q@W | ¡  | ¡  |  	| 
¡ |¡ d S )NF)rb   r3   rk   s   firsts   second)r›   rc   rÑ  rt   r1   r|   r”  r   rw   ru   r’  )r/   rô   rÿ   ry   r>  r&  r   r   r   Útest_boundaries   s    

z_TestPoll.test_boundariesc             C   s"   |  d¡ |  d¡ |  d¡ d S )NrÍ  rÎ  s   cd)r”  )rj   rB   r   r   r   Ú_child_dont_merge¬  s    

z_TestPoll._child_dont_mergec             C   sà   |   ¡ \}}|  | d¡d¡ |  | d¡d¡ | j| j|fd}| ¡  |  | ¡ d¡ |  | d¡d¡ |  | d¡d¡ |  | ¡ d¡ |  | d¡d¡ |  | d¡d¡ |  | d¡d¡ |  | ¡ d	¡ | ¡  d S )
Ng        Fgš™™™™™¹?)rb   r3   rÍ  g      ð?TrÎ  s   cd)r›   rE   rœ   rc   rÓ  rt   r’  rw   )r/   rA   rB   ry   r   r   r   Útest_dont_merge²  s    z_TestPoll.test_dont_mergeN)r7   r8   r9   rJ   rÊ  ré   rÌ  rÐ  rÑ  rÒ  rÓ  rÔ  r   r   r   r   rÉ  w  s   rÉ  z$test needs multiprocessing.reductionc               @   sP   e Zd ZdZedd„ ƒZedd„ ƒZedd„ ƒZdd	„ Zed
d„ ƒZ	dd„ Z
dS )Ú_TestPicklingConnections)r;   c             C   s   ddl m} |jtd d S )Nr   )Úresource_sharer)r   )r   rÖ  rñ   r   )rj   rÖ  r   r   r   r  Î  s    z&_TestPicklingConnections.tearDownClassc             C   s¬   xH|D ]@}| j j|d}| |j¡ | ¡ }| |¡ | ¡  | ¡  qW t ¡ }| tj	j
df¡ | ¡  | | ¡ ¡ | ¡ \}}| |¡ | ¡  | ¡  | ¡  d S )N)r½  r   )r¾  rÀ  r”   r  rÃ  r   ÚsocketÚbindrÀ   r   r‰  ÚlistenÚgetsocknamerž   )rj   r±  r¿  rÇ  rü  Únew_connrŽ  r   r   r   Ú	_listenerÓ  s     


z"_TestPicklingConnections._listenerc             C   s|   x:t |jd ƒD ]*\}}| j |¡}| | ¡ ¡ | ¡  qW | ¡ \}}t ¡ }| |¡ | 	| ¡ ¡ | ¡  | ¡  d S )N)
rí   rž   r¾  rÂ  r”   rî   r   r×  r„  Úsendall)rj   r±  r  r•  Úclientr   r   r   Ú_remoteè  s    
z _TestPicklingConnections._remotec             C   sf  | j j}|  ¡ \}}| j| j||fd}d|_| ¡  | ¡  |  ¡ \}}| j| j|fd}d|_| ¡  | ¡  xL|D ]D}d|  	d¡}	| 
¡ }
| |
|	f¡ | 
¡ }|  | 
¡ |	 ¡ ¡ qxW | d ¡ tdƒ}	| 
¡ }
| |
|	f¡ | 
¡ }g }x | 
d¡}|sP | |¡ qöW d |¡}|  ||	 ¡ ¡ | ¡  | d ¡ | ¡  | ¡  | ¡  | ¡  d S )N)rb   r3   TzThis connection uses family %sÚasciiz$This connection uses a normal socketr{   rZ  )r¾  r¿  r›   rc   rÜ  rZ   rt   r   rß  r	   rž   r”   rE   rî   r   r   rw   )r/   r¿  ZlconnZlconn0ZlprŸ   Zrconn0ZrprÇ  r•  r  rÛ  Úbufr
   r   r   r   Útest_pickling÷  sH    




z&_TestPicklingConnections.test_picklingc             C   sD   |  ¡ }| d¡ | ¡  |  ¡ }|  ¡ }| |d ¡ | ¡  d S )Nzall is wellrk   )rž   r”   r   )rj   r±  rÿ   rô   r•  r   r   r   Úchild_access%  s    
z%_TestPicklingConnections.child_accessc             C   s¾   |   ¡ \}}| j| j|fd}d|_| ¡  | ¡  | j dd\}}| |¡ | ¡  |  | ¡ d¡ | ¡  | j dd\}}| |¡ | ¡  | d¡ | ¡  |  | ¡ d¡ | 	¡  d S )N)rb   r3   TF)rš   zall is wellZfoobarZfoobarfoobar)
r›   rc   rã  rZ   rt   r   r”   rE   rž   rw   )r/   r±  rë   ry   rô   rÿ   r   r   r   Útest_access1  s"    


z$_TestPicklingConnections.test_accessN)r7   r8   r9   rJ   ré   r  rÜ  rß  râ  rã  rä  r   r   r   r   rÕ  É  s   .rÕ  c               @   s    e Zd ZdZdd„ Zdd„ ZdS )Ú	_TestHeap)r;   c          	   C   s–  d}d}g }xVt |ƒD ]J}tt dd¡d ƒ}tj |¡}| |¡ t|ƒ|krt 	|¡}||= qW tjjj
}g }d}	|j ¡  |  |jj¡ xJt|j ¡ ƒD ]8}
x2|
D ]*\}}}| |j |¡|||| df¡ q¨W qžW x@|jD ]6\}}}| |j |¡|||| df¡ |	|| 7 }	qâW | ¡  xlt t|ƒd ƒD ]X}|| d d… \}}}||d  d d… \}}}|  ||kr‚|dkpˆ||k¡ q6W d S )	Niˆ  rc  r   r>   iè  ZfreeÚoccupiedr  )r•   r   ÚrandomZlognormvariater   rq  rr  r   r]   Z	randrangeZ_heapry  rA  r§   rB  rs   Z_len_to_seqr½  Z_arenasÚindexZ_allocated_blocksÚsortrX   )r/   Z
iterationsZ	maxblocksZblocksr™   rÙ  rB   rq  re  ræ  r>  Zarenart   rñ   ZnarenaZnstartZnstopr   r   r   Ú	test_heapV  s:    




z_TestHeap.test_heapc             C   sz   t  ¡ st  ¡  |  t j¡ t  ¡ }| jt jf|žŽ  t  d¡ x4tdƒD ](}tj	 
d¡}tj	 
d¡}||_||_qJW d S )Nrƒ   iˆ  r>   )r°   Z	isenabledZenabler§   ZdisableÚget_thresholdÚset_thresholdr•   r   rq  rr  Zbuddy)r/   Z
thresholdsr™   rA   rB   r   r   r   Útest_free_from_gc}  s    
z_TestHeap.test_free_from_gcN)r7   r8   r9   rJ   rê  rí  r   r   r   r   rå  R  s   'rå  c               @   s"   e Zd ZdefdefdefgZdS )Ú_Foor¹  rº  ÚzN)r7   r8   r9   r    r!   r"   Z_fields_r   r   r   r   rî  —  s   rî  c               @   s>   e Zd ZdZdd„ Zedd„ ƒZddd„Zd	d
„ Zdd„ Z	dS )Ú_TestSharedCTypes)r;   c             C   s   t s|  d¡ d S )Nz%requires multiprocessing.sharedctypes)rl  rT   )r/   r   r   r   r‘  ¢  s    z_TestSharedCTypes.setUpc             C   s~   | j d9  _ | j d9  _ | j d9  _ | jd9  _| jd9  _| j d9  _ x$tt|ƒƒD ]}||  d9  < qbW d S )Nrk   )rF   r¹  rº  r•   r]   )rj   r¹  rº  rï  rL  r×  Ústringr™   r   r   r   Ú_double¦  s    z_TestSharedCTypes._doubleFc       
      C   s   t dd|d}t td|d}t td|d}t tdd|d}| jdttd	ƒƒ|d}| jd
d|d}tdƒ|_| j	| j
||||||fd}d|_| ¡  | ¡  |  |jd¡ |  |jd¡ |  |jd¡ |  |jd¡ |  |jd¡ x$td	ƒD ]}	|  ||	 |	d ¡ qîW |  |jtdƒ¡ d S )Nr™   r  )rC  gUUUUUUÕ?l        r  rk   r¶  rƒ   rQ   rÆ   rm   )rb   r3   Té   gUUUUUUå?l        r  g      @Z
hellohello)r   r!   r"   rî  rÕ  rs   r•   r   rF   rc   rò  rZ   rt   rw   rE   r@   r¹  rº  )
r/   rC  r¹  rº  rï  rL  r×  rñ  ry   r™   r   r   r   Útest_sharedctypes±  s&    
z#_TestSharedCTypes.test_sharedctypesc             C   s   | j dd d S )NT)rC  )rô  )r/   r   r   r   Útest_synchronizeÈ  s    z"_TestSharedCTypes.test_synchronizec             C   sT   t dddƒ}t|ƒ}d|_d|_d|_|  |jd¡ |  |jd¡ |  |jd¡ d S )Nrk   g      @l        r   )rî  r   r¹  rº  rï  rE   r@   )r/   rL  r{  r   r   r   Ú	test_copyË  s    z_TestSharedCTypes.test_copyN)F)
r7   r8   r9   rJ   r‘  ré   rò  rô  rõ  rö  r   r   r   r   rð  ž  s   
rð  c               @   s<   e Zd ZdZdd„ Zdd„ Zedd„ ƒZdd	„ Zd
d„ Z	dS )Ú_TestFinalize)r;   c             C   s   t j ¡ | _t j ¡  d S )N)r   Ú_finalizer_registryr   Úregistry_backuprÇ   )r/   r   r   r   r‘  Ý  s    z_TestFinalize.setUpc             C   s   |   tj¡ tj | j¡ d S )N)re   r   rø  Úupdaterù  )r/   r   r   r   r“  á  s    z_TestFinalize.tearDownc             C   s  G dd„ dt ƒ}|ƒ }tj||jdd ~|ƒ }tj||jdd}|ƒ  |ƒ  ~|ƒ }tj||jdd |ƒ }tj||jddd	 |ƒ }tj||jd
dd	 |ƒ }	tj|	|jddd	 |ƒ }
tj|
|jddd	 tjd |jddd	 tjd |jddd	 t ¡  | ¡  t d¡ d S )Nc               @   s   e Zd ZdS )z)_TestFinalize._test_finalize.<locals>.FooN)r7   r8   r9   r   r   r   r   rq  ç  s   rq  )rA   )r3   )rB   )rQ   )Úd10r>   )r3   Úexitpriority)Úd01r   )Úd02)Úd03)rx   iöÿÿÿ)ÚSTOPiœÿÿÿ)r4  r   ÚFinalizer”   Z_exit_functionr   r%   Ú_exit)rj   r±  rq  rA   rB   Zclose_brQ   rû  rý  rþ  rÿ  r   r   r   Ú_test_finalizeå  s0    z_TestFinalize._test_finalizec          
   C   sh   |   ¡ \}}| j| j|fd}d|_| ¡  | ¡  dd„ t|jdƒD ƒ}|  |dddd	d
ddg¡ d S )N)rb   r3   Tc             S   s   g | ]}|‘qS r   r   )r¶   r&  r   r   r   r·     s    z/_TestFinalize.test_finalize.<locals>.<listcomp>r   rA   rB   rû  rÿ  rþ  rý  rx   )	r›   rc   r  rZ   rt   rw   rí   rž   rE   )r/   r±  rë   ry   r    r   r   r   Útest_finalize  s    z_TestFinalize.test_finalizec          	      sÜ   dd„ ‰G ‡fdd„dt ƒ‰ d‰d ‰‡‡fdd„}‡ ‡‡fdd	„}t ¡ }t ¡ }zft d
¡ t ddd¡ tj|dtj|dg}t	j
 |¡ t d¡ d‰W d Q R X ˆd k	r¶ˆ‚W d t |¡ tj|Ž  t ¡  X d S )Nc               S   s   d S )Nr   r   r   r   r   Úcb  s    z,_TestFinalize.test_thread_safety.<locals>.cbc                   s   e Zd Z‡ fdd„ZdS )z-_TestFinalize.test_thread_safety.<locals>.Fooc                s"   | | _ tj| ˆ t dd¡d d S )Nr>   r{   )rü  )r¯   r   r  rç  Zrandint)r/   )r  r   r   r0     s    z6_TestFinalize.test_thread_safety.<locals>.Foo.__init__N)r7   r8   r9   r0   r   )r  r   r   rq    s   rq  Fc           
      sT   xNˆsNt  t ¡ d ¡ yt ¡  W q tk
rJ }  z| ‰ W d d } ~ X Y qX qW d S )Ngš™™™™™¹?)r1   r|   rç  r   Z_run_finalizersrB  )rx   )rH  Úfinishr   r   Úrun_finalizers$  s    z8_TestFinalize.test_thread_safety.<locals>.run_finalizersc           
      sf   i } x\ˆs`y$‡ fdd„t dƒD ƒ| t d¡< W q tk
r\ } z|‰|  ¡  W d d }~X Y qX qW d S )Nc                s   h | ]
}ˆ ƒ ’qS r   r   )r¶   r™   )rq  r   r   ú	<setcomp>6  s    zL_TestFinalize.test_thread_safety.<locals>.make_finalizers.<locals>.<setcomp>rƒ   rN   )r•   rç  ZgetrandbitsrB  rÇ   )r¶  rx   )rq  rH  r  r   r   Úmake_finalizers/  s    $z9_TestFinalize.test_thread_safety.<locals>.make_finalizersgíµ ÷Æ°>rN   )rb   g      @T)r4  rª   Úgetswitchintervalr°   rë  Úsetswitchintervalrì  rÉ   rÊ   rÀ   r   Zstart_threadsr1   r|   r±   )r/   r  r	  Zold_intervalZold_thresholdr=   r   )rq  r  rH  r  r   Útest_thread_safety  s*    




z _TestFinalize.test_thread_safetyN)
r7   r8   r9   rJ   r‘  r“  ré   r  r  r  r   r   r   r   r÷  Ù  s   &r÷  c               @   s   e Zd Zdd„ Zdd„ ZdS )Ú_TestImportStarc             C   sb   dd l }tj tj¡}tj |d¡}|  |¡}dd„ |D ƒ}dd„ |D ƒ}| d¡ | d¡ |S )Nr   z*.pyc             S   s(   g | ] }t j t j |¡d  ¡d ‘qS )r>   r   )r%   ÚpathÚsplitextÚsplit)r¶   rü   r   r   r   r·   X  s    z4_TestImportStar.get_module_names.<locals>.<listcomp>c             S   s   g | ]}d | ‘qS )zmultiprocessing.r   )r¶   r—  r   r   r   r·   Y  s    zmultiprocessing.__init__r   )	Úglobr%   r  Údirnamer   Ú__file__rw   rÜ   r   )r/   r  ZfolderÚpatternÚfilesÚmodulesr   r   r   Úget_module_namesS  s    


z _TestImportStar.get_module_namesc             C   s¼   |   ¡ }tjdkr2| d¡ | d¡ | d¡ n| d¡ tsJ| d¡ td kr\| d¡ xZ|D ]R}t|ƒ tj| }|  t	|dƒ|¡ x(|j
D ]}|  t	||ƒd||f ¡ q’W qbW d S )	Nr   zmultiprocessing.popen_forkz multiprocessing.popen_forkserverz!multiprocessing.popen_spawn_posixz!multiprocessing.popen_spawn_win32zmultiprocessing.sharedctypesÚ__all__z%r does not have attribute %r)r  rª   rº   rÜ   r»  r    r-  r  rX   r„   r  )r/   r  rh   ÚmodÚattrr   r   r   Útest_import^  s$    







z_TestImportStar.test_importN)r7   r8   r9   r  r  r   r   r   r   r  Q  s   r  c               @   s,   e Zd ZdZdd„ Zedd„ ƒZdd„ ZdS )	Ú_TestLogging)r;   c             C   sD   t  ¡ }| tj¡ |  |d k	¡ | d¡ | d¡ | t¡ d S )Nzthis will not be printedznor will this)	r   Ú
get_loggerÚsetLevelr   Ú
SUBWARNINGrX   ÚdebugÚinfoÚ	LOG_LEVEL)r/   Úloggerr   r   r   Útest_enable_logging€  s    

z _TestLogging.test_enable_loggingc             C   s   t  ¡ }| | ¡ ¡ d S )N)r   r  r”   ZgetEffectiveLevel)rj   r±  r#  r   r   r   Ú_test_levelˆ  s    z_TestLogging._test_levelc       	      C   sÜ   d}d}t  ¡ }t ¡ }|j}t jdd\}}| |¡ | j| j|fd}| 	¡  |  
|| ¡ ¡ | ¡  | ¡  | tj¡ | |¡ | j| j|fd}| 	¡  |  
|| ¡ ¡ | ¡  | ¡  | |¡ |jtd d S )Nr‡  é%   F)rš   )rb   r3   )Úlevel)r   r  ÚloggingZ	getLoggerr'  r›   r  rc   r%  rt   rE   rž   rw   r   ZNOTSETr"  )	r/   ZLEVEL1ZLEVEL2r#  Zroot_loggerZ
root_levelr   r¡  ry   r   r   r   Ú
test_level  s*    


z_TestLogging.test_levelN)r7   r8   r9   rJ   r$  ré   r%  r)  r   r   r   r   r  |  s   r  c               @   s6   e Zd ZdZedd„ ƒZe ee	dƒd¡dd„ ƒZ
dS )	Ú_TestPollEintr)r;   c             C   s   t  d¡ t |tj¡ d S )Ngš™™™™™¹?)r1   r|   r%   rŒ   r…   ÚSIGUSR1)rj   ri   r   r   r   Ú_killerÅ  s    
z_TestPollEintr._killerr+  zrequires SIGUSR1c          
      s¨   dg‰ ‡ fdd„}t  ¡ }t tj|¡}zj| j| j|fd}| ¡  z$| jtjdd}| ¡  | 	¡  W d | 	¡  X |  
ˆ d ¡ |  |jd¡ W d t tj|¡ X d S )NFc                 s   dˆ d< d S )NTr   r   )r3   )Ú
got_signalr   r   ÚrecordÍ  s    z._TestPollEintr.test_poll_eintr.<locals>.record)rb   r3   )rk   r   )r%   r^   r…   r+  rc   r,  rt   r1   r|   rw   rX   rE   r_   )r/   r.  ri   Z
oldhandlerZkillerry   r   )r-  r   Útest_poll_eintrÊ  s    
z_TestPollEintr.test_poll_eintrN)r7   r8   r9   rJ   ré   r,  r)   rk  r„   r…   r/  r   r   r   r   r*  Á  s   r*  c               @   s    e Zd Ze ed¡dd„ ƒZdS )ÚTestInvalidHandlezskipped on Windowsc          	   C   sZ   t j d¡}z*y| ¡  W n ttfk
r2   Y nX W d d |_X |  ttft jjd¡ d S )NiÈM®r$   )r   r¾  Z
Connectionrœ   r(   rŒ  Z_handler¥   )r/   r±  r   r   r   Útest_invalid_handleså  s    

z&TestInvalidHandle.test_invalid_handlesN)r7   r8   r9   r)   rÝ  ÚWIN32r1  r   r   r   r   r0  ã  s   r0  c               @   s   e Zd Zdd„ Zdd„ ZdS )Ú	OtherTestc             C   s,   G dd„ dt ƒ}|  tjtjj|ƒ d¡ d S )Nc               @   s   e Zd Zdd„ Zdd„ ZdS )zFOtherTest.test_deliver_challenge_auth_failure.<locals>._FakeConnectionc             S   s   dS )Ns   something bogusr   )r/   rÙ  r   r   r   r’  ú  s    zQOtherTest.test_deliver_challenge_auth_failure.<locals>._FakeConnection.recv_bytesc             S   s   d S )Nr   )r/   r¯  r   r   r   r”  ü  s    zQOtherTest.test_deliver_challenge_auth_failure.<locals>._FakeConnection.send_bytesN)r7   r8   r9   r’  r”  r   r   r   r   Ú_FakeConnectionù  s   r4  s   abc)r4  r¥   r   ÚAuthenticationErrorr¾  Zdeliver_challenge)r/   r4  r   r   r   Ú#test_deliver_challenge_auth_failureø  s    z-OtherTest.test_deliver_challenge_auth_failurec             C   s,   G dd„ dt ƒ}|  tjtjj|ƒ d¡ d S )Nc               @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )zEOtherTest.test_answer_challenge_auth_failure.<locals>._FakeConnectionc             S   s
   d| _ d S )Nr   )r  )r/   r   r   r   r0     s    zNOtherTest.test_answer_challenge_auth_failure.<locals>._FakeConnection.__init__c             S   s2   |  j d7  _ | j dkr tjjS | j dkr.dS dS )Nr>   rk   s   something bogusrZ  )r  r   r¾  Z	CHALLENGE)r/   rÙ  r   r   r   r’    s    

zPOtherTest.test_answer_challenge_auth_failure.<locals>._FakeConnection.recv_bytesc             S   s   d S )Nr   )r/   r¯  r   r   r   r”    s    zPOtherTest.test_answer_challenge_auth_failure.<locals>._FakeConnection.send_bytesN)r7   r8   r9   r0   r’  r”  r   r   r   r   r4    s   r4  s   abc)r4  r¥   r   r5  r¾  Zanswer_challenge)r/   r4  r   r   r   Ú"test_answer_challenge_auth_failure  s    z,OtherTest.test_answer_challenge_auth_failureN)r7   r8   r9   r6  r7  r   r   r   r   r3  ö  s   
r3  c             C   s   |  j d7  _ d S )Nr>   )rÀ   )Únsr   r   r   Úinitializer  s    r9  c               @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚTestInitializersc             C   s"   t  ¡ | _| j ¡ | _d| j_d S )Nr   )r   ÚManagerÚmgrr  r8  rÀ   )r/   r   r   r   r‘    s    
zTestInitializers.setUpc             C   s   | j  ¡  | j  ¡  d S )N)r<  rv  rw   )r/   r   r   r   r“     s    
zTestInitializers.tearDownc             C   sN   t j ¡ }|  t|jd¡ | t| jf¡ |  | jj	d¡ | 
¡  | ¡  d S )Nr>   )r   ÚmanagersÚSyncManagerr¥   Ú	TypeErrorrt   r9  r8  rE   rÀ   rv  rw   )r/   r—  r   r   r   Útest_manager_initializer$  s    
z)TestInitializers.test_manager_initializerc             C   sH   | j ttjdd t dt| jf¡}| ¡  | ¡  |  | jj	d¡ d S )Nr>   )r9  )
r¥   r?  r   r  r9  r8  r   rw   rE   rÀ   )r/   ry   r   r   r   Útest_pool_initializer,  s
    z&TestInitializers.test_pool_initializerN)r7   r8   r9   r‘  r“  r@  rA  r   r   r   r   r:    s   r:  c             C   s,   y| j dd}W n tjk
r&   Y nX d S )NF)Úblock)rv   r  r!  )rP   Úitemr   r   r   Ú_this_sub_process8  s    rD  c              C   s2   t  ¡ } t jt| fd}d|_| ¡  | ¡  d S )N)rb   r3   T)r   r   rc   rD  rZ   rt   rw   )r   ZsubProcr   r   r   Ú_test_process>  s
    rE  c             C   s   | |  S )Nr   )r¹  r   r   r   Ú_afuncE  s    rF  c           
   C   s:   t jdd} |  tdddddddg¡}|  ¡  |  ¡  d S )	Nr  )r;   r>   rk   r  rN   r  r  )r   r  r  rF  r   rw   )r  r¹  r   r   r   Úpool_in_processH  s    rG  c               @   s0   e Zd Zdd„ Zedd„ ƒZdd„ Zdd„ Zd	S )
Ú
_file_likec             C   s   || _ d | _d S )N)Ú	_delegateÚ_pid)r/   Zdelegater   r   r   r0   O  s    z_file_like.__init__c             C   s$   t  ¡ }|| jkr|| _g | _| jS )N)r%   r^   rJ  Ú_cache)r/   ri   r   r   r   ÚcacheS  s
    
z_file_like.cachec             C   s   | j  |¡ d S )N)rL  r   )r/   r¯  r   r   r   r+  \  s    z_file_like.writec             C   s   | j  d | j¡¡ g | _d S )Nr  )rI  r+  rw   rL  rK  )r/   r   r   r   Úflush_  s    z_file_like.flushN)r7   r8   r9   r0   ÚpropertyrL  r+  rM  r   r   r   r   rH  N  s   	rH  c               @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚTestStdinBadfiledescriptorc             C   s    t jtd}| ¡  | ¡  d S )N)rb   )r   rc   rE  rt   rw   )r/   rÍ   r   r   r   Útest_queue_in_processe  s    z0TestStdinBadfiledescriptor.test_queue_in_processc             C   s    t jtd}| ¡  | ¡  d S )N)rb   )r   rc   rG  rt   rw   )r/   ry   r   r   r   Útest_pool_in_processj  s    z/TestStdinBadfiledescriptor.test_pool_in_processc                s:   t  ¡ }t|ƒ‰ ˆ  d¡ tj‡ fdd„d}ˆ  ¡  d S )NrL  c                  s   ˆ   ¡ S )N)rM  r   )Úfliker   r   rY  s  rZ  z:TestStdinBadfiledescriptor.test_flushing.<locals>.<lambda>)rb   )rÐ   rÑ   rH  r+  r   rc   rM  )r/   ZsiorÍ   r   )rR  r   Útest_flushingo  s    
z(TestStdinBadfiledescriptor.test_flushingN)r7   r8   r9   rP  rQ  rS  r   r   r   r   rO  c  s   rO  c               @   sl   e Zd Zedd„ ƒZddd„Zedd„ ƒZddd	„Zd
d„ Zdd„ Z	dd„ Z
edd„ ƒZdd„ Zdd„ ZdS )ÚTestWaitc             C   sF   x8t dƒD ],}|r$t t ¡ d ¡ | |t ¡ f¡ q
W | ¡  d S )Nrƒ   gš™™™™™¹?)r•   r1   r|   rç  r”   r%   r^   r   )rj   rÿ   Úslowr™   r   r   r   Ú_child_test_waitz  s
    zTestWait._child_test_waitFc          	      s  ddl m} g }g ‰ g }xjtdƒD ]^}tjdd\}}tj| j||fd}d|_| ¡  | 	¡  | 
|¡ ˆ  
|¡ |  |j¡ q"W xX|rÜxN||ƒD ]B}y| ¡ }	W n& tk
rÊ   | |¡ | 	¡  Y q”X | 
|	¡ q”W q†W | ¡  t‡ fdd	„td
ƒD ƒƒ}
|  ||
¡ d S )Nr   )r   r  F)rš   )rb   r3   Tc             3   s"   | ]}ˆ D ]}||j fV  q
qd S )N)ri   )r¶   r™   ry   )r½   r   r   rì    s    z%TestWait.test_wait.<locals>.<genexpr>rƒ   )Úmultiprocessing.connectionr   r•   r   r›   rc   rV  rZ   rt   r   r   r§   rw   rž   r  rÜ   ré  rî  rE   )r/   rU  r   ÚreadersÚmessagesr™   rô   rÿ   ry   r•  r¡   r   )r½   r   Ú	test_wait‚  s0    


zTestWait.test_waitc             C   sZ   t   ¡ }| |¡ x:tdƒD ].}|r6t t ¡ d ¡ | d|  d¡¡ qW | ¡  d S )Nrƒ   gš™™™™™¹?z%s
rà  )	r×  r„  r•   r1   r|   rç  rÝ  r	   r   )rj   r  rU  r
   r™   r   r   r   Ú_child_test_wait_socket   s    
z TestWait._child_test_wait_socketc             C   sZ  ddl m} t ¡ }| tjjdf¡ | ¡  | ¡ }g }g }i }xHt	dƒD ]<}t
j| j||fd}	d|	_|	 ¡  | |	¡ |  |	j¡ qLW x.t	dƒD ]"}| ¡ \}
}| |
¡ g ||
< q–W | ¡  xL|rx@||ƒD ]4}
|
 d¡}|sü| |
¡ |
 ¡  qÖ||
  |¡ qÖW qÆW d dd	„ t	d
ƒD ƒ¡ d¡}x$| ¡ D ]}|  d |¡|¡ q:W d S )Nr   )r   r  )rb   r3   Tr‡  r  c             s   s   | ]}d | V  qdS )z%s
Nr   )r¶   r™   r   r   r   rì  Ë  s    z,TestWait.test_wait_socket.<locals>.<genexpr>rƒ   rà  rZ  )rW  r   r×  rØ  rÀ   r   r‰  rÙ  rÚ  r•   r   rc   r[  rZ   rt   r   r§   rw   rÃ  r   rž   rÜ   r	   r½  rE   )r/   rU  r   rü  rŽ  rX  r½   Zdicr™   ry   rô   r|  r•  r¡   Úvr   r   r   Útest_wait_socketª  s<    




zTestWait.test_wait_socketc             C   s   |   d¡ d S )NT)rZ  )r/   r   r   r   Útest_wait_slowÏ  s    zTestWait.test_wait_slowc             C   s   |   d¡ d S )NT)r]  )r/   r   r   r   Útest_wait_socket_slowÒ  s    zTestWait.test_wait_socket_slowc             C   s´   ddl m} d}t ¡ \}}t ¡ }|||g|ƒ}t ¡ | }|  |g ¡ |  ||d ¡ |  ||d ¡ | 	d ¡ t ¡ }|||gdƒ}t ¡ | }|  ||g¡ |  |d¡ d S )Nr   )r   rN   rk   g      à?rÆ   gš™™™™™Ù?)
rW  r   r   r›   r1   r2   rE   r<  rO  r”   )r/   r   r¡   rA   rB   rt   rG   r1  r   r   r   Útest_wait_timeoutÕ  s    
zTestWait.test_wait_timeoutc             C   s   |  ¡  t |¡ d S )N)rB  r1   r|   )rj   rJ  Zperiodr   r   r   Úsignal_and_sleepì  s    zTestWait.signal_and_sleepc             C   s†  ddl m} d}dd„ }t d¡}t ¡ \}}tj| j||fd}| ¡  |  |j	t
¡ |  |jdd¡ t ¡ }|||j	|g|d ƒ}	t ¡ | }
|  |	|j	g¡ |  |
|d	 ¡ |  |
|d	 ¡ | d ¡ t ¡ }|||j	|gdƒ}	t ¡ | }
|  ||	ƒ||j	|gƒ¡ |  |
d
¡ | d ¡ t ¡ }|||j	|gdƒ}	t ¡ | }
|  ||	ƒ|||j	|gƒ¡ |  |
d
¡ | ¡  | ¡  d S )Nr   )r   r  c             S   s   t | dd„ dS )Nc             S   s   t | ƒS )N)r˜   )r¹  r   r   r   rY  õ  rZ  z>TestWait.test_wait_integer.<locals>.<lambda>.<locals>.<lambda>)rT  )rî  )rü  r   r   r   rY  õ  rZ  z,TestWait.test_wait_integer.<locals>.<lambda>)rb   r3   rÆ   )r   rk   gš™™™™™Ù?)rW  r   r   rL  r›   rc   ra  rt   r[   r¦   r   rX   rA  r1   r2   rE   r<  rO  r”   r‰   rw   )r/   r   r¡   Zsorted_rJ  rA   rB   ry   rt   rG   r1  r   r   r   Útest_wait_integerñ  s<    


zTestWait.test_wait_integerc             C   sf   ddl m} t ¡ \}}t ¡ }||gdd}t ¡ | }|  |g ¡ |  |d¡ | ¡  | ¡  d S )Nr   )r   r$   )r   r>   )	rW  r   r   r›   r1   r2   rE   r<  r   )r/   r   rA   rB   r5   rG   r   r   r   Útest_neg_timeout  s    zTestWait.test_neg_timeoutN)F)F)r7   r8   r9   ré   rV  rZ  r[  r]  r^  r_  r`  ra  rb  rc  r   r   r   r   rT  x  s   


%+rT  c               @   s4   e Zd Ze ed¡dd„ ƒZe ed¡dd„ ƒZdS )ÚTestInvalidFamilyzskipped on Windowsc          	   C   s&   |   t¡ tj d¡ W d Q R X d S )Nz\\.\test)r¥   r(   r   r¾  rÀ  )r/   r   r   r   Útest_invalid_family-  s    z%TestInvalidFamily.test_invalid_familyz skipped on non-Windows platformsc          	   C   s&   |   t¡ tj d¡ W d Q R X d S )Nz/var/test.pipe)r¥   r(   r   r¾  rÀ  )r/   r   r   r   Útest_invalid_family_win322  s    z+TestInvalidFamily.test_invalid_family_win32N)	r7   r8   r9   r)   rÝ  r2  re  rk  rf  r   r   r   r   rd  +  s   rd  c               @   s,   e Zd Zedd„ ƒZedd„ ƒZdd„ ZdS )Ú	TestFlagsc             C   s   |  ttjƒ¡ d S )N)r”   r…  rª   Úflags)rj   r±  r   r   r   Úrun_in_grandchild<  s    zTestFlags.run_in_grandchildc             C   sr   dd l }tjdd\}}tj| j|fd}| ¡  | ¡ }| ¡  | ¡  | ¡  t	t
jƒ|f}t| |¡ƒ d S )Nr   F)rš   )rb   r3   )Újsonr   r›   rc   ri  rt   rž   rw   r   r…  rª   rh  ÚprintÚdumps)rj   rj  rô   rÿ   ry   Úgrandchild_flagsrh  r   r   r   Úrun_in_child@  s    zTestFlags.run_in_childc             C   sP   dd l }dd l}d}| tjdddd|g¡}| | d¡¡\}}|  ||¡ d S )Nr   zJfrom test._test_multiprocessing import TestFlags; TestFlags.run_in_child()z-Ez-Sz-Oz-crà  )rj  Ú
subprocessZcheck_outputrª   Ú
executableÚloadsÚdecoderE   )r/   rj  ro  Úprogr¯  Zchild_flagsrm  r   r   r   Ú
test_flagsM  s    zTestFlags.test_flagsN)r7   r8   r9   ré   ri  rn  rt  r   r   r   r   rg  ;  s   rg  c               @   s    e Zd Zedd„ ƒZdd„ ZdS )ÚTestTimeoutsc             C   s>   t  d¡ | d¡ | ¡  tj |¡}| d¡ | ¡  d S )Nr>   r@  iÈ  )r1   r|   r”   r   r   r¾  rÂ  )rj   Úchildr  r±  r   r   r   Ú_test_timeout\  s    


zTestTimeouts._test_timeoutc          	   C   s´   t  ¡ }zšt  d¡ tjdd\}}tjjdd}tj| j||j	fd}| 
¡  | ¡  |  | ¡ d¡ | ¡  | ¡ }|  | ¡ d¡ | ¡  | ¡  t|ƒ W d t  |¡ X d S )	Ngš™™™™™¹?T)rš   ÚAF_INET)r½  )rb   r3   r@  iÈ  )r×  ZgetdefaulttimeoutZsetdefaulttimeoutr   r›   r¾  rÀ  rc   rw  r  rt   r   rE   rž   rÃ  r   )r/   Zold_timeoutÚparentrv  rü  ry   r±  r   r   r   r2  e  s"    
zTestTimeouts.test_timeoutN)r7   r8   r9   ré   rw  r2  r   r   r   r   ru  [  s   	ru  c               @   s   e Zd Zdd„ ZdS )ÚTestNoForkBombc             C   sŒ   t  ¡ }tj tj t¡d¡}|dkrVtjj	 
||¡\}}}|  |d¡ |  d|¡ n2tjj	 ||¡\}}}|  | ¡ d¡ |  |d¡ d S )Nzmp_fork_bomb.pyrÃ   rZ  s   RuntimeErrors   123)r   r¹   r%   r  rw   r  r  rÀ   r   Úscript_helperZassert_python_failurerE   ru   Úassert_python_okr	  )r/   r»   rh   r¬   Úoutrý   r   r   r   Útest_noforkbomb~  s    zTestNoForkBomb.test_noforkbombN)r7   r8   r9   r~  r   r   r   r   rz  }  s   rz  c               @   s    e Zd Zedd„ ƒZdd„ ZdS )ÚTestForkAwareThreadLockc             C   sV   |dkr:t j| j|d |fd}| ¡  | ¡  t|ƒ n| ttj	ƒ¡ | ¡  d S )Nr>   )rb   r3   )
r   rc   rv  rt   r   r   r”   r]   r   Ú_afterfork_registry)rj   r\  r±  ry   r   r   r   rv  “  s    
zTestForkAwareThreadLock.childc             C   sd   t  d¡\}}t ¡ }ttjƒ}t j| jd|fd}| ¡  | 	¡  | 
¡ }t|ƒ |  ||¡ d S )NFrN   )rb   r3   )r   r›   r   ZForkAwareThreadLockr]   r€  rc   rv  rt   r   rž   r   ZassertLessEqual)r/   rô   rÿ   rü  Zold_sizery   Znew_sizer   r   r   rD  ž  s    
z!TestForkAwareThreadLock.test_lockN)r7   r8   r9   ré   rv  rD  r   r   r   r   r  Ž  s   r  c               @   s0   e Zd Zdd„ Zdd„ Zedd„ ƒZdd„ Zd	S )
ÚTestCloseFdsc             C   sb   t rt ¡  ¡ S t ¡  ¡ }g }x |dk r@| |¡ t |¡}q"W x|D ]}t |¡ qHW |S d S )Nrc  )r2  r×  Údetachr   r%   Údupr   )r/   r  Zto_closer¹  r   r   r   Úget_high_socket_fd¯  s    


zTestCloseFds.get_high_socket_fdc             C   s,   t rtjtjtj|d ¡  n
t |¡ d S )N)r˜  )r2  r×  rx  ÚSOCK_STREAMr   r%   )r/   r  r   r   r   r   Á  s    zTestCloseFds.closec          
   C   sZ   yt  |t jt j¡}W n, tk
rB } z| |¡ W d d }~X Y nX | ¡  | d ¡ d S )N)r×  Zfromfdrx  r…  rB  r”   r   )rj   r±  r  r
   rx   r   r   r   Ú_test_closefdsÇ  s    zTestCloseFds._test_closefdsc          	   C   sÄ   t st d¡‚t ¡ \}}|  ¡ }z8tj| j||fd}| ¡  | 	¡  | 
¡ }t|ƒ W d |  	|¡ | 	¡  | 	¡  X t ¡ dkr’|  |d ¡ n.d}|  |t¡ |  |jtjkpº|j|k|¡ d S )Nzrequires fd pickling)rb   r3   rÃ   i6'  )r»  r)   r*   r   r›   r„  rc   r†  rt   r   rž   r   r¹   r²   r[   rŒ  rX   r  rª  Zwinerror)r/   r   r¡  r  ry   rx   ZWSAENOTSOCKr   r   r   Útest_closefdÑ  s(    


zTestCloseFds.test_closefdN)r7   r8   r9   r„  r   ré   r†  r‡  r   r   r   r   r  ­  s   
r  c               @   sf   e Zd ZeejejƒZedd„ ƒZ	e
 eedƒd¡dd„ ƒZedd„ ƒZe
 eedƒd¡d	d
„ ƒZdS )ÚTestIgnoreEINTRc             C   sF   dd„ }t   t j|¡ | d¡ | ¡ }| |¡ | d| j ¡ d S )Nc             S   s   d S )Nr   )rä   Úframer   r   r   r‚   ö  s    z-TestIgnoreEINTR._test_ignore.<locals>.handlerÚreadyó   x)r…   r+  r”   rž   r”  ÚCONN_MAX_SIZE)rj   r±  r‚   r¹  r   r   r   Ú_test_ignoreô  s    

zTestIgnoreEINTR._test_ignorer+  zrequires SIGUSR1c             C   sØ   t  ¡ \}}z¼t j| j|fd}d|_| ¡  | ¡  |  | ¡ d¡ t	 
d¡ t |jtj¡ t	 
d¡ | d¡ |  | ¡ d¡ t	 
d¡ t |jtj¡ |  | ¡ d| j ¡ t	 
d¡ | ¡  W d | ¡  X d S )N)rb   r3   TrŠ  gš™™™™™¹?iÒ  r‹  )r   r›   rc   r  rZ   rt   r   rE   rž   r1   r|   r%   rŒ   ri   r…   r+  r”   r’  rŒ  rw   )r/   r±  rë   ry   r   r   r   Útest_ignoreþ  s&    





zTestIgnoreEINTR.test_ignorec          	   C   sN   dd„ }t   t j|¡ tj ¡ $}| |j¡ | ¡ }| d¡ W d Q R X d S )Nc             S   s   d S )Nr   )rä   r‰  r   r   r   r‚     s    z6TestIgnoreEINTR._test_ignore_listener.<locals>.handlerÚwelcome)r…   r+  r   r¾  rÀ  r”   r  rÃ  )rj   r±  r‚   rü  rA   r   r   r   Ú_test_ignore_listener  s    z%TestIgnoreEINTR._test_ignore_listenerc             C   s˜   t  ¡ \}}z|t j| j|fd}d|_| ¡  | ¡  | ¡ }t 	d¡ t
 |jtj¡ t 	d¡ t j |¡}|  | ¡ d¡ | ¡  W d | ¡  X d S )N)rb   r3   Tgš™™™™™¹?r  )r   r›   rc   r  rZ   rt   r   rž   r1   r|   r%   rŒ   ri   r…   r+  r¾  rÂ  rE   rw   )r/   r±  rë   ry   r  rÞ  r   r   r   Útest_ignore_listener  s    


z$TestIgnoreEINTR.test_ignore_listenerN)r7   r8   r9   Úmaxr   ZPIPE_MAX_SIZEZSOCK_MAX_SIZErŒ  ré   r  r)   rk  r„   r…   rŽ  r  r‘  r   r   r   r   rˆ  ï  s
   

rˆ  c               @   s@   e Zd Zedd„ ƒZdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Z	dS )ÚTestStartMethodc             C   s   |  t ¡ ¡ d S )N)r”   r   r¹   )rj   r±  r   r   r   Ú_check_context3  s    zTestStartMethod._check_contextc             C   s^   |j dd\}}|j| j|fd}| ¡  | ¡  | ¡ }| ¡  | ¡  |  || ¡ ¡ d S )NF)rš   )rb   r3   )	r›   rc   r”  rt   r   rž   rw   rE   r¹   )r/   r<  rô   rÿ   ry   Zchild_methodr   r   r   Úcheck_context7  s    zTestStartMethod.check_contextc          	   C   s‚   x|dD ]t}yt  |¡}W n tk
r.   wY nX |  | ¡ |¡ |  | ¡ |¡ |  t|jd¡ |  t|jd ¡ |  |¡ qW d S )N)rÃ   rµ   rà   rµ   )	r   r=  r(   rE   r¹   r²   r¥   Úset_start_methodr•  )r/   Úmethodr<  r   r   r   r?  A  s    
zTestStartMethod.test_contextc          
   C   sà   t  t¡ d}t  ¡ }z¨x¢dD ]š}yt j|dd W n tk
rJ   wY nX |  t  ¡ |¡ t  ¡ }|  | ¡ |¡ |  t	|ƒj
 ¡  |¡¡ |  |jj
 ¡  |¡¡ |  t ¡ |d7 }qW W d t j|dd X |  |d¡ d S )Nr   )rÃ   rµ   rà   T)Úforcer>   )r   Úset_forkserver_preloadÚPRELOADr¹   r–  r(   rE   r=  rX   rr   r7   ÚlowerÚ
startswithrc   r•  r0  )r/   r  Z
old_methodr—  r<  r   r   r   Útest_set_getM  s&    


zTestStartMethod.test_set_getc             C   sF   t  ¡ }tjdkr"|  |dg¡ n |  |ddgkp>|dddgk¡ d S )Nr   rµ   rÃ   rà   )r   Zget_all_start_methodsrª   rº   rE   rX   )r/   Úmethodsr   r   r   Útest_get_allc  s
    
zTestStartMethod.test_get_allc             C   s‚   t  ¡ dkr|  d¡ tj tj t¡d¡}tj	j
 |¡\}}}| ¡ }| ¡ }| ¡ dksd|dkr~t|ƒ t|ƒ |  d¡ d S )Nrà   z*test only relevant for 'forkserver' methodzmp_preload.pyÚokr  z(failed spawning forkserver or grandchild)r   r¹   rT   r%   r  rw   r  r  rÀ   r   r{  r|  rr  r	  rk  r.  )r/   rh   r¬   r}  rý   r   r   r   Útest_preload_resourcesk  s    
z&TestStartMethod.test_preload_resourcesN)
r7   r8   r9   ré   r”  r•  r?  r  rŸ  r¡  r   r   r   r   r“  2  s   
r“  z*test semantics don't make sense on Windowsc               @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚTestSemaphoreTrackerc          	   C   s   dd l }d}t ¡ \}}|jtjdd|||f g|g|jd}t |¡ t|ddd*}| 	¡  
¡  d	¡}| 	¡  
¡  d	¡}W d Q R X t |¡ | ¡  | ¡  t d
¡ |  t¡}	t |¡ W d Q R X |  |	jjtjtjf¡ |j ¡  d¡}
|j ¡  d}|  |
|¡ |  |
d| ¡ d S )Nr   aM  if 1:
            import multiprocessing as mp, time, os
            mp.set_start_method("spawn")
            lock1 = mp.Lock()
            lock2 = mp.Lock()
            os.write(%d, lock1._semlock.name.encode("ascii") + b"\n")
            os.write(%d, lock2._semlock.name.encode("ascii") + b"\n")
            time.sleep(10)
        z-Ez-c)Zpass_fdsrØ   r²  T)r   rà  g       @zutf-8z9semaphore_tracker: There appear to be 2 leaked semaphoreszsemaphore_tracker: %r: \[Errno)ro  r%   ÚpipeÚPopenrª   rp  ÚPIPEr   rù   Úreadliner	  rr  r   Z
sem_unlinkr‰   r   r1   r|   r¥   rŒ  ru   Z	exceptionr  ÚENOENTZEINVALrØ   rú   ZassertRegex)r/   ro  Úcmdrô   rÿ   ry   rü   Zname1Zname2r<  rý   r¡   r   r   r   Útest_semaphore_tracker|  s.    	




z+TestSemaphoreTracker.test_semaphore_trackerc       	   	   C   s    ddl m} | ¡  |j}t ||¡ t d¡ t 	d¡}t
 ¡ T}|rZ| |  td¡¡ | ¡ }| ¡  | ¡  t |¡}~t ¡  |  |ƒ ¡ W d Q R X d S )Nr   )Ú_semaphore_trackerg      ð?rµ   zsemaphore_tracker: process died)Z!multiprocessing.semaphore_trackerrª  rã   rJ  r%   rŒ   r1   r|   r   r=  Ú
contextlibÚ	ExitStackÚenter_contextZassertWarnsRegexÚUserWarningrL  rA  rB  r®   r¯   r°   r±   ZassertIsNone)	r/   rä   Z
should_dierª  ri   r<  ÚstackrJ  r³   r   r   r   Úcheck_semaphore_tracker_death¡  s$    



z2TestSemaphoreTracker.check_semaphore_tracker_deathc             C   s   |   tjd¡ d S )NF)r°  r…   ræ   )r/   r   r   r   Útest_semaphore_tracker_sigintº  s    z2TestSemaphoreTracker.test_semaphore_tracker_sigintc             C   s   |   tjd¡ d S )NT)r°  r…   r   )r/   r   r   r   Útest_semaphore_tracker_sigkill¾  s    z3TestSemaphoreTracker.test_semaphore_tracker_sigkillN)r7   r8   r9   r©  r°  r±  r²  r   r   r   r   r¢  x  s   %r¢  c               @   s    e Zd Zedd„ ƒZdd„ ZdS )ÚTestSimpleQueuec             C   s8   |  ¡  z | | ¡ ¡ | | ¡ ¡ W d | ¡  X d S )N)r   rO   r  r¨   )rj   r   r  r  r   r   r   Ú_test_emptyÅ  s
    zTestSimpleQueue._test_emptyc             C   s¢   t  ¡ }t  ¡ }t  ¡ }t j| j|||fd}d|_| ¡  |  | ¡ ¡ | 	¡  | 
¡  |  | ¡ ¡ |  | ¡ d¡ |  | ¡ d¡ |  | ¡ ¡ | ¡  d S )N)rb   r3   TF)r   ZSimpleQueuero   rc   r´  rZ   rt   rX   r  r¨   r   re   rE   rv   rw   )r/   r   r  r  rÍ   r   r   r   Ú
test_emptyÏ  s     zTestSimpleQueue.test_emptyN)r7   r8   r9   ré   r´  rµ  r   r   r   r   r³  Ã  s   
r³  c               @   s`  e Zd ZejjZdd„ Zdd„ Ze	dd„ ƒZ
e
Zdd„ Zd	d
„ Ze	dd„ ƒZdGdd„Zdd„ Ze	dd„ ƒZdd„ Ze	dd„ ƒZdHdd„Ze	dd„ ƒZdIdd„Ze	dd „ ƒZdJd"d#„Zd$d%„ Ze	d&d'„ ƒZd(d)„ Ze	d*d+„ ƒZd,d-„ Ze	d.d/„ ƒZd0d1„ Ze	d2d3„ ƒZ d4d5„ Z!e	d6d7„ ƒZ"d8d9„ Z#e	d:d;„ ƒZ$d<d=„ Z%e	d>d?„ ƒZ&d@dA„ Z'e	dBdC„ ƒZ(dDdE„ Z)dFS )KÚTestSyncManagerTypesc             C   s   |   ¡ | _| j ¡  d | _d S )N)Úmanager_classr<   rt   rÍ   )r/   r   r   r   r‘     s    

zTestSyncManagerTypes.setUpc             C   sB   | j d k	r(| j  ¡ r(| j  ¡  | j  ¡  | j ¡  d | _d | _ d S )N)rÍ   rY   r‰   rw   r<   rv  )r/   r   r   r   r“    s    


zTestSyncManagerTypes.tearDownc             C   s   t  ¡  d S )N)r   Zreap_children)rj   r   r   r   r    s    zTestSyncManagerTypes.setUpClassc             C   sz   t | jƒ t ¡ }d}x^tt ¡ ƒdkrtt |¡ |d9 }t ¡ | }|dkrdtj	_
tdt ¡ |f tjd P qW d S )Ng{®Gáz„?r>   rk   g      @TzPWarning -- multiprocessing.Manager still has %s active children after %s seconds)Úfile)r   rÍ   r1   r2   r]   r   rq   r|   rÀ   r   Úenvironment_alteredrk  rª   rØ   )r/   Ú
start_timer5   rc  r   r   r   Úwait_proc_exit  s    


z#TestSyncManagerTypes.wait_proc_exitc             C   s@   t j||fd| _d| j_| j ¡  |  ¡  |  | jjd¡ d S )N)rb   r3   Tr   )r   rc   rÍ   rZ   rt   r»  rE   r_   )r/   Zworkerr&  r   r   r   Ú
run_worker&  s
    
zTestSyncManagerTypes.run_workerc             C   s   d S )Nr   )rj   r&  r   r   r   Ú_test_queue-  s    z TestSyncManagerTypes._test_queuer   c             C   s6   t | j|ƒdƒ}| d¡ | d¡ |  | j|¡ d S )Nrk   rN   r  )rÙ   r<   rO   r¼  r½  )r/   ZqnamerQ  r   r   r   Ú
test_queue7  s
    

zTestSyncManagerTypes.test_queuec             C   s   |   d¡ d S )Nr(  )r¾  )r/   r   r   r   Útest_joinable_queue?  s    z(TestSyncManagerTypes.test_joinable_queuec             C   s   |  ¡  | ¡  |  d¡ d S )Ngü©ñÒMbP?)r   rÇ   )rj   r&  r   r   r   rn  B  s    z TestSyncManagerTypes._test_eventc             C   s.   | j  ¡ }| ¡  |  | j|¡ | d¡ d S )Ngü©ñÒMbP?)r<   ro   r¨   r¼  rn  r   )r/   rQ  r   r   r   ro  I  s    
zTestSyncManagerTypes.test_eventc             C   s   |  ¡  d S )N)rA  )rj   r&  r   r   r   Ú
_test_lockP  s    zTestSyncManagerTypes._test_lockr@  c             C   s6   t | j|ƒƒ }|  | j|¡ | ¡  |  t|j¡ d S )N)rÙ   r<   r¼  rÀ  rB  r¥   r   )r/   ÚlnamerQ  r   r   r   rD  T  s    zTestSyncManagerTypes.test_lockc             C   s   |  ¡  | ¡  d S )N)rA  rB  )rj   r&  r   r   r   Ú_test_rlockZ  s    z TestSyncManagerTypes._test_rlockc             C   s    t | j|ƒƒ }|  | j|¡ d S )N)rÙ   r<   r¼  rÂ  )r/   rÁ  rQ  r   r   r   rG  _  s    zTestSyncManagerTypes.test_rlockc             C   s   |  ¡  d S )N)rA  )rj   r&  r   r   r   rK  c  s    z$TestSyncManagerTypes._test_semaphorerL  c             C   s(   t | j|ƒƒ }|  | j|¡ | ¡  d S )N)rÙ   r<   r¼  rK  rB  )r/   ÚsnamerQ  r   r   r   rM  g  s    z#TestSyncManagerTypes.test_semaphorec             C   s   | j dd d S )NrN  )rÃ  )rM  )r/   r   r   r   rO  l  s    z+TestSyncManagerTypes.test_bounded_semaphorec             C   s   |  ¡  | ¡  d S )N)rA  rB  )rj   r&  r   r   r   Ú_test_conditiono  s    z$TestSyncManagerTypes._test_conditionc             C   s   | j  ¡ }|  | j|¡ d S )N)r<   rV  r¼  rÄ  )r/   rQ  r   r   r   Útest_conditiont  s    
z#TestSyncManagerTypes.test_conditionc             C   s   |  ¡  d S )N)r¦  )rj   r&  r   r   r   Ú_test_barrierx  s    z"TestSyncManagerTypes._test_barrierc             C   s   | j  d¡}|  | j|¡ d S )NrN   )r<   rŽ  r¼  rÆ  )r/   rQ  r   r   r   rš  }  s    z!TestSyncManagerTypes.test_barrierc          	   C   s   | W d Q R X d S )Nr   )rj   r&  r   r   r   Ú
_test_pool  s    zTestSyncManagerTypes._test_poolc             C   s    | j jdd}|  | j|¡ d S )Nr  )r;   )r<   r  r¼  rÇ  )r/   rQ  r   r   r   Ú	test_pool‡  s    zTestSyncManagerTypes.test_poolc             C   s"   |  ¡  | ¡  x|D ]}qW d S )N)ré  Úreverse)rj   r&  r¹  r   r   r   Ú
_test_list‹  s
    
zTestSyncManagerTypes._test_listc             C   s6   | j  ¡ }| d¡ |  | j|¡ |  t|ƒd¡ d S )NrN   r   )r<   rs   r   r¼  rÊ  rE   r]   )r/   rQ  r   r   r   rá  —  s    

zTestSyncManagerTypes.test_listc             C   s   d S )Nr   )rj   r&  r   r   r   Ú
_test_dictž  s    	zTestSyncManagerTypes._test_dictc             C   s4   | j  ¡ }d|d< |  | j|¡ |  t|ƒd¡ d S )NrN   rL  r   )r<   rí  r¼  rË  rE   r]   )r/   rQ  r   r   r   rñ  ©  s    
zTestSyncManagerTypes.test_dictc             C   s   |  d¡ d S )Nrk   )r¨   )rj   r&  r   r   r   Ú_test_value°  s    z TestSyncManagerTypes._test_valuec             C   s>   | j  dd¡}|  | j|¡ |  |jd¡ |  | ¡ d¡ d S )Nr™   r>   rk   )r<   r   r¼  rÌ  rE   rF   rv   )r/   rQ  r   r   r   rÃ  ¶  s    zTestSyncManagerTypes.test_valuec             C   s   d S )Nr   )rj   r&  r   r   r   Ú_test_array¼  s    z TestSyncManagerTypes._test_arrayc             C   s$   | j  dddg¡}|  | j|¡ d S )Nr™   r   r>   )r<   rÕ  r¼  rÍ  )r/   rQ  r   r   r   rØ  Ã  s    zTestSyncManagerTypes.test_arrayc             C   s   d S )Nr   )rj   r&  r   r   r   Ú_test_namespaceÇ  s    z$TestSyncManagerTypes._test_namespacec             C   s(   | j  ¡ }d|_d|_|  | j|¡ d S )Nr   r>   )r<   r  r¹  rº  r¼  rÎ  )r/   rQ  r   r   r   r  Ì  s    
z#TestSyncManagerTypes.test_namespaceN)r   )r@  )r@  )rL  )*r7   r8   r9   r   r=  r>  r·  r‘  r“  ré   r  r  r»  r¼  r½  r¾  r¿  rn  ro  rÀ  rD  rÂ  rG  rK  rM  rO  rÄ  rÅ  rÆ  rš  rÇ  rÈ  rÊ  rá  rË  rñ  rÌ  rÃ  rÍ  rØ  rÎ  r  r   r   r   r   r¶  è  sF   




r¶  c               @   s$   e Zd Zedd„ ƒZedd„ ƒZdS )Ú	BaseMixinc             C   s   t jj ¡ tj ¡ f| _d S )N)r   r   Ú	_danglingr   rÉ   Údangling)rj   r   r   r   r  Ø  s    
zBaseMixin.setUpClassc             C   s„   t j ¡  ttjjƒt| jd ƒ }|rBdt j_t	d| t
jd d }ttjƒt| jd ƒ }|r|dt j_t	d| t
jd d }d S )Nr   Tz!Warning -- Dangling processes: %s)r¸  r>   zWarning -- Dangling threads: %s)rÀ   r   Ú
gc_collectr¨   r   r   rÐ  rÑ  r¹  rk  rª   rØ   rÉ   )rj   r;   r=   r   r   r   r  Ý  s    


zBaseMixin.tearDownClassN)r7   r8   r9   ré   r  r  r   r   r   r   rÏ  ×  s   rÏ  c               @   sÆ   e Zd ZdZejZejZeejƒZeej	ƒZ	eej
ƒZ
eejƒZeejƒZeejƒZeejƒZeejƒZeejƒZeejƒZeejƒZeejƒZeejƒZeejƒZeejƒZeejƒZeejƒZdS )rh  r;   N)r7   r8   r9   rS   r   rc   r¾  r:  rV   rq   r  r›   r   r(  r@  rE  rL  rN  rV  ro   rŽ  r   rÕ  rÀ  rÔ  r   r   r   r   rh  ò  s(   















rh  c                   s
  e Zd ZdZejZee d¡ƒZ	ee d¡ƒZ
ee d¡ƒZee d¡ƒZee d¡ƒZee d¡ƒZee d¡ƒZee d	¡ƒZee d
¡ƒZee d¡ƒZee d¡ƒZee d¡ƒZee d¡ƒZee d¡ƒZedd„ ƒZe‡ fdd„ƒZe‡ fdd„ƒZ‡  ZS )ÚManagerMixinr<   zmanager.Queuezmanager.JoinableQueuezmanager.Lockzmanager.RLockzmanager.Semaphorezmanager.BoundedSemaphorezmanager.Conditionzmanager.Eventzmanager.Barrierzmanager.Valuezmanager.Arrayzmanager.listzmanager.dictzmanager.Namespacec             O   s   | j j||ŽS )N)r<   r  )rj   r3   r4   r   r   r   r    s    zManagerMixin.Poolc                s   t ƒ  ¡  t ¡ | _d S )N)r  r  r   r;  r<   )rj   )r  r   r   r    s    
zManagerMixin.setUpClassc                sÈ   t  ¡ }d}x^tt ¡ ƒdkrjt  |¡ |d9 }t  ¡ | }|dkrdtj_t	dt ¡ |f t
jd P qW t ¡  | j ¡ dkr dtj_t	d	ƒ t	| j ¡ ƒ | j ¡  | j ¡  d | _tƒ  ¡  d S )
Ng{®Gáz„?r>   rk   g      @TzPWarning -- multiprocessing.Manager still has %s active children after %s seconds)r¸  r   z@Warning -- Shared objects which still exist at manager shutdown:)r1   r2   r]   r   rq   r|   rÀ   r   r¹  rk  rª   rØ   r°   r±   r<   Z_number_of_objectsZ_debug_inforv  rw   r  r  )rj   rº  r5   rc  )r  r   r   r  $  s*    



zManagerMixin.tearDownClass)r7   r8   r9   rS   r   rc   rN  ÚoperatorÚ
attrgetterr   r(  r@  rE  rL  rN  rV  ro   rŽ  r   rÕ  rs   rí  r  ré   r  r  r  rS  r   r   )r  r   rÓ  	  s&   rÓ  c               @   sÔ   e Zd ZdZejjZejjZeejj	ƒZ	eejj
ƒZ
eejjƒZeejjƒZeejjƒZeejjƒZeejjƒZeejjƒZeejjƒZeejjƒZeejjƒZeejjƒZeejjƒZeejjƒZeejjƒZdS )ÚThreadsMixinr=   N)r7   r8   r9   rS   r   Zdummyrc   r¾  r:  rV   rq   r  r›   r   r(  r@  rE  rL  rN  rV  ro   rŽ  r   rÕ  r   r   r   r   rÖ  G  s$   rÖ  c                s0  | d }t ƒ }dddh}xÖ| ¡ D ]Ê\}}t|tƒs6q"t|tƒr´|tkrJq"x |jD ]\}d| ¡  |dd …  }|| ¡ d  }	G dd	„ d	||	tj	ƒ}
| |
_
|
_||
_|
| |< qRW q"t|tj	ƒr"G d
d	„ d	|tƒ}
| |
_
|
_||
_|
| |< q"W d d g‰ d g‰‡ ‡‡fdd„}‡ ‡fdd„}|| d< || d< d S )Nr7   r;   r=   r<   ZWithr>   ÚMixinc               @   s   e Zd ZdS )z*install_tests_in_module_dict.<locals>.TempN)r7   r8   r9   r   r   r   r   ÚTempn  s   rØ  c               @   s   e Zd ZdS )z*install_tests_in_module_dict.<locals>.TempN)r7   r8   r9   r   r   r   r   rØ  t  s   c                 sÐ   t  t¡ t j ¡  t jj ¡ ˆ d< tj ¡ ˆ d< t jddˆd< yt j	ˆdd W n" t
k
rv   t ˆd ¡‚Y nX tj d¡r°yt  ¡ } W n tk
r®   t d¡‚Y nX tƒ  t ¡  t  ¡  t¡ d S )	Nr   r>   T)Z
allow_none)r˜  z start method not supportedZlinuxz1OSError raises on RLock creation, see issue 3111!)r   r™  rš  r   Ú_cleanuprÐ  r   rÉ   r¹   r–  r(   r)   r*   rª   rº   rœ  rE  rŒ  r+   r   Zget_temp_dirr  r  r"  )rC  )rÑ  Úold_start_methodÚstart_methodr   r   ÚsetUpModule}  s$    

z1install_tests_in_module_dict.<locals>.setUpModulec                 sÀ   d} t j ¡  tjˆd dd ttjjƒtˆ d ƒ }|rZd} dt j_t	d| t
jd d }ttjƒtˆ d ƒ }|r–d} dt j_t	d| t
jd d }| r¨t d	¡ tj ¡  t j ¡  d S )
NFr   T)r˜  z!Warning -- Dangling processes: %s)r¸  r>   zWarning -- Dangling threads: %sg      à?)rÀ   r   rÒ  r   r–  r¨   r   rÐ  r¹  rk  rª   rØ   rÉ   r1   r|   rÙ  )Z
need_sleepr;   r=   )rÑ  rÚ  r   r   ÚtearDownModule“  s*    




z4install_tests_in_module_dict.<locals>.tearDownModulerÜ  rÝ  )ÚglobalsrÏ   r   rr   Ú
issubclassr:   rJ   Ú
capitalizer)   ÚTestCaser7   r9   r8   r4  )Zremote_globsrÛ  r8   Zlocal_globsZ	ALL_TYPESrh   ÚbaseZtype_Znewnamer×  rØ  rÜ  rÝ  r   )rÑ  rÚ  rÛ  r   Úinstall_tests_in_module_dict_  s6    


rã  )r  )¦r)   r   r  r«  r1   rÐ   r  rª   r%   r°   r  r…   rÖ  r×  rç  r(  rs  rÔ  r®   Ztest.supportrÀ   Ztest.support.script_helperr   Úimport_moduler   rÉ   rW  r   Zmultiprocessing.dummyZmultiprocessing.heapZmultiprocessing.managersr^  Zmultiprocessing.queuesr   r   ZHAVE_SEND_HANDLEr»  ÚImportErrorZmultiprocessing.sharedctypesr   r   rl  r®  r   r   r   r   r  r"  r’   r?   r  r  r  rÙ   ZHAVE_GETVALUErº   r2  r   r   r&   rµ  rš  Zctypesr   r    r!   r"   r4  r+   r,   r:   rL   rM   rR   rc   rê   rò   r  r  r  r?  rI  rP  rm  rp  r~  r  rŒ  r  rµ  rÐ  rÞ  r  r  r  r  r  r(   r  r  r  rV  rX  rY  ra  rh  ri  r9  rj  rm  rn  rp  Úregisterrt  r   r|  r}  r~  r  rƒ  r€  r‹  r“  r‘  r¼  rÄ  rÉ  rk  rÕ  rå  rî  rð  r÷  rá  r  r  r*  r0  r3  r9  r:  rD  rE  rF  rG  rH  rO  rT  rd  rg  ru  rz  r  r  rˆ  r“  rÝ  r¢  r³  r¶  rÏ  rh  rÓ  rÖ  rã  r   r   r   r   Ú<module>   sl  








   [N  A6  *39   FS 

	  J(19
04  0R 	E;x+E"! 4 "BCF
I% p>