[Zodb-checkins] CVS: ZODB3/ZEO/tests - InvalidationTests.py:1.1.4.8

Tim Peters tim.one at comcast.net
Sat Aug 23 19:40:24 EDT 2003


Update of /cvs-repository/ZODB3/ZEO/tests
In directory cvs.zope.org:/tmp/cvs-serv31289/ZEO/tests

Modified Files:
      Tag: ZODB3-3_1-branch
	InvalidationTests.py 
Log Message:
InvalidationTests._check_threads():  When this failed, it didn't give any
useful information.  Backported the ZODB4 version, which, upon failure,
displays the whole damaged tree and spells out what's wrong with it.


=== ZODB3/ZEO/tests/InvalidationTests.py 1.1.4.7 => 1.1.4.8 ===
--- ZODB3/ZEO/tests/InvalidationTests.py:1.1.4.7	Fri Aug 22 16:45:28 2003
+++ ZODB3/ZEO/tests/InvalidationTests.py	Sat Aug 23 18:40:22 2003
@@ -120,7 +120,7 @@
             # The test picks 50 keys spread across many buckets.  The
             # three threads start with different offsets to minimize
             # conflict errors.
-            
+
             nkeys = len(tkeys)
             if nkeys < 50:
                 tkeys = range(self.threadnum, 3000)
@@ -252,15 +252,26 @@
     def _check_threads(self, tree, *threads):
         # Make sure the thread's view of the world is consistent with
         # the actual database state.
-        all_keys = []
+        expected_keys = []
+        errormsgs = []
+        err = errormsgs.append
         for t in threads:
-            # If the test didn't add any keys, it didn't do what we expected.
-            self.assert_(t.added_keys)
-            for key in t.added_keys:
-                self.assert_(tree.has_key(key), key)
-            all_keys.extend(t.added_keys)
-        all_keys.sort()
-        self.assertEqual(all_keys, list(tree.keys()))
+            if not t.added_keys:
+                err("thread %d didn't add any keys" % t.threadnum)
+            expected_keys.extend(t.added_keys)
+        expected_keys.sort()
+        actual_keys = list(tree.keys())
+        if expected_keys != actual_keys:
+            err("expected keys != actual keys")
+            for k in expected_keys:
+                if k not in actual_keys:
+                    err("key %s expected but not in tree" % k)
+            for k in actual_keys:
+                if k not in expected_keys:
+                    err("key %s in tree but not expected" % k)
+        if errormsgs:
+            display(tree)
+            self.fail('\n'.join(errormsgs))
 
     def go(self, stop, *threads):
         # Run the threads
@@ -384,7 +395,7 @@
         for i in range(0, 3000, 2):
             tree[i] = 0
         get_transaction().commit()
-        
+
         # Run three threads that update the BTree.
         # Two of the threads share a single storage so that it
         # is possible for both threads to read the same object
@@ -406,7 +417,7 @@
                 self.assert_(tree[k] != 0)
                 if tree[k] != t.threadnum:
                     self.assert_(k in L[tree[k]].added_keys)
-                    
+
 
         cn.close()
         db1.close()




More information about the Zodb-checkins mailing list