a
    äze¤ì ã                   @   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Zd dlZd dlZd dlmZ d dlmZ d dlmZ ej d¡Ze ¡  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' zd dl!m(Z( e(j)Z*W n e+yb   dZ*Y n0 zd d	l,m-Z-m.Z. d
Z/W n e+y”   dZ/Y n0 zd dl!m0Z0 d
Z1W n e+yÂ   dZ1Y n0 zd dl2Z2W n e+yè   dZ2Y n0 ej3d
dre  4d¡‚dd„ Z5dd„ Z6dd„ Z7ej8dkr:d dl!m9Z9 dd„ Z:e'j;Z<dZ=dZ>e>rZd\Z?Z@ZAn
d\Z?Z@ZAeBeddƒ ZCejDdkZEd dl mFZF dd„ ZGze Hd ¡ZIW n   d!ZIY n0 d"d#gZJzd d$lKmLZLmMZMmNZNmOZO W n$ e+yø   ePZLd ZM ZNZOY n0 d%d&„ ZQG d'd(„ d(ePƒZRG d)d*„ d*ePƒZSd+d,„ ZTG d-d.„ d.ƒZUG d/d0„ d0eSƒZVG d1d2„ d2e!jWƒZXG d3d4„ d4eSƒZYd5d6„ ZZd7d8„ Z[G d9d:„ d:eSƒZ\G d;d<„ d<eSƒZ]G d=d>„ d>eSƒZ^G d?d@„ d@eSƒZ_G dAdB„ dBeSƒZ`G dCdD„ dDePƒZadEdF„ ZbG dGdH„ dHePƒZcG dIdJ„ dJePƒZdG dKdL„ dLeSƒZeG dMdN„ dNeSƒZfG dOdP„ dPeSƒZgG dQdR„ dReSƒZhdádTdU„ZidVdW„ ZjdXdY„ ZkdZd[„ ZlG d\d]„ d]ePƒZmG d^d_„ d_enƒZod`da„ ZpG dbdc„ dceSƒZqddde„ Zrdfdg„ ZsG dhdi„ dieSƒZtG djdk„ dkeSƒZud dll$mvZvmwZwmxZx G dmdn„ dnePƒZydodp„ ZzG dqdr„ drewƒZ{G dsdt„ dtevƒZ|e|j}dueydv e|j}dweydxdy e|j}dpeze{dz G d{d|„ d|eSƒZ~e ¡ Z€d}d~„ ZG dd€„ d€evƒZ‚e‚j}d~edv G dd‚„ d‚evƒZƒeƒ }d~¡ dƒZ„G d„d…„ d…eSƒZ…e †d†¡G d‡dˆ„ dˆeSƒƒZ‡e5d‰ƒZˆG dŠd‹„ d‹eSƒZ‰G dŒd„ deSƒZŠG dŽd„ deSƒZ‹G dd‘„ d‘eSƒZŒe  e*d’¡e †d†¡G d“d”„ d”eSƒƒƒZŽG d•d–„ d–eSƒZG d—d˜„ d˜eLƒZG d™dš„ dšeSƒZ‘e  e1d›¡e †d†¡G dœd„ deSƒƒƒZ’G dždŸ„ dŸeSƒZ“G d d¡„ d¡e j”ƒZ•G d¢d£„ d£eSƒZ–G d¤d¥„ d¥eSƒZ—G d¦d§„ d§e j”ƒZ˜e †d†¡G d¨d©„ d©e j”ƒƒZ™dªd«„ Zše †d†¡G d¬d­„ d­e j”ƒƒZ›d®d¯„ Zœd°d±„ Zd²d³„ Zžd´dµ„ ZŸG d¶d·„ d·ePƒ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jDdkdÌ¡G dÍdÎ„ dÎe j”ƒƒZ¬G dÏdÐ„ dÐe j”ƒZ­G dÑdÒ„ dÒe j”ƒZ®e †d†¡G dÓdÔ„ dÔe j”ƒƒZ¯G dÕdÖ„ dÖe j”ƒZ°G d×dØ„ dØePƒ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)Úhashlib_helper)Úsocket_helperÚ_multiprocessing)Úutil)Ú	reductionF)ÚValueÚcopyT)Úshared_memory)Úaddressz(libasan has a pthread_create() dead lockc                 C   s
   |   d¡S )NÚlatin)Úencode)Ús© r   ú0/usr/lib/python3.9/test/_test_multiprocessing.pyr   N   s    r   c                 C   s"   t | tjjƒr|  ¡  |  ¡  d S ©N)Ú
isinstanceÚmultiprocessingÚqueuesÚQueueÚcloseÚjoin_thread©Úqueuer   r   r   Úclose_queueR   s    r   c                 C   s   t  | ¡ d S r   )r   r   )Úprocessr   r   r   Újoin_processX   s    r   Úposix)Úresource_trackerc                 C   s   t j| | ƒ d S r   )r   Ú_CLEANUP_FUNCS)ÚnameÚrtyper   r   r   Ú_resource_unlinka   s    r"   çš™™™™™¹?)g=
×£p=ê?gffffffÖ?gffffffö?)r#   r#   r#   ZHAVE_BROKEN_SEM_GETVALUEÚwin32©Úwaitc                 C   s    |d ur|dk rd }t | g|ƒS )Nç        r%   )ÚhandleÚtimeoutr   r   r   Úwait_for_handle}   s    r*   ÚSC_OPEN_MAXé   Ú__main__z$test.test_multiprocessing_forkserver)Ú	StructureÚc_intÚc_doubleÚ
c_longlongc               	   C   sR   d} zt  d¡}W n ttfy*   Y d S 0 |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 r   )ÚfuncÚelapsed)Úselfr<   r   r   r   Ú__init__ª   s    zTimingWrapper.__init__c                 O   s>   t  ¡ }z | j|i |¤ŽW t  ¡ | | _S t  ¡ | | _0 d S r   )ÚtimeÚ	monotonicr<   r=   )r>   ÚargsÚkwdsÚtr   r   r   Ú__call__®   s    þzTimingWrapper.__call__N©Ú__name__Ú
__module__Ú__qualname__r?   rE   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   s0   z||Ž }W n t y   Y n0 |  ||¡S d S r   )ÚNotImplementedErrorÚassertEqual)r>   Úvaluer<   rB   Úresr   r   r   ÚassertReturnsIfImplementedÁ   s
    z'BaseTestCase.assertReturnsIfImplementedc                 G   s   t dƒ‚d S )Nz#shouldn't try to pickle a test case)rV   )r>   rB   r   r   r   Ú
__reduce__Ë   s    zBaseTestCase.__reduce__N)rG   rH   rI   ÚALLOWED_TYPESrU   rZ   r[   Ú__reduce_ex__r   r   r   r   rJ   ¹   s
   
rJ   c                 C   sj   z
|   ¡ W S  tyd   z| jW  Y S  ty^   z| jW  Y  Y S  tyX   t‚Y n0 Y n0 Y n0 d S r   )Ú	get_valuer6   Z_Semaphore__valueÚ_valuerV   ©r>   r   r   r   r^   Ô   s    
r^   c                   @   s   e Zd Zdd„ ZdS )ÚDummyCallablec                 C   s   |  d¡ d S ©Né   )Úput)r>   ÚqÚcr   r   r   rE   å   s    zDummyCallable.__call__N)rG   rH   rI   rE   r   r   r   r   ra   ä   s   ra   c                   @   s†  e Zd ZdZdd„ Zdd„ Zedd„ ƒZdd	„ Zed
d„ ƒZ	dd„ Z
edd„ ƒZedd„ ƒZdd„ Ze ejd¡dd„ ƒZe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dPd1d2„ƒZd3d4„ Z d5d6„ Z!d7d8„ Z"ed9d:„ ƒZ#d;d<„ Z$ed=d>„ ƒZ%d?d@„ Z&ei fdAdB„ƒZ'dCdD„ Z(dEdF„ Z)edQdHdI„ƒZ*dJdK„ Z+dLdM„ Z,dNdO„ Z-d0S )RÚ_TestProcess©rK   rM   c                 C   sˆ   | j dkr|  d | j ¡¡ |  ¡ }|j}|  | ¡ ¡ |  |j ¡ |  |t	¡ |  t
|ƒdk¡ |  |jt ¡ ¡ |  |jd ¡ d S )NrM   útest not appropriate for {}r   )ÚTYPEÚskipTestÚformatÚcurrent_processÚauthkeyÚ
assertTrueÚis_aliveÚdaemonÚassertIsInstanceÚbytesÚlenrW   Úidentr4   ÚgetpidÚexitcode)r>   Úcurrentrn   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 )NrM   ri   ©ÚtargetT©r{   rq   F)
rj   rk   rl   ÚProcessÚ_testrW   rq   rm   ro   Ú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 )NrM   )rm   rd   r    rj   rs   rn   Úpid)Úclsre   rB   rC   rx   r   r   r   r~     s    


z_TestProcess._testc                 C   s    | j dkr|  d | j ¡¡ |  |  ¡ ¡ | jdd\}}| j| j|fd}| ¡  | 	¡  | 
¡ \}}|  ||  ¡ j¡ |  |t ¡ ¡ |  ||  ¡ j¡ d S )NrM   ri   F©Úduplex©r{   rB   )rj   rk   rl   ÚassertIsNoneÚparent_processÚPiper}   Ú_test_send_parent_processÚstartÚjoinÚrecvrW   rm   r‚   r4   rv   r    )r>   ÚrconnÚwconnÚpZ
parent_pidÚparent_namer   r   r   Útest_parent_process_attributes  s    
z+_TestProcess.test_parent_process_attributesc                 C   s&   ddl m} | |ƒ j|ƒ jg¡ d S )Nr   ©rˆ   )Úmultiprocessing.processrˆ   Úsendr‚   r    ©rƒ   r   rˆ   r   r   r   rŠ   !  s    z&_TestProcess._test_send_parent_processc                 C   s®   | j dkr|  d | j ¡¡ | jdd\}}| j| j|fd}| ¡  |jtj	ds\t
dƒ‚| ¡ }|  |d¡ | ¡  | ¡  |jtj	ds–t
dƒ‚| ¡ }|  |d	¡ d S )
NrM   ri   Fr„   r†   ©r)   z(Could not communicate with child processÚaliveú	not alive)rj   rk   rl   r‰   r}   Ú_test_create_grandchild_processr‹   Úpollr   ÚLONG_TIMEOUTÚAssertionErrorr   rW   Ú	terminaterŒ   )r>   rŽ   r   r   Zparent_process_statusr   r   r   Útest_parent_process&  s"    
ÿz _TestProcess.test_parent_processc                 C   s(   | j | j|fd}| ¡  t d¡ d S )Nr†   i,  )r}   Ú_test_report_parent_statusr‹   r@   Úsleep)rƒ   r   r   r   r   r   rš   ?  s    z,_TestProcess._test_create_grandchild_processc                 C   sP   ddl m} | |ƒ  ¡ rdnd¡ |ƒ jtjd | |ƒ  ¡ rFdnd¡ d S )Nr   r“   r˜   r™   r—   )r”   rˆ   r•   rp   rŒ   r   ÚSHORT_TIMEOUTr–   r   r   r   r    E  s    z'_TestProcess._test_report_parent_statusc                 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u ¡ |  |jd ¡ | ¡  |  |jd ¡ |  | 	¡ d¡ |  ||  ¡ ¡ |  | ¡ |dd … ¡ |  | ¡ |¡ |  | ¡ |j¡ | jd	krX|  | ¡ |j¡ |  | ¡ |j¡ | ¡  |  |jd¡ |  | 	¡ d
¡ |  
||  ¡ ¡ t|ƒ d S )NrO   é   é   gR¸…ëQ@)ÚhelloZbyeZSomeProcess)r{   rB   Úkwargsr    TrM   Fr   )r   ÚEventr}   r~   rq   rm   rj   rW   rn   rp   ÚassertNotInÚactive_childrenro   ÚtypeÚlistrw   r‹   ÚassertInÚgetr    r‚   rŒ   r   )r>   re   ÚerB   r¦   r    r   rx   r   r   r   Útest_processL  s@    



ÿ
z_TestProcess.test_processzneeds native_idc                 C   sr   | j dkr|  d | j ¡¡ t ¡ j}|  d¡}| j| j|fd}| 	¡  | 
¡ }| ¡  t|ƒ |  ||¡ d S )NrM   ri   rO   r†   )rj   rk   rl   Ú	threadingÚmain_threadÚ	native_idr   r}   Ú"_test_process_mainthread_native_idr‹   r­   rŒ   r   ÚassertNotEqual)r>   Zcurrent_mainthread_native_idre   r   Zchild_mainthread_native_idr   r   r   Ú!test_process_mainthread_native_idt  s    


z._TestProcess.test_process_mainthread_native_idc                 C   s   t  ¡ j}| |¡ d S r   )r°   r±   r²   rd   )rƒ   re   Zmainthread_native_idr   r   r   r³   …  s    
z/_TestProcess._test_process_mainthread_native_idc                 C   s   t  d¡ d S )Néd   ©r@   r¡   ©rƒ   r   r   r   Ú_sleep_someŠ  s    z_TestProcess._sleep_somec                 C   s   t  |¡ d S r   r·   )rƒ   Ú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	ƒrV‡ fd
d„}t tj|¡}z4t d¡ |  |ƒ d ¡ W t d¡ t tj|¡ nt d¡ t tj|¡ 0 n|  |ƒ d ¡ |  |jd¡ |  ˆ  ¡ d¡ |  ˆ |  
¡ ¡ ˆ  ¡  ˆ jS )NrM   ri   rz   Tr   r'   r3   rO   Úalarmc                     s   t dˆ  ƒ‚d S )Nzjoin took too long: %s©ÚRuntimeError©rB   ©r   r   r   Úhandler°  s    z+_TestProcess._kill_process.<locals>.handleré
   F)rj   rk   rl   r}   r¹   rq   r‹   rW   rp   r¬   r©   rw   r;   rŒ   rU   r=   r@   r¡   ÚhasattrÚsignalÚSIGALRMr¼   r¨   )r>   ÚmethrŒ   rÁ   Zold_handlerr   rÀ   r   Ú_kill_process’  sB    




ÿ
z_TestProcess._kill_processc                 C   s,   |   tjj¡}tjdkr(|  |tj ¡ d S ©NÚnt)	rÇ   r   r}   rž   r4   r    rW   rÄ   ÚSIGTERM©r>   rw   r   r   r   Útest_terminateÅ  s    
z_TestProcess.test_terminatec                 C   s,   |   tjj¡}tjdkr(|  |tj ¡ d S rÈ   )	rÇ   r   r}   Úkillr4   r    rW   rÄ   ÚSIGKILLrË   r   r   r   Ú	test_killÊ  s    
z_TestProcess.test_killc                 C   sH   zt  ¡ }W n ty"   d}Y n0 |  t|ƒtu ¡ |  |dk¡ d S rN   )r   Ú	cpu_countrV   ro   rª   Úint)r>   Zcpusr   r   r   Útest_cpu_countÏ  s    
z_TestProcess.test_cpu_countc                 C   sp   |   t|  ¡ ƒt¡ | jtjtfd}|  ||  ¡ ¡ d|_	| 
¡  |  ||  ¡ ¡ | ¡  |  ||  ¡ ¡ d S ©Nr†   T)rW   rª   r©   r«   r}   r@   r¡   ÚDELTAr¨   rq   r‹   r¬   rŒ   ©r>   r   r   r   r   Útest_active_children×  s    z!_TestProcess.test_active_childrenc                 C   sR   |  |¡ t|ƒdk rNtdƒD ].}| j| j|||g fd}| ¡  | ¡  qd S )Nr£   r†   )r•   rt   Úranger}   Ú_test_recursionr‹   rŒ   )rƒ   r   ÚidÚir   r   r   r   rØ   ä  s    
ÿz_TestProcess._test_recursionc                 C   sx   | j dd\}}|  |g ¡ t t¡ g }| ¡ rB| | ¡ ¡ q*g dgddgddgdgddgddgg}|  ||¡ d S )NFr„   r   rO   )	r‰   rØ   r@   r¡   rÔ   r›   Úappendr   rW   )r>   rŽ   r   ÚresultÚexpectedr   r   r   Útest_recursionï  s    
ù	z_TestProcess.test_recursionc                 C   s   |  d¡ d S )Nç      $@r%   ©rƒ   Ú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   ƒ n1 s\0    Y  | 	¡  |  
|j¡ |j}|  |t¡ |  t|dd¡ | ¡  | ¡  |  t|dd¡ d S )NrM   ri   r†   r'   r—   rO   )rj   rk   rl   r§   r}   râ   ÚassertRaisesr7   Úsentinelr‹   Ú
addCleanuprŒ   rr   rÑ   r   r*   Úsetro   )r>   rá   r   rä   r   r   r   Útest_sentinel  s    
$z_TestProcess.test_sentinelr   Nc                 C   s   |d ur|  ¡  t |¡ d S r   )r­   ÚsysÚexit)rƒ   Úrcre   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   ƒ n1 s~0    Y  | d ¡ | ¡  |  | 	¡ d¡ |  |jd¡ | ¡  |  
t¡ | 	¡  W d   ƒ n1 sè0    Y  |  
t¡ | ¡  W d   ƒ n1 s0    Y  |  
t¡ | ¡  W d   ƒ n1 sP0    Y  | ¡  t |¡}~t ¡  |  |ƒ d ¡ t|ƒ d S )NrM   ri   re   )r{   r¦   TFr   )rj   rk   rl   r   r}   rë   rq   r‹   rW   rp   rã   r7   r   rd   rŒ   rw   rž   ÚweakrefÚrefÚgcÚcollectÚassertIsr   )r>   re   r   Úwrr   r   r   Ú
test_close  s4    
&
&((
z_TestProcess.test_closec                    s*  ˆ j dkrˆ  d ˆ j ¡¡ t ¡ }|dkr0dnd}‡ fdd„t|ƒD ƒ}|D ]}| ¡  qN|D ]}t|ƒ q`|D ]}ˆ  |j	d¡ qr‡ fd	d„t|ƒD ƒ}|D ]}| ¡  q t
 d
¡ |D ]}| ¡  q¼|D ]}t|ƒ qÎtjdkr&tj g}tjdkr| tj ¡ |D ]}ˆ  |j	|¡ qd S )NrM   ri   Úspawnrc   r¶   c                    s   g | ]}ˆ j ˆ jd d‘qS ))ç{®Gáz„?r†   )r}   r»   ©Ú.0rÚ   r`   r   r   Ú
<listcomp>E  s   ÿz4_TestProcess.test_many_processes.<locals>.<listcomp>r   c                    s   g | ]}ˆ j ˆ jd ‘qS )rz   )r}   r¹   rõ   r`   r   r   r÷   N  s   ÿçü©ñÒMbP?rÉ   Údarwin)rj   rk   rl   r   Úget_start_methodr×   r‹   r   rW   rw   r@   r¡   rž   r4   r    rÄ   rÊ   rè   ÚplatformrÛ   rÎ   r¬   )r>   ÚsmÚNÚprocsr   Z	exitcodesr   r`   r   Útest_many_processes=  s:    

ÿ


ÿ




