[Zodb-checkins] SVN: ZODB/trunk/src/ZODB/ Added tests for fsdump()

Dmitry Vasiliev dima at hlabs.spb.ru
Fri Feb 4 09:30:16 EST 2005


Log message for revision 29034:
  Added tests for fsdump()
  

Changed:
  U   ZODB/trunk/src/ZODB/FileStorage/fsdump.py
  A   ZODB/trunk/src/ZODB/tests/test_fsdump.py

-=-
Modified: ZODB/trunk/src/ZODB/FileStorage/fsdump.py
===================================================================
--- ZODB/trunk/src/ZODB/FileStorage/fsdump.py	2005-02-04 13:13:33 UTC (rev 29033)
+++ ZODB/trunk/src/ZODB/FileStorage/fsdump.py	2005-02-04 14:30:16 UTC (rev 29034)
@@ -25,12 +25,13 @@
     for i, trans in enumerate(iter):
         if with_offset:
             print >> file, "Trans #%05d tid=%016x time=%s offset=%d" % \
-                  (i, u64(trans.tid), str(TimeStamp(trans.tid)), trans._pos)
+                  (i, u64(trans.tid), TimeStamp(trans.tid), trans._pos)
         else:
             print >> file, "Trans #%05d tid=%016x time=%s" % \
-                  (i, u64(trans.tid), str(TimeStamp(trans.tid)))
-        print >> file, "\tstatus=%s user=%s description=%s" % \
-              (`trans.status`, trans.user, trans.description)
+                  (i, u64(trans.tid), TimeStamp(trans.tid))
+        print >> file, "    status=%r user=%r description=%r" % \
+              (trans.status, trans.user, trans.description)
+
         for j, rec in enumerate(trans):
             if rec.data is None:
                 fullclass = "undo or abort of object creation"
@@ -39,24 +40,21 @@
                 modname, classname = get_pickle_metadata(rec.data)
                 size = " size=%d" % len(rec.data)
                 fullclass = "%s.%s" % (modname, classname)
-                # FIXME: Is this used?
-                # special case for testing purposes
-                if fullclass == "ZODB.tests.MinPO.MinPO":
-                    obj = zodb_unpickle(rec.data)
-                    fullclass = "%s %s" % (fullclass, obj.value)
+
             if rec.version:
-                version = " version=%s" % rec.version
+                version = " version=%r" % rec.version
             else:
                 version = ""
+
             if rec.data_txn:
                 # XXX It would be nice to print the transaction number
                 # (i) but it would be too expensive to keep track of.
                 bp = " bp=%016x" % u64(rec.data_txn)
             else:
                 bp = ""
+
             print >> file, "  data #%05d oid=%016x%s%s class=%s%s" % \
                   (j, u64(rec.oid), version, size, fullclass, bp)
-        print >> file
     iter.close()
 
 def fmt(p64):

Added: ZODB/trunk/src/ZODB/tests/test_fsdump.py
===================================================================
--- ZODB/trunk/src/ZODB/tests/test_fsdump.py	2005-02-04 13:13:33 UTC (rev 29033)
+++ ZODB/trunk/src/ZODB/tests/test_fsdump.py	2005-02-04 14:30:16 UTC (rev 29034)
@@ -0,0 +1,78 @@
+##############################################################################
+#
+# Copyright (c) 2005 Zope Corporation and Contributors.
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.1 (ZPL).  A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+
+r"""
+fsdump test
+===========
+
+Let's get a temp file path to work with first.
+
+>>> import tempfile
+>>> path = tempfile.mktemp('.fs', 'Data')
+>>> print 'path:', path #doctest: +ELLIPSIS
+path: ...Data...fs
+
+More imports.
+
+>>> import ZODB
+>>> from ZODB.FileStorage import FileStorage
+>>> import transaction as txn
+>>> from BTrees.OOBTree import OOBTree
+>>> from ZODB.FileStorage.fsdump import fsdump  # we're testing this
+
+Create an empty FileStorage.
+
+>>> st = FileStorage(path)
+
+For empty DB fsdump() output definitely empty:
+
+>>> fsdump(path)
+
+Create a root object and try again:
+
+>>> db = ZODB.DB(st) # yes, that creates a root object!
+>>> fsdump(path) #doctest: +ELLIPSIS
+Trans #00000 tid=... time=... offset=52
+    status=' ' user='' description='initial database creation'
+  data #00000 oid=0000000000000000 size=66 class=persistent.mapping.PersistentMapping
+
+Now we see first transaction with root object.
+
+Let's add a BTree:
+
+>>> root = db.open().root()
+>>> root['tree'] = OOBTree()
+>>> txn.get().note('added an OOBTree')
+>>> txn.get().commit()
+>>> fsdump(path) #doctest: +ELLIPSIS
+Trans #00000 tid=... time=... offset=52
+    status=' ' user='' description='initial database creation'
+  data #00000 oid=0000000000000000 size=66 class=persistent.mapping.PersistentMapping
+Trans #00001 tid=... time=... offset=207
+    status=' ' user='' description='added an OOBTree'
+  data #00000 oid=0000000000000000 size=114 class=persistent.mapping.PersistentMapping
+  data #00001 oid=0000000000000001 size=30 class=BTrees._OOBTree.OOBTree
+
+Now we see two transactions and two changed objects.
+
+Clean up.
+
+>>> st.close()
+>>> st.cleanup() # remove .fs, .index, etc
+"""
+
+from zope.testing import doctest
+
+def test_suite():
+    return doctest.DocTestSuite()



More information about the Zodb-checkins mailing list