
W             -   @   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 e j j d  Z e j j d  d  d l Z d  d l Z d  d l Z d  d l Z d  d l Z d  d l Z d  d l m Z y d  d l m Z e j  Z! Wn e" k
 rd Z! Yn Xy  d  d l# m$ Z$ m% Z% d Z& Wn e" k
 rd Z& Yn Xy d  d l' Z' Wn e" k
 rd Z' Yn Xd	 d
   Z( e j) Z* d Z+ d Z, e, r2d d d f \ Z- Z. Z/ n d d d f \ Z- Z. Z/ e0 e d d  Z1 e j2 d k Z3 d  d l m4 Z4 d d   Z5 y e j6 d  Z7 Wn d Z7 Yn Xd d g Z8 y  d  d l9 m: Z: m; Z; m< Z< Wn" e" k
 re= Z: d Z; Z< Yn Xd d   Z> Gd d   d e=  Z? Gd d   d e=  Z@ d d    ZA Gd! d"   d" e@  ZB Gd# d$   d$ e jC  ZD Gd% d&   d& e@  ZE d' d(   ZF d) d*   ZG Gd+ d,   d, e@  ZH Gd- d.   d. e@  ZI Gd/ d0   d0 e@  ZJ Gd1 d2   d2 e@  ZK Gd3 d4   d4 e@  ZL Gd5 d6   d6 e=  ZM d7 d8   ZN Gd9 d:   d: e=  ZO Gd; d<   d< e=  ZP Gd= d>   d> e@  ZQ Gd? d@   d@ e@  ZR GdA dB   dB e@  ZS GdC dD   dD e@  ZT dE dF dG  ZU dH dI   ZV GdJ dK   dK eW  ZX dL dM   ZY GdN dO   dO e@  ZZ dP dQ   Z[ dR dS   Z\ GdT dU   dU e@  Z] GdV dW   dW e@  Z^ d  dX l m_ Z_ m` Z` ma Za GdY dZ   dZ e=  Zb d[ d\   Zc Gd] d^   d^ e`  Zd Gd_ d`   d` e_  Ze ee jf da db eb ee jf dc db eb dd de df f ee jf d\ db ec dg ed Gdh di   di e@  Zg e jh   Zi dj dk   Zj Gdl dm   dm e_  Zk ek jf dk db ej Gdn do   do e_  Zl el jf dk  dp Zm Gdq dr   dr e@  Zn Gds dt   dt e@  Zo e( du  Zp Gdv dw   dw e@  Zq Gdx dy   dy e@  Zr Gdz d{   d{ e@  Zs Gd| d}   d} e@  Zt e  ju e! d~  Gd d   d e@   Zv Gd d   d e@  Zw Gd d   d e:  Zx Gd d   d e@  Zy Gd d   d e@  Zz Gd d   d e  j{  Z| Gd d   d e@  Z} Gd d   d e@  Z~ Gd d   d e  j{  Z Gd d   d e  j{  Z d d   Z Gd d   d e  j{  Z d d   Z d d   Z d d   Z d d   Z Gd d   d e=  Z Gd d   d e  j{  Z Gd d   d e  j{  Z Gd d   d e  j{  Z Gd d   d e  j{  Z Gd d   d e  j{  Z Gd d   d e  j{  Z Gd d   d e  j{  Z Gd d   d e  j{  Z Gd d   d e  j{  Z Gd d   d e  j{  Z e  j e j2 d k d  Gd d   d e  j{   Z Gd d   d e=  Z Gd d   d e=  Z Gd d   d e=  Z d d   Z d S)    N_multiprocessingzmultiprocessing.synchronize)util)	reductionF)ValuecopyTc             C   s   |  j  d  S)Nlatin)encode)s r
   J/afs/.cs/s/python-3.5.2/amd64_rhel6/lib/python3.5/_test_multiprocessing.pyr   ?   s    r   g?g=
ףp=?gffffff?gffffff?HAVE_BROKEN_SEM_GETVALUEwin32)waitc             C   s.   | d  k	 r | d k  r d  } t  |  g |  S)Ng        )r   )handletimeoutr
   r
   r   wait_for_handleZ   s    r   SC_OPEN_MAX   __main__z$test.test_multiprocessing_forkserver)	Structurec_intc_doublec              C   sk   d }  y t  j d  } Wn t t f k
 r7 d SYn X| d k sP | |  k rT d St j d |    d S)zACheck that the system supports enough semaphores to run the test.r   SC_SEM_NSEMS_MAXN   zHThe OS doesn't support enough semaphores to run the test (required: %d).)ossysconfAttributeError
ValueErrorunittestSkipTest)Z	nsems_minZnsemsr
   r
   r   check_enough_semaphoresr   s    		r!   c               @   s(   e  Z d  Z d d   Z d d   Z d S)TimingWrapperc             C   s   | |  _  d  |  _ d  S)N)funcelapsed)selfr#   r
   r
   r   __init__   s    	zTimingWrapper.__init__c             O   s;   t  j    } z |  j | |   SWd  t  j    | |  _ Xd  S)N)timer#   r$   )r%   argskwdstr
   r
   r   __call__   s    zTimingWrapper.__call__N)__name__
__module____qualname__r&   r+   r
   r
   r
   r   r"      s   r"   c               @   s@   e  Z d  Z d Z d d   Z d d   Z d d	   Z e Z d
 S)BaseTestCase	processesmanagerthreadsc             C   s   t  r |  j | | d  d  S)Nr   )CHECK_TIMINGSassertAlmostEqual)r%   abr
   r
   r   assertTimingAlmostEqual   s    z$BaseTestCase.assertTimingAlmostEqualc             G   s9   y | |   } Wn t  k
 r$ Yn X|  j | |  Sd  S)N)NotImplementedErrorassertEqual)r%   valuer#   r(   resr
   r
   r   assertReturnsIfImplemented   s
    z'BaseTestCase.assertReturnsIfImplementedc             G   s   t  d   d  S)Nz#shouldn't try to pickle a test case)r8   )r%   r(   r
   r
   r   
__reduce__   s    zBaseTestCase.__reduce__N)z	processeszmanagerzthreads)r,   r-   r.   ALLOWED_TYPESr7   r<   r=   __reduce_ex__r
   r
   r
   r   r/      s
   
r/   c             C   sm   y |  j    SWnX t k
 rh y |  j SWn8 t k
 rc y |  j SWn t k
 r^ t  Yn XYn XYn Xd  S)N)	get_valuer   Z_Semaphore__value_valuer8   )r%   r
   r
   r   r@      s    r@   c               @   s   e  Z d  Z d Z d d   Z d d   Z e d d    Z d	 d
   Z e d d    Z	 d d   Z
 d d   Z d d   Z e d d    Z d d   Z e d d    Z d d   Z d S)_TestProcessr0   r2   c             C   s   |  j  d k r( |  j d j |  j    |  j   } | j } |  j | j    |  j | j  |  j | t	  |  j t
 |  d k  |  j | j t j    |  j | j d   d  S)Nr2   ztest not appropriate for {}r   )TYPEskipTestformatcurrent_processauthkey
assertTrueis_alivedaemonassertIsInstancebyteslenr9   identr   getpidexitcode)r%   currentrG   r
   r
   r   test_current   s    	z_TestProcess.test_currentc             C   s   |  j  d k r( |  j d j |  j    |  j d |  j  } |  j | j |  j   j  |  j d |  j d d  } |  j | j  |  j d |  j d d  } |  j	 | j  d  S)Nr2   ztest not appropriate for {}targetrJ   TF)
rC   rD   rE   Process_testr9   rJ   rF   rH   assertFalse)r%   Zproc0Zproc1Zproc2r
   r
   r   test_daemon_argument   s    z!_TestProcess.test_daemon_argumentc             O   so   |  j    } | j |  | j |  | j | j  |  j d k rk | j t | j   | j | j  d  S)Nr2   )rF   putnamerC   rL   rG   pid)clsqr(   r)   rQ   r
   r
   r   rU      s    z_TestProcess._testc          	   C   s:  |  j  d  } |  j   } | d d f } d d d d i } d } |  j d |  j d	 | d
 | d |  } d | _ |  j   } |  j d k r |  j | j | j  |  j | j	   d  |  j | j d  |  j
 | |  j    |  j t |  j    t k  |  j | j d   | j   |  j | j d   |  j | j	   d  |  j | |  j    |  j | j   | d d    |  j | j   |  |  j | j   | j  |  j d k r|  j | j   | j  |  j | j   | j  | j   |  j | j d  |  j | j	   d  |  j
 | |  j    d  S)Nr      hello   ZbyegRQ@ZSomeProcessrS   r(   kwargsrY   Tr2   Fr   )QueueEventrT   rU   rJ   rF   rC   r9   rG   rI   assertNotInactive_childrenrH   typelistrP   startassertIngetrY   rZ   join)r%   r\   er(   r`   rY   prQ   r
   r
   r   test_process   s<    		
 
z_TestProcess.test_processc             C   s   t  j d  d  S)Nd   )r'   sleep)r[   r
   r
   r   _test_terminate  s    z_TestProcess._test_terminatec                s  |  j  d k r( |  j d j |  j    |  j d |  j    d   _   j   |  j   j   d  |  j	   |  j
    |  j   j d   t   j  } |  j | d  d   |  j | j d  |  j   j   d  |  j | d  d   |  j | j d  |  j   j   d  t j d    j   t t d  r  f d	 d
   } t j t j |  } z$ t j d  |  j |   d   Wd  t j d  t j t j |  Xn |  j |   d   |  j | j d  |  j   j   d  |  j   |  j
      j   d  S)Nr2   ztest not appropriate for {}rS   Tr   g        r   alarmc                 s   t  d     d  S)Nzjoin took too long: %s)RuntimeError)r(   )rl   r
   r   handler2  s    z,_TestProcess.test_terminate.<locals>.handler
   Fr   )rC   rD   rE   rT   rp   rJ   rg   r9   rI   rh   rd   rP   r"   rj   r7   r$   r'   ro   	terminatehasattrsignalSIGALRMrq   rc   )r%   rj   rs   Zold_handlerr
   )rl   r   test_terminate  s<    	

z_TestProcess.test_terminatec             C   s[   y t  j   } Wn t k
 r* d } Yn X|  j t |  t k  |  j | d k  d  S)Nr   )multiprocessing	cpu_countr8   rH   re   int)r%   Zcpusr
   r
   r   test_cpu_countH  s    z_TestProcess.test_cpu_countc             C   s   |  j  t |  j    t  |  j d t j d t f  } |  j | |  j    d | _	 | j
   |  j | |  j    | j   |  j | |  j    d  S)NrS   r(   T)r9   re   rd   rf   rT   r'   ro   DELTArc   rJ   rg   rh   rj   )r%   rl   r
   r
   r   test_active_childrenP  s    	

z!_TestProcess.test_active_childrenc             C   sv   | j  |  t |  d k  rr xP t d  D]B } |  j d |  j d | | | g f  } | j   | j   q, Wd  S)Nr]   rS   r(   )sendrM   rangerT   _test_recursionrg   rj   )r[   wconnidirl   r
   r
   r   r   ]  s    	
z_TestProcess._test_recursionc             C   s   |  j  d d  \ } } |  j | g   t j t  g  } x# | j   r` | j | j    q> Wg  d g d d g d d g d g d d g d d g g } |  j | |  d  S)NduplexFr   r   )	Piper   r'   ro   r~   pollappendrecvr9   )r%   rconnr   resultexpectedr
   r
   r   test_recursionh  s    			z_TestProcess.test_recursionc             C   s   | j  d  d  S)Ng      $@)r   )r[   eventr
   r
   r   _test_sentinel|  s    z_TestProcess._test_sentinelc             C   s   |  j  d k r( |  j d j |  j    |  j   } |  j d |  j d | f  } |  j t   | j Wd  QRX| j	   |  j
 | j  | j } |  j | t  |  j t | d d  | j   | j   |  j t | d d  d  S)Nr2   ztest not appropriate for {}rS   r(   r   g        r   )rC   rD   rE   rb   rT   r   assertRaisesr   sentinelrg   
addCleanuprj   rK   r|   rV   r   setrH   )r%   r   rl   r   r
   r
   r   test_sentinel  s    
	

z_TestProcess.test_sentinelN)z	processeszthreads)r,   r-   r.   r>   rR   rW   classmethodrU   rm   rp   ry   r}   r   r   r   r   r   r
   r
   r
   r   rB      s   
'4rB   c               @   s@   e  Z d  Z d d   Z d d   Z d d   Z d d   Z d	 S)
_UpperCaserc             C   s,   t  j j |   t  j   \ |  _ |  _ d  S)N)rz   rT   r&   r   
child_connparent_conn)r%   r
   r
   r   r&     s    z_UpperCaser.__init__c             C   sT   |  j  j   x3 t |  j j d   D] } |  j j | j    q# W|  j j   d  S)N)r   closeiterr   r   r   upper)r%   r	   r
   r
   r   run  s    z_UpperCaser.runc             C   s5   t  |  t k s t  |  j j |  |  j j   S)N)re   strAssertionErrorr   r   r   )r%   r	   r
   r
   r   submit  s    z_UpperCaser.submitc             C   s.   |  j  j d   |  j  j   |  j j   d  S)N)r   r   r   r   )r%   r
   r
   r   stop  s    z_UpperCaser.stopN)r,   r-   r.   r&   r   r   r   r
   r
   r
   r   r     s   r   c               @   s^   e  Z d  Z d Z d d   Z d d   Z e d d    Z e d d	    Z d
 d   Z	 d S)_TestSubclassingProcessr0   c             C   sf   t    } d | _ | j   |  j | j d  d  |  j | j d  d  | j   | j   d  S)NTr^   ZHELLOZworldZWORLD)r   rJ   rg   r9   r   r   rj   )r%   Z
uppercaserr
   r
   r   test_subclassing  s    		

z(_TestSubclassingProcess.test_subclassingc          
   C   s   |  j  d k r( |  j d j |  j    t j j } |  j t j j |  |  j d |  j	 d | f  } | j
   | j   t | d  C } | j   } |  j d |  |  j d |  |  j d |  Wd  QRXd  S)	Nr2   ztest not appropriate for {}rS   r(   rZeroDivisionErrorztest_multiprocessing.pyz1/0 # MARKER)rC   rD   rE   testsupportTESTFNr   unlinkrT   _test_stderr_flushrg   rj   openreadrh   )r%   testfnprocferrr
   r
   r   test_stderr_flush  s    

z)_TestSubclassingProcess.test_stderr_flushc             C   sG   t  j | t  j t  j Bt  j B } t | d d d t _ d d d  S)NwclosefdFr   r   )r   r   O_WRONLYO_CREATO_EXCLsysstderr)r[   r   fdr
   r
   r   r     s    #z*_TestSubclassingProcess._test_stderr_flushc             C   sL   t  j | t  j t  j Bt  j B } t | d d d t _ t j |  d  S)Nr   r   F)r   r   r   r   r   r   r   exit)r[   reasonr   r   r
   r
   r   _test_sys_exit  s    #z&_TestSubclassingProcess._test_sys_exitc             C   sr  |  j  d k r( |  j d j |  j    t j j } |  j t j j |  x d d d g d f D] } |  j d |  j	 d | | f  } d	 | _
 | j   | j d
  |  j | j d  t | d   } | j   } Wd  QRX|  j | j   t |   t j |  q` Wx_ d D]W } |  j d t j d | f  } d	 | _
 | j   | j d
  |  j | j |  qWd  S)Nr2   ztest not appropriate for {}r   r]      zignore thisrS   r(   T   r   F   )TFr   )rC   rD   rE   r   r   r   r   r   rT   r   rJ   rg   rj   r9   rP   r   r   rstripr   r   r   r   )r%   r   r   rl   r   Zcontentr
   r
   r   test_sys_exit  s,    !	
	
z%_TestSubclassingProcess.test_sys_exitN)z	processes)
r,   r-   r.   r>   r   r   r   r   r   r   r
   r
   r
   r   r     s   	r   c             C   s-   t  |  d  r |  j   S|  j   d k Sd  S)Nemptyr   )rv   r   qsize)r\   r
   r
   r   queue_empty  s    
r   c             C   s-   t  |  d  r |  j   S|  j   | k Sd  S)Nfull)rv   r   r   )r\   maxsizer
   r
   r   
queue_full  s    
r   c               @   s   e  Z d  Z e d d    Z d d   Z e d d    Z d d   Z e d	 d
    Z d d   Z	 d d   Z
 e d d    Z d d   Z d d   Z d d   Z d S)
_TestQueuec             C   s9   | j    x t d  D] } | j   q W| j   d  S)N   )r   r   ri   r   )r[   queuechild_can_startparent_can_continuer   r
   r
   r   	_test_put  s    
z_TestQueue._test_putc             C   s  d } |  j  d |  } |  j   } |  j   } |  j d |  j d | | | f  } d | _ | j   |  j t |  d  |  j t | |  d  | j	 d  | j	 d d  | j	 d	 d d   | j	 d
 d  | j	 d d d   | j
 d  t j t  |  j t |  d  |  j t | |  d  t | j	  } t | j
  } |  j t j | d d  |  j | j d  |  j t j | d d d   |  j | j d  |  j t j | d  |  j | j d  |  j t j | d d t  |  j | j t  |  j t j | d d t  |  j | j d  |  j t j | d d d t |  j | j t  | j   | j   |  j t |  d  |  j t | |  d  | j   d  S)Nr   r   rS   r(   TFr   r]   r      r      r   r   )ra   rb   rT   r   rJ   rg   r9   r   r   rX   
put_nowaitr'   ro   r~   r"   r   pyqueueFullr7   r$   TIMEOUT1TIMEOUT2TIMEOUT3r   r   rj   )r%   ZMAXSIZEr   r   r   r   rX   r   r
   r
   r   test_put  sN    			


z_TestQueue.test_putc             C   sL   | j    | j d  | j d  | j d  | j d  | j   d  S)Nr]   r   r   r   )r   rX   r   )r[   r   r   r   r
   r
   r   	_test_getI  s    
z_TestQueue._test_getc             C   sP  |  j    } |  j   } |  j   } |  j d |  j d | | | f  } d | _ | j   |  j t |  d  | j   | j	   t
 j t  |  j t |  d  |  j | j d d   d  |  j | j d  d  |  j | j d d  d	  |  j | j   d
  |  j t |  d  t | j  } t | j  } |  j t j | d  |  j | j d  |  j t j | d d   |  j | j d  |  j t j |  |  j | j d  |  j t j | d t  |  j | j t  |  j t j | d t  |  j | j d  |  j t j | d t |  j | j t  | j   d  S)NrS   r(   TFr]   r   r   r   r   r   r   )ra   rb   rT   r   rJ   rg   r9   r   r   r   r'   ro   r~   ri   
get_nowaitr"   r   r   Emptyr7   r$   r   r   r   rj   )r%   r   r   r   r   ri   r   r
   r
   r   test_getS  sB    			


z_TestQueue.test_getc             C   s+   x$ t  d d  D] } | j |  q Wd  S)Nrt      )r   rX   )r[   r   r   r
   r
   r   
_test_fork  s    z_TestQueue._test_forkc             C   s   |  j    } x! t d  D] } | j |  q Wt j t  |  j d |  j d | f  } d | _ | j	   x* t d  D] } |  j
 | j   |  q{ W|  j t j | j d  | j   d  S)Nrt   rS   r(   Tr   F)ra   r   rX   r'   ro   r~   rT   r   rJ   rg   r9   ri   r   r   r   rj   )r%   r   r   rl   r
   r
   r   	test_fork  s    	
z_TestQueue.test_forkc             C   s   |  j    } y |  j | j   d  Wn t k
 rG |  j d  Yn X| j d  |  j | j   d  | j d  |  j | j   d  | j   |  j | j   d  | j   |  j | j   d  d  S)Nr   zqsize method not implementedr   r   r]   )ra   r9   r   r8   rD   rX   ri   )r%   r\   r
   r
   r   
test_qsize  s    

z_TestQueue.test_qsizec             C   s8   x1 t  | j d   D] } t j t  | j   q Wd  S)N)r   ri   r'   ro   r~   	task_done)r[   r\   objr
   r
   r   _test_task_done  s    z_TestQueue._test_task_donec                s    j         f d d   t d  D } x! | D] } d | _ | j   q5 Wx! t d  D] }   j |  q_ W  j   x | D] }   j d   q Wx | D] } | j   q Wd  S)Nc                s.   g  |  ]$ }  j  d   j d   f   q S)rS   r(   )rT   r   ).0r   )r   r%   r
   r   
<listcomp>  s   	z-_TestQueue.test_task_done.<locals>.<listcomp>r   Trt   )JoinableQueuer   rJ   rg   rX   rj   )r%   workersrl   r   r
   )r   r%   r   test_task_done  s    	
z_TestQueue.test_task_donec              C   s   t  j j    d } t | d d   } | j d  Wd  QRXt  j j t j    8 y t |  Wn" t	 j
 k
 r |  j d  Yn XWd  QRXWd  QRXd  S)NZimported_by_an_imported_modulez.pyr   zif 1:
                    import multiprocessing

                    q = multiprocessing.Queue()
                    q.put('knock knock')
                    q.get(timeout=3)
                    q.close()
                    del q
                z?Probable regression on import lock contention; see Issue #22853)r   r   Ztemp_cwdr   writeZDirsOnSysPathr   getcwd
__import__r   r   fail)r%   module_namer   r
   r
   r   test_no_import_lock_contention  s    z)_TestQueue.test_no_import_lock_contentionc             C   sX   t  j   } t j   } |  j t j | j d d  t j   | } |  j | d  d  S)NTg?g(\?)rz   ra   r'   r   r   r   ri   assertGreaterEqual)r%   r\   rg   deltar
   r
   r   test_timeout  s
    z_TestQueue.test_timeoutN)r,   r-   r.   r   r   r   r   r   r   r   r   r   r   r   r   r
   r
   r
   r   r     s   :
4r   c               @   s4   e  Z d  Z d d   Z d d   Z d d   Z d S)	_TestLockc             C   sq   |  j    } |  j | j   d  |  j | j d  d  |  j | j   d   |  j t t j f | j  d  S)NTF)Lockr9   acquirereleaser   r   	threadingThreadError)r%   lockr
   r
   r   	test_lock  s
    z_TestLock.test_lockc             C   s   |  j    } |  j | j   d  |  j | j   d  |  j | j   d  |  j | j   d   |  j | j   d   |  j | j   d   |  j t t f | j  d  S)NT)RLockr9   r   r   r   r   rr   )r%   r   r
   r
   r   
test_rlock  s    z_TestLock.test_rlockc          	   C   s   |  j     Wd  QRXd  S)N)r   )r%   r
   r
   r   test_lock_context	  s    z_TestLock.test_lock_contextN)r,   r-   r.   r   r   r   r
   r
   r
   r   r     s   
r   c               @   s@   e  Z d  Z d d   Z d d   Z d d   Z d d   Z d	 S)
_TestSemaphorec             C   s   |  j  d t |  |  j | j   d  |  j  d t |  |  j | j   d  |  j  d t |  |  j | j d  d  |  j  d t |  |  j | j   d   |  j  d t |  |  j | j   d   |  j  d t |  d  S)Nr]   Tr   r   F)r<   r@   r9   r   r   )r%   semr
   r
   r   _test_semaphore  s    z_TestSemaphore._test_semaphorec             C   sr   |  j  d  } |  j |  |  j | j   d   |  j d t |  |  j | j   d   |  j d t |  d  S)Nr]   r   r   )	Semaphorer   r9   r   r<   r@   )r%   r   r
   r
   r   test_semaphore  s    z_TestSemaphore.test_semaphorec             C   s    |  j  d  } |  j |  d  S)Nr]   )BoundedSemaphorer   )r%   r   r
   r
   r   test_bounded_semaphore%  s    z%_TestSemaphore.test_bounded_semaphorec             C   s#  |  j  d k r( |  j d j |  j    |  j d  } t | j  } |  j | d  d  |  j | j d  |  j | d d   d  |  j | j d  |  j | d t	  d  |  j | j d  |  j | d t
  d  |  j | j t
  |  j | d t  d  |  j | j t  d  S)Nr0   ztest not appropriate for {}r   Fg        Tr   )rC   rD   rE   r   r"   r   r9   r7   r$   r   r   r   )r%   r   r   r
   r
   r   r   -  s    z_TestSemaphore.test_timeoutN)r,   r-   r.   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 e d d    Z	 e
 j e d  d d    Z e d d    Z e
 j e d  d d    Z e d d    Z d d   Z d S)_TestConditionNc             C   s9   | j    | j   | j |  | j   | j   d  S)N)r   r   r   )r[   condsleepingwokenr   r
   r
   r   r   F  s
    


z_TestCondition.fc             C   sq   |  j  d k rm yI | j j   | j j   } |  j | d  |  j | j j   d  Wn t k
 rl Yn Xd  S)Nr0   r   )rC   Z_sleeping_countr@   Z_woken_countr9   Z_wait_semaphorer8   )r%   r  Zsleepersr
   r
   r   check_invariantN  s    z_TestCondition.check_invariantc             C   sc  |  j    } |  j d  } |  j d  } |  j d |  j d | | | f  } d | _ | j   t j d |  j d | | | f  } d | _ | j   | j   | j   t	 j
 t  |  j d t |  | j   | j   | j   t	 j
 t  |  j d t |  | j   | j   | j   t	 j
 t  |  j d t |  |  j |  | j   d  S)Nr   rS   r(   Tr   r]   )	Conditionr   rT   r   rJ   rg   r   Threadr   r'   ro   r~   r<   r@   notifyr   r  rj   )r%   r  r  r  rl   r
   r
   r   test_notifyY  s2    $	
$	








z_TestCondition.test_notifyc             C   sp  |  j    } |  j d  } |  j d  } x t d  D]z } |  j d |  j d | | | t f  } d | _ | j   t j	 d |  j d | | | t f  } d | _ | j   q7 Wx t d  D] } | j
   q Wx t d  D] } | j
   q W|  j d t |  |  j |  x t d  D]t } |  j d |  j d | | | f  } d | _ | j   t j	 d |  j d | | | f  } d | _ | j   q$Wx t d  D] } | j
   qWt j t  |  j d t |  | j
   | j   | j   xN t d  D]@ } y t |  d k r$PWn t k
 r:PYn Xt j t  qW|  j d t |  |  j |  d  S)Nr   r   rS   r(   Tr   rt   )r  r   r   rT   r   r   rJ   rg   r   r  r   r<   r@   r  r'   ro   r~   
notify_allr   r8   )r%   r  r  r  r   rl   r*   r
   r
   r   test_notify_all  sR    	
	$	
$	


z_TestCondition.test_notify_allc             C   sb   |  j    } t | j  } | j   | t  } | j   |  j | d  |  j | j t  d  S)NF)	r  r"   r   r   r   r   r9   r7   r$   )r%   r  r   r;   r
   r
   r   r     s    

z_TestCondition.test_timeoutc                sc   | V d   _  | j   | j   f d d    } | sK   j  d k rX t j d  Wd  QRXd  S)Nr   c                  s     j  d k S)Nr   )r:   r
   )stater
   r   <lambda>  s    z0_TestCondition._test_waitfor_f.<locals>.<lambda>r   r   )r:   r	  wait_forr   r   )r[   r  r  r   r
   )r  r   _test_waitfor_f  s    	
z_TestCondition._test_waitfor_fzneeds sharedctypesc                s  |  j    } |  j d d    |  j d |  j d |   f  } d | _ | j   | @ | j   f d d    } |  j |  |  j   j	 d  Wd  QRXxH t
 d	  D]: } t j d
  |    j	 d 7_	 | j   Wd  QRXq W| j d  |  j | j    |  j | j d  d  S)Nr   r   rS   r(   Tc                  s     j  d k S)Nr   )r:   r
   )r  r
   r   r    s    z-_TestCondition.test_waitfor.<locals>.<lambda>r   r   g{Gz?r   r   )r  r   rT   r  rJ   rg   r  rH   r9   r:   r   r'   ro   r	  rj   rV   rI   rP   )r%   r  rl   r   r   r
   )r  r   test_waitfor  s"    !	
z_TestCondition.test_waitforc                s   | j    | | d } t j   } | j   f d d   d | } t j   | } | r | d | k  oz | d k  n r d | _ Wd  QRXd  S)Ng?c                  s     j  d k S)Nr   )r:   r
   )r  r
   r   r    s    z8_TestCondition._test_waitfor_timeout_f.<locals>.<lambda>r   g333333?g      $@T)r   r'   r  r:   )r[   r  r  successr   r   Zdtr   r
   )r  r   _test_waitfor_timeout_f  s    
!+z&_TestCondition._test_waitfor_timeout_fc             C   s   |  j    } |  j d d  } |  j d d  } |  j d  } |  j d |  j d | | | | f  } d | _ | j   |  j | j d d   xH t	 d	  D]: } t
 j d
  |  | j d 7_ | j   Wd  QRXq W| j d  |  j | j  d  S)Nr   r   FrS   r(   Tr   rt   r   g{Gz?r   r   )r  r   r   rT   r  rJ   rg   rH   r   r   r'   ro   r:   r	  rj   )r%   r  r  r  r   rl   r   r
   r
   r   test_waitfor_timeout  s     	
z#_TestCondition.test_waitfor_timeoutc          
   C   sH   |  | j    Wd  QRXt j d  | d  k	 rD t j | t j  d  S)Nr   )r	  r'   ro   r   killrw   SIGINT)r[   crZ   r
   r
   r   _test_wait_result  s
    z _TestCondition._test_wait_resultc             C   s   t  |  t  r- t j d k r- t j   } n d  } |  j   } |  |  j | j d   |  j | j d   |  j	 d |  j
 d | | f  } | j   |  j | j d   | d  k	 r |  j t | j d  | j   Wd  QRXd  S)Nr   r   g?rS   r(   rt   )
isinstanceProcessesMixinr   platformr   rO   r  rV   r   rT   r  rg   rH   r   KeyboardInterruptrj   )r%   rZ   r  rl   r
   r
   r   test_wait_result  s    !
z_TestCondition.test_wait_result)r,   r-   r.   r   r   r  r
  r  r   r  r   
skipUnlessHAS_SHAREDCTYPESr  r  r  r  r  r
   r
   r
   r   r  D  s   +A		r  c               @   s.   e  Z d  Z e d d    Z d d   Z d S)
_TestEventc             C   s   t  j t  | j   d  S)N)r'   ro   r   r   )r[   r   r
   r
   r   _test_event3  s    z_TestEvent._test_eventc             C   sD  |  j    } t | j  } |  j | j   d  |  j | d  d  |  j | j d  |  j | t  d  |  j | j t  | j   |  j | j   d  |  j |   d  |  j | j d  |  j | t  d  |  j | j d  | j	   |  j
 d |  j d | f  } d | _ | j   |  j |   d  d  S)NFg        TrS   r(   )rb   r"   r   r9   is_setr7   r$   r   r   clearrT   r!  rJ   rg   )r%   r   r   rl   r
   r
   r   
test_event8  s$    

	
z_TestEvent.test_eventN)r,   r-   r.   r   r!  r$  r
   r
   r
   r   r   1  s   r   c               @   sL   e  Z d  Z d d   Z d d   Z d d   Z d d   Z d	 d
   Z d S)
_DummyListc             C   sK   t  j j t j d   } t  j   } |  j | | f  d |  j d <d  S)Nr   r   )rz   heapBufferWrapperstructcalcsizer   __setstate__
_lengthbuf)r%   wrapperr   r
   r
   r   r&   e  s    z_DummyList.__init__c             C   s1   | \ |  _  |  _ |  j  j   j d  |  _ d  S)Nr   )_wrapper_lockZcreate_memoryviewcastr+  )r%   r  r
   r
   r   r*  k  s    z_DummyList.__setstate__c             C   s   |  j  |  j f S)N)r-  r.  )r%   r
   r
   r   __getstate__o  s    z_DummyList.__getstate__c             C   s&   |  j   |  j d d 7<Wd  QRXd  S)Nr   r   )r.  r+  )r%   _r
   r
   r   r   r  s    
z_DummyList.appendc          	   C   s    |  j   |  j d SWd  QRXd  S)Nr   )r.  r+  )r%   r
   r
   r   __len__v  s    
z_DummyList.__len__N)r,   r-   r.   r&   r*  r0  r   r2  r
   r
   r
   r   r%  c  s
   r%  c               C   s   t  j d  d  S)Ng{Gz?)r'   ro   r
   r
   r
   r   _waitz  s    r3  c               @   sU   e  Z d  Z d Z d 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   | |  _  | |  _ | |  _ | j   |  _ | j   |  _ | j   |  _ | s[ |  j j   x< t	 |  D]. } | j
 d |  j  } d | _ | j   qh Wd 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.
        rS   TN)r   r(   n	DummyListstartedfinishedrb   	_can_exitr   r   rT   taskrJ   rg   )r%   	namespacer   r(   r5  Zwait_before_exitr   rl   r
   r
   r   r&     s    				zBunch.__init__c             C   sm   t  j   } |  j j |  z |  j |  j   Wd  |  j j |  |  j j d  |  j j	   sh t
  Xd  S)N   )r   rO   r7  r   r   r(   r8  r9  r   r"  r   )r%   rZ   r
   r
   r   r:    s    z
Bunch.taskc             C   s*   x# t  |  j  |  j k  r% t   q Wd  S)N)rM   r7  r5  r3  )r%   r
   r
   r   wait_for_started  s    zBunch.wait_for_startedc             C   s*   x# t  |  j  |  j k  r% t   q Wd  S)N)rM   r8  r5  r3  )r%   r
   r
   r   wait_for_finished  s    zBunch.wait_for_finishedc             C   s   |  j  j   d  S)N)r9  r   )r%   r
   r
   r   	do_finish  s    zBunch.do_finishN)	r,   r-   r.   __doc__r&   r:  r=  r>  r?  r
   r
   r
   r   r4    s   
r4  c               @   s(   e  Z d  Z d d   Z d d   Z d S)
AppendTruec             C   s   | |  _  d  S)N)r   )r%   r   r
   r
   r   r&     s    zAppendTrue.__init__c             C   s   |  j  j d  d  S)NT)r   r   )r%   r
   r
   r   r+     s    zAppendTrue.__call__N)r,   r-   r.   r&   r+   r
   r
   r
   r   rA    s   rA  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 d 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 e
 d+ d,    Z d- d.   Z d/ d0   Z e
 d1 d2    Z d3 d4   Z d5 S)6_TestBarrierz$
    Tests for Barrier objects.
    r   g      >@c             C   s"   |  j  |  j d |  j |  _ d  S)Nr   )BarrierNdefaultTimeoutbarrier)r%   r
   r
   r   setUp  s    z_TestBarrier.setUpc             C   s   |  j  j   d  |  _  d  S)N)rF  abort)r%   r
   r
   r   tearDown  s    z_TestBarrier.tearDownc             C   s:   |  j  d k r g  S|  j  d k r/ |  j j   St   Sd  S)Nr2   r1   )rC   r1   rf   r%  )r%   r
   r
   r   r6    s
    z_TestBarrier.DummyListc             C   s4   t  |  | | |  j d  } | |   | j   d  S)Nr   )r4  rD  r>  )r%   r   r(   r6   r
   r
   r   run_threads  s    
z_TestBarrier.run_threadsc             C   s   | j  } | |  j k s t  x t |  D] } | d j d  t | d  | | k sb t  | j   | d j d  t | d  | d | k s t  | j   q+ Wy | j d k s t  Wn t k
 r Yn X| j	 s t  d  S)Nr   Tr   )
partiesrD  r   r   r   rM   r   	n_waitingr8   broken)r[   rF  resultsr5  mr   r
   r
   r   	multipass  s    	 
$z_TestBarrier.multipassr   c             C   s;   |  j    |  j    g } |  j |  j |  j | | f  d S)z;
        Test that a barrier is passed in lockstep
        N)r6  rJ  rP  rF  )r%   passesrN  r
   r
   r   test_barrier  s    z_TestBarrier.test_barrierc             C   s   |  j  d  S)zC
        Test that a barrier works for 10 consecutive runs
        rt   )rR  )r%   r
   r
   r   test_barrier_10  s    z_TestBarrier.test_barrier_10c             C   s   | j    } | j |  d  S)N)r   rX   )r[   rF  r   r;   r
   r
   r   _test_wait_return_f  s    z _TestBarrier._test_wait_return_fc                sg   |  j      |  j |  j |  j   f    f d d   t |  j  D } |  j | j d  d  d S)z9
        test the return value from barrier.wait
        c                s   g  |  ] }   j     q Sr
   )ri   )r   r   )r   r
   r   r     s   	 z1_TestBarrier.test_wait_return.<locals>.<listcomp>r   r   N)ra   rJ  rT  rF  r   rD  r9   count)r%   rN  r
   )r   r   test_wait_return  s    "z_TestBarrier.test_wait_returnc             C   s&   | j    t |  d k r" t  d  S)Nr   )r   rM   rr   )r[   rF  rN  r
   r
   r   _test_action_f  s    
z_TestBarrier._test_action_fc             C   s]   |  j    } |  j |  j d t |  } |  j |  j | | f  |  j t |  d  d S)z,
        Test the 'action' callback
        actionr   N)r6  rC  rD  rA  rJ  rW  r9   rM   )r%   rN  rF  r
   r
   r   test_action   s    z_TestBarrier.test_actionc             C   s   y@ | j    } | |  j d k r( t  | j    | j d  Wn= t j k
 rd | j d  Yn t k
 r | j   Yn Xd  S)Nr]   T)r   rD  rr   r   r   BrokenBarrierErrorrH  )r[   rF  results1results2r   r
   r
   r   _test_abort_f	  s    
z_TestBarrier._test_abort_fc             C   s   |  j    } |  j    } |  j |  j |  j | | f  |  j t |  d  |  j t |  |  j d  |  j |  j j  d S)zK
        Test that an abort will put the barrier in a broken state
        r   r   N)	r6  rJ  r]  rF  r9   rM   rD  rH   rM  )r%   r[  r\  r
   r
   r   
test_abort  s    z_TestBarrier.test_abortc             C   s   | j    } | |  j d k rV x' | j |  j d k  rH t j d  q" W| j   n@ y | j    | j d  Wn" t j k
 r | j d  Yn X| j    | j d  d  S)Nr]   r   gMbP?T)	r   rD  rL  r'   ro   resetr   r   rZ  )r[   rF  r[  r\  results3r   r
   r
   r   _test_reset_f"  s    

z_TestBarrier._test_reset_fc             C   s   |  j    } |  j    } |  j    } |  j |  j |  j | | | f  |  j t |  d  |  j t |  |  j d  |  j t |  |  j  d S)zL
        Test that a 'reset' on a barrier frees the waiting threads
        r   r   N)r6  rJ  ra  rF  r9   rM   rD  )r%   r[  r\  r`  r
   r
   r   
