summaryrefslogtreecommitdiffstats
path: root/test/debug_internal.py
diff options
context:
space:
mode:
authorKlement Sekera <ksekera@cisco.com>2018-02-17 13:41:33 +0100
committerDamjan Marion <dmarion.lists@gmail.com>2018-02-17 20:42:49 +0000
commitebbaf55e09cfe2a31d4bf2b2f6bc49eeb4e1d528 (patch)
tree02f7092c9693f0fc7fe55925abaa8cf0d02c1351 /test/debug_internal.py
parent545be52c793512a441d2bc7c1706b5f76466055e (diff)
make test: add test framework debugging
New option TEST_DEBUG=1 turns on test framework debugging, which currently consists of printing difference in allocated objects/memory and also creates reference graphs for any unfreed VppPapiProvider/VPP objects - these take a lot of memory and thus should be freed regularly. Change-Id: I29db0c1341009d4b5c5df9222d14f3095883fd0f Signed-off-by: Klement Sekera <ksekera@cisco.com>
Diffstat (limited to 'test/debug_internal.py')
-rw-r--r--test/debug_internal.py39
1 files changed, 39 insertions, 0 deletions
diff --git a/test/debug_internal.py b/test/debug_internal.py
new file mode 100644
index 00000000000..2cbee27ec81
--- /dev/null
+++ b/test/debug_internal.py
@@ -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))