o
    OZh	                    @   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Zd dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlm Z  e!d	Z"e!d
 d dl#Z#d dl$Z%d dl&Z$d dl'Z$d dl(Z$d dl)Z$d dl*Z$d dl+Z$d dl$m,Z, zd dl$m-Z- e-j.Z/W n e0y   dZ/Y nw zd dl1m2Z2m3Z3 dZ4W n e0y   dZ4Y nw z
d dl$m5Z5 dZ6W n e0y   dZ6Y nw zd dl7Z7W n e0y   dZ7Y nw e8edr$ej9ddr$e :de;dddZ<e	j=>dr3dndZ?dd Z@dd ZAdd ZBe	jCdkrQd dl$mDZD d d! ZEe,jFZGd"ZHdZIeIrad#\ZJZKZLnd$\ZJZKZLeMe"d%d ZNejOd&kZPd d'l&mQZQ d(d) ZRze	Sd*ZTW n   d+ZTY d,d-gZUzd d.lVmWZWmXZXmYZYmZZZ W n e0y   e[ZWd ZX ZYZZY nw d/d0 Z\G d1d2 d2e[Z]G d3d4 d4e[Z^d5d6 Z_G d7d8 d8Z`G d9d: d:e^ZaG d;d< d<e%jbZcG d=d> d>e^Zdd?d@ ZedAdB ZfG dCdD dDe^ZgG dEdF dFe^ZhG dGdH dHe^ZiG dIdJ dJe^ZjG dKdL dLe^ZkG dMdN dNe[ZldOdP ZmG dQdR dRe[ZnG dSdT dTe[ZoG dUdV dVe^ZpG dWdX dXe^ZqG dYdZ dZe^ZrG d[d\ d\e^Zsdd^d_Ztd`da Zudbdc Zvddde ZwG dfdg dge[ZxG dhdi dieyZzdjdk Z{G dldm dme^Z|dndo Z}dpdq Z~G drds dse^ZG dtdu due^Zd dvl)mZmZmZ G dwdx dxe[Zdydz ZG d{d| d|eZG d}d~ d~eZejded ejdedd ejdzeed G dd de^Ze Zdd ZG dd deZejded G dd deZed dZG dd de^ZedG dd de^Ze@dZG dd de^ZG dd de^ZG dd de^ZG dd de^Ze e/dedG dd de^ZG dd de^ZG dd deWZG dd de^Ze e6dedG dd de^ZG dd de^ZG dd de jZG dd de^ZG dd de^ZG dd de jZedG dd de jZdd ZedG dd de jZdd Zdd Zdd Zdd ZG dd de[ZG ddÄ de jZG ddń de jZG ddǄ de jZG ddɄ de jZG dd˄ de jZG dd̈́ de jZG ddτ de jZG ddф de jZG ddӄ de jZG ddՄ de jZe ejOd&kd֡G dd؄ de jZG ddڄ de jZG dd܄ de jZedG ddބ de jZG dd de jZG dd de jZG dd de[ZG dd deZG dd deZG dd deZdd Ze e8e"d de ejOdkde ejdkdG dd de jZdS )    N)support)hashlib_helper)import_helper)	os_helper)socket_helper)threading_helper)warnings_helper_multiprocessingzmultiprocess.synchronize)util)	reductionF)ValuecopyT)shared_memorycheck_sanitizer)addressz(libasan has a pthread_create() dead lock)Z
__cleanenvZ
__isolatedCOVERAGEg     V@g      N@c                 C   
   |  dS )Nlatin)encode)s r   R/var/www/html/lang_env/lib/python3.10/site-packages/multiprocess/tests/__init__.pyr   Y      
r   c                 C   s&   t | tjjr|   |   d S d S N)
isinstancemultiprocessingqueuesQueueclosejoin_threadqueuer   r   r   close_queue]   s   r"   c                 C   s   t j| td d S Ntimeout)r   r   TIMEOUT)processr   r   r   join_processc   s   r(   posix)resource_trackerc                 C   s   t j| |  d S r   )r*   _CLEANUP_FUNCS)namertyper   r   r   _resource_unlinkl      r.   皙?)g=
ףp=?gffffff?gffffff?)r0   r0   r0   HAVE_BROKEN_SEM_GETVALUEwin32waitc                 C   s    |d ur
|dk r
d }t | g|S )N        r3   )handler%   r   r   r   wait_for_handle   s   r7   SC_OPEN_MAX   __main__Ztest_multiprocessing_forkserver)	Structurec_intc_double
c_longlongc               	   C   sN   d} zt d}W n ttfy   Y dS w |dks|| kr dS td|  )zACheck that the system supports enough semaphores to run the test.r9   SC_SEM_NSEMS_MAXNzHThe 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   rG   c                   @      e Zd Zdd Zdd ZdS )TimingWrapperc                 C      || _ d | _d S r   )funcelapsed)selfrK   r   r   r   __init__      
zTimingWrapper.__init__c                 O   s:   t  }z| j|i |W t  | | _S t  | | _w r   )time	monotonicrK   rL   )rM   argskwdstr   r   r   __call__   s    zTimingWrapper.__call__N__name__
__module____qualname__rN   rU   r   r   r   r   rI      s    rI   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 d S N   )CHECK_TIMINGSassertAlmostEqualrM   abr   r   r   assertTimingAlmostEqual   s   z$BaseTestCase.assertTimingAlmostEqualc                 G   s.   z|| }W n
 t y   Y d S w | ||S r   )NotImplementedErrorassertEqual)rM   valuerK   rR   resr   r   r   assertReturnsIfImplemented   s   z'BaseTestCase.assertReturnsIfImplementedc                 G      t d)Nz#shouldn't try to pickle a test case)rf   )rM   rR   r   r   r   
__reduce__      zBaseTestCase.__reduce__N)rW   rX   rY   ALLOWED_TYPESre   rj   rl   __reduce_ex__r   r   r   r   rZ      s    
rZ   c                 C   sZ   z|   W S  ty,   z| jW  Y S  ty+   z| jW  Y  Y S  ty*   tw w w r   )	get_valuerC   Z_Semaphore__value_valuerf   rM   r   r   r   rp      s   
rp   c                   @      e Zd Zdd ZdS )DummyCallablec                 C   s   t |tsJ |d d S N   )r   rt   put)rM   qcr   r   r   rU      s   zDummyCallable.__call__N)rW   rX   rY   rU   r   r   r   r   rt          rt   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ed)d*d+d, Zed-d. Zd/d0 ZedRd3d4Z d5d6 Z!d7d8 Z"d9d: Z#ed;d< Z$d=d> Z%ed?d@ Z&dAdB Z'ei fdCdDZ(dEdF Z)dGdH Z*edSdJdKZ+dLdM Z,dNdO Z-dPdQ Z.d2S )T_TestProcessr[   r]   c                 C   s   | j dkr| d| j  |  }|j}| |  | |j  | |t	 | t
|dk | |jt  | |jd  d S )Nr]   test not appropriate for {}r   )TYPEskipTestformatcurrent_processauthkey
assertTrueis_alivedaemonassertIsInstancebyteslenrg   identrA   getpidexitcode)rM   currentr   r   r   r   test_current   s   
z_TestProcess.test_currentc                 C   sz   | j dkr| d| j  | j| jd}| |j|  j | j| jdd}| |j | j| jdd}| 	|j d S )Nr]   r}   targetTr   r   F)
r~   r   r   Process_testrg   r   r   r   assertFalse)rM   Zproc0Zproc1proc2r   r   r   test_daemon_argument  s   
z!_TestProcess.test_daemon_argumentc                 O   sV   |   }|| || ||j | jdkr)|t|j ||j d S d S )Nr]   )r   rw   r,   r~   r   r   pid)clsrx   rR   rS   r   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 )Nr]   r}   FZduplexr   rR   )r~   r   r   assertIsNoneparent_processPiper   _test_send_parent_processstartjoinrecvrg   r   r   rA   r   r,   )rM   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   )multiprocess.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sKt
d| }| |d	 d S )
Nr]   r}   Fr   r   r$   z(Could not communicate with child processalive	not alive)r~   r   r   r   r   _test_create_grandchild_processr   pollr   LONG_TIMEOUTAssertionErrorr   rg   	terminater   )rM   r   r   r   Zparent_process_statusr   r   r   _test_parent_process1  s"   
z!_TestProcess._test_parent_processc                 C   s(   | j | j|fd}|  td d S )Nr   i,  )r   _test_report_parent_statusr   rP   sleep)r   r   r   r   r   r   r   J  s   z,_TestProcess._test_create_grandchild_processc                 C   sV   ddl m} ||  rdnd | jtjd ||  r&d d S d d S )Nr   r   r   r   r$   )r   r   r   r   r   r   SHORT_TIMEOUTr   r   r   r   r   P  s   "z'_TestProcess._test_report_parent_statusc                 C   s  |  d}|  }|ddf}ddd}d}| j| j|||d}d|_|  }| jd	kr3| |j|j | |	 d
 | |jd | 
||   | t|  tu  | |jd  |  | |jd  | |	 d | ||   | | |dd   | | | | | |j | jd	kr| | |j | | |j |  | |jd | |	 d
 | 
||   t| d S )Nr_         gRQ@)helloZbyeZSomeProcess)r   rR   kwargsr,   Tr]   Fr   )r   Eventr   r   r   r   r~   rg   r   r   assertNotInactive_childrenr   typelistr   r   assertIngetr,   r   r   r"   )rM   rx   erR   r   r,   r   r   r   r   r   test_processW  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 )Nr]   r}   r_   r   )r~   r   r   	threadingmain_thread	native_idr   r   "_test_process_mainthread_native_idr   r   r   r"   assertNotEqual)rM   Zcurrent_mainthread_native_idrx   r   Zchild_mainthread_native_idr   r   r   !test_process_mainthread_native_id  s   


z._TestProcess.test_process_mainthread_native_idc                 C   s   t  j}|| d S r   )r   r   r   rw   )r   rx   Zmainthread_native_idr   r   r   r        
z/_TestProcess._test_process_mainthread_native_idc                 C      t d d S )Nd   rP   r   r   r   r   r   _sleep_some     z_TestProcess._sleep_somec                 C   s   t | d S r   r   )r   delayr   r   r   _test_sleep  r   z_TestProcess._test_sleepc              
      s  | j dkr| d| j  | j| jd d _   |   d | 	 | 
  |  jd  t j}| |dd  | |jd |   d | |dd  | |jd |   d td |  ttd	r fd
d}ttj|}ztd | | d  W td ttj| ntd ttj| w | | d  | |jd |   d |  | 
      jS )Nr]   r}   r   Tr   r5   r@   r_   alarmc                     s   t d  )Nzjoin took too long: %sRuntimeErrorrR   r   r   r   handler     z+_TestProcess._kill_process.<locals>.handler
   F)r~   r   r   r   r   r   r   rg   r   r   r   r   rI   r   re   rL   rP   r   hasattrsignalSIGALRMr   r   )rM   methr   r   Zold_handlerr   r   r   _kill_process  sB   






z_TestProcess._kill_processc                 C   0   |  tjj}tjdkr| |tj  d S d S Nnt)	r   r   r   r   rA   r,   rg   r   SIGTERMrM   r   r   r   r   test_terminate     
z_TestProcess.test_terminatec                 C   r   r   )	r   r   r   killrA   r,   rg   r   SIGKILLr   r   r   r   	test_kill  r   z_TestProcess.test_killc                 C   sH   zt  }W n ty   d}Y nw | t|tu  | |dk d S r^   )r   	cpu_countrf   r   r   int)rM   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)rg   r   r   r   r   rP   r   DELTAr   r   r   r   r   rM   r   r   r   r   test_active_children  s   z!_TestProcess.test_active_childrenc                 C   sV   | | t|dk r'tdD ]}| j| j|||g fd}|  |  qd S d S )Nr   r   )r   r   ranger   _test_recursionr   r   )r   r   idir   r   r   r   r     s   

z_TestProcess._test_recursionT#fails with is_dill(obj, child=True)c                 C   s~   | j dd\}}| |g  tt g }| r$||  | sg dgddgddgdgddgddgg}| || d S )NFr   r   r_   )	r   r   rP   r   r   r   appendr   rg   )rM   r   r   resultexpectedr   r   r   test_recursion  s    
	z_TestProcess.test_recursionc                 C      | d d S )N      $@r3   r   eventr   r   r   _test_sentinel  r   z_TestProcess._test_sentinelc                 C   s   | j dkr| d| j  |  }| j| j|fd}| t |j W d    n1 s.w   Y  |	  | 
|j |j}| |t | t|dd |  |  | t|dd d S )Nr]   r}   r   r5   r$   r_   )r~   r   r   r   r   r   assertRaisesrD   sentinelr   
addCleanupr   r   r   r   r7   setr   )rM   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   rcrx   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?w   Y  |d  |  | |	 d | |jd |  | 
t |	  W d    n1 stw   Y  | 
t |  W d    n1 sw   Y  | 
t |  W d    n1 sw   Y  |  t|}~t  | | d  t| d S )Nr]   r}   rx   )r   r   TFr   )r~   r   r   r   r   r  r   r   rg   r   r   rD   r   rw   r   r   r   weakrefrefgccollectassertIsr"   )rM   rx   r   wrr   r   r   
test_close)  s<   






z_TestProcess.test_closec                    s<   j dkr d j  t }tjd}|dkr"|r dndnd} fdd	t|D }|D ]}|	  q1|D ]}t
| q:|D ]	} |jd
 qC fdd	t|D }|D ]}|	  qZtd |D ]}|  qh|D ]}t
| qqtjdkrtj g}tjdkr|tj  |D ]} |j| qd S d S )Nr]   r}   r   spawnr_   rv   r   c                    s   g | ]
} j  jd dqS )){Gz?r   )r   r   .0r   rr   r   r   
<listcomp>R  s    z4_TestProcess.test_many_processes.<locals>.<listcomp>r   c                    s   g | ]	} j  jd qS )r   )r   r   r  rr   r   r   r  [  s    MbP?r   darwin)r~   r   r   r   get_start_methodrA   environr   r   r   r(   rg   r   rP   r   r   r,   r   r   r  platformr   r   r   )rM   smZtravisNprocsr   Z	exitcodesr   rr   r   test_many_processesI  s@   











z _TestProcess.test_many_processesc                 C   sn   t  }t|}|  }| j|||fd}~|  |  t  | 	| d  | 
| d t| d S )Nr   rv   )rt   r  r  r   r   r   r   r  r	  r
  rg   r   r"   )rM   ry   r  rx   r   r   r   r   test_lose_target_refm  s   
z!_TestProcess.test_lose_target_refc                 C   s   | t  |  d S r   )rw   r   Zfd_countr4   )rM   evtrx   r   r   r   _test_child_fd_inflationz     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 ]}|  q7z*fddt|D }	t
t|d| W    |D ]}|  q\t d S    |D ]}|  qot w )	Nr]   r}   forkrv   c                    s    g | ]}j j fd qS r   )r   r  r  r  rx   rM   r   r   r    s    z8_TestProcess.test_child_fd_inflation.<locals>.<listcomp>c                       g | ]}   qS r   r   r  rx   r   r   r        r_   )r~   r   r   r   r  r   r   r   r   rg   r   r   r   r"   )rM   r  r  r  r   Z	fd_countsr   r!  r   test_child_fd_inflation  s0   




z$_TestProcess.test_child_fd_inflationc                    s>    fdd} fdd}t j|d  t j|dd  d S )Nc                         t d    d S )N      ?rP   r   r   r   r  r   r   func1     
z2_TestProcess._test_wait_for_threads.<locals>.func1c                      r'  )N   )rP   r   clearr   r*  r   r   func2  r,  z2_TestProcess._test_wait_for_threads.<locals>.func2r   Tr   )r   Threadr   )rM   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 )Nr]   r}   r   )
r~   r   r   r   r   r1  r   r   r   is_set)rM   r  procr   r   r   test_wait_for_threads  s   
z"_TestProcess.test_wait_for_threadsc                 C   sT   |  D ]\}}|dkrt }|  n|dksJ d }tt|d  q|  d S )Nr   remove)itemsioStringIOr   setattrr  r   )rM   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}|D ]?}tt|}tt|| z+|  }| j| j|fd}|	  |
  | |  | |jd W tt|| qtt|| w qd S )Nr   stdoutstderrr   )r7  r8  r   getattrr  r9  r   r   r=  r   r   r   r2  rg   r   )rM   streamsr:  r<  
old_streamr  r3  r   r   r   test_error_on_stdio_flush_1  s$   
z(_TestProcess.test_error_on_stdio_flush_1c                 C   s   dD ]A}dD ]<}t t|}z.|  }| j| j|||ifd}|  |  | |  | 	|j
d W tt|| qtt|| w qd S )Nr>  )r   r5  r   r   )rA  r  r   r   r=  r   r   r   r2  rg   r   r9  )rM   r:  r;  rC  r  r3  r   r   r   test_error_on_stdio_flush_2  s   

z(_TestProcess.test_error_on_stdio_flush_2r5   c                 C   s   t | |  d S r   r)  )rM   r  r   r   r   r   _sleep_and_set_event     
z!_TestProcess._sleep_and_set_eventc           
      C   s  | j dkr| d| j  t }|dkr| d| ddlm} |  d}|  }| j	| j
||fd}|  |j}t|| t|d  |  }| j	| j
|fd}	|	  |	  | |  | |	jd |  | |  | |jd	 d S )
Nr]   r}   
forkserverr   )_forkserverr(  r          @)r      )r~   r   r   r   r  Zmultiprocess.forkserverrI  ensure_runningr   r   rF  r   Z_forkserver_pidrA   r   rP   r   r   r   r2  rg   r   r   )
rM   signumr  rI  r   r  r3  r   Zevt2r   r   r   r   check_forkserver_death  s.   
z#_TestProcess.check_forkserver_deathc                 C   s   |  tj d S r   )rN  r   SIGINTrr   r   r   r   test_forkserver_sigint     z#_TestProcess.test_forkserver_sigintc                 C   s   t jdkr| tj d S d S r   )rA   r,   rN  r   r   rr   r   r   r   test_forkserver_sigkill  s   
z$_TestProcess.test_forkserver_sigkill)r   Nr5   )/rW   rX   rY   rn   r   r   classmethodr   r   r   r   r   r   r   rE   
skipUnlessr   _HAVE_THREAD_NATIVE_IDr   r   r   r   r   r   r   r   r   r   skipIfr   r   r  r  r  r  r  r  r&  r1  r4  r=  rD  rE  rF  rN  rP  rR  r   r   r   r   r{      sn    
	


(



3




 $

&r{   c                   @   ,   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   rN   r   
child_connparent_connrr   r   r   r   rN   "  s   z_UpperCaser.__init__c                 C   s<   | j   t| jjd D ]
}| j|  q| j  d S r   )r[  r   iterrZ  r   r   upperrM   r   r   r   r   run&  s   
z_UpperCaser.runc                 C   s&   t |tu sJ | j| | j S r   )r   strr[  r   r   r^  r   r   r   submit,  s   
z_UpperCaser.submitc                 C   s$   | j d  | j   | j  d S r   )r[  r   r   rZ  rr   r   r   r   stop1  s   
z_UpperCaser.stopN)rW   rX   rY   rN   r_  ra  rb  r   r   r   r   rY     s
    rY  c                   @   s@   e Zd ZdZdd Zdd Zedd Zedd	 Zd
d Z	dS )_TestSubclassingProcessr[   c                 C   sL   t  }d|_|  | |dd | |dd |  |  d S )NTr   ZHELLOZworldZWORLD)rY  r   r   rg   ra  rb  r   )rM   Z
uppercaserr   r   r   test_subclassing:  s   z(_TestSubclassingProcess.test_subclassingc                 C   s   | j dkr| d| j  tj}| tj| | j| j|fd}|	  |
  t|dd}| }| d| | d| W d    d S 1 sKw   Y  d S )Nr]   r}   r   utf-8encodingZeroDivisionErrorz__init__.py)r~   r   r   r   TESTFNr   unlinkr   _test_stderr_flushr   r   openreadr   )rM   testfnr3  ferrr   r   r   test_stderr_flushC  s   
"z)_TestSubclassingProcess.test_stderr_flushc                 C   s8   t |t jt jB t jB }t|ddddt_dd  d S )Nwrf  Frh  closefdr_   r   )rA   rm  O_WRONLYO_CREATO_EXCLr  r@  )r   ro  fdr   r   r   rl  T  s   z*_TestSubclassingProcess._test_stderr_flushc                 C   s:   t |t jt jB t jB }t|ddddt_t| d S )Nrs  rf  Frt  )rA   rm  rv  rw  rx  r  r@  r  )r   reasonro  ry  r   r   r   _test_sys_exit[  s   z&_TestSubclassingProcess._test_sys_exitc           	   	   C   sF  | j dkr| d| j  tj}| tj| g ddfD ]G}| j| j||fd}d|_	|
  t| | |jd t|dd	}| }W d    n1 sQw   Y  | | t| t| qg d
}|D ]4\}}| j|d" | jtj|d}d|_	|
  t| | |j| W d    n1 sw   Y  qld S )Nr]   r}   )r_   r      zignore thisr   Tr_   rf  rg  )))Tr_   )Fr   ))   r~  )r   r   )r   r   r   )r~   r   r   r   rj  r   rk  r   r{  r   r   r(   rg   r   rm  rn  rstripr`  rA   subTestr  r  )	rM   ro  rz  r   rp  contentcasesrR   r   r   r   r   test_sys_exita  s8   

z%_TestSubclassingProcess.test_sys_exitN)
rW   rX   rY   rn   re  rr  rT  rl  r{  r  r   r   r   r   rc  6  s    	

rc  c                 C   s   t | dr	|  S |  dkS )Nemptyr   )r   r  qsizer$  r   r   r   queue_empty     
r  c                 C   s   t | dr	|  S |  |kS )Nfull)r   r  r  )rx   maxsizer   r   r   
queue_full  r  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   )r4   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 )Nr  r  r   TFr_   r   r|     rv      r   r$   )r   r   r   r  r   r   rg   r  r  rw   
put_nowaitrP   r   r   rI   r   pyqueueFullre   rL   TIMEOUT1TIMEOUT2TIMEOUT3r   r4   r   r"   )rM   MAXSIZEr!   r  r  r3  rw   r  r   r   r   test_put  sR   




z_TestQueue.test_putc                 C   s<   |   |d |d |d |d |  d S )Nr   r|  r  rv   )r4   rw   r   r   r!   r  r  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   r|  r_   r$   r  rv   r   )r   r   r   r  r   r   rg   r  r   r4   rP   r   r   r   
get_nowaitrI   r   r  Emptyre   rL   r  r  r  r   r"   )rM   r!   r  r  r3  r   r  r   r   r   test_get  sF   


z_TestQueue.test_getc                 C   s   t ddD ]}|| qd S )Nr   r-  )r   rw   )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 ]
}| 
| | q)| tj|jd |  t| d S )Nr   r   Tr-  F)r   r   rw   rP   r   r   r   r  r   r   rg   r   r   r  r  r   r"   )rM   r!   r   r   r   r   r   	test_fork&  s   
z_TestQueue.test_forkc                 C   s   |   }z
| | d W n ty   | d Y nw |d | | d |d | | d |  | | d |  | | d t| d S )Nr   zqsize method not implementedr_   rv   r   )r   rg   r  rf   r   rw   r   r"   rM   rx   r   r   r   
test_qsizeB  s   

z_TestQueue.test_qsizec                 C   s(   t |jd D ]}tt |  qd S r   )r\  r   rP   r   r   	task_done)r   rx   objr   r   r   _test_task_doneR  s   

z_TestQueue._test_task_donec                    s       fddtdD }|D ]	}d|_|  qtdD ]} | q    |D ]} d  q.|D ]}|  q8t  d S )Nc                    s   g | ]}j j fd qS r   )r   r  r  r!   rM   r   r   r  [  s    z-_TestQueue.test_task_done.<locals>.<listcomp>r  Tr   )JoinableQueuer   r   r   rw   r   r"   )rM   workersr   r   r   r  r   test_task_doneX  s   

z_TestQueue.test_task_donec              
   C   s   t  ^ d}t|d ddd}|d W d    n1 s w   Y  tt  zt| W n t	j
yB   | d Y nw W d    n1 sMw   Y  W d    d S W d    d S 1 sew   Y  d S )NZimported_by_an_imported_modulez.pyrs  rf  rg  a  if 1:
                    import multiprocess as 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   Ztemp_cwdrm  writer   ZDirsOnSysPathrA   getcwd
__import__r  r  fail)rM   module_namerp  r   r   r   test_no_import_lock_contentionn  s    
"z)_TestQueue.test_no_import_lock_contentionc                 C   sH   t  }t }| tj|jdd t | }| |d t	| d S )NTg?r0   )
r   r   rP   rQ   r   r  r  r   assertGreaterEqualr"   )rM   rx   r   deltar   r   r   test_timeout  s   z_TestQueue.test_timeoutc              	   C   s4  | j dkr| d| j  G dd dt}tj % |  }||  |d | 	|j
tjd t| W d    n1 sCw   Y  tj C | jdd}||  |d z
| | d W n	 tyr   Y nw | 	|j
tjd | 	|  t| W d    d S 1 sw   Y  d S )	Nr[   r}   c                   @   rs   )zF_TestQueue.test_queue_feeder_donot_stop_onexc.<locals>.NotSerializablec                 S      t r   )rC   rr   r   r   r   rl        zQ_TestQueue.test_queue_feeder_donot_stop_onexc.<locals>.NotSerializable.__reduce__NrW   rX   rY   rl   r   r   r   r   NotSerializable  rz   r  Tr$   r_   r  )r~   r   r   objecttestr   captured_stderrr   rw   r   r   r   r"   rg   r  rf   r  )rM   r  rx   r   r   r   "test_queue_feeder_donot_stop_onexc  s.   




"z-_TestQueue.test_queue_feeder_donot_stop_onexcc                    s   | j dkr| d| j  G dd dt G  fdddtjj}  }tj	 # |t
 d}|| |d | |jtjd	 W d    n1 sPw   Y  | |j | |j d S )
Nr[   r}   c                   @       e Zd ZdZdd Zdd ZdS )zK_TestQueue.test_queue_feeder_on_queue_feeder_error.<locals>.NotSerializablezMock unserializable objectc                 S   s   d| _ d| _d S NF)reduce_was_called on_queue_feeder_error_was_calledrr   r   r   r   rN     rO   zT_TestQueue.test_queue_feeder_on_queue_feeder_error.<locals>.NotSerializable.__init__c                 S   s
   d| _ tNT)r  rC   rr   r   r   r   rl     s   zV_TestQueue.test_queue_feeder_on_queue_feeder_error.<locals>.NotSerializable.__reduce__N)rW   rX   rY   __doc__rN   rl   r   r   r   r   r    s    r  c                       s    e Zd ZdZe fddZdS )zE_TestQueue.test_queue_feeder_on_queue_feeder_error.<locals>.SafeQueuez1Queue with overloaded _on_queue_feeder_error hookc                    s&   t | trt | rd|_d S d S d S r  )r   rC   r  )r   r  r  r   r   _on_queue_feeder_error  s
   

z\_TestQueue.test_queue_feeder_on_queue_feeder_error.<locals>.SafeQueue._on_queue_feeder_errorN)rW   rX   rY   r  staticmethodr  r   r  r   r   	SafeQueue  s    r  )ctxTr$   )r~   r   r   r  r   r   r   r  r   r  get_contextrw   r   r   r   r  r  )rM   r  Znot_serializable_objrx   r   r  r   'test_queue_feeder_on_queue_feeder_error  s   



	z2_TestQueue.test_queue_feeder_on_queue_feeder_errorc              	   C   s   t  t  fD ];}|  | td |d W d    n1 s$w   Y  | td |  W d    n1 s>w   Y  qd S )Nz	is closedfoo)r   r   r  r   assertRaisesRegexrD   rw   r   r  r   r   r   $test_closed_queue_put_get_exceptions  s   
z/_TestQueue.test_closed_queue_put_get_exceptionsN)rW   rX   rY   rT  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r   r   r   r    s&    
;
	5

 &r  c                   @   $   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)Lockrg   acquirereleaser   rD   r   ThreadErrorrM   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  )RLockrg   r  r  r   r   r   r  r   r   r   
test_rlock  s   z_TestLock.test_rlockc                 C   s.   |   	 W d    d S 1 sw   Y  d S r   r  rr   r   r   r   test_lock_context  s   
"z_TestLock.test_lock_contextN)rW   rX   rY   r  r  r  r   r   r   r   r    s    
r  c                   @   rX  )
_TestSemaphorec                 C   s   |  dt| | | d |  dt| | | d |  dt| | |dd |  dt| | | d  |  dt| | | d  |  dt| d S )Nr   Tr_   r   F)rj   rp   rg   r  r  rM   semr   r   r   _test_semaphore  s   z_TestSemaphore._test_semaphorec                 C   sT   |  d}| | | | d  | dt| | | d  | dt| d S )Nr   r|  r  )	Semaphorer  rg   r  rj   rp   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     
z%_TestSemaphore.test_bounded_semaphorec                 C   s   | j dkr| d| j  | d}t|j}| |dd | |jd | |dd d | |jd | |dt	d | |jd | |dt
d | |jt
 | |tdd | |jt d S )Nr[   r}   r   Fr5   Tr$   )r~   r   r   r  rI   r  rg   re   rL   r  r  r  )rM   r  r  r   r   r   r    s   


z_TestSemaphore.test_timeoutN)rW   rX   rY   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  r4   )r   condsleepingwokenr%   r   r   r   rp  /  s
   
z_TestCondition.fc              	   C   s\   t dD ]}z
| |krW  nW n
 ty   Y  nw tt qtt | || d S Nr   )r   rf   rP   r   r   rj   )rM   rK   rh   r   r   r   r   assertReachesEventually7  s   

z&_TestCondition.assertReachesEventuallyc                 C   s\   | j dkr,z|j |j  }| |d | |j d W d S  ty+   Y d S w d S )Nr[   r   )r~   Z_sleeping_countrp   Z_woken_countrg   Z_wait_semaphorerf   )rM   r  Zsleepersr   r   r   check_invariantB  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   Tr_   r   )	Conditionr  r   rp  r   r   r   r   r   r0  r  rP   r   r   rj   rp   notifyr  r  )rM   r  r  r  r   r   r   r   test_notifyM  s6   





z_TestCondition.test_notifyc                    s  |   }| d}| d tdD ]4}| j| j|| tfd}d|_|  | |j	 t
j| j|| tfd}d|_|  | |j	 qtdD ]}|  qKtdD ]}   qV| dt  | | tdD ]2}| j| j|| fd}d|_|  | |j	 t
j| j|| fd}d|_|  | |j	 qmtdD ]}|  qtt | dt  |  |  |  |  fddd | | d S )Nr   r|  r   Tr  c                         t  S r   rp   r   r  r   r   <lambda>      z0_TestCondition.test_notify_all.<locals>.<lambda>)r  r  r   r   rp  r  r   r   r   r   r   r0  r  rj   rp   r  rP   r   r   
notify_allr  r  rM   r  r  r   r   rT   r   r  r   test_notify_allz  sP   








z_TestCondition.test_notify_allc                    sP  |   }| d}| d tdD ]2}| j| j|| fd}d|_|  | |j t	j
| j|| fd}d|_|  | |j qtdD ]}|  qItt | dt  |  |jdd |  |  fdd	d |  |jd
d |  |  fdd	d |  |jdd |  | dt  | | d S )Nr   r|  r   Tr  r   )nc                      r  r   r  r   r  r   r   r    r  z._TestCondition.test_notify_n.<locals>.<lambda>r  c                      r  r   r  r   r  r   r   r    r  )r  r  r   r   rp  r   r   r   r   r   r0  r  rP   r   r   rj   rp   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  rI   r4   r  r  r  rg   re   rL   )rM   r  r4   ri   r   r   r   r    s   
z_TestCondition.test_timeoutc                    sr   |- d _ |  | fdd}|r j dkr'td W d    d S W d    d S 1 s2w   Y  d S )Nr   c                      
    j dkS Nr  rh   r   stater   r   r       
 z0_TestCondition._test_waitfor_f.<locals>.<lambda>r  r_   )rh   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 s=w   Y  t
dD ]$}td	 |   j	d
7  _	|  W d    n1 sew   Y  qFt| | |jd d S )Nr   r@   r   Tc                      r  Nr   r  r   r  r   r   r    r  z-_TestCondition.test_waitfor.<locals>.<lambda>r   r  r  r_   )r  r   r   r  r   r   r  r   rg   rh   r   rP   r   r  r(   r   )rM   r  r   r   r   r   r  r   test_waitfor  s&   


z_TestCondition.test_waitforc                    s   |   |M d}t }|j fdd|d}t | }|s;|d |  k r.|d k rKn nd|_W d    d S W d    d S W d    d S W d    d S 1 sVw   Y  d S )Nr0   c                      r  r  r  r   r  r   r   r    r  z8_TestCondition._test_waitfor_timeout_f.<locals>.<lambda>r$   g333333?r   T)r  rP   rQ   r  rh   )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 ]$}td | | jd	7  _|  W d    n1 sUw   Y  q6t| | |j d S )
Nr   r   Fr   Tr$   r|  r  r_   )r  r   r  r   r  r   r   r   r  r   r   r   rP   r   rh   r  r(   )rM   r  r  r  r  r   r   r   r   r   test_waitfor_timeout   s&   



z#_TestCondition.test_waitfor_timeoutc                 C   sT   | |   W d    n1 sw   Y  td |d ur(t|tj d S d S r^   )r  rP   r   rA   r   r   rO  )r   ry   r   r   r   r   _test_wait_result8  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rJ| t|jd |  W d    d S 1 sYw   Y  d S )Nr2   r   r0   r   <   )r   ProcessesMixinr  r  rA   r   r  r   r4   r   r  r   r   r   KeyboardInterruptr   )rM   r   ry   r   r   r   r   test_wait_result@  s   

"z_TestCondition.test_wait_resultr   )rW   rX   rY   rT  rp  r  r  r  r  r  r  r  rE   rU  HAS_SHAREDCTYPESr   r  r  r  r	  r   r   r   r   r  -  s(    ->2	






r  c                   @       e Zd Zedd Zdd ZdS )
_TestEventc                 C   s   t t |  d S r   )rP   r   r  r   r   r   r   r   _test_eventW  rG  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 )NFr5   Tr   )r   rI   r4   rg   r2  re   rL   r  r   r.  r   r  r   r   r   )rM   r   r4   r   r   r   r   
test_event\  s&   
z_TestEvent.test_eventN)rW   rX   rY   rT  r  r  r   r   r   r   r  U  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)rM   wrapperr  r   r   r   rN     s   z_DummyList.__init__c                 C   s"   |\| _ | _| j  d| _d S )Nr   )_wrapper_lockZcreate_memoryviewcastr  )rM   r  r   r   r   r    s   z_DummyList.__setstate__c                 C   s   | j | jfS r   )r  r  rr   r   r   r   __getstate__  r   z_DummyList.__getstate__c                 C   s>   | j  | jd  d7  < W d    d S 1 sw   Y  d S Nr   r_   r  r  )rM   _r   r   r   r     s   "z_DummyList.appendc                 C   s4   | j  | jd W  d    S 1 sw   Y  d S r  r  rr   r   r   r   __len__  s   $z_DummyList.__len__N)rW   rX   rY   rN   r  r  r   r  r   r   r   r   r    s    r  c                   C   r   )Nr  r   r   r   r   r   _wait  r   r  c                   @   sB   e Zd ZdZdddZdd Zdd Zd	d
 Zdd Zdd Z	dS )Bunchz
    A bunch of threads.
    Fc           
      C   s   || _ || _|| _| | _| | _| | _|s| j  g }t	|D ]}|j
| jd}d|_|  || q%dd }	t| |	|| _dS )z
        Construct a bunch of `n` threads running the same function `f`.
        If `wait_before_exit` is True, the threads won't terminate until
        do_finish() is called.
        r   Tc                 S   s   | D ]}|   qd S r   )r   )r]   r   r   r   r   finalize  s   
z Bunch.__init__.<locals>.finalizeN)rp  rR   r  	DummyListstartedfinishedr   	_can_exitr   r   r   taskr   r   r   r  r!  
_finalizer)
rM   	namespacerp  rR   r  Zwait_before_exitr]   r   r   r!  r   r   r   rN     s    



zBunch.__init__c              	   C   sv   t  }| j| z| j| j  W | j| | jd | j	 s%J d S | j| | jd | j	 s:J w )N   )
rA   r   r#  r   rp  rR   r$  r%  r4   r2  rM   r   r   r   r   r&    s   z
Bunch.taskc                 C   .   t | j| jk rt  t | j| jk sd S d S r   )r   r#  r  r  rr   r   r   r   wait_for_started     zBunch.wait_for_startedc                 C   r+  r   )r   r$  r  r  rr   r   r   r   wait_for_finished  r-  zBunch.wait_for_finishedc                 C   s   | j   d S r   )r%  r   rr   r   r   r   	do_finish     zBunch.do_finishc                 C   s   |    d S r   )r'  rr   r   r   r   r     r   zBunch.closeNr}  )
rW   rX   rY   r  rN   r&  r,  r.  r/  r   r   r   r   r   r     s    

r   c                   @   rH   )
AppendTruec                 C   s
   || _ d S r   )r  )rM   r  r   r   r   rN     r   zAppendTrue.__init__c                 C   s   | j d d S r  )r  r   rr   r   r   r   rU        zAppendTrue.__call__NrV   r   r   r   r   r1        r1  c                   @   s   e Zd ZdZdZdZdd Zdd Zdd	 Zd
d Z	e
dd Zd6d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/d0 Ze
d1d2 Zd3d4 Zd5S )7_TestBarrierz$
    Tests for Barrier objects.
    rv   g      >@c                 C   s   | j | j| jd| _d S r#   )Barrierr  defaultTimeoutbarrierrr   r   r   r   setUp  s   z_TestBarrier.setUpc                 C   s   | j   d | _ d S r   )r7  abortrr   r   r   r   tearDown  s   

z_TestBarrier.tearDownc                 C   s(   | j dkrg S | j dkr| j S t S )Nr]   r\   )r~   r\   r   r  rr   r   r   r   r"    s
   


z_TestBarrier.DummyListc                 C   s>   t | ||| jd }z||  |  W |  d S |  w r^   )r   r  r.  r   )rM   rp  rR   rd   r   r   r   run_threads  s
   
z_TestBarrier.run_threadsc                 C   s   |j }|| jks
J t|D ]2}|d d t|d || ks#J |  |d d t|d |d | ks<J |  qz	|jdksIJ W n	 tyS   Y nw |jrYJ d S )Nr   Tr_   )	partiesr  r   r   r   r4   	n_waitingrf   broken)r   r7  resultsr  mr   r   r   r   	multipass  s   
z_TestBarrier.multipassr_   c                 C   s*   |   |   g}| | j| j||f dS )z;
        Test that a barrier is passed in lockstep
        N)r"  r;  rA  r7  )rM   passesr?  r   r   r   test_barrier  s   z_TestBarrier.test_barrierc                 C   r   )zC
        Test that a barrier works for 10 consecutive runs
        r   )rC  rr   r   r   r   test_barrier_10  s   
z_TestBarrier.test_barrier_10c                 C   s   |  }|| d S r   )r4   rw   )r   r7  r!   ri   r   r   r   _test_wait_return_f      z _TestBarrier._test_wait_return_fc                    sR   |    | | j| j f  fddt| jD }| |dd t  dS )z9
        test the return value from barrier.wait
        c                    r"  r   r#  r  r    r   r   r  +  r%  z1_TestBarrier.test_wait_return.<locals>.<listcomp>r   r_   N)	r   r;  rE  r7  r   r  rg   countr"   rM   r?  r   r    r   test_wait_return%  s
   z_TestBarrier.test_wait_returnc                 C   s   |   t|dkrtd S r^   )r4   r   r   )r   r7  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 )z,
        Test the 'action' callback
        )r;  r_   N)r"  r5  r  r1  r;  rJ  rg   r   )rM   r?  r7  r   r   r   test_action5  s   z_TestBarrier.test_actionc                 C   sn   z|  }|| jd krt|   |d W d S  tjy)   |d Y d S  ty6   |  Y d S w Nr   T)r4   r  r   r   r   BrokenBarrierErrorr9  )r   r7  results1results2r   r   r   r   _test_abort_f>  s   z_TestBarrier._test_abort_fc                 C   s^   |   }|   }| | j| j||f | t|d | t|| jd  | | jj dS )zK
        Test that an abort will put the barrier in a broken state
        r   r_   N)	r"  r;  rP  r7  rg   r   r  r   r>  )rM   rN  rO  r   r   r   
test_abortK  s   
z_TestBarrier.test_abortc                 C   s   |  }|| jd kr%|j| jd k r td |j| jd k s|  nz|   |d W n tjy?   |d Y nw |   |d d S )Nr   r_   r  T)	r4   r  r=  rP   r   resetr   r   rM  )r   r7  rN  rO  results3r   r   r   r   _test_reset_fW  s   

z_TestBarrier._test_reset_fc                 C   sl   |   }|   }|   }| | j| j|||f | t|d | t|| jd  | t|| j dS )zL
        Test that a 'reset' on a barrier frees the waiting threads
        r   r_   N)r"  r;  rT  r7  rg   r   r  )rM   rN  rO  rS  r   r   r   
test_reseti  s   z_TestBarrier.test_resetc                 C   s   z|  }|| jd krt|   |d W n tjy'   |d Y n ty3   |  Y nw |  | jd krA|  |   |   |d d S rL  )r4   r  r   r   r   rM  r9  rR  )r   r7  barrier2rN  rO  rS  r   r   r   r   _test_abort_and_reset_fv  s    z$_TestBarrier._test_abort_and_reset_fc                 C   sz   |   }|   }|   }| | j}| | j| j||||f | t|d | t|| jd  | t|| j dS )zF
        Test that a barrier can be reset after being broken.
        r   r_   N)r"  r5  r  r;  rW  r7  rg   r   )rM   rN  rO  rS  rV  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 d S  tjy(   |d Y d S w )Nr         ?r(  T)r4   r  rP   r   r   rM  r   r   r7  r?  r   r   r   r   _test_timeout_f  s   
z_TestBarrier._test_timeout_fc                 C   s4   |   }| | j| j|f | t|| jj dS )z$
        Test wait(timeout)
        N)r"  r;  r[  r7  rg   r   r<  rH  r   r   r   r    s   z_TestBarrier.test_timeoutc                 C   sT   | | j}|| jd krtd z|   W d S  tjy)   |d Y d S w )Nr   rY  T)r4   r6  r  rP   r   r   rM  r   rZ  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 )z4
        Test the barrier's default timeout
        r(  r$   N)r5  r  r"  r;  r\  rg   r   r<  )rM   r7  r?  r   r   r   test_default_timeout  s   z!_TestBarrier.test_default_timeoutc                 C   s   |  d}|  |  d S r^   )r5  r4   )rM   rd   r   r   r   test_single_thread  s   
z_TestBarrier.test_single_threadc              	   C   sH   t |D ]}|  | || W d    n1 sw   Y  qd S r   )r   r4   r   )r   r7  rB  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 ]}| j| j| j	|||fd}|
  | |j q t|D ]}t| jD ]
}| | | qEq>d S )Nr\   r}     Fr   )r~   r   r   r  r   r   r  r   r`  r7  r   r   r   rg   r   )rM   rB  r  r_  rZ  jr   r   r   r   r   test_thousand  s    
z_TestBarrier.test_thousandN)r_   )rW   rX   rY   r  r  r6  r8  r:  r"  r;  rT  rA  rC  rD  rE  rI  rJ  rK  rP  rQ  rT  rU  rW  rX  r[  r  r\  r]  r^  r`  rc  r   r   r   r   r4    sJ    




	






	
r4  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 )
_TestValuerd  )r   i  i^  )dg      @g      )hi   )rx                   ry   xyc                 C      t s	| d d S d S Nz"requires multiprocess.sharedctypesr
  r   rr   r   r   r   r8       z_TestValue.setUpc                 C   s$   t || jD ]	\}}|d |_qd S r  )zipcodes_valuesrh   )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  qEd S )Nc                       g | ]\}}}  ||qS r   )RawValuer  coderh   r  rr   r   r   r        z)_TestValue.test_value.<locals>.<listcomp>c                    ru  r   )r   rw  rr   r   r   r    ry  r_   r   Tr   )	rq  rp  rg   rh   r   r   r   r   r   )rM   rawrr  rs  rt  r3  r   rr   r   