z _TestProcess.test_many_processesc                 C   sn   t ƒ }t |¡}|  ¡ }| j|||fd}~| ¡  | ¡  t ¡  |  	|ƒ d ¡ |  
| ¡ d¡ t|ƒ d S )Nr†   rc   )ra   rì   rí   r   r}   r‹   rŒ   rî   rï   rð   rW   r­   r   )r>   rf   rñ   re   r   r   r   r   Útest_lose_target_ref`  s    
z!_TestProcess.test_lose_target_refc                 C   s   |  tj ¡ ¡ | ¡  d S r   )rd   Útestr   Zfd_countr&   )r>   Úevtre   r   r   r   Ú_test_child_fd_inflationm  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 ƒ}|D ]}| ¡  qnzR‡fdd„t|ƒD ƒ}ˆ 	t
t|ƒƒd|¡ W ˆ  ¡  |D ]}| ¡  q¸tˆƒ n$ˆ  ¡  |D ]}| ¡  qÜtˆƒ 0 d S )	NrM   ri   Úforkrc   c                    s    g | ]}ˆj ˆjˆ ˆfd ‘qS ©r†   )r}   r  rõ   ©r  re   r>   r   r   r÷   ‚  s   ÿz8_TestProcess.test_child_fd_inflation.<locals>.<listcomp>c                    s   g | ]}ˆ   ¡ ‘qS r   ©r­   rõ   ©re   r   r   r÷   ˆ  ó    rO   )rj   rk   rl   r   rú   r§   r   r×   r‹   rW   rt   ræ   rŒ   r   )r>   rü   rý   rþ   r   Z	fd_countsr   r  r   Útest_child_fd_inflationr  s0    
ÿ


ý
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 )Nç      à?©r@   r¡   ræ   r   ©r  r   r   Úfunc1“  s    
z2_TestProcess._test_wait_for_threads.<locals>.func1c                      s   t  d¡ ˆ  ¡  d S )Né   )r@   r¡   Úclearr   r  r   r   Úfunc2—  s    
z2_TestProcess._test_wait_for_threads.<locals>.func2rz   Tr|   )r°   ÚThreadr‹   )r>   r  r  r  r   r  r   Ú_test_wait_for_threads‘  s    z#_TestProcess._test_wait_for_threadsc                 C   sX   | j dkr|  d | j ¡¡ |  ¡ }| j| j|fd}| ¡  | ¡  |  | 	¡ ¡ d S )NrM   ri   r†   )
rj   rk   rl   r§   r}   r  r‹   rŒ   ro   Úis_set)r>   r  Úprocr   r   r   Útest_wait_for_threadsž  s    
z"_TestProcess.test_wait_for_threadsc                 C   sH   |  ¡ D ]2\}}|dkr*t ¡ }| ¡  nd }tt|d ƒ q| ¡  d S )Nr   )ÚitemsÚioÚStringIOr   Úsetattrrè   ræ   )r>   r  Zbreak_std_streamsÚstream_nameÚactionÚstreamr   r   r   Ú_test_error_on_stdio_flushª  s    
z'_TestProcess._test_error_on_stdio_flushc                 C   s¬   t  ¡ d g}|d  ¡  dD ]Š}|D ]€}tt|ƒ}tt||ƒ zV|  ¡ }| j| j|fd}| 	¡  | 
¡  |  | ¡ ¡ |  |jd¡ W tt||ƒ q$tt||ƒ 0 q$qd S )Nr   ©ÚstdoutÚstderrr†   )r  r  r   Úgetattrrè   r  r§   r}   r  r‹   rŒ   ro   r  rW   rw   )r>   Zstreamsr  r  Ú
old_streamr  r  r   r   r   Útest_error_on_stdio_flush_1¶  s     
ÿz(_TestProcess.test_error_on_stdio_flush_1c                 C   sŽ   dD ]„}dD ]z}t t|ƒ}z\|  ¡ }| j| j|||ifd}| ¡  | ¡  |  | ¡ ¡ |  	|j
d¡ W tt||ƒ qtt||ƒ 0 qqd S )Nr  )r   Úremover†   r   )r"  rè   r§   r}   r  r‹   rŒ   ro   r  rW   rw   r  )r>   r  r  r#  r  r  r   r   r   Útest_error_on_stdio_flush_2É  s    

ÿz(_TestProcess.test_error_on_stdio_flush_2r'   c                 C   s   t  |¡ | ¡  d S r   r  )r>   r  rº   r   r   r   Ú_sleep_and_set_eventÚ  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 )
NrM   ri   Ú
forkserverr   )Ú_forkserverr  r†   ç       @)r   éÿ   )rj   rk   rl   r   rú   Zmultiprocessing.forkserverr)  Úensure_runningr§   r}   r'  r‹   Z_forkserver_pidr4   rÍ   r@   r¡   rŒ   ro   r  rW   rw   r¬   )
r>   Úsignumrü   r)  rº   r  r  r‚   Zevt2r€   r   r   r   Úcheck_forkserver_deathß  s.    
z#_TestProcess.check_forkserver_deathc                 C   s   |   tj¡ d S r   )r.  rÄ   ÚSIGINTr`   r   r   r   Útest_forkserver_sigint  s    z#_TestProcess.test_forkserver_sigintc                 C   s   t jdkr|  tj¡ d S rÈ   )r4   r    r.  rÄ   rÎ   r`   r   r   r   Útest_forkserver_sigkill	  s    
z$_TestProcess.test_forkserver_sigkill)r   N)r'   ).rG   rH   rI   r\   ry   r   Úclassmethodr~   r’   rŠ   rŸ   rš   r    r¯   r8   Ú
skipUnlessr°   Ú_HAVE_THREAD_NATIVE_IDrµ   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.  r0  r1  r   r   r   r   rg   ê   sj   
	


(



3


 #

&rg   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 r   )r   r}   r?   r‰   Ú
child_connÚparent_connr`   r   r   r   r?     s    z_UpperCaser.__init__c                 C   s<   | j  ¡  t| jjd ƒD ]}| j | ¡ ¡ q| j ¡  d S r   )r7  r   Úiterr6  r   r•   Úupper©r>   r   r   r   r   Úrun  s    
z_UpperCaser.runc                 C   s   | j  |¡ | j  ¡ S r   )r7  r•   r   r:  r   r   r   Úsubmit  s    z_UpperCaser.submitc                 C   s$   | j  d ¡ | j  ¡  | j ¡  d S r   )r7  r•   r   r6  r`   r   r   r   Ústop$  s    
z_UpperCaser.stopN)rG   rH   rI   r?   r;  r<  r=  r   r   r   r   r5    s   r5  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©rK   c                 C   sL   t ƒ }d|_| ¡  |  | d¡d¡ |  | d¡d¡ | ¡  | ¡  d S )NTr¥   ZHELLOZworldZWORLD)r5  rq   r‹   rW   r<  r=  rŒ   )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ƒ<}| ¡ }|  d|¡ |  d|¡ |  d|¡ W d   ƒ n1 s¢0    Y  d S )NrM   ri   r†   ÚrÚZeroDivisionErrorztest_multiprocessing.pyz1/0 # MARKER)rj   rk   rl   r  r   ÚTESTFNrå   Úunlinkr}   Ú_test_stderr_flushr‹   rŒ   ÚopenÚreadr¬   )r>   Útestfnr  ÚfÚerrr   r   r   Útest_stderr_flush6  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©ÚclosefdrO   r   )r4   rF  ÚO_WRONLYÚO_CREATÚO_EXCLrè   r!  )rƒ   rH  Úfdr   r   r   rE  G  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 )NrL  FrM  )r4   rF  rO  rP  rQ  rè   r!  ré   )rƒ   ÚreasonrH  rR  r   r   r   Ú_test_sys_exitN  s    z&_TestSubclassingProcess._test_sys_exitc           	   	   C   sJ  | j dkr|  d | j ¡¡ tjj}|  tjj|¡ g d¢dfD ]Œ}| j| j	||fd}d|_
| ¡  t|ƒ |  |jd¡ t|dƒ}| ¡ }W d   ƒ n1 s¤0    Y  |  | ¡ t|ƒ¡ t |¡ q@g d	¢}|D ]j\}}| j|d
D | jtj|d}d|_
| ¡  t|ƒ |  |j|¡ W d   ƒ qÚ1 s:0    Y  qÚd S )NrM   ri   )rO   r£   é   zignore thisr†   TrO   rA  )))TrO   ))Fr   ))é   rV  )r   r   )r   r   r¿   )rj   rk   rl   r  r   rC  rå   rD  r}   rT  rq   r‹   r   rW   rw   rF  rG  ÚrstripÚstrr4   ÚsubTestrè   ré   )	r>   rH  rS  r   rI  ZcontentZcasesrB   rÝ   r   r   r   Útest_sys_exitT  s0    
þ&z%_TestSubclassingProcess.test_sys_exitN)
rG   rH   rI   r\   r@  rK  r2  rE  rT  rZ  r   r   r   r   r>  )  s   	

r>  c                 C   s"   t | dƒr|  ¡ S |  ¡ dkS d S )NÚemptyr   )rÃ   r[  Úqsizer  r   r   r   Úqueue_empty€  s    
r]  c                 C   s"   t | dƒr|  ¡ S |  ¡ |kS d S )NÚfull)rÃ   r^  r\  )re   Ú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d„ ZdS )Ú
_TestQueuec                 C   s*   |  ¡  tdƒD ]}| ¡  q| ¡  d S )Né   )r&   r×   r­   ræ   )rƒ   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 )Nrb  ©r_  r†   TFrO   r£   rU  é   rc   é   r   r—   )r   r§   r}   re  rq   r‹   rW   r]  r`  rd   Ú
put_nowaitr@   r¡   rÔ   r;   rã   ÚpyqueueÚFullrU   r=   ÚTIMEOUT1ÚTIMEOUT2ÚTIMEOUT3ræ   r&   rŒ   r   )r>   ZMAXSIZEr   rc  rd  r  rd   ri  r   r   r   Útest_put—  sR    þ




z_TestQueue.test_putc                 C   s<   |  ¡  | d¡ | d¡ | d¡ | d¡ | ¡  d S )Nr£   rU  rg  rc   )r&   rd   ræ   ©rƒ   r   rc  rd  r   r   r   Ú	_test_getÒ  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 )Nr†   TFr£   rU  rO   r—   rg  rc   r   )r   r§   r}   rq  rq   r‹   rW   r]  ræ   r&   r@   r¡   rÔ   r­   Ú
get_nowaitr;   rã   rj  ÚEmptyrU   r=   rl  rm  rn  rŒ   r   )r>   r   rc  rd  r  r­   rr  r   r   r   Útest_getÜ  sF    þ


z_TestQueue.test_getc                 C   s   t ddƒD ]}| |¡ q
d S )NrÂ   r  )r×   rd   )rƒ   r   rÚ   r   r   r   Ú
_test_fork  s    z_TestQueue._test_forkc                 C   sŽ   |   ¡ }tdƒD ]}| |¡ qt t¡ | j| j|fd}d|_| 	¡  tdƒD ]}|  
| ¡ |¡ qR|  tj|jd¡ | ¡  t|ƒ d S )NrÂ   r†   Tr  F)r   r×   rd   r@   r¡   rÔ   r}   ru  rq   r‹   rW   r­   rã   rj  rs  rŒ   r   )r>   r   rÚ   r   r   r   r   Ú	test_fork  s    
z_TestQueue.test_forkc                 C   sª   |   ¡ }z|  | ¡ d¡ W n ty8   |  d¡ Y n0 | d¡ |  | ¡ d¡ | d¡ |  | ¡ d¡ | ¡  |  | ¡ d¡ | ¡  |  | ¡ d¡ t|ƒ d S )Nr   zqsize method not implementedrO   rc   r£   )r   rW   r\  rV   rk   rd   r­   r   ©r>   re   r   r   r   Ú
test_qsize5  s    

z_TestQueue.test_qsizec                 C   s(   t |jd ƒD ]}t t¡ | ¡  qd S r   )r8  r­   r@   r¡   rÔ   Ú	task_done)rƒ   re   Úobjr   r   r   Ú_test_task_doneE  s    
z_TestQueue._test_task_donec                    sŠ   ˆ  ¡ ‰ ‡ ‡fdd„tdƒD ƒ}|D ]}d|_| ¡  q$tdƒD ]}ˆ  |¡ q@ˆ  ¡  |D ]}ˆ  d ¡ q\|D ]}| ¡  qptˆ ƒ d S )Nc                    s   g | ]}ˆj ˆjˆ fd ‘qS r  )r}   r{  rõ   ©r   r>   r   r   r÷   N  s   ÿz-_TestQueue.test_task_done.<locals>.<listcomp>rg  TrÂ   )ÚJoinableQueuer×   rq   r‹   rd   rŒ   r   )r>   Úworkersr   rÚ   r   r|  r   Útest_task_doneK  s    ÿ

z_TestQueue.test_task_donec              
   C   sÆ   t j ¡ ¨ d}t|d dƒ}| d¡ W d   ƒ n1 s>0    Y  t j t ¡ ¡< zt|ƒ W n t	j
y„   |  d¡ Y n0 W d   ƒ n1 sš0    Y  W d   ƒ n1 s¸0    Y  d S )NZimported_by_an_imported_modulez.pyrL  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_cwdrF  ÚwriteZDirsOnSysPathr4   ÚgetcwdÚ
__import__rj  rs  Úfail)r>   Úmodule_namerI  r   r   r   Útest_no_import_lock_contentiona  s    (
z)_TestQueue.test_no_import_lock_contentionc                 C   sH   t  ¡ }t ¡ }|  tj|jdd¡ t ¡ | }|  |d¡ t	|ƒ d S )NTgš™™™™™É?r#   )
r   r   r@   rA   rã   rj  rs  r­   ÚassertGreaterEqualr   )r>   re   r‹   Údeltar   r   r   Útest_timeoutv  s    z_TestQueue.test_timeoutc              	   C   s4  | j dkr|  d | j ¡¡ G dd„ dtƒ}tj ¡ J |  ¡ }| |ƒ ¡ | d¡ |  	|j
tjd¡ t|ƒ W d   ƒ n1 s†0    Y  tj ¡ „ | jdd}| |ƒ ¡ | d¡ z|  | ¡ d¡ W n tyä   Y n0 |  	|j
tjd¡ |  	| ¡ ¡ t|ƒ W d   ƒ n1 s&0    Y  d S )	NrK   ri   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 r   )r6   r`   r   r   r   r[   ‡  s    zQ_TestQueue.test_queue_feeder_donot_stop_onexc.<locals>.NotSerializable.__reduce__N©rG   rH   rI   r[   r   r   r   r   ÚNotSerializable†  s   rŠ  Tr—   rO   rf  )rj   rk   rl   Úobjectr  r   Úcaptured_stderrr   rd   ro   r­   r¢   r   rW   r\  rV   r[  )r>   rŠ  re   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 	¡ F |t 
¡ d}| |¡ | d¡ |  |jtjd	¡ W d   ƒ n1 s 0    Y  |  |j¡ |  |j¡ d S )
NrK   ri   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_calledr`   r   r   r   r?   ©  s    zT_TestQueue.test_queue_feeder_on_queue_feeder_error.<locals>.NotSerializable.__init__c                 S   s   d| _ t‚d S ©NT)r  r6   r`   r   r   r   r[   ­  s    zV_TestQueue.test_queue_feeder_on_queue_feeder_error.<locals>.NotSerializable.__reduce__N)rG   rH   rI   r?   r[   r   r   r   r   rŠ  §  s   rŠ  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 r‘  )r   r6   r  )r®   rz  ©rŠ  r   r   Ú_on_queue_feeder_error³  s    
ÿz\_TestQueue.test_queue_feeder_on_queue_feeder_error.<locals>.SafeQueue._on_queue_feeder_errorN)rG   rH   rI   Ústaticmethodr“  r   r’  r   r   Ú	SafeQueue±  s   r•  )ÚctxTr—   )rj   rk   rl   r‹  r   r   r   r  r   rŒ  Úget_contextrd   ro   r­   r¢   r  r  )r>   r•  Znot_serializable_objre   r   r’  r   Ú'test_queue_feeder_on_queue_feeder_error¡  s    



2z2_TestQueue.test_queue_feeder_on_queue_feeder_errorc              	   C   sŒ   t  ¡ t  ¡ fD ]v}| ¡  |  td¡ | d¡ W d   ƒ n1 sH0    Y  |  td¡ | ¡  W d   ƒ q1 s|0    Y  qd S )Nz	is closedÚfoo)r   r   r}  r   ÚassertRaisesRegexr7   rd   r­   rw  r   r   r   Ú$test_closed_queue_put_get_exceptionsÇ  s    (z/_TestQueue.test_closed_queue_put_get_exceptionsN)rG   rH   rI   r2  re  ro  rq  rt  ru  rv  rx  r{  r  r…  rˆ  r  r˜  r›  r   r   r   r   ra    s$   
;
	5

 &ra  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)ÚLockrW   ÚacquireÚreleaserã   r7   r°   ÚThreadError©r>   Úlockr   r   r   Ú	test_lockÔ  s
    z_TestLock.test_lockc                 C   s~   |   ¡ }|  | ¡ d¡ |  | ¡ d¡ |  | ¡ d¡ |  | ¡ d ¡ |  | ¡ d ¡ |  | ¡ d ¡ |  ttf|j¡ d S r‘  )ÚRLockrW   rž  rŸ  rã   r   r¾   r¡  r   r   r   Ú
test_rlockÛ  s    z_TestLock.test_rlockc                 C   s,   |   ¡  W d   ƒ n1 s0    Y  d S r   )r  r`   r   r   r   Útest_lock_contextå  s    
z_TestLock.test_lock_contextN)rG   rH   rI   r£  r¥  r¦  r   r   r   r   rœ  Ò  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 )Nr£   TrO   r   F)rZ   r^   rW   rž  rŸ  ©r>   Úsemr   r   r   Ú_test_semaphoreì  s    z_TestSemaphore._test_semaphorec                 C   sT   |   d¡}|  |¡ |  | ¡ d ¡ |  dt|¡ |  | ¡ d ¡ |  dt|¡ d S )Nr£   rU  rg  )Ú	Semaphorerª  rW   rŸ  rZ   r^   r¨  r   r   r   Útest_semaphoreù  s    

z_TestSemaphore.test_semaphorec                 C   s   |   d¡}|  |¡ d S ©Nr£   )ÚBoundedSemaphorerª  r¨  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 )NrK   ri   r   Fr'   Tr—   )rj   rk   rl   r«  r;   rž  rW   rU   r=   rl  rm  rn  )r>   r©  rž  r   r   r   rˆ  	  s    


z_TestSemaphore.test_timeoutN)rG   rH   rI   rª  r¬  r¯  rˆ  r   r   r   r   r§  ê  s   r§  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 r   )rž  rŸ  r&   )rƒ   ÚcondÚsleepingÚwokenr)   r   r   r   rI  "  s
    
z_TestCondition.fc              	   C   s`   t dƒD ]<}z|ƒ |krW  qFW n ty8   Y  qFY n0 t t¡ qt t¡ |  ||¡ d S ©NrÂ   )r×   rV   r@   r¡   rÔ   rZ   )r>   r<   rX   rÚ   r   r   r   ÚassertReachesEventually*  s    


z&_TestCondition.assertReachesEventuallyc                 C   sX   | j dkrTz6|j ¡ |j ¡  }|  |d¡ |  |j ¡ d¡ W n tyR   Y n0 d S )NrK   r   )rj   Ú_sleeping_countr^   Ú_woken_countrW   Ú_wait_semaphorerV   )r>   r±  Úsleepersr   r   r   Úcheck_invariant5  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   r†   TrO   r£   )Ú	Conditionr«  r}   rI  rq   r‹   rå   rŒ   r°   r  rž  r@   r¡   rÔ   rZ   r^   ÚnotifyrŸ  rº  )r>   r±  r²  r³  r   r   r   r   Útest_notify@  s6    





z_TestCondition.test_notifyc                    sª  |   ¡ }|  d¡}|  d¡‰ tdƒD ]h}| j| j||ˆ tfd}d|_| ¡  |  |j	¡ t
j| j||ˆ tfd}d|_| ¡  |  |j	¡ q$tdƒD ]}| ¡  q–tdƒD ]}ˆ  ¡  q¬|  dtˆ ¡ |  |¡ tdƒD ]d}| j| j||ˆ fd}d|_| ¡  |  |j	¡ t
j| j||ˆ fd}d|_| ¡  |  |j	¡ qÚtdƒD ]}| ¡  qHt t¡ |  dtˆ ¡ | ¡  | ¡  | ¡  |  ‡ fdd„d¡ |  |¡ d S )Nr   rU  r†   Trb  c                      s   t ˆ ƒS r   ©r^   r   ©r³  r   r   Ú<lambda>¦  r	  z0_TestCondition.test_notify_all.<locals>.<lambda>)r»  r«  r×   r}   rI  rl  rq   r‹   rå   rŒ   r°   r  rž  rZ   r^   rº  r@   r¡   rÔ   Ú
notify_allrŸ  rµ  ©r>   r±  r²  rÚ   r   rD   r   r¿  r   Útest_notify_allm  sP    


ÿ
ÿ



z_TestCondition.test_notify_allc                    sP  |   ¡ }|  d¡}|  d¡‰ tdƒD ]d}| j| j||ˆ fd}d|_| ¡  |  |j¡ t	j
| j||ˆ fd}d|_| ¡  |  |j¡ q$tdƒD ]}| ¡  q’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   rU  r†   Trb  r£   )Únc                      s   t ˆ ƒS r   r¾  r   r¿  r   r   rÀ  Ê  r	  z._TestCondition.test_notify_n.<locals>.<lambda>rg  c                      s   t ˆ ƒS r   r¾  r   r¿  r   r   rÀ  Ñ  r	  )r»  r«  r×   r}   rI  rq   r‹   rå   rŒ   r°   r  rž  r@   r¡   rÔ   rZ   r^   r¼  rŸ  rµ  rº  rÂ  r   r¿  r   Útest_notify_n«  s:    



