make test: add test framework debugging
[vpp.git] / test / debug_internal.py
diff --git a/test/debug_internal.py b/test/debug_internal.py
new file mode 100644 (file)
index 0000000..2cbee27
--- /dev/null
@@ -0,0 +1,39 @@
+import gc
+import pprint
+import vpp_papi
+from vpp_papi_provider import VppPapiProvider
+import objgraph
+from pympler import tracker
+tr = tracker.SummaryTracker()
+
+"""
+  Internal debug module
+
+  The module provides functions for debugging test framework
+"""
+
+
+def on_tear_down_class(cls):
+    gc.collect()
+    tr.print_diff()
+    objects = gc.get_objects()
+    counter = 0
+    with open(cls.tempdir + '/python_objects.txt', 'w') as f:
+        interesting = [
+            o for o in objects
+            if isinstance(o, (VppPapiProvider, vpp_papi.VPP))]
+        del objects
+        gc.collect()
+        for o in interesting:
+            objgraph.show_backrefs([o], max_depth=5,
+                                   filename="%s/%s.png" %
+                                   (cls.tempdir, counter))
+            counter += 1
+            refs = gc.get_referrers(o)
+            pp = pprint.PrettyPrinter(indent=2)
+            f.write("%s\n" % pp.pformat(o))
+            for r in refs:
+                try:
+                    f.write("%s\n" % pp.pformat(r))
+                except:
+                    f.write("%s\n" % type(r))