make test: improve stability
Disable automatic garbage collection and run it manually before
running each test case to minimize stalls. Improve vpp subprocess
cleanup. Reduce helper thread count to one and properly clean that
thread once it's not needed.
Change-Id: I3ea78ed9628552b5ef3ff29cc7bcf2d3fc42f2c3
Signed-off-by: Klement Sekera <ksekera@cisco.com>
diff --git a/test/vpp_object.py b/test/vpp_object.py
index 1997bf5..0d74baa 100644
--- a/test/vpp_object.py
+++ b/test/vpp_object.py
@@ -1,3 +1,5 @@
+""" abstract vpp object and object registry """
+
from abc import ABCMeta, abstractmethod
@@ -5,9 +7,6 @@
""" Abstract vpp object """
__metaclass__ = ABCMeta
- def __init__(self):
- VppObjectRegistry().register(self)
-
@abstractmethod
def add_vpp_config(self):
""" Add the configuration for this object to vpp. """
@@ -42,13 +41,13 @@
if not hasattr(self, "_object_dict"):
self._object_dict = dict()
- def register(self, o, logger):
+ def register(self, obj, logger):
""" Register an object in the registry. """
- if not o.object_id() in self._object_dict:
- self._object_registry.append(o)
- self._object_dict[o.object_id()] = o
+ if obj.object_id() not in self._object_dict:
+ self._object_registry.append(obj)
+ self._object_dict[obj.object_id()] = obj
else:
- logger.debug("REG: duplicate add, ignoring (%s)" % o)
+ logger.debug("REG: duplicate add, ignoring (%s)" % obj)
def remove_vpp_config(self, logger):
"""
@@ -60,23 +59,23 @@
return
logger.info("REG: Removing VPP configuration for registered objects")
# remove the config in reverse order as there might be dependencies
- for o in reversed(self._object_registry):
- if o.query_vpp_config():
- logger.info("REG: Removing configuration for %s" % o)
- o.remove_vpp_config()
+ for obj in reversed(self._object_registry):
+ if obj.query_vpp_config():
+ logger.info("REG: Removing configuration for %s" % obj)
+ obj.remove_vpp_config()
else:
logger.info(
"REG: Skipping removal for %s, configuration not present" %
- o)
+ obj)
failed = []
- for o in self._object_registry:
- if o.query_vpp_config():
- failed.append(o)
+ for obj in self._object_registry:
+ if obj.query_vpp_config():
+ failed.append(obj)
self._object_registry = []
self._object_dict = dict()
if failed:
logger.error("REG: Couldn't remove configuration for object(s):")
- for x in failed:
- logger.error(repr(x))
+ for obj in failed:
+ logger.error(repr(obj))
raise Exception("Couldn't remove configuration for object(s): %s" %
(", ".join(str(x) for x in failed)))