z_TestCondition.test_notify_nc                 C   sH   |   ¡ }t|jƒ}| ¡  |tƒ}| ¡  |  |d¡ |  |jt¡ d S rŽ  )	r»  r;   r&   rž  rl  rŸ  rW   rU   r=   )r>   r±  r&   rY   r   r   r   rˆ  Ý  s    
z_TestCondition.test_timeoutc                    s`   |H dˆ _ | ¡  | ‡ fdd„¡}|r4ˆ j dkr>t d¡ W d   ƒ n1 sR0    Y  d S )Nr   c                      s
   ˆ j dkS ©Nrg  ©rX   r   ©Ústater   r   rÀ  ë  r	  z0_TestCondition._test_waitfor_f.<locals>.<lambda>rg  rO   )rX   r¼  Úwait_forrè   ré   )rƒ   r±  rÉ  rÜ   r   rÈ  r   Ú_test_waitfor_fæ  s    z_TestCondition._test_waitfor_fzneeds sharedctypesc              	      sð   |   ¡ }|  dd¡‰ | j| j|ˆ fd}d|_| ¡  |: | ‡ fdd„¡}|  |¡ |  ˆ j	d¡ W d   ƒ n1 sz0    Y  t
dƒD ]H}t d	¡ |& ˆ  j	d
7  _	| ¡  W d   ƒ qŒ1 sÊ0    Y  qŒt|ƒ |  |jd¡ d S )NrÚ   r3   r†   Tc                      s
   ˆ j dkS ©Nr   rÇ  r   rÈ  r   r   rÀ  ú  r	  z-_TestCondition.test_waitfor.<locals>.<lambda>r   rg  rô   rO   )r»  r   r}   rË  rq   r‹   rÊ  ro   rW   rX   r×   r@   r¡   r¼  r   rw   )r>   r±  r   rÜ   rÚ   r   rÈ  r   Útest_waitforï  s     
,
(z_TestCondition.test_waitforc                    sˆ   |  ¡  |h d}t ¡ }|j‡ fdd„|d}t ¡ | }|sf|d |  k r\|d k rfn nd|_W d   ƒ n1 sz0    Y  d S )Nr#   c                      s
   ˆ j dkS rÆ  rÇ  r   rÈ  r   r   rÀ    r	  z8_TestCondition._test_waitfor_timeout_f.<locals>.<lambda>r—   g333333ã?rß   T)rŸ  r@   rA   rÊ  rX   )rƒ   r±  rÉ  Úsuccessr©  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	j
d¡ tdƒD ]H}t d¡ |& | jd	7  _| ¡  W d   ƒ ql1 sª0    Y  qlt|ƒ |  |j¡ d S )
NrÚ   r   Fr†   Tr—   rU  rô   rO   )r»  r   r«  r}   rÐ  rq   r‹   ro   rž  r   rœ   r×   r@   r¡   rX   r¼  r   )r>   r±  rÉ  rÎ  r©  r   rÚ   r   r   r   Útest_waitfor_timeout  s"    

ÿ
(z#_TestCondition.test_waitfor_timeoutc                 C   sP   | |  ¡  W d   ƒ n1 s"0    Y  t d¡ |d urLt |tj¡ d S rN   )r¼  r@   r¡   r4   rÍ   rÄ   r/  )rƒ   rf   r‚   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 }|  ¡ }|| |  | d¡¡ |  | d¡¡ | j	| j
||fd}| ¡  |  | d¡¡ |d ur”|  t|jd¡ | ¡  W d   ƒ n1 s°0    Y  d S )Nr$   r   r#   r†   é<   )r   ÚProcessesMixinrè   rû   r4   rv   r»  r   r&   r}   rÒ  r‹   ro   rã   ÚKeyboardInterruptrŒ   )r>   r‚   rf   r   r   r   r   Útest_wait_result3  s    
z_TestCondition.test_wait_result)N)rG   rH   rI   r2  rI  rµ  rº  r½  rÃ  rÅ  rˆ  rË  r8   r3  ÚHAS_SHAREDCTYPESrÍ  rÐ  rÑ  rÒ  rÖ  r   r   r   r   r°     s&   ->2	






r°  c                   @   s    e Zd Zedd„ ƒZdd„ ZdS )Ú
_TestEventc                 C   s   t  t¡ | ¡  d S r   )r@   r¡   rm  ræ   rà   r   r   r   Ú_test_eventJ  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 )NFr'   Tr†   )r§   r;   r&   rW   r  rU   r=   rl  ræ   r  r}   rÙ  rq   r‹   rŒ   )r>   rá   r&   r   r   r   r   Ú
test_eventO  s&    
z_TestEvent.test_eventN)rG   rH   rI   r2  rÙ  rÚ  r   r   r   r   rØ  H  s   
rØ  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>   Úwrapperr¢  r   r   r   r?   }  s    z_DummyList.__init__c                 C   s"   |\| _ | _| j  ¡  d¡| _d S )NrÚ   )Ú_wrapperÚ_lockÚcreate_memoryviewÚcastrá  )r>   rÉ  r   r   r   rà  ƒ  s    z_DummyList.__setstate__c                 C   s   | j | jfS r   )rã  rä  r`   r   r   r   Ú__getstate__‡  s    z_DummyList.__getstate__c                 C   s<   | j " | jd  d7  < W d   ƒ n1 s.0    Y  d S ©Nr   rO   ©rä  rá  )r>   Ú_r   r   r   rÛ   Š  s    z_DummyList.appendc                 C   s4   | j  | jd W  d   ƒ S 1 s&0    Y  d S rÌ  ré  r`   r   r   r   Ú__len__Ž  s    z_DummyList.__len__N)rG   rH   rI   r?   rà  rç  rÛ   rë  r   r   r   r   rÛ  {  s
   rÛ  c                   C   s   t  d¡ d S )Nrô   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 }t	|ƒD ]*}|j
| jd}d|_| ¡  | |¡ qJdd„ }	t | |	|¡| _d S )Nrz   Tc                 S   s   | D ]}|  ¡  qd S r   )rŒ   )rM   r   r   r   r   Úfinalize±  s    z Bunch.__init__.<locals>.finalize)rI  rB   rÄ  Ú	DummyListÚstartedÚfinishedr§   Ú	_can_exitræ   r×   r}   Útaskrq   r‹   rÛ   rì   rî  Ú
_finalizer)
r>   Ú	namespacerI  rB   rÄ  Zwait_before_exitrM   rÚ   r   rî  r   r   r   r?   ›  s     



zBunch.__init__c              	   C   s\   t  ¡ }| j |¡ z(| j| jŽ  W | j |¡ | j d¡ n| j |¡ | j d¡ 0 d S )Né   )	r4   rv   rð  rÛ   rI  rB   rñ  rò  r&   ©r>   r‚   r   r   r   ró  ·  s    þz
Bunch.taskc                 C   s   t | jƒ| jk rtƒ  q d S r   )rt   rð  rÄ  rì  r`   r   r   r   Úwait_for_startedÁ  s    zBunch.wait_for_startedc                 C   s   t | jƒ| jk rtƒ  q d S r   )rt   rñ  rÄ  rì  r`   r   r   r   Úwait_for_finishedÅ  s    zBunch.wait_for_finishedc                 C   s   | j  ¡  d S r   )rò  ræ   r`   r   r   r   Ú	do_finishÉ  s    zBunch.do_finishc                 C   s   |   ¡  d S r   )rô  r`   r   r   r   r   Ì  s    zBunch.closeN)F)	rG   rH   rI   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 )Ú
AppendTruec                 C   s
   || _ d S r   )rz  )r>   rz  r   r   r   r?   Ñ  s    zAppendTrue.__init__c                 C   s   | j  d¡ d S r‘  )rz  rÛ   r`   r   r   r   rE   Ó  s    zAppendTrue.__call__NrF   r   r   r   r   rû  Ð  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Ú_TestBarrierrc   g      >@c                 C   s   | j | j| jd| _d S )Nr—   )ÚBarrierrý   ÚdefaultTimeoutÚbarrierr`   r   r   r   ÚsetUpÞ  s    z_TestBarrier.setUpc                 C   s   | j  ¡  d | _ d S r   )rÿ  Úabortr`   r   r   r   ÚtearDowná  s    
z_TestBarrier.tearDownc                 C   s,   | j dkrg S | j dkr"| j ¡ S tƒ S d S )NrM   rL   )rj   rL   r«   rÛ  r`   r   r   r   rï  å  s
    


z_TestBarrier.DummyListc                 C   s@   t | ||| jd ƒ}z||Ž  | ¡  W | ¡  n
| ¡  0 d S rN   )rí  rý   rù  r   )r>   rI  rB   rT   r   r   r   Úrun_threadsí  s
    
z_TestBarrier.run_threadsc                 C   s\   |j }t|ƒD ]0}|d  d¡ | ¡  |d  d¡ | ¡  qzW n tyV   Y n0 d S )Nr   TrO   )Úpartiesr×   rÛ   r&   rV   )rƒ   rÿ  ÚresultsrÄ  ÚmrÚ   r   r   r   Ú	multipassõ  s    
z_TestBarrier.multipassrO   c                 C   s*   |   ¡ |   ¡ g}|  | j| j||f¡ d S r   )rï  r  r  rÿ  )r>   Úpassesr  r   r   r   Útest_barrier  s    z_TestBarrier.test_barrierc                 C   s
   |   d¡S r´  )r	  r`   r   r   r   Útest_barrier_10  s    z_TestBarrier.test_barrier_10c                 C   s   |  ¡ }| |¡ d S r   )r&   rd   )rƒ   rÿ  r   rY   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   r  rõ   r   r   r   r÷     r	  z1_TestBarrier.test_wait_return.<locals>.<listcomp>r   rO   )	r   r  r  rÿ  r×   rý   rW   Úcountr   ©r>   r  r   r   r   Útest_wait_return  s
    z_TestBarrier.test_wait_returnc                 C   s   |  ¡  t|ƒdkrt‚d S rN   )r&   rt   r¾   )rƒ   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  rO   )rï  rý  rý   rû  r  r  rW   rt   )r>   r  rÿ  r   r   r   Útest_action(  s    z_TestBarrier.test_actionc                 C   sl   z0|  ¡ }|| jd krt‚|  ¡  | d¡ W n6 tjyN   | d¡ Y n tyf   | ¡  Y n0 d S ©Nr£   T)r&   rý   r¾   rÛ   r°   ÚBrokenBarrierErrorr  )rƒ   rÿ  Úresults1Úresults2rÚ   r   r   r   Ú_test_abort_f1  s    z_TestBarrier._test_abort_fc                 C   s^   |   ¡ }|   ¡ }|  | j| j||f¡ |  t|ƒd¡ |  t|ƒ| jd ¡ |  | jj¡ d S rè  )	rï  r  r  rÿ  rW   rt   rý   ro   Úbroken)r>   r  r  r   r   r   Ú
test_abort>  s    
ÿz_TestBarrier.test_abortc                 C   sˆ   |  ¡ }|| jd kr<|j| jd k r2t d¡ q| ¡  n6z|  ¡  | d¡ W n tjyp   | d¡ Y n0 |  ¡  | d¡ d S )Nr£   rO   rø   T)	r&   rý   Ú	n_waitingr@   r¡   ÚresetrÛ   r°   r  )rƒ   rÿ  r  r  Úresults3rÚ   r   r   r   Ú_test_reset_fJ  s    
z_TestBarrier._test_reset_fc                 C   sl   |   ¡ }|   ¡ }|   ¡ }|  | j| j|||f¡ |  t|ƒd¡ |  t|ƒ| jd ¡ |  t|ƒ| j¡ d S rè  )rï  r  r  rÿ  rW   rt   rý   )r>   r  r  r  r   r   r   Ú
test_reset\  s    ÿz_TestBarrier.test_resetc                 C   s    z0|  ¡ }|| jd krt‚|  ¡  | d¡ W n6 tjyN   | d¡ Y n tyf   | ¡  Y n0 |  ¡ | jd kr‚| ¡  |  ¡  |  ¡  | d¡ d S r  )r&   rý   r¾   rÛ   r°   r  r  r  )rƒ   rÿ  Úbarrier2r  r  r  rÚ   r   r   r   Ú_test_abort_and_reset_fi  s    z$_TestBarrier._test_abort_and_reset_fc                 C   sz   |   ¡ }|   ¡ }|   ¡ }|  | j¡}|  | j| j||||f¡ |  t|ƒd¡ |  t|ƒ| jd ¡ |  t|ƒ| j¡ d S rè  )rï  rý  rý   r  r  rÿ  rW   rt   )r>   r  r  r  r  r   r   r   Útest_abort_and_reset  s    ÿz!_TestBarrier.test_abort_and_resetc                 C   sR   |  ¡ }|| jd kr t d¡ z|  d¡ W n tjyL   | d¡ Y n0 d S )Nr£   ç      ð?r  T)r&   rý   r@   r¡   r°   r  rÛ   ©rƒ   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 r   )rï  r  r"  rÿ  rW   rt   r  r  r   r   r   rˆ  ™  s    z_TestBarrier.test_timeoutc                 C   sT   |  | j¡}|| jd kr$t d¡ z|  ¡  W n tjyN   | d¡ Y n0 d S )Nr£   r   T)r&   rþ  rý   r@   r¡   r°   r  rÛ   r!  r   r   r   Ú_test_default_timeout_f¡  s    
z$_TestBarrier._test_default_timeout_fc                 C   s@   | j | jdd}|  ¡ }|  | j||f¡ |  t|ƒ|j¡ d S )Nr  r—   )rý  rý   rï  r  r#  rW   rt   r  )r>   rÿ  r  r   r   r   Útest_default_timeout¬  s    z!_TestBarrier.test_default_timeoutc                 C   s   |   d¡}| ¡  | ¡  d S rN   )rý  r&   )r>   rT   r   r   r   Útest_single_threadµ  s    
z_TestBarrier.test_single_threadc              	   C   sH   t |ƒD ]:}| ¡  | | |¡ W d   ƒ q1 s80    Y  qd S r   )r×   r&   r•   )rƒ   rÿ  r  Úconnr¢  rÚ   r   r   r   Ú_test_thousand_fº  s    z_TestBarrier._test_thousand_fc                 C   s¦   | j dkr|  d | j ¡¡ d}|  ¡ }|  d¡\}}t| jƒD ]2}| j| j| j	|||fd}| 
¡  |  |j¡ q@t|ƒD ]$}t| jƒD ]}|  | ¡ |¡ qŠq|d S )NrL   ri   éè  Fr†   )rj   rk   rl   r  r‰   r×   rý   r}   r'  rÿ  r‹   rå   rŒ   rW   r   )r>   r  r¢  r&  r6  Újr   rÚ   r   r   r   Útest_thousandÁ  s    
ÿz_TestBarrier.test_thousandN)rO   )rG   rH   rI   rý   rþ  r   r  rï  r  r2  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ü  ×  sF   




	






	
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 )Ú
_TestValuer?  )rÚ   i÷  iª^  )Údg      @g      À)Úhiÿÿÿéê   )re   ì        ì        rf   ÚxÚyc                 C   s   t s|  d¡ d S ©Nz%requires multiprocessing.sharedctypes©r×  rk   r`   r   r   r   r   á  s    z_TestValue.setUpc                 C   s$   t || jƒD ]\}}|d |_qd S r­  )ÚzipÚcodes_valuesrX   )rƒ   ÚvaluesÚsvÚcvr   r   r   r~   å  s    z_TestValue._testFc                    sª   |r‡ fdd„ˆ j D ƒ}n‡ fdd„ˆ j D ƒ}t|ˆ j ƒD ]\}}ˆ  |j|d ¡ q:ˆ jˆ j|fd}d|_| ¡  | ¡  t|ˆ j ƒD ]\}}ˆ  |j|d ¡ qŠd S )Nc                    s   g | ]\}}}ˆ   ||¡‘qS r   )ÚRawValue©rö   ÚcoderX   rê  r`   r   r   r÷   í  s   ÿz)_TestValue.test_value.<locals>.<listcomp>c                    s   g | ]\}}}ˆ   ||¡‘qS r   )r   r;  r`   r   r   r÷   ð  s   ÿrO   r†   Tr£   )	r6  r5  rW   rX   r}   r~   rq   r‹   rŒ   )r>   Úrawr7  r8  r9  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Ú   rc   ©r¢  FÚget_lockÚget_objZnavalue)
r   rB  rC  r  rW   r   rÃ   rã   r6   r:  )r>   Zval1Úlock1Úobj1Zval2Úlock2Úobj2r¢  Zval3Úlock3Úobj3Úarr4Úarr5r   r   r   Útest_getobj_getlock  s$    z_TestValue.test_getobj_getlockN)F)rG   rH   rI   r\   r   r6  r   r2  r~   r>  r@  rL  r   r   r   r   r+  Õ  s   û

r+  c                   @   s~   e Zd ZdZedd„ ƒZe edu d¡ddd„ƒZ	e edu d¡d	d
„ ƒZ
e edu d¡dd„ ƒZe edu d¡dd„ ƒZdS )Ú
_TestArrayr?  c                 C   s0   t dt|ƒƒD ]}||  ||d  7  < qd S rN   )r×   rt   )rƒ   ÚseqrÚ   r   r   r   rI    s    z_TestArray.fNzrequires _ctypesFc                 C   sü   g d¢}|r|   d|¡}n|  d|¡}|  t|ƒt|ƒ¡ |  |d |d ¡ |  t|dd… ƒt|dd… ƒ¡ t dg d¢¡ |dd…< |dd…< |  t|d d … ƒ|¡ |  |¡ | j| j|fd	}d
|_| 	¡  | 
¡  |  t|d d … ƒ|¡ d S )N)
i¨  ir  i¦  i5  é–   éé   i$  iÖ  iÊ  i?  rÚ   rU  r£   rh  )rO   r£   rU  rg  rg  rV  r†   T)ÚRawArrayÚArrayrW   rt   r«   ÚarrayrI  r}   rq   r‹   rŒ   )r>   r=  rN  Úarrr   r   r   r   Ú
test_array$  s    $$
z_TestArray.test_arrayc                 C   sr   d}t dƒD ]`}|  d|¡}|  t|ƒ|¡ |  t|ƒdg| ¡ t dƒ|d d …< |  t|ƒtt dƒƒ¡ ~qd S )NrÂ   rU  rÚ   r   )r×   rR  rW   rt   r«   )r>   Úsizerê  rT  r   r   r   Útest_array_from_size=  s    z_TestArray.test_array_from_sizec                 C   s   | j dd d S r?  )rU  r`   r   r   r   Útest_rawarrayL  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Â   rA  FrB  rC  Znotalock)rR  r«   r×   rB  rC  r  rW   r   rÃ   rã   r6   rQ  )r>   Zarr1rD  rE  Zarr2rF  rG  r¢  Zarr3rH  rI  rJ  rK  r   r   r   Útest_getobj_getlock_objP  s(    ÿz"_TestArray.test_getobj_getlock_obj)F)rG   rH   rI   r\   r2  rI  r8   ÚskipIfr/   rU  rW  rX  rY  r   r   r   r   rM    s   


rM  c                   @   sP   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d„ ZdS )Ú_TestContainers©rL   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… g d¢¡ |d9 }|  |d d … g d¢¡ |  |ddg g d¢¡ |  |d d … t tdƒƒ¡ ||g}|   |¡}|  dd	„ |D ƒg d
¢g d¢g¡ |   |g¡}| d¡ |  |d d d … g d¢¡ d S )NrÂ   rc   r£   )r£   rU  rg  )
r   rO   r£   rU  rg  r   rO   r£   rU  rg  rb  )r   rO   r£   rU  rg  r   rO   r£   rU  rg  rc   rb  c                 S   s   g | ]}|d d … ‘qS r   r   )rö   Úelementr   r   r   r÷   ‰  r	  z-_TestContainers.test_list.<locals>.<listcomp>)
r   rO   r£   rU  rg  rc   rb  rh  rV  é	   r¥   r   )r   rO   r£   rU  rg  rc   rb  rh  rV  r^  r¥   )r«   r×   rW   ÚextendrÛ   )r>   rS   rT   r,  r®   rI  r   r   r   Ú	test_listr  s*    
þ
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   )r«   r×   r8  rW   Únext)r>   rS   Úitr   r   r   Útest_list_iter‘  s    z_TestContainers.test_list_iterc                    sø   ˆ   ‡ fdd„tdƒD ƒ¡}ˆ  dd„ |D ƒg d¢gd ¡ d|d d< ˆ  |d d d … g d	¢¡ td
dƒD ] }ˆ  || d d … g d¢¡ qnˆ  |d
  ¡ d¡ ˆ  t|d
 ƒd¡ tdddƒD ]}ˆ  t|| ƒd¡ qÄ~ˆ   ¡ }| |¡ ~d S )Nc                    s   g | ]}ˆ   td ƒ¡‘qS )rU  )r«   r×   )rö   Z_ir`   r   r   r÷   œ  r	  z;_TestContainers.test_list_proxy_in_list.<locals>.<listcomp>rU  c                 S   s   g | ]}|d d … ‘qS r   r   )rö   Úinnerr   r   r   r÷     r	  )r   rO   r£   é7   r   r3   )r   rO   re  rO   r£   )r«   r×   rW   Úpoprt   rÛ   )r>   rS   rÚ   rT   r   r`   r   Útest_list_proxy_in_list›  s     
z'_TestContainers.test_list_proxy_in_listc                 C   sž   |   ¡ }ttddƒƒ}|D ]}t|ƒ||< q|  | ¡ 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 r   ©Úchrrõ   r   r   r   Ú	<genexpr>´  r	  z,_TestContainers.test_dict.<locals>.<genexpr>c                 S   s   g | ]}t |ƒ‘qS r   rj  rõ   r   r   r   r÷   ¶  r	  z-_TestContainers.test_dict.<locals>.<listcomp>c                 S   s   g | ]}|t |ƒf‘qS r   rj  rõ   r   r   r   r÷   ·  r	  )
Údictr«   r×   rk  rW   r	   ÚsortedÚkeysr7  r  )r>   r,  ÚindicesrÚ   r   r   r   Ú	test_dict¯  s    z_TestContainers.test_dictc                 C   sv   |   ¡ }ttddƒƒ}|D ]}t|ƒ||< qt|ƒ}|  t|ƒ|¡ |  t|ƒg ¡ t|ƒ}| ¡  |  tt	|¡ d S )Nrh  ri  )
rm  r«   r×   rk  r8  rW   r  rã   r¾   ra  )r>   r,  rp  rÚ   rb  r   r   r   Útest_dict_iter¹  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 )Nr£   rg  )ÚferretsÚhamstersrÂ   rU  )ÚwaterÚfeed)ÚpetsÚsuppliesru  rx  rc   Zblanketsrh  rw  rs  é   r   rt  rO   ZmarmotséX   éc   r3   rv  )rm  rW   r  rt   r«   rr   )r>   rw  rx  r,  ÚlZouterr   r   r   Útest_dict_proxy_nestedÆ  sF    z&_TestContainers.test_dict_proxy_nestedc                 C   sr   |   ¡ }| |  ¡ ¡ |d  d¡ |  |d  ¡ d¡ |  ¡ }|  ¡ |d< |d  d¡ |  |d  ¡ d¡ d S )Nr   é{   éÈ  )r«   rÛ   r   rd   rW   r­   rm  rR   r   r   r   Útest_nested_queueô  s    z!_TestContainers.test_nested_queuec                 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')r    Újob)Ú	Namespacer    rƒ  Z_hiddenrW   rX  ro   rÃ   )r>   rÄ  r   r   r   Útest_namespaceþ  s    z_TestContainers.test_namespaceN)rG   rH   rI   r\   r`  rc  rg  rq  rr  r}  r€  r…  r   r   r   r   r[  n  s   

