Ñò
•à"Ic           @   sµ   d  Z  d d k Z d d k Z d d k Z d d k l Z l Z l Z l Z l	 Z	 l
 Z
 d e i f d „  ƒ  YZ d e f d „  ƒ  YZ d „  Z e d	 j o e i d
 d ƒ n d S(   s(   TestCases for distributed transactions.
iÿÿÿÿN(   t   dbt   test_supportt   have_threadst   verboset   get_new_environment_patht   get_new_database_patht   DBReplicationManagerc           B   sS   e  Z d  d k Z e i d  d
 j  o d d „ Z n d „  Z d „  Z d	 „  Z RS(   iÿÿÿÿNi   i   i   i    c         C   s   |  i  | d | ƒd  S(   Nt   msg(   t
   failUnless(   t   selft   exprR   (    (    s8   /mit/python/lib/python2.6/bsddb/test/test_replication.pyt
   assertTrue   s    c            s2  t  ƒ  ˆ  _ t  ƒ  ˆ  _ t i ƒ  ˆ  _ t i ƒ  ˆ  _ ˆ  i i ˆ  i t i t i	 Bt i
 Bt i Bt i Bt i Bt i Bt i Bd ƒ ˆ  i i ˆ  i t i t i	 Bt i
 Bt i Bt i Bt i Bt i Bt i Bd ƒ t ˆ  _ ˆ  _ ‡  f d †  } ‡  f d †  } ˆ  i i | ƒ ˆ  i i | ƒ d  ˆ  _ ˆ  _ d  S(   Ni¶  c            s!   | t  i j o t ˆ  _ n d  S(   N(   R    t   DB_EVENT_REP_MASTERt   Truet   confirmed_master(   t   at   bt   c(   R	   (    s8   /mit/python/lib/python2.6/bsddb/test/test_replication.pyR   &   s    c            s!   | t  i j o t ˆ  _ n d  S(   N(   R    t   DB_EVENT_REP_STARTUPDONER   t   client_startupdone(   R   R   R   (   R	   (    s8   /mit/python/lib/python2.6/bsddb/test/test_replication.pyR   *   s    (   R   t   homeDirMastert   homeDirClientR    t   DBEnvt   dbenvMastert   dbenvClientt   opent	   DB_CREATEt   DB_INIT_TXNt   DB_INIT_LOGt   DB_INIT_MPOOLt   DB_INIT_LOCKt   DB_INIT_REPt
   DB_RECOVERt	   DB_THREADt   FalseR   R   t   set_event_notifyt   Nonet   dbMastert   dbClient(   R	   R   R   (    (   R	   s8   /mit/python/lib/python2.6/bsddb/test/test_replication.pyt   setUp   s    >>c         C   st   |  i  o |  i  i ƒ  n |  i o |  i i ƒ  n |  i i ƒ  |  i i ƒ  t i |  i ƒ t i |  i ƒ d  S(   N(	   R&   t   closeR%   R   R   R   t   rmtreeR   R   (   R	   (    (    s8   /mit/python/lib/python2.6/bsddb/test/test_replication.pyt   tearDown9   s    

c   
      C   s)  t  i ƒ  } |  i i d | ƒ t  i ƒ  } |  i i d | ƒ |  i i d | ƒ |  i i d | ƒ |  i i d ƒ |  i i d ƒ |  i i d ƒ |  i i d ƒ |  i i t	 i
 d ƒ |  i i t	 i
 d ƒ |  i |  i i t	 i
 ƒ d ƒ |  i |  i i t	 i
 ƒ d ƒ |  i i t	 i d ƒ |  i i t	 i d ƒ |  i |  i i t	 i ƒ d ƒ |  i |  i i t	 i ƒ d ƒ |  i i t	 i d	 ƒ |  i i t	 i d
 ƒ |  i |  i i t	 i ƒ d	 ƒ |  i |  i i t	 i ƒ d
 ƒ |  i i t	 i ƒ |  i i t	 i ƒ |  i i d t	 i ƒ |  i i d t	 i ƒ |  i |  i i ƒ  d ƒ |  i |  i i ƒ  d ƒ |  i |  i i ƒ  d ƒ |  i |  i i ƒ  d ƒ |  i |  i i ƒ  t	 i ƒ |  i |  i i ƒ  t	 i ƒ d d  k } | i ƒ  d } x: | i ƒ  | j  o& |  i o |  i o | i d ƒ qïWd d  k } | i d j o | i d IJ| i d IJn |  i | i ƒ  | j  ƒ |  i i ƒ  } |  i t  | ƒ d ƒ |  i | d d d ƒ |  i | d d | ƒ |  i | d d t	 i! j p | d d t	 i" j ƒ |  i i ƒ  } |  i t  | ƒ d ƒ |  i | d d d ƒ |  i | d d | ƒ |  i | d d t	 i! j p | d d t	 i" j ƒ t	 i# ƒ  d j o/ |  i i$ d t	 i% ƒ } |  i d | j ƒ n t	 i& |  i ƒ |  _' |  i i( ƒ  } |  i' i) d t	 i* t	 i+ d d | ƒ| i, ƒ  d d  k } d d  k- } | i ƒ  d } xK | i ƒ  | j  o7 | i. i/ | i. i0 |  i1 d ƒ ƒ o | i d ƒ qRWt	 i& |  i ƒ |  _2 x t3 o• |  i i( ƒ  } y/ |  i2 i) d t	 i* d t	 i4 d d d | ƒWnE t	 i5 j
 o6 | i6 ƒ  |  i2 i7 ƒ  t	 i& |  i ƒ |  _2 qµn X| i, ƒ  PqµW|  i i( ƒ  } |  i' i8 d d d | ƒ| i, ƒ  d d  k } | i ƒ  d } d  }	 xt | i ƒ  | j  o` |	 d  j oS |  i i( ƒ  } |  i2 i: d d | ƒ}	 | i, ƒ  |	 d  j o | i d ƒ q©q©W|  i | i ƒ  | j  ƒ |  i d |	 ƒ |  i i( ƒ  } |  i' i; d d | ƒ| i, ƒ  | i ƒ  d } xt | i ƒ  | j  o` |	 d  j oS |  i i( ƒ  } |  i2 i: d d | ƒ}	 | i, ƒ  |	 d  j o | i d ƒ qˆqˆW|  i | i ƒ  | j  ƒ |  i d  |	 ƒ d  S(   Ns	   127.0.0.1i   i
   i    i‡ iá‡ iŠ‡ iPˆ iù‡ i¿ˆ i   iÿÿÿÿg{®Gáz”?t   win32s?   XXX - windows bsddb replication fails on windows and is skippeds   XXX - Please see issue #3892i   i   t   flagst   msgs_queuedt   testi¶  t   txng{®Gáz„?t   modet   ABCt   123(   i   i   (<   R   t   find_unused_portR   t   repmgr_set_local_siteR   t   repmgr_add_remote_sitet   rep_set_nsitest   rep_set_priorityt   rep_set_timeoutR    t   DB_REP_CONNECTION_RETRYt   assertEqualst   rep_get_timeoutt   DB_REP_ELECTION_TIMEOUTt   DB_REP_ELECTION_RETRYt   repmgr_set_ack_policyt   DB_REPMGR_ACKS_ALLt   repmgr_startt   DB_REP_MASTERt   DB_REP_CLIENTt   rep_get_nsitest   rep_get_priorityt   repmgr_get_ack_policyt   timeR   R   t   sleept   syst   platformt   stderrR   t   repmgr_site_listt   lent   DB_REPMGR_CONNECTEDt   DB_REPMGR_DISCONNECTEDt   versiont   repmgr_statt   DB_STAT_CLEARt   DBR%   t	   txn_beginR   t   DB_HASHR   t   committ   os.patht   patht   existst   joinR   R&   R   t	   DB_RDONLYt   DBRepHandleDeadErrort   abortR(   t   putR$   t   gett   delete(
   R	   t   master_portt   client_portRF   t   timeoutRH   t   dR/   t   ost   v(    (    s8   /mit/python/lib/python2.6/bsddb/test/test_replication.pyt   test01_basic_replicationC   sì    

 (%
 & 


  

  
(   i   i   i    (	   t   __name__t
   __module__RH   t   version_infoR$   R   R'   R*   Rf   (    (    (    s8   /mit/python/lib/python2.6/bsddb/test/test_replication.pyR      s   	%	
t   DBBaseReplicationc           B   sl   e  Z d  „  Z d „  Z d „  Z d „  Z e i ƒ  d	 j o d „  Z n e i ƒ  d
 j o d „  Z	 n RS(   c            så  t  i ˆ  ƒ ‡  f d †  } ‡  f d †  } ˆ  i i | ƒ ˆ  i i | ƒ d d  k } | i ƒ  ˆ  _ | i ƒ  ˆ  _ ‡  f d †  } ‡  f d †  } ˆ  i i d | ƒ ˆ  i i	 d ƒ ˆ  i i d | ƒ ˆ  i i	 d	 ƒ ˆ  i
 ˆ  i i ƒ  d ƒ ˆ  i
 ˆ  i i ƒ  d	 ƒ ‡  f d
 †  } ‡  f d †  } d d k l } | d | ƒ }	 | d | ƒ }
 d d  k } | i d	 d j  o |	 i t ƒ |
 i t ƒ n t |	 _ t |
 _ |	 ˆ  _ |
 ˆ  _ d  ˆ  _ ˆ  _ t g ˆ  _ t g ˆ  _ d  S(   Nc            s1   | t  i j p | t  i j o t ˆ  _ n d  S(   N(   R    R   t   DB_EVENT_REP_ELECTEDR   R   (   R   R   R   (   R	   (    s8   /mit/python/lib/python2.6/bsddb/test/test_replication.pyR   Ó   s     c            s!   | t  i j o t ˆ  _ n d  S(   N(   R    R   R   R   (   R   R   R   (   R	   (    s8   /mit/python/lib/python2.6/bsddb/test/test_replication.pyR   ×   s    iÿÿÿÿc            s   ˆ  i  i | | f ƒ d  S(   N(   t   m2cR]   (   t   dbenvt   controlt   rect   lsnpt   envidR,   (   R	   (    s8   /mit/python/lib/python2.6/bsddb/test/test_replication.pyRl   ä   s    c            s   ˆ  i  i | | f ƒ d  S(   N(   t   c2mR]   (   Rm   Rn   Ro   Rp   Rq   R,   (   R	   (    s8   /mit/python/lib/python2.6/bsddb/test/test_replication.pyRr   ç   s    i   i
   i   i    c              s"   ˆ  i  ˆ  i ˆ  i d ˆ  i t ƒ S(   Ni   (   t	   thread_doR   Rr   t   master_doing_electionR   (    (   R	   (    s8   /mit/python/lib/python2.6/bsddb/test/test_replication.pyt   thread_master÷   s    c              s"   ˆ  i  ˆ  i ˆ  i d ˆ  i t ƒ S(   Ni   (   Rs   R   Rl   t   client_doing_electionR"   (    (   R	   (    s8   /mit/python/lib/python2.6/bsddb/test/test_replication.pyt   thread_clientû   s    (   t   Threadt   target(   R   R'   R   R#   R   t   QueueRl   Rr   t   rep_set_transportR7   R:   RD   t	   threadingRx   RH   Ri   t	   setDaemonR   t   daemont   t_mt   t_cR$   R%   R&   R"   Rt   Rv   (   R	   R   R   Rz   Rl   Rr   Ru   Rw   Rx   R   R€   RH   (    (   R	   s8   /mit/python/lib/python2.6/bsddb/test/test_replication.pyR'   Ñ   s@    				c         C   s®   |  i  o |  i  i ƒ  n |  i o |  i i ƒ  n |  i i d  ƒ |  i i d  ƒ |  i i ƒ  |  i	 i ƒ  |  i
 i ƒ  |  i i ƒ  t i |  i ƒ t i |  i ƒ d  S(   N(   R&   R(   R%   Rl   R]   R$   Rr   R   RY   R€   R   R   R   R)   R   R   (   R	   (    (    s8   /mit/python/lib/python2.6/bsddb/test/test_replication.pyR*     s    

c         C   s\   |  i  i d t i ƒ |  i i d t i ƒ d „  } | |  _ |  i i ƒ  |  i	 i ƒ  d  S(   NR,   c         S   sL   xE t  o= | i ƒ  } | d  j o d  S|  i | d | d | ƒ q Wd  S(   Ni    i   (   R   R^   R$   t   rep_process_message(   t   envt   qRq   t   election_statust   must_be_masterRe   (    (    s8   /mit/python/lib/python2.6/bsddb/test/test_replication.pyRs   %  s      (
   R   t	   rep_startR    RA   R   RB   Rs   R   t   startR€   (   R	   Rs   (    (    s8   /mit/python/lib/python2.6/bsddb/test/test_replication.pyt   basic_rep_threading!  s    		c         C   sÑ  |  i  ƒ  d d  k } | i ƒ  d } x: | i ƒ  | j  o& |  i o |  i o | i d ƒ q) W|  i | i ƒ  | j  ƒ t i |  i ƒ |  _	 |  i i
 ƒ  } |  i	 i d t i t i d d | ƒ| i ƒ  d d  k } d d  k } | i ƒ  d } xK | i ƒ  | j  o7 | i i | i i |  i d ƒ ƒ o | i d ƒ qú Wt i |  i ƒ |  _ x t o• |  i i
 ƒ  } y/ |  i i d t i d t i d	 d d | ƒWnE t i j
 o6 | i ƒ  |  i i ƒ  t i |  i ƒ |  _ q]n X| i ƒ  Pq]W|  i i
 ƒ  } |  i	 i d
 d d | ƒ| i ƒ  d d  k } | i ƒ  d } d  } xt | i ƒ  | j  o` | d  j oS |  i i
 ƒ  } |  i i d
 d | ƒ} | i ƒ  | d  j o | i d ƒ qQqQW|  i | i ƒ  | j  ƒ |  i d | ƒ |  i i
 ƒ  } |  i	 i d
 d | ƒ| i ƒ  | i ƒ  d } xt | i ƒ  | j  o` | d  j oS |  i i
 ƒ  } |  i i d
 d | ƒ} | i ƒ  | d  j o | i d ƒ q0q0W|  i | i ƒ  | j  ƒ |  i d  | ƒ d  S(   Niÿÿÿÿi
   g{®Gáz”?R.   i¶  R/   g{®Gáz„?R,   R0   R1   R2   (    Rˆ   RF   R   R   RG   R   R    RR   R   R%   RS   R   RT   R   RU   RV   RW   RX   RY   R   R   R&   R   RZ   R[   R\   R(   R]   R$   R^   R:   R_   (   R	   RF   Rb   R/   Rd   Re   (    (    s8   /mit/python/lib/python2.6/bsddb/test/test_replication.pyRf   0  sx    
 %
 & 


  

  
i   i   c         C   se   |  i  ƒ  |  i i ƒ  \ } } |  i i | d | d ƒ |  i |  i i ƒ  | d | d f ƒ d  S(   Ni   (   Rˆ   R   t   rep_get_requestt   rep_set_requestt   assertEqual(   R	   t   minimumt   maximum(    (    s8   /mit/python/lib/python2.6/bsddb/test/test_replication.pyt   test02_test_requestt  s
    
i   c            sø   ˆ  i  i d t i ƒ ˆ  i i d t i ƒ ‡  f d †  } | ˆ  _ ˆ  i i ƒ  ˆ  i i ƒ  ˆ  i  i	 t i
 d ƒ ˆ  i i	 t i
 d ƒ t ˆ  i d <xJ t oB y% ˆ  i i d d ƒ t ˆ  i d <PWqš t i j
 o qš Xqš Wˆ  i ˆ  i ƒ d  S(   NR,   c            s1  x*t  o"| i ƒ  } | d  j o d  Sˆ i | d | d | ƒ } | o* ˆ i o  ˆ i i d t i ƒ t	 } n | d t i
 j ož ‡  ‡ f d †  } ˆ  d o| ˆ i oq d d k l } t  ˆ  d <| d | ƒ }	 d d  k }
 |
 i d d j  o |	 i t  ƒ n
 t  |	 _ |	 i ƒ  q(q q Wd  S(	   Ni    i   R,   c              sK   xD t  o< y ˆ i d d ƒ t ˆ  d <PWq t i j
 o q Xq Wd  S(   Ni   i   i    (   R   t	   rep_electR"   R    t   DBRepUnavailError(    (   R„   R‚   (    s8   /mit/python/lib/python2.6/bsddb/test/test_replication.pyt   electŒ  s     
iÿÿÿÿ(   Rx   Ry   i   (   R   R^   R$   R   R   R   R†   R    RA   R"   t   DB_REP_HOLDELECTIONR|   Rx   RH   Ri   R}   R~   R‡   (   R‚   Rƒ   Rq   R„   R…   Re   t   rR‘   Rx   t   tRH   (   R	   (   R„   R‚   s8   /mit/python/lib/python2.6/bsddb/test/test_replication.pyRs   ‚  s(      

	iPÃ  i    i   i   (   R   R†   R    RB   R   Rs   R   R‡   R€   R8   R<   R   Rv   R   R"   R   R   R   (   R	   Rs   (    (   R	   s8   /mit/python/lib/python2.6/bsddb/test/test_replication.pyt   test03_master_election|  s$    	 
(   i   i   (   i   i   (
   Rg   Rh   R'   R*   Rˆ   Rf   R    RO   RŽ   R•   (    (    (    s8   /mit/python/lib/python2.6/bsddb/test/test_replication.pyRj   Ð   s   	B			Cc          C   s¦   t  i ƒ  }  t i ƒ  d j oƒ t i ƒ  } y | i ƒ  t } Wn t } n X| i ƒ  ~ | o |  i	 t  i
 t ƒ ƒ n t o |  i	 t  i
 t ƒ ƒ q¢ n |  S(   Ni   i   (   i   i   (   t   unittestt	   TestSuiteR    RO   R   RE   R   R"   R(   t   addTestt	   makeSuiteR   R   Rj   (   t   suiteRm   t   ReplicationManager_available(    (    s8   /mit/python/lib/python2.6/bsddb/test/test_replication.pyt
   test_suite³  s    



t   __main__t   defaultTestRœ   (   t   __doc__Rd   RF   R–   t   test_allR    R   R   R   R   R   t   TestCaseR   Rj   Rœ   Rg   t   main(    (    (    s8   /mit/python/lib/python2.6/bsddb/test/test_replication.pyt   <module>   s   .Âã	