def test_gc_list_cycle(self): #print "test_gc_list_cycle" l = (123, [0, "test1"]) l[1][0] = l #We create weak reference to l to monitor collection by Java-GC: wkl = WeakReference(l) DemoExtension.argCountToString(l) del l self.assertIsNotNone(wkl.get()) self.assertEqual(len(monitor.getCurrentNativeLeaks()), 4) runGC() self.assertIsNone(wkl.get()) self.assertEqual(len(monitor.getCurrentNativeLeaks()), 0) del wkl
def test_gc_list_modify_silent(self): #print "test_gc_list_modify_silent" clearCurrentLeaks() self.assertEqual(len(monitor.getCurrentNativeLeaks()), 0) l = [0, "test1"] d = {'a': 7, 'b': "test6"} wkl = WeakReference(l) wkd = WeakReference(d) wkl2 = weakref.ref(l) wkd2 = weakref.ref(d) self.assertIsNotNone(wkl.get()) self.assertIsNotNone(wkd.get()) self.assertIsNotNone(wkl2()) self.assertIsNotNone(wkd2()) DemoExtension.listSetIndex(l, 0, d) del d self.assertEqual(len(monitor.getCurrentNativeLeaks()), 4) #monitor.listAll() runGC() #monitor.listAll() self.assertFalse(monitor.lastClearGraphValid) self.assertIsNotNone(wkl.get()) self.assertIsNone(wkd.get()) self.assertIsNotNone(wkl2()) self.assertIsNotNone(wkd2()) self.assertEqual(len(monitor.getCurrentNativeLeaks()), 3) self.assertIsNotNone(l[0]) self.assertEqual(len(l[0]), 2) del l runGC() #monitor.listAll() self.assertTrue(monitor.lastClearGraphValid) # For some reason resurrected objects persist one more # gc-cycle in principle. So we have to run gc again before # we can observe wkd2 to die. It is currently unclear whether # this behavior is a JyNI-bug or natural Java-gc behavior, # but for now (with some evidence) we assume the latter. # Note: Since WeakRef-support wkd2 actually keeps the native # referent alive for one more cycle. So also the monitor-refcount # test only passes after another gc-run now. runGC() #monitor.listAll() self.assertTrue(monitor.lastClearGraphValid) self.assertEqual(len(monitor.getCurrentNativeLeaks()), 0) self.assertIsNone(wkl2()) self.assertIsNone(wkd2())
def test_gc_list_cycle(self): #print "test_gc_list_cycle" clearCurrentLeaks() self.assertEqual(len(monitor.getCurrentNativeLeaks()), 0) l = (123, [0, "test1"]) l[1][0] = l #We create weak reference to l to monitor collection by Java-GC: wkl = WeakReference(l) DemoExtension.argCountToString(l) del l self.assertIsNotNone(wkl.get()) self.assertEqual(len(monitor.getCurrentNativeLeaks()), 4) runGC() self.assertIsNone(wkl.get()) self.assertEqual(len(monitor.getCurrentNativeLeaks()), 0) del wkl
def test_gc_dict_cycle(self): #print "test_gc_dict_cycle" l = (123, {'a': 0, 'b': "test3"}) l[1]['a'] = l #We create weak reference to l to monitor collection by Java-GC: wkl = WeakReference(l) DemoExtension.argCountToString(l) del l self.assertIsNotNone(wkl.get()) #monitor.listLeaks() self.assertEqual(len(monitor.getCurrentNativeLeaks()), 3) runGC() self.assertIsNone(wkl.get()) self.assertEqual(len(monitor.getCurrentNativeLeaks()), 0) #print "" #monitor.listLeaks() del wkl
def test_gc_list_modify_silent(self): #print "test_gc_list_modify_silent" clearCurrentLeaks() self.assertEqual(len(monitor.getCurrentNativeLeaks()), 0) l = [0, "test1"] d = {'a': 7, 'b': "test6"} wkl = WeakReference(l) wkd = WeakReference(d) wkl2 = weakref.ref(l) wkd2 = weakref.ref(d) self.assertIsNotNone(wkl.get()) self.assertIsNotNone(wkd.get()) self.assertIsNotNone(wkl2()) self.assertIsNotNone(wkd2()) DemoExtension.listSetIndex(l, 0, d) del d self.assertEqual(len(monitor.getCurrentNativeLeaks()), 4) runGC() self.assertFalse(monitor.lastClearGraphValid) self.assertIsNotNone(wkl.get()) self.assertIsNone(wkd.get()) self.assertIsNotNone(wkl2()) self.assertIsNotNone(wkd2()) self.assertEqual(len(monitor.getCurrentNativeLeaks()), 3) self.assertIsNotNone(l[0]) self.assertEqual(len(l[0]), 2) del l runGC() self.assertTrue(monitor.lastClearGraphValid) # For some reason resurrected objects persist one more # gc-cycle in principle. So we have to run gc again before # we can observe wkd2 to die. It is currently unclear whether # this behavior is a JyNI-bug or natural Java-gc behavior, # but for now (with some evidence) we assume the latter. # Note: Since WeakRef-support wkd2 actually keeps the native # referent alive for one more cycle. So also the monitor-refcount # test only passes after another gc-run now. runGC() self.assertTrue(monitor.lastClearGraphValid) self.assertEqual(len(monitor.getCurrentNativeLeaks()), 0) self.assertIsNone(wkl2()) self.assertIsNone(wkd2())
def test_gc_list_cycle2(self): #print "test_gc_list_cycle2" clearCurrentLeaks() self.assertEqual(len(monitor.getCurrentNativeLeaks()), 0) l2 = (127, [0, "test2"]) l2[1][0] = l2 #We create weak reference to l to monitor collection by Java-GC: wkl = WeakReference(l2) DemoExtension.argCountToString(l2) self.assertIsNotNone(wkl.get()) self.assertEqual(len(monitor.getCurrentNativeLeaks()), 4) runGC() self.assertIsNotNone(wkl.get()) self.assertEqual(len(monitor.getCurrentNativeLeaks()), 3) del l2 runGC() self.assertIsNone(wkl.get()) self.assertEqual(len(monitor.getCurrentNativeLeaks()), 0) del wkl
def test_gc_list_modify_silent(self): #print "test_gc_list_modify_silent" l = [0, "test1"] d = {'a': 7, 'b': "test6"} wkl = WeakReference(l) wkd = WeakReference(d) wkl2 = weakref.ref(l) wkd2 = weakref.ref(d) self.assertIsNotNone(wkl.get()) self.assertIsNotNone(wkd.get()) self.assertIsNotNone(wkl2()) self.assertIsNotNone(wkd2()) DemoExtension.listSetIndex(l, 0, d) del d self.assertEqual(len(monitor.getCurrentNativeLeaks()), 4) #print "run1" runGC() #print "run1 done" self.assertFalse(monitor.lastClearGraphValid) self.assertIsNotNone(wkl.get()) self.assertIsNone(wkd.get()) self.assertIsNotNone(wkl2()) self.assertIsNotNone(wkd2()) self.assertEqual(len(monitor.getCurrentNativeLeaks()), 3) self.assertIsNotNone(l[0]) self.assertEqual(len(l[0]), 2) del l #print "run2" runGC() #print "run2 done" self.assertTrue(monitor.lastClearGraphValid) self.assertEqual(len(monitor.getCurrentNativeLeaks()), 0) self.assertIsNone(wkl2()) # For some reason resurrected objects persist one more # gc-cycle in principle. So we have to run gc again before # we can observe wkd2 to die. It is currently unclear whether # this behavior is a JyNI-bug or natural Java-gc behavior, # but for now (with some evidence) we assume the latter. #print "run3" runGC() #print "run3 done" self.assertIsNone(wkd2())
def test_gc_list_modify_update(self): #print "test_gc_list_modify_update" l = [0, "test1"] d = {'a': 7, 'b': "test6"} #We create weak reference to l to monitor collection by Java-GC: wkl = WeakReference(l) wkd = WeakReference(d) #l[0] = d DemoExtension.argCountToString(l) l[0] = d del d self.assertEqual(len(monitor.getCurrentNativeLeaks()), 4) runGC() self.assertIsNotNone(wkl.get()) self.assertIsNotNone(wkd.get()) self.assertEqual(len(monitor.getCurrentNativeLeaks()), 3) del l runGC() self.assertIsNone(wkl.get()) self.assertIsNone(wkd.get()) self.assertEqual(len(monitor.getCurrentNativeLeaks()), 0)
def test_gc_list_modify_update(self): #print "test_gc_list_modify_update" clearCurrentLeaks() self.assertEqual(len(monitor.getCurrentNativeLeaks()), 0) l = [0, "test1"] d = {'a': 7, 'b': "test6"} #We create weak reference to l to monitor collection by Java-GC: wkl = WeakReference(l) wkd = WeakReference(d) #l[0] = d DemoExtension.argCountToString(l) l[0] = d del d self.assertEqual(len(monitor.getCurrentNativeLeaks()), 4) runGC() self.assertIsNotNone(wkl.get()) self.assertIsNotNone(wkd.get()) self.assertEqual(len(monitor.getCurrentNativeLeaks()), 3) del l runGC() self.assertIsNone(wkl.get()) self.assertIsNone(wkd.get()) self.assertEqual(len(monitor.getCurrentNativeLeaks()), 0)
def clearCurrentLeaks(): leaks = monitor.getCurrentNativeLeaks() if len(leaks) > 0: monitor.declareLeaksPermanent(leaks)
def test_gc_doc(self): #print "test_gc_doc" clearCurrentLeaks() doc = DemoExtension.argCountToString.__doc__ #monitor.listLeaks() self.assertEqual(len(monitor.getCurrentNativeLeaks()), 0)
def test_gc_doc(self): #print "test_gc_doc" doc = DemoExtension.argCountToString.__doc__ #monitor.listLeaks() self.assertEqual(len(monitor.getCurrentNativeLeaks()), 0)