.
r[  r'   c                 C   s   t  |¡ | |  S r   r·   )r1  r&   r   r   r   Úsqr	  s    
r†  c                 C   s   | | S r   r   )r1  r2  r   r   r   Úmul	  s    r‡  c                 C   s   t  | ¡ tdd ƒ‚d S )Nr1  i   )r@   r¡   r7   r%   r   r   r   Úraise_large_valuerror	  s    
rˆ  c                 C   s   | S r   r   ©r1  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 rN   )Ún_instancesr‹  Ú__new__r¸   r   r   r   r  	  s    zCountedObject.__new__c                 C   s   t | ƒ jd8  _d S rN   )rª   rŒ  r`   r   r   r   Ú__del__"	  s    zCountedObject.__del__N)rG   rH   rI   rŒ  r  rŽ  r   r   r   r   r‹  	  s   r‹  c                   @   s   e Zd ZdS )ÚSayWhenErrorN©rG   rH   rI   r   r   r   r   r  %	  r	  r  c                 c   s8   |dkrt dƒ‚t| ƒD ]}||kr,t dƒ‚|V  qd S )Nr3   zSomebody said when)r  r×   )Ú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d7d8„ Zd9d:„ Z ‡  Z!S );Ú	_TestPoolc                    s   t ƒ  ¡  |  d¡| _d S rÆ  )ÚsuperÚ
setUpClassÚPoolÚpoolr¸   ©Ú	__class__r   r   r•  2	  s    
z_TestPool.setUpClassc                    s(   | j  ¡  | j  ¡  d | _ tƒ  ¡  d S r   )r—  rž   rŒ   r”  ÚtearDownClassr¸   r˜  r   r   rš  7	  s    

z_TestPool.tearDownClassc                 C   s@   | j j}|  |tdƒtdƒ¡ |  |tdddiƒtdd¡ d S )N)rc   rc   r   r1  rU  r‰  )r—  ÚapplyrW   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—  ÚmaprW   r†  r«   r×   )r>   Zpmapr   r   r   Útest_mapC	  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^  r3   r¶   r{  r  r  )r—  Ústarmapr«   r5  r×   rW   r‡  Ú	itertools)r>   ZpsmapÚtuplesr   r   r   Útest_starmapI	  s    ÿÿz_TestPool.test_starmapc                 C   sD   t ttdƒtdddƒƒƒ}|  | j t|¡ ¡ t t 	t|¡ƒ¡ d S )Nr¶   r{  r3   )
r«   r5  r×   rW   r—  Zstarmap_asyncr‡  r­   r¢  r¡  )r>   r£  r   r   r   Útest_starmap_asyncR	  s    ÿz_TestPool.test_starmap_asyncc              	   C   s8   |   | j tttdƒƒ¡ ¡ tttttdƒƒƒƒ¡ d S r´  )rW   r—  Ú	map_asyncr†  r«   r×   r­   rŸ  r`   r   r   r   Útest_map_asyncW	  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 )NrL   Ú1)ÚcallbackÚerror_callbackrO   r   rS   r£   )rj   rL   r«   r—  r¦  rÑ   rÛ   r&   rW   rt   rr   r7   )r>   Z	call_argsr   r   r   Útest_map_async_callbacks[	  s    þ
þ
z"_TestPool.test_map_async_callbacksc                 C   sp   | j dkr|  d | j ¡¡ G dd„ dtƒ}|  t¡& | j t|ƒ gd ¡ W d   ƒ n1 sb0    Y  d S )NrM   ri   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 pickler½   r`   r   r   r   r[   m	  s    z5_TestPool.test_map_unplicklable.<locals>.A.__reduce__Nr‰  r   r   r   r   ÚAl	  s   r¬  rÂ   )	rj   rk   rl   r‹  rã   r¾   r—  rŸ  r†  )r>   r¬  r   r   r   Útest_map_unplicklableh	  s
    
z_TestPool.test_map_unplicklablec                 C   sB   z| j jtg ddjtd W n tjy<   |  d¡ Y n0 d S )NrO   r  r—   z2pool.map_async with chunksize stalled on null list)r—  r¦  r†  r­   rl  r   ÚTimeoutErrorrƒ  r`   r   r   r   Útest_map_chunksizer	  s    z_TestPool.test_map_chunksizec                 C   sj  | j dkr|  d | j ¡¡ |  t¡& | j ttddƒd¡ W d   ƒ n1 sR0    Y  |  t¡& | j ttddƒd¡ W d   ƒ n1 s’0    Y  |  t¡& | j ttddƒd¡ W d   ƒ n1 sÒ0    Y  G dd„ dƒ}|  t¡" | j t|ƒ d¡ W d   ƒ n1 s0    Y  |  t¡" | j t|ƒ d¡ W d   ƒ n1 s\0    Y  d S )	NrL   ri   rO   r3   rÂ   rU  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 r   r   r`   r   r   r   Ú__iter__‡	  s    zN_TestPool.test_map_handle_iterable_exception.<locals>.SpecialIterable.__iter__c                 S   s   t ‚d S r   )r  r`   r   r   r   Ú__next__‰	  s    zN_TestPool.test_map_handle_iterable_exception.<locals>.SpecialIterable.__next__c                 S   s   dS rN   r   r`   r   r   r   rë  ‹	  s    zM_TestPool.test_map_handle_iterable_exception.<locals>.SpecialIterable.__len__N)rG   rH   rI   r°  r±  rë  r   r   r   r   ÚSpecialIterable†	  s   r²  )	rj   rk   rl   rã   r  r—  rŸ  r†  r’  )r>   r²  r   r   r   Ú"test_map_handle_iterable_exceptionx	  s    
4442z,_TestPool.test_map_handle_iterable_exceptionc                 C   s<   | j  tdtf¡}t|jƒ}|  |ƒ d¡ |  |jt¡ d S )Nrh  é1   )	r—  Úapply_asyncr†  rl  r;   r­   rW   rU   r=   ©r>   rY   r­   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 )Nrb  r   r—   )r—  rµ  r†  rm  r;   r­   rã   r   r®  rU   r=   r¶  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ƒƒ¡}tdƒD ]}|  t|ƒ|| ¡ qV|  t	|j
¡ | j jtttdƒƒdd}tdƒD ]}|  t|ƒ|| ¡ q |  t	|j
¡ d S ©NrÂ   r(  r¶   r  )r—  Úimapr†  r«   r×   rW   rŸ  ra  rã   ÚStopIterationr±  ©r>   rb  rÚ   r   r   r   Ú	test_imapž	  s    "z_TestPool.test_imapc                 C   s<  | 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
dƒD ]}|  t|ƒ|| ¡ q‚|  t|j	¡ | j ttddƒd	¡}t
d
ƒD ]}|  t|ƒ|| ¡ qÈ|  t|j	¡ | j ttddƒd¡}t
dƒD ]}|  t|ƒ|| ¡ q|  t|j	¡ d S )NrL   ri   rO   r3   rÂ   rU  r  rh  r£   rb  rg  )rj   rk   rl   r—  rº  r†  r’  rã   r  r±  r×   rW   ra  r¼  r   r   r   Ú#test_imap_handle_iterable_exception¬	  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 r¹  )r—  Úimap_unorderedr†  r«   r×   rW   rn  rŸ  )r>   rb  r   r   r   Útest_imap_unorderedÆ	  s    "z_TestPool.test_imap_unorderedc                 C   sp  | 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¡< tdƒD ]"}t|ƒ}|  ||¡ | |¡ q¤W d   ƒ n1 sÜ0    Y  | j ttddƒd	¡}t
ttt
tdƒƒƒƒ}|  t¡> tdƒD ]$}t|ƒ}|  ||¡ | |¡ q&W d   ƒ n1 sb0    Y  d S )
NrL   ri   rO   r3   rÂ   rU  r  rh  r£   )rj   rk   rl   r—  r¿  r†  r’  rã   r  r±  r«   rŸ  r×   ra  r¬   r%  )r>   rb  Zexpected_valuesrÚ   rX   r   r   r   Ú-test_imap_unordered_handle_iterable_exceptionÍ	  s@    
þþþ*þz7_TestPool.test_imap_unordered_handle_iterable_exceptionc                 C   s„   | j dkrtnt}|  || jd¡ |  || jd¡ | j dkr€|  d¡}z&|  dt|jƒ¡ W | ¡  | 	¡  n| ¡  | 	¡  0 d S )NrL   r3   r   rU  )
rj   ÚRemoteErrorr7   rã   r–  rW   rt   Ú_poolr   rŒ   )r>   Zexpected_errorr   r   r   r   Útest_make_poolñ	  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 )r#   r   rõ   r   r   r   r÷   
  r	  z,_TestPool.test_terminate.<locals>.<listcomp>i'  rO   r  r*  )
r—  r¦  r@   r¡   r×   rž   r;   rŒ   Ú
assertLessr=   )r>   rÜ   rŒ   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 rN   )r–  rW   rŸ  r†  r«   rº  r¿  r¦  r­   r   rŒ   rÕ   r   r   r   Útest_empty_iterable

  s    
z_TestPool.test_empty_iterablec                 C   sˆ   | j dkr„ttdƒƒ}dd„ |D ƒ}|  d¡,}| t|¡}|  | ¡ |¡ W d   ƒ n1 s`0    Y  | ¡  |  	t
|jt|¡ d S )NrK   rÂ   c                 S   s   g | ]}t |ƒ‘qS r   )r†  rõ   r   r   r   r÷   
  r	  z*_TestPool.test_context.<locals>.<listcomp>r£   )rj   r«   r×   r–  r¦  r†  rW   r­   rŒ   rã   r7   )r>   ÚLrÝ   r   rA  r   r   r   Útest_context
  s    
.z_TestPool.test_contextc                 C   s   t dƒ‚d S )Nr~  r½   r¸   r   r   r   Ú_test_traceback 
  s    z_TestPool._test_tracebackc                 C   sÒ  | j dkrÎ|  d¡T}z| | j¡ W n( tyP } z|}W Y d }~nd }~0 0 |  d¡ W d   ƒ n1 sp0    Y  | ¡  |  t|ƒt	¡ |  
|jd¡ |j}|  t|ƒtjj¡ |  d|j¡ tj ¡ :}z|‚W n  t	yü   tjt ¡ Ž  Y n0 W d   ƒ n1 s0    Y  |  d| ¡ ¡ |  d¡|}z| ttddƒd¡ W n* ty| } z|}W Y d }~nd }~0 0 |  d¡ |  t|ƒt¡ |  |jd ¡ W d   ƒ n1 s¼0    Y  | ¡  d S )NrK   rO   zexpected RuntimeError)r~  z&raise RuntimeError(123) # some commentr3   zexpected SayWhenError)rj   r–  r›  rÉ  Ú	Exceptionrƒ  rŒ   rð   rª   r¾   rW   rB   Ú	__cause__r   r—  ZRemoteTracebackr¬   Útbr  r   rŒ  rè   Ú
excepthookÚexc_infoÚgetvaluerŸ  r†  r’  r  )r>   r   r®   ÚexcÚcauseÚf1r   r   r   Útest_traceback$
  s<    (4ÿ
.z_TestPool.test_tracebackc                 C   s   t dƒ‚d S )Nr™  r½   r¸   r   r   r   Ú_test_wrapped_exceptionJ
  s    z!_TestPool._test_wrapped_exceptionc              	   C   sl   |   d¡F}|  t¡ | | j¡ W d   ƒ n1 s80    Y  W d   ƒ n1 sV0    Y  | ¡  d S rN   )r–  rã   r¾   r›  rÔ  rŒ   rÕ   r   r   r   Útest_wrapped_exceptionN
  s    Hz _TestPool.test_wrapped_exceptionc                 C   sÀ   t  ¡ }|  t¡† |  d¡\}z.| tddg¡ W t  d¡ | ¡  | 	¡  nt  d¡ | ¡  | 	¡  0 W d   ƒ n1 s€0    Y  W d   ƒ n1 sž0    Y  |  
t  ¡ | d¡ d S )Nr£   r   rO   r  gÍÌÌÌÌÌì?)r@   rA   rã   r7   r–  rŸ  rˆ  r¡   r   rŒ   ÚassertGreater)r>   Zt_startr   r   r   r   Útest_map_no_failfastU
  s    

þ
Fz_TestPool.test_map_no_failfastc                 C   sp   dd„ t dƒD ƒ}dd„ |D ƒ}| j t|¡ ~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÷   l
  r	  z4_TestPool.test_release_task_refs.<locals>.<listcomp>rÂ   c                 S   s   g | ]}t  |¡‘qS r   )rì   rí   )rö   Úor   r   r   r÷   m
  r	  c                 s   s   | ]}|ƒ V  qd S r   r   )rö   rñ   r   r   r   rl  s
  r	  z3_TestPool.test_release_task_refs.<locals>.<genexpr>r   )r×   r—  rŸ  rŠ  rî   rï   r@   r¡   rÔ   rW   ræ   r‹  rŒ  )r>   ZobjsZrefsr   r   r   Útest_release_task_refsi
  s    
z _TestPool.test_release_task_refsc              	   C   sœ   | j dkr|  d¡ |  d¡}| W d   ƒ n1 s80    Y  |  t¡4 | W d   ƒ n1 sh0    Y  W d   ƒ n1 s†0    Y  | ¡  d S )NrL   útest not applicable to managerrO   )rj   rk   r–  rã   r7   rŒ   ©r>   r—  r   r   r   Ú
test_enterx
  s    


<z_TestPool.test_enterc                 C   sv   | j dkr|  d¡ |  d¡}| ¡  | ¡  tjj|_t	 
dtf¡ d }t	 ¡  W d   ƒ n1 sh0    Y  d S )NrL   rÚ  rO   z%unclosed running multiprocessing pool)rj   rk   r–  rž   rŒ   r   r—  ZRUNÚ_stater   Zcheck_warningsÚResourceWarningÚ
gc_collectrÛ  r   r   r   Útest_resource_warningˆ
  s    



ÿz_TestPool.test_resource_warning)"rG   rH   rI   r2  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à  Ú__classcell__r   r   r˜  r   r“  0	  sB   	
$


&
r“  c                   C   s   t dƒ‚d S )NÚkey)ÚKeyErrorr   r   r   r   Úraising˜
  s    rä  c                   C   s   dd„ S )Nc                   S   s   dS )Né*   r   r   r   r   r   rÀ  œ
  r	  z%unpickleable_result.<locals>.<lambda>r   r   r   r   r   Úunpickleable_result›
  s    ræ  c                   @   s    e Zd ZdZdd„ Zdd„ ZdS )Ú_TestPoolWorkerErrorsr?  c                    sj   t  d¡}d g‰ ‡ fdd„}|jt|d}|  t|j¡ |  ˆ d ¡ |  ˆ d t¡ | 	¡  | 
¡  d S )Nr£   c                    s   | ˆ d< d S rÌ  r   ©rÐ  ©Z
scratchpadr   r   Úerrback¥
  s    z@_TestPoolWorkerErrors.test_async_error_callback.<locals>.errback©rª  r   )r   r–  rµ  rä  rã   rã  r­   ro   rr   r   rŒ   )r>   r   rê  rY   r   ré  r   Útest_async_error_callback¡
  s    
z/_TestPoolWorkerErrors.test_async_error_callbackc                    s    ddl m} t d¡}tdƒD ]l}d g‰ ‡ fdd„}|jt|d}|  ||j¡ ˆ d }|  	|¡ |  
ˆ d |¡ |  |j¡ |  |j¡ q| ¡  | ¡  d S )Nr   )ÚMaybeEncodingErrorr£   r  c                    s   | ˆ d< d S rÌ  r   rè  ré  r   r   rê  ¸
  s    z?_TestPoolWorkerErrors.test_unpickleable_result.<locals>.errbackrë  )Úmultiprocessing.poolrí  r   r–  r×   rµ  ræ  rã   r­   ro   rr   ZassertIsNotNonerÐ  rX   r   rŒ   )r>   rí  r   Z	iterationrê  rY   Úwrappedr   ré  r   Útest_unpickleable_result°
  s    

z._TestPoolWorkerErrors.test_unpickleable_resultN)rG   rH   rI   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d„ ZdS )	Ú_TestPoolWorkerLifetimer?  c           	      C   s  t jddd}|  dt|jƒ¡ dd„ |jD ƒ}g }tdƒD ]}| | t|f¡¡ q<t	|ƒD ]\}}|  | 
¡ t|ƒ¡ q^| ¡  d}|r´tdd	„ |jD ƒƒs´|d
8 }t t¡ qˆdd„ |jD ƒ}|  d |¡ |  d |¡ |  t|ƒt|ƒ¡ | ¡  | ¡  d S )NrU  rÂ   ©Úmaxtasksperchildc                 S   s   g | ]
}|j ‘qS r   ©r‚   ©rö   rL  r   r   r   r÷   Ì
  r	  zE_TestPoolWorkerLifetime.test_pool_worker_lifetime.<locals>.<listcomp>r¶   é2   c                 s   s   | ]}|  ¡ V  qd S r   ©rp   rõ  r   r   r   rl  Ú
  r	  zD_TestPoolWorkerLifetime.test_pool_worker_lifetime.<locals>.<genexpr>rO   c                 S   s   g | ]
}|j ‘qS r   rô  rõ  r   r   r   r÷   Ý
  r	  )r   r–  rW   rt   rÃ  r×   rÛ   rµ  r†  Ú	enumerater­   Z_repopulate_poolÚallr@   r¡   rÔ   r¨   r´   rn  r   rŒ   )	r>   r   Zorigworkerpidsr  rÚ   r)  rY   Z	countdownZfinalworkerpidsr   r   r   Útest_pool_worker_lifetimeÉ
  s&    z1_TestPoolWorkerLifetime.test_pool_worker_lifetimec                 C   sp   t jddd}g }tdƒD ]}| | t|df¡¡ q| ¡  | ¡  t|ƒD ]\}}|  	| 
¡ t|ƒ¡ qNd S )NrU  rO   rò  rb  g333333Ó?)r   r–  r×   rÛ   rµ  r†  r   rŒ   rø  rW   r­   )r>   r   r  rÚ   r)  rY   r   r   r   Ú%test_pool_worker_lifetime_early_closeæ
  s    z=_TestPoolWorkerLifetime.test_pool_worker_lifetime_early_closec                 C   s*   d}t jj d|¡\}}}|  |d¡ d S )NaŽ  if 1:
            from multiprocessing import Pool
            problem = None
            class A:
                def __init__(self):
                    self.pool = Pool(processes=1)
            def test():
                global problem
                problem = A()
                problem.pool.map(float, tuple(range(10)))
            if __name__ == "__main__":
                test()
        ú-cr   )r  r   Úscript_helperÚassert_python_okrW   ©r>   Úcmdrê   ÚoutrJ  r   r   r   Ú>test_worker_finalization_via_atexit_handler_of_multiprocessingó
  s    zV_TestPoolWorkerLifetime.test_worker_finalization_via_atexit_handler_of_multiprocessingN)rG   rH   rI   r\   rú  rû  r  r   r   r   r   rñ  Æ
  s   rñ  )ÚBaseManagerÚ	BaseProxyrÂ  c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚFooBarc                 C   s   dS )Núf()r   r`   r   r   r   rI    s    zFooBar.fc                 C   s   t ‚d S r   )r7   r`   r   r   r   Úg  s    zFooBar.gc                 C   s   dS )Nú_h()r   r`   r   r   r   Ú_h  s    z	FooBar._hN)rG   rH   rI   rI  r  r	  r   r   r   r   r    s   r  c                  c   s   t dƒD ]} | |  V  qd S r´  )r×   )rÚ   r   r   r   Úbaz  s    r
  c                   @   s    e Zd ZdZdd„ Zdd„ ZdS )ÚIteratorProxy)r±  c                 C   s   | S r   r   r`   r   r   r   r°    s    zIteratorProxy.__iter__c                 C   s
   |   d¡S )Nr±  )Ú_callmethodr`   r   r   r   r±    s    zIteratorProxy.__next__N)rG   rH   rI   Z	_exposed_r°  r±  r   r   r   r   r    s   r  c                   @   s   e Zd ZdS )Ú	MyManagerNr  r   r   r   r   r    s   r  ÚFoo)ÚcallableÚBar)rI  r	  )r  Zexposed)r  Z	proxytypec                   @   s0   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
S )Ú_TestMyManagerr\  c                 C   s<   t ƒ }| ¡  |  |¡ | ¡  |  |jjdtj f¡ d S rÌ  )	r  r‹   ÚcommonÚshutdownr¬   Ú_processrw   rÄ   rÊ   ©r>   rL   r   r   r   Útest_mymanager*  s
    
