Commit f4587a70 authored by Dmitry Vasiliev's avatar Dmitry Vasiliev

Added tests for fsdump()

parent 40a7a145
...@@ -25,12 +25,13 @@ def fsdump(path, file=None, with_offset=1): ...@@ -25,12 +25,13 @@ def fsdump(path, file=None, with_offset=1):
for i, trans in enumerate(iter): for i, trans in enumerate(iter):
if with_offset: if with_offset:
print >> file, "Trans #%05d tid=%016x time=%s offset=%d" % \ 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: else:
print >> file, "Trans #%05d tid=%016x time=%s" % \ print >> file, "Trans #%05d tid=%016x time=%s" % \
(i, u64(trans.tid), str(TimeStamp(trans.tid))) (i, u64(trans.tid), TimeStamp(trans.tid))
print >> file, "\tstatus=%s user=%s description=%s" % \ print >> file, " status=%r user=%r description=%r" % \
(`trans.status`, trans.user, trans.description) (trans.status, trans.user, trans.description)
for j, rec in enumerate(trans): for j, rec in enumerate(trans):
if rec.data is None: if rec.data is None:
fullclass = "undo or abort of object creation" fullclass = "undo or abort of object creation"
...@@ -39,24 +40,21 @@ def fsdump(path, file=None, with_offset=1): ...@@ -39,24 +40,21 @@ def fsdump(path, file=None, with_offset=1):
modname, classname = get_pickle_metadata(rec.data) modname, classname = get_pickle_metadata(rec.data)
size = " size=%d" % len(rec.data) size = " size=%d" % len(rec.data)
fullclass = "%s.%s" % (modname, classname) 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: if rec.version:
version = " version=%s" % rec.version version = " version=%r" % rec.version
else: else:
version = "" version = ""
if rec.data_txn: if rec.data_txn:
# XXX It would be nice to print the transaction number # XXX It would be nice to print the transaction number
# (i) but it would be too expensive to keep track of. # (i) but it would be too expensive to keep track of.
bp = " bp=%016x" % u64(rec.data_txn) bp = " bp=%016x" % u64(rec.data_txn)
else: else:
bp = "" bp = ""
print >> file, " data #%05d oid=%016x%s%s class=%s%s" % \ print >> file, " data #%05d oid=%016x%s%s class=%s%s" % \
(j, u64(rec.oid), version, size, fullclass, bp) (j, u64(rec.oid), version, size, fullclass, bp)
print >> file
iter.close() iter.close()
def fmt(p64): def fmt(p64):
......
##############################################################################
#
# 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()
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment