vpp/test/debug_internal.py
Klement Sekera ebbaf55e09 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>
2018-02-17 20:42:49 +00:00

40 lines
1.1 KiB
Python

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))