Ñò
•à"Ic           @   sX  d  Z  d d k Z d d k Z d d k Z d d k Z d d k l Z d Z y e Wn) e j
 o d e	 f d „  ƒ  YZ n Xd d k
 Z
 d d k l Z l Z l Z l Z l Z l Z l Z e oX d d k l Z d d k Z e i d	 d
 j  o d d k l Z qd d k l Z n d e
 i f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ  d e  f d „  ƒ  YZ! d e  f d  „  ƒ  YZ" d! e  f d" „  ƒ  YZ# d# e  f d$ „  ƒ  YZ$ d% „  Z% e& d& j o e
 i' d' d( ƒ n d S()   s-   TestCases for multi-threaded access to a DB.
iÿÿÿÿN(   t   randomt   -t   WindowsErrorc           B   s   e  Z RS(    (   t   __name__t
   __module__(    (    (    s3   /mit/python/lib/python2.6/bsddb/test/test_thread.pyR      s   (   t   dbt   dbutilst   test_supportt   verboset   have_threadst   get_new_environment_patht   get_new_database_path(   t   Threadi    i   (   t   currentThread(   t   current_threadt   BaseThreadedTestCasec           B   sw   e  Z e i Z d  Z d  Z d  Z d d k Z e i	 d  d j  o d d „ Z n d „  Z d „  Z d	 „  Z d
 „  Z RS(   i    iÿÿÿÿNi   i   i   c         C   s   |  i  | d | ƒd  S(   Nt   msg(   t
   failUnless(   t   selft   exprR   (    (    s3   /mit/python/lib/python2.6/bsddb/test/test_thread.pyt
   assertTrue)   s    c         C   sÏ   t  o t i t _ n t ƒ  |  _ t i ƒ  |  _	 |  i
 ƒ  |  i	 i |  i |  i t i Bƒ |  i i d |  _ t i |  i	 ƒ |  _ |  i o |  i i |  i ƒ n |  i i |  i |  i |  i t i Bƒ d  S(   Ns   .db(   R   t   syst   stdoutR   t   _deadlock_VerboseFileR
   t   homeDirR   t   DBEnvt   envt
   setEnvOptst   opent   envflagst	   DB_CREATEt	   __class__R   t   filenamet   DBt   dt
   dbsetflagst	   set_flagst   dbtypet   dbopenflags(   R   (    (    s3   /mit/python/lib/python2.6/bsddb/test/test_thread.pyt   setUp,   s    
 
c         C   s.   |  i  i ƒ  |  i i ƒ  t i |  i ƒ d  S(   N(   R"   t   closeR   R   t   rmtreeR   (   R   (    (    s3   /mit/python/lib/python2.6/bsddb/test/test_thread.pyt   tearDown;   s    c         C   s   d  S(   N(    (   R   (    (    s3   /mit/python/lib/python2.6/bsddb/test/test_thread.pyR   @   s    c         C   s   t  i | g d ƒ S(   Ni   (   t   DASHt   join(   R   t   key(    (    s3   /mit/python/lib/python2.6/bsddb/test/test_thread.pyt   makeDataC   s    (   i   i   i    (   R   R   R   t
   DB_UNKNOWNR%   R&   R#   R   R   t   version_infot   NoneR   R'   R*   R   R.   (    (    (    s3   /mit/python/lib/python2.6/bsddb/test/test_thread.pyR   !   s   				t   ConcurrentDataStoreBasec           B   sU   e  Z e i Z e i e i Be i BZ d  Z d  Z	 d Z
 d „  Z d „  Z d „  Z RS(   i    iè  c         C   sr  t  o  d Gd d GHd |  i i GHn t |  i ƒ } d d  k } | i | ƒ |  i |  i } |  i |  i } |  i	 |  i |  i | ƒ |  i	 |  i |  i | ƒ |  i
 | | d j ƒ g  } x‰ t |  i ƒ D]x } t d |  i d |  i | f d	 d
 | ƒ } d d  k } | i d d j  o | i t ƒ n
 t | _ | i | ƒ qÐ Wg  }	 xŽ t |  i ƒ D]} } | | | | | d !}
 |
 i ƒ  | | | | | d !} t d |  i d |  i |
 | f d	 d | ƒ } |	 i | ƒ qbWxR |	 D]J } d d  k } | i d d j  o | i t ƒ n
 t | _ | i ƒ  qêWx |	 D] } | i ƒ  q?Wx | D] } | i ƒ  qZWd  S(   Ns   
s   -=i   s(   Running %s.test01_1WriterMultiReaders...iÿÿÿÿi    t   targett   argst   names	   reader %di   i   s	   writer %d(   R   R   R   t   ranget   recordsR    t   shufflet   writerst   readerst   assertEqualR   t   xrangeR   t   readerThreadR"   R   R0   t	   setDaemont   Truet   daemont   appendt   sortt   writerThreadt   startR,   (   R   t   keysR    t   records_per_writert   readers_per_writerR:   t   xt   rtR   R9   t   at   bt   wtt   t(    (    s3   /mit/python/lib/python2.6/bsddb/test/test_thread.pyt   test01_1WriterMultiReadersQ   s\     	 
 	  c   
      C   s=  d d  k  } | i d d j  o t ƒ  i ƒ  } n t ƒ  i } t o d | t t f GHn t | ƒ t | ƒ } | } x– | D]Ž } d | }	 t	 i
 | i |	 |  i |	 ƒ d d ƒt o' | d d j o d	 | t | f GHn | d
 8} | p | i ƒ  i ƒ  | } q q Wt o d | GHn t o d | GHn d  S(   Niÿÿÿÿi    i   s   %s: creating records %d - %ds   %04dt   max_retriesi   id   s   %s: records %d - %d finishedi   s   %s: finished creating recordss   %s: thread finished(   R   R0   R   t   getNameR5   R   RD   t   stopt   lenR   t   DeadlockWrapt   putR.   t   pop(
   R   R"   RE   R:   R   R5   t   countt   count2RH   R-   (    (    s3   /mit/python/lib/python2.6/bsddb/test/test_thread.pyRC   …   s.     

c         C   sú   d d  k  } | i d d j  o t ƒ  i ƒ  } n t ƒ  i } x  t d ƒ D]’ } | i ƒ  } d } | i ƒ  } xG | o? | d 7} | \ }	 }
 |  i |  i	 |	 ƒ |
 ƒ | i
 ƒ  } qs Wt o d | | f GHn | i ƒ  qL Wt o d | GHn d  S(   Niÿÿÿÿi    i   i   i   s   %s: found %d recordss   %s: thread finished(   R   R0   R   RP   R5   R<   t   cursort   firstR;   R.   t   nextR   R(   (   R   R"   t	   readerNumR   R5   t   it   cRV   t   recR-   t   data(    (    s3   /mit/python/lib/python2.6/bsddb/test/test_thread.pyR=   £   s(      
(   R   R   R   t	   DB_THREADR&   t   DB_INIT_CDBt   DB_INIT_MPOOLR   R:   R9   R7   RN   RC   R=   (    (    (    s3   /mit/python/lib/python2.6/bsddb/test/test_thread.pyR2   J   s   		4	t   BTreeConcurrentDataStorec           B   s#   e  Z e i Z d  Z d Z d Z RS(   i   i
   iè  (   R   R   R   t   DB_BTREER%   R9   R:   R7   (    (    (    s3   /mit/python/lib/python2.6/bsddb/test/test_thread.pyRc   »   s   	t   HashConcurrentDataStorec           B   s#   e  Z e i Z d  Z d Z d Z RS(   i   i
   iè  (   R   R   R   t   DB_HASHR%   R9   R:   R7   (    (    (    s3   /mit/python/lib/python2.6/bsddb/test/test_thread.pyRe   Â   s   	t   SimpleThreadedBasec           B   s^   e  Z e i Z e i e i Be i BZ d  Z d Z	 d Z
 d „  Z d „  Z d „  Z d „  Z RS(   i
   i   iè  c         C   s   |  i  i t i ƒ d  S(   N(   R   t   set_lk_detectR   t   DB_LOCK_DEFAULT(   R   (    (    s3   /mit/python/lib/python2.6/bsddb/test/test_thread.pyR   Ò   s    c         C   sr  t  o  d Gd d GHd |  i i GHn t |  i ƒ } d d  k } | i | ƒ |  i |  i } |  i |  i } |  i	 |  i |  i | ƒ |  i	 |  i |  i | ƒ |  i
 | | d j ƒ g  } x‰ t |  i ƒ D]x } t d |  i d |  i | f d	 d
 | ƒ } d d  k } | i d d j  o | i t ƒ n
 t | _ | i | ƒ qÐ Wg  }	 xŽ t |  i ƒ D]} } | | | | | d !}
 |
 i ƒ  | | | | | d !} t d |  i d |  i |
 | f d	 d | ƒ } |	 i | ƒ qbWxR |	 D]J } d d  k } | i d d j  o | i t ƒ n
 t | _ | i ƒ  qêWx |	 D] } | i ƒ  q?Wx | D] } | i ƒ  qZWd  S(   Ns   
s   -=i   s    Running %s.test02_SimpleLocks...iÿÿÿÿi    R3   R4   R5   s	   reader %di   i   s	   writer %d(   R   R   R   R6   R7   R    R8   R9   R:   R;   R   R<   R   R=   R"   R   R0   R>   R?   R@   RA   RB   RC   RD   R,   (   R   RE   R    RF   RG   R:   RH   RI   R   R9   RJ   RK   RL   RM   (    (    s3   /mit/python/lib/python2.6/bsddb/test/test_thread.pyt   test02_SimpleLocksÕ   sZ     	 
 	  c   
      C   s)  d d  k  } | i d d j  o t ƒ  i ƒ  } n t ƒ  i } t o d | t t f GHn t | ƒ t | ƒ } | } x– | D]Ž } d | }	 t	 i
 | i |	 |  i |	 ƒ d d ƒt o' | d d j o d	 | t | f GHn | d
 8} | p | i ƒ  i ƒ  | } q q Wt o d | GHn d  S(   Niÿÿÿÿi    i   s   %s: creating records %d - %ds   %04dRO   i   id   s   %s: records %d - %d finishedi   s   %s: thread finished(   R   R0   R   RP   R5   R   RD   RQ   RR   R   RS   RT   R.   RU   (
   R   R"   RE   R:   R   R5   RV   RW   RH   R-   (    (    s3   /mit/python/lib/python2.6/bsddb/test/test_thread.pyRC   	  s*     

c   
      C   sû   d d  k  } | i d d j  o t ƒ  i ƒ  } n t ƒ  i } | i ƒ  } d } t i | i d d ƒ} xS | oK | d 7} | \ } }	 |  i	 |  i
 | ƒ |	 ƒ t i | i d d ƒ} ql Wt o d | | f GHn | i ƒ  t o d | GHn d  S(	   Niÿÿÿÿi    i   RO   i
   i   s   %s: found %d recordss   %s: thread finished(   R   R0   R   RP   R5   RX   R   RS   RY   R;   R.   RZ   R   R(   (
   R   R"   R[   R   R5   R]   RV   R^   R-   R_   (    (    s3   /mit/python/lib/python2.6/bsddb/test/test_thread.pyR=   $  s$     

(   R   R   R   R`   R&   Rb   t   DB_INIT_LOCKR   R:   R9   R7   R   Rj   RC   R=   (    (    (    s3   /mit/python/lib/python2.6/bsddb/test/test_thread.pyRg   Ë   s   			4	t   BTreeSimpleThreadedc           B   s   e  Z e i Z RS(    (   R   R   R   Rd   R%   (    (    (    s3   /mit/python/lib/python2.6/bsddb/test/test_thread.pyRl   ;  s   t   HashSimpleThreadedc           B   s   e  Z e i Z RS(    (   R   R   R   Rf   R%   (    (    (    s3   /mit/python/lib/python2.6/bsddb/test/test_thread.pyRm   ?  s   t   ThreadedTransactionsBasec           B   s‚   e  Z e i e i BZ e i e i Be i Be i Be i	 BZ
 d  Z d  Z d Z d  Z d „  Z d „  Z d „  Z d „  Z d „  Z RS(   i    iÐ  c         C   s   d  S(   N(    (   R   (    (    s3   /mit/python/lib/python2.6/bsddb/test/test_thread.pyR   S  s    c         C   sÑ  t  o  d Gd d GHd |  i i GHn t |  i ƒ } d d  k } | i | ƒ |  i |  i } |  i |  i } |  i	 |  i |  i | ƒ |  i	 |  i |  i | ƒ |  i
 | | d j ƒ g  } x‰ t |  i ƒ D]x } t d |  i d |  i | f d	 d
 | ƒ } d d  k } | i d d j  o | i t ƒ n
 t | _ | i | ƒ qÐ Wg  }	 x„ t |  i ƒ D]s } | | | | | d !}
 | | | | | d !} t d |  i d |  i |
 | f d	 d | ƒ } |	 i | ƒ qbWt d |  i ƒ } d d  k } | i d d j  o | i t ƒ n
 t | _ | i ƒ  xR |	 D]J } d d  k } | i d d j  o | i t ƒ n
 t | _ | i ƒ  q6Wx |	 D] } | i ƒ  q‹Wx | D] } | i ƒ  q¦Wt |  _ | i ƒ  d  S(   Ns   
s   -=i   s)   Running %s.test03_ThreadedTransactions...iÿÿÿÿi    R3   R4   R5   s	   reader %di   i   s	   writer %d(   R   R   R   R6   R7   R    R8   R9   R:   R;   R   R<   R   R=   R"   R   R0   R>   R?   R@   RA   RC   t   deadlockThreadRD   R,   t   Falset   doLockDetect(   R   RE   R    RF   RG   R:   RH   RI   R   R9   RJ   RK   RL   t   dtRM   (    (    s3   /mit/python/lib/python2.6/bsddb/test/test_thread.pyt   test03_ThreadedTransactionsW  sj     	 	
 	  	c      
   C   s}  d d  k  } | i d d j  o t ƒ  i ƒ  } n t ƒ  i } t | ƒ t | ƒ } xt | ƒ oÿ y¯ |  i i d  |  i	 ƒ } | |  } xb | D]Z }	 d |	 }
 | i
 |
 |  i |
 ƒ | ƒ t o' |	 d d j o d | t |	 f GHq‘ q‘ W| i ƒ  | | } | i ƒ  i ƒ  WqX t i t i f j
 o1 } t o d | | d f GHn | i ƒ  qX XqX Wt o d	 | GHn d  S(
   Niÿÿÿÿi    i   s   %04did   s   %s: records %d - %d finisheds   %s: Aborting transaction (%s)i   s   %s: thread finished(   R   R0   R   RP   R5   RR   R   t	   txn_beginR1   t   txnFlagRT   R.   R   RD   t   commitRU   R   t   DBLockDeadlockErrort   DBLockNotGrantedErrort   abort(   R   R"   RE   R:   R   R5   RV   t   txnt   keys2RH   R-   t   val(    (    s3   /mit/python/lib/python2.6/bsddb/test/test_thread.pyRC   •  s2     
 


c         C   s}  d d  k  } | i d d j  o t ƒ  i ƒ  } n t ƒ  i } t } x| py» |  i i d  |  i	 ƒ } | i
 | ƒ } d } | i ƒ  }	 xG |	 o? | d 7} |	 \ }
 } |  i |  i |
 ƒ | ƒ | i ƒ  }	 qŽ Wt o d | | f GHn | i ƒ  | i ƒ  t } WqH t i t i f j
 o; } t o d | | d f GHn | i ƒ  | i ƒ  qH XqH Wt o d | GHn d  S(   Niÿÿÿÿi    i   i   s   %s: found %d recordss   %s: Aborting transaction (%s)s   %s: thread finished(   R   R0   R   RP   R5   Rp   R   Rt   R1   Ru   RX   RY   R;   R.   RZ   R   R(   Rv   R?   R   Rw   Rx   Ry   (   R   R"   R[   R   R5   t   finishedRz   R]   RV   R^   R-   R_   R|   (    (    s3   /mit/python/lib/python2.6/bsddb/test/test_thread.pyR=   ±  s<      
 



c         C   s   t  |  _ xo |  i od t i d ƒ y: |  i i t i t i ƒ } t	 o | o d | GHn Wq t i
 j
 o q Xq Wd  S(   Ngš™™™™™©?s.   deadlock: Aborted %d deadlocked transaction(s)(   R?   Rq   t   timet   sleepR   t   lock_detectR   t   DB_LOCK_RANDOMt   DB_LOCK_CONFLICTR   t   DBError(   R   t   aborted(    (    s3   /mit/python/lib/python2.6/bsddb/test/test_thread.pyRo   Ñ  s    	 
	(   R   R   R   R`   t   DB_AUTO_COMMITR&   Rb   Rk   t   DB_INIT_LOGt   DB_INIT_TXNR   R:   R9   R7   Ru   R   Rs   RC   R=   Ro   (    (    (    s3   /mit/python/lib/python2.6/bsddb/test/test_thread.pyRn   F  s   
		>		 t   BTreeThreadedTransactionsc           B   s#   e  Z e i Z d  Z d Z d Z RS(   i   i
   iè  (   R   R   R   Rd   R%   R9   R:   R7   (    (    (    s3   /mit/python/lib/python2.6/bsddb/test/test_thread.pyRˆ   ß  s   	t   HashThreadedTransactionsc           B   s#   e  Z e i Z d  Z d Z d Z RS(   i   i
   iè  (   R   R   R   Rf   R%   R9   R:   R7   (    (    (    s3   /mit/python/lib/python2.6/bsddb/test/test_thread.pyR‰   å  s   	t   BTreeThreadedNoWaitTransactionsc           B   s,   e  Z e i Z d  Z d Z d Z e i Z	 RS(   i   i
   iè  (
   R   R   R   Rd   R%   R9   R:   R7   t   DB_TXN_NOWAITRu   (    (    (    s3   /mit/python/lib/python2.6/bsddb/test/test_thread.pyRŠ   ë  s
   	t   HashThreadedNoWaitTransactionsc           B   s,   e  Z e i Z d  Z d Z d Z e i Z	 RS(   i   i
   iè  (
   R   R   R   Rf   R%   R9   R:   R7   R‹   Ru   (    (    (    s3   /mit/python/lib/python2.6/bsddb/test/test_thread.pyRŒ   ò  s
   	c          C   sÐ   t  i ƒ  }  t o´ |  i t  i t ƒ ƒ |  i t  i t ƒ ƒ |  i t  i t ƒ ƒ |  i t  i t ƒ ƒ |  i t  i t	 ƒ ƒ |  i t  i t
 ƒ ƒ |  i t  i t ƒ ƒ |  i t  i t ƒ ƒ n d GH|  S(   Ns-   Threads not available, skipping thread tests.(   t   unittestt	   TestSuiteR	   t   addTestt	   makeSuiteRc   Re   Rl   Rm   Rˆ   R‰   RŠ   RŒ   (   t   suite(    (    s3   /mit/python/lib/python2.6/bsddb/test/test_thread.pyt
   test_suiteü  s    t   __main__t   defaultTestR’   ((   t   __doc__t   osR   R~   t   errnoR    R+   R   t	   NameErrort	   ExceptionR   t   test_allR   R   R   R   R	   R
   R   t	   threadingR   R0   R   R   t   TestCaseR   R2   Rc   Re   Rg   Rl   Rm   Rn   Rˆ   R‰   RŠ   RŒ   R’   R   t   main(    (    (    s3   /mit/python/lib/python2.6/bsddb/test/test_thread.pyt   <module>   sB   4)q	p™
	