test_reset4  s    z_TestBarrier.test_resetc             C   s   y@ | j    } | |  j d k r( t  | j    | j d  Wn= t j k
 rd | j d  Yn t k
 r | j   Yn X| j    |  j d k r | j   | j    | j    | j d  d  S)Nr]   T)r   rD  rr   r   r   rZ  rH  r_  )r[   rF  barrier2r[  r\  r`  r   r
   r
   r   _test_abort_and_reset_fA  s    



z$_TestBarrier._test_abort_and_reset_fc             C   s   |  j    } |  j    } |  j    } |  j |  j  } |  j |  j |  j | | | | f  |  j t |  d  |  j t |  |  j d  |  j t |  |  j  d S)zF
        Test that a barrier can be reset after being broken.
        r   r   N)r6  rC  rD  rJ  rd  rF  r9   rM   )r%   r[  r\  r`  rc  r
   r
   r   test_abort_and_resetW  s    z!_TestBarrier.test_abort_and_resetc             C   sf   | j    } | |  j d k r, t j d  y | j  d  Wn" t j k
 ra | j d  Yn Xd  S)Nr]   g      ?g      ?T)r   rD  r'   ro   r   rZ  r   )r[   rF  rN  r   r
   r
   r   _test_timeout_ff  s    z_TestBarrier._test_timeout_fc             C   sH   |  j    } |  j |  j |  j | f  |  j t |  |  j j  d S)z$
        Test wait(timeout)
        N)r6  rJ  rf  rF  r9   rM   rK  )r%   rN  r
   r
   r   r   q  s    z_TestBarrier.test_timeoutc             C   si   | j  |  j  } | |  j d k r2 t j d  y | j    Wn" t j k
 rd | j d  Yn Xd  S)Nr]   g      ?T)r   rE  rD  r'   ro   r   rZ  r   )r[   rF  rN  r   r
   r
   r   _test_default_timeout_fy  s    z$_TestBarrier._test_default_timeout_fc             C   sZ   |  j  |  j d d } |  j   } |  j |  j | | f  |  j t |  | j  d S)z4
        Test the barrier's default timeout
        r   g      ?N)rC  rD  r6  rJ  rg  r9   rM   rK  )r%   rF  rN  r
   r
   r   test_default_timeout  s    z!_TestBarrier.test_default_timeoutc             C   s'   |  j  d  } | j   | j   d  S)Nr   )rC  r   )r%   r6   r
   r
   r   test_single_thread  s    
z_TestBarrier.test_single_threadc          
   C   s@   x9 t  |  D]+ } | j   |  | j |  Wd  QRXq Wd  S)N)r   r   r   )r[   rF  rQ  connr   r   r
   r
   r   _test_thousand_f  s    
z_TestBarrier._test_thousand_fc          	   C   s   |  j  d k r( |  j d j |  j    d } |  j   } |  j d  \ } } xK t |  j  D]: } |  j d |  j d |  j	 | | | f  } | j
   q_ WxD t |  D]6 } x- t |  j  D] } |  j | j   |  q Wq Wd  S)Nr1   ztest not appropriate for {}i  FrS   r(   )rC   rD   rE   r   r   r   rD  rT   rk  rF  rg   r9   r   )r%   rQ  r   rj  r   jrl   r   r
   r
   r   test_thousand  s    z_TestBarrier.test_thousandN)r,   r-   r.   r@  rD  rE  rG  rI  r6  rJ  r   rP  rR  rS  rT  rV  rW  rY  r]  r^  ra  rb  rd  re  rf  r   rg  rh  ri  rk  rm  r
   r
   r
   r   rB    s6   			rB  c               @   s   e  Z d  Z d Z 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) 
_TestValuer0   r     ^  d      @g      @h      r  xyc             C   s   t  s |  j d  d  S)Nz%requires multiprocessing.sharedctypes)r  rD   )r%   r
   r
   r   rG    s    z_TestValue.setUpc             C   s4   x- t  | |  j  D] \ } } | d | _ q Wd  S)Nr]   )zipcodes_valuesr:   )r[   valuessvcvr
   r
   r   rU     s    z_TestValue._testFc                s   | r%   f d d     j  D } n   f d d     j  D } x7 t |   j   D]# \ } }   j | j | d  qT W  j d   j d | f  } d | _ | j   | j   x7 t |   j   D]# \ } }   j | j | d  q Wd  S)	Nc                s+   g  |  ]! \ } } }   j  | |   q Sr
   )RawValue)r   coder:   r1  )r%   r
   r   r     s   	z)_TestValue.test_value.<locals>.<listcomp>c                s+   g  |  ]! \ } } }   j  | |   q Sr
   )r   )r   r~  r:   r1  )r%   r
   r   r     s   	r   rS   r(   Tr]   )	ry  rx  r9   r:   rT   rU   rJ   rg   rj   )r%   rawrz  r{  r|  r   r
   )r%   r   
test_value  s    	

z_TestValue.test_valuec             C   s   |  j  d d  d  S)Nr  T)r  )r%   r
   r
   r   test_rawvalue  s    z_TestValue.test_rawvaluec             C   sK  |  j  d d  } | j   } | j   } |  j  d d d d  } | j   } | j   } |  j   } |  j  d d d | } | j   }	 | j   }
 |  j | |	  |  j  d d d d } |  j t | d   |  j t | d   |  j t |  j  d d d d |  j	 d d  } |  j t | d   |  j t | d   d  S)Nr   r   r   Fget_lockget_objZnavalue)
r   r  r  r   r9   rV   rv   r   r   r}  )r%   Zval1lock1obj1Zval2lock2obj2r   Zval3lock3obj3arr4arr5r
   r
   r   test_getobj_getlock  s$    z_TestValue.test_getobj_getlockN)z	processes)r   ro  rp        )rq  rr  r  )rs  r  ru  )r,   r-   r.   r>   r   ry  rG  r   rU   r  r  r  r
   r
   r
   r   rn    s   rn  c               @   s   e  Z d  Z d Z e d d    Z e j e d k d  d d d   Z	 e j e d k d  d	 d
    Z
 e j e d k d  d d    Z e j e d k d  d d    Z d S)
_TestArrayr0   c             C   s:   x3 t  d t |   D] } | | | | d 7<q Wd  S)Nr   )r   rM   )r[   seqr   r
   r
   r   r     s    z_TestArray.fNzrequires _ctypesFc          
   C   sw  d d d d d d d d d	 d
 g
 } | r? |  j  d |  } n |  j d |  } |  j t |  t |   |  j | d | d  |  j t | d d   t | d d    t j d d d d d g  | d d  <| d d  <|  j t | d  d    |  |  j |  |  j d |  j d | f  } d | _ | j	   | j
   |  j t | d  d    |  d  S)Ni  ir  i  i5        i$  i  i  i?  r   r   r]   r   r   r   r   rS   r(   T)RawArrayArrayr9   rM   rf   arrayr   rT   rJ   rg   rj   )r%   r  r  arrrl   r
   r
   r   
test_array  s    $06 	

z_TestArray.test_arrayc             C   s   d } x t  d  D] } |  j d |  } |  j t |  |  |  j t |  d g |  t  d  | d  d   <|  j t |  t t  d    ~ q Wd  S)Nrt   r   r   r   )r   r  r9   rM   rf   )r%   sizer1  r  r
   r
   r   test_array_from_size  s    "z_TestArray.test_array_from_sizec             C   s   |  j  d d  d  S)Nr  T)r  )r%   r
   r
   r   test_rawarray"  s    z_TestArray.test_rawarrayc             C   s  |  j  d t t d    } | j   } | j   } |  j  d t t d   d d  } | j   } | j   } |  j   } |  j  d t t d   d | } | j   }	 | j   }
 |  j | |	  |  j  d t d  d d } |  j t | d   |  j t | d   |  j	 t
 |  j  d t d  d d |  j d t d   } |  j t | d   |  j t | d   d  S)Nr   rt   r   Fr  r  Znotalock)r  rf   r   r  r  r   r9   rV   rv   r   r   r  )r%   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_obj)z	processes)r,   r-   r.   r>   r   r   r   skipIfr   r  r  r  r  r
   r
   r
   r   r    s   $$r  c               @   s:   e  Z d  Z d	 Z d d   Z d d   Z d d   Z d S)
