mς SγΈEc@sƒdZdkZdkZdklZdklZdklZdkl Z dk l Z l Z dkl Z dfd „ƒYZdS( syRun the version related tests for a storage. Any storage that supports versions should be able to pass all these tests. N(s Transaction(s POSException(s referencesf(sMinPO(s zodb_unpicklessnooze(sDBtVersionStoragecBsΡtZd„Zd„Zd„Zd„Zd„Zd„Zd„Zdd „Z d „Z d „Z d „Z d „Z d„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„ZRS(NcCsΉ|iiƒ}|i|dtdƒƒ}|i|d|dtdƒddƒ}|iddƒ}|i |g|ƒ|ii |dƒ\}}|i| | ƒ|i| | ƒdS(Ntdatai trevidi tversiont(tselft_storagetnew_oidtoidt_dostoretMinPOtrevid1trevid2t_commitVersiontoidst assertEqualtloadRtrevid3tassertNotEqual(RRR RRR R((t8/data/zmath/zope/lib/python/ZODB/tests/VersionStorage.pytcheckCommitVersionSerialno s c Cs_|iiƒ}|i|dtdƒƒ}|i|d|dtdƒddƒ}|ii|dƒ\}}}|i ||ƒ|i t |ƒtdƒƒ|idƒ}|i |g|ƒ|ii|dƒ\}}|i||ƒ|i||ƒ|ii|dƒ\}}}|i ||ƒ|i t |ƒtdƒƒ|i ||iiƒƒdS(NRi Ri RR(RRRRR R R R tloadExRttidtverRt zodb_unpicklet _abortVersionRRRRtlastTransaction( RRRR RR RRR((RtcheckAbortVersionSerialno,s  c Cs{|i} |iiƒ}|i|dtdƒƒ}|i|d|dtdƒƒ}d} |i|d|dtdƒd| ƒ}|i|d|dtdƒd| ƒ}|i|d|dtd ƒd| ƒ}|ii |d ƒ\}}| t|ƒtdƒƒ|ii || ƒ\}} | t|ƒtd ƒƒt|id ƒo,|ii|ƒ}| |t|| ƒƒn|ii|| ƒ\}}}| t|ƒtd ƒƒ| ||ƒ|ii|d ƒ\}}}| t|ƒtdƒƒ| ||ƒy`|ii||ƒ}| t|ƒtdƒƒ|ii||ƒ}| t|ƒtdƒƒWntij onXdS( NRi Ri s test-versioni RiiRt getSerials other version(RRteqRRRR R RR RR RRRtvrevidthasattrRtstmaxRRRt loadSerialt POSExceptiont Unsupported( RRRRR RR RR RRR((RtcheckVersionedStoreAndLoad?s> !     cCs·|iiƒ}d}|i|dtdƒƒ}|i|d|dtdƒd|ƒ}|it |ii |iiƒdƒ|ii |dƒ\}}|i t |ƒtdƒƒdS( Ns test-versionRi Ri RRtbogus(RRRRRR R Rt assertRaisestKeyErrorRRRR(RRRRR((RtcheckVersionedLoadErrorses   c CsŒ|iiƒ}|i|dtdƒƒ}d}|i|d|dtdƒd|ƒ}|it i |i|d|dtdƒddƒdS( NRi s test-versionRi Risanother-version( RRRRR R RRR'R#tVersionLockError(RRRR((RtcheckVersionLockss  cCsοd}|i|ii|ƒƒ|iiƒ}|i|dtdƒƒ}|i|d|dtdƒƒ}|i|d|dtdƒd|ƒ}|i|d|dtdƒd|ƒ}|i|ii|ƒ ƒ|i|iid ƒƒdS( Ns test-versionRi Ri i RiR&( RRt failUnlessRt versionEmptyRRR R R(RRRR((RtcheckVersionEmpty~s!  c Cs‘|i}|iiƒ}|iiƒ}|iiƒ}|i|dt dƒƒ}|i|dt dƒƒ}|i|dt dƒƒ}|i|d|dt dƒddƒ}|i|d|dt d ƒdd ƒ}|i|d|dt d ƒdd ƒ}|ii ƒ}|d|jƒ|d |jƒ|d |jƒ|ii d ƒ}|it|ƒd ƒ|d|jpd |jp d |jƒdS(NRi i i RiRtoneittwoitthreei(RR,tunlessRRtoid1toid2toid3R R R R RtversionsRtlen( RRR2R6R R3R4R R5((Rt checkVersionss(    s test-versioncCsλ|iiƒ}|i|dtdƒƒ}|i|d|dtdƒƒ}|i|d|dtdƒƒ}|i|d|dtdƒd|ƒ}|i|d|dtdƒd|ƒ}|i|d|dtd ƒd|ƒ}||fS( NRi1Ri2i3i4Ri5i6(RRRRR R RR(RRRR((Rt_setup_versionͺs!!   cCs†|i}|iƒ\}}|i|ƒ}|t|ƒdƒ||d|ƒ|i i |dƒ\}}|t |ƒtdƒƒdS(NiiRi3(RRRR9RRRRR7RRRRRR (RRRRRRR((RtcheckAbortVersionΉs c Cs­|iƒ\}}|i|ƒ|ii|dƒ\} }}|i |d|dt dƒƒ|ii ƒ}|ii||ƒ\}}}|i| |ƒ|i||ƒdS(NRRRi(RR9RRRRRRRRR R Rtltidt loadBeforetncdatatncstarttendR( RR;RR=RR?RRR>R((RtcheckAbortVersionNonCurrentΘs c Cs|i}|iƒ\}}tƒ}|ii |ƒt |idƒo3|ii ƒo#|i t i|iid|ƒn|ii||ƒ\}}|ii|ƒ|ii|ƒ|t|ƒdƒ||d|ƒ|ii|dƒ\}}|t|ƒtdƒƒdS(NtsupportsTransactionalUndoRiii3(RRRR9RRt TransactionttRt tpc_beginRRAR'R#t VersionErrort abortVersionRRttpc_votet tpc_finishR7RRRRR ( RRRRRRRCRR((RtcheckAbortVersionErrorsΦs  #  cCsΤt|idƒo |iiƒpdSn|i}|idƒ\}}|ii ||ƒ\}}|t |ƒt dƒƒtƒ}|ii|ƒz&|iti|iidd|ƒWd|ii|ƒXdS(NRAR/i6(RRRRARRR9R3tversion1RRR RR RBRCRDR'R#tVersionCommitErrort commitVersiont tpc_abort(RRJRR3R RRC((RtcheckCommitVersionErrorsνs#    cCs­|iƒ\}}|ii||ƒ\}}|ii|dƒ\}}d}|i ||ƒ|ii||ƒ\}}|i ||jo ||jd|||fƒdS(NRstest version 2sUNew tid, %r, should be different from the old version, %r, and non-version, %r, tids.( RR9RRRRRtvtidtntidtversion2R RR,(RRORQRRRRPR((Rt&checkNewSerialOnCommitVersionToVersionώscCsλ|i}|iƒ\}}|i|ƒ|ii|dƒ\}}|i |d|dt dƒƒ}|i |d|dt dƒƒ}|i |d|dt dƒƒ}|ii|dƒ\}}|||ƒ|t|ƒt dƒƒdS(NRRRi4i5i6(RRRR9RRRRRRRR R tnewrevidR(RRRRRRSR((RtcheckModifyAfterAbortVersion s  !!! cCsΛ|i}|iƒ\}}|ii||ƒ\}}|t |ƒt dƒƒ|ii|dƒ\}}|t |ƒt dƒƒ|i |dƒ|ii|dƒ\}}|t |ƒt dƒƒdS(Ni6Ri3( RRRR9RRRRRRRR R (RRRRRR((RtcheckCommitToNonVersions c CsA|i}|idƒ\}}|ii||ƒ\} }|t | ƒt dƒƒ|idƒ\}}|ii||ƒ\} }|t | ƒt dƒƒ|ii||ƒ\} }|t | ƒt dƒƒ|ii||ƒ\} }|t | ƒt dƒƒ|ii|dƒ\} }|t | ƒt dƒƒ|i||ƒ} |t| ƒdƒ|| d|ƒ|ii||ƒ\} }|t | ƒt dƒƒ|ii||ƒ\} }|t | ƒt dƒƒ|ii||ƒ\} }|t | ƒt dƒƒ|ii|dƒ\} }|t | ƒt dƒƒdS( NR/i6R0i3Riis bela lugosi(RRRR9R3RJRRRR RR R4RQR R RR7R( RRJRQRR R3R4R RRR((RtcheckCommitToOtherVersion$s0 c CsJ|i}|idƒ\}}|ii||ƒ\} }|t | ƒt dƒƒ|idƒ\}}|ii||ƒ\} }|t | ƒt dƒƒ|ii||ƒ\} }|t | ƒt dƒƒ|i|ƒ} |t| ƒdƒ|| d|ƒ|ii|dƒ\} } |t | ƒt dƒƒ|ii|dƒ\} } |t | ƒt dƒƒ|ii|dƒ\} } |t | ƒt dƒƒ|ii|dƒ\} } |t | ƒt dƒƒ|ii||ƒ\} } |t | ƒt dƒƒ|i|dƒ} |t| ƒdƒ|| d|ƒ|ii|dƒ\} } |t | ƒt dƒƒ|ii|dƒ\} } |t | ƒt dƒƒ|ii||ƒ\} } |t | ƒt dƒƒ|iiƒ}|i|d| d t dƒd dƒ} |it|ii|dƒ|it|ii|dƒdS( NR/i6R0i3iiRRRR(RRRR9R3RJRRRR RR R4RQR RRR7RR RRR R'R(( RRRJRQRR R3R4R RRR((Rt"checkAbortOneVersionCommitTheOtherHsJ '  cCsΧ|iiƒ}|i|ddddƒ}|i|d|ddddƒ}|i|d|ddddƒ}tƒ}|ii|ƒ|ii d|ƒ\}}|ii |ƒ|ii |ƒ|i||gƒdS(NRiRR/Rii"(RRRRR RRBRCRDRFRRRGRHR(RRRRRCR((Rt#checkCreateObjectInVersionWithAbortxs!! cCs–t|iƒ}|iddƒ}|iƒ}tdƒ}|d                       c Csjt|iƒ}|iƒ}|iƒ} d }x(|D] } t | ƒ| |