tests: Rework vpp config generation.
[vpp.git] / test / framework.py
index 859010c..5eeb518 100644 (file)
@@ -20,8 +20,10 @@ from traceback import format_exception
 from logging import FileHandler, DEBUG, Formatter
 from scapy.packet import Raw
 from hook import StepHook, PollHook, VppDiedError
-from vpp_pg_interface import VppPGInterface
+from vpp_config import VppTestCaseVppConfig
+from vpp_interface import VppInterface
 from vpp_sub_interface import VppSubInterface
+from vpp_pg_interface import VppPGInterface
 from vpp_lo_interface import VppLoInterface
 from vpp_papi_provider import VppPapiProvider
 from vpp_papi.vpp_stats import VPPStats
@@ -40,6 +42,12 @@ if os.name == 'posix' and sys.version_info[0] < 3:
 else:
     import subprocess
 
+#  Python2/3 compatible
+try:
+    input = raw_input
+except NameError:
+    pass
+
 PASS = 0
 FAIL = 1
 ERROR = 2
@@ -132,23 +140,31 @@ def pump_output(testclass):
                         # flag will take care of properly terminating the loop
 
 
-def is_skip_aarch64_set():
+def _is_skip_aarch64_set():
     return os.getenv('SKIP_AARCH64', 'n').lower() in ('yes', 'y', '1')
 
+is_skip_aarch64_set = _is_skip_aarch64_set()
 
-def is_platform_aarch64():
+
+def _is_platform_aarch64():
     return platform.machine() == 'aarch64'
 
+is_platform_aarch64 = _is_platform_aarch64()
+
 
-def running_extended_tests():
+def _running_extended_tests():
     s = os.getenv("EXTENDED_TESTS", "n")
     return True if s.lower() in ("y", "yes", "1") else False
 
+running_extended_tests = _running_extended_tests()
+
 
-def running_on_centos():
+def _running_on_centos():
     os_id = os.getenv("OS_ID", "")
     return True if "centos" in os_id.lower() else False
 
+running_on_centos = _running_on_centos
+
 
 class KeepAliveReporter(object):
     """
@@ -191,7 +207,8 @@ class VppTestCase(unittest.TestCase):
     classes. It provides methods to create and run test case.
     """
 
-    extra_vpp_punt_config = []
+    CLI_LISTEN_DEFAULT = 'localhost:5002'
+    config = VppTestCaseVppConfig()
 
     @property
     def packet_infos(self):
@@ -286,32 +303,26 @@ class VppTestCase(unittest.TestCase):
                 plugin_path = cls.plugin_path
         elif cls.extern_plugin_path is not None:
             plugin_path = cls.extern_plugin_path
-        debug_cli = ""
+
         if cls.step or cls.debug_gdb or cls.debug_gdbserver:
-            debug_cli = "cli-listen localhost:5002"
+            cls.config.add('unix', 'cli-listen', cls.CLI_LISTEN_DEFAULT)
+
         coredump_size = None
         size = os.getenv("COREDUMP_SIZE")
-        if size is not None:
-            coredump_size = "coredump-size %s" % size
-        if coredump_size is None:
-            coredump_size = "coredump-size unlimited"
-
-        cpu_core_number = cls.get_least_used_cpu()
-
-        cls.vpp_cmdline = [cls.vpp_bin, "unix",
-                           "{", "nodaemon", debug_cli, "full-coredump",
-                           coredump_size, "runtime-dir", cls.tempdir, "}",
-                           "api-trace", "{", "on", "}", "api-segment", "{",
-                           "prefix", cls.shm_prefix, "}", "cpu", "{",
-                           "main-core", str(cpu_core_number), "}", "statseg",
-                           "{", "socket-name", cls.stats_sock, "}", "plugins",
-                           "{", "plugin", "dpdk_plugin.so", "{", "disable",
-                           "}", "plugin", "unittest_plugin.so", "{", "enable",
-                           "}", "}", ]
-        if cls.extra_vpp_punt_config is not None:
-            cls.vpp_cmdline.extend(cls.extra_vpp_punt_config)
+        cls.config.add('unix', 'coredump-size',
+                       size if size is not None else 'unlimited')
+
+        cls.config.add('unix', 'runtime-dir', cls.tempdir)
+        cls.config.add('api-segment', 'prefix', cls.shm_prefix)
+        cls.config.add('cpu', 'main-core', str(cls.get_least_used_cpu()))
+        cls.config.add('statseg', 'socket-name', cls.stats_sock)
+
         if plugin_path is not None:
-            cls.vpp_cmdline.extend(["plugin_path", plugin_path])
+            cls.config.add('plugins', 'path', plugin_path)
+        cls.config.add_plugin('dpdk_plugin.so', 'disable')
+        cls.config.add_plugin('unittest_plugin.so', 'enable')
+
+        cls.vpp_cmdline = [cls.vpp_bin] + cls.config.shlex()
         cls.logger.info("vpp_cmdline args: %s" % cls.vpp_cmdline)
         cls.logger.info("vpp_cmdline: %s" % " ".join(cls.vpp_cmdline))
 
@@ -338,7 +349,7 @@ class VppTestCase(unittest.TestCase):
             print("Now is the time to attach a gdb by running the above "
                   "command and set up breakpoints etc.")
         print(single_line_delim)
-        raw_input("Press ENTER to continue running the testcase...")
+        input("Press ENTER to continue running the testcase...")
 
     @classmethod
     def run_vpp(cls):
@@ -478,8 +489,8 @@ class VppTestCase(unittest.TestCase):
                 print(double_line_delim)
                 print("VPP or GDB server is still running")
                 print(single_line_delim)
-                raw_input("When done debugging, press ENTER to kill the "
-                          "process and finish running the testcase...")
+                input("When done debugging, press ENTER to kill the "
+                      "process and finish running the testcase...")
 
         # first signal that we want to stop the pump thread, then wake it up
         if hasattr(cls, 'pump_thread_stop_flag'):
@@ -842,8 +853,8 @@ class VppTestCase(unittest.TestCase):
                 for cf in checksum_fields:
                     if hasattr(layer, cf):
                         if ignore_zero_udp_checksums and \
-                                        0 == getattr(layer, cf) and \
-                                        layer.name in udp_layers:
+                                0 == getattr(layer, cf) and \
+                                layer.name in udp_layers:
                             continue
                         delattr(layer, cf)
                         checksums.append((counter, cf))