_TestContainersr1   c             C   s[  |  j  t  t d    } |  j | d  d   t  t d    |  j    } |  j | d  d   g   | j t  t d    |  j | d  d   t  t d    |  j | d d  |  j | d d  d d d g  | d 9} |  j | d  d   d d d d d d d d d d g
  |  j | d d g d d d d d d d d d d d d g  |  j | d  d   t  t d    | | g } |  j  |  } |  j | d  d   d d d d d d d d	 d
 d g
 d d d d d d d d d d g
 g  |  j  | g  } | j d  |  j | d  d   d d d d d d d d	 d
 d d g g  d  S)Nrt   r   r]   r   r   r   r   r   r   r   	   r^   )rf   r   r9   extendr   )r%   r5   r6   rq  rk   r   r
   r
   r   	test_listH  s(    &&#
8>&Iz_TestContainers.test_listc             C   s   |  j    } t t d d   } x | D] } t |  | | <q( W|  j | j   t  d d   | D   |  j t | j    |  |  j t | j    d d   | D  |  j t | j	    d d   | D  d  S)NA   F   c             s   s!   |  ] } | t  |  f Vq d  S)N)chr)r   r   r
   r
   r   	<genexpr>l  s    z,_TestContainers.test_dict.<locals>.<genexpr>c             S   s   g  |  ] } t  |   q Sr
   )r  )r   r   r
   r
   r   r   n  s   	 z-_TestContainers.test_dict.<locals>.<listcomp>c             S   s"   g  |  ] } | t  |  f  q Sr
   )r  )r   r   r
   r
   r   r   o  s   	 )
