[Zope3-checkins] CVS: ZODB4/src/zodb/storage/tests - undo.py:1.16.6.1

Jeremy Hylton jeremy@zope.com
Thu, 19 Jun 2003 15:09:32 -0400


Update of /cvs-repository/ZODB4/src/zodb/storage/tests
In directory cvs.zope.org:/tmp/cvs-serv26582/storage/tests

Modified Files:
      Tag: ZODB3-2-merge
	undo.py 
Log Message:
Add a new test that combines pack and undoLog().

Put them in the undo tests, because every storage implements pack() but
some don't have a useful undoLog().


=== ZODB4/src/zodb/storage/tests/undo.py 1.16 => 1.16.6.1 ===
--- ZODB4/src/zodb/storage/tests/undo.py:1.16	Fri May 16 17:36:57 2003
+++ ZODB4/src/zodb/storage/tests/undo.py	Thu Jun 19 15:09:31 2003
@@ -766,3 +766,76 @@
                 break
         else:
             self.fail('transaction not found')
+
+    def testPackUndoLog(self):
+        self._initroot()
+        eq = self.assertEqual
+        raises = self.assertRaises
+        # Create a `persistent' object
+        obj = self._newobj()
+        obj.value = 1
+        oid = obj._p_oid
+        # Commit two different revisions
+        revid1 = self._dostore(oid, data=obj)
+        obj.value = 2
+        snooze()
+        packtime = time.time()
+        snooze()
+        revid2 = self._dostore(oid, revid=revid1, data=obj)
+        # Now pack the first transaction
+        self.assertEqual(3, len(self._storage.undoLog()))
+        self._storage.pack(packtime)
+        # The undo log contains only the most resent transaction
+        self.assertEqual(1, len(self._storage.undoLog()))
+
+    def dont_testPackUndoLogUndoable(self):
+        # XXX This test was copied from ZODB3, but no effort was made
+        # to convert the code to make it work in ZODB4.
+        
+        # A disabled test. I wanted to test that the content of the
+        # undo log was consistent, but every storage appears to
+        # include something slightly different. If the result of this
+        # method is only used to fill a GUI then this difference
+        # doesnt matter.  Perhaps re-enable this test once we agree
+        # what should be asserted.
+
+        self._initroot()
+        # Create two `persistent' object
+        obj1 = self._newobj()
+        oid1 = obj1.getoid()
+        obj1.value = 1
+        obj2 = self._newobj()
+        oid2 = obj2.getoid()
+        obj2.value = 2
+        
+        # Commit the first revision of each of them
+        revid11 = self._dostoreNP(oid1, data=pickle.dumps(obj1),
+                                  description="1-1")
+        revid22 = self._dostoreNP(oid2, data=pickle.dumps(obj2),
+                                  description="2-2")
+        
+        # remember the time. everything above here will be packed away
+        snooze()
+        packtime = time.time()
+        snooze()
+        # Commit two revisions of the first object
+        obj1.value = 3
+        revid13 = self._dostoreNP(oid1, revid=revid11,
+                                  data=pickle.dumps(obj1), description="1-3")
+        obj1.value = 4
+        revid14 = self._dostoreNP(oid1, revid=revid13,
+                                  data=pickle.dumps(obj1), description="1-4")
+        # Commit one revision of the second object
+        obj2.value = 5
+        revid25 = self._dostoreNP(oid2, revid=revid22,
+                                  data=pickle.dumps(obj2), description="2-5")
+        # Now pack
+        self.assertEqual(6,len(self._storage.undoLog()))
+        print '\ninitial undoLog was'
+        for r in self._storage.undoLog(): print r
+        self._storage.pack(packtime, referencesf)
+        # The undo log contains only two undoable transaction.
+        print '\nafter packing undoLog was'
+        for r in self._storage.undoLog(): print r
+        # what can we assert about that?
+