[Zope-Checkins] CVS: Zope/lib/python/ZODB/tests - testCache.py:1.13.10.7

Tim Peters tim.one at comcast.net
Mon Jun 7 18:46:49 EDT 2004


Update of /cvs-repository/Zope/lib/python/ZODB/tests
In directory cvs.zope.org:/tmp/cvs-serv24523/lib/python/ZODB/tests

Modified Files:
      Tag: Zope-2_7-branch
	testCache.py 
Log Message:
checkMinimizeTerminates():  backport test fix from the trunk.
The nasty immortal objects created by this test can create mysterious
errors in subsequent tests, as Jim discovered when testing the Zope X3
beta.  This patch defangs the objects (renders them harmless and mortal
again) after the body of the test completes.


=== Zope/lib/python/ZODB/tests/testCache.py 1.13.10.6 => 1.13.10.7 ===
--- Zope/lib/python/ZODB/tests/testCache.py:1.13.10.6	Fri May 21 12:14:05 2004
+++ Zope/lib/python/ZODB/tests/testCache.py	Mon Jun  7 18:46:47 2004
@@ -71,6 +71,21 @@
             o.value += 1
         get_transaction().commit()
 
+
+# CantGetRidOfMe is used by checkMinimizeTerminates.
+make_trouble = True
+class CantGetRidOfMe(MinPO):
+    def __init__(self, value):
+        MinPO.__init__(self, value)
+        self.an_attribute = 42
+
+    def __del__(self):
+        # Referencing an attribute of self causes self to be
+        # loaded into the cache again, which also resurrects
+        # self.
+        if make_trouble:
+            self.an_attribute
+
 class DBMethods(CacheTestBase):
 
     __super_setUp = CacheTestBase.setUp
@@ -128,29 +143,28 @@
         # unghostifying itself again.
         class Worker(threading.Thread):
 
-            class CantGetRidOfMe(MinPO):
-                def __init__(self, value):
-                    MinPO.__init__(self, value)
-                    self.an_attribute = 42
-
-                def __del__(self):
-                    # Referencing an attribute of self causes self to be
-                    # loaded into the cache again, which also resurrects
-                    # self.
-                    self.an_attribute
-
             def __init__(self, testcase):
                 threading.Thread.__init__(self)
                 self.testcase = testcase
 
             def run(self):
+                global make_trouble
+                # Make CantGetRidOfMe.__del__ dangerous.
+                make_trouble = True
+
                 conn = self.testcase.conns[0]
                 r = conn.root()
                 d = r[1]
                 for i in range(len(d)):
-                    d[i] = self.CantGetRidOfMe(i)
+                    d[i] = CantGetRidOfMe(i)
                 get_transaction().commit()
 
+                self.testcase.db.cacheMinimize(0)
+
+                # Defang the nasty objects.  Else, because they're
+                # immortal now, they hang around and create trouble
+                # for subsequent tests.
+                make_trouble = False
                 self.testcase.db.cacheMinimize(0)
 
         w = Worker(self)




More information about the Zope-Checkins mailing list