test_value  s    

z_TestValue.test_valuec                 C      | j dd d S NT)rz  )r{  rr   r   r   r   test_rawvalue  r2  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   rv   r  Fget_lockget_objZnavalue)
r   r  r  r  rg   r   r   r   rC   rv  )rM   Zval1lock1obj1Zval2lock2obj2r  Zval3lock3obj3arr4arr5r   r   r   test_getobj_getlock  s$   z_TestValue.test_getobj_getlockNr}  )rW   rX   rY   rn   r   rq  r8  rT  r   r{  r~  r  r   r   r   r   rd    s    

rd  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 )
_TestArrayrd  c                 C   s0   t dt|D ]}||  ||d  7  < qd S r^   )r   r   )r   seqr   r   r   r   rp  ,  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   r|  r   r  )r_   r   r|  r  r  r~  r   T)RawArrayArrayrg   r   r   arrayrp  r   r   r   r   )rM   rz  r  arrr   r   r   r   
test_array1  s   $$
z_TestArray.test_arrayc                 C   sr   d}t dD ]0}| d|}| t|| | t|dg|  t d|d d < | t|tt d ~qd S )Nr   r|  r   r   )r   r  rg   r   r   )rM   sizer  r  r   r   r   test_array_from_sizeJ  s   z_TestArray.test_array_from_sizec                 C   r|  r}  )r  rr   r   r   r   test_rawarrayY  rQ  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   r  Fr  r  Znotalock)r  r   r   r  r  r  rg   r   r   r   rC   r  )rM   Zarr1r  r  Zarr2r  r  r  Zarr3r  r  r  r  r   r   r   test_getobj_getlock_obj]  s(   z"_TestArray.test_getobj_getlock_objr}  )rW   rX   rY   rn   rT  rp  rE   rW  r<   r  r  r  r  r   r   r   r   r  (  s    


r  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r\   c                 C   s^  |  t td}| |d d  t td |   }| |d d  g  |t td | |d d  t td | |d d | |dd 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   rv   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  rv   r  c                 S      g | ]}|d d  qS r   r   )r  elementr   r   r   r        z-_TestContainers.test_list.<locals>.<listcomp>)
r   r_   r   r|  r  rv   r  r  r~  	   r   r   )r   r_   r   r|  r  rv   r  r  r~  r  r   )r   r   rg   extendr   )rM   rc   rd   re  r   rp  r   r   r   	test_list  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   r\  rg   next)rM   rc   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 q7 |d
  d  t|d
 d tdddD ]} t|| d qb~   }|| ~d S )Nc                    s   g | ]	}  td qS )r|  )r   r   )r  Z_irr   r   r   r        z;_TestContainers.test_list_proxy_in_list.<locals>.<listcomp>r|  c                 S   r  r   r   )r  innerr   r   r   r    r  )r   r_   r   7   r   r@   )r   r_   r  r_   r   )r   r   rg   popr   r   )rM   rc   r   rd   r   rr   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 )NA   F   c                 s   s    | ]	}|t |fV  qd S r   chrr  r   r   r   	<genexpr>  s    z,_TestContainers.test_dict.<locals>.<genexpr>c                 S      g | ]}t |qS r   r  r  r   r   r   r    r%  z-_TestContainers.test_dict.<locals>.<listcomp>c                 S   s   g | ]}|t |fqS r   r  r  r   r   r   r    r  )
