ó n®¸Qc@sÉdZddlZddlZddlZddlmZmZmZmZm Z m Z dej fd„ƒYZ de fd„ƒYZ de fd „ƒYZd „Zed krÅejd d ƒndS(s(TestCases for distributed transactions. iÿÿÿÿN(tdbt test_supportt have_threadstverbosetget_new_environment_pathtget_new_database_patht DBReplicationcBseZd„Zd„ZRS(cs2tƒˆ_tƒˆ_tjƒˆ_tjƒˆ_ˆjjˆjtjtj Btj Btj Btj Btj BtjBtjBdƒˆjjˆjtjtj Btj Btj Btj Btj BtjBtjBdƒtˆ_ˆ_‡fd†}‡fd†}ˆjj|ƒˆjj|ƒdˆ_ˆ_dS(Ni¶cs|tjkrtˆ_ndS(N(RtDB_EVENT_REP_MASTERtTruetconfirmed_master(tatbtc(tself(s1/sys/lib/python2.7/bsddb/test/test_replication.pyR !scs|tjkrtˆ_ndS(N(RtDB_EVENT_REP_STARTUPDONERtclient_startupdone(R R R (R (s1/sys/lib/python2.7/bsddb/test/test_replication.pyR%s(Rt homeDirMastert homeDirClientRtDBEnvt dbenvMastert dbenvClienttopent DB_CREATEt DB_INIT_TXNt DB_INIT_LOGt DB_INIT_MPOOLt DB_INIT_LOCKt DB_INIT_REPt DB_RECOVERt DB_THREADtFalseR Rtset_event_notifytNonetdbMastertdbClient(R R R((R s1/sys/lib/python2.7/bsddb/test/test_replication.pytsetUps  >>cCs™|jr|jjƒn|jr2|jjƒnd„}|jj|ƒ|jj|ƒ|jjƒ|jjƒtj|jƒtj|j ƒdS(NcWsdS(N((targs((s1/sys/lib/python2.7/bsddb/test/test_replication.pytdummy=s( R"tcloseR!RRRRtrmtreeRR(R R%((s1/sys/lib/python2.7/bsddb/test/test_replication.pyttearDown4s     (t__name__t __module__R#R((((s1/sys/lib/python2.7/bsddb/test/test_replication.pyRs %tDBReplicationManagercBseZd„ZRS(cCs$ tjƒ}tjƒ}tjƒdkr#|jjd|ƒ|_|jjtjt ƒ|jjtj t ƒ|jjd|ƒ|_ |j jd|ƒ|_ |j jtjt ƒ|j jd|ƒ|_|jjtj t ƒittt tgtj6t tttgtj6ttttgtj6t ttt gtj 6ttttgtj6}x‡|jƒD]y\}}xjt|j|j |j |jg|ƒD]A\}}|rÂ|j|j|ƒƒq—|j|j|ƒƒq—WqcW|j|jjƒ|j jƒƒ|j|j jƒ|jjƒƒxct|j|j |j |jg||||gƒD].\}}|jƒ}|j|d|fƒqXWxH|j|j gD]4}|j|jƒ|jj|jƒƒjƒƒqWx·|j |jgD]4}|j|jƒ|j j|jƒƒjƒƒqèWnl|jjd|ƒ|j jd|ƒ|jjd|ƒ|j jd|ƒ|jjdƒ|j jdƒ|jj dƒ|j j dƒ|jj!tj"dƒ|j j!tj"dƒ|j|jj#tj"ƒdƒ|j|j j#tj"ƒdƒ|jj!tj$dƒ|j j!tj$d ƒ|j|jj#tj$ƒdƒ|j|j j#tj$ƒd ƒ|jj!tj%d ƒ|j j!tj%d ƒ|j|jj#tj%ƒd ƒ|j|j j#tj%ƒd ƒ|jj&tj'ƒ|j j&tj'ƒ|jj(d tj)ƒ|j j(d tj*ƒ|j|jj+ƒdƒ|j|j j+ƒdƒ|j|jj,ƒdƒ|j|j j,ƒdƒ|j|jj-ƒtj'ƒ|j|j j-ƒtj'ƒd dl.} | j.ƒd} x6| j.ƒ| kr/|j/o|j0 r/| j1dƒqúW| j.ƒ| krdd dl2} | j3dIJt } n|jj4ƒ}|jt5|ƒd ƒ|j6ƒd}|j|ddƒ|j|d |ƒ|j|dtj7kpê|dtj8kƒ|j j4ƒ}|jt5|ƒd ƒ|j6ƒd}|j|ddƒ|j|d |ƒ|j|dtj7kpt|dtj8kƒtjƒdkr¸|jj9dtj:ƒ}|jd|kƒntj;|jƒ|_<|jj=ƒ} |j<j>dtj?tj@dd| ƒ| jAƒd dl.} d dlB}| j.ƒd} xH| j.ƒ| kr}|jCjD|jCjE|jFdƒƒ r}| j1dƒq6Wtj;|j ƒ|_Gx™t r. |j j=ƒ} y/|jGj>dtj?dtjHddd| ƒWnCtjIk r | jJƒ|jGjKƒtj;|j ƒ|_Gq–nX| jAƒPq–W|jj=ƒ} |j<jLddd| ƒ| jAƒd dl.} | j.ƒd} d}xo| j.ƒ| krô |dkrô |j j=ƒ} |jGjNdd| ƒ}| jAƒ|dkr† | j1dƒq† q† W| j.ƒ| kr | r |jOdƒn|j| j.ƒ| kƒ|jd|ƒ|jj=ƒ} |j<jPdd| ƒ| jAƒ| j.ƒd} xo| j.ƒ| krö |dk rö |j j=ƒ} |jGjNdd| ƒ}| jAƒ|dkrˆ | j1dƒqˆ qˆ W|j| j.ƒ| kƒ|jd|ƒdS(Niis 127.0.0.1i ii‡iá‡iŠ‡iPˆiù‡i¿ˆiiÿÿÿÿi<gz®Gáz”?sBXXX: timeout happened beforestartup was confirmed - see issue 3892iitflagst msgs_queuedttesti¶ttxngz®Gáz„?tmodetABCt123s>replication test skipped due to random failure, see issue 3892(ii(ii(QRtfind_unused_portRtversionRt repmgr_sitetsitet set_configtDB_GROUP_CREATORRt DB_LOCAL_SITEtsite2Rtsite3tDB_BOOTSTRAP_HELPERtsite4Rt DB_LEGACYtDB_REPMGR_PEERtitemstzipt assertTruet get_configt assertFalsetassertNotEqualtget_eidt get_addresst assertEqualtrepmgr_site_by_eidtrepmgr_set_local_sitetrepmgr_add_remote_sitetrep_set_nsitestrep_set_prioritytrep_set_timeouttDB_REP_CONNECTION_RETRYtrep_get_timeouttDB_REP_ELECTION_TIMEOUTtDB_REP_ELECTION_RETRYtrepmgr_set_ack_policytDB_REPMGR_ACKS_ALLt repmgr_startt DB_REP_MASTERt DB_REP_CLIENTtrep_get_nsitestrep_get_prioritytrepmgr_get_ack_policyttimeR Rtsleeptsyststderrtrepmgr_site_listtlentvaluestDB_REPMGR_CONNECTEDtDB_REPMGR_DISCONNECTEDt repmgr_statt DB_STAT_CLEARtDBR!t txn_beginRtDB_HASHRtcommittos.pathtpathtexiststjoinRR"t DB_RDONLYtDBRepHandleDeadErrortabortR&tputR tgettskipTesttdelete(R t master_portt client_porttdtitjtktvtaddrR[ttimeoutR]tstartup_timeoutR/tos((s1/sys/lib/python2.7/bsddb/test/test_replication.pyttest01_basic_replicationHs(  1""! #&   (   % %      !   !  (R)R*R€(((s1/sys/lib/python2.7/bsddb/test/test_replication.pyR+GstDBBaseReplicationcBs†eZd„Zd„Zd„Zd„Zejƒd krHd„Znejƒd krfd„Z nejƒd kr„d „Z nRS( c sãtjˆƒ‡fd†}‡fd†}ˆjj|ƒˆjj|ƒddl}|jƒˆ_|jƒˆ_‡fd†}‡fd†}ˆjjd|ƒˆjj dƒˆjjd|ƒˆjj d ƒˆj ˆjj ƒdƒˆj ˆjj ƒd ƒ‡fd †}‡fd †}dd l m }|d |ƒ} |d |ƒ} ddl} | jd dkr“| jtƒ| jtƒnt| _t| _| ˆ_| ˆ_dˆ_ˆ_tgˆ_tgˆ_dS(Ncs.|tjks|tjkr*tˆ_ndS(N(RRtDB_EVENT_REP_ELECTEDRR (R R R (R (s1/sys/lib/python2.7/bsddb/test/test_replication.pyR scs|tjkrtˆ_ndS(N(RRRR(R R R (R (s1/sys/lib/python2.7/bsddb/test/test_replication.pyRsiÿÿÿÿcsˆjj||fƒdS(N(tm2cRq(tdbenvtcontroltrectlsnptenvidR,(R (s1/sys/lib/python2.7/bsddb/test/test_replication.pyRƒscsˆjj||fƒdS(N(tc2mRq(R„R…R†R‡RˆR,(R (s1/sys/lib/python2.7/bsddb/test/test_replication.pyR‰!si i iics"ˆjˆjˆjdˆjtƒS(Ni(t thread_doRR‰tmaster_doing_electionR((R (s1/sys/lib/python2.7/bsddb/test/test_replication.pyt thread_master1scs"ˆjˆjˆjdˆjtƒS(Ni (RŠRRƒtclient_doing_electionR((R (s1/sys/lib/python2.7/bsddb/test/test_replication.pyt thread_client5s(tThreadttarget(RR#RRRtQueueRƒR‰trep_set_transportRMRHRYt threadingRR]t version_infot setDaemonRtdaemontt_mtt_cR R!R"RR‹R( R R RR‘RƒR‰RŒRŽRR—R˜R]((R s1/sys/lib/python2.7/bsddb/test/test_replication.pyR# s@         cCsù|jr|jjƒn|jr2|jjƒn|jjdƒ|jjdƒ|jjƒ|j jƒd„}|j j |ƒ|j j |ƒ|j j d|ƒ|j j d|ƒ|j jƒ|j jƒtj|jƒtj|jƒdS(NcWsdS(N((R$((s1/sys/lib/python2.7/bsddb/test/test_replication.pyR%Zsi i(R"R&R!RƒRqR R‰R—RmR˜RRRR’RR'RR(R R%((s1/sys/lib/python2.7/bsddb/test/test_replication.pyR(Ms"       cCs\|jjdtjƒ|jjdtjƒd„}||_|jjƒ|j jƒdS(NR,cSsHxAtrC|jƒ}|dkr%dS|j|d|d|ƒqWdS(Nii(RRrR trep_process_message(tenvtqRˆtelection_statustmust_be_masterR{((s1/sys/lib/python2.7/bsddb/test/test_replication.pyRŠjs    ( Rt rep_startRRVRRWRŠR—tstartR˜(R RŠ((s1/sys/lib/python2.7/bsddb/test/test_replication.pytbasic_rep_threadingfs    c Csç|jƒddl}|jƒd}x6|jƒ|kr^|joJ|j r^|jdƒq)W|j|jƒ|kƒtj|jƒ|_ |jj ƒ}|j j dtj tj dd|ƒ|jƒddl}ddl}|jƒd}xH|jƒ|kr=|jj|jj|jdƒƒ r=|jdƒqöWtj|jƒ|_x™trî|jj ƒ}y/|jj dtj d tjd dd|ƒWnCtjk rß|jƒ|jjƒtj|jƒ|_qVnX|jƒPqVW|jjd tjƒ}|jd |kƒ|jj ƒ}|j jd d d|ƒ|jƒddl}|jƒd}d}xo|jƒ|krß|dkrß|jj ƒ}|jjd d|ƒ}|jƒ|dkrq|jdƒqqqqW|j|jƒ|kƒ|j d |ƒ|jj ƒ}|j j!d d|ƒ|jƒ|jƒd}xo|jƒ|kr¹|dk r¹|jj ƒ}|jjd d|ƒ}|jƒ|dkrK|jdƒqKqKW|j|jƒ|kƒ|j d|ƒdS(Niÿÿÿÿi<gz®Gáz”?R.i¶R/i gz®Gáz„?R,R0tmaster_changesR1R2("R R[R RR\RBRRfRR!RgRRhRRiRjRkRlRmRRR"RRnRoRpR&trep_statReRqR RrRHRt(R R[R}R/RRwR{((s1/sys/lib/python2.7/bsddb/test/test_replication.pyR€usr   % %      !   !  iicCse|jƒ|jjƒ\}}|jj|d|dƒ|j|jjƒ|d|dfƒdS(Ni(R Rtrep_get_requesttrep_set_requestRH(R tminimumtmaximum((s1/sys/lib/python2.7/bsddb/test/test_replication.pyttest02_test_request¼s  icsˆjjdtjƒˆjjdtjƒ‡fd†}|ˆ_ˆjjƒˆjjƒˆjj tj dƒˆjj tj dƒt ˆj dqXqWdS(Niii(Rt rep_electRRtDBRepUnavailError((RœRš(s1/sys/lib/python2.7/bsddb/test/test_replication.pytelectÔs  iÿÿÿÿ(RRi(RRrR R™R RRžRRVRtDB_REP_HOLDELECTIONR“RR]R”R•R–RŸ( RšR›RˆRœRR{trRªRttR](R (RœRšs1/sys/lib/python2.7/bsddb/test/test_replication.pyRŠÊs&       iPÃiiitstartup_complete(RRžRRWRRŠR—RŸR˜RNRQRRR¨RR©RBR R¢(R RŠ((R s1/sys/lib/python2.7/bsddb/test/test_replication.pyttest03_master_electionÄs&      cCsLd\}}|jj||ƒ|j||f|jjƒƒ|jƒdS(NiÒiÎ(iÒiÎ(Rtrep_set_clockskewRHtrep_get_clockskewR (R tfasttslow((s1/sys/lib/python2.7/bsddb/test/test_replication.pyttest04_test_clockskews  (ii(ii(ii( R)R*R#R(R R€RR4R§R¯R´(((s1/sys/lib/python2.7/bsddb/test/test_replication.pyR s B   F  <cCs tjƒ}tjƒdkrœtjƒ}y|jƒt}Wn t}nX|jƒ~|rz|j tj t ƒƒnt rœ|j tj t ƒƒqœn|S(Nii(ii(tunittestt TestSuiteRR4RRZRRR&taddTestt makeSuiteR+RR(tsuiteR„tReplicationManager_available((s1/sys/lib/python2.7/bsddb/test/test_replication.pyt test_suite s      t__main__t defaultTestR»(t__doc__RR[Rµttest_allRRRRRRtTestCaseRR+RR»R)tmain(((s1/sys/lib/python2.7/bsddb/test/test_replication.pyts   .9Ãÿ