Philip Jenvey avatar Philip Jenvey committed 841eb3a

make test_syndict succeed on Jython by explicitly garbage collecting when
CPython's was assumed to have happened

Comments (0)

Files changed (1)


 from beaker.util import SyncDict
-import random, time, weakref, sys
+import gc, random, sys, time, weakref
 # this script tests SyncDict for its thread safety, 
 # ability to always return a value even for a dictionary 
     raise "this test requires a thread-enabled python"
+jython = sys.platform.startswith('java')
+def collect():
+    """The tests assume CPython GC behavior in regard to weakrefs, but
+    we can coerce Jython into passing by triggering GC when we expect
+    it to have happened on CPython
+    """
+    if jython:
+        gc.collect()
 class item:
     baton = True
         global theitem
+        collect()
         if theitem() is not None:
             raise "create %d old item is still referenced" % id
             del s['test']
         except KeyError: 
-        time.sleep(random.random() * .89)
+        # Give Jython more time on the final create for Java GC
+        sleeptime = (jython and x == 9) and 2 or random.random() * .89
+        time.sleep(sleeptime)
     failed = not running
 # normal dictionary test, where we will remove the value
 # periodically. the number of creates should be equal to
 # the number of removes plus one.    
 print "\ntesting with normal dict"
 runtest(SyncDict(thread.allocate_lock(), {}))
 assert(totalremoves + 1 == totalcreates)
 print "\ntesting with weak dict"
 runtest(SyncDict(thread.allocate_lock(), weakref.WeakValueDictionary()))
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.