dictrf   r   r  r9   r   sortedkeysrz  items)r%   rq  indicesr   r
   r
   r   	test_dictg  s    ))z_TestContainers.test_dictc             C   s   |  j    } d | _ d | _ d | _ |  j | j | j f d  | ` |  j t |  d  |  j t | d   |  j t | d   d  S)NBobBuilderZhiddenzNamespace(name='Bob')rY   job)r  r  )	NamespacerY   r  Z_hiddenr9   r   rH   rv   )r%   r5  r
   r
   r   test_namespaceq  s    			z_TestContainers.test_namespaceN)zmanager)r,   r-   r.   r>   r  r  r  r
   r
   r
   r   r  D  s   
r  g        c             C   s   t  j |  |  |  S)N)r'   ro   )rv  r   r
   r
   r   sqr  s    r  c             C   s   |  | S)Nr
   )rv  rw  r
   r
   r   mul  s    r  c               @   s   e  Z d  Z d S)SayWhenErrorN)r,   r-   r.   r
   r
   r
   r   r    s    r  c             c   s8   x1 t  |   D]# } | | k r+ t d   | Vq Wd  S)NzSomebody said when)r   r  )totalZwhenr   r
   r
   r   exception_throwing_generator  s    r  c                   sT  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 e d) d*    Z d+ d,   Z e d- d.    Z d/ d0   Z   S)1	_TestPoolc                s#   t    j   |  j d  |  _ d  S)Nr   )super
setUpClassPoolpool)r[   )	__class__r
   r   r    s    z_TestPool.setUpClassc                s4   |  j  j   |  j  j   d  |  _  t   j   d  S)N)r  ru   rj   r  tearDownClass)r[   )r  r
   r   r    s    	z_TestPool.tearDownClassc             C   sZ   |  j  j } |  j | t d  t d   |  j | t f  d d i  t d d   d  S)Nr   rv  r   )r   )r  applyr9   r  )r%   Zpapplyr
   r
   r   
test_apply  s    z_TestPool.test_applyc             C   s   |  j  j } |  j | t t t d    t t t t t d      |  j | t t t d   d d t t t t t d      d  S)Nrt   rn   	chunksizer   )r  mapr9   r  rf   r   )r%   Zpmapr
   r
   r   test_map  s    @$z_TestPool.test_mapc             C   s   |  j  j } t t t d  t d d d	    } |  j | t |  t t j t |    t t t d  t d d
 d    } |  j | t | d d t t j t |    d  S)Nrt   r  r   rn   c   r  r   r   r   r   r   )r  starmaprf   rx  r   r9   r  	itertools)r%   Zpsmaptuplesr
   r
   r   test_starmap  s    ''z_TestPool.test_starmapc             C   sb   t  t t d  t d d d    } |  j |  j j t |  j   t  t j	 t |    d  S)Nrn   r  r   r   r   )
rf   rx  r   r9   r  Zstarmap_asyncr  ri   r  r  )r%   r  r
   r
   r   test_starmap_async  s    'z_TestPool.test_starmap_asyncc             C   sP   |  j  |  j j t t t d    j   t t t t t d      d  S)Nrt   )r9   r  	map_asyncr  rf   r   ri   r  )r%   r
   r
   r   test_map_async  s    *z_TestPool.test_map_asyncc             C   s   |  j  d k r |  j j   n g  } |  j j t d g d | j d | j j   |  j d t	 |   |  j d g | d  |  j j t d g d | j d | j j   |  j d t	 |   |  j
 | d t  d  S)	Nr1   1callbackerror_callbackr   r   r5   r]   )rC   r1   rf   r  r  r|   r   r   r9   rM   rK   r   )r%   	call_argsr
   r
   r   test_map_async_callbacks  s    $		z"_TestPool.test_map_async_callbacksc             C   sv   |  j  d k r( |  j d j |  j    Gd d   d t  } |  j t  " |  j j t |   g d  Wd  QRXd  S)Nr2   ztest not appropriate for {}c               @   s   e  Z d  Z d d   Z d S)z*_TestPool.test_map_unplicklable.<locals>.Ac             S   s   t  d   d  S)Nzcannot pickle)rr   )r%   r
   r
   r   r=     s    z5_TestPool.test_map_unplicklable.<locals>.A.__reduce__N)r,   r-   r.   r=   r
   r
   r
   r   A  s   r  rt   )	rC   rD   rE   objectr   rr   r  r  r  )r%   r  r
   r
   r   test_map_unplicklable  s
    z_TestPool.test_map_unplicklablec             C   sR   y) |  j  j t g  d d j d t  Wn" t j k
 rM |  j d  Yn Xd  S)Nr  r   r   z2pool.map_async with chunksize stalled on null list)r  r  r  ri   r   rz   TimeoutErrorr   )r%   r
   r
   r   test_map_chunksize  s    )z_TestPool.test_map_chunksizec             C   sT   |  j  j t d t f  } t | j  } |  j |   d  |  j | j t  d  S)Nr   1   )	r  apply_asyncr  r   r"   ri   r9   r7   r$   )r%   r;   ri   r
   r
   r   
test_async  s    z_TestPool.test_asyncc             C   s^   |  j  j t d t d f  } t | j  } |  j t j | d t |  j	 | j
 t  d  S)Nr   g      ?r   )r  r  r  r   r"   ri   r   rz   r  r7   r$   )r%   r;   ri   r
   r
   r   test_async_timeout  s    z_TestPool.test_async_timeoutc             C   s&  |  j  j t t t d    } |  j t |  t t t t t d      |  j  j t t t d    } x. t d  D]  } |  j t |  | |  q W|  j t	 | j
  |  j  j t t t d   d d } x. t d  D]  } |  j t |  | |  q W|  j t	 | j
  d  S)Nrt   i  r  rn   )r  imapr  rf   r   r9   r  nextr   StopIteration__next__)r%   itr   r
   r
   r   	test_imap  s    !1!'z_TestPool.test_imapc             C   s[  |  j  d k r( |  j d j |  j    |  j j t t d d  d  } x. t d  D]  } |  j t	 |  | |  qV W|  j
 t | j  |  j j t t d d  d  } x. t d	  D]  } |  j t	 |  | |  q W|  j
 t | j  |  j j t t d d  d
  } x. t d
  D]  } |  j t	 |  | |  q W|  j
 t | j  d  S)Nr1   ztest not appropriate for {}rt   r   r   r   r   r]   r   r   )rC   rD   rE   r  r  r  r  r   r9   r  r   r  r  )r%   r  r   r
   r
   r   #test_imap_handle_iterable_exception  s    !!!z-_TestPool.test_imap_handle_iterable_exceptionc             C   s   |  j  j t t t d    } |  j t |  t t t t t d      |  j  j t t t d   d d } |  j t |  t t t t t d      d  S)Ni  r  5   )r  imap_unorderedr  rf   r   r9   r  r  )r%   r  r
   r
   r   test_imap_unordered  s    !1'z_TestPool.test_imap_unorderedc             C   s^  |  j  d k r( |  j d j |  j    |  j j t t d d  d  } t t t t t	 d     } |  j
 t  E x= t	 d  D]/ } t |  } |  j | |  | j |  q WWd  QRX|  j j t t d d  d  } t t t t t	 d     } |  j
 t  E x= t	 d  D]/ } t |  } |  j | |  | j |  q WWd  QRXd  S)	Nr1   ztest not appropriate for {}rt   r   r   r   r   r]   )rC   rD   rE   r  r  r  r  rf   r  r   r   r  r  rh   remove)r%   r  Zexpected_valuesr   r:   r
   r
   r   -test_imap_unordered_handle_iterable_exception  s(    	!	!z7_TestPool.test_imap_unordered_handle_iterable_exceptionc          
   C   s   |  j  d k r t n t } |  j | |  j d  |  j | |  j d  |  j  d k r |  j d  } z |  j d t | j   Wd  | j   | j	   Xd  S)Nr1   r   r   r   r   )
rC   RemoteErrorr   r   r  r9   rM   _poolr   rj   )r%   Zexpected_errorrl   r
   r
   r   test_make_pool$  s    
z_TestPool.test_make_poolc             C   sn   |  j  j t j d d   t d  D d d } |  j  j   t |  j  j  } |   |  j | j	 d  d  S)Nc             S   s   g  |  ] } d   q S)g?r
   )r   r   r
   r
   r   r   5  s   	 z,_TestPool.test_terminate.<locals>.<listcomp>i'  r  r   g       @)
r  r  r'   ro   r   ru   r"   rj   
assertLessr$   )r%   r   rj   r
   r
   r   ry   3  s    	(z_TestPool.test_terminatec             C   s   |  j  d  } |  j | j t g   g   |  j t | j t g    g   |  j t | j t g    g   |  j | j t g   j   g   | j	   | j
   d  S)Nr   )r  r9   r  r  rf   r  r  r  ri   r   rj   )r%   rl   r
   r
   r   test_empty_iterable=  s    """
z_TestPool.test_empty_iterablec             C   s   |  j  d k r t t d   } d d   | D } |  j d  / } | j t |  } |  j | j   |  Wd  QRX|  j t	 | j t |  d  S)Nr0   rt   c             S   s   g  |  ] } t  |   q Sr
   )r  )r   r   r
   r
   r   r   L  s   	 z*_TestPool.test_context.<locals>.<listcomp>r]   )
rC   rf   r   r  r  r  r9   ri   r   r   )r%   Lr   rl   r   r
   r
   r   test_contextI  s    z_TestPool.test_contextc             C   s   t  d   d  S)N{   )rr   )r[   r
   r
   r   _test_tracebackR  s    z_TestPool._test_tracebackc          '   C   s<  |  j  d k r8|  j d  U } y | j |  j  Wn+ t k
 rb } z | } WYd  d  } ~ Xn Xt d   Wd  QRX|  j t |  t  |  j	 | j
 d  | j } |  j t |  t j j  |  j d | j  t j j   9 } y
 |  Wn% t k
 rt j t j     Yn XWd  QRX|  j d | j    d  S)Nr0   r   zexpected RuntimeErrorr  z&raise RuntimeError(123) # some comment)r  )rC   r  r  r  	Exceptionr   assertIsre   rr   r9   r(   	__cause__rz   r  ZRemoteTracebackrh   tbr   r   Zcaptured_stderrr   
excepthookexc_infogetvalue)r%   rl   rk   exccausef1r
   r
   r   test_tracebackV  s&    	
	z_TestPool.test_tracebackc             C   s   t  d   d  S)Nfoo)rr   )r[   r
   r
   r   _test_wrapped_exceptiono  s    z!_TestPool._test_wrapped_exceptionc             C   sD   |  j  d  . } |  j t   | j |  j  Wd  QRXWd  QRXd  S)Nr   )r  r   rr   r  r  )r%   rl   r
   r
   r   test_wrapped_exceptions  s    z _TestPool.test_wrapped_exception)r,   r-   r.   r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  ry   r  r  r  r  r  r  r
   r
   )r  r   r    s0   	

	r  c               C   s   t  d   d  S)Nkey)KeyErrorr
   r
   r
   r   raisingz  s    r  c               C   s
   d d   S)Nc               S   s   d S)N*   r
   r
   r
   r
   r   r  ~  s    z%unpickleable_result.<locals>.<lambda>r
   r
   r
   r
   r   unpickleable_result}  s    r  c               @   s.   e  Z d  Z d Z d d   Z d d   Z d S)_TestPoolWorkerErrorsr0   c                s   t  j d  } d  g     f d d   } | j t d | } |  j t | j  |  j   d  |  j   d t  | j	   | j
   d  S)Nr]   c                s   |    d <d  S)Nr   r
   )r  )
scratchpadr
   r   errback  s    z@_TestPoolWorkerErrors.test_async_error_callback.<locals>.errbackr  r   )rz   r  r  r  r   r  ri   rH   rK   r   rj   )r%   rl   r  r;   r
   )r   r   test_async_error_callback  s    	
z/_TestPoolWorkerErrors.test_async_error_callbackc                s   d d l  m } t j d  } x t d  D] } d  g     f d d   } | j t d | } |  j | | j    d } |  j	 |  |  j
   d |  |  j | j  |  j | j  q, W| j   | j   d  S)Nr   )MaybeEncodingErrorr]   r   c                s   |    d <d  S)Nr   r
   )r  )r   r
   r   r    s    z?_TestPoolWorkerErrors.test_unpickleable_result.<locals>.errbackr  )multiprocessing.poolr  rz   r  r   r  r  r   ri   rH   rK   ZassertIsNotNoner  r:   r   rj   )r%   r  rl   Z	iterationr  r;   wrappedr
   )r   r   test_unpickleable_result  s    	

z._TestPoolWorkerErrors.test_unpickleable_resultN)z	processes)r,   r-   r.   r>   r  r  r
   r
   r
   r   r    s   r  c               @   s.   e  Z d  Z d Z d d   Z d d   Z d S)_TestPoolWorkerLifetimer0   c       	      C   sq  t  j d d d } |  j d t | j   d d   | j D } g  } x0 t d  D]" } | j | j t | f   qW Wx6 t	 |  D]( \ } } |  j | j
   t |   q W| j   d } x> | rt d d	   | j D  r| d
 8} t j t  q Wd d   | j D } |  j d  |  |  j d  |  |  j t |  t |   | j   | j   d  S)Nr   maxtasksperchildrt   c             S   s   g  |  ] } | j   q Sr
   )rZ   )r   r   r
   r
   r   r     s   	 zE_TestPoolWorkerLifetime.test_pool_worker_lifetime.<locals>.<listcomp>rn   2   c             s   s   |  ] } | j    Vq d  S)N)rI   )r   r   r
   r
   r   r    s    zD_TestPoolWorkerLifetime.test_pool_worker_lifetime.<locals>.<genexpr>r   c             S   s   g  |  ] } | j   q Sr
   )rZ   )r   r   r
   r
   r   r     s   	 )rz   r  r9   rM   r  r   r   r  r  	enumerateri   Z_repopulate_poolallr'   ro   r~   rc   ZassertNotEqualr  r   rj   )	r%   rl   ZorigworkerpidsrN  r   rl  r;   Z	countdownZfinalworkerpidsr
   r
   r   test_pool_worker_lifetime  s&      
&

z1_TestPoolWorkerLifetime.test_pool_worker_lifetimec             C   s   t  j d d d } g  } x3 t d  D]% } | j | j t | d f   q( W| j   | j   x6 t |  D]( \ } } |  j	 | j
   t |   qr Wd  S)Nr   r  r   r   g333333?)rz   r  r   r   r  r  r   rj   r
  r9   ri   )r%   rl   rN  r   rl  r;   r
   r
   r   %test_pool_worker_lifetime_early_close  s    #

z=_TestPoolWorkerLifetime.test_pool_worker_lifetime_early_closeN)z	processes)r,   r-   r.   r>   r  r  r
   r
   r
   r   r    s   r  )BaseManager	BaseProxyr  c               @   s4   e  Z d  Z d d   Z d d   Z d d   Z d S)FooBarc             C   s   d S)Nzf()r
   )r%   r
   r
   r   r     s    zFooBar.fc             C   s
   t   d  S)N)r   )r%   r
   r
   r   g  s    zFooBar.gc             C   s   d S)Nz_h()r
   )r%   r
   r
   r   _h  s    z	FooBar._hN)r,   r-   r.   r   r  r  r
   r
   r
   r   r    s   r  c              c   s$   x t  d  D] }  |  |  Vq Wd  S)Nrt   )r   )r   r
   r
   r   baz  s    r  c               @   s.   e  Z d  Z d Z d d   Z d d   Z d S)IteratorProxyr  c             C   s   |  S)Nr
   )r%   r
   r
   r   __iter__  s    zIteratorProxy.__iter__c             C   s   |  j  d  S)Nr  )_callmethod)r%   r
   r
   r   r    s    zIteratorProxy.__next__N)z__next__)r,   r-   r.   Z	_exposed_r  r  r
   r
   r
   r   r    s   r  c               @   s   e  Z d  Z d S)	MyManagerN)r,   r-   r.   r
   r
   r
   r   r    s   r  FoocallableBarZexposedr   r  Z	proxytypec               @   sF   e  Z d  Z d Z d d   Z d d   Z d d   Z d d	   Z d
 S)_TestMyManagerr1   c             C   sD   t    } | j   |  j |  | j   |  j | j j d  d  S)Nr   )r  rg   commonshutdownr9   _processrP   )r%   r1   r
   r
   r   test_mymanager  s
    	

z_TestMyManager.test_mymanagerc          
   C   s:   t     } |  j |  Wd  QRX|  j | j j d  d  S)Nr   )r  r  r9   r  rP   )r%   r1   r
   r
   r   test_mymanager_context  s    z%_TestMyManager.test_mymanager_contextc          
   C   sH   t    } | j   |  |  j |  Wd  QRX|  j | j j d  d  S)Nr   )r  rg   r  r9   r  rP   )r%   r1   r
   r
   r   !test_mymanager_context_prestarted
  s
    	
z0_TestMyManager.test_mymanager_context_prestartedc                se  | j     | j     | j   }  f d d   d D }   f d d   d D } |  j | d d g  |  j | d d g  |  j  j   d  |  j t  j  |  j  j d  d  |  j t	  j d  |  j   j   d  |  j   j
   d  |  j   j d  d  |  j   j d  d  |  j t |  d	 d   t d
  D  d  S)Nc                s%   g  |  ] } t    |  r |  q Sr
   )rv   )r   rY   )r  r
   r   r     s   	 z)_TestMyManager.common.<locals>.<listcomp>r   r  r  c                s%   g  |  ] } t    |  r |  q Sr
   )rv   )r   rY   )barr
   r   r     s   	 zf()z_h()c             S   s   g  |  ] } | |  q Sr
   r
   )r   r   r
   r
   r   r   &  s   	 rt   )r   r  _h)r   r  r#  )r  r  r  r9   r   r   r   r  r  r  r  rf   r   )r%   r1   r  Zfoo_methodsZbar_methodsr
   )r"  r  r   r    s     z_TestMyManager.commonN)zmanager)r,   r-   r.   r>   r  r   r!  r  r
   r
   r
   r   r    s
   r  c               C   s   t  S)N)_queuer
   r
   r
   r   	get_queue.  s    r%  c               @   s   e  Z d  Z d Z d S)QueueManagerz$manager class used by server processN)r,   r-   r.   r@  r
   r
   r
   r   r&  1  s   r&  c               @   s   e  Z d  Z d Z d S)QueueManager2z@manager class which specifies the same interface as QueueManagerN)r,   r-   r.   r@  r
   r
   r
   r   r'  5  s   r'  	xmlrpclibc               @   s_   e  Z d  Z d Z d d d d d d d g Z e d d  Z e d	 d
    Z d d   Z d S)_TestRemoteManagerr1   zhello worldNTg      @u   hallå världenu   привіт світs   hall vrldenc             C   sK   t  d | d | d t  } | j   | j   } | j t |  j   d  S)NaddressrG   
serializer)r'  
SERIALIZERconnectr%  rX   tuplerz  )r[   r*  rG   r1   r   r
   r
   r   _putterF  s
    
z_TestRemoteManager._putterc             C   s   t  j d  } t d t j j d f d | d t  } | j   |  j d |  j	 d | j
 | f  } d | _ | j   t d | j
 d | d t  } | j   | j   } |  j | j   |  j  |  j t | j t j  ~ | j   d  S)	N    r*  r   rG   r+  rS   r(   T)r   urandomr&  r   r   HOSTr,  rg   rT   r/  r*  rJ   r'  r-  r%  r9   ri   r   r   r  rX   r'   ro   r  )r%   rG   r1   rl   Zmanager2r   r
   r
   r   test_remoteP  s    !
$	

z_TestRemoteManager.test_remote)zmanager)	r,   r-   r.   r>   rz  r   r   r/  r3  r
   r
   r
   r   r)  <  s   	
r)  c               @   s.   e  Z d  Z e d d    Z d d   Z d S)_TestManagerRestartc             C   sB   t  d | d | d t  } | j   | j   } | j d  d  S)Nr*  rG   r+  zhello world)r&  r,  r-  r%  rX   )r[   r*  rG   r1   r   r
   r
   r   r/  n  s
    
z_TestManagerRestart._putterc             C   sd  t  j d  } t d t j j d f d | d t  } | j   } | j } | j	 j
   | j   |  j d |  j d | j | f  } d | _ | j   | j   } |  j | j   d	  ~ | j   t d | d | d t  } y | j   Wnb t k
 rU} zB | j t j k r  t j d
  t d | d | d t  } WYd  d  } ~ Xn X| j   d  S)Nr0  r*  r   rG   r+  rS   r(   Tzhello worldg      ?)r   r1  r&  r   r   r2  r,  Z
get_serverr*  listenerr   rg   rT   r/  rJ   r%  r9   ri   r  OSErrorerrnoZ
EADDRINUSEr'   ro   )r%   rG   r1   Zsrvraddrrl   r   rk   r
   r
   r   test_rapid_restartv  s2    !	
$	

(z&_TestManagerRestart.test_rapid_restartN)r,   r-   r.   r   r/  r9  r
   r
   r
   r   r4  l  s   r4   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 j e d  d d    Z e j e d  e j e j d k d  e j e d k d  e j e e d  d  d d       Z e d d    Z e j e d  e j e j d k d  d  d!     Z d" d#   Z d$ S)&_TestConnectionr0   r2   c             C   s8   x' t  | j t  D] } | j |  q W| j   d  S)N)r   
recv_bytesSENTINEL
send_bytesr   )r[   rj  msgr
   r
   r   _echo  s    z_TestConnection._echoc             C   sx  |  j    \ } } |  j d |  j d | f  } d | _ | j   d d d  g } t d  } | d } t j d t t d	    } |  j	 d
 k r |  j
 t | j    t  |  j
 | j |  d   |  j
 | j   |  |  j
 | j |  d   |  j
 | j   |  |  j	 d
 k rt j d d g d  } t |  d g d t |  }	 |  j
 | j |  d   |  j
 | j |  t |  | j  |  j
 t |  |	  t j d d g d  } d g d t |  d g d t |  }	 |  j
 | j |  d   |  j
 | j | d | j  t |  | j  |  j
 t |  |	  t t d d   } |  j
 | j |  d   y | j |  }
 Wn> t j k
 r} z |  j
 | j | f  WYd  d  } ~ Xn X|  j d |
  t | j  } |  j
 |   d  |  j | j d  |  j
 | d  d  |  j | j d  |  j
 | t  d  |  j | j t  | j d   t j  d  |  j
 | t  d  |  j | j d  |  j
 | j   d   t d  d } | j |  |  j
 | j   |  | j t!  | j"   |  j	 d
 k rj|  j
 | j# d  |  j
 | j$ d  |  j% t& | j  |  j% t& | j  | j'   d  S)NrS   r(   Tr   g      @zhello worldrt   r   r   r0   r   r    (   zexpected BufferTooShort, got %sFg?Xi      r   r   i   i   )(r   rT   r@  rJ   rg   r   r  rf   r   rC   r9   re   filenor|   r   r   r>  r<  rM   recv_bytes_intoitemsize	bytearrayrz   BufferTooShortr(   r   r"   r   r7   r$   r   r'   ro   r=  r   readablewritabler   EOFErrorrj   )r%   rj  r   rl   r  r?  Zlongmsgr  bufferr   r;   rk   r   Zreally_big_msgr
   r
   r   test_connection  sr    	

!,)
z_TestConnection.test_connectionc             C   s   |  j  d d  \ } } |  j | j d  d   |  j | j   d  |  j d k r |  j | j d  |  j | j d  |  j | j d  |  j | j d  |  j t | j d  |  j t | j  |  j t | j	  d  S)Nr   Fr   r0   Tr]   )
r   r9   r   r   rC   rJ  rK  r   r6  r   )r%   readerwriterr
   r
   r   test_duplex_false  s    z!_TestConnection.test_duplex_falsec             C   s   |  j    \ } } |  j d |  j d | f  } d | _ | j   | j   t d  } | j |  |  j | j	   |  | j t
  | j   | j   d  S)NrS   r(   Tr^   )r   rT   r@  rJ   rg   r   r   r>  r9   r<  r=  rj   )r%   rj  r   rl   r?  r
   r
   r   test_spawn_close	  s    	


z _TestConnection.test_spawn_closec             C   s  |  j  d k r( |  j d j |  j    t d  } |  j   \ } } | j |  |  j | j   |  | j | d  |  j | j   | d d    | j | d d  |  j | j   | d d   | j | d  |  j | j   t d   | j | d d	  |  j | j   t d   |  j t	 | j | d
  |  j t	 | j | d d  |  j t	 | j | d d  |  j t	 | j | d  |  j t	 | j | d d  d  S)Nr0   ztest not appropriate for {}abcdefghijklmnopqrstuvwxyzr   r   r      r:  r         r   r      r   r   )
rC   rD   rE   r   r   r>  r9   r<  r   r   )r%   r?  r5   r6   r
   r
   r   test_sendbytes	  s&      z_TestConnection.test_sendbytesc             C   sZ   y t  j |  Wn> t k
 rQ } z | j t j k r< d S  WYd  d  } ~ Xn Xd Sd  S)NFT)r   fstatr6  r7  EBADF)r[   r   rk   r
   r
   r   _is_fd_assigned7	  s    z_TestConnection._is_fd_assignedFc             C   s   | rE x< t  d d  D]+ } |  j |  s t j | j   |  q Wt j |  } t ro t j | t j	  } t j
 | |  t j |  d  S)Nr   r   )r   r[  r   dup2rE  r   recv_handlemsvcrtopen_osfhandler   r   r   )r[   rj  dataZcreate_dummy_fdsr   r   r
   r
   r   _writefdB	  s    z_TestConnection._writefdz$test needs multiprocessing.reductionc             C   s  |  j  d k r |  j d  |  j d d  \ } } |  j d |  j d | d f  } d | _ | j   |  j t j	 j
 t j	 j  t t j	 j d  > } | j   } t r t j |  } t j | | | j  Wd  QRX| j   t t j	 j d	   } |  j | j   d  Wd  QRXd  S)
Nr0   zonly makes sense with processesr   TrS   r(   s   foowbrb)rC   rD   r   rT   ra  rJ   rg   r   r   r   r   r   r   rE  r^  Zget_osfhandler   send_handlerZ   rj   r9   r   )r%   rj  r   rl   r   r   r
   r
   r   test_fd_transferN	  s    !	

z _TestConnection.test_fd_transferr   z*test semantics don't make sense on Windowsr   z)largest assignable fd number is too smallr\  ztest needs os.dup2()c             C   sg  |  j  d k r |  j d  |  j d d  \ } } |  j d |  j d | d d f  } d | _ | j   |  j t j	 j
 t j	 j  t t j	 j d   } | j   } x4 t d	 t  D] } |  j |  s Pq W|  j d
  t j | |  z t j | | | j  Wd  t j |  XWd  QRX| j   t t j	 j d   } |  j | j   d  Wd  QRXd  S)Nr0   zonly makes sense with processesr   TrS   r(   s   barrb  r   z2could not find an unassigned large file descriptorrc  )rC   rD   r   rT   ra  rJ   rg   r   r   r   r   r   r   rE  r   MAXFDr[  r   r   r\  r   rd  rZ   r   rj   r9   r   )r%   rj  r   rl   r   r   Znewfdr
   r
   r   test_large_fd_transfera	  s(    	$	

z&_TestConnection.test_large_fd_transferc             C   s   t  j | j   d  d  S)Ns    )r   r   rE  )r%   rj  r
   r
   r   _send_data_without_fd	  s    z%_TestConnection._send_data_without_fdzdoesn't make sense on Windowsc             C   s   |  j  d k r |  j d  |  j d d  \ } } |  j d |  j d | f  } d | _ | j   |  j t t	 j
 |  | j   d  S)Nr0   zonly makes sense with processesr   TrS   r(   )rC   rD   r   rT   rh  rJ   rg   r   rr   r   r]  rj   )r%   rj  r   rl   r
   r
   r   test_missing_fd_transfer	  s    	
z(_TestConnection.test_missing_fd_transferc             C   s   |  j    \ } } | e | W | j d  |  j | j   d  |  j d k rr |  j | j  |  j | j  Wd  QRXWd  QRX|  j d k r |  j | j  |  j | j  |  j t	 | j  |  j t	 | j  d  S)Ni  r0   )
r   r   r9   r   rC   rV   closedrH   r   r6  )r%   r5   r6   r
   r
   r   r  	  s    z_TestConnection.test_contextN)z	processeszthreads)r,   r-   r.   r>   r   r@  rN  rQ  rR  rX  r[  ra  r   r  HAS_REDUCTIONre  r  r   r  rf  rv   r   rg  rh  ri  r  r
   r
   r
   r   r;    s*   O *r;  c               @   s.   e  Z d  Z d Z d d   Z d d   Z d S)_TestListenerr0   c             C   s_   xX |  j  j D]J } |  j  j d |  } |  j | j  |  j t |  j  j | j |  q Wd  S)Nfamily)
connectionfamiliesListenerr   r   r   r6  r*  )r%   rm  lr
   r
   r   test_multiple_bind	  s
    z _TestListener.test_multiple_bindc             C   s   |  j  j   _ } |  j  j | j  @ } | j   * } | j d  |  j | j   d  Wd  QRXWd  QRXWd  QRX|  j d k r |  j	 t
 | j  d  S)Ni  r0   )rn  rp  Clientr*  acceptr   r9   r   rC   r   r6  )r%   rq  r  rq  r
   r
   r   r  	  s    +z_TestListener.test_contextN)z	processes)r,   r-   r.   r>   rr  r  r
   r
   r
   r   rl  	  s   rl  c               @   sL   e  Z d  Z d Z e d d    Z d d   Z d d   Z d	 d
   Z d S)_TestListenerClientr0   r2   c             C   s-   |  j  j |  } | j d  | j   d  S)Nr^   )rn  rs  r   r   )r[   r*  rj  r
   r
   r   rU   	  s    z_TestListenerClient._testc             C   s   x |  j  j D] } |  j  j d |  } |  j d |  j d | j f  } d | _ | j   | j   } |  j	 | j
   d  | j   | j   q Wd  S)Nrm  rS   r(   Tr^   )rn  ro  rp  rT   rU   r*  rJ   rg   rt  r9   r   rj   r   )r%   rm  rq  rl   rj  r
   r
   r   test_listener_client	  s    !	

z(_TestListenerClient.test_listener_clientc             C   s   |  j  j   } |  j d |  j d | j f  } d | _ | j   t j d  | j	   } |  j
 | j   d  | j   | j   | j   d  S)NrS   r(   Tr   r^   )rn  rp  rT   rU   r*  rJ   rg   r'   ro   rt  r9   r   r   rj   )r%   rq  rl   rj  r
   r
   r   test_issue14725	  s    !	


z#_TestListenerClient.test_issue14725c             C   s   x |  j  j D]} } |  j  j d |  } |  j  j | j  } | j   } | j d  |  j | j d   | j	   | j	   | j	   q Wd  S)Nrm  s   hellor   )
rn  ro  rp  rs  r*  rt  r>  rH   r   r   )r%   famrq  r  r5   r
   r
   r   test_issue16955	  s    

z#_TestListenerClient.test_issue16955N)z	processeszthreads)	r,   r-   r.   r>   r   rU   rv  rw  ry  r
   r
   r
   r   ru  	  s
   ru  c               @   s|   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)	_TestPollr0   r2   c             C   se   |  j    \ } } |  j | j   d  | j d  |  j | j   d  |  j | j   d  d  S)NF    T)r   r9   r   r>  )r%   r5   r6   r
   r
   r   test_empty_string	  s
    z_TestPoll.test_empty_stringc             C   s9   x( | D]  } t  j d  | j |  q W| j   d  S)Ng?)r'   ro   r>  r   )r[   rj  stringsr	   r
   r
   r   _child_strings	  s    z_TestPoll._child_stringsc             C   s   d } |  j    \ } } |  j d |  j d | | f  } | j   xQ | D]I } x$ t d	  D] } | j d
  r] Pq] W| j   } |  j | |  qJ W| j   d  S)N   hellor{     a   b   bye   loprS   r(      g{Gz?)r  r{  r  r  r{  r  r{  r  )	r   rT   r~  rg   r   r   r<  r9   rj   )r%   r}  r5   r6   rl   r	   r   rv  r
   r
   r   test_strings	  s    !
z_TestPoll.test_stringsc             C   s   | j  d  d  S)Nr   )r   )r[   r   r
   r
   r   _child_boundaries
  s    z_TestPoll._child_boundariesc             C   s   |  j  d  \ } } |  j d |  j d | f  } | j   t j d  d d g } x | D] } | j |  q] W| j   | j   |  j	 | j
   |  d  S)NFrS   r(   r]   s   firsts   second)r   rT   r  rg   r'   ro   r>  r   rj   rh   r<  )r%   r   r   rl   r  r   r
   r
   r   test_boundaries
  s    


z_TestPoll.test_boundariesc             C   s+   | j  d  | j  d  | j  d  d  S)Nr  r  s   cd)r>  )r[   r6   r
   r
   r   _child_dont_merge
  s    z_TestPoll._child_dont_mergec             C   s9  |  j    \ } } |  j | j d  d  |  j | j d  d  |  j d |  j d | f  } | j   |  j | j   d  |  j | j d  d  |  j | j d  d  |  j | j   d	  |  j | j d  d  |  j | j d  d  |  j | j d  d  |  j | j   d
  | j   d  S)Ng        Fg?rS   r(   r  g      ?Tr  s   cd)r   r9   r   rT   r  rg   r<  rj   )r%   r5   r6   rl   r
   r
   r   test_dont_merge%
  s    
z_TestPoll.test_dont_mergeN)z	processeszthreads)r,   r-   r.   r>   r|  r   r~  r  r  r  r  r  r
   r
   r
   r   rz  	  s   rz  z$test needs multiprocessing.reductionc               @   sv   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)_TestPicklingConnectionsr0   c             C   s$   d d l  m } | j d d  d  S)Nr   )resource_sharerr   r   )rz   r  r   )r[   r  r
   r
   r   r  A
  s    z&_TestPicklingConnections.tearDownClassc             C   s   x` | D]X } |  j  j d |  } | j | j  | j   } | j |  | j   | j   q Wt j   } | j t j	 j
 d f  | j   | j | j    | j   \ } } | j |  | j   | j   | j   d  S)Nrm  r   )rn  rp  r   r*  rt  r   socketbindr   r   r2  listengetsocknamer   )r[   rj  ro  rx  rq  new_connr8  r
   r
   r   	_listenerF
  s     



z"_TestPicklingConnections._listenerc             C   s   xO t  | j d   D]; \ } } |  j j |  } | j | j    | j   q W| j   \ } } t j   } | j |  | j	 | j    | j   | j   d  S)N)
r   r   rn  rs  r   r   r   r  r-  sendall)r[   rj  r*  r?  clientr
   r
   r   _remote[
  s    
z _TestPicklingConnections._remotec             C   s  |  j  j } |  j   \ } } |  j d |  j d | | f  } d | _ | j   | j   |  j   \ } } |  j d |  j d | f  } d | _ | j   | j   xh | D]` } d | j	 d  }	 | j
   }
 | j |
 |	 f  | j
   } |  j | j
   |	 j    q W| j d   t d  }	 | j
   }
 | j |
 |	 f  | j
   } g  } x' | j
 d  } | swP| j |  qaWd j |  } |  j | |	 j    | j   | j d   | j   | j   | j   | j   d  S)	NrS   r(   TzThis connection uses family %sasciiz$This connection uses a normal socketrn   r{  )rn  ro  r   rT   r  rJ   rg   r   r  r   r   r   r9   r   r   r   rj   )r%   ro  ZlconnZlconn0Zlpr   Zrconn0Zrprx  r?  r*  r  bufr	   r
   r
   r   test_picklingj
  sH    !	

	

 



z&_TestPicklingConnections.test_picklingc             C   sZ   | j    } | j d  | j   | j    } | j    } | j | d  | j   d  S)Nzall is wellr]   )r   r   r   )r[   rj  r   r   r?  r
   r
   r   child_access
  s    
z%_TestPicklingConnections.child_accessc             C   s   |  j    \ } } |  j d |  j d | f  } d | _ | j   | j   |  j  d d  \ } } | j |  | j   |  j | j   d  | j   |  j  d d  \ } } | j |  | j   | j d  | j   |  j | j   d	  d  S)
NrS   r(   Tr   Fzall is wellZfoobarr]   Zfoobarfoobar)	r   rT   r  rJ   rg   r   r   r9   r   )r%   rj  r   rl   r   r   r
   r
   r   test_access
  s     	





z$_TestPicklingConnections.test_accessN)z	processes)r,   r-   r.   r>   r   r  r  r  r  r  r  r
   r
   r
   r   r  <
  s   .r  c               @   s.   e  Z d  Z d Z d d   Z d d   Z d S)	_TestHeapr0   c             C   s  d } d } g  } xw t  |  D]i } t t j d d  d  } t j j |  } | j |  t |  | k r t j	 |  } | | =q Wt j j j
 } g  } d }	 | j j   |  j | j j  xc t | j j    D]L }
 xC |
 D]; \ } } } | j | j j |  | | | | d f  q Wq WxT | j D]I \ } } } | j | j j |  | | | | d f  |	 | | 7}	 q7W| j   x t  t |  d  D]o } | | d  d  \ } } } | | d d  d  \ } } } |  j | | k r| d k p| | k  qWd  S)	Ni  r	  r   r   i  freeoccupiedr   )r   r|   randomlognormvariaterz   r&  r'  r   rM   	randrangeZ_heapr.  r   r   r   rf   Z_len_to_seqrz  Z_arenasindexZ_allocated_blockssortrH   )r%   Z
iterationsZ	maxblocksblocksr   r  r6   r&  r  r  r  Zarenarg   r   ZnarenaZnstartZnstopr
   r
   r   	test_heap
  s:    
!z_TestHeap.test_heapc             C   s   t  j   s& t  j   |  j t  j  t  j   } |  j t  j |  t  j d  xJ t d  D]< } t j	 j
 d  } t j	 j
 d  } | | _ | | _ q_ Wd  S)Nrt   i  r   )gc	isenabledenabler   disableZget_thresholdZset_thresholdr   rz   r&  r'  Zbuddy)r%   Z
thresholdsr   r5   r6   r
   r
   r   test_free_from_gc
  s    
	z_TestHeap.test_free_from_gcN)z	processes)r,   r-   r.   r>   r  r  r
   r
   r
   r   r  
  s   'r  c               @   s(   e  Z d  Z d e f d e f g Z d S)_Foorv  rw  N)r,   r-   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)_TestSharedCTypesr0   c             C   s   t  s |  j d  d  S)Nz%requires multiprocessing.sharedctypes)r  rD   )r%   r
   r
   r   rG    s    z_TestSharedCTypes.setUpc             C   sz   | j  d 9_  | j  d 9_  | j d 9_ | j d 9_ | j  d 9_  x( t t |   D] } | | d 9<q^ Wd  S)Nr]   )r:   rv  rw  r   rM   )r[   rv  rw  r  r  stringr   r
   r
   r   _double  s    z_TestSharedCTypes._doubleFc       	   	   C   sl  t  d d d | } t  t d d | } t  t d d d | } |  j d t t d	   d | } |  j d
 d d | } t d  | _ |  j d |  j	 d | | | | | f  } d | _
 | j   | j   |  j | j d  |  j | j d  |  j | j d  |  j | j d  x, t d	  D] } |  j | | | d  q-W|  j | j t d   d  S)Nr   r   r   g      ?g      @r   r]   rq  rt   r  r   r^   rS   r(   T   g       @r   g      @Z
hellohellogUUUUUU?gUUUUUU?)r   r   r  r  rf   r   r   r:   rT   r  rJ   rg   rj   r9   r4   rv  rw  )	r%   r   rv  rw  r  r  r  rl   r   r
   r
   r   test_sharedctypes   s"    $*	

z#_TestSharedCTypes.test_sharedctypesc             C   s   |  j  d d  d  S)Nr   T)r  )r%   r
   r
   r   test_synchronize5  s    z"_TestSharedCTypes.test_synchronizec             C   sW   t  d d  } t |  } d | _ d | _ |  j | j d  |  j | j d  d  S)Nr]   g      @r   )r  r   rv  rw  r9   r4   )r%   r  r"  r
   r
   r   	test_copy8  s    		z_TestSharedCTypes.test_copyN)z	processes)
r,   r-   r.   r>   rG  r   r  r  r  r  r
   r
   r
   r   r    s   
r  c               @   s4   e  Z d  Z d Z e d d    Z d d   Z d S)_TestFinalizer0   c             C   s  Gd d   d t   } |   } t j | | j d d ~ |   } t j | | j d d } |   |   ~ |   } t j | | j d d |   } t j | | j d d d d	 |   } t j | | j d d d d |   }	 t j |	 | j d d d d |   }
 t j |
 | j d d d d t j d  | j d d d d t j d  | j d d d d t j   | j   t j d  d  S)Nc               @   s   e  Z d  Z d S)z)_TestFinalize._test_finalize.<locals>.FooN)r,   r-   r.   r
   r
   r
   r   r  J  s   r  r(   r5   r6   r  d10exitpriorityr   d01r   d02d03rk   rt   STOPrn   )r5   )r6   )r  )zd10)zd01)zd02)zd03)rk   i)zSTOPi)r  r   Finalizer   _exit_functionr   r   _exit)r[   rj  r  r5   r6   Zclose_br  r  r  r  r  r
   r
   r   _test_finalizeH  s0    							

z_TestFinalize._test_finalizec          	   C   s   |  j    \ } } |  j d |  j d | f  } d | _ | j   | j   d d   t | j d  D } |  j | d d d	 d
 d d d g  d  S)NrS   r(   Tc             S   s   g  |  ] } |  q Sr
   r
   )r   r   r
   r
   r   r   v  s   	 z/_TestFinalize.test_finalize.<locals>.<listcomp>r  r5   r6   r  r  r  r  rk   )	r   rT   r  rJ   rg   rj   r   r   r9   )r%   rj  r   rl   r   r
   r
   r   test_finalizen  s    	

z_TestFinalize.test_finalizeN)z	processes)r,   r-   r.   r>   r   r  r  r
   r
   r
   r   r  D  s   &r  c               @   s(   e  Z d  Z d d   Z d d   Z d S)_TestImportStarc             C   s   d d  l  } t j j t j  } t j j | d  } | j  |  } d d   | D } d d   | D } | j d  | j d  | S)Nr   z*.pyc             S   s6   g  |  ], } t  j j t  j j |  d   d  q S)r   r   )r   pathsplitextsplit)r   r   r
   r
   r   r     s   	 z4_TestImportStar.get_module_names.<locals>.<listcomp>c             S   s   g  |  ] } d  |  q S)zmultiprocessing.r
   )r   rO  r
   r
   r   r     s   	 zmultiprocessing.__init__rz   )	globr   r  dirnamerz   __file__rj   r  r   )r%   r  Zfolderpatternfilesmodulesr
   r
   r   get_module_names  s    z _TestImportStar.get_module_namesc             C   s   |  j    } t j d k rE | j d  | j d  | j d  n  | j d  t se | j d  t d  k r~ | j d  xu | D]m } t |  t j | } |  j t	 | d  |  x4 | j
 D]) } |  j t	 | |  d | | f  q Wq Wd  S)	Nr   zmultiprocessing.popen_forkz multiprocessing.popen_forkserverz!multiprocessing.popen_spawn_posixz!multiprocessing.popen_spawn_win32zmultiprocessing.sharedctypes__all__z%r does not have attribute %r)r  r   r  r  rk  r   r   r  rH   rv   r  )r%   r  rY   modattrr
   r
   r   test_import  s$    
z_TestImportStar.test_importN)r,   r-   r.   r  r  r
   r
   r
   r   r  }  s   r  c               @   s@   e  Z d  Z d	 Z d d   Z e d d    Z d d   Z d S)
_TestLoggingr0   c             C   sZ   t  j   } | j t j  |  j | d  k	  | j d  | j d  | j t  d  S)Nzthis will not be printedznor will this)	rz   
get_loggersetLevelr   
SUBWARNINGrH   debuginfo	LOG_LEVEL)r%   loggerr
   r
   r   test_enable_logging  s    z _TestLogging.test_enable_loggingc             C   s#   t  j   } | j | j    d  S)N)rz   r  r   getEffectiveLevel)r[   rj  r  r
   r
   r   _test_level  s    z_TestLogging._test_levelc       	      C   s  d } d } t  j   } t j   } | j } t  j d d  \ } } | j |  |  j d |  j d | f  } d | _	 | j
   |  j | | j    | j t j  | j |  |  j d |  j d | f  } d | _	 | j
   |  j | | j    | j |  | j d t  d  S)	Nr0  %   r   FrS   r(   Tlevel)rz   r  logging	getLoggerr  r   r  rT   r  rJ   rg   r9   r   NOTSETr  )	r%   ZLEVEL1ZLEVEL2r  Zroot_loggerZ
root_levelrO  rP  rl   r
   r
   r   
test_level  s&    		
	
z_TestLogging.test_levelN)z	processes)r,   r-   r.   r>   r  r   r  r  r
   r
   r
   r   r    s   r  c               @   sO   e  Z d  Z d	 Z e d d    Z e j e e	 d  d  d d    Z
 d S)
_TestPollEintrr0   c             C   s$   t  j d  t j | t j  d  S)Ng?)r'   ro   r   r  rw   SIGUSR1)r[   rZ   r
   r
   r   _killer  s    z_TestPollEintr._killerr  zrequires SIGUSR1c                s   d g     f d d   } t  j   } t j t j |  } z |  j d |  j d | f  } | j   z3 |  j d t j d d  } | j   | j	   Wd  | j	   X|  j
   d  |  j | j d  Wd  t j t j |  Xd  S)	NFc                 s   d   d <d  S)NTr   r
   )r(   )
got_signalr
   r   record  s    z._TestPollEintr.test_poll_eintr.<locals>.recordrS   r(   r]   r   )r]   )r   rO   rw   r  rT   r  rg   r'   ro   rj   rH   r9   rP   )r%   r  rZ   Z
oldhandlerZkillerrl   r
   )r  r   test_poll_eintr  s    	

z_TestPollEintr.test_poll_eintrN)z	processes)r,   r-   r.   r>   r   r  r   r  rv   rw   r  r
   r
   r
   r   r    s   r  c               @   s.   e  Z d  Z e j e d  d d    Z d S)TestInvalidHandlezskipped on Windowsc             C   so   t  j j d  } z- y | j   Wn t t f k
 r= Yn XWd  d  | _ X|  j t t f t  j j d  d  S)NiMr   r   )rz   rn  
Connectionr   r   r6  _handler   )r%   rj  r
   r
   r   test_invalid_handles  s    	
z&TestInvalidHandle.test_invalid_handlesN)r,   r-   r.   r   r  WIN32r  r
   r
   r
   r   r    s   r  c               @   s(   e  Z d  Z d d   Z d d   Z d S)	OtherTestc             C   s<   Gd d   d t   } |  j t j t j j |   d  d  S)Nc               @   s(   e  Z d  Z d d   Z d d   Z d S)zFOtherTest.test_deliver_challenge_auth_failure.<locals>._FakeConnectionc             S   s   d S)Ns   something bogusr
   )r%   r  r
   r
   r   r<  $  s    zQOtherTest.test_deliver_challenge_auth_failure.<locals>._FakeConnection.recv_bytesc             S   s   d  S)Nr
   )r%   r`  r
   r
   r   r>  &  s    zQOtherTest.test_deliver_challenge_auth_failure.<locals>._FakeConnection.send_bytesN)r,   r-   r.   r<  r>  r
   r
   r
   r   _FakeConnection#  s   r  s   abc)r  r   rz   AuthenticationErrorrn  deliver_challenge)r%   r  r
   r
   r   #test_deliver_challenge_auth_failure"  s    	z-OtherTest.test_deliver_challenge_auth_failurec             C   s<   Gd d   d t   } |  j t j t j j |   d  d  S)Nc               @   s4   e  Z d  Z d d   Z d d   Z d d   Z d S)zEOtherTest.test_answer_challenge_auth_failure.<locals>._FakeConnectionc             S   s   d |  _  d  S)Nr   )rU  )r%   r
   r
   r   r&   .  s    zNOtherTest.test_answer_challenge_auth_failure.<locals>._FakeConnection.__init__c             S   s?   |  j  d 7_  |  j  d k r( t j j S|  j  d k r; d Sd S)Nr   r]   s   something bogusr{  )rU  rz   rn  	CHALLENGE)r%   r  r
   r
   r   r<  0  s    
zPOtherTest.test_answer_challenge_auth_failure.<locals>._FakeConnection.recv_bytesc             S   s   d  S)Nr
   )r%   r`  r
   r
   r   r>  7  s    zPOtherTest.test_answer_challenge_auth_failure.<locals>._FakeConnection.send_bytesN)r,   r-   r.   r&   r<  r>  r
   r
   r
   r   r  -  s   r  s   abc)r  r   rz   r  rn  answer_challenge)r%   r  r
   r
   r   "test_answer_challenge_auth_failure,  s    	z,OtherTest.test_answer_challenge_auth_failureN)r,   r-   r.   r  r  r
   r
   r
   r   r     s   
r  c             C   s   |  j  d 7_  d  S)Nr   )r   )nsr
   r
   r   initializerA  s    r  c               @   s@   e  Z d  Z d d   Z d d   Z d d   Z d d   Z d	 S)
TestInitializersc             C   s1   t  j   |  _ |  j j   |  _ d |  j _ d  S)Nr   )rz   Managermgrr  r  r   )r%   r
   r
   r   rG  E  s    zTestInitializers.setUpc             C   s   |  j  j   |  j  j   d  S)N)r  r  rj   )r%   r
   r
   r   rI  J  s    zTestInitializers.tearDownc             C   si   t  j j   } |  j t | j d  | j t |  j f  |  j |  j j	 d  | j
   | j   d  S)Nr   )rz   managersSyncManagerr   	TypeErrorrg   r  r  r9   r   r  rj   )r%   rO  r
   r
   r   test_manager_initializerN  s    
z)TestInitializers.test_manager_initializerc             C   sb   |  j  t t j d d t j d t |  j f  } | j   | j   |  j |  j j	 d  d  S)Nr  r   )
r   r  rz   r  r  r  r   rj   r9   r   )r%   rl   r
   r
   r   test_pool_initializerV  s
    

z&TestInitializers.test_pool_initializerN)r,   r-   r.   rG  rI  r  r  r
   r
   r
   r   r  D  s   r  c             C   s2   y |  j  d d  } Wn t j k
 r- Yn Xd  S)NblockF)ri   r   r   )r\   itemr
   r
   r   _this_sub_processb  s    r  c             C   sH   t  j   } t  j d t d | f  } d | _ | j   | j   d  S)NrS   r(   T)rz   ra   rT   r  rJ   rg   rj   )r\   r   ZsubProcr
   r
   r   _test_processh  s
    	
r  c             C   s   |  |  S)Nr
   )rv  r
   r
   r   _afunco  s    r  c           	   C   sQ   t  j d d  }  |  j t d d d d d d d g  } |  j   |  j   d  S)	Nr0   r   r   r]   r   r   r   r   )rz   r  r  r  r   rj   )r  rv  r
   r
   r   pool_in_processr  s    '
r  c               @   sF   e  Z d  Z d d   Z e d d    Z d d   Z d d   Z d	 S)

_file_likec             C   s   | |  _  d  |  _ d  S)N)	_delegate_pid)r%   Zdelegater
   r
   r   r&   y  s    	z_file_like.__init__c             C   s4   t  j   } | |  j k r- | |  _ g  |  _ |  j S)N)r   rO   r  _cache)r%   rZ   r
   r
   r   cache}  s
    		z_file_like.cachec             C   s   |  j  j |  d  S)N)r  r   )r%   r`  r
   r
   r   r     s    z_file_like.writec             C   s)   |  j  j d j |  j   g  |  _ d  S)Nr:  )r  r   rj   r  r  )r%   r
   r
   r   flush  s    z_file_like.flushN)r,   r-   r.   r&   propertyr  r   r  r
   r
   r
   r   r   x  s   	r   c               @   s4   e  Z d  Z d d   Z d d   Z d d   Z d S)TestStdinBadfiledescriptorc             C   s?   t  j   } t  j d t d | f  } | j   | j   d  S)NrS   r(   )rz   ra   rT   r  rg   rj   )r%   r   r   r
   r
   r   test_queue_in_process  s    