z_TestMyManager.test_mymanagerc                 C   sL   t ƒ }|  |¡ W d   ƒ n1 s&0    Y  |  |jjdtj f¡ d S rÌ  )r  r  r¬   r  rw   rÄ   rÊ   r  r   r   r   Útest_mymanager_context5  s    (z%_TestMyManager.test_mymanager_contextc                 C   sP   t ƒ }| ¡  | |  |¡ W d   ƒ n1 s20    Y  |  |jjd¡ d S rÌ  )r  r‹   r  rW   r  rw   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ö   r    )r™  r   r   r÷   I  r	  z)_TestMyManager.common.<locals>.<listcomp>)rI  r  r	  c                    s   g | ]}t ˆ |ƒr|‘qS r   r  r  )Úbarr   r   r÷   J  r	  rI  r  r	  r  r  c                 S   s   g | ]}|| ‘qS r   r   rõ   r   r   r   r÷   Y  r	  rÂ   )r  r  r
  rW   rI  rã   r7   r  r  rÂ  r	  r«   r×   )r>   rL   r
  Zfoo_methodsZbar_methodsr   )r  r™  r   r  D  s     z_TestMyManager.commonN)rG   rH   rI   r\   r  r  r  r  r   r   r   r   r  &  s
   r  c                   C   s   t S r   )Ú_queuer   r   r   r   Ú	get_queuea  s    r  c                   @   s   e Zd ZdS )ÚQueueManagerNr  r   r   r   r   r  d  s   r  c                   @   s   e Zd ZdS )ÚQueueManager2Nr  r   r   r   r   r  h  s   r  Ú	xmlrpclibc                   @   s8   e Zd ZdZg d¢Zedd… Zedd„ ƒZdd„ ZdS )Ú_TestRemoteManagerr\  )úhello worldNTç      @u   hallÃ¥ vÃ¤rldenu   Ð¿Ñ€Ð¸Ð²Ñ–Ñ‚ ÑÐ²Ñ–Ñ‚s   hallå världenNc                 C   s2   t ||td}| ¡  | ¡ }| t| jƒ¡ d S )N©r   rn   Z
serializer)r  Ú
SERIALIZERÚconnectr  rd   Útupler7  ©rƒ   r   rn   rL   r   r   r   r   Ú_puttery  s    ÿz_TestRemoteManager._putterc                 C   s    t  d¡}tt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$  r†   T)r4   Úurandomr  r   ÚHOSTr%  r‹   rå   r  r}   r)  r   rq   r  r&  r  rW   r­   rÜ   rã   rÊ  rd   r@   r¡   )r>   rn   rL   r   Zmanager2r   r   r   r   Útest_remoteƒ  s"    
ÿÿz_TestRemoteManager.test_remote)	rG   rH   rI   r\   r7  rÜ   r2  r)  r-  r   r   r   r   r!  o  s   
	r!  Úmd5c                   @   s    e Zd Zedd„ ƒZdd„ ZdS )Ú_TestManagerRestartc                 C   s,   t ||td}| ¡  | ¡ }| d¡ d S )Nr$  r"  )r  r%  r&  r  rd   r(  r   r   r   r)  £  s    ÿz_TestManagerRestart._putterc              
   C   s:  t  d¡}ttjdf|td}zv| ¡ }|j}|j 	¡  | 
¡  | j| j|j|fd}| 
¡  | ¡  | ¡ }|  | ¡ d¡ ~W t|dƒrª| ¡  nt|dƒr¨| ¡  0 t||td}z| 
¡  |  |j¡ W nd ty4 } zJ|jtjkrð‚ t d¡ t||td}t|dƒr |  |j¡ W Y d }~n
d }~0 0 d S )Nr*  r   r$  r†   r"  r  r   )r4   r+  r  r   r,  r%  Z
get_serverr   Úlistenerr   r‹   r}   r)  rŒ   r  rW   r­   rÃ   r  rå   ÚOSErrorÚerrnoZ
EADDRINUSEr@   r¡   )r>   rn   rL   ZsrvrÚaddrr   r   r®   r   r   r   Útest_rapid_restart«  sD    
ÿ


ÿ

ÿ
ÿz&_TestManagerRestart.test_rapid_restartN)rG   rH   rI   r2  r)  r4  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 )%Ú_TestConnectionrh   c                 C   s(   t |jtƒD ]}| |¡ q| ¡  d S r   )r8  Ú
recv_bytesÚSENTINELÚ
send_bytesr   )rƒ   r&  Úmsgr   r   r   Ú_echoÛ  s    z_TestConnection._echoc              
   C   sL  |   ¡ \}}| j| j|fd}d|_| ¡  g d¢}tdƒ}|d }t dttdƒƒ¡}| j	dkrv|  
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 ¡ z| |¡}
W n8 tjy } z|  
|j|f¡ W Y d }~nd }~0 0 |  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 )Nr†   T)rO   r#  Nr"  rÂ   rÚ   rg  rK   r   rU  rh  z(                                        zexpected BufferTooShort, got %sFr3   r#   ÚXi   )(r‰   r}   r;  rq   r‹   r   rS  r«   r×   rj   rW   rª   ÚfilenorÑ   r•   r   r9  r7  rt   Úrecv_bytes_intoÚitemsizeÚ	bytearrayr   ÚBufferTooShortrB   rƒ  r;   r›   rU   r=   rl  r@   r¡   r8  r   ÚreadableÚwritablerã   ÚEOFErrorrŒ   )r>   r&  r6  r   rN  r:  ZlongmsgrT  ÚbufferrÝ   rY   r®   r›   Zreally_big_msgr   r   r   Útest_connectioná  sv    
ÿ$ÿ&




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 )NFr„   rO   rK   Tr£   )
r‰   rW   r•   r   rj   rB  rC  rã   r1  r›   )r>   ÚreaderÚwriterr   r   r   Útest_duplex_false0  s    
z!_TestConnection.test_duplex_falsec                 C   st   |   ¡ \}}| j| j|fd}d|_| ¡  | ¡  tdƒ}| |¡ |  | 	¡ |¡ | t
¡ | ¡  | ¡  d S )Nr†   Tr¥   )r‰   r}   r;  rq   r‹   r   r   r9  rW   r7  r8  rŒ   )r>   r&  r6  r   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 )NrK   ri   Úabcdefghijklmnopqrstuvwxyzrc   rh  rV  é   é   r5  r   é   é   rO   r3   rg  )
rj   rk   rl   r   r‰   r9  rW   r7  rã   r7   )r>   r:  rS   rT   r   r   r   Útest_sendbytesR  s&    

z_TestConnection.test_sendbytesc              
   C   sX   zt  |¡ W n@ tyN } z(|jtjkr8W Y d }~dS ‚ W Y d }~nd }~0 0 dS d S )NFT)r4   Úfstatr1  r2  ÚEBADF)rƒ   rR  r®   r   r   r   Ú_is_fd_assignedr  s    z_TestConnection._is_fd_assignedFc                 C   sd   |r.t ddƒD ]}|  |¡st | ¡ |¡ qt |¡}trJt |tj	¡}t 
||¡ t |¡ d S )Nr   r,   )r×   rS  r4   Údup2r=  r   Úrecv_handleÚmsvcrtÚopen_osfhandlerO  r€  r   )rƒ   r&  ÚdataZcreate_dummy_fdsrÚ   rR  r   r   r   Ú_writefd}  s    

z_TestConnection._writefdú$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ƒ6}| ¡ }tr€t |¡}t |||j¡ W d   ƒ n1 s¤0    Y  | ¡  ttj	jdƒ }|  | ¡ d¡ W d   ƒ n1 sê0    Y  d S )	NrK   úonly makes sense with processesTr„   s   foor†   ÚwbÚrb)rj   rk   r‰   r}   rY  rq   r‹   rå   r  r   rD  rC  rF  r=  rV  Zget_osfhandler   Úsend_handler‚   rŒ   rW   rG  )r>   r&  r6  r   rI  rR  r   r   r   Útest_fd_transfer‰  s    


.z _TestConnection.test_fd_transferr$   ú*test semantics don't make sense on Windowsr,   z)largest assignable fd number is too smallrT  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ƒx}| ¡ }tdtƒD ]}|  |¡s~ qœq~|  d	¡ t ||¡ zt |||j¡ W t |¡ nt |¡ 0 W d   ƒ n1 sè0    Y  | ¡  ttj	jd
ƒ }|  | ¡ d¡ W d   ƒ n1 s00    Y  d S )NrK   r[  Tr„   s   barr†   r\  r,   z2could not find an unassigned large file descriptorr]  )rj   rk   r‰   r}   rY  rq   r‹   rå   r  r   rD  rC  rF  r=  r×   ÚMAXFDrS  rƒ  r4   rT  r   r^  r‚   r   rŒ   rW   rG  )r>   r&  r6  r   rI  rR  Znewfdr   r   r   Útest_large_fd_transferœ  s(    	



6z&_TestConnection.test_large_fd_transferc                 C   s   t  | ¡ d¡ d S )Nó    )r4   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 )NrK   r[  Tr„   r†   )rj   rk   r‰   r}   re  rq   r‹   rã   r¾   r   rU  rŒ   ©r>   r&  r6  r   r   r   r   Útest_missing_fd_transferÁ  s    

z(_TestConnection.test_missing_fd_transferc              	   C   sÒ   |   ¡ \}}|p |L | d¡ |  | ¡ d¡ | jdkrT|  |j¡ |  |j¡ W d   ƒ n1 sh0    Y  W d   ƒ n1 s†0    Y  | jdkrÎ|  |j¡ |  |j¡ |  t	|j¡ |  t	|j¡ d S ©NéÁ  rK   )
r‰   r•   rW   r   rj   r   Úclosedro   rã   r1  rR   r   r   r   rÈ  Ð  s    

H
z_TestConnection.test_contextN)F)rG   rH   rI   r\   r2  r;  rF  rI  rJ  rP  rS  rY  r8   r3  ÚHAS_REDUCTIONr_  rZ  rè   rû   ra  rÃ   r4   rb  re  rg  rÈ  r   r   r   r   r6  ×  s<   
O 




ÿ
ÿÿ

r6  c                   @   s6   e Zd ZdZdd„ Zdd„ Ze ej	d¡dd„ ƒZ
d	S )
Ú_TestListenerr?  c                 C   sB   | j jD ]4}| j j|d}|  |j¡ |  t| j j|j|¡ qd S )N©Úfamily)Ú
connectionÚfamiliesÚListenerrå   r   rã   r1  r   )r>   rn  r|  r   r   r   Útest_multiple_bindä  s    ÿz _TestListener.test_multiple_bindc              
   C   s¶   | j  ¡ €}| j  |j¡R}| ¡ *}| d¡ |  | ¡ d¡ W d   ƒ n1 sT0    Y  W d   ƒ n1 sr0    Y  W d   ƒ n1 s0    Y  | jdkr²|  	t
|j¡ d S rh  ©ro  rq  ÚClientr   Úacceptr•   rW   r   rj   rã   r1  )r>   r|  rf   r,  r   r   r   rÈ  ë  s    

j
z_TestListener.test_contextz"test needs abstract socket supportc              
   C   s¸   | j  d¡€}| j  |j¡R}| ¡ *}| d¡ |  | ¡ d¡ W d   ƒ n1 sV0    Y  W d   ƒ n1 st0    Y  W d   ƒ n1 s’0    Y  | jdkr´|  	t
|j¡ d S )Nz
 somethingri  rK   rs  )r>   r0  Úclientr,  r   r   r   Útest_abstract_socketõ  s    

j
z"_TestListener.test_abstract_socketN)rG   rH   rI   r\   rr  rÈ  r8   r3  r   Úabstract_sockets_supportedrw  r   r   r   r   rl  à  s   
ÿrl  c                   @   s4   e Zd ZdZedd„ ƒZdd„ Zdd„ Zdd	„ Zd
S )Ú_TestListenerClientrh   c                 C   s"   | j  |¡}| d¡ | ¡  d S )Nr¥   )ro  rt  r•   r   )rƒ   r   r&  r   r   r   r~     s    
z_TestListenerClient._testc                 C   sj   | j jD ]\}| j j|d}| j| j|jfd}d|_| ¡  | ¡ }|  	| 
¡ d¡ | ¡  | ¡  qd S )Nrm  r†   Tr¥   )ro  rp  rq  r}   r~   r   rq   r‹   ru  rW   r   rŒ   r   )r>   rn  r|  r   r&  r   r   r   Útest_listener_client  s    z(_TestListenerClient.test_listener_clientc                 C   sj   | j  ¡ }| j| j|jfd}d|_| ¡  t d¡ | 	¡ }|  
| ¡ d¡ | ¡  | ¡  | ¡  d S )Nr†   TrO   r¥   )ro  rq  r}   r~   r   rq   r‹   r@   r¡   ru  rW   r   r   rŒ   )r>   r|  r   r&  r   r   r   Útest_issue14725  s    

z#_TestListenerClient.test_issue14725c                 C   sh   | j jD ]Z}| j j|d}| j  |j¡}| ¡ }| d¡ |  | d¡¡ | 	¡  | 	¡  | 	¡  qd S )Nrm  ó   hellorO   )
ro  rp  rq  rt  r   ru  r9  ro   r›   r   )r>   Úfamr|  rf   rS   r   r   r   Útest_issue16955'  s    
z#_TestListenerClient.test_issue16955N)	rG   rH   rI   r\   r2  r~   rz  r{  r~  r   r   r   r   ry    s   
ry  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 )Ú	_TestPollrh   c                 C   sJ   |   ¡ \}}|  | ¡ d¡ | d¡ |  | ¡ d¡ |  | ¡ d¡ d S )NFr	  T)r‰   rW   r›   r9  rR   r   r   r   Útest_empty_string6  s
    
z_TestPoll.test_empty_stringc                 C   s*   |D ]}t  d¡ | |¡ q| ¡  d S ©Nr#   )r@   r¡   r9  r   )rƒ   r&  Ústringsr   r   r   r   Ú_child_strings=  s    
z_TestPoll._child_stringsc                 C   sr   d}|   ¡ \}}| j| j||fd}| ¡  |D ]4}tdƒD ]}| d¡r< qPq<| ¡ }|  ||¡ q0| ¡  d S )N)r|  r	  ó   aó   br	  s   byer	  s   lopr†   éÈ   rô   )	r‰   r}   rƒ  r‹   r×   r›   r7  rW   rŒ   )r>   r‚  rS   rT   r   r   rÚ   r1  r   r   r   Útest_stringsD  s    
z_TestPoll.test_stringsc                 C   s   |  d¡ d S rb   )r›   )rƒ   rA  r   r   r   Ú_child_boundariesS  s    z_TestPoll._child_boundariesc                 C   sr   |   d¡\}}| j| j|fd}| ¡  t d¡ ddg}|D ]}| |¡ q>| ¡  | ¡  |  	| 
¡ |¡ d S )NFr†   r£   s   firsts   second)r‰   r}   rˆ  r‹   r@   r¡   r9  r   rŒ   r¬   r7  )r>   rA  rL  r   rÇ  rz  r   r   r   Útest_boundaries[  s    
z_TestPoll.test_boundariesc                 C   s"   |  d¡ |  d¡ |  d¡ d S )Nr„  r…  ó   cd)r9  )rƒ   rT   r   r   r   Ú_child_dont_mergeg  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 )
Nr'   Fr#   r†   r„  r   Tr…  rŠ  )r‰   rW   r›   r}   r‹  r‹   r7  rŒ   )r>   rS   rT   r   r   r   r   Útest_dont_mergem  s    z_TestPoll.test_dont_mergeN)rG   rH   rI   r\   r€  r2  rƒ  r‡  rˆ  r‰  r‹  rŒ  r   r   r   r   r  2  s   


r  rZ  c                   @   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 )Ú_TestPicklingConnectionsr?  c                 C   s   ddl m} |jtjd d S )Nr   )Úresource_sharerr—   )r   rŽ  r=  r   rœ   )rƒ   rŽ  r   r   r   rš  Š  s    z&_TestPicklingConnections.tearDownClassc                 C   s–   |D ]@}| j j|d}| |j¡ | ¡ }| |¡ | ¡  | ¡  qt tj	df¡}| | 
¡ ¡ | ¡ \}}| |¡ | ¡  | ¡  | ¡  d S )Nrm  r   )ro  rq  r•   r   ru  r   ÚsocketÚcreate_serverr   r,  Úgetsocknamer   )rƒ   r&  rp  r}  r|  Únew_connr3  r   r   r   Ú	_listener  s    


z"_TestPicklingConnections._listenerc                 C   sx   t |jd ƒD ]*\}}| j |¡}| | ¡ ¡ | ¡  q| ¡ \}}t ¡ }| |¡ | 	| ¡ ¡ | ¡  | ¡  d S r   )
r8  r   ro  rt  r•   r9  r   r  r&  Úsendall)rƒ   r&  r   r:  rv  r   r   r   Ú_remote¢  s    

z _TestPicklingConnections._remotec                 C   s`  | j j}|  ¡ \}}| j| j||fd}d|_| ¡  | ¡  |  ¡ \}}| j| j|fd}d|_| ¡  | ¡  |D ]D}d|  	d¡}	| 
¡ }
| |
|	f¡ | 
¡ }|  | 
¡ |	 ¡ ¡ qv| d ¡ tdƒ}	| 
¡ }
| |
|	f¡ | 
¡ }g }| 
d¡}|sq| |¡ qðd |¡}|  ||	 ¡ ¡ | ¡  | d ¡ | ¡  | ¡  | ¡  | ¡  d S )Nr†   TzThis connection uses family %sÚasciiz$This connection uses a normal socketr¶   r	  )ro  rp  r‰   r}   r“  rq   r‹   r   r•  r   r   r•   rW   r9  r   rÛ   rŒ   )r>   rp  ZlconnZlconn0ZlprŽ   Zrconn0Zrpr}  r:  r   r’  Úbufr   r   r   r   Útest_pickling±  sF    



z&_TestPicklingConnections.test_picklingc                 C   sD   |  ¡ }| d¡ | ¡  |  ¡ }|  ¡ }| |d ¡ | ¡  d S )Núall is wellr£   )r   r•   r   )rƒ   r&  rL  rA  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 )Nr†   TFr„   r™  ZfoobarZfoobarfoobar)
r‰   r}   rš  rq   r‹   r   r•   rW   r   rŒ   )r>   r&  r6  r   rA  rL  r   r   r   Útest_accessë  s"    


z$_TestPicklingConnections.test_accessN)rG   rH   rI   r\   r2  rš  r“  r•  r˜  rš  r›  r   r   r   r   r  „  s   


.
r  c                       s<   e Zd ZdZ‡ fdd„Z‡ fdd„Zdd„ Zdd	„ Z‡  ZS )
Ú	_TestHeapr?  c                    s*   t ƒ  ¡  tjjj| _tj ¡ tjj_d S r   )r”  r   r   rÜ  rÝ  Ú_heapÚold_heapZHeapr`   r˜  r   r   r     s    
z_TestHeap.setUpc                    s   | j tjj_tƒ  ¡  d S r   )rž  r   rÜ  rÝ  r  r”  r  r`   r˜  r   r   r    s    z_TestHeap.tearDownc              
   C   sj  d}d}g }t jjj}d|_t|ƒD ]L}tt dd¡d ƒ}t j |¡}| 	|¡ t
|ƒ|krnt |¡}||= ~q$|jb g }d}	d}
t|j ¡ ƒD ]@}|D ]6\}}}| 	|j |¡|||| df¡ |	|| 7 }	qžq–|j ¡ D ]B\}}|D ]4\}}| 	|j |¡|||| df¡ |
|| 7 }
qîqâ|  |	|
 tdd	„ |jD ƒƒ¡ | ¡  tt
|ƒd ƒD ]n}|| d d
… \}}}||d  d d
… \}}}||kr¾|  ||j| j¡ |  |d¡ n|  ||¡ q^W d   ƒ n1 sä0    Y  t |¡ |r
| ¡  qø|  |j|j¡ |  t
|jƒd¡ |  t
|jƒd¡ |  t
|jƒd|j¡ |  t
|jƒd¡ d S )Néˆ  rö  r   rO   r(  ÚfreeÚoccupiedc                 s   s   | ]}|j V  qd S r   ©rV  )rö   Úarenar   r   r   rl  @  r	  z&_TestHeap.test_heap.<locals>.<genexpr>rU  )r   rÜ  rÝ  r  Z_DISCARD_FREE_SPACE_LARGER_THANr×   rÑ   ÚrandomÚlognormvariaterÛ   rt   Ú	randrangerä  r«   Z_len_to_seqr7  Z_arenasÚindexZ_allocated_blocksr  rW   ÚsumÚsortrV  Úshufflerf  Z_n_freesZ
_n_mallocsZ_pending_free_blocks)r>   Z
iterationsZ	maxblocksZblocksrÜ  rÚ   rV  rT   rù  r   r¡  rÇ  r£  r‹   r=  Zarena_blocksZnarenaZnstartZnstopr   r   r   Ú	test_heap  s`    



