mς SγΈEc@s dZdkZdkZdkZdkZdkZdkZdkZdkZdk l Z dk Zdk l Z dkZdeifd„ƒYZd„ZdS(s*Tests of the file storage recovery script.N(s FileStorage(sPersistentMappingt RecoverTestcBs}tZdZdZd„Zd„Zd„Zd„ZdZ d„Z d„Z d „Z d „Z d „Zd „Zd „ZRS(NicCsStiddƒ|_t|iƒ|_|iƒtiddƒ|_d|_ dS(Ntsuffixs.fs( ttempfiletmktemptselftpatht FileStoragetstoragetpopulatetdesttNonet recovered(R((t5/data/zmath/zope/lib/python/ZODB/tests/testRecover.pytsetUp%s  cCsb|iiƒ|idj o|iiƒn|iiƒt|iƒ}|iƒ|iƒdS(N( RRtcloseR R tcleanupRR ttemp(RR((R ttearDown,s   cCsti|iƒ}|iƒ}|iƒ}x^t dƒD]P}t ƒ}||RA((R t testNoDamageds      cCs•xŽt|iƒD]}}|iddƒ|iƒ}|id|j|ƒt|i ƒ|_ |i i ƒt i |iƒt i|i |iƒqWdS(NiiR<(RRt ITERATIONSRR+R6R>R?RR R RtostremoveRtrename(RRR>((R t testOneBlockus  cCs•xŽt|iƒD]}}|iddƒ|iƒ}|id|j|ƒt|i ƒ|_ |i i ƒt i |iƒt i|i |iƒqWdS(NiiR<(RRRHRR+R6R>R?RR R RRIRJRRK(RRR>((R ttestFourBlockss  cCs™x’t|iƒD]}|idddƒ|iƒ}|id|j|ƒt|i ƒ|_ |i i ƒt i |iƒt i|i |iƒqWdS(Nii iR<(RRRHRR+R6R>R?RR R RRIRJRRK(RRR>((R t testBigBlock‰s  cCs°|iiƒ}|d}ti|ddƒ}|ii|dƒ}|d}ti|ddƒ}|ii|dƒ}|ii ƒt |i dƒ}|i|dƒ|idd ƒ|i ƒ|iƒ}|id |j|ƒt|iƒ|_|ii ƒti|i ƒti|i|i ƒt |i dƒ}|i|d ƒ|idd ƒ|i ƒ|iƒ}|id |j|ƒt|iƒ|_|ii ƒdS( Nitids iisa+bi2R!idR<i (RRtundoLogtLtrtbase64t decodestringttidt _txn_findtpos1tpos2RRRR(R)R*R6R>R?RR R RIRJRK(RR(RQRRRUR>RXRW((R ttestBadTransaction“s4        cCsο|iiƒ}|d}ti|ddƒ}|ii|dƒ}t |i dƒ}|i |dƒ|idƒ}|i|dƒ|i |dƒ|idƒ|iƒ|iƒ|iti i|iƒ|ƒtitiiƒdS( NiROs isr+bit tc(RRRPRQRRRSRTRURVtposRRR(R)RBtcurrent_statusRFR*RR6RItgetsizeR RJRR5t_trname(RR(RQR]R\RRRU((R ttestUncommittedAtEndΊs    (t__name__t __module__tlevelR RR RRR+RHR6RGRLRMRNRYR`(((R Rs     'cCs titƒS(N(tunittestt makeSuiteR(((R t test_suiteΦs(t__doc__RSRIR#R0RRdR3RtZODB.FileStorageRtZODB.fsrecovertpersistent.mappingRRtTestCaseRRf( RSRR3RRdR#RR0RRRfRIR((R t?s            ·