z0TestStdinBadfiledescriptor.test_queue_in_processc             C   s*   t  j d t  } | j   | j   d  S)NrS   )rz   rT   r  rg   rj   )r%   rl   r
   r
   r   test_pool_in_process  s    
z/TestStdinBadfiledescriptor.test_pool_in_processc                si   t  j   } t |      j d  t j d   f d d    }   j   | j   d k se t  d  S)Nr  rS   c                  s
     j    S)N)r  r
   )fliker
   r   r    s    z:TestStdinBadfiledescriptor.test_flushing.<locals>.<lambda>)	ioStringIOr   r   rz   rT   r  r  r   )r%   sior   r
   )r
  r   test_flushing  s    
z(TestStdinBadfiledescriptor.test_flushingN)r,   r-   r.   r  r	  r  r
   r
   r
   r   r    s   r  c               @   s   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   s[   xJ t  d  D]< } | r0 t j t j   d  | j | t j   f  q W| j   d  S)Nrt   g?)r   r'   ro   r  r   r   rO   r   )r[   r   slowr   r
   r
   r   _child_test_wait  s
    zTestWait._child_test_waitFc                si  d d l  m } g  } g    g  } x t d  D] } t j d d  \ } } t j d |  j d | | f  } d | _ | j   | j	   | j
 |    j
 |  |  j | j  q/ Wxj | r%x] | |  D]O } y | j   }	 Wn) t k
 r| j |  | j	   Yq X| j
 |	  q Wq W| j   t   f d	 d
   t d  D  }
 |  j | |
  d  S)Nr   )r   r   r   FrS   r(   Tc             3   s+   |  ]! }   D] } | | j  f Vq q d  S)N)rZ   )r   r   rl   )procsr
   r   r    s    z%TestWait.test_wait.<locals>.<genexpr>rt   )multiprocessing.connectionr   r   rz   r   rT   r  rJ   rg   r   r   r   rj   r   rL  r  r  r  r9   )r%   r  r   readersmessagesr   r   r   rl   r?  r   r
   )r  r   	test_wait  s0    !	

	
%zTestWait.test_waitc             C   su   t  j    } | j |  xK t d  D]= } | rI t j t j   d  | j d | j d   q& W| j   d  S)Nrt   g?z%s
r  )	r  r-  r   r'   ro   r  r  r   r   )r[   r*  r  r	   r   r
   r
   r   _child_test_wait_socket  s    z TestWait._child_test_wait_socketc             C   s  d d l  m } t j   } | j t j j d f  | j   | j   } g  } g  } i  } xe t	 d  D]W } t
 j d |  j d | | f  }	 d |	 _ |	 j   | j |	  |  j |	 j  qj Wx= t	 d  D]/ } | j   \ }
 } | j |
  g  | |
 <q W| j   xa | rrxT | |  D]F }
 |
 j d  } | sZ| j |
  |
 j   q%| |
 j |  q%WqWd j d	 d
   t	 d  D  j d  } x- | j   D] } |  j d j |  |  qWd  S)Nr   )r   r   rS   r(   Tr0  r:  c             s   s   |  ] } d  | Vq d S)z%s
Nr
   )r   r   r
   r
   r   r    s    z,TestWait.test_wait_socket.<locals>.<genexpr>rt   r  r{  )r  r   r  r  r   r   r2  r  r  r   rz   rT   r  rJ   rg   r   r   rj   rt  r   r   r  r   rz  r9   )r%   r  r   rq  r8  r  r  Zdicr   rl   r   r1  r?  r   vr
   r
   r   test_wait_socket  s<    
	

	+zTestWait.test_wait_socketc             C   s   |  j  d  d  S)NT)r  )r%   r
   r
   r   test_wait_slow  s    zTestWait.test_wait_slowc             C   s   |  j  d  d  S)NT)r  )r%   r
   r
   r   test_wait_socket_slow  s    zTestWait.test_wait_socket_slowc             C   s   d d l  m } d } t j   \ } } t j   } | | | g |  } t j   | } |  j | g   |  j | | d  |  j | | d  | j d   t j   } | | | g d  } t j   | } |  j | | g  |  j | d  d  S)Nr   )r   r   r]   g      ?r   g?)	r  r   rz   r   r'   r9   r  assertGreaterr   )r%   r   r   r5   r6   rg   r;   r   r
   r
   r   test_wait_timeout   s    zTestWait.test_wait_timeoutc             C   s   | j    t j |  d  S)N)r   r'   ro   )r[   r   Zperiodr
   r
   r   signal_and_sleep  s    
zTestWait.signal_and_sleepc             C   s   d d l  m } d } d d   } t j d  } t j   \ } } t j d |  j d | | f  } | j   |  j | j	 t
  |  j | j d d	   t j   } | | | j	 | g | d	  }	 t j   | }
 |  j |	 | j	 g  |  j |
 | d
  |  j |
 | d
  | j d   t j   } | | | j	 | g d	  }	 t j   | }
 |  j | |	  | | j	 | g   |  j |
 d  | j d   t j   } | | | j	 | g d	  }	 t j   | }
 |  j | |	  | | | j	 | g   |  j |
 d  | j   | j   d  S)Nr   )r   r   c             S   s   t  |  d d d   S)Nr  c             S   s
   t  |   S)N)r   )rv  r
   r
   r   r     s    z>TestWait.test_wait_integer.<locals>.<lambda>.<locals>.<lambda>)r  )rq  r
   r
   r   r     s    z,TestWait.test_wait_integer.<locals>.<lambda>rS   r(   r   r   r]   g?)r  r   rz   r   r   rT   r  rg   rK   r   r|   rH   r   r'   r9   r  r  r   ru   rj   )r%   r   r   Zsorted_r   r5   r6   rl   rg   r;   r   r
   r
   r   test_wait_integer  s<    
%(
zTestWait.test_wait_integerc             C   s   d d l  m } t j   \ } } t j   } | | g d d } t j   | } |  j | g   |  j | d  | j   | j   d  S)Nr   )r   r   r   r   )r  r   rz   r   r'   r9   r  r   )r%   r   r5   r6   r*   r;   r
   r
   r   test_neg_timeoutG  s    
zTestWait.test_neg_timeoutN)r,   r-   r.   r   r  r  r  r  r  r  r  r  r  r   r
   r
   r
   r   r    s   
%+r  c               @   sL   e  Z d  Z e j e d  d d    Z e j e d  d d    Z d S)TestInvalidFamilyzskipped on Windowsc          	   C   s+   |  j  t   t j j d  Wd  QRXd  S)Nz\\.\test)r   r   rz   rn  rp  )r%   r
   r
   r   test_invalid_familyX  s    z%TestInvalidFamily.test_invalid_familyz skipped on non-Windows platformsc          	   C   s+   |  j  t   t j j d  Wd  QRXd  S)Nz/var/test.pipe)r   r   rz   rn  rp  )r%   r
   r
   r   test_invalid_family_win32]  s    z+TestInvalidFamily.test_invalid_family_win32N)	r,   r-   r.   r   r  r  r"  r  r#  r
   r
   r
   r   r!  V  s   r!  c               @   s@   e  Z d  Z e d d    Z e d d    Z d d   Z d S)	TestFlagsc             C   s   | j  t t j   d  S)N)r   r.  r   flags)r[   rj  r
   r
   r   run_in_grandchildg  s    zTestFlags.run_in_grandchildc             C   s   d d  l  } t j d d  \ } } t j d |  j d | f  } | j   | j   } | j   | j   | j   t	 t
 j  | f } t | j |   d  S)Nr   r   FrS   r(   )jsonrz   r   rT   r&  rg   r   rj   r   r.  r   r%  printdumps)r[   r'  r   r   rl   grandchild_flagsr%  r
   r
   r   run_in_childk  s    



zTestFlags.run_in_childc             C   sx   d d  l  } d d  l } d d } | j t j d d d d | g  } | j | j d   \ } } |  j | |  d  S)	Nr   z2from test._test_multiprocessing import TestFlags; zTestFlags.run_in_child()z-Ez-Sz-Oz-cr  )r'  
subprocesscheck_outputr   
executableloadsdecoder9   )r%   r'  r,  progr`  Zchild_flagsr*  r
   r
   r   
test_flagsx  s    zTestFlags.test_flagsN)r,   r-   r.   r   r&  r+  r2  r
   r
   r
   r   r$  f  s   r$  c               @   s.   e  Z d  Z e d d    Z d d   Z d S)TestTimeoutsc             C   sQ   t  j d  | j d  | j   t j j |  } | j d  | j   d  S)Nr   r  i  )r'   ro   r   r   rz   rn  rs  )r[   childr*  rj  r
   r
   r   _test_timeout  s    
zTestTimeouts._test_timeoutc             C   s   t  j   } z t  j d  t j d d  \ } } t j j d d  } t j d |  j d | | j	 f  } | j
   | j   |  j | j   d  | j   | j   } |  j | j   d	  | j   | j   | j d
  Wd  t  j |  Xd  S)Ng?r   Trm  AF_INETrS   r(   r  i  rt   )r  getdefaulttimeoutsetdefaulttimeoutrz   r   rn  rp  rT   r5  r*  rg   r   r9   r   rt  rj   )r%   Zold_timeoutparentr4  rq  rl   rj  r
   r
   r   r     s"    




zTestTimeouts.test_timeoutN)r,   r-   r.   r   r5  r   r
   r
   r
   r   r3    s   	r3  c               @   s   e  Z d  Z d d   Z d S)TestNoForkBombc             C   s   t  j   } t j j t j j t  d  } | d k r} t j j	 j
 | |  \ } } } |  j | d  |  j d |  nG t j j	 j | |  \ } } } |  j | j   d  |  j | d  d  S)Nzmp_fork_bomb.pyforkr{  s   RuntimeErrors   123)rz   get_start_methodr   r  rj   r  r  r   r   Zscript_helperZassert_python_failurer9   rh   Zassert_python_okr   )r%   ZsmrY   rcoutr   r
   r
   r   test_noforkbomb  s    !!!zTestNoForkBomb.test_noforkbombN)r,   r-   r.   r?  r
   r
   r
   r   r:    s   r:  c               @   s.   e  Z d  Z e d d    Z d d   Z d S)TestForkAwareThreadLockc             C   s|   | d k rX t  j d |  j d | d | f  } | j   | j   | j d d  n | j t t j	   | j   d  S)Nr   rS   r(   r   r   )
rz   rT   r4  rg   r   rj   r   rM   r   _afterfork_registry)r[   r5  rj  rl   r
   r
   r   r4    s    %

zTestForkAwareThreadLock.childc             C   s   t  j d  \ } } t j   } t t j  } t  j d |  j d d | f  } | j   | j	   | j
   } | j d d  |  j | |  d  S)NFrS   r(   r   r   )rz   r   r   ForkAwareThreadLockrM   rA  rT   r4  rg   r   r   rj   ZassertLessEqual)r%   r   r   rq  Zold_sizerl   Znew_sizer
   r
   r   r     s    !

z!TestForkAwareThreadLock.test_lockN)r,   r-   r.   r   r4  r   r
   r
   r
   r   r@    s   r@  c               @   sF   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 j   j   St j   j   } g  } x, | d k  r\ | j |  t j |  } q1 Wx | D] } t j |  qd W| Sd  S)Nr	  )r  r  detachr   r   dupr   )r%   r   to_closerv  r
   r
   r   get_high_socket_fd  s    zTestCloseFds.get_high_socket_fdc             C   s0   t  r t j d |  j   n t j |  d  S)NrE  )r  r  r   r   )r%   r   r
   r
   r   r     s    zTestCloseFds.closec             C   so   y t  j | t  j t  j  } Wn2 t k
 rS } z | j |  WYd  d  } ~ Xn X| j   | j d   d  S)N)r  fromfdr6  SOCK_STREAMr  r   r   )r[   rj  r   r	   rk   r
   r
   r   _test_closefds  s     
zTestCloseFds._test_closefdsc             C   s  t  s t j d   t j   \ } } |  j   } zU t j d |  j d | | f  } | j   | j	   | j
   } | j d d  Wd  |  j	 |  | j	   | j	   Xt j   d k r |  j | d   nA d } |  j | t  |  j | j t j k p| j | k |  d  S)Nzrequires fd picklingrS   r(   r   r   r;  i6'  )rk  r   r    rz   r   rG  rT   rJ  rg   r   r   rj   r<  r  rK   r6  rH   r7  rZ  winerror)r%   rO  rP  r   rl   rk   ZWSAENOTSOCKr
   r
   r   test_closefd  s(    


zTestCloseFds.test_closefdN)r,   r-   r.   rG  r   r   rJ  rL  r
   r
   r
   r   rC    s   
rC  c               @   s   e  Z d  Z e d d    Z e j e e d  d  d d    Z	 e d d    Z
 e j e e d  d  d	 d
    Z d S)TestIgnoreEINTRc             C   sZ   d d   } t  j  t  j |  | j d  | j   } | j |  | j d d  d  S)Nc             S   s   d  S)Nr
   )signumframer
   r
   r   rs     s    z-TestIgnoreEINTR._test_ignore.<locals>.handlerready   xi   i   )rw   r  r   r   r>  )r[   rj  rs   rv  r
   r
   r   _test_ignore  s    zTestIgnoreEINTR._test_ignorer  zrequires SIGUSR1c             C   s   t  j   \ } } z t  j d |  j d | f  } d | _ | j   | j   |  j | j   d  t	 j
 d  t j | j t j  t	 j
 d  | j d  |  j | j   d  t	 j
 d  t j | j t j  |  j | j   d d	  t	 j
 d  | j   Wd  | j   Xd  S)
NrS   r(   TrP  g?i  rQ  i   i   )rz   r   rT   rR  rJ   rg   r   r9   r   r'   ro   r   r  rZ   rw   r  r   r<  rj   )r%   rj  r   rl   r
   r
   r   test_ignore&  s&    	

zTestIgnoreEINTR.test_ignorec          	   C   se   d d   } t  j  t  j |  t j j   0 } | j | j  | j   } | j d  Wd  QRXd  S)Nc             S   s   d  S)Nr
   )rN  rO  r
   r
   r   rs   ?  s    z6TestIgnoreEINTR._test_ignore_listener.<locals>.handlerwelcome)rw   r  rz   rn  rp  r   r*  rt  )r[   rj  rs   rq  r5   r
   r
   r   _test_ignore_listener=  s    z%TestIgnoreEINTR._test_ignore_listenerc             C   s   t  j   \ } } z t  j d |  j d | f  } d | _ | j   | j   | j   } t j	 d  t
 j | j t j  t j	 d  t  j j |  } |  j | j   d  | j   Wd  | j   Xd  S)NrS   r(   Tg?rT  )rz   r   rT   rU  rJ   rg   r   r   r'   ro   r   r  rZ   rw   r  rn  rs  r9   rj   )r%   rj  r   rl   r*  r  r
   r
   r   test_ignore_listenerG  s    	

z$TestIgnoreEINTR.test_ignore_listenerN)r,   r-   r.   r   rR  r   r  rv   rw   rS  rU  rV  r
   r
   r
   r   rM    s   
'
rM  c               @   sR   e  Z d  Z e d d    Z d d   Z d d   Z d d   Z d	 d
   Z d S)TestStartMethodc             C   s   | j  t j    d  S)N)r   rz   r<  )r[   rj  r
   r
   r   _check_context[  s    zTestStartMethod._check_contextc             C   s   | j  d d  \ } } | j d |  j d | f  } | j   | j   | j   } | j   | j   |  j | | j    d  S)Nr   FrS   r(   )	r   rT   rX  rg   r   r   rj   r9   r<  )r%   ctxr   r   rl   Zchild_methodr
   r
   r   check_context_  s    



zTestStartMethod.check_contextc             C   s   x d D] } y t  j |  } Wn t k
 r7 w Yn X|  j | j   |  |  j | j   |  |  j t | j d  |  j t | j d   |  j |  q Wd  S)Nr;  spawn
forkserver)zforkzspawnz
forkserver)	rz   get_contextr   r9   r<  r  r   set_start_methodrZ  )r%   methodrY  r
   r
   r   r  i  s    zTestStartMethod.test_contextc             C   s$  t  j t  d } t  j   } z x d D] } y t  j | d d Wn t k
 r] w) Yn X|  j t  j   |  t  j   } |  j | j   |  |  j t	 |  j
 j   j |   |  j | j j
 j   j |   |  j t   | d 7} q) WWd  t  j | d d X|  j | d  d  S)	Nr   r;  r[  r\  forceTr   )zforkzspawnz
forkserver)rz   set_forkserver_preloadPRELOADr<  r^  r   r9   r]  rH   re   r,   lower
startswithrT   rZ  r   )r%   rU  Z
old_methodr_  rY  r
   r
   r   test_set_getu  s&    %zTestStartMethod.test_set_getc             C   sc   t  j   } t j d k r1 |  j | d g  n. |  j | d d g k p[ | d d d g k  d  S)Nr   r[  r;  r\  )rz   get_all_start_methodsr   r  r9   rH   )r%   methodsr
   r
   r   test_get_all  s
    zTestStartMethod.test_get_allN)	r,   r-   r.   r   rX  rZ  r  re  rh  r
   r
   r
   r   rW  Z  s
   
rW  z*test semantics don't make sense on Windowsc               @   s   e  Z d  Z d d   Z d S)TestSemaphoreTrackerc             C   s  d d  l  } d } t j   \ } } | j t j d | | | f g d | g d | j } t j |  t | d d d = } | j	   j
   j d	  } | j	   j
   j d	  } Wd  QRXt j |  | j   | j   t j d
  |  j t   }	 t j |  Wd  QRX|  j |	 j j t j t j f  | j j   j d  }
 | j j   d } |  j |
 |  |  j |
 d |  d  S)Nr   aM  if 1:
            import multiprocessing as mp, time, os
            mp.set_start_method("spawn")
            lock1 = mp.Lock()
            lock2 = mp.Lock()
            os.write(%d, lock1._semlock.name.encode("ascii") + b"\n")
            os.write(%d, lock2._semlock.name.encode("ascii") + b"\n")
            time.sleep(10)
        z-cpass_fdsr   rc  r   Tr  g       @zutf-8z9semaphore_tracker: There appear to be 2 leaked semaphoreszsemaphore_tracker: %r: \[Errno)r,  r   pipePopenr   r.  PIPEr   r   readliner   r0  r   
sem_unlinkru   r   r'   ro   r   r6  rh   	exceptionr7  ENOENTEINVALr   r   ZassertRegex)r%   r,  cmdr   r   rl   r   Zname1Zname2rY  r   r   r
   r
   r   test_semaphore_tracker  s.    		"

"z+TestSemaphoreTracker.test_semaphore_trackerN)r,   r-   r.   rt  r
   r
   r
   r   ri    s   ri  c               @   s'  e  Z d  Z d Z e j Z e j Z e e j  Z e e j	  Z	 e e j
  Z
 e e j  Z e e j  Z e e j  Z e e j  Z e e j  Z e e j  Z e e j  Z e e j  Z e e j  Z e e j  Z e e j  Z e e j  Z e e j  Z e e j  Z d S)r  r0   N)r,   r-   r.   rC   rz   rT   rn  staticmethodrF   rd   r  r   ra   r   r   r   r   r   r  rb   rC  r   r  r}  r  r
   r
   r
   r   r    s(   		r  c               @   s{  e  Z d  Z d Z e j Z e e j d   Z	 e e j d   Z
 e e j d   Z e e j d   Z e e j d   Z e e j d   Z e e j d   Z e e j d	   Z e e j d
   Z e e j d   Z e e j d   Z e e j d   Z e e j d   Z e e j d   Z e d d    Z e d d    Z e d d    Z d S)ManagerMixinr1   zmanager.Queuezmanager.JoinableQueuezmanager.Lockzmanager.RLockzmanager.Semaphorezmanager.BoundedSemaphorezmanager.Conditionzmanager.Eventzmanager.Barrierzmanager.Valuezmanager.Arrayzmanager.listzmanager.dictzmanager.Namespacec             O   s   |  j  j | |   S)N)r1   r  )r[   r(   r)   r
   r
   r   r    s    zManagerMixin.Poolc             C   s   t  j   |  _ d  S)N)rz   r  r1   )r[   r
   r
   r   r    s    zManagerMixin.setUpClassc             C   s   d } x? t  t j    d k rG | d k  rG t j |  | d 9} q	 Wt j   |  j j   d k r t	 d  t	 |  j j
    |  j j   |  j j   d  |  _ d  S)Ng{Gz?r   r   r]   r   z5Shared objects which still exist at manager shutdown:)rM   rz   rd   r'   ro   r  collectr1   Z_number_of_objectsr(  Z_debug_infor  rj   )r[   r*   r
   r
   r   r    s    '

zManagerMixin.tearDownClassN)r,   r-   r.   rC   rz   rT   r  operator
attrgetterra   r   r   r   r   r   r  rb   rC  r   r  rf   r  r  r   r  r  r  r
   r
   r
   r   rv    s&   	rv  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)ThreadsMixinr2   N)r,   r-   r.   rC   rz   dummyrT   rn  ru  rF   rd   r  r   ra   r   r   r   r   r   r  rb   rC  r   r  r
   r
   r
   r   rz    s$   rz  c                s  |  d } t    } d d d h } xG| j   D]9\ } } t | t  sM q/ t | t  r| t k rk q/ t | j  | k s t | j   x | j D]z } d | j	   | d d   } | | j	   d }	 Gd d	   d	 | |	 t
 j  }
 | |
 _ |
 _ | |
 _ |
 |  | <q Wq/ t | t
 j  r/ Gd
 d	   d	 | t  }
 | |
 _ |
 _ | |
 _ |
 |  | <q/ Wd  d  g   d  g      f d d   }    f d d   } | |  d <| |  d <d  S)Nr,   r0   r2   r1   ZWithr   Mixinc               @   s   e  Z d  Z d S)z*install_tests_in_module_dict.<locals>.TempN)r,   r-   r.   r
   r
   r
   r   Temp-  s   r}  c               @   s   e  Z d  Z d S)z*install_tests_in_module_dict.<locals>.TempN)r,   r-   r.   r
   r
   r
   r   r}  3  s   c                 s  t  j t  t  j j   t  j j j     d <t j j     d <t  j d d   d <y t  j	  d d Wn% t
 k
 r t j  d   Yn Xt j j d  r y t  j   }  Wn! t k
 r t j d   Yn Xt   t j   t  j   j t  d  S)	Nr   r   
allow_noneTr`  z start method not supportedlinuxz1OSError raises on RLock creation, see issue 3111!)rz   ra  rb  process_cleanup	_danglingr   r   r<  r^  r   r   r    r   r  rd  r   r6  r!   r   get_temp_dirr  r  r  )r   )danglingold_start_methodstart_methodr
   r   setUpModule<  s$    	
z1install_tests_in_module_dict.<locals>.setUpModulec                 s   t  j  d d d t j d  t  j j   t j   t t  j j	  t   d  }  |  rw t
 d |  d t j ~  t t j	  t   d  }  |  r t
 d |  d t j d  S)	Nr   r`  Tg      ?zDangling processes:filer   zDangling threads:)rz   r^  r'   ro   r  r  r  rw  r   r  r(  r   r   r   )tmp)r  r  r
   r   tearDownModuleR  s    
 z4install_tests_in_module_dict.<locals>.tearDownModuler  r  )globalsr  r  re   
issubclassr/   r   r>   r   
capitalizer   TestCaser,   r.   r-   r  )Zremote_globsr  r-   Zlocal_globsZ	ALL_TYPESrY   baseZtype_Znewnamer|  r}  r  r  r
   )r  r  r  r   install_tests_in_module_dict  s8    
	$			
r  )r   r   r   r'   r  r  r   r   r  r7  rw   r  r  r  r  r(  rx  Ztest.supportr   Ztest.support.script_helperr   import_moduler   r   Zmultiprocessing.dummyrz   r  Zmultiprocessing.managersZmultiprocessing.heapr  r   r   HAVE_SEND_HANDLErk  ImportErrorZmultiprocessing.sharedctypesr   r   r  r^  r   r  r  r~   r3   r   r   r   getattrZHAVE_GETVALUEr  r  r   r   r   rf  rb  Zctypesr   r   r   r  r!   r"   r/   r@   rB   rT   r   r   r   r   r   r   r   r  r   r%  r3  r4  rA  rB  rn  r  r  r  r  r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  registerr  ra   r$  r%  r&  r'  r,  r)  r4  r=  r;  rl  ru  rz  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r  r  r!  r$  r3  r:  r@  rC  rM  rW  r  ri  r  rv  rz  r  r
   r
   r
   r   <module>   s0  
	 N62-ES<(170. 
0RE69+C"! "B@='/