ó
¦xxTc           @   sì   d  Z  d d l Z d d l Z d d l m Z m Z m Z m Z m Z m	 Z	 e r§ d d l
 m Z d d l Z e j d d k  r” d d l
 m Z q§ d d l
 m Z n  d	 e j f d
 „  ƒ  YZ d „  Z e d k rè e j d d ƒ n  d S(   s/   
TestCases for testing the locking sub-system.
iÿÿÿÿN(   t   dbt   test_supportt   verboset   have_threadst   get_new_environment_patht   get_new_database_path(   t   Threadi    i   (   t   currentThread(   t   current_threadt   LockingTestCasec           B   s>   e  Z d  „  Z d „  Z d „  Z d „  Z d „  Z d „  Z RS(   c         C   sM   t  ƒ  |  _ t j ƒ  |  _ |  j j |  j t j t j Bt j Bt j	 Bƒ d  S(   N(
   R   t   homeDirR    t   DBEnvt   envt   opent	   DB_THREADt   DB_INIT_MPOOLt   DB_INIT_LOCKt	   DB_CREATE(   t   self(    (    s@   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/bsddb/test/test_lock.pyt   setUp   s    c         C   s!   |  j  j ƒ  t j |  j ƒ d  S(   N(   R   t   closeR   t   rmtreeR
   (   R   (    (    s@   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/bsddb/test/test_lock.pyt   tearDown   s    c         C   s©   t  r% d Gd d GHd |  j j GHn  |  j j ƒ  } t  rF d | GHn  |  j j | d t j ƒ } t  rs d | GHn  |  j j | ƒ t  r• d | GHn  |  j j	 | ƒ d  S(	   Ns   
s   -=i   s   Running %s.test01_simple...s   locker ID: %ss   some locked things   Aquired lock: %ss   Released lock: %s(
   R   t	   __class__t   __name__R   t   lock_idt   lock_getR    t   DB_LOCK_WRITEt   lock_putt   lock_id_free(   R   t   anIDt   lock(    (    s@   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/bsddb/test/test_lock.pyt   test01_simple"   s    c         C   só  t  r% d Gd d GHd |  j j GHn  g  } | j t d |  j d t j f ƒ ƒ | j t d |  j d t j f ƒ ƒ | j t d |  j d t j f ƒ ƒ | j t d |  j d t j f ƒ ƒ | j t d |  j d t j f ƒ ƒ | j t d |  j d t j f ƒ ƒ | j t d |  j d t j f ƒ ƒ | j t d |  j d t j f ƒ ƒ | j t d |  j d t j f ƒ ƒ xP | D]H } d d  l	 } | j
 d d	 k  r´| j t ƒ n	 t | _ | j ƒ  qWx | D] } | j ƒ  qÒWd
 „  } d  S(   Ns   
s   -=i   s   Running %s.test02_threaded...t   targett   argsiÿÿÿÿi    i   c         S   sØ   |  j  j d t j ƒ |  j |  j  j t j ƒ d ƒ |  j  j d t j ƒ |  j |  j  j t j ƒ d ƒ |  j  j d t j ƒ |  j |  j  j t j ƒ d ƒ |  j  j d t j ƒ |  j |  j  j t j ƒ d ƒ d  S(   Ni    i@â iËdx (   R   t   set_timeoutR    t   DB_SET_LOCK_TIMEOUTt   assertEqualt   get_timeoutt   DB_SET_TXN_TIMEOUT(   R   (    (    s@   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/bsddb/test/test_lock.pyt   test03_lock_timeoutV   s    (   R   R   R   t   appendR   t	   theThreadR    R   t   DB_LOCK_READt   syst   version_infot	   setDaemont   Truet   daemont   startt   join(   R   t   threadst   tR,   R(   (    (    s@   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/bsddb/test/test_lock.pyt   test02_threaded3   s>    	c            sò  ˆ j  j d t j ƒ ˆ j  j d t j ƒ ˆ j  j d t j ƒ ˆ j  j d t j ƒ ‡  ‡ f d †  ‰  t ˆ  _ d ˆ  _ t d ˆ  ƒ } d d  l	 } | j
 d d k  rº | j t ƒ n	 t | _ | j ƒ  ˆ j  j d t j ƒ ˆ j  j ƒ  } ˆ j  j ƒ  } ˆ j | | ƒ ˆ j  j | d	 t j ƒ } t j ƒ  } ˆ j t j ˆ j  j | d	 t j ƒ t j ƒ  } t ˆ  _ ˆ j | | d
 k ƒ ˆ j  j | ƒ | j ƒ  ˆ j  j | ƒ ˆ j  j | ƒ t j ƒ  d k rîˆ j ˆ  j d k ƒ n  d  S(   Ni    i@â iËdx c              sV   xO ˆ  j  sQ ˆ j j t j ƒ ˆ  _ ˆ  j rA x ˆ  j  s< q0 WPn  t j d ƒ q Wd  S(   Ng{®Gáz„?(   t   endR   t   lock_detectR    t   DB_LOCK_EXPIREt   countt   timet   sleep(    (   t   deadlock_detectionR   (    s@   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/bsddb/test/test_lock.pyR<   f   s    	R!   iÿÿÿÿi   i † s   shared lockg‰ÒÞà“¹?i   i   (   i   i   (   R   R#   R    R$   R'   t   FalseR6   R9   R   R,   R-   R.   R/   R0   R1   R   t   assertNotEqualR   R   R:   t   assertRaisest   DBLockNotGrantedErrorR+   t
   assertTrueR   R2   R   t   version(   R   R4   R,   R   t   anID2R   t
   start_timet   end_time(    (   R<   R   s@   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/bsddb/test/test_lock.pyt   test04_lock_timeout2`   s<    
			
	
c         C   s  d d  l  } | j d d k  r1 t ƒ  j ƒ  } n t ƒ  j } | t j k rU d } n d } |  j j ƒ  } t	 r‚ d | | f GHn  xr t
 d ƒ D]d } |  j j | d | ƒ } t	 rÈ d	 | | | f GHn  |  j j | ƒ t	 r� d
 | | | f GHq� q� W|  j j | ƒ d  S(   Niÿÿÿÿi    i   t   writet   reads   %s: locker ID: %siè  s   some locked things   %s: Aquired %s lock: %ss   %s: Released %s lock: %s(   R,   R-   R   t   getNamet   nameR    R   R   R   R   t   xrangeR   R   R   (   R   t   lockTypeR,   RJ   t   ltR   t   iR   (    (    s@   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/bsddb/test/test_lock.pyR*   Ž   s$    	(   R   t
   __module__R   R   R    R5   RF   R*   (    (    (    s@   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/bsddb/test/test_lock.pyR	      s   				-	.c          C   sH   t  j ƒ  }  t r+ |  j t  j t ƒ ƒ n |  j t  j t d ƒ ƒ |  S(   Nt   test01(   t   unittestt	   TestSuiteR   t   addTestt	   makeSuiteR	   (   t   suite(    (    s@   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/bsddb/test/test_lock.pyt
   test_suite¬   s
    t   __main__t   defaultTestRV   (   t   __doc__R:   RQ   t   test_allR    R   R   R   R   R   t	   threadingR   R,   R-   R   R   t   TestCaseR	   RV   R   t   main(    (    (    s@   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/bsddb/test/test_lock.pyt   <module>   s   .—	