m๒ LใธEc @sๅdZdkZdkZdkZdkZdkZdkZdkZdkZdk Z dk Z dk l Z dk lZdklZlZlZlZlZlZlZlZlZlZlZdklZdklZdkZ dk!l"Z"l#Z#l$Z$l%Z%dk&Z ei'dƒZ(d fd „ƒYZ)d e i*fd „ƒYZ+d fd„ƒYZ,d„Z-deieieiei.eieie$i/e%i%e,f d„ƒYZ0de0e#i1e#i2e$i3ei4ei5ei6eieieieif d„ƒYZ7de7fd„ƒYZ8de0fd„ƒYZ9de i:i;i<fd„ƒYZ=de i:i;i<fd„ƒYZ>de i:i;i<fd„ƒYZ?defd„ƒYZ@e+e8e9e@e=e>e?gZAd „ZBeCd!joe iDd"d#ƒndS($s'Test suite for ZEO based on ZODB.tests.N(sMinPO(s zodb_unpickle( sStorageTestBases BasicStoragesVersionStoragesTransactionalUndoStoragesTransactionalUndoVersionStoragesPackableStoragesSynchronizationsConflictResolutionsRevisionStorages MTStoragesReadOnlyStorage(sDemoStorageWrappedBase(s ClientStorage(sforkersCachesCommitLockTestss ThreadTestssZEO.tests.testZEOtDummyDBcBstZd„ZRS(NcGsdS(N((tselftargs((t0/data/zmath/zope/lib/python/ZEO/tests/testZEO.pyt invalidate3s(t__name__t __module__R(((RR2st OneTimeTestscBstZd„ZRS(NcCs#dk}|iti|iƒdS(N(tZEORt assertEqualtZODBt __version__tversion(RR((RtcheckZEOVersionNumber8s (RRR (((RR6st MiscZEOTestscBs tZdZd„Zd„ZRS(s&ZEO tests that don't fit in elsewhere.cCs,tddddƒ}|id|ƒdS(NtXi i€itdata(tMinPOtobjRt_dostore(RR((RtcheckLargeUpdateAsc CsB|ii}t|ddddƒ}z |iiƒ}tdƒ}|i |d|ƒ}|i |dƒ\} }|it| ƒtdƒƒ|i||ƒ|i |dtdƒd |ƒ}xptd ƒD]V}tidƒ|i |dƒ\} }||jot| ƒtdƒjoPqษqษWtd ƒ‚Wd|iƒXdS( Ntwaititmin_disconnect_pollf0.10000000000000001tfirstRttsecondtrevidis"Invalidation message was not sent!(Rt_storaget_addrtaddrt ClientStoragetstorage2tnew_oidtoidRtobRtrevid1tloadRtserialR t zodb_unpickletrevid2trangetnttimetsleeptAssertionErrortclose( RRR!R'R"R#R)R%RR((RtcheckZEOInvalidationEs&  !  & (RRt__doc__RR.(((RR>s  cCs—x„tdƒD]v}tiddƒ}tititiƒ}z8y|i d|fƒWnti j o |SnXWd|i ƒXq Wt dƒ‚dS(sษReturn a port that is not in use. Checks if a port is in use by trying to connect to it. Assumes it is not in use if connect raises an exception. Raises RuntimeError after 10 tries. i i Ni0ut localhostNsCan't find port( R(titrandomt randrangetporttsockettAF_INETt SOCK_STREAMtstconnectterrorR-t RuntimeError(R1R8R4((Rtget_port`s  t GenericTestscBs>tZdZd„Zd„Zdd„Zd„Zd„ZRS(s0Combine tests from various origins in one class.c Csภtid|iƒƒtƒ}tid|fƒ}ti |i ƒ||ƒ\}}}}|g|_|g|_||_t|ddddddd d d ƒ|_|iitƒdƒdS( Ns setUp() %sRt1t cache_sizei-1Rf0.5Rit wait_timeouti<(tloggertinfoRtidR<R4tforkert ZEOConfigtzconftstart_zeo_servert getConfigtzportt adminaddrtpidtpatht_pidst_serverst _conf_pathRRt registerDBRtNone(RRFRIRJRKRLR4((RtsetUp‡s     cCsz|iiƒti|iƒx|iD]}ti |ƒq'Wt tdƒo(x%|i D]}ti |dƒqXWndS(Ntwaitpidi(RRR-tostremoveRORNtserverRDtshutdown_zeo_serverthasattrRMRKRS(RRKRV((RttearDown•s   icCs8|ii}|iiƒt|d|ddƒ|_dS(Nt read_onlyRi(RRRRR-RRZ(RRZR((RtopenŸs  cCs(ttdƒotii|ƒndS(NR (RXR tReadOnlyStoragetcheckWriteMethodsR(R((RR]ฆscCs9d|ii|iif}|i|iiƒ|ƒdS(Ns%s:%s(RRt _server_addrtkeyR tsortKey(RR_((Rt checkSortKeyฐs(RRR/RRRYR[R]Ra(((RR=us    tFullGenericTestscBstZdZRS(s>Extend GenericTests with tests that MappingStorage can't pass.(RRR/(((RRbดs tFileStorageTestscBstZdZdZd„ZRS(s!Test ZEO backed by a FileStorage.icCstiƒ}|_d|S(NsG path %s (ttempfiletmktemptfilenameRt_FileStorageTests__fs_base(RRf((RRHวs(RRR/tlevelRH(((RRcรs tMappingStorageTestscBstZdZd„ZRS(s ZEO backed by a Mapping storage.cCsdS(Ns((R((RRHาs(RRR/RH(((RRiฯs tHeartbeatTestscBs;tZdZd„Zd„Zd„Zd„Zd„ZRS(s๚Make sure a heartbeat is being sent and that it does no harm This is really hard to test properly because we can't see the data flow between the client and server and we can't really tell what's going on in the server very well. :( cCsNtiii|_dtii_tiiiiƒtii i i |ƒdS(Nf0.10000000000000001( Rtzrpct connectiontclient_timeoutRt#_HeartbeatTests__old_client_timeouttclient_triggert pull_triggertteststConnectionTeststCommonSetupTearDownRR(R((RRR฿scCs?|itii_tiiiiƒtii i i |ƒdS(N( RRnRRkRlRmRoRpRqRrRsRY(R((RRYๆscCsdS(Ns((RRLtcreateRZ((RRH๋scCs฿tiii}|iƒ|_tidƒ|i tiii|jƒ|i ƒt t dƒo+t i |idtiƒd|id((RRLRtRZ((RRHscs>|iƒ|_dfd„ƒY}g‰‡d†tiii_ |ƒtiii d#sf0.10000000000000001iisThe ZEO cient loop failed.texc_infosCouldn't close a dispatcher.(RRwRR€RƒRRkRlt client_loggertcriticalt client_mapRQRoRptDisconnectedErrorR*R+tfailIfR|R tlenRx(RRƒR€((RƒRt"checkCatastrophicClientLoopFailures" (RRR/RHR(((RRs  t!ConnectionInvalidationOnReconnectcBs tZdZd„Zd„ZRS(s6Test what happens when the client loop falls over cCsdS(Ns((RRLRtRZ((RRH;scCst|iddddƒ}||_x?tdƒD]%}|iƒoPnti dƒq1Wt dƒ‚dfd„ƒY}|ƒ}|i |dƒ|i}|iiƒx?tdƒD]%}|iƒoPnti dƒqตWt dƒ‚|i|i|dƒdS( NRiRf0.10000000000000001idsCouldn't connect to serverRcBs tZdZd„Zd„ZRS(NicCs|id7_dS(Ni(Rt_invalidatedCache(R((RtinvalidateCacheMscOsdS(N((R†tk((RROs(RRR’R“R(((RRKs (RRRtstorageRR(R1R|R*R+R,RtdbRPRQR’tbaset _connectionR-R (RR1R–R•R—R((Rt&checkConnectionInvalidationOnReconnect>s(          (RRR/RHR™(((RR‘6s  t%DemoStorageWrappedAroundClientStoragecBs#tZd„Zd„Zd„ZRS(NcCsdS(Ns((R((RRHhsc Csบtid|iƒƒtƒ}tid|fƒ}ti |i ƒ||ƒ\}}}}|g|_|g|_||_t|ddddddd d d ƒ}|itƒdƒ|S( Ns setUp() %sRR>R?i-1Rf0.5RiR@i<(RARBRRCR<R4RDRERFRGRHRIRJRKRLRMRNRORt_baseRPRRQ(RRFRIRJRKR›RLR4((Rt_makeBaseStorageks      cCszti|ƒti|iƒx|iD]}ti |ƒq'Wt tdƒo(x%|i D]}ti |dƒqXWndS(NRSi(tDemoStorageWrappedBaseRYRRTRURORNRVRDRWRXRMRKRS(RRKRV((RRYzs   (RRRHRœRY(((RRšfs  cCs@tiƒ}x-tD]%}ti|dƒ}|i|ƒqW|S(Ntcheck(tunittestt TestSuitetsuitet test_classestklasst makeSuitetsubtaddTest(RกRฅRฃ((Rt test_suiteŽs  t__main__t defaultTestRง(ER/tasyncoretloggingRTR2RyR5RdR*RŸR tZODB.tests.MinPORtZODB.tests.StorageTestBaseR&t ZODB.teststStorageTestBaset BasicStoragetVersionStoragetTransactionalUndoStoragetTransactionalUndoVersionStoragetPackableStoragetSynchronizationtConflictResolutiontRevisionStoraget MTStorageR\tZODB.tests.testDemoStorageRtZEO.ClientStorageRtZEO.zrpc.connectionRt ZEO.testsRDtCachetCommitLockTestst ThreadTeststZEO.tests.ConnectionTestst getLoggerRARtTestCaseRRR<tSynchronizedStoragetCommitLockVoteTestsR=tStorageWithCachetTransUndoStorageWithCachetCommitLockUndoTeststConflictResolvingStoraget!ConflictResolvingTransUndoStoragetPackableUndoStorageRbRcRiRqRrRsRjRR‘RšRขRงRtmain(-R=RชRŸR2RฐRiRดRRjRถRทRRฒRdRbRธRตR<RR&RRฝRพRฑRDRฏRcR‘RงRARRซR5R\RRšRyRฟRRRณR RขR*RT((Rt?sF            I    " F?R <$0