dictr   r   r  rg   r   sortedkeysrr  r6  )rM   re  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 )Nr  r  )
r  r   r   r  r\  rg   r.  r   r   r  )rM   re  r  r   r  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   r  )ferretshamstersr   r|  )waterfeed)petssuppliesr  r  rv   Zblanketsr  r  r     r   r  r_   ZmarmotsX   c   r@   r  )r  rg   r.  r   r   r   )rM   r  r  re  l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   rw   rg   r   r  rb   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_hiddenrg   r`  r   r   )rM   r  r   r   r   test_namespace	  s   z_TestContainers.test_namespaceN)rW   rX   rY   rn   r  r  r  r  r  r  r  r  r   r   r   r   r  {  s    

.
r  r5   c                 C   s   t | | |  S r   r   )rj  r4   r   r   r   sqr	  s   
r  c                 C   s   | | S r   r   rj  rk  r   r   r   mul	  rm   r  c                 C   s   t |  tdd )Nrj  i   )rP   r   rD   r3   r   r   r   raise_large_valuerror!	  r,  r  c                 C      | S r   r   rj  r   r   r   identity%	  r  r  c                   @   r  )CountedObjectr   c                 C   s   |  j d7  _ t| S r^   )n_instancesr  __new__r   r   r   r   r  +	  s   
zCountedObject.__new__c                 C   s   t |  jd8  _d S r^   )r   r  rr   r   r   r   __del__/	  s   zCountedObject.__del__N)rW   rX   rY   r  r  r  r   r   r   r   r  (	  s    r  c                   @      e Zd ZdS )SayWhenErrorNrW   rX   rY   r   r   r   r   r  2	  s    r  c                 c   s:    |dkr	t dt| D ]}||krt d|V  qd S )Nr@   zSomebody said when)r  r   )totalwhenr   r   r   r   exception_throwing_generator4	  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ed-d.d/d0 Zed1d2 Zed-d.d3d4 Zd5d6 Zd7d8 Z d9d: Z!d;d< Z"  Z#S )=	_TestPoolc                    s   t    | d| _d S r  )super
setUpClassPoolpoolr   	__class__r   r   r  ?	  s   
z_TestPool.setUpClassc                    s(   | j   | j   d | _ t   d S r   )r  r   r   r  tearDownClassr   r  r   r   r  D	  s   

z_TestPool.tearDownClassc                 C   s@   | j j}| |tdtd | |tddditdd d S )N)rv   rv   r   rj  r|  r  )r  applyrg   r  )rM   Zpapplyr   r   r   
test_applyK	  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  maprg   r  r   r   )rM   Zpmapr   r   r   test_mapP	  s
   ,z_TestPool.test_mapc                 C   s   | j j}tttdtddd}| |t|ttt| tttdtddd}| |t|ddttt| d S )Nr   r  r@   r   r  r-  r  )r  starmapr   rp  r   rg   r  	itertools)rM   Zpsmaptuplesr   r   r   test_starmapV	  s   z_TestPool.test_starmapc                 C   sD   t ttdtddd}| | jt| t t	t| d S )Nr   r  r@   )
r   rp  r   rg   r  Zstarmap_asyncr  r   r  r  )rM   r  r   r   r   test_starmap_async_	  s   z_TestPool.test_starmap_asyncc              	   C   s8   |  | jtttd tttttd d S r  )rg   r  	map_asyncr  r   r   r   r  rr   r   r   r   test_map_asyncd	  s   z_TestPool.test_map_asyncc                 C   s   | j dkr
| j ng }| jjtdg|j|jd  | dt	| | dg|d  | jjtdg|j|jd  | dt	| | 
|d t d S )Nr\   1)callbackerror_callbackr_   r   rc   r   )r~   r\   r   r  r  r   r   r4   rg   r   r   rD   )rM   Z	call_argsr   r   r   test_map_async_callbacksh	  s   z"_TestPool.test_map_async_callbacksc                 C   sr   | j dkr| d| j  G dd dt}| t | jt| gd  W d    d S 1 s2w   Y  d S )Nr]   r}   c                   @   rs   )z*_TestPool.test_map_unplicklable.<locals>.Ac                 S   rk   )Nzcannot pickler   rr   r   r   r   rl   z	  rm   z5_TestPool.test_map_unplicklable.<locals>.A.__reduce__Nr  r   r   r   r   Ay	  rz   r  r   )	r~   r   r   r  r   r   r  r  r  )rM   r  r   r   r   test_map_unplicklableu	  s   
"z_TestPool.test_map_unplicklablec                 C   sB   z| j jtg ddjtd W d S  tjy    | d Y d S w )Nr_   r  r$   z2pool.map_async with chunksize stalled on null list)r  r  r  r   r  r   TimeoutErrorr  rr   r   r   r   test_map_chunksize	  s
    z_TestPool.test_map_chunksizec                 C   sh  | j dkr| d| j  | t | jttddd W d    n1 s)w   Y  | t | jttddd W d    n1 sIw   Y  | t | jttddd W d    n1 siw   Y  G dd d}| t | jt| d W d    n1 sw   Y  | t | jt| d W d    d S 1 sw   Y  d S )	Nr\   r}   r_   r@   r   r|  c                   @   r  )zE_TestPool.test_map_handle_iterable_exception.<locals>.SpecialIterablec                 S   r  r   r   rr   r   r   r   __iter__	  r  zN_TestPool.test_map_handle_iterable_exception.<locals>.SpecialIterable.__iter__c                 S   r  r   )r  rr   r   r   r   __next__	  r  zN_TestPool.test_map_handle_iterable_exception.<locals>.SpecialIterable.__next__c                 S      dS r^   r   rr   r   r   r   r  	  r  zM_TestPool.test_map_handle_iterable_exception.<locals>.SpecialIterable.__len__N)rW   rX   rY   r  r  r  r   r   r   r   SpecialIterable	      r  )	r~   r   r   r   r  r  r  r  r  )rM   r  r   r   r   "test_map_handle_iterable_exception	  s$   
"z,_TestPool.test_map_handle_iterable_exceptionc                 C   s<   | j tdtf}t|j}| | d | |jt d S )Nr  1   )	r  apply_asyncr  r  rI   r   rg   re   rL   rM   ri   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 )Nr  rY  r$   )r  r  r  r  rI   r   r   r   r  re   rL   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|||  q+| t	|j
 | j jtttddd}tdD ]}| t|||  qP| t	|j
 d S Nr   ra  r   r  )r  imapr  r   r   rg   r  r  r   StopIterationr  rM   r  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|||  qA| t|j	 | jttddd	}t
d
D ]}| t|||  qd| t|j	 | jttddd}t
dD ]}| t|||  q| t|j	 d S )Nr\   r}   r_   r@   r   r|  r-  r  r   r  r  )r~   r   r   r  r  r  r  r   r  r  r   rg   r  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   rg   r  r  )rM   r  r   r   r   test_imap_unordered	  s   "&z_TestPool.test_imap_unorderedc                 C   sn  | j dkr| d| j  | jttddd}| t|j	 | jttddd}| t|j	 | jttddd}t
ttt
td}| t tdD ]}t|}| || || qRW d    n1 snw   Y  | jttddd	}t
ttt
td}| t tdD ]}t|}| || || qW d    d S 1 sw   Y  d S )
Nr\   r}   r_   r@   r   r|  r-  r  r   )r~   r   r   r  r  r  r  r   r  r  r   r  r   r  r   r5  )rM   r  Zexpected_valuesr   rh   r   r   r   -test_imap_unordered_handle_iterable_exception	  sH   
"z7_TestPool.test_imap_unordered_handle_iterable_exceptionc                 C   s   | j dkrtnt}| || jd | || jd | j dkrA| d}z| dt|j W |  |	  d S |  |	  w d S )Nr\   r@   r   r|  )
r~   RemoteErrorrD   r   r  rg   r   _poolr   r   )rM   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 )r0   r   r  r   r   r   r  
      z,_TestPool.test_terminate.<locals>.<listcomp>i'  r_   r  rJ  )
r  r  rP   r   r   r   rI   r   
assertLessrL   )rM   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 r^   )r  rg   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rDttd}dd |D }| d}|t|}| | | W d    n1 s0w   Y  |  | 	t
|jt| d S d S )Nr[   r   c                 S   r  r   )r  r  r   r   r   r  &
  r%  z*_TestPool.test_context.<locals>.<listcomp>r   )r~   r   r   r  r  r  rg   r   r   r   rD   )rM   Lr   r   rr   r   r   test_context#
  s   
z_TestPool.test_contextc                 C   rk   )Nr  r   r   r   r   r   _test_traceback-
     z_TestPool._test_tracebackTr   c                 C   s  | j dkr| d*}z|| j W n ty' } z|}W Y d }~n
d }~ww | d W d    n1 s7w   Y  |  | t|t	 | 
|jd |j}| t|tjj | d|j tj }z| t	y{   tjt   Y nw W d    n1 sw   Y  | d|  | d=}z|ttddd W n ty } z|}W Y d }~n
d }~ww | d | t|t | |jd  W d    n1 sw   Y  |  d S d S )Nr[   r_   zexpected RuntimeError)r  z&raise RuntimeError(123) # some commentr@   zexpected SayWhenError)r~   r  r  r  	Exceptionr  r   r
  r   r   rg   rR   	__cause__r   r  ZRemoteTracebackr   tbr  r   r  r  
excepthookexc_infogetvaluer  r  r  r  )rM   r   r   exccausef1r   r   r   test_traceback1
  sR   


	z_TestPool.test_tracebackc                 C   rk   )Nr  r   r   r   r   r   _test_wrapped_exceptionX
  r  z!_TestPool._test_wrapped_exceptionc              	   C   sl   |  d#}| t || j W d    n1 sw   Y  W d    n1 s+w   Y  |  d S r^   )r  r   r   r  r  r   r   r   r   r   test_wrapped_exception\
  s   z _TestPool.test_wrapped_exceptionc                 C   s   t  }| tC | d.}z|tddg W t d |  |	  nt d |  |	  w W d    n1 s@w   Y  W d    n1 sOw   Y  | 
t  | d d S )Nr   r   r_   r(  g?)rP   rQ   r   rD   r  r  r  r   r   r   assertGreater)rM   Zt_startr   r   r   r   test_map_no_failfastd
  s   



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  {
      z4_TestPool.test_release_task_refs.<locals>.<listcomp>r   c                 S   s   g | ]}t |qS r   )r  r  )r  or   r   r   r  |
  s    c                 s   s    | ]}| V  qd S r   r   )r  r  r   r   r   r  
      z3_TestPool.test_release_task_refs.<locals>.<genexpr>r   )r   r  r  r  r  r	  rP   r   r   rg   r   r  r  )rM   Zobjsrefsr   r   r   test_release_task_refsx
  s   
z _TestPool.test_release_task_refsc              	   C   s   | j dkr
| d | d}| W d    n1 sw   Y  | t | W d    n1 s4w   Y  W d    n1 sCw   Y  |  d S )Nr\   test not applicable to managerr_   )r~   r   r  r   rD   r   rM   r  r   r   r   
test_enter
  s   


z_TestPool.test_enterc                 C   sx   | j dkr
| d | d}|  |  tjj|_t	
dtf d }t  W d    d S 1 s5w   Y  d S )Nr\   r(  r_   z%unclosed running multiprocessing pool)r~   r   r  r   r   r   r  ZRUN_stater   Zcheck_warningsResourceWarningr   
gc_collectr)  r   r   r   test_resource_warning
  s   




"z_TestPool.test_resource_warning)$rW   rX   rY   rT  r  r  r  r  r  r  r  r  r  r  r  r  r   r  r  r  r	  r  r   r  r  r  rE   rW  r  r  r   r"  r'  r*  r.  __classcell__r   r   r  r   r  =	  sH    	
$




&


r  c                   C   rk   )Nkey)KeyErrorr   r   r   r   raising
  rm   r2  c                   C   s   dd S )Nc                   S   r  )N*   r   r   r   r   r   r  
  s    z%unpickleable_result.<locals>.<lambda>r   r   r   r   r   unpickleable_result
  rm   r4  c                   @   r  )_TestPoolWorkerErrorsrd  c                    sj   t d}d g  fdd}|jt|d}| t|j |  d  |  d t |	  |
  d S )Nr   c                       |  d< d S r  r   r  Z
scratchpadr   r   errback
  r   z@_TestPoolWorkerErrors.test_async_error_callback.<locals>.errbackr  r   )r   r  r  r2  r   r1  r   r   r   r   r   )rM   r   r9  ri   r   r8  r   test_async_error_callback
  s   
z/_TestPoolWorkerErrors.test_async_error_callbackc                    s   ddl m} td}tdD ]6}d g  fdd}|jt|d}| ||j  d }| 	| | 
 d | | |j | |j q|  |  d S )Nr   )MaybeEncodingErrorr   r-  c                    r6  r  r   r7  r8  r   r   r9  
  r   z@_TestPoolWorkerErrors._test_unpickleable_result.<locals>.errbackr:  )multiprocess.poolr<  r   r  r   r  r4  r   r   r   r   ZassertIsNotNoner  rh   r   r   )rM   r<  r   	iterationr9  ri   wrappedr   r8  r   _test_unpickleable_result
  s   

z/_TestPoolWorkerErrors._test_unpickleable_resultN)rW   rX   rY   rn   r;  r@  r   r   r   r   r5  
  s    r5  c                   @   0   e Zd ZdZdd Zdd Zdd Zdd	 Zd
S )_TestPoolWorkerLifetimerd  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}|retdd	 |jD se|d
8 }tt |retdd	 |jD rPdd |jD }| d | | d | | t|t| |  |  d S )Nr|  r   Zmaxtasksperchildc                 S      g | ]}|j qS r   r   r  rs  r   r   r   r  
  r#  zE_TestPoolWorkerLifetime.test_pool_worker_lifetime.<locals>.<listcomp>r   2   c                 s       | ]}|  V  qd S r   r   rF  r   r   r   r  
      zD_TestPoolWorkerLifetime.test_pool_worker_lifetime.<locals>.<genexpr>r_   c                 S   rD  r   rE  rF  r   r   r   r  
  r#  )r   r  rg   r   r  r   r   r  r  	enumerater   Z_repopulate_poolallrP   r   r   r   r   r  r   r   )	rM   r   Zorigworkerpidsr?  r   rb  ri   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| q'd S )Nr|  r_   rC  r  g333333?)r   r  r   r   r  r  r   r   rK  rg   r   )rM   r   r?  r   rb  ri   r   r   r   %test_pool_worker_lifetime_early_close
  s   z=_TestPoolWorkerLifetime.test_pool_worker_lifetime_early_closec              	   C   sF   dD ]}|  t tjd|d W d    n1 sw   Y  qd S )N)r   r@   r(  Z12r|  rC  )r   rD   r   r  )rM   rh   r   r   r   "test_pool_maxtasksperchild_invalid  s   z:_TestPoolWorkerLifetime.test_pool_maxtasksperchild_invalidc                 C   s2   d}t jjjd|fi t\}}}| |d d S )Na  if 1:
            from multiprocess 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_okENVrg   rM   cmdr  outrq  r   r   r   >test_worker_finalization_via_atexit_handler_of_multiprocessing  s   zV_TestPoolWorkerLifetime.test_worker_finalization_via_atexit_handler_of_multiprocessingN)rW   rX   rY   rn   rM  rN  rO  rW  r   r   r   r   rB  
  s    rB  )BaseManager	BaseProxyr
  c                   @   r  )FooBarc                 C   r  )Nf()r   rr   r   r   r   rp     r  zFooBar.fc                 C   r  r   )rD   rr   r   r   r   g"  r  zFooBar.gc                 C   r  )N_h()r   rr   r   r   r   _h$  r  z	FooBar._hN)rW   rX   rY   rp  r\  r^  r   r   r   r   rZ    r  rZ  c                  c   s    t dD ]} | |  V  qd S r  )r   )r   r   r   r   baz'  s   r_  c                   @   r  )IteratorProxy)r  c                 C   r  r   r   rr   r   r   r   r  -  r  zIteratorProxy.__iter__c                 C   r   )Nr  )_callmethodrr   r   r   r   r  /  r   zIteratorProxy.__next__N)rW   rX   rY   Z	_exposed_r  r  r   r   r   r   r`  +  s    r`  c                   @   r  )	MyManagerNr  r   r   r   r   rb  2      rb  Foo)callableBar)rp  r^  )re  Zexposed)re  Z	proxytypec                   @   rA  )_TestMyManagerr  c                 C   s<   t  }|  | | |  | |jjdtj f d S r  )	rb  r   commonshutdownr   _processr   r   r   rM   r\   r   r   r   test_mymanager>  s
   
z_TestMyManager.test_mymanagerc                 C   sL   t  }| | W d    n1 sw   Y  | |jjdtj f d S r  )rb  rh  r   rj  r   r   r   rk  r   r   r   test_mymanager_contextI  s   z%_TestMyManager.test_mymanager_contextc                 C   sP   t  }|  | | | W d    n1 sw   Y  | |jjd d S r  )rb  r   rh  rg   rj  r   rk  r   r   r   !test_mymanager_context_prestartedQ  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                       g | ]	}t  |r|qS r   r   r  r,   )r  r   r   r  ]  r  z)_TestMyManager.common.<locals>.<listcomp>)rp  r\  r^  c                    ro  r   rp  rq  )barr   r   r  ^  r  rp  r\  r^  r[  r]  c                 S   s   g | ]}|| qS r   r   r  r   r   r   r  m  r%  r   )rd  rf  r_  rg   rp  r   rD   r\  ra  r
  r^  r   r   )rM   r\   r_  Zfoo_methodsZbar_methodsr   )rr  r  r   rh  X  s    "z_TestMyManager.commonN)rW   rX   rY   rn   rl  rm  rn  rh  r   r   r   r   rg  :  s    rg  c                   C   s   t S r   )_queuer   r   r   r   	get_queueu  r  rt  c                   @      e Zd ZdZdS )QueueManagerz$manager class used by server processNrW   rX   rY   r  r   r   r   r   rv  x      rv  c                   @   ru  )QueueManager2z@manager class which specifies the same interface as QueueManagerNrw  r   r   r   r   ry  |  rx  ry  	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 vrldenNc                 C   s2   t ||td}|  | }|t| j d S )Nr   r   
serializer)ry  
SERIALIZERconnectrt  rw   tuplerr  r   r   r   r\   r!   r   r   r   _putter  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)rA   urandomrv  r   HOSTr  r   r   ri  r   r  r   r   ry  r  rt  rg   r   r   r   r  rw   rP   r   )rM   r   r\   r   Zmanager2r!   r   r   r   test_remote  s"   
z_TestRemoteManager.test_remote)	rW   rX   rY   rn   rr  r   rT  r  r  r   r   r   r   r{    s    
	r{  md5c                   @   r  )_TestManagerRestartc                 C   s,   t ||td}|  | }|d d S )Nr~  r|  )rv  r  r  rt  rw   r  r   r   r   r    s   z_TestManagerRestart._putterc              
   C   sF  t d}ttjdf|td}z;| }|j}|j	  |
  | j| j|j|fd}|
  |  | }| | d ~W t|drJ|  nt|drU|  w w t||td}z|
  | |j W d S  ty } z,|jtjkry td t||td}t|dr| |j W Y d }~d S W Y d }~d S d }~ww )Nr  r   r~  r   r|  ri  rY  )rA   r  rv  r   r  r  Z
get_serverr   listenerr   r   r   r  r   rt  rg   r   r   ri  r   OSErrorerrno
EADDRINUSErP   r   )rM   r   r\   Zsrvraddrr   r!   r   r   r   r   test_rapid_restart  sN   






z&_TestManagerRestart.test_rapid_restartN)rW   rX   rY   rT  r  r  r   r   r   r   r    s    
r   c                   @   s   e Zd ZdZedd Zdd Zdd Zdd	 Zd
d Z	edd Z
ed$ddZeeddd Zeedeejdkdeedkdeeedddd Zedd Zeedeejdkddd  Zd!d" Zd#S )%_TestConnectionr|   c                 C   s(   t |jtD ]}|| q|  d S r   )r\  
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r;| 
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 n tjy } z| 
|j|f W Y d }~nd }~ww | 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)r_   r}  Nr|  r   r   r  r[   r   r|  r  z(                                        zexpected BufferTooShort, got %sFr@   r0   Xi   )(r   r   r  r   r   r   r  r   r   r~   rg   r   filenor   r   r   r  r  r   Zrecv_bytes_intoitemsize	bytearrayr   BufferTooShortrR   r  rI   r   re   rL   r  rP   r   r  r   readablewritabler   EOFErrorr   )rM   r_  rZ  r   r  r  Zlongmsgr  bufferr   ri   r   r   Zreally_big_msgr   r   r   test_connection  sz   
$




z_TestConnection.test_connectionc                 C   s   | j dd\}}| |dd  | | d | jdkrR| |jd | |jd | |jd | |jd | t|jd | t|j | t|j	 d S d S )NFr   r_   r[   Tr   )
r   rg   r   r   r~   r  r  r   r  r   )rM   readerwriterr   r   r   test_duplex_falseD  s   
z!_TestConnection.test_duplex_falsec                 C   st   |   \}}| j| j|fd}d|_|  |  td}|| | |	 | |t
 |  |  d S )Nr   Tr   )r   r   r  r   r   r   r   r  rg   r  r  r   )rM   r_  rZ  r   r  r   r   r   test_spawn_closeQ  s   

z _TestConnection.test_spawn_closec                 C   s:  | j dkr| d| j  td}|  \}}|| | | | ||d | | |dd   ||dd | | |dd  ||d | | td	 ||dd
 | | td	 | t	|j|d | t	|j|dd | t	|j|dd | t	|j|d | t	|j|dd d S )Nr[   r}   abcdefghijklmnopqrstuvwxyzrv   r  r~        r  r         r_   r@   r  )
r~   r   r   r   r   r  rg   r  r   rD   )rM   r  rc   rd   r   r   r   test_sendbytesf  s&   

z_TestConnection.test_sendbytesc              
   C   sF   zt | W dS  ty" } z|jtjkrW Y d }~dS  d }~ww )NFT)rA   fstatr  r  EBADF)r   ry  r   r   r   r   _is_fd_assigned  s   z_TestConnection._is_fd_assignedFc                 C   sd   |rt ddD ]}| |st| | qt|}tr%t|tj	}t
|| t| d S )Nr   r9   )r   r  rA   dup2r  r   recv_handlemsvcrtopen_osfhandlerv  r  r   )r   r_  dataZcreate_dummy_fdsr   ry  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	tj
 ttj
d}| }tr=t|}t|||j W d    n1 sOw   Y  |  ttj
d}| | d W d    d S 1 srw   Y  d S )	Nr[   only makes sense with processesTr   s   foor   wbrb)r~   r   r   r   r  r   r   r   r   rk  rj  rm  r  r  Zget_osfhandler   send_handler   r   rg   rn  )rM   r_  rZ  r   rp  ry  r   r   r   test_fd_transfer  s"   


"z _TestConnection.test_fd_transferr2   *test semantics don't make sense on Windowsr9   z)largest assignable fd number is too smallr  ztest needs os.dup2()c              
   C   s6  | j dkr
| d | jdd\}}| j| j|ddfd}d|_|  | tj	tj
 ttj
d<}| }tdtD ]	}| |sE nq<| d	 t|| zt|||j W t| nt| w W d    n1 sqw   Y  |  ttj
d
}| | d W d    d S 1 sw   Y  d S )Nr[   r  Tr   s   barr   r  r9   z2could not find an unassigned large file descriptorr  )r~   r   r   r   r  r   r   r   r   rk  rj  rm  r  r   MAXFDr  r  rA   r  r   r  r   r   r   rg   rn  )rM   r_  rZ  r   rp  ry  Znewfdr   r   r   test_large_fd_transfer  s.   
	


"z&_TestConnection.test_large_fd_transferc                 C   s   t | d d S )N    )rA   r  r  rM   r_  r   r   r   _send_data_without_fd     z%_TestConnection._send_data_without_fdzdoesn't make sense on Windowsc                 C   s`   | j dkr
| d | jdd\}}| j| j|fd}d|_|  | tt	j
| |  d S )Nr[   r  Tr   r   )r~   r   r   r   r  r   r   r   r   r   r  r   rM   r_  rZ  r   r   r   r   test_missing_fd_transfer  s   

