From da1d326bf9bcb36584e80fc63888ba502394ea12 Mon Sep 17 00:00:00 2001 From: Jim Fulton <jim@zope.com> Date: Tue, 10 Apr 2001 23:09:21 +0000 Subject: [PATCH] Changed to use undoInfo. --- src/ZODB/tests/TransactionalUndoStorage.py | 58 ++++++++++++++-------- 1 file changed, 36 insertions(+), 22 deletions(-) diff --git a/src/ZODB/tests/TransactionalUndoStorage.py b/src/ZODB/tests/TransactionalUndoStorage.py index 7c6c1d3b..6a67aa35 100644 --- a/src/ZODB/tests/TransactionalUndoStorage.py +++ b/src/ZODB/tests/TransactionalUndoStorage.py @@ -1,17 +1,22 @@ import BasicStorage, pickle from ZODB import POSException +ZERO = '\0'*8 -class UndoStorage(BasicStorage.BasicStorage): +class TransactionalUndoStorage(BasicStorage.BasicStorage): def checkSimpleTransactionalUndo(self): oid = self._storage.new_oid() revid = self._dostore(oid, data=23) revid = self._dostore(oid, revid=revid, data=24) revid = self._dostore(oid, revid=revid, data=25) + + info =self._storage.undoInfo() + tid = info[0]['id'] # Now start an undo transaction + self._transaction.note('undo1') self._storage.tpc_begin(self._transaction) - oids = self._storage.transactionalUndo(revid, self._transaction) + oids = self._storage.transactionalUndo(tid, self._transaction) self._storage.tpc_vote(self._transaction) self._storage.tpc_finish(self._transaction) assert len(oids) == 1 @@ -19,8 +24,11 @@ class UndoStorage(BasicStorage.BasicStorage): data, revid = self._storage.load(oid, '') assert pickle.loads(data) == 24 # Do another one + info =self._storage.undoInfo() + tid = info[2]['id'] + self._transaction.note('undo2') self._storage.tpc_begin(self._transaction) - oids = self._storage.transactionalUndo(revid, self._transaction) + oids = self._storage.transactionalUndo(tid, self._transaction) self._storage.tpc_vote(self._transaction) self._storage.tpc_finish(self._transaction) assert len(oids) == 1 @@ -28,26 +36,24 @@ class UndoStorage(BasicStorage.BasicStorage): data, revid = self._storage.load(oid, '') assert pickle.loads(data) == 23 # Try to undo the first record + info =self._storage.undoInfo() + tid = info[4]['id'] + self._transaction.note('undo3') self._storage.tpc_begin(self._transaction) - oids = self._storage.transactionalUndo(revid, self._transaction) + oids = self._storage.transactionalUndo(tid, self._transaction) self._storage.tpc_vote(self._transaction) self._storage.tpc_finish(self._transaction) + assert len(oids) == 1 assert oids[0] == oid # This should fail since we've undone the object's creation self.assertRaises(KeyError, self._storage.load, oid, '') - # But it's really a more specific type of error - import Full - self.assertRaises(Full.ObjectDoesNotExist, - self._storage.load, oid, '') # And now let's try to redo the object's creation - try: - self._storage.load(oid, '') - except Full.ObjectDoesNotExist, e: - revid = e.revid + info =self._storage.undoInfo() + tid = info[0]['id'] self._storage.tpc_begin(self._transaction) - oids = self._storage.transactionalUndo(revid, self._transaction) + oids = self._storage.transactionalUndo(tid, self._transaction) self._storage.tpc_vote(self._transaction) self._storage.tpc_finish(self._transaction) assert len(oids) == 1 @@ -83,8 +89,10 @@ class UndoStorage(BasicStorage.BasicStorage): data, revid2 = self._storage.load(oid2, '') assert pickle.loads(data) == 52 # Now attempt to undo the transaction containing two objects + info =self._storage.undoInfo() + tid = info[0]['id'] self._storage.tpc_begin(self._transaction) - oids = self._storage.transactionalUndo(revid1, self._transaction) + oids = self._storage.transactionalUndo(tid, self._transaction) self._storage.tpc_vote(self._transaction) self._storage.tpc_finish(self._transaction) assert len(oids) == 2 @@ -94,7 +102,7 @@ class UndoStorage(BasicStorage.BasicStorage): data, revid2 = self._storage.load(oid2, '') assert pickle.loads(data) == 51 - def checkTwoObjectUndoAgain(self): + def _checkTwoObjectUndoAgain(self): p32, p33, p52, p53 = map(pickle.dumps, (32, 33, 52, 53)) # Like the above, but the first revision of the objects are stored in # different transactions. @@ -111,8 +119,10 @@ class UndoStorage(BasicStorage.BasicStorage): self._storage.tpc_finish(self._transaction) assert revid1 == revid2 # Now attempt to undo the transaction containing two objects + info =self._storage.undoInfo() + tid = info[0]['id'] self._storage.tpc_begin(self._transaction) - oids = self._storage.transactionalUndo(revid1, self._transaction) + oids = self._storage.transactionalUndo(tid, self._transaction) self._storage.tpc_vote(self._transaction) self._storage.tpc_finish(self._transaction) assert len(oids) == 2 @@ -134,8 +144,10 @@ class UndoStorage(BasicStorage.BasicStorage): revid1 = self._dostore(oid1, revid=revid1, data=34) revid2 = self._dostore(oid2, revid=revid2, data=54) # Now attempt to undo the transaction containing two objects + info =self._storage.undoInfo() + tid = info[1]['id'] self._storage.tpc_begin(self._transaction) - oids = self._storage.transactionalUndo(revid1, self._transaction) + oids = self._storage.transactionalUndo(tid, self._transaction) self._storage.tpc_vote(self._transaction) self._storage.tpc_finish(self._transaction) assert len(oids) == 1 @@ -152,10 +164,12 @@ class UndoStorage(BasicStorage.BasicStorage): revid_b = self._dostore(oid, revid=revid_a, data=52) revid_c = self._dostore(oid, revid=revid_b, data=53) # Start the undo + info =self._storage.undoInfo() + tid = info[1]['id'] self._storage.tpc_begin(self._transaction) self.assertRaises(POSException.UndoError, self._storage.transactionalUndo, - revid_b, self._transaction) + tid, self._transaction) self._storage.tpc_abort(self._transaction) # Now have more fun: object1 and object2 are in the same transaction, # which we'll try to undo to, but one of them has since modified in @@ -165,6 +179,7 @@ class UndoStorage(BasicStorage.BasicStorage): oid2 = self._storage.new_oid() revid2 = ZERO p81, p82, p91, p92 = map(pickle.dumps, (81, 82, 91, 92)) + self._storage.tpc_begin(self._transaction) revid1 = self._storage.store(oid1, revid1, p81, '', self._transaction) revid2 = self._storage.store(oid2, revid2, p91, '', self._transaction) @@ -180,11 +195,10 @@ class UndoStorage(BasicStorage.BasicStorage): # Now modify oid2 revid2 = self._dostore(oid2, revid=revid2, data=p92) assert revid1 <> revid2 and revid2 <> revid_22 + info =self._storage.undoInfo() + tid = info[1]['id'] self._storage.tpc_begin(self._transaction) self.assertRaises(POSException.UndoError, self._storage.transactionalUndo, - revid1, self._transaction) - self.assertRaises(POSException.UndoError, - self._storage.transactionalUndo, - revid_22, self._transaction) + tid, self._transaction) self._storage.tpc_abort(self._transaction) -- 2.30.9