[Zodb-checkins] CVS: Zope/lib/python/ZODB/tests - test_cache.py:1.3
Jeremy Hylton
jeremy at zope.com
Tue Mar 2 13:29:59 EST 2004
Update of /cvs-repository/Zope/lib/python/ZODB/tests
In directory cvs.zope.org:/tmp/cvs-serv3807
Modified Files:
test_cache.py
Log Message:
Add test for abort().
Remove unittest boilerplate.
=== Zope/lib/python/ZODB/tests/test_cache.py 1.2 => 1.3 ===
--- Zope/lib/python/ZODB/tests/test_cache.py:1.2 Tue Mar 2 11:43:58 2004
+++ Zope/lib/python/ZODB/tests/test_cache.py Tue Mar 2 13:29:58 2004
@@ -11,32 +11,9 @@
# FOR A PARTICULAR PURPOSE.
#
##############################################################################
-"""Test behavior of Connection plus cPickleCache.
-
-Methods involved:
-get()
-add()
-cacheFullSweep()
-cacheMinimize()
-invalidate()
-
-Other:
-resetCache()
-
-cache internal issues:
-cache gets full
-when incrgc is called
-gc
-
-Need to cover various transaction boundaries:
-commit
-abort
-sub-transaction commit / abort
--- can provide our own txn implementation
-"""
+"""Test behavior of Connection plus cPickleCache."""
import doctest
-import unittest
from persistent import Persistent
from ZODB.config import databaseFromString
@@ -62,11 +39,18 @@
self.__class__.invalidations += 1
super(RegularObject, self)._p_invalidate()
-class CacheTests(unittest.TestCase):
+ def init(cls):
+ cls.deactivations = 0
+ cls.invalidations = 0
+
+ init = classmethod(init)
+
+class CacheTests:
def test_cache(self):
r"""Test basic cache methods.
-
+
+ >>> RegularObject.init()
>>> db = databaseFromString("<zodb>\n"
... "cache-size 4\n"
... "<mappingstorage/>\n"
@@ -168,6 +152,43 @@
>>> [o._p_state for o in L]
[0, 0, 0, 0, 0]
"""
+
+ def test_cache_on_abort(self):
+ r"""Test that the cache handles transaction abort correctly.
+
+ >>> RegularObject.init()
+ >>> db = databaseFromString("<zodb>\n"
+ ... "cache-size 4\n"
+ ... "<mappingstorage/>\n"
+ ... "</zodb>")
+ >>> cn = db.open()
+ >>> r = cn.root()
+ >>> L = []
+ >>> for i in range(5):
+ ... o = RegularObject()
+ ... L.append(o)
+ ... r[i] = o
+ >>> get_transaction().commit()
+ >>> RegularObject.deactivations
+ 1
+
+ Modify three of the objects and verify that they are
+ deactivated when the transaction aborts.
+
+ >>> for i in range(0, 5, 2):
+ ... L[i].attr = i
+ >>> [L[i]._p_state for i in range(0, 5, 2)]
+ [1, 1, 1]
+ >>> cn._cache.ringlen()
+ 5
+
+ >>> get_transaction().abort()
+ >>> cn._cache.ringlen()
+ 2
+ >>> RegularObject.deactivations
+ 4
+ """
+
def test_suite():
return doctest.DocTestSuite()
More information about the Zodb-checkins
mailing list