z(_TestConnection.test_missing_fd_transferc              	   C   s   |   \}}|8 |& |d | | d | jdkr*| |j | |j W d    n1 s4w   Y  W d    n1 sCw   Y  | jdkri| |j | |j | t	|j | t	|j d S d S N  r[   )
r   r   rg   r   r~   r   closedr   r   r  rb   r   r   r   r    s"   

 
z_TestConnection.test_contextNr}  )rW   rX   rY   rn   rT  r  r  r  r  r  r  r  rE   rU  HAS_REDUCTIONr  rW  r  r  r  r   rA   r  r  r  r  r   r   r   r   r    s>    
O 







r  c                   @   s6   e Zd ZdZdd Zdd Zeej	ddd Z
d	S )
_TestListenerrd  c                 C   sB   | j jD ]}| j j|d}| |j | t| j j|j| qd S )Nfamily)
connectionfamiliesListenerr   r   r   r  r   )rM   r  r  r   r   r   test_multiple_bind  s   z _TestListener.test_multiple_bindc              
   C   s   | j  @}| j |j)}| }|d | | d W d    n1 s*w   Y  W d    n1 s9w   Y  W d    n1 sHw   Y  | jdkr[| 	t
|j d S d S r  r  r  Clientr   acceptr   rg   r   r~   r   r  )rM   r  ry   re  r   r   r   r    s   


z_TestListener.test_contextz"test needs abstract socket supportc              
   C   s   | j d@}| j |j)}| }|d | | d W d    n1 s+w   Y  W d    n1 s:w   Y  W d    n1 sIw   Y  | jdkr\| 	t
|j d S d S )Nz
 somethingr  r[   r  )rM   r  clientre  r   r   r   test_abstract_socket	  s   


z"_TestListener.test_abstract_socketN)rW   rX   rY   rn   r  r  rE   rU  r
   Zabstract_sockets_supportedr  r   r   r   r   r    s    
r  c                   @   s4   e Zd ZdZedd Zdd Zdd Zdd	 Zd
S )_TestListenerClientr|   c                 C   s"   | j |}|d |  d S )Nr   )r  r  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 )Nr  r   Tr   )r  r  r  r   r   r   r   r   r  rg   r   r   r   )rM   r  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   Tr_   r   )r  r  r   r   r   r   r   rP   r   r  rg   r   r   r   )rM   r  r   r_  r   r   r   test_issue14725+  s   

z#_TestListenerClient.test_issue14725c                 C   sh   | j jD ]-}| j j|d}| j |j}| }|d | |d |	  |	  |	  qd S )Nr     hellor_   )
r  r  r  r  r   r  r  r   r   r   )rM   famr  ry   rc   r   r   r   test_issue16955;  s   

z#_TestListenerClient.test_issue16955N)	rW   rX   rY   rn   rT  r   r  r  r  r   r   r   r   r    s    
r  c                   @   sT   e Zd ZdZdd Zedd Zdd Zedd	 Zd
d Z	edd Z
dd ZdS )	_TestPollr|   c                 C   sJ   |   \}}| | d |d | | d | | d d S )NF    T)r   rg   r   r  rb   r   r   r   test_empty_stringJ  s
   
z_TestPoll.test_empty_stringc                 C   s*   |D ]}t d || q|  d S Nr0   )rP   r   r  r   )r   r_  stringsr   r   r   r   _child_stringsQ  s   
z_TestPoll._child_stringsc                 C   sr   d}|   \}}| j| j||fd}|  |D ]}tdD ]	}|dr' nq| }| || q|  d S )N)r  r     a   br  s   byer  s   lopr      r  )	r   r   r  r   r   r   r  rg   r   )rM   r  rc   rd   r   r   r   rj  r   r   r   test_stringsX  s   
z_TestPoll.test_stringsc                 C   r   ru   )r   )r   r  r   r   r   _child_boundariesg  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   rP   r   r  r   r   r   r  )rM   r  rs  r   r  r  r   r   r   test_boundarieso  s   
z_TestPoll.test_boundariesc                 C   s"   | d | d | d d S )Nr  r     cd)r  )r   rd   r   r   r   _child_dont_merge{  s   

z_TestPoll._child_dont_mergec                 C   s   |   \}}| |dd | |dd | j| j|fd}|  | | d | |dd | |dd | | d | |dd | |dd | |dd | | d	 |  d S )
Nr5   Fr0   r   r  rY  Tr  r  )r   rg   r   r   r  r   r  r   )rM   rc   rd   r   r   r   r   test_dont_merge  s   z_TestPoll.test_dont_mergeN)rW   rX   rY   rn   r  rT  r  r  r  r  r  r  r   r   r   r   r  F  s    


r  r  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 )_TestPicklingConnectionsrd  c                 C   s   ddl m} |jtjd d S )Nr   )resource_sharerr$   )multiprocessr  rb  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 )Nr  r   )r  r  r   r   r  r   socketcreate_serverr   r  getsocknamer   )r   r_  r  r  r  new_connr  r   r   r   	_listener  s   


z"_TestPicklingConnections._listenerc                 C   sx   t |jd D ]\}}| j|}||  |  q| \}}t }|| |	|  |  |  d S r   )
r\  r   r  r  r   r]  r   r  r  sendall)r   r_  r   r  r  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}	|
 }
||
|	f |
 }| |
 |	  q;|d  td}	|
 }
||
|	f |
 }g }	 |
d}|sn|| qyd|}| ||	  |  |d  |  |  |  |  d S )Nr   TzThis connection uses family %sasciiz$This connection uses a normal socketr   r  )r  r  r   r   r  r   r   r   r  r   r   r   rg   r]  r   r   r   )rM   r  ZlconnZlconn0Zlpr   Zrconn0rpr  r  r   r  bufr   r   r   r   test_pickling  sJ   




z&_TestPicklingConnections.test_picklingc                 C   sD   |  }|d |  |  }|  }||d  |  d S )Nall is wellr   )r   r   r   )r   r_  rs  r  r  r   r   r   child_access  s   
z%_TestPicklingConnections.child_accessc                 C   s   |   \}}| j| j|fd}d|_|  |  | j dd\}}|| |  | | d |  | j dd\}}|| |  |d |  | | d |	  d S )Nr   TFr   r  ZfoobarZfoobarfoobar)
r   r   r  r   r   r   r   rg   r   r   )rM   r_  rZ  r   r  rs  r   r   r   test_access  s"   


z$_TestPicklingConnections.test_accessN)rW   rX   rY   rn   rT  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 )
	_TestHeaprd  c                    s*   t    tjjj| _tj tjj_d S r   )r  r8  r   r  r  _heapold_heapZHeaprr   r  r   r   r8  $  s   
z_TestHeap.setUpc                    s   | j tjj_t   d S r   )r  r   r  r  r  r  r:  rr   r  r   r   r:  *     z_TestHeap.tearDownc              
   C   sb  d}d}g }t jjj}d|_t|D ]&}ttddd }t j|}|	| t
||kr7t|}||= ~q|j g }d}	d}
t|j D ] }|D ]\}}}|	|j||||| df |	|| 7 }	qNqJ|j D ]!\}}|D ]\}}|	|j||||| df |
|| 7 }
qvqp| |	|
 tdd	 |jD  |  tt
|d D ]5}|| d d
 \}}}||d  d d
 \}}}||kr| ||j| j | |d q| || qW d    n1 sw   Y  t| |r|  |s| |j|j | t
|jd | t
|jd | t
|jd|j | t
|jd d S )N  rG  r   r_   ra  freeoccupiedc                 s   s    | ]}|j V  qd S r   r  )r  arenar   r   r   r  T  r%  z&_TestHeap.test_heap.<locals>.<genexpr>r|  )r   r  r  r  Z_DISCARD_FREE_SPACE_LARGER_THANr   r   randomlognormvariater   r   	randranger  r   Z_len_to_seqrr  Z_arenasindexZ_allocated_blocksr6  rg   sumsortr  shuffler  Z_n_freesZ
_n_mallocsZ_pending_free_blocks)rM   Z
iterationsZ	maxblocksblocksr  r   r  rd   rL  r  r   r  r  r   rb  Zarena_blocksZnarenaZnstartZnstopr   r   r   	test_heap.  sj   




"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}||_||_q%d S )Nr   r  r_   )r  	isenabledenabler   disableget_thresholdset_thresholdr   r   r  r  Zbuddy)rM   Z
thresholdsr   rc   rd   r   r   r   test_free_from_gcn  s   
z_TestHeap.test_free_from_gc)	rW   rX   rY   rn   r8  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 )_Foorj  rk  zN)rW   rX   rY   r<   r=   r>   Z_fields_r   r   r   r   r    s
    r  c                   @   s>   e Zd ZdZdd Zedd ZdddZd	d
 Zdd Z	dS )_TestSharedCTypesrd  c                 C   rl  rm  rn  rr   r   r   r   r8    ro  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  < q0d S r  )rh   rj  rk  r   r   )r   rj  rk  r  r  r  stringr   r   r   r   _double  s   z_TestSharedCTypes._doubleFc           
      C   s  t dd|d}t td|d}t td|d}t tdd|d}| jdttd	|d}| jd
d|d}td|_| j	| j
||||||fd}d|_|  |  | |jd | |jd | |jd | |jd | |jd td	D ]}	| ||	 |	d  qv| |jtd d S )Nr   r  r  gUUUUUU?rh  r|  r   re  r   ry   r-  r   r   T   gUUUUUU?ri  r        @Z
hellohello)r   r=   r>   r  r  r   r   r   rh   r   r  r   r   r   rg   ra   rj  rk  )
rM   r  rj  rk  r  r  r  r  r   r   r   r   r   test_sharedctypes  s&   
z#_TestSharedCTypes.test_sharedctypesc                 C   r|  )NTr  )r  rr   r   r   r   test_synchronize  r2  z"_TestSharedCTypes.test_synchronizec                 C   sT   t ddd}t|}d|_d|_d|_| |jd | |jd | |jd d S )Nr         @rh  r   )r  r   rj  rk  r  rg   ra   )rM   r  rr  r   r   r   	test_copy  s   z_TestSharedCTypes.test_copyNr}  )
rW   rX   rY   rn   r8  rT  r  r  r  r  r   r   r   r   r    s    


r  z#requires multiprocess.shared_memoryc                   @   s   e Zd ZdZedd Zdd Zdd Ze	dd	d
d Z
dd Zdd Z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#d$ Zd%S )&_TestSharedMemoryrd  c                 C   s8   t | trt| }n| }||jd t|< |  d S r   )r   r`  r   SharedMemoryr  r   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   )r`  rA   r   )rM   prefixr   r   r   _new_shm_name  s   z_TestSharedMemory._new_shm_namec              	      sp  |  d}tj|ddd}| |j | |j| | |jd | t	|j
|j | |jt| | t|jt| 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 sw   Y  | t tjd
d W d    n1 sw   Y  tjdP}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w   Y  tjrX|  d}	tj|	ddd}
| t, z| |
jd t|	}|  |  |
  W |
  n|
  w W d    n	1 sSw   Y  | t tj|ddd}W d    n	1 sqw   Y  tjrG dd dtj}||}| |j|j |  | t td}|  W d    n	1 sw   Y  |  d S )NZtest01_tsmbT   creater  r3  r   r-  r  Fr$  )multiprocess.shared_memory._make_filenameZ	test01_fnZ	test02_fnc                       g | ]} | qS r   r   rq  ZNAME_PREFIXr   r   r  	  r%  z?_TestSharedMemory.test_shared_memory_basics.<locals>.<listcomp>r_   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)rW   rX   rY   rA   rw  O_RDWR_flagsr   r   r   r   OptionalAttachSharedMemory>      r,  Ztest01_notthere)r!  r   r  r   rk  rg   r,   r  r  r   r  r   r`  r   r  r   rD   rE   mockpatch_SHM_NAME_PREFIXside_effect_nameZ
_USE_POSIXFileNotFoundErrorFileExistsError)rM   Z	name_tsmbsmsZalso_smsZsame_smsmock_make_filenamenamesshm1shm2Zname_dblunlinkZsms_unoZsms_duoZthere_can_only_be_one_smsr,  Zok_if_exists_smsZnonexisting_smsr   r)  r   test_shared_memory_basics  s   





	

z+_TestSharedMemory.test_shared_memory_basicsTzfails with dill >= 0.3.5c                    s   t jdQ}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    d S 1 sZw   Y  d S )
Nr'  Z	test03_fnZ	test04_fnc                    r(  r   r   rq  r)  r   r   r  W  r%  zA_TestSharedMemory.test_shared_memory_recreate.<locals>.<listcomp>Tr_   r#  r   )rE   r.  r/  r   r0  r!  r1  r  r   rk  rg   r2  )rM   r6  r7  r8  r9  r   r)  r   test_shared_memory_recreateL  s    "z-_TestSharedMemory.test_shared_memory_recreatec                 C   s   |  t tjddd}W d    n1 sw   Y  |  t tjddd}W d    n1 s3w   Y  |  t tjdd}W d    d S 1 sOw   Y  d S )NTr@   r#  r   r&  )r   rD   r   r  )rM   Zsms_invalidr   r   r   "test_invalid_shared_memory_crationc  s   "z4_TestSharedMemory.test_invalid_shared_memory_crationc              	   C   sZ  t tjd D ]}| j|d tjddd}| |j d|jdd< tj	||d	}t
|}| |tj | |j|j | t|jdd d | t|jdd d d
|jdd< | t|jdd d
 | t|jdd d
 d|jdd< | t|jdd d | t|jdd d W d    n1 sw   Y  qd S )Nr_   protoTr"  r#     pickler   r  protocols   newvals   oldval)r   pickleHIGHEST_PROTOCOLr  r   r  r   rk  r  dumpsloadsr   rg   r,   r   )rM   r>  r5  pickled_smsZsms2r   r   r   "test_shared_memory_pickle_unpicklep  s(   
z4_TestSharedMemory.test_shared_memory_pickle_unpicklec              
   C   s   t tjd D ]O}| j|d? tjddd}d|jdd< tj||d	}|  |	  | 
t t| W d    n1 sBw   Y  W d    n1 sQw   Y  qd S )
Nr_   r=  Tr"  r#  r?  r   r  r@  )r   rB  rC  r  r   r  r  rD  r   rk  r   r3  rE  )rM   r>  r5  rF  r   r   r   .test_shared_memory_pickle_unpickle_dead_object  s   z@_TestSharedMemory.test_shared_memory_pickle_unpickle_dead_objectc                 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   rv   s   HELLO)r   r  r   rk  r   r  r,   r   r   r   rg   r   r  r   )rM   r5  r   r   r   r   #test_shared_memory_across_processes  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 s9w   Y  |  d S r  )r   managersSharedMemoryManagerr   ShareableListr   rA   r   rj  r   r   rO  r   r  r   ri  )rM   smmslZsl2r   r   r   4test_shared_memory_SharedMemoryServer_ignores_sigint  s   
zF_TestSharedMemory.test_shared_memory_SharedMemoryServer_ignores_sigintzresource_tracker is posix onlyc                 C   s0   d}t jjjd|fi t\}}}| | d S )Nzif 1:
            from multiprocessing.managers import SharedMemoryManager


            smm = SharedMemoryManager()
            smm.start()
            sl = smm.ShareableList(range(10))
            smm.shutdown()
        rP  )r  r   rQ  rR  rS  r   rT  r   r   r   >test_shared_memory_SharedMemoryManager_reuses_resource_tracker  s   	zP_TestSharedMemory.test_shared_memory_SharedMemoryManager_reuses_resource_trackerc                    s  t j  | t  jdd W d    n1 sw   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 sw   Y  t j }|	d}|jd	d}	|j
j}W d    n1 sw   Y  tjdkr| t tj	|d}
W d    d S 1 sw   Y  d S d S )Nr  r  c                    s   g | ]	}  t|qS r   )rL  r   r  Zsmm1r   r   r    r  zS_TestSharedMemory.test_shared_memory_SharedMemoryManager_basics.<locals>.<listcomp>rv   r   c                    s   g | ]} j |d qS )r  )r  )r  rb  rQ  r   r   r    r  r        r   r,   r2   howdy)r   rJ  rK  r   rD   r  r   r   r   rL  shmr,   rg   r   r  r  ri  r  r  r3  )rM   ZlolZlomZdoppleganger_list0Zdoppleganger_shm0Z	held_nameZ
absent_shmZsmm2rN  rV  Z	absent_slr   rQ  r   -test_shared_memory_SharedMemoryManager_basics  s6   





"z?_TestSharedMemory.test_shared_memory_SharedMemoryManager_basicsc              	   C   s  t g d}| |jj | |jjt| | tt|t| | 	t
 |d  W d    n1 s8w   Y  | 	t
 d|d< W d    n1 sQw   Y  |d}d|d< | ||d | |jd | t|d t 0 td | 	t |d W d    n1 sw   Y  | |d	d
 W d    n1 sw   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 sw   Y  | |d d d|d< | |d d | |d d | td d|d< W d    n	1 s6w   Y  | |d d | td d|d< W d    n	1 sYw   Y  | |d d t ( td | |dd | |dd | |dd W d    n	1 sw   Y  | d}t j||d}zD| |jj|jj | ||jj | t|t| | |j|j d|d< | |d d | |d d |j  W |j  n|j  w 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 sMw   Y  |j  W |j  d S |j  w ) N)rU     HoWdYgX9vqr   NTr3  r  r   r   rU  z8s8sdqxxxxxx?xxxxxxxx?qignore100r   r|  r%  Tr3  Zsomer  z8s8sdq8sxxxxxxx?qzexceeds available storagezfar too manyu   encodésr_   rX  u	   encodéess	   123456789s   adiosZtest03_duplicaterT  M   r@   ip  r  any)r   rL  r   rV  rk  r   r,   r`  r   r   
IndexErrorZ_get_packing_formatrg   r   r   warningscatch_warningssimplefilterrD   r  r  r  rG  r!  r   r   )rM   rN  Zcurrent_formatZname_duplicateZsl_copyZsl_tetheredZempty_slr   r   r   'test_shared_memory_ShareableList_basics   s   












z9_TestSharedMemory.test_shared_memory_ShareableList_basicsc              	   C   s.  t tjd D ]}| j|d} tt d}| |jj tj	||d}t
|}| |tj | |d d | || d|d< | |d d d	|d
< | |d
 d	 tt d}| |jj tj	||d}| t|t| |j  |j  |j  W d    n1 sw   Y  qd S )Nr_   r=  r   r@  r@   r  changedr  Znewvaluer|  i  )r   rB  rC  r  r   rL  r   rV  rk  rD  rE  r   rg   ZassertIsNotr   r   )rM   r>  rN  serialized_slZdeserialized_slZ	larger_slZserialized_larger_slr   r   r   )test_shared_memory_ShareableList_picklingq  s2   


z;_TestSharedMemory.test_shared_memory_ShareableList_picklingc              
   C   s   t tjd D ]J}| j|d: tt d}tj||d}|j  |j	  | 
t t| W d    n1 s=w   Y  W d    n1 sLw   Y  qd S )Nr_   r=  r   r@  )r   rB  rC  r  r   rL  rD  rV  r   rk  r   r3  rE  )rM   r>  rN  rc  r   r   r   5test_shared_memory_ShareableList_pickling_dead_object  s   

zG_TestSharedMemory.test_shared_memory_ShareableList_pickling_dead_objectc              	   C   s   d}t jtjdd|gt jt jdu}|j   }|	  |
  t tj }d}t |k rWt| t|d d}z	tj|dd	}W n	 tyP   Y nw t |k s2td
tjdkr~td| d |j  }| d| W d    d S W d    d S 1 sw   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)
        -ErP  r>  r0   r   rv   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   r4   rP   rQ   r   r   r   minr   r  r3  r   rA   r,   r*   
unregisterr@  rn  r   )rM   rU  r   r,   deadlinerT   rM  rq  r   r   r   4test_shared_memory_cleaned_after_process_termination  s>   


"zF_TestSharedMemory.test_shared_memory_cleaned_after_process_terminationN)rW   rX   rY   rn   r  r  r!  r:  rE   rW  r;  r<  rG  rH  rI  rA   r,   rO  rP  rW  ra  rd  re  rr  r   r   r   r   r    s*    

p


q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 )_TestFinalizerd  c                 C   s   t j | _t j  d S r   )r
   _finalizer_registryr   registry_backupr.  rr   r   r   r   r8    r  z_TestFinalize.setUpc                 C   s&   t   | tj tj| j d S r   )r  r	  r   r
   rt  updateru  rr   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                   @   r  )z)_TestFinalize._test_finalize.<locals>.FooNr  r   r   r   r   rd    rc  rd  )rc   r   )rd   )ry   )d10r_   )rR   exitpriority)d01r   )d02)d03r   i)STOPi)
r  r
   Finalizer   r  r	  Z_exit_functionr   rA   _exit)r   r_  rd  rc   rd   Zclose_bry   rw  ry  rz  r{  r   r   r   _test_finalize  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  r  r   r   r   r    r  z/_TestFinalize.test_finalize.<locals>.<listcomp>r}  )rc   rd   rw  r{  rz  ry  r   )	r   r   r  r   r   r   r\  r   rg   )rM   r_  rZ  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 }zKtd
 tddd tj|dtj|dg}t	
| td dW d    n1 sYw   Y  d urdW t| tj|  t  d S t| tj|  t  w )Nc                   S      d S r   r   r   r   r   r   cb  r  z,_TestFinalize.test_thread_safety.<locals>.cbc                       s   e Zd Z fddZdS )z-_TestFinalize.test_thread_safety.<locals>.Fooc                    s"   | | _ tj|  tddd d S )Nr_   r   )rx  )r  r
   r~  r  randintrr   r  r   r   rN     s   z6_TestFinalize.test_thread_safety.<locals>.Foo.__init__N)rW   rX   rY   rN   r   r  r   r   rd    r-  rd  Fc               
      sX   s*t t d  zt  W n ty% }  z|  W Y d } ~ nd } ~ ww rd S d S r  )rP   r   r  r
   Z_run_finalizersr  r|  )r  finishr   r   run_finalizers  s   z8_TestFinalize.test_thread_safety.<locals>.run_finalizersc               
      sj   i } s3z fddt dD | td< W n ty. } z||   W Y d }~nd }~ww rd S d S )Nc                    s   h | ]}  qS r   r   r  )rd  r   r   	<setcomp>0  r#  zL_TestFinalize.test_thread_safety.<locals>.make_finalizers.<locals>.<setcomp>r   rv   )r   r  getrandbitsr  r.  )re  r   )rd  r  r  r   r   make_finalizers)  s   $z9_TestFinalize.test_thread_safety.<locals>.make_finalizersgư>rv   r   r  T)r  r  getswitchintervalr  r  setswitchintervalr  r   r0  r   Zstart_threadsrP   r   r	  )rM   r  r  Zold_intervalZold_thresholdr]   r   )rd  r  r  r  r   test_thread_safety  s6   








z _TestFinalize.test_thread_safetyN)
rW   rX   rY   rn   r8  r:  rT  r  r  r  r   r   r   r   rs    s    
'rs  c                   @   rH   )_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 )r_   r   )rA   pathsplitextsplit)r  rp  r   r   r   r  R  s   ( z4_TestImportStar.get_module_names.<locals>.<listcomp>c                 S   s   g | ]}d | qS )zmultiprocess.r   )r  r@  r   r   r   r  S  r%  zmultiprocess.__init__r  )
globrA   r  dirnamer   __file__r   escaper5  r   )rM   r  folderpatternfilesmodulesr   r   r   get_module_namesM  s   


z _TestImportStar.get_module_namesc                 C   s   |   }tjdkr|d |d |d n|d ts%|d td u r.|d |D ]'}t| tj| }| t	|d| |j
D ]}| t	||d||f  qGq0d S )	Nr2   zmultiprocess.popen_forkzmultiprocess.popen_forkserverzmultiprocess.popen_spawn_posixzmultiprocess.popen_spawn_win32zmultiprocess.sharedctypes__all__z%r does not have attribute %r)r  r  r  r5  r  r<   r  r  r   r   r  )rM   r  r,   modattrr   r   r   test_importX  s*   








z_TestImportStar.test_importN)rW   rX   rY   r  r  r   r   r   r   r  K  s    r  c                   @   s,   e Zd ZdZdd Zedd Zdd ZdS )	_TestLoggingrd  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
   
SUBWARNINGr   debuginfo	LOG_LEVEL)rM   loggerr   r   r   test_enable_loggingz  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	getLoggerr  r   r  r   r  r   rg   r   r   r   NOTSETr  )	rM   ZLEVEL1ZLEVEL2r  Zroot_logger
root_levelr  r  r   r   r   r   
test_level  s*   


z_TestLogging.test_levelN)rW   rX   rY   rn   r  rT  r  r  r   r   r   r   r  v  s    
r  c                   @   s6   e Zd ZdZedd Zeee	dddd Z
dS )	_TestPollEintrrd  c                 C   s   t d t|tj d S r  )rP   r   rA   r   r   SIGUSR1)r   r   r   r   r   _killer  s   
z_TestPollEintr._killerr  requires SIGUSR1c              
      s   dg  fdd}t  }ttj|}zA| j| j|fd}|  z| jtjdd}|  |	  W |	  n|	  w | 
 d  | |jd W ttj| d S ttj| w )NFc                     s   d d< d S )NTr   r   r   Z
got_signalr   r   record  r   z._TestPollEintr.test_poll_eintr.<locals>.recordr   )r   r   )rA   r   r   r  r   r  r   rP   r   r   r   rg   r   )rM   r  r   Z
oldhandlerZkillerr   r   r  r   test_poll_eintr  s   
"z_TestPollEintr.test_poll_eintrN)rW   rX   rY   rn   rT  r  rE   rU  r   r   r  r   r   r   r   r    s    
r  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y   Y nw W d |_nd |_w | ttft jjd d S )NiMr@   )r   r  
Connectionr   rD   r  Z_handler   r  r   r   r   test_invalid_handles  s   
z&TestInvalidHandle.test_invalid_handlesN)rW   rX   rY   rE   rW  WIN32r  r   r   r   r   r    s    
r  c                   @   rH   )	OtherTestc                 C   ,   G dd dt }| tjtjj| d d S )Nc                   @   rH   )zFOtherTest.test_deliver_challenge_auth_failure.<locals>._FakeConnectionc                 S   r  )N   something bogusr   rM   r  r   r   r   r    r  zQOtherTest.test_deliver_challenge_auth_failure.<locals>._FakeConnection.recv_bytesc                 S   r  r   r   rM   r  r   r   r   r    r  zQOtherTest.test_deliver_challenge_auth_failure.<locals>._FakeConnection.send_bytesN)rW   rX   rY   r  r  r   r   r   r   _FakeConnection  r3  r     abc)r  r   r   AuthenticationErrorr  Zdeliver_challengerM   r  r   r   r   #test_deliver_challenge_auth_failure  s
   z-OtherTest.test_deliver_challenge_auth_failurec                 C   r  )Nc                   @   r  )zEOtherTest.test_answer_challenge_auth_failure.<locals>._FakeConnectionc                 S   
   d| _ d S r  )rG  rr   r   r   r   rN     r   zNOtherTest.test_answer_challenge_auth_failure.<locals>._FakeConnection.__init__c                 S   s2   |  j d7  _ | j dkrtjjS | j dkrdS dS )Nr_   r   r  r  )rG  r   r  Z	CHALLENGEr  r   r   r   r    s   

zPOtherTest.test_answer_challenge_auth_failure.<locals>._FakeConnection.recv_bytesc                 S   r  r   r   r  r   r   r   r    r  zPOtherTest.test_answer_challenge_auth_failure.<locals>._FakeConnection.send_bytesN)rW   rX   rY   rN   r  r  r   r   r   r   r    s    r  r  )r  r   r   r  r  Zanswer_challenger  r   r   r   "test_answer_challenge_auth_failure  s
   z,OtherTest.test_answer_challenge_auth_failureN)rW   rX   rY   r  r  r   r   r   r   r    s    
r  c                 C   s   |  j d7  _ d S r^   )r  )nsr   r   r   initializer  r/   r  c                   @   rX  )
TestInitializersc                 C   s"   t  | _| j | _d| j_d S r  )r   Managermgrr  r  r  rr   r   r   r   r8    s   
zTestInitializers.setUpc                 C   s   | j   | j   d S r   )r  ri  r   rr   r   r   r   r:    r  zTestInitializers.tearDownc                 C   sN   t j }| t|jd |t| jf | | jj	d |
  |  d S r^   )r   rJ  SyncManagerr   	TypeErrorr   r  r  rg   r  ri  r   )rM   r@  r   r   r   test_manager_initializer   s   
z)TestInitializers.test_manager_initializerc                 C   sH   | j ttjdd tdt| jf}|  |  | | jj	d d S )Nr_   )r  )
r   r  r   r  r  r  r   r   rg   r  r   r   r   r   test_pool_initializer(  s
   z&TestInitializers.test_pool_initializerN)rW   rX   rY   r8  r:  r  r  r   r   r   r   r    s
    r  c                 C   s*   z	| j dd}W d S  tjy   Y d S w )NF)block)r   r  r  )rx   itemr   r   r   _this_sub_process4  s
   r  c                  C   s2   t  } t jt| fd}d|_|  |  d S r   )r   r   r   r  r   r   r   )r!   ZsubProcr   r   r   _test_process:  s
   r  c                 C   s   | |  S r   r   r  r   r   r   _afuncA  rm   r  c                  C   s0   t jdd} | tg d}|   |   d S )Nr  rd  )r_   r   r|  r  rv   r  r  )r   r  r  r  r   r   )r  rj  r   r   r   pool_in_processD  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   rJ   r   )	_delegate_pid)rM   Zdelegater   r   r   rN   K  rO   z_file_like.__init__c                 C   s$   t  }|| jkr|| _g | _| jS r   )rA   r   r  _cacher*  r   r   r   cacheO  s
   
z_file_like.cachec                 C   s   | j | d S r   )r  r   r  r   r   r   r  X  r2  z_file_like.writec                 C   s   | j d| j g | _d S )Nr  )r  r  r   r  r  rr   r   r   r   flush[  s   
z_file_like.flushN)rW   rX   rY   rN   propertyr  r  r  r   r   r   r   r  J  s    
r  c                   @   r  )TestStdinBadfiledescriptorc                 C       t jtd}|  |  d S Nr   )r   r   r  r   r   )rM   r3  r   r   r   test_queue_in_processa     z0TestStdinBadfiledescriptor.test_queue_in_processc                 C   r  r  )r   r   r  r   r   r   r   r   r   test_pool_in_processf  r  z/TestStdinBadfiledescriptor.test_pool_in_processc                    sJ   t  }t|  d tj fddd}   | dks#J d S )Nr  c                      s      S r   )r  r   Zfliker   r   r  o  r  z:TestStdinBadfiledescriptor.test_flushing.<locals>.<lambda>r   )r7  r8  r  r  r   r   r  r  )rM   sior3  r   r  r   test_flushingk  s   
z(TestStdinBadfiledescriptor.test_flushingN)rW   rX   rY   r  r  r  r   r   r   r   r  _  s    r  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   r0   )r   rP   r   r  r   rA   r   r   )r   rs  slowr   r   r   r   _child_test_waitv  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|ri||D ] }z| }	W n ty`   || |	  Y qFw |
|	 qF|sB|  t fdd	td
D }
| ||
 d S )Nr   r3   r  Fr   r   Tc                 3   s$    | ]} D ]}||j fV  qqd S r   rE  )r  r   r   r  r   r   r    s   " z%TestWait.test_wait.<locals>.<genexpr>r   )multiprocess.connectionr4   r   r   r   r   r  r   r   r   r   r   r   r   r  r5  r  r  rg   )rM   r  r4   readersmessagesr   r  rs  r   r  r   r   r  r   	test_wait~  s4   



zTestWait.test_waitc                 C   sV   t   }|| tdD ]}|rtt d  |d| d q|  d S )Nr   r0   %s
r  )	r  r  r   rP   r   r  r  r   r   )r   r   r  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 qtdD ]}| \}
}||
 g ||
< q?|  |rx||D ]}
|
d}|sn||
 |
  q[||
 | q[|sWddd	 td
D d}| D ]}| d|| qd S )Nr   r3   r  r   Tr  r  c                 s   s    | ]}d | V  qdS )r  Nr   r  r   r   r   r    rJ  z,TestWait.test_wait_socket.<locals>.<genexpr>r   r  r  )r  r4   r  r  r   r  r  r   r   r   r  r   r   r   r   r   r  r   r   r5  r   rr  rg   )rM   r  r4   r  r  r  r  Zdicr   r   r  r  r  r   vr   r   r   test_wait_socket  s>   





	zTestWait.test_wait_socketc                 C      |  d d S r  )r  rr   r   r   r   test_wait_slow  r0  zTestWait.test_wait_slowc                 C   r  r  )r  rr   r   r   r   test_wait_socket_slow  r0  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   r3   rv   r   r(  r-  皙?)
r  r4   r   r   rP   rQ   rg   r  r!  r   )rM   r4   r   rc   rd   r   ri   r  r   r   r   test_wait_timeout  s   
zTestWait.test_wait_timeoutc                 C   s   |   t| d S r   )r  rP   r   )r   r  Zperiodr   r   r   signal_and_sleep  rF  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   r3   r|  c                 S   s   t | dd dS )Nc                 S   s   t | S r   )r   r  r   r   r   r    r  z>TestWait.test_wait_integer.<locals>.<lambda>.<locals>.<lambda>)r0  )r  )r  r   r   r   r    r  z,TestWait.test_wait_integer.<locals>.<lambda>r   r-  r$   r   r  )r  r4   r   r  r   r   r  r   r   r   r   r   r  rP   rQ   rg   r  r!  r   r   r   )rM   r4   r   Zsorted_r  rc   rd   r   r   ri   r  r   r   r   test_wait_integer  s>   


zTestWait.test_wait_integerc                 C   sf   ddl m} t \}}t }||gdd}t | }| |g  | |d |  |  d S )Nr   r3   r@   r$   r_   )	r  r4   r   r   rP   rQ   rg   r  r   )rM   r4   rc   rd   rT   ri   r   r   r   test_neg_timeout  s   zTestWait.test_neg_timeoutNr}  )rW   rX   rY   rT  r  r  r  r  r  r  r  r  r  r  r   r   r   r   r  t  s    



	#
+r  c                   @   s4   e Zd Zeeddd Zeeddd ZdS )TestInvalidFamilyr  c                 C   <   |  t tjd W d    d S 1 sw   Y  d S )Nz\\.\testr   rD   r   r  r  rr   r   r   r   test_invalid_family'     "z%TestInvalidFamily.test_invalid_familyz skipped on non-Windows platformsc                 C   r  )Nz/var/test.piper  rr   r   r   r   test_invalid_family_win32,  r   z+TestInvalidFamily.test_invalid_family_win32N)	rW   rX   rY   rE   rW  r  r  rU  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_grandchild6  r  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  printrD  )r   r  r  rs  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   zBfrom multiprocess.tests import TestFlags; TestFlags.run_in_child()rf  z-Sz-OrP  r  )r  rh  check_outputr  rj  rE  rn  rg   )rM   r  progr  Zchild_flagsr  r   r   r   _test_flagsG  s   zTestFlags._test_flagsN)rW   rX   rY   rT  r  r	  r  r   r   r   r   r  5  s    

r  c                   @   r  )TestTimeoutsc                 C   s>   t d |d |  tj|}|d |  d S )Nr_   r  r  )rP   r   r   r   r   r  r  )r   childr   r_  r   r   r   _test_timeoutV  s   


zTestTimeouts._test_timeoutc              	   C   s   t  }zSt d tjdd\}}tjjdd}tj| j||j	fd}|
  |  | | d |  | }| | d |  |  t| W t | d S t | w )	Nr0   Tr   AF_INETr  r   r  r  )r  getdefaulttimeoutsetdefaulttimeoutr   r   r  r  r   r  r   r   r   rg   r   r  r(   )rM   Zold_timeoutparentr  r  r   r_  r   r   r   r  _  s$   

zTestTimeouts.test_timeoutN)rW   rX   rY   rT  r  r  r   r   r   r   r  U  s    
r  c                   @   rs   )TestNoForkBombc                 C   s   t  }tjtjtd}|dkr,tjj	
||\}}}| |d | d| d S tjj	j||fi t\}}}| | d | |d d S )Nzmp_fork_bomb.pyr  r  s   RuntimeErrors   123)r   r  rA   r  r   r  r  r  r   rQ  Zassert_python_failurerg   r   rR  rS  r  )rM   r  r,   r  rV  rq  r   r   r   test_noforkbombx  s   zTestNoForkBomb.test_noforkbombN)rW   rX   rY   r  r   r   r   r   r  w  rz   r  c                   @   r  )TestForkAwareThreadLockc                 C   sV   |dkrt j| j|d |fd}|  |  t| n|ttj	 |  d S )Nr_   r   )
r   r   r  r   r   r(   r   r   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 )NFrv   r   )r   r   r
   ZForkAwareThreadLockr   r  r   r  r   r   r   r(   ZassertLessEqual)rM   r  rs  r  Zold_sizer   new_sizer   r   r   r    s   
z!TestForkAwareThreadLock.test_lockN)rW   rX   rY   rT  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   s\   t rt  S t  }g }|dk r"|| t|}|dk s|D ]}t| q$|S )NrG  )r  r  detachr   rA   dupr   )rM   ry  to_closerj  r   r   r   get_high_socket_fd  s   

zTestCloseFds.get_high_socket_fdc                 C   s.   t rtjtjtj|d  d S t| d S )N)r  )r  r  r  SOCK_STREAMr   rA   )rM   ry  r   r   r   r     s   zTestCloseFds.closec              
   C   s^   zt |t jt j}W n ty# } z|| W Y d }~d S d }~ww |  |d  d S r   )r  fromfdr  r  r  r   r   )r   r_  ry  r   r   r   r   r   _test_closefds  s   zTestCloseFds._test_closefdsc              	   C   s   t stdt \}}|  }z)tj| j||fd}|  |	  |
 }t| W | 	| |	  |	  n| 	| |	  |	  w t dkrW| |d  d S d}| |t | |jtjkpk|j|k| d S )Nzrequires fd picklingr   r  i6'  )r  rE   rF   r   r   r  r   r   r   r   r   r(   r  r
  r   r  r   r  r  winerror)rM   r  r  ry  r   r   ZWSAENOTSOCKr   r   r   test_closefd  s2   






zTestCloseFds.test_closefdN)rW   rX   rY   r  r   rT  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   r  r   r   rM  framer   r   r   r     r  z-TestIgnoreEINTR._test_ignore.<locals>.handlerready   x)r   r  r   r   r  CONN_MAX_SIZE)r   r_  r   rj  r   r   r   _test_ignore  s   

zTestIgnoreEINTR._test_ignorer  r  c                 C   s   t  \}}zct j| j|fd}d|_|  |  | | d t	
d t|jtj t	
d |d | | d t	
d t|jtj | | d| j  t	
d |  W |  d S |  w )Nr   Tr&  r0   i  r'  )r   r   r   r)  r   r   r   rg   r   rP   r   rA   r   r   r   r  r   r  r(  r   r  r   r   r   test_ignore  s(   





zTestIgnoreEINTR.test_ignorec                 C   sd   dd }t  t j| tj }||j | }|d W d    d S 1 s+w   Y  d S )Nc                 S   r  r   r   r$  r   r   r   r     r  z6TestIgnoreEINTR._test_ignore_listener.<locals>.handlerwelcome)r   r  r   r  r  r   r   r  )r   r_  r   r  rc   r   r   r   _test_ignore_listener  s   "z%TestIgnoreEINTR._test_ignore_listenerc                 C   s   t  \}}zCt j| j|fd}d|_|  |  | }t	d t
|jtj t	d t j|}| | d |  W |  d S |  w )Nr   Tr0   r+  )r   r   r   r,  r   r   r   r   rP   r   rA   r   r   r   r  r  r  rg   r   )rM   r_  rZ  r   r   r  r   r   r   test_ignore_listener  s    


z$TestIgnoreEINTR.test_ignore_listenerN)rW   rX   rY   maxr   ZPIPE_MAX_SIZEZSOCK_MAX_SIZEr(  rT  r)  rE   rU  r   r   r*  r,  r-  r   r   r   r   r#    s    
	

	r#  c                   @   s@   e Zd Zedd Zdd Zdd Zdd Zd	d
 Zdd Z	dS )TestStartMethodc                 C   s   | t  d S r   )r   r   r  r  r   r   r   _check_context-     zTestStartMethod._check_contextc                 C   s^   |j dd\}}|j| j|fd}|  |  | }|  |  | ||  d S )NFr   r   )	r   r   r0  r   r   r   r   rg   r  )rM   r  r  rs  r   Zchild_methodr   r   r   check_context1  s   zTestStartMethod.check_contextc              	   C   sz   dD ]8}zt |}W n	 ty   Y qw | | | | | | | t|jd | t|jd  | | qd S )Nr  r  rH  r  )	r   r  rD   rg   r  r
  r   set_start_methodr2  )rM   methodr  r   r   r   r  ;  s   zTestStartMethod.test_contextc              
   C   s   t t d}t  }zWdD ]K}z	t j|dd W n	 ty"   Y qw | t  | t  }| | | | t	|j
 | | |jj
 | | t  |d7 }qW t j|dd nt j|dd w | |d d S )Nr   r3  Tforcer_   )r   set_forkserver_preloadPRELOADr  r4  rD   rg   r  r   r   rW   lower
startswithr   r2  r  )rM   rG  Z
old_methodr5  r  r   r   r   test_set_getG  s,   


 zTestStartMethod.test_set_getc                 C   s^   t  }tjdkr| |dg d S | |ddgkp+|ddgkp+|g dkp+|g dk d S )Nr2   r  r  r3  )r  r  rH  )r   Zget_all_start_methodsr  r  rg   r   )rM   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
j|fi t\}}}| }| }| dks6|dkrEt| t| | d d S d S )NrH  z*test only relevant for 'forkserver' methodzmp_preload.pyokr  z(failed spawning forkserver or grandchild)r   r  r   rA   r  r   r  r  r  r   rQ  rR  rS  rn  r  r  r  )rM   r,   r  rV  rq  r   r   r   test_preload_resourcesg  s   
z&TestStartMethod.test_preload_resourcesN)
rW   rX   rY   rT  r0  r2  r  r<  r>  r@  r   r   r   r   r/  ,  s    


r/  r  c                   @   sP   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d ZdS )TestResourceTrackerc                 C   s  d}t jD ]}| j|d |dkr	 W d    qt \}}tjtjdd|j	||dg|gtj
d}t| t|dd	d
}|  d}|  d}W d    n1 s]w   Y  t|| |  |  t tj }	t |	k rtd zt|| W n ty }
 z| |
jtjtjf W Y d }
~
nd }
~
ww t |	k s|td| d|j d}|j  d	|}|  || |  |d|  W d    n1 sw   Y  qd S )Na"  if 1:
            import time, os, tempfile
            import multiprocess as mp
            from multiprocess import resource_tracker
            from multiprocess.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nooprf  rP  )rs  r-   )pass_fdsr@  r  T)ru  r  r(  zA z= resource was leaked after a process was abruptly terminated.rf  z8resource_tracker: There appear to be 2 leaked {} objectszresource_tracker: %r: \[Errno)!r*   r+   r  rA   piperh  ri  r  rj  r   rk  r   rm  rl  r  rn  r.   r   r4   rP   rQ   r   r   r   r  r   r  ENOENTEINVALr   r@  rn  assertRegex)rM   rU  r-   r  rs  r   rp  Zname1Zname2rq  r   rq  r   r   r   r   _test_resource_trackerx  s^   






z*TestResourceTracker._test_resource_trackerc           
      C   sr  ddl m} |j}|d urt|tj tj|tj d t	
  t	d |  W d    n1 s5w   Y  |j}t|| td td}t	j
dd\}t	d	 | }|  |  t|}~t  | |  |r| t|d
 |d }	| t|	jt | dt|	j v  n| t|d W d    d S W d    d S 1 sw   Y  d S )Nr   _resource_tracker)r   rY  rY  r  T)r  alwaysr_   zresource_tracker: process died)!multiprocess.resource_trackerrI  r  rA   r   r   r   r   Zwait_processr^  r_  r`  rL  rP   r   r   r  r  r  r  r  r  r  r	  r   rg   r   r   
issubclasscategoryUserWarningr`  message)
rM   rM  Z
should_dierI  r   r  Zall_warnr  r  Zthe_warnr   r   r   check_resource_tracker_death  sB   






"z0TestResourceTracker.check_resource_tracker_deathc                 C      |  tjd d S r  )rP  r   rO  rr   r   r   r   test_resource_tracker_sigint  r1  z0TestResourceTracker.test_resource_tracker_sigintc                 C   rQ  r  )rP  r   r   rr   r   r   r   test_resource_tracker_sigterm  r1  z1TestResourceTracker.test_resource_tracker_sigtermc                 C   rQ  r  )rP  r   r   rr   r   r   r   test_resource_tracker_sigkill  r1  z1TestResourceTracker.test_resource_tracker_sigkillc                 C   s<   ddl m} |  |jd |fv }|| M }| | d S )Nr   rH  )rK  rI  rL  r  Z_check_aliver   )r_  r   rI  Zreusedr   r   r   _is_resource_tracker_reused  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   rH  Fr   r   )rK  rI  rL  r  r   r   r   rU  r   r   r   r   r   )rM   rI  r   r  rs  r   Zis_resource_tracker_reusedr   r   r   test_resource_tracker_reused  s   z0TestResourceTracker.test_resource_tracker_reusedc                 C   sP   d}ddt |  }| t t|| W d    d S 1 s!w   Y  d S )Nr   rc   r"  )r   r   rD   r*   register)rM   r-   Ztoo_long_name_resourcer   r   r   test_too_long_name_resource  s
   "z/TestResourceTracker.test_too_long_name_resourceN)rW   rX   rY   rG  rP  rR  rS  rT  r  rU  rV  rX  r   r   r   r   rA  t  s    J%
	rA  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 |  d S |  w r   )r4   rw   r  r   r  r   r   r   _test_empty  s
   zTestSimpleQueue._test_emptyc                 C   s   t  }t  }t  }t j| j|||fd}d|_|  | |  |	  |
  | |  | | d | | d | |  |  d S )Nr   TF)r   SimpleQueuer   r   rZ  r   r   r   r  r   r4   r   rg   r   r   )rM   r!   r  r  r3  r   r   r   
test_empty$  s"   zTestSimpleQueue.test_emptyc                 C   s   t  }|  |  d S r   )r   r[  r   rM   r!   r   r   r   r  <  s   zTestSimpleQueue.test_closec                 C   s0   t  }|  | |jj | |jj d S r   )r   r[  r   r   _readerr  Z_writerr]  r   r   r   test_closedC  s   zTestSimpleQueue.test_closedN)rW   rX   rY   rT  rZ  r\  r  r  r   Zcpython_onlyr_  r   r   r   r   rY    s    
	rY  c                   @   rs   )TestPoolNotLeakOnFailurec                    s   dg  G  fddd}|  td tjjdtjj|dd}|  |	  W d    n1 s4w   Y  | 
tdd	  D  d S )
Nr|  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,   r   r  r   )rM   r   )forked_processesr   r   rN   T  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 OSErrorr_   r#  )r  r  rr   )will_fail_inr   r   r   Z  s   
zXTestPoolNotLeakOnFailure.test_release_unused_processes.<locals>.FailingForkProcess.startc                 S   r  )Nstoppingr  rr   r   r   r   r   a  r   z\TestPoolNotLeakOnFailure.test_release_unused_processes.<locals>.FailingForkProcess.terminatec                 S   s   | j dkr
d| _ d S d S )Nrd  stoppedr  rr   r   r   r   r   d  s   

zWTestPoolNotLeakOnFailure.test_release_unused_processes.<locals>.FailingForkProcess.joinc                 S   s   | j dkp	| j dkS )Nr#  rd  r  rr   r   r   r   r   h  s   z[TestPoolNotLeakOnFailure.test_release_unused_processes.<locals>.FailingForkProcess.is_aliveN)rW   rX   rY   rN   r   r   r   r   r   ra  rc  r   r   FailingForkProcessS  s    rg  rb  rv   )r   )contextc                 s   rH  r   rI  )r  r'   r   r   r   r  q  rJ  zITestPoolNotLeakOnFailure.test_release_unused_processes.<locals>.<genexpr>)r  r  r   r  r  rE   r.  Z	MagicMockr   r   r   r\  )rM   rg  r   r   rf  r   test_release_unused_processesM  s   

z6TestPoolNotLeakOnFailure.test_release_unused_processesN)rW   rX   rY   ri  r   r   r   r   r`  K  s    r`  c                   @   sd  e Zd 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dHd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/d0Zd1d2 Z e
d3d4 Z!d5d6 Z"e
d7d8 Z#d9d: Z$e
d;d< Z%d=d> Z&e
d?d@ Z'dAdB Z(e
dCdD Z)dEdF Z*dGS )KTestSyncManagerTypesa}  Test all the types which can be shared between a parent and a
    child process by using a manager which acts as an intermediary
    between them.

    In the following unit-tests the base type is created in the parent
    process, the @classmethod represents the worker process and the
    shared object is readable and editable between the two.

    # The child.
    @classmethod
    def _test_list(cls, obj):
        assert obj[0] == 5
        assert obj.append(6)

    # The parent.
    def test_list(self):
        o = self.manager.list()
        o.append(5)
        self.run_worker(self._test_list, o)
        assert o[1] == 6
    c                 C   s   |   | _| j  d | _d S r   )manager_classr\   r   r3  rr   r   r   r   r8    s   


zTestSyncManagerTypes.setUpc                 C   sB   | j d ur| j  r| j   | j   | j  d | _d | _ d S r   )r3  r   r   r   r\   ri  rr   r   r   r   r:    s   



zTestSyncManagerTypes.tearDownc                 C   s   t   d S r   )r   Zreap_childrenr   r   r   r   r       zTestSyncManagerTypes.setUpClassc                 C   s   t | j t }d}tt dkrDt| |d9 }t | }|dkr:dtj	_
t	dt  d| d d S tt dksd S d S )	Nr  r_   r   r  Tmultiprocess.Manager still has  active children after  seconds)r(   r3  rP   rQ   r   r   r   r   r  r   environment_alteredprint_warning)rM   
start_timerT   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   r3  r   r   rs  rg   r   )rM   Zworkerr  r   r   r   
run_worker  s
   
zTestSyncManagerTypes.run_workerc                 C   s*   |  sJ |  |  |d d S Nr  )r2  r4   r.  r   r  r   r   r   r    s   z TestSyncManagerTypes._test_eventc                 C   s:   | j  }|  | | j| | rJ |d d S ru  )r\   r   r   rt  r  r2  r4   rM   r$  r   r   r   r    s
   
zTestSyncManagerTypes.test_eventc                 C      |   d S r   r  rv  r   r   r   
_test_lock  rl  zTestSyncManagerTypes._test_lockr  c                 C   s6   t | j| }| | j| |  | t|j d S r   )rA  r\   rt  rz  r  r   r   rM   lnamer$  r   r   r   r    s   zTestSyncManagerTypes.test_lockc                 C      |   |  d S r   r  r  rv  r   r   r   _test_rlock     z TestSyncManagerTypes._test_rlockc                 C   s    t | j| }| | j| d S r   )rA  r\   rt  r  r{  r   r   r   r       zTestSyncManagerTypes.test_rlockc                 C   rx  r   ry  rv  r   r   r   r    rl  z$TestSyncManagerTypes._test_semaphorer  c                 C   s(   t | j| }| | j| |  d S r   )rA  r\   rt  r  r  )rM   snamer$  r   r   r   r    s   z#TestSyncManagerTypes.test_semaphorec                 C   r|  )Nr  )r  )r  rr   r   r   r   r    r2  z+TestSyncManagerTypes.test_bounded_semaphorec                 C   r}  r   r~  rv  r   r   r   _test_condition  r  z$TestSyncManagerTypes._test_conditionc                 C   s   | j  }| | j| d S r   )r\   r  rt  r  rw  r   r   r   test_condition  s   
z#TestSyncManagerTypes.test_conditionc                 C   s   |j dksJ |  d S ru   )r<  rR  rv  r   r   r   _test_barrier  r  z"TestSyncManagerTypes._test_barrierc                 C   s   | j d}| | j| d S ru   )r\   r5  rt  r  rw  r   r   r   rC    s   z!TestSyncManagerTypes.test_barrierc                 C   s*   |	 W d    d S 1 sw   Y  d S r   r   rv  r   r   r   
_test_pool  s   "zTestSyncManagerTypes._test_poolc                 C   s    | j jdd}| | j| d S )Nr  rd  )r\   r  rt  r  rw  r   r   r   	test_pool  r  zTestSyncManagerTypes.test_poolc                 C   sd   |  dksJ | sJ | rJ | dksJ | r"J | dks*J | s0J d S Nr   rv   r  )r  r  r  r   rv  r   r   r   _test_queue  s   z TestSyncManagerTypes._test_queuer   c                 C   sN   t | j|d}|d |d | | j| | sJ | r%J d S r  )rA  r\   rw   rt  r  r  r  )rM   Zqnamer$  r   r   r   
test_queue  s   

zTestSyncManagerTypes.test_queuec                 C   r  )Nr  )r  rr   r   r   r   test_joinable_queue  r0  z(TestSyncManagerTypes.test_joinable_queuec                 C   st   |d dksJ | ddksJ |ddksJ |  |  |D ]}q$t|dks/J |ddks8J d S )Nr   rv   r_   )rG  r  r  reverser   r  )r   r  rj  r   r   r   
_test_list  s   zTestSyncManagerTypes._test_listc                 C   s>   | j  }|d | | j| |rJ | t|d d S )Nrv   r   )r\   r   r   rt  r  rg   r   rw  r   r   r   r  #  s
   

zTestSyncManagerTypes.test_listc                 C   s   t |dksJ |d dksJ |ddksJ t| dgks$J t| dgks/J t| dgks:J | ddiksDJ | dksLJ d S )Nr_   r  rv   )r  rv   )r   r   r   r6  r  rr  r   popitemrv  r   r   r   
_test_dict*  s   zTestSyncManagerTypes._test_dictc                 C   s<   | j  }d|d< | | j| |rJ | t|d d S )Nrv   r  r   )r\   r  rt  r  rg   r   rw  r   r   r   r  5  s
   
zTestSyncManagerTypes.test_dictc                 C   s,   |j dksJ | dksJ |d d S )Nr_   r   )rh   r   r   rv  r   r   r   _test_value<  s   z TestSyncManagerTypes._test_valuec                 C   s>   | j dd}| | j| | |jd | | d d S )Nr   r_   r   )r\   r   rt  r  rg   rh   r   rw  r   r   r   r{  B  s   zTestSyncManagerTypes.test_valuec                 C   sH   |d dksJ |d dksJ t |dksJ t|ddgks"J d S )Nr   r_   r   )r   r   rv  r   r   r   _test_arrayH  s   z TestSyncManagerTypes._test_arrayc                 C   s$   | j dddg}| | j| d S )Nr   r   r_   )r\   r  rt  r  rw  r   r   r   r  O  s   zTestSyncManagerTypes.test_arrayc                 C   s    |j dksJ |jdksJ d S r  r  rv  r   r   r   _test_namespaceS  s   z$TestSyncManagerTypes._test_namespacec                 C   s(   | j  }d|_d|_| | j| d S r  )r\   r  rj  rk  rt  r  rw  r   r   r   r  X  s   
z#TestSyncManagerTypes.test_namespaceNr  )r  )r   )+rW   rX   rY   r  r   rJ  r  rk  r8  r:  rT  r  r  rs  rt  r  r  rz  r  r  r  r  r  r  r  r  r  rC  r  r  r  r  r  r  r  r  r  r  r{  r  r  r  r  r   r   r   r   rj  t  sf    












	





rj  c                   @   s&   e Zd Zeejdkddd ZdS )TestNamedResource
SemLock subclassc                 C   s~   t j}| t j| t|ddd}|td W d    n1 s$w   Y  tj	j
j|fi t\}}}| |d d S )Nrs  rf  rg  aX                  import multiprocess as mp

                ctx = mp.get_context('spawn')

                global_resource = ctx.Semaphore()

                def submain(): pass

                if __name__ == '__main__':
                    p = ctx.Process(target=submain)
                    p.start()
                    p.join()
            r  )r   rj  r   rk  rm  r  textwrapdedentr  r   rQ  rR  rS  rg   )rM   ro  rp  r  rV  rq  r   r   r    test_global_named_resource_spawn`  s   z2TestNamedResource.test_global_named_resource_spawnN)rW   rX   rY   rE   rW  r  
hexversionr  r   r   r   r   r  _  s    r  c                   @   rs   )MiscTestCasec                 C   s   t j| ttjg dd d S )N)ZSUBDEBUGr  licenseZcitation)extraZnot_exported)r   Zcheck__all__r   r  rr   r   r   r   test__all__~  s   
zMiscTestCase.test__all__N)rW   rX   rY   r  r   r   r   r   r  }  rz   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  }|r<dt j_t	d|  d }d S )Nr   TDangling processes: r_   Dangling threads: )r  r   r-  r   r   r'   r  r  rp  rq  r   )r   r[   r]   r   r   r   r    s   
zBaseMixin.tearDownClassN)rW   rX   rY   rT  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  r[   N)rW   rX   rY   r~   r   r   r  r  r   r   r   r  r   r   r  r  r  r  r  r  r   r5  r   r  rv  r  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 )ManagerMixinr\   zmanager.Queuezmanager.JoinableQueuezmanager.Lockzmanager.RLockzmanager.Semaphorezmanager.BoundedSemaphorezmanager.Conditionzmanager.Eventzmanager.Barrierzmanager.Valuezmanager.Arrayzmanager.listzmanager.dictzmanager.Namespacec                 O   s   | j j|i |S r   )r\   r  )r   rR   rS   r   r   r   r    r1  zManagerMixin.Poolc                    s   t    t | _d S r   )r  r  r   r  r\   r   r  r   r   r    r   zManagerMixin.setUpClassc                    s   t  }d}tt dkr<t | |d9 }t  | }|dkr4dtj_t	dt  d| d ntt dkst
  | j d	krXdtj_t	d
 t	| j  | j  | j  d | _t   d S )Nr  r_   r   r  Trm  rn  ro  r   z5Shared objects which still exist at manager shutdown:)rP   rQ   r   r   r   r   r  r   rp  rq  r  r	  r\   Z_number_of_objectsZ_debug_infori  r   r  r  )r   rr  rT   r  r  r   r   r    s0   




zManagerMixin.tearDownClass)rW   rX   rY   r~   r   r   r  operator
attrgetterr   r  r  r  r  r  r  r   r5  r   r  r   r  r  rT  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 )ThreadsMixinr]   N)rW   rX   rY   r~   r   dummyr   r  r  r   r   r  r   r   r  r  r  r  r  r  r   r5  r   r  r   r   r   r   r    s&    r  c                    sT  | d }t  }h d}| D ]z\}}t|tsqt|trm|tu r#qt|j|ks/J |j|jD ]9}d|  |dd   }|| d  }	G dd d||	t	j
}
|dkr^td	|
}
| |
_|
_||
_|
| |< q2qt|t	j
rG d
d d|t}
| |
_|
_||
_|
| |< qd d g d g fdd} fdd}|| d< || d< d S )NrW   >   r[   r]   r\   Withr_   Mixinc                   @   r  z*install_tests_in_module_dict.<locals>.TempNr  r   r   r   r   Temp  rc  r  r\   r  c                   @   r  r  r  r   r   r   r   r  &  rc  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
y8   td w tjdrRzt  } W n tyQ   tdw t  t  t  t d S )	Nr   r_   T)
allow_noner6  z start method not supportedlinuxz1OSError raises on RLock creation, see issue 3111!)r   r8  r9  r'   _cleanupr  r   r   r  r4  rD   rE   rF   r  r  r;  r  r  rG   r
   Zget_temp_dirr  r  r  r  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  }|r,d} dt j_t	d|  d }tt
jt d  }|rId} dt j_t	d|  d }| rRtd tj  d S )	NFr   Tr6  r  r_   r  r(  )r  r   r-  r   r4  r   r'   r  rp  rq  r   rP   r   r
   Z_cleanup_tests)Z
need_sleepr[   r]   )r  r  r   r   tearDownModuleE  s$   

z4install_tests_in_module_dict.<locals>.tearDownModuler  r  )globalsr6  r   r   rL  rZ   r   rn   
capitalizerE   TestCaser   requires_hashdigestrW   rY   rX   r  )Zremote_globsr  rX   Zlocal_globsZ	ALL_TYPESr,   basetype_Znewnamer  r  r  r  r   r  r   install_tests_in_module_dict  s@   




r  SemLockzSemLock not availabler  z
Linux onlyr  r  c                   @   rs   )SemLockTestsc                 C   s>   G dd dt j}dt  }|ddd|d}t | d S )Nc                   @   r  )z3SemLockTests.test_semlock_subclass.<locals>.SemLockNr  r   r   r   r   r  l  rc  r  ztest_semlock_subclass-r_   r   r   F)r	   r  rA   r   Z
sem_unlink)rM   r  r,   r   r   r   r   test_semlock_subclassk  s   z"SemLockTests.test_semlock_subclassN)rW   rX   rY   r  r   r   r   r   r  f  s    r  rS  )rE   Zunittest.mockr!   r  r  rP   r7  r  r  rA   r  r  r   r  r  r  r  rh  r  r  rB  r  r^  Ztest.supportr  Ztest.support.script_helperr   r   r   r   r   r   r   import_moduler	   r   r  r   r  Zmultiprocess.dummyZmultiprocess.heapZmultiprocess.managersr=  Zmultiprocess.queuesr
   r   ZHAVE_SEND_HANDLEr  ImportErrorZmultiprocess.sharedctypesr   r   r
  r   Z	HAS_SHMEMr  r   r   rF   r  rS  r  r   r&   r   r"   r(   r,   r*   r.   r  r  r   r`   r  r  r  rA  ZHAVE_GETVALUEr  r  r4   r7   rB   r  r9  ctypesr;   r<   r=   r>   r  rG   rI   rZ   rp   rt   r{   r   rY  rc  r  r  r  r  r  r  r  r  r  r   r1  r4  rd  r  r  r  r  r  r  r  rD   r  r  r  r2  r4  r5  rB  rX  rY  r
  rZ  r_  r`  rb  rW  rg  r   rs  rt  rv  ry  r  r{  r  r  r  r  r  r  r  rU  r  r  r  r  r  rs  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r#  r/  rW  rA  rY  r`  rj  r  r  r  r  r  r  r  r  r  r   r   r   r   <module>   s  





    /W  G6  *39 FS 
 
	  l(H:
14  "0
R h
8    {+E"! 2 "BCH #3) k=W