ÿÿ
ÿ
0
z_TestHeap.test_heapc                 C   sx   t  ¡ st  ¡  |  t j¡ t  ¡ }| jt jg|¢R Ž  t  d¡ tdƒD ](}tj	 
d¡}tj	 
d¡}||_||_qJd S )NrÂ   rŸ  rO   )rî   Ú	isenabledÚenablerå   ÚdisableÚget_thresholdÚset_thresholdr×   r   rÜ  rÝ  Zbuddy)r>   Z
thresholdsrÚ   rS   rT   r   r   r   Útest_free_from_gcZ  s    
z_TestHeap.test_free_from_gc)	rG   rH   rI   r\   r   r  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 )Ú_Foor1  r2  ÚzN)rG   rH   rI   r/   r0   r1   Z_fields_r   r   r   r   r²  t  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 )Ú_TestSharedCTypesr?  c                 C   s   t s|  d¡ d S r3  r4  r`   r   r   r   r     s    z_TestSharedCTypes.setUpc                 C   sz   | j d9  _ | j d9  _ | j d9  _ | jd9  _| jd9  _| j d9  _ tt|ƒƒD ]}||  d9  < q`d S r­  )rX   r1  r2  r×   rt   )rƒ   r1  r2  r³  r™  rT  Ú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¡ td	ƒD ]}	|  ||	 |	d ¡ qì|  |jtdƒ¡ d S )NrÚ   rh  rA  gUUUUUUÕ?r/  rU  r£   r,  rÂ   rf   r  r¥   r†   Té   gUUUUUUå?r0  rb  ç      @Z
hellohello)r   r0   r1   r²  rR  r«   r×   r   rX   r}   r¶  rq   r‹   rŒ   rW   rQ   r1  r2  )
r>   r¢  r1  r2  r³  r™  rT  rµ  r   rÚ   r   r   r   Útest_sharedctypesŽ  s&    
z#_TestSharedCTypes.test_sharedctypesc                 C   s   | j dd d S )NTrA  )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 )Nr£   ç      @r/  r   )r²  r	   r1  r2  r³  rW   rQ   )r>   r™  r  r   r   r   Ú	test_copy¨  s    z_TestSharedCTypes.test_copyN)F)
rG   rH   rI   r\   r   r2  r¶  r¹  rº  r¼  r   r   r   r   r´  {  s   


r´  z&requires multiprocessing.shared_memoryc                   @   sš   e Zd ZdZedd„ ƒZdd„ Ze e	j
dkd¡dd	„ ƒZd
d„ Ze ejdkd¡dd„ ƒZe ejdkd¡dd„ ƒZdd„ Zdd„ Zdd„ Zdd„ ZdS )Ú_TestSharedMemoryr?  c                 C   s8   t | tƒrt | ¡}n| }||jd t|ƒ…< | ¡  d S r   )r   rX  r
   ÚSharedMemoryr—  rt   r   )Zshmem_name_or_objZbinary_dataZ	local_smsr   r   r   Ú!_attach_existing_shmem_then_write¹  s
    
z3_TestSharedMemory._attach_existing_shmem_then_writec                 C   s   |t t ¡ ƒ S r   )rX  r4   rv   )r>   Úprefixr   r   r   Ú_new_shm_nameÂ  s    z_TestSharedMemory._new_shm_namer$   ztest is broken on Windowsc              	      sö  |   d¡}tj|ddd}|  |j¡ |  |j|¡ |  |jd¡ |  t	|j
ƒ|j¡ d|j
d< |  |j
d d¡ t |¡}|  |j
d d¡ | ¡  tj|d|j d}|  |jd|j ¡ | ¡  |  t¡ tjdd	d W d   ƒ n1 sô0    Y  |  t¡ tjd
d W d   ƒ n1 s,0    Y  tj d¡ }tj‰ |   d¡|   d¡g}‡ fdd„|D ƒ}||_tjddd}|  |j¡ |  |j|d ¡ ||_tjddd}|  |j¡ |  |j|d ¡ W d   ƒ n1 sê0    Y  tjrŠ|   d¡}	tj|	ddd}
|  t¡X z<|  |
jd¡ t |	¡}| ¡  | ¡  |
 ¡  W |
 ¡  n
|
 ¡  0 W d   ƒ n1 s€0    Y  |  t¡  tj|ddd}W d   ƒ n1 s¼0    Y  tjr G dd„ dtjƒ}||ƒ}|  |j|j¡ | ¡  |  t¡" t d¡}| ¡  W d   ƒ n1 s40    Y  | ¡  |  t¡ tjddd}W d   ƒ n1 sv0    Y  |  t¡ tjddd}W d   ƒ n1 s°0    Y  |  t¡ tjdd}W d   ƒ n1 sè0    Y  d S )NZtest01_tsmbTé   ©ÚcreaterV  rå  r   r  r¢  éþÿÿÿF©rÄ  z,multiprocessing.shared_memory._make_filenameZ	test01_fnZ	test02_fnc                    s   g | ]}ˆ | ‘qS r   r   r  ©ZNAME_PREFIXr   r   r÷   ò  r	  z?_TestSharedMemory.test_shared_memory_basics.<locals>.<listcomp>rO   Ztest01_dblunlinkrŸ  c                   @   s   e Zd ZejejB ZdS )zO_TestSharedMemory.test_shared_memory_basics.<locals>.OptionalAttachSharedMemoryN)rG   rH   rI   r4   rP  ÚO_RDWRZ_flagsr   r   r   r   ÚOptionalAttachSharedMemory'  s   rÉ  Ztest01_nottherer3   )rÁ  r
   r¾  rå   rD  rW   r    r†  rV  rt   r—  r   rÅ  rã   r7   r8   ÚmockZpatchZ_SHM_NAME_PREFIXZside_effectÚ_nameZ
_USE_POSIXÚFileNotFoundErrorÚFileExistsError)r>   Z	name_tsmbÚsmsZalso_smsZsame_smsZmock_make_filenameÚnamesZshm1Zshm2Zname_dblunlinkZsms_unoZsms_duoZthere_can_only_be_one_smsrÉ  Zok_if_exists_smsZnonexisting_smsZsms_invalidr   rÇ  r   Útest_shared_memory_basicsÈ  sŠ    


,,ÿ2
ý

4ý&
(..z+_TestSharedMemory.test_shared_memory_basicsc                 C   s°   t jddd}|  |j¡ | j| j|jdfd}d|_| ¡  | 	¡  |  
t|jd d… ƒd¡ | j| j|dfd}d|_| ¡  | 	¡  |  
t|jd d… ƒd¡ | ¡  d S )NTrÂ  rÃ  s   howdyr†   rc   s   HELLO)r
   r¾  rå   rD  r}   r¿  r    rq   r‹   rŒ   rW   rs   r—  r   )r>   rÎ  r   r   r   r   Ú#test_shared_memory_across_processesA  s&    þþz5_TestSharedMemory.test_shared_memory_across_processesr   z#not feasible in non-posix platformsc                 C   sˆ   t j ¡ }| ¡  | tdƒ¡}t |jj	t
j¡ | tdƒ¡}|  t¡" t t ¡ t
j¡ W d   ƒ n1 sr0    Y  | ¡  d S r´  )r   ÚmanagersÚSharedMemoryManagerr‹   ÚShareableListr×   r4   rÍ   r  r‚   rÄ   r/  rã   rÕ  rv   r  )r>   ÚsmmÚslZsl2r   r   r   Ú4test_shared_memory_SharedMemoryServer_ignores_sigint]  s    
0zF_TestSharedMemory.test_shared_memory_SharedMemoryServer_ignores_sigintzresource_tracker is posix onlyc                 C   s(   d}t jj d|¡\}}}|  |¡ d S )NzÞif 1:
            from multiprocessing.managers import SharedMemoryManager


            smm = SharedMemoryManager()
            smm.start()
            sl = smm.ShareableList(range(10))
            smm.shutdown()
        rü  )r  r   rý  rþ  r   rÿ  r   r   r   Ú>test_shared_memory_SharedMemoryManager_reuses_resource_trackeru  s    	zP_TestSharedMemory.test_shared_memory_SharedMemoryManager_reuses_resource_trackerc                    sª  t j ¡ ‰ |  t¡ ˆ jdd W d   ƒ n1 s60    Y  ˆ  ¡  ‡ fdd„tddƒD ƒ}‡ fdd„tdd	d
ƒD ƒ}tj	|d j
jd}|  t|ƒd¡ tj|d jd}|  t|jƒd¡ |d j}ˆ  ¡  tjdkr|  t¡ tj|d}W d   ƒ n1 s0    Y  t j ¡ .}| 	d¡}|jd	d}	|j
j}W d   ƒ n1 sX0    Y  tjdkr¦|  t¡ tj	|d}
W d   ƒ n1 sœ0    Y  d S )Nr^  r¢  c                    s   g | ]}ˆ   t|ƒ¡‘qS r   )rÔ  r×   rõ   ©Zsmm1r   r   r÷     r	  zS_TestSharedMemory.test_shared_memory_SharedMemoryManager_basics.<locals>.<listcomp>rc   rÂ   c                    s   g | ]}ˆ j |d ‘qS )r¢  )r¾  )rö   r)  rÙ  r   r   r÷     r	  r*  é€   é   r   ©r    r$   Úhowdy)r   rÒ  rÓ  rã   r7   r¾  r‹   r×   r
   rÔ  Úshmr    rW   rt   r†  r—  r  rè   rû   rÌ  )r>   ZlolZlomZdoppleganger_list0Zdoppleganger_shm0Z	held_nameZ
absent_shmZsmm2rÖ  rÞ  Z	absent_slr   rÙ  r   Ú-test_shared_memory_SharedMemoryManager_basicsŠ  s,    
*
,
(z?_TestSharedMemory.test_shared_memory_SharedMemoryManager_basicsc              	   C   s  t  g d¢¡}|  |jj¡ |  |jd¡ |  t|ƒd¡ t 	¡ ` t 
d¡ |  t¡ | d¡ W d   ƒ n1 sx0    Y  |  | d¡d¡ W d   ƒ n1 s¨0    Y  |  |d d	¡ |  |d
 d¡ |  t|ƒd¡ d|d< |  |d d¡ d|d< |  |d d¡ |  |jd¡ |  td¡ d|d< W d   ƒ n1 sL0    Y  |  |d d¡ d|d< |  |d d¡ |  |d d¡ |  td¡ d|d< W d   ƒ n1 sº0    Y  |  |d d¡ |  td¡ d|d< W d   ƒ n1 s 0    Y  |  |d d¡ t 	¡ P t 
d¡ |  | d¡d¡ |  | d¡d¡ |  | d¡d¡ W d   ƒ n1 sz0    Y  |  d¡}t j||d}zˆ|  |jj|jj¡ |  ||jj¡ |  t|ƒt|ƒ¡ |  |j|j¡ d|d< |  |d d¡ |  |d d¡ |j ¡  W |j ¡  n|j ¡  0 t j|jjd}|  |jj|jj¡ d|d< |  |d d¡ |j ¡  |j ¡  t  ¡ }z~|  t|ƒd¡ |  |jd¡ |  | d¡d¡ |  t¡ | d ¡ W d   ƒ n1 sè0    Y  |j ¡  W |j ¡  n|j ¡  0 d S ) N)rÝ  ó   HoWdYgX9´ÈvqÀr¶   NTrå  z8s8sdqxxxxxx?xxxxxxxx?qrh  ÚignoreZ100r¶   rU  r   rÝ  rÅ  Trå  Zsomerg  z8s8sdq8sxxxxxxx?qzexceeds available storagezfar too manyu   encodÃ©srO   rà  u	   encodÃ©ess	   123456789r£   s   adiosZtest03_duplicaterÜ  éM   r3   ip  r5  Úany)r
   rÔ  rå   rÞ  rD  rW   rl   rt   ÚwarningsÚcatch_warningsÚsimplefilterrã   r7   r§  r'  rš  r  rÁ  r´   r    r«   r   )r>   rÖ  Zname_duplicateZsl_copyZsl_tetheredZempty_slr   r   r   Ú'test_shared_memory_ShareableList_basics¨  s    ÿ

(0þÿ(ÿ(ÿ(

2


*z9_TestSharedMemory.test_shared_memory_ShareableList_basicsc                 C   sæ   t  tdƒ¡}|  |jj¡ t |¡}t |¡}|  	t
|t jƒ¡ |  	|d d¡ |  ||u ¡ d|d< |  |d d¡ dt|jjƒ }t  tdƒ¡}|  |jj¡ t |¡}|  	t|ƒt|ƒk¡ |j ¡  |j ¡  |j ¡  d S )NrÂ   r3   r^  Úchangedrg  rS   i  )r
   rÔ  r×   rå   rÞ  rD  ÚpickleÚdumpsÚloadsro   r   r   rW   rt   r    r   )r>   rÖ  Zserialized_slZdeserialized_slr    Z	larger_slZserialized_larger_slr   r   r   Ú)test_shared_memory_ShareableList_pickling  s&    


ÿ


z;_TestSharedMemory.test_shared_memory_ShareableList_picklingc              	   C   s  d}t jtjdd|gt jt jdÒ}|j ¡  ¡  ¡ }| 	¡  | 
¡  t ¡ tj }d}t ¡ |k r¨t |¡ t|d dƒ}ztj|dd	}W qX ty¤   Y q°Y qX0 qXtd
ƒ‚tjdkræt d|› d¡ |j ¡  ¡ }|  d|¡ W d   ƒ n1 sú0    Y  d S )NaX  if 1:
            import os, time, sys
            from multiprocessing import shared_memory

            # Create a shared_memory segment, and send the segment name
            sm = shared_memory.SharedMemory(create=True, size=10)
            sys.stdout.write(sm.name + '\n')
            sys.stdout.flush()
            time.sleep(100)
        ú-Erü  r  r#   r£   rc   FrÆ  zJA SharedMemory segment was leaked after a process was abruptly terminated.r   ú/r
   z[resource_tracker: There appear to be 1 leaked shared_memory objects to clean up at shutdown)Ú
subprocessÚPopenrè   Ú
executableÚPIPEr   ÚreadlineÚstripÚdecoderž   r&   r@   rA   r   rœ   r¡   Úminr
   r¾  rÌ  r   r4   r    r   Ú
unregisterr!  rG  r¬   )r>   r   r   r    ÚdeadlinerD   rÕ  rJ  r   r   r   Ú4test_shared_memory_cleaned_after_process_termination!  s4    
þ

þzF_TestSharedMemory.test_shared_memory_cleaned_after_process_terminationN)rG   rH   rI   r\   r”  r¿  rÁ  r8   rZ  rè   rû   rÐ  rÑ  r4   r    r×  rØ  rß  rç  rì  rù  r   r   r   r   r½  ³  s   

x

`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 )Ú_TestFinalizer?  c                 C   s   t j ¡ | _t j ¡  d S r   )r   Ú_finalizer_registryr	   Úregistry_backupr  r`   r   r   r   r   [  s    z_TestFinalize.setUpc                 C   s&   t  ¡  |  tj¡ tj | j¡ d S r   )rî   rï   r   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 ¡  |ƒ }tj||jdd}|ƒ  |ƒ  ~t ¡  |ƒ }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>.FooNr  r   r   r   r   r  f  s   r  )rS   r¿   )rT   )rf   )Úd10rO   )rB   Úexitpriority)Úd01r   )Úd02)Úd03©r®   iöÿÿÿ)ÚSTOPiœÿÿÿ)
r‹  r   ÚFinalizer•   rî   rï   Ú_exit_functionr   r4   Ú_exit)rƒ   r&  r  rS   rT   Zclose_brf   rþ  r   r  r  r   r   r   Ú_test_finalized  s4    z_TestFinalize._test_finalizec                 C   s^   |   ¡ \}}| j| j|fd}d|_| ¡  | ¡  dd„ t|jdƒD ƒ}|  |g d¢¡ d S )Nr†   Tc                 S   s   g | ]}|‘qS r   r   )rö   rz  r   r   r   r÷   ”  r	  z/_TestFinalize.test_finalize.<locals>.<listcomp>r  )rS   rT   rþ  r  r  r   r®   )	r‰   r}   r  rq   r‹   rŒ   r8  r   rW   )r>   r&  r6  r   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 ¡ }z–t d
¡ t ddd¡ tj|dtj|dg}t	j
 |¡ t d¡ d‰W d   ƒ n1 s´0    Y  ˆd urÊˆ‚W t |¡ tj|Ž  t ¡  nt |¡ tj|Ž  t ¡  0 d S )Nc                   S   s   d S r   r   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 )NrO   r¶   )rÿ  )rí   r   r  r¤  Úrandintr`   ©r
  r   r   r?     s    z6_TestFinalize.test_thread_safety.<locals>.Foo.__init__N)rG   rH   rI   r?   r   r  r   r   r  œ  s   r  Fc               
      sR   ˆsNt  t ¡ d ¡ zt ¡  W q  tyJ }  z| ‰ W Y d } ~ q d } ~ 0 0 q d S r  )r@   r¡   r¤  r   Ú_run_finalizersrÊ  r  )rÐ  Úfinishr   r   Úrun_finalizers¥  s    z8_TestFinalize.test_thread_safety.<locals>.run_finalizersc               
      sd   i } ˆs`z$‡ fdd„t dƒD ƒ| t d¡< W q ty\ } z|‰|  ¡  W Y d }~qd }~0 0 qd S )Nc                    s   h | ]
}ˆ ƒ ’qS r   r   rõ   )r  r   r   Ú	<setcomp>·  r	  zL_TestFinalize.test_thread_safety.<locals>.make_finalizers.<locals>.<setcomp>rÂ   rc   )r×   r¤  ÚgetrandbitsrÊ  r  )r,  r®   )r  rÐ  r  r   r   Úmake_finalizers°  s    $z9_TestFinalize.test_thread_safety.<locals>.make_finalizersgíµ ÷Æ°>rc   rz   r¸  T)r‹  rè   Úgetswitchintervalrî   r¯  Úsetswitchintervalr°  r°   r  r  r   Zstart_threadsr@   r¡   rï   )r>   r  r  Zold_intervalZold_thresholdrM   r   )r  r
  rÐ  r  r   Útest_thread_safety—  s2    


ÿ
"


þ

z _TestFinalize.test_thread_safetyN)
rG   rH   rI   r\   r   r  r2  r  r	  r  r   r   r   r   rú  W  s   
'rú  c                   @   s   e Zd Zdd„ Zdd„ ZdS )Ú_TestImportStarc                 C   sh   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 )rO   r   )r4   ÚpathÚsplitextÚsplit)rö   rI  r   r   r   r÷   Ù  r	  z4_TestImportStar.get_module_names.<locals>.<listcomp>c                 S   s   g | ]}d | ‘qS )zmultiprocessing.r   )rö   r  r   r   r   r÷   Ú  r	  zmultiprocessing.__init__r   )
Úglobr4   r  Údirnamer   Ú__file__rŒ   Úescaper%  rÛ   )r>   r  ZfolderÚpatternÚfilesÚmodulesr   r   r   Úget_module_namesÔ  s    


z _TestImportStar.get_module_namesc                 C   s´   |   ¡ }tjdkr2| d¡ | d¡ | d¡ n| d¡ tsJ| d¡ td u r\| d¡ |D ]N}t|ƒ tj| }|  t	|dƒ|¡ |j
D ]}|  t	||ƒd||f ¡ qŽq`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%  rk  r/   r‚  r   ro   rÃ   r"  )r>   r   r    ÚmodÚattrr   r   r   Útest_importß  s&    








þz_TestImportStar.test_importN)rG   rH   rI   r!  r%  r   r   r   r   r  Ò  s   r  c                   @   s,   e Zd ZdZdd„ Zedd„ ƒZdd„ ZdS )	Ú_TestLoggingr?  c                 C   sD   t  ¡ }| tj¡ |  |d u¡ | d¡ | d¡ | t¡ d S )Nzthis will not be printedznor will this)	r   Ú
get_loggerÚsetLevelr   Ú
SUBWARNINGro   ÚdebugÚinfoÚ	LOG_LEVEL)r>   Úloggerr   r   r   Útest_enable_logging  s    

z _TestLogging.test_enable_loggingc                 C   s   t  ¡ }| | ¡ ¡ d S r   )r   r'  r•   ÚgetEffectiveLevel)rƒ   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*  é%   Fr„   r†   )Úlevel)r   r'  ÚloggingÚ	getLoggerr2  r‰   r(  r}   r0  r‹   rW   r   rŒ   r   ÚNOTSETr,  )	r>   ZLEVEL1ZLEVEL2r-  Zroot_loggerZ
root_levelrG  rH  r   r   r   r   Ú
test_level  s*    


z_TestLogging.test_levelN)rG   rH   rI   r\   r.  r2  r0  r6  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 )	Ú_TestPollEintrr?  c                 C   s   t  d¡ t |tj¡ d S r  )r@   r¡   r4   rÍ   rÄ   ÚSIGUSR1)rƒ   r‚   r   r   r   Ú_killerF  s    
z_TestPollEintr._killerr8  úrequires SIGUSR1c              
      s¾   dg‰ ‡ fdd„}t  ¡ }t tj|¡}z€| j| j|fd}| ¡  z,| jtjdd}| ¡  | 	¡  W | 	¡  n
| 	¡  0 |  
ˆ d ¡ |  |jd¡ W t tj|¡ nt tj|¡ 0 d S )NFc                     s   dˆ d< d S )NTr   r   r¿   ©Z
got_signalr   r   ÚrecordN  s    z._TestPollEintr.test_poll_eintr.<locals>.recordr†   )r£   r   )r4   rv   rÄ   r8  r}   r9  r‹   r@   r¡   rŒ   ro   rW   rw   )r>   r<  r‚   Z
oldhandlerZkillerr   r   r;  r   Útest_poll_eintrK  s    
z_TestPollEintr.test_poll_eintrN)rG   rH   rI   r\   r2  r9  r8   r3  rÃ   rÄ   r=  r   r   r   r   r7  B  s
   
r7  c                   @   s    e Zd Ze ed¡dd„ ƒZdS )ÚTestInvalidHandleúskipped on Windowsc              	   C   s^   t j d¡}z.z| ¡  W n ttfy0   Y n0 W d |_nd |_0 |  ttft jjd¡ d S )NiÈM®r3   )r   ro  Ú
Connectionr›   r7   r1  Ú_handlerã   rd  r   r   r   Útest_invalid_handlesf  s    
ÿz&TestInvalidHandle.test_invalid_handlesN)rG   rH   rI   r8   rZ  ÚWIN32rB  r   r   r   r   r>  d  s   
r>  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 )Nó   something bogusr   ©r>   rV  r   r   r   r7  |  s    zQOtherTest.test_deliver_challenge_auth_failure.<locals>._FakeConnection.recv_bytesc                 S   s   d S r   r   ©r>   rX  r   r   r   r9  ~  s    zQOtherTest.test_deliver_challenge_auth_failure.<locals>._FakeConnection.send_bytesN)rG   rH   rI   r7  r9  r   r   r   r   Ú_FakeConnection{  s   rH  ó   abc)r‹  rã   r   ÚAuthenticationErrorro  Údeliver_challenge©r>   rH  r   r   r   Ú#test_deliver_challenge_auth_failurez  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 rÌ  )r  r`   r   r   r   r?   †  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 )NrO   r£   rE  r	  )r  r   ro  Ú	CHALLENGErF  r   r   r   r7  ˆ  s    

zPOtherTest.test_answer_challenge_auth_failure.<locals>._FakeConnection.recv_bytesc                 S   s   d S r   r   rG  r   r   r   r9    s    zPOtherTest.test_answer_challenge_auth_failure.<locals>._FakeConnection.send_bytesN)rG   rH   rI   r?   r7  r9  r   r   r   r   rH  …  s   rH  rI  )r‹  rã   r   rJ  ro  Úanswer_challengerL  r   r   r   Ú"test_answer_challenge_auth_failure„  s
    þz,OtherTest.test_answer_challenge_auth_failureN)rG   rH   rI   rM  rP  r   r   r   r   rD  w  s   
rD  c                 C   s   |  j d7  _ d S rN   )r  )Únsr   r   r   Úinitializer™  s    rR  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 rÌ  )r   ÚManagerÚmgrr„  rQ  r  r`   r   r   r   r   ž  s    
zTestInitializers.setUpc                 C   s   | j  ¡  | j  ¡  d S r   )rU  r  rŒ   r`   r   r   r   r  £  s    
zTestInitializers.tearDownc                 C   sN   t j ¡ }|  t|jd¡ | t| jf¡ |  | jj	d¡ | 
¡  | ¡  d S rN   )r   rÒ  ÚSyncManagerrã   Ú	TypeErrorr‹   rR  rQ  rW   r  r  rŒ   )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 )NrO   )rR  )
rã   rW  r   r–  rR  rQ  r   rŒ   rW   r  rÕ   r   r   r   Útest_pool_initializer¯  s
    z&TestInitializers.test_pool_initializerN)rG   rH   rI   r   r  rX  rY  r   r   r   r   rS  œ  s   rS  c                 C   s*   z| j dd}W n tjy$   Y n0 d S )NF)Úblock)r­   rj  rs  )re   Úitemr   r   r   Ú_this_sub_process»  s    r\  c                  C   s2   t  ¡ } t jt| fd}d|_| ¡  | ¡  d S rÓ   )r   r   r}   r\  rq   r‹   rŒ   )r   ZsubProcr   r   r   Ú_test_processÁ  s
    r]  c                 C   s   | |  S r   r   r‰  r   r   r   Ú_afuncÈ  s    r^  c                  C   s0   t jdd} |  tg d¢¡}|  ¡  |  ¡  d S )Nrg  r?  )rO   r£   rU  rg  rc   rb  rh  )r   r–  rŸ  r^  r   rŒ   )r—  r1  r   r   r   Úpool_in_processË  s    r_  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 r   )Ú	_delegateÚ_pid)r>   Zdelegater   r   r   r?   Ò  s    z_file_like.__init__c                 C   s$   t  ¡ }|| jkr|| _g | _| jS r   )r4   rv   rb  Ú_cacher÷  r   r   r   ÚcacheÖ  s
    
z_file_like.cachec                 C   s   | j  |¡ d S r   )rd  rÛ   rG  r   r   r   r€  ß  s    z_file_like.writec                 C   s   | j  d | j¡¡ g | _d S )Nr5  )ra  r€  rŒ   rd  rc  r`   r   r   r   Úflushâ  s    z_file_like.flushN)rG   rH   rI   r?   Úpropertyrd  r€  re  r   r   r   r   r`  Ñ  s
   
r`  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 ©Nrz   )r   r}   r]  r‹   rŒ   )r>   r  r   r   r   Útest_queue_in_processè  s    z0TestStdinBadfiledescriptor.test_queue_in_processc                 C   s    t jtd}| ¡  | ¡  d S rh  )r   r}   r_  r‹   rŒ   rÕ   r   r   r   Útest_pool_in_processí  s    z/TestStdinBadfiledescriptor.test_pool_in_processc                    s:   t  ¡ }t|ƒ‰ ˆ  d¡ tj‡ fdd„d}ˆ  ¡  d S )Nr™  c                      s   ˆ   ¡ S r   )re  r   ©Zfliker   r   rÀ  ö  r	  z:TestStdinBadfiledescriptor.test_flushing.<locals>.<lambda>rz   )r  r  r`  r€  r   r}   re  )r>   Úsior  r   rk  r   Útest_flushingò  s    
z(TestStdinBadfiledescriptor.test_flushingN)rG   rH   rI   ri  rj  rm  r   r   r   r   rg  æ  s   rg  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   sB   t dƒD ],}|r"t t ¡ d ¡ | |t ¡ f¡ q| ¡  d S )NrÂ   r#   )r×   r@   r¡   r¤  r•   r4   rv   r   )rƒ   rL  ÚslowrÚ   r   r   r   Ú_child_test_waitý  s
    zTestWait._child_test_waitFc              	      s  ddl m} g }g ‰ g }tdƒD ]^}tjdd\}}tj| j||fd}d|_| ¡  | 	¡  | 
|¡ ˆ  
|¡ |  |j¡ q |rÐ||ƒD ]@}z| ¡ }	W n$ tyÀ   | |¡ | 	¡  Y qŒ0 | 
|	¡ qŒq€| ¡  t‡ fdd	„td
ƒD ƒƒ}
|  ||
¡ d S )Nr   r%   rg  Fr„   r†   Tc                 3   s"   | ]}ˆ D ]}||j fV  q
qd S r   rô  )rö   rÚ   r   ©rþ   r   r   rl     r	  z%TestWait.test_wait.<locals>.<genexpr>rÂ   )Úmultiprocessing.connectionr&   r×   r   r‰   r}   rp  rq   r‹   r   rÛ   rå   rŒ   r   rD  r%  r©  rn  rW   )r>   ro  r&   ÚreadersÚmessagesrÚ   rA  rL  r   r:  rÝ   r   rq  r   Ú	test_wait  s0    


zTestWait.test_waitc                 C   sV   t   ¡ }| |¡ tdƒD ].}|r4t t ¡ d ¡ | d|  d¡¡ q| ¡  d S )NrÂ   r#   ú%s
r–  )	r  r&  r×   r@   r¡   r¤  r”  r   r   )rƒ   r   ro  r   rÚ   r   r   r   Ú_child_test_wait_socket#  s    
z TestWait._child_test_wait_socketc                 C   s2  ddl m} t tjdf¡}| ¡ }g }g }i }tdƒD ]<}tj	| j
||fd}	d|	_|	 ¡  | |	¡ |  |	j¡ q8tdƒD ]"}| ¡ \}
}| |
¡ g ||
< q~| ¡  |rî||ƒD ]4}
|
 d¡}|sÜ| |
¡ |
 ¡  q¶||
  |¡ q¶qªd dd	„ td
ƒD ƒ¡ d¡}| ¡ D ]}|  d |¡|¡ qd S )Nr   r%   rg  r†   Tr*  r5  c                 s   s   | ]}d | V  qdS )rv  Nr   rõ   r   r   r   rl  L  r	  z,TestWait.test_wait_socket.<locals>.<genexpr>rÂ   r–  r	  )rr  r&   r  r  r   r,  r‘  r×   r   r}   rw  rq   r‹   rÛ   rå   rŒ   ru  r   r   r%  r   r7  rW   )r>   ro  r&   r|  r3  rs  rþ   ZdicrÚ   r   rA  rê  r:  rÝ   Úvr   r   r   Útest_wait_socket-  s:    ÿ





zTestWait.test_wait_socketc                 C   s   |   d¡ d S r‘  )ru  r`   r   r   r   Útest_wait_slowP  s    zTestWait.test_wait_slowc                 C   s   |   d¡ d S r‘  )ry  r`   r   r   r   Útest_wait_socket_slowS  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%   rc   r£   r  r  çš™™™™™Ù?)
rr  r&   r   r‰   r@   rA   rW   rÅ  rÖ  r•   )r>   r&   rÝ   rS   rT   r‹   rY   r‡  r   r   r   Útest_wait_timeoutV  s    
zTestWait.test_wait_timeoutc                 C   s   |  ¡  t |¡ d S r   )rŸ  r@   r¡   )rƒ   r©  Zperiodr   r   r   Úsignal_and_sleepm  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%   rU  c                 S   s   t | dd„ dS )Nc                 S   s   t | ƒS r   )rÙ   r‰  r   r   r   rÀ  v  r	  z>TestWait.test_wait_integer.<locals>.<lambda>.<locals>.<lambda>)râ  )rn  )r|  r   r   r   rÀ  v  r	  z,TestWait.test_wait_integer.<locals>.<lambda>r†   r  r—   r£   r|  )rr  r&   r   r«  r‰   r}   r~  r‹   rr   rä   rÑ   ro   rž  r@   rA   rW   rÅ  rÖ  r•   rž   rŒ   )r>   r&   rÝ   Zsorted_r©  rS   rT   r   r‹   rY   r‡  r   r   r   Útest_wait_integerr  s>    
ÿ

zTestWait.test_wait_integerc                 C   sf   ddl m} t ¡ \}}t ¡ }||gdd}t ¡ | }|  |g ¡ |  |d¡ | ¡  | ¡  d S )Nr   r%   r3   r—   rO   )	rr  r&   r   r‰   r@   rA   rW   rÅ  r   )r>   r&   rS   rT   rD   rY   r   r   r   Útest_neg_timeout  s    zTestWait.test_neg_timeoutN)F)F)rG   rH   rI   r2  rp  ru  rw  ry  rz  r{  r}  r~  r  r€  r   r   r   r   rn  û  s   


	
#
+rn  c                   @   s4   e Zd Ze ed¡dd„ ƒZe ed¡dd„ ƒZdS )ÚTestInvalidFamilyr?  c                 C   s:   |   t¡ tj d¡ W d   ƒ n1 s,0    Y  d S )Nz\\.\test©rã   r7   r   ro  rq  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   ƒ n1 s,0    Y  d S )Nz/var/test.piper‚  r`   r   r   r   Útest_invalid_family_win32³  s    z+TestInvalidFamily.test_invalid_family_win32N)	rG   rH   rI   r8   rZ  rC  rƒ  r3  r„  r   r   r   r   r  ¬  s   


r  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 r   )r•   r'  rè   Úflags©rƒ   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   Fr„   r†   )Újsonr   r‰   r}   rˆ  r‹   r   rŒ   r   r'  rè   r†  Úprintrê  )rƒ   r‰  rA  rL  r   Úgrandchild_flagsr†  r   r   r   Úrun_in_childÁ  s    zTestFlags.run_in_childc                 C   sH   dd l }d}t tjdddd|g¡}| | d¡¡\}}|  ||¡ d S )Nr   zJfrom test._test_multiprocessing import TestFlags; TestFlags.run_in_child()rí  z-Sz-Orü  r–  )r‰  rï  Úcheck_outputrè   rñ  rë  rõ  rW   )r>   r‰  ÚprogrX  Zchild_flagsr‹  r   r   r   Ú
test_flagsÎ  s    ÿzTestFlags.test_flagsN)rG   rH   rI   r2  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 )ÚTestTimeoutsc                 C   s>   t  d¡ | d¡ | ¡  tj |¡}| d¡ | ¡  d S )NrO   r~  r  )r@   r¡   r•   r   r   ro  rt  )rƒ   Ú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 t  |¡ nt  |¡ 0 d S )	Nr#   Tr„   ÚAF_INETrm  r†   r~  r  )r  ÚgetdefaulttimeoutÚsetdefaulttimeoutr   r‰   ro  rq  r}   r’  r   r‹   r   rW   r   ru  r   )r>   Zold_timeoutÚparentr‘  r|  r   r&  r   r   r   rˆ  æ  s$    
ÿ
zTestTimeouts.test_timeoutN)rG   rH   rI   r2  r’  rˆ  r   r   r   r   r  Ü  s   
r  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  r	  s   RuntimeErrors   123)r   rú   r4   r  rŒ   r  r  r  r   rý  Zassert_python_failurerW   r¬   rþ  rW  )r>   rü   r    rê   r  rJ  r   r   r   Útest_noforkbombÿ  s    zTestNoForkBomb.test_noforkbombN)rG   rH   rI   r˜  r   r   r   r   r—  þ  s   r—  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 )NrO   r†   )
r   r}   r‘  r‹   r   r   r•   rt   r   Ú_afterfork_registry)rƒ   rÄ  r&  r   r   r   r   r‘    s    
zTestForkAwareThreadLock.childc                 C   sd   t  d¡\}}t ¡ }ttjƒ}t j| jd|fd}| ¡  | 	¡  | 
¡ }t|ƒ |  ||¡ d S )NFrc   r†   )r   r‰   r   ÚForkAwareThreadLockrt   rš  r}   r‘  r‹   r   r   r   ZassertLessEqual)r>   rA  rL  r|  Zold_sizer   Znew_sizer   r   r   r£    s    
z!TestForkAwareThreadLock.test_lockN)rG   rH   rI   r2  r‘  r£  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   sZ   t rt ¡  ¡ S t ¡  ¡ }g }|dk r>| |¡ t |¡}q |D ]}t |¡ qB|S d S )Nrö  )rC  r  ÚdetachrÛ   r4   Údupr   )r>   rR  Úto_closer1  r   r   r   Úget_high_socket_fd0  s    
zTestCloseFds.get_high_socket_fdc                 C   s,   t rtjtjtj|d ¡  n
t |¡ d S )N)r=  )rC  r  r“  ÚSOCK_STREAMr   r4   )r>   rR  r   r   r   r   B  s    zTestCloseFds.closec              
   C   s\   zt  |t jt j¡}W n. tyD } z| |¡ W Y d }~nd }~0 0 | ¡  | d ¡ d S r   )r  Úfromfdr“  r¡  rÊ  r•   r   )rƒ   r&  rR  r   r®   r   r   r   Ú_test_closefdsH  s     zTestCloseFds._test_closefdsc              	   C   sÞ   t st d¡‚t ¡ \}}|  ¡ }zRtj| j||fd}| ¡  | 	¡  | 
¡ }t|ƒ W |  	|¡ | 	¡  | 	¡  n|  	|¡ | 	¡  | 	¡  0 t ¡ dkr¬|  |d ¡ n.d}|  |t¡ |  |jtjkpÔ|j|k|¡ d S )Nzrequires fd picklingr†   r  i6'  )rk  r8   r9   r   r‰   r   r}   r£  r‹   r   r   r   rú   rð   rr   r1  ro   r2  rR  Úwinerror)r>   rG  rH  rR  r   r®   ZWSAENOTSOCKr   r   r   Útest_closefdR  s2    
ÿ


þ


ÿzTestCloseFds.test_closefdN)rG   rH   rI   r   r   r2  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 r   r   ©r-  Úframer   r   r   rÁ   w  s    z-TestIgnoreEINTR._test_ignore.<locals>.handlerÚreadyó   x)rÄ   r8  r•   r   r9  ÚCONN_MAX_SIZE)rƒ   r&  rÁ   r1  r   r   r   Ú_test_ignoreu  s    

zTestIgnoreEINTR._test_ignorer8  r:  c                 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 | ¡  n
| ¡  0 d S )Nr†   Tr©  r#   iÒ  rª  )r   r‰   r}   r¬  rq   r‹   r   rW   r   r@   r¡   r4   rÍ   r‚   rÄ   r8  r•   r7  r«  rŒ   rf  r   r   r   Útest_ignore  s(    ÿ





zTestIgnoreEINTR.test_ignorec                 C   sb   dd„ }t   t j|¡ tj ¡ .}| |j¡ | ¡ }| d¡ W d   ƒ n1 sT0    Y  d S )Nc                 S   s   d S r   r   r§  r   r   r   rÁ   ˜  s    z6TestIgnoreEINTR._test_ignore_listener.<locals>.handlerÚwelcome)rÄ   r8  r   ro  rq  r•   r   ru  )rƒ   r&  rÁ   r|  rS   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 | ¡  n
| ¡  0 d S )Nr†   Tr#   r®  )r   r‰   r}   r¯  rq   r‹   r   r   r@   r¡   r4   rÍ   r‚   rÄ   r8  ro  rt  rW   rŒ   )r>   r&  r6  r   r   rv  r   r   r   Útest_ignore_listener   s     ÿ


z$TestIgnoreEINTR.test_ignore_listenerN)rG   rH   rI   Úmaxr   ZPIPE_MAX_SIZEZSOCK_MAX_SIZEr«  r2  r¬  r8   r3  rÃ   rÄ   r­  r¯  r°  r   r   r   r   r¦  p  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 r   )r•   r   rú   r‡  r   r   r   Ú_check_context´  s    zTestStartMethod._check_contextc                 C   s^   |j dd\}}|j| j|fd}| ¡  | ¡  | ¡ }| ¡  | ¡  |  || ¡ ¡ d S )NFr„   r†   )	r‰   r}   r³  r‹   r   r   rŒ   rW   rú   )r>   r–  rA  rL  r   Zchild_methodr   r   r   Úcheck_context¸  s    zTestStartMethod.check_contextc              	   C   s~   dD ]t}zt  |¡}W n ty,   Y qY n0 |  | ¡ |¡ |  | ¡ |¡ |  t|jd¡ |  t|jd ¡ |  |¡ qd S )N©r  ró   r(  ró   )	r   r—  r7   rW   rú   rð   rã   Úset_start_methodr´  )r>   Úmethodr–  r   r   r   rÈ  Â  s    
zTestStartMethod.test_contextc              
   C   sê   t  t¡ d}t  ¡ }z²dD ]š}zt j|dd W n tyH   Y qY n0 |  t  ¡ |¡ t  ¡ }|  | ¡ |¡ |  t	|ƒj
 ¡  |¡¡ |  |jj
 ¡  |¡¡ |  t ¡ |d7 }qW t j|dd nt j|dd 0 |  |d¡ d S )Nr   rµ  T©ÚforcerO   )r   Úset_forkserver_preloadÚPRELOADrú   r¶  r7   rW   r—  ro   rª   rG   ÚlowerÚ
startswithr}   r´  r†  )r>   r  Z
old_methodr·  r–  r   r   r   Útest_set_getÎ  s(    

ÿ
 zTestStartMethod.test_set_getc                 C   s\   t  ¡ }tjdkr"|  |dg¡ n6|  |ddgkpT|ddgkpT|g d¢kpT|g d¢k¡ d S )Nr$   ró   r  rµ  )ró   r  r(  )r   Úget_all_start_methodsrè   rû   rW   ro   )r>   Úmethodsr   r   r   Útest_get_allä  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Úokr5  z(failed spawning forkserver or grandchild)r   rú   rk   r4   r  rŒ   r  r  r  r   rý  rþ  rõ  rW  rŠ  rƒ  )r>   r    rê   r  rJ  r   r   r   Útest_preload_resourcesî  s    
z&TestStartMethod.test_preload_resourcesN)
rG   rH   rI   r2  r³  r´  rÈ  r¾  rÁ  rÃ  r   r   r   r   r²  ³  s   


r²  r`  c                   @   sH   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zedd„ ƒZ	dd„ Z
dS )ÚTestResourceTrackerc                 C   sØ  d}t jD ]Æ}| j|d¢ |dkr6W d   ƒ q
t ¡ \}}tjtjdd|j	||dg|gtj
d}t |¡ t|dd	d
4}| ¡  ¡  d¡}| ¡  ¡  d¡}W d   ƒ n1 s¼0    Y  t||ƒ | ¡  | ¡  t ¡ tj }	t ¡ |	k rbt d¡ zt||ƒ W qî ty^ }
 z0|  |
jtjtjf¡ W Y d }
~
qrW Y d }
~
qîd }
~
0 0 qîtd|› dƒ‚|j ¡  d¡}|j ¡  d 	|¡}|   ||¡ |   |d| ¡ W d   ƒ q
1 sÈ0    Y  q
d S )Na+  if 1:
            import time, os, tempfile
            import multiprocessing as mp
            from multiprocessing import resource_tracker
            from multiprocessing.shared_memory import SharedMemory

            mp.set_start_method("spawn")
            rand = tempfile._RandomNameSequence()


            def create_and_register_resource(rtype):
                if rtype == "semaphore":
                    lock = mp.Lock()
                    return lock, lock._semlock.name
                elif rtype == "shared_memory":
                    sm = SharedMemory(create=True, size=10)
                    return sm, sm._name
                else:
                    raise ValueError(
                        "Resource type {{}} not understood".format(rtype))


            resource1, rname1 = create_and_register_resource("{rtype}")
            resource2, rname2 = create_and_register_resource("{rtype}")

            os.write({w}, rname1.encode("ascii") + b"\n")
            os.write({w}, rname2.encode("ascii") + b"\n")

            time.sleep(10)
        )r!   Znooprí  rü  )rL  r!   )Úpass_fdsr!  r]  TrM  r–  r  zA z= resource was leaked after a process was abruptly terminated.zutf-8z8resource_tracker: There appear to be 2 leaked {} objectszresource_tracker: %r: \[Errno)!r   r   rY  r4   Úpiperï  rð  rè   rñ  rl   rò  r   rF  ró  rW  rõ  r"   rž   r&   r@   rA   r   rœ   r¡   r1  r¬   r2  ÚENOENTÚEINVALr   r!  rG  ZassertRegex)r>   r   r!   rA  rL  r   rI  Zname1Zname2rø  r®   rJ  rÝ   r   r   r   Útest_resource_trackerÿ  sJ    ÿý
0

&
ÿ
þz)TestResourceTracker.test_resource_trackerc           
      C   sd  ddl m} |j}|d ur:t |tj¡ tj|tj d t	 
¡ " t	 d¡ | ¡  W d   ƒ n1 sj0    Y  |j}t ||¡ t d¡ t d¡}t	j
dd¨}t	 d	¡ | ¡ }| ¡  | ¡  t |¡}~t ¡  |  |ƒ ¡ |r0|  t|ƒd
¡ |d }	|  t|	jtƒ¡ |  dt|	j ƒv ¡ n|  t|ƒd¡ W d   ƒ n1 sV0    Y  d S )Nr   ©Ú_resource_tracker)rw   rá  r   ró   T)r<  ÚalwaysrO   zresource_tracker: process died)!Ú multiprocessing.resource_trackerrË  rb  r4   rÍ   rÄ   rÎ   r   Zwait_processrä  rå  ræ  r,  r@   r¡   r   r—  r«  rž  rŸ  rì   rí   rî   rï   r‡   rW   rt   ro   Ú
issubclassÚcategoryÚUserWarningrX  Úmessage)
r>   r-  Z
should_dierË  r‚   r–  Zall_warnr©  rñ   Zthe_warnr   r   r   Úcheck_resource_tracker_deathI  s:    

&



ÿz0TestResourceTracker.check_resource_tracker_deathc                 C   s   |   tjd¡ d S rŽ  )rÒ  rÄ   r/  r`   r   r   r   Útest_resource_tracker_sigintn  s    z0TestResourceTracker.test_resource_tracker_sigintc                 C   s   |   tjd¡ d S rŽ  )rÒ  rÄ   rÊ   r`   r   r   r   Útest_resource_tracker_sigtermr  s    z1TestResourceTracker.test_resource_tracker_sigtermc                 C   s   |   tjd¡ d S r‘  )rÒ  rÄ   rÎ   r`   r   r   r   Útest_resource_tracker_sigkillv  s    z1TestResourceTracker.test_resource_tracker_sigkillc                 C   s<   ddl m} | ¡  |jd |fv }|| ¡ M }|  |¡ d S )Nr   rÊ  )rÍ  rË  r,  rb  Z_check_aliver•   )r&  r‚   rË  Zreusedr   r   r   Ú_is_resource_tracker_reusedz  s
    z/TestResourceTracker._is_resource_tracker_reusedc                 C   st   ddl m} | ¡  |j}tjdd\}}tj| j||fd}| ¡  | 	¡ }| 
¡  | ¡  | ¡  |  |¡ d S )Nr   rÊ  Fr„   r†   )rÍ  rË  r,  rb  r   r‰   r}   rÖ  r‹   r   rŒ   r   ro   )r>   rË  r‚   rA  rL  r   Zis_resource_tracker_reusedr   r   r   Útest_resource_tracker_reused„  s    ÿz0TestResourceTracker.test_resource_tracker_reusedN)rG   rH   rI   rÉ  rÒ  rÓ  rÔ  rÕ  r”  rÖ  r×  r   r   r   r   rÄ  û  s   J%
	rÄ  c                   @   s8   e Zd Zedd„ ƒZdd„ Zdd„ Zejj	dd„ ƒZ
d	S )
ÚTestSimpleQueuec                 C   s@   |  ¡  z(| | ¡ ¡ | | ¡ ¡ W | ¡  n
| ¡  0 d S r   )r&   rd   r[  ræ   rp  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 )Nr†   TF)r   ÚSimpleQueuer§   r}   rÙ  rq   r‹   ro   r[  ræ   r&   r   rW   r­   rŒ   )r>   r   rc  rd  r  r   r   r   Ú
test_empty£  s"    þzTestSimpleQueue.test_emptyc                 C   s   t  ¡ }| ¡  | ¡  d S r   )r   rÚ  r   ©r>   r   r   r   r   rò   »  s    zTestSimpleQueue.test_closec                 C   s0   t  ¡ }| ¡  |  |jj¡ |  |jj¡ d S r   )r   rÚ  r   ro   Ú_readerrj  Ú_writerrÜ  r   r   r   Útest_closedÂ  s    zTestSimpleQueue.test_closedN)rG   rH   rI   r2  rÙ  rÛ  rò   r  r   Zcpython_onlyrß  r   r   r   r   rØ  —  s   
	rØ  c                   @   s   e Zd Zdd„ ZdS )ÚTestPoolNotLeakOnFailurec                    sŽ   d‰g ‰ G ‡ ‡fdd„dƒ}|   td¡: tjjdtjj|dd}| ¡  | 	¡  W d   ƒ n1 sh0    Y  |  
tdd	„ ˆ D ƒƒ¡ d S )
NrU  c                       s<   e Zd Z‡ fdd„Z‡fdd„Zdd„ Zdd„ Zd	d
„ ZdS )zRTestPoolNotLeakOnFailure.test_release_unused_processes.<locals>.FailingForkProcessc                    s    d| _ d | _d | _ˆ  | ¡ d S )NzFake Process)r    rw   rÉ  rÛ   )r>   r¦   )Úforked_processesr   r   r?   Ó  s    z[TestPoolNotLeakOnFailure.test_release_unused_processes.<locals>.FailingForkProcess.__init__c                    s"   ˆ dkrt dƒ‚ˆ d8 ‰ d| _d S )Nr   úManually induced OSErrorrO   rð  )r1  rÉ  r`   )Úwill_fail_inr   r   r‹   Ù  s    zXTestPoolNotLeakOnFailure.test_release_unused_processes.<locals>.FailingForkProcess.startc                 S   s
   d| _ d S )NÚstoppingrÈ  r`   r   r   r   rž   à  s    z\TestPoolNotLeakOnFailure.test_release_unused_processes.<locals>.FailingForkProcess.terminatec                 S   s   | j dkrd| _ d S )Nrä  ÚstoppedrÈ  r`   r   r   r   rŒ   ã  s    
zWTestPoolNotLeakOnFailure.test_release_unused_processes.<locals>.FailingForkProcess.joinc                 S   s   | j dkp| j dkS )Nrð  rä  rÈ  r`   r   r   r   rp   ç  s    z[TestPoolNotLeakOnFailure.test_release_unused_processes.<locals>.FailingForkProcess.is_aliveN)rG   rH   rI   r?   r‹   rž   rŒ   rp   r   ©rá  rã  r   r   ÚFailingForkProcessÒ  s
   rç  râ  rc   )r}   )Úcontextc                 s   s   | ]}|  ¡ V  qd S r   r÷  )rö   r   r   r   r   rl  ð  r	  zITestPoolNotLeakOnFailure.test_release_unused_processes.<locals>.<genexpr>)rš  r1  r   r—  r–  r8   rÊ  Z	MagicMockr   rŒ   r   rã  )r>   rç  r   r   ræ  r   Útest_release_unused_processesÌ  s    ÿ
&ÿz6TestPoolNotLeakOnFailure.test_release_unused_processesN)rG   rH   rI   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dd„ Ze	dd„ ƒZdGdd„Ze	dd„ ƒZdHdd„Ze	dd„ ƒZdId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dJd.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 r   )Úmanager_classrL   r‹   r  r`   r   r   r   r     s    

zTestSyncManagerTypes.setUpc                 C   sB   | j d ur(| j  ¡ r(| j  ¡  | j  ¡  | j ¡  d | _d | _ d S r   )r  rp   rž   rŒ   rL   r  r`   r   r   r   r    s    


zTestSyncManagerTypes.tearDownc                 C   s   t  ¡  d S r   )r   Úreap_childrenr¸   r   r   r   r•    s    zTestSyncManagerTypes.setUpClassc                 C   sx   t | jƒ t ¡ }d}tt ¡ ƒdkrtt |¡ |d9 }t ¡ | }|dkrdtj	_
t	 dt ¡ › d|› d¡ qtqd S )	Nrô   rO   r£   r»  Tú"multiprocessing.Manager still has ú active children after ú seconds)r   r  r@   rA   rt   r   r©   r¡   r  r   Úenvironment_alteredÚprint_warning)r>   Ú
start_timerD   rÏ  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 )Nr†   Tr   )r   r}   r  rq   r‹   ró  rW   rw   )r>   Zworkerrz  r   r   r   Ú
run_worker1  s
    
zTestSyncManagerTypes.run_workerc                 C   s   |  ¡  | ¡  |  d¡ d S ©Nrø   )r&   r  ©rƒ   rz  r   r   r   rÙ  8  s    z TestSyncManagerTypes._test_eventc                 C   s.   | j  ¡ }| ¡  |  | j|¡ | d¡ d S rõ  )rL   r§   ræ   rô  rÙ  r&   ©r>   rØ  r   r   r   rÚ  ?  s    
zTestSyncManagerTypes.test_eventc                 C   s   |  ¡  d S r   ©rž  rö  r   r   r   Ú
_test_lockF  s    zTestSyncManagerTypes._test_lockr  c                 C   s6   t | j|ƒƒ }|  | j|¡ | ¡  |  t|j¡ d S r   )r"  rL   rô  rù  rŸ  rã   r¾   ©r>   ZlnamerØ  r   r   r   r£  J  s    zTestSyncManagerTypes.test_lockc                 C   s   |  ¡  | ¡  d S r   ©rž  rŸ  rö  r   r   r   Ú_test_rlockP  s    z TestSyncManagerTypes._test_rlockc                 C   s    t | j|ƒƒ }|  | j|¡ d S r   )r"  rL   rô  rü  rú  r   r   r   r¥  U  s    zTestSyncManagerTypes.test_rlockc                 C   s   |  ¡  d S r   rø  rö  r   r   r   rª  Y  s    z$TestSyncManagerTypes._test_semaphorer«  c                 C   s(   t | j|ƒƒ }|  | j|¡ | ¡  d S r   )r"  rL   rô  rª  rŸ  )r>   ÚsnamerØ  r   r   r   r¬  ]  s    z#TestSyncManagerTypes.test_semaphorec                 C   s   | j dd d S )Nr®  )rý  )r¬  r`   r   r   r   r¯  b  s    z+TestSyncManagerTypes.test_bounded_semaphorec                 C   s   |  ¡  | ¡  d S r   rû  rö  r   r   r   Ú_test_conditione  s    z$TestSyncManagerTypes._test_conditionc                 C   s   | j  ¡ }|  | j|¡ d S r   )rL   r»  rô  rþ  r÷  r   r   r   Útest_conditionj  s    
z#TestSyncManagerTypes.test_conditionc                 C   s   |  ¡  d S r   )r  rö  r   r   r   Ú_test_barriern  s    z"TestSyncManagerTypes._test_barrierc                 C   s   | j  d¡}|  | j|¡ d S rb   )rL   rý  rô  r   r÷  r   r   r   r	  s  s    z!TestSyncManagerTypes.test_barrierc                 C   s(   | W d   ƒ n1 s0    Y  d S r   r   rö  r   r   r   Ú
_test_poolw  s    zTestSyncManagerTypes._test_poolc                 C   s    | j jdd}|  | j|¡ d S )Nrg  r?  )rL   r–  rô  r  r÷  r   r   r   Ú	test_pool}  s    zTestSyncManagerTypes.test_poolc                 C   s   d S r   r   rö  r   r   r   Ú_test_queue  s    z TestSyncManagerTypes._test_queuer   c                 C   s6   t | j|ƒdƒ}| d¡ | d¡ |  | j|¡ d S )Nr£   rc   rb  )r"  rL   rd   rô  r  )r>   ZqnamerØ  r   r   r   Ú
test_queue‹  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 ]}qd S r   )r©  Úreverse)rƒ   rz  r1  r   r   r   Ú
_test_list–  s
    zTestSyncManagerTypes._test_listc                 C   s6   | j  ¡ }| d¡ |  | j|¡ |  t|ƒd¡ d S )Nrc   r   )rL   r«   rÛ   rô  r  rW   rt   r÷  r   r   r   r`  ¢  s    

zTestSyncManagerTypes.test_listc                 C   s   d S r   r   rö  r   r   r   Ú
_test_dict©  s    	zTestSyncManagerTypes._test_dictc                 C   s4   | j  ¡ }d|d< |  | j|¡ |  t|ƒd¡ d S )Nrc   r™  r   )rL   rm  rô  r  rW   rt   r÷  r   r   r   rq  ´  s    
zTestSyncManagerTypes.test_dictc                 C   s   |  d¡ d S r­  )ræ   rö  r   r   r   Ú_test_value»  s    z TestSyncManagerTypes._test_valuec                 C   s>   | j  dd¡}|  | j|¡ |  |jd¡ |  | ¡ d¡ d S )NrÚ   rO   r£   )rL   r   rô  r	  rW   rX   r­   r÷  r   r   r   r>  Á  s    zTestSyncManagerTypes.test_valuec                 C   s   d S r   r   rö  r   r   r   Ú_test_arrayÇ  s    z TestSyncManagerTypes._test_arrayc                 C   s$   | j  dddg¡}|  | j|¡ d S )NrÚ   r   rO   )rL   rR  rô  r
  r÷  r   r   r   rU  Î  s    zTestSyncManagerTypes.test_arrayc                 C   s   d S r   r   rö  r   r   r   Ú_test_namespaceÒ  s    z$TestSyncManagerTypes._test_namespacec                 C   s(   | j  ¡ }d|_d|_|  | j|¡ d S rè  )rL   r„  r1  r2  rô  r  r÷  r   r   r   r…  ×  s    
z#TestSyncManagerTypes.test_namespaceN)r  )r  )r«  )r   )*rG   rH   rI   r   rÒ  rV  rë  r   r  r2  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  rq  r	  r>  r
  rU  r  r…  r   r   r   r   rê  ó  sb   











	






rê  c                   @   s   e Zd Zdd„ ZdS )ÚMiscTestCasec                 C   s   t j| ttjddgd d S )NÚSUBDEBUGr)  )ÚextraZ	blacklist)r   Zcheck__all__r   r"  r`   r   r   r   Útest__all__ß  s    ÿzMiscTestCase.test__all__N)rG   rH   rI   r  r   r   r   r   r  Þ  s   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 r   )r   r   Ú	_danglingr	   r°   Údanglingr¸   r   r   r   r•  è  s    
ÿzBaseMixin.setUpClassc                 C   s€   t j ¡  ttjjƒt| jd ƒ }|r@dt j_t 	d|› ¡ d }tt
jƒt| jd ƒ }|rxdt j_t 	d|› ¡ d }d S )Nr   TúDangling processes: rO   úDangling threads: )r  r   rß  ræ   r   r   r  r  rð  rñ  r°   )rƒ   rK   rM   r   r   r   rš  í  s    
zBaseMixin.tearDownClassN)rG   rH   rI   r2  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eejƒZdS )rÔ  rK   N)rG   rH   rI   rj   r   r}   ro  r”  rm   rˆ   r©   r–  r‰   r   r}  r  r¤  r«  r®  r»  r§   rý  r   rR  r:  rQ  r   r   r   r   rÔ     s*   
















rÔ  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 )ÚManagerMixinrL   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|i |¤ŽS r   )rL   r–  )rƒ   rB   rC   r   r   r   r–  *  s    zManagerMixin.Poolc                    s   t ƒ  ¡  t ¡ | _d S r   )r”  r•  r   rT  rL   r¸   r˜  r   r   r•  .  s    
zManagerMixin.setUpClassc                    sÊ   t  ¡ }d}tt ¡ ƒdkrjt  |¡ |d9 }t  ¡ | }|dkrdtj_t 	dt ¡ › d|› d¡ qjqt
 ¡  | j ¡ d	kr¢dtj_t 	d
¡ t 	| j ¡ ¡ | j ¡  | j ¡  d | _tƒ  ¡  d S )Nrô   rO   r£   r»  Trí  rî  rï  r   z5Shared objects which still exist at manager shutdown:)r@   rA   rt   r   r©   r¡   r  r   rð  rñ  rî   rï   rL   Z_number_of_objectsZ_debug_infor  rŒ   r”  rš  )rƒ   rò  rD   rÏ  r˜  r   r   rš  3  s.    
ÿþ



zManagerMixin.tearDownClass)rG   rH   rI   rj   r   r}   rf  ÚoperatorÚ
attrgetterr   r}  r  r¤  r«  r®  r»  r§   rý  r   rR  r«   rm  r„  r2  r–  r•  rš  rá  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 )ÚThreadsMixinrM   N)rG   rH   rI   rj   r   Údummyr}   ro  r”  rm   r©   r–  r‰   r   r}  r  r¤  r«  r®  r»  r§   rý  r   rR  r   r   r   r   r  U  s$   r  c                    s<  | d }t ƒ }h d£}| ¡ D ]Ü\}}t|tƒs2qt|tƒrÂ|tu rFq|jD ]r}d| ¡  |dd …  }|| ¡ d  }	G dd„ d||	tj	ƒ}
|dkr¤t
 d	¡|
ƒ}
| |
_|
_||
_|
| |< qLqt|tj	ƒrG d
d„ d|tƒ}
| |
_|
_||
_|
| |< qd d g‰ d g‰‡ ‡‡fdd„}‡ ‡fdd„}|| d< || d< d S )NrG   >   rM   rK   rL   ZWithrO   ÚMixinc                   @   s   e Zd ZdS ©z*install_tests_in_module_dict.<locals>.TempNr  r   r   r   r   ÚTemp|  s   r  rL   r.  c                   @   s   e Zd ZdS r  r  r   r   r   r   r  „  s   c                     sÌ   t  t¡ t j ¡  t jj ¡ ˆ d< tj ¡ ˆ d< t jddˆd< zt j	ˆdd W n  t
yt   t ˆd ¡‚Y n0 tj d¡r¬zt  ¡ } W n tyª   t d¡‚Y n0 tƒ  t ¡  t  ¡  t¡ d S )	Nr   rO   T)Ú
allow_noner¸  z start method not supportedÚlinuxz1OSError raises on RLock creation, see issue 3111!)r   rº  r»  r   Ú_cleanupr  r	   r°   rú   r¶  r7   r8   r9   rè   rû   r½  r¤  r1  r:   r   Úget_temp_dirr'  r(  r,  rA  ©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 ƒ }|rXd} dt j_t 	d|› ¡ d }tt
jƒtˆ d ƒ }|r’d} dt j_t 	d|› ¡ d }| r¤t d¡ tj ¡  d S )	NFr   Tr¸  r  rO   r  r  )r  r   rß  r   r¶  ræ   r   r  rð  rñ  r°   r@   r¡   r   Ú_cleanup_tests)Z
need_sleeprK   rM   )r  r"  r   r   ÚtearDownModule£  s$    

z4install_tests_in_module_dict.<locals>.tearDownModuler$  r&  )Úglobalsr  r   rª   rÎ  rJ   r\   Ú
capitalizer8   ÚTestCaser   Úrequires_hashdigestrG   rI   rH   r‹  )Zremote_globsr#  rH   Zlocal_globsZ	ALL_TYPESr    ÚbaseÚtype_Znewnamer  r  r$  r&  r   r!  r   Úinstall_tests_in_module_dictm  s:    



r-  )r'   )¶r8   Zunittest.mockr   rj  r@   r  r¢  rè   r4   rî   r2  rÄ   rS  r  r¤  r3  rï  rÞ  r  ré  rì   rä  Ztest.supportr  Ztest.support.script_helperr   r   r   Úimport_moduler   Z*skip_if_broken_multiprocessing_synchronizer°   rr  r   Zmultiprocessing.dummyZmultiprocessing.heapZmultiprocessing.managersrî  Úmultiprocessing.queuesr   r   ÚHAVE_SEND_HANDLErk  ÚImportErrorZmultiprocessing.sharedctypesr   r	   r×  r
   Z	HAS_SHMEMrV  Zcheck_sanitizerr9   r   r   r   r    r   r"   r)  r,  rÔ   rP   rl  rm  rn  r"  ZHAVE_GETVALUErû   rC  r&   r*   r5   ra  r»  Zctypesr.   r/   r0   r1   r‹  r:   r;   rJ   r^   ra   rg   r}   r5  r>  r]  r`  ra  rœ  r§  r°  rØ  rÛ  rì  rí  rû  rü  r+  rM  r[  r†  r‡  rˆ  rŠ  r‹  r7   r  r’  r“  rä  ræ  rç  rñ  r  r  rÂ  r  r
  r  r  Úregisterr  r   r  r  r  r  r%  r!  r*  r/  r8  r6  rl  ry  r  r3  r  rœ  r²  r´  r½  rú  r)  r  r&  r7  r>  rD  rR  rS  r\  r]  r^  r_  r`  rg  rn  r  r…  r  r—  r™  rœ  r¦  r²  rZ  rÄ  rØ  rà  rê  r  r  rÔ  r  r  r-  r   r   r   r   Ú<module>   sª  






ÿ

    -W  G6  *39   FS  

	  j(C:
14  "0R
 h8
   %{+E"! 2 "BCHÿ 3) k	=