tests: Add support for getting corefile patterns on FreeBSD
[vpp.git] / test / config.py
index c99d1ca..32cc4ca 100644 (file)
@@ -1,13 +1,13 @@
 import argparse
 import os
 import psutil
-import textwrap
 import time
+from vpp_qemu_utils import can_create_namespaces
 
 
 def positive_int_or_default(default):
     def positive_integer(v):
-        if v is None or v == "":
+        if v is None or v == "" or int(v) == default:
             return default
         if int(v) <= 0:
             raise ValueError("value must be positive")
@@ -18,7 +18,7 @@ def positive_int_or_default(default):
 
 def positive_float_or_default(default):
     def positive_float(v):
-        if v is None or v == "":
+        if v is None or v == "" or float(v) == default:
             return default
         if float(v) <= 0:
             raise ValueError("value must be positive")
@@ -119,11 +119,12 @@ parser.add_argument(
     "--failed-dir",
     action="store",
     type=directory,
-    help="directory containing failed tests",
+    help="directory containing failed tests (default: --tmp-dir)",
 )
 
 filter_help_string = """\
-expression consists of 3 string selectors separated by '.' separators:
+expression consists of one or more filters separated by commas (',')
+filter consists of 3 string selectors separated by dots ('.')
 
     <file>.<class>.<function>
 
@@ -143,6 +144,8 @@ examples:
    test_add_bfd from test_bfd.py/BFDAPITestCase
 4. '.*.test_add_bfd' selects all test functions named test_add_bfd
    from all files/classes
+5. 'bfd,ip4,..test_icmp_error' selects all test functions in test_bfd.py,
+   test_ip4.py and all test functions named 'test_icmp_error' in all files
 """
 parser.add_argument(
     "--filter", action="store", metavar="FILTER_EXPRESSION", help=filter_help_string
@@ -189,10 +192,16 @@ parser.add_argument(
 )
 
 parser.add_argument("--extended", action="store_true", help="run extended tests")
+parser.add_argument(
+    "--skip-netns-tests",
+    action="store_true",
+    help="skip tests involving netns operations",
+)
 
 parser.add_argument(
     "--sanity", action="store_true", help="perform sanity vpp run before running tests"
 )
+parser.add_argument("--api-preload", action="store_true", help="preload API files")
 
 parser.add_argument(
     "--force-foreground",
@@ -302,6 +311,14 @@ parser.add_argument(
     help="directory containing external plugins",
 )
 
+parser.add_argument(
+    "--extern-apidir",
+    action="append",
+    type=directory,
+    default=[],
+    help="directory to look for API JSON files",
+)
+
 parser.add_argument(
     "--coredump-size",
     action="store",
@@ -357,8 +374,47 @@ parser.add_argument(
     "--keep-pcaps",
     action="store_true",
     default=default_keep_pcaps,
-    help="if set, keep all pcap files from a test run"
-    f" (default: {default_keep_pcaps})",
+    help=f"if set, keep all pcap files from a test run (default: {default_keep_pcaps})",
+)
+
+parser.add_argument(
+    "-r",
+    "--use-running-vpp",
+    dest="running_vpp",
+    required=False,
+    action="store_true",
+    default=False,
+    help="Runs tests against a running VPP.",
+)
+
+parser.add_argument(
+    "--excluded-plugin",
+    dest="excluded_plugins",
+    required=False,
+    action="append",
+    default=[],
+    help="Exclude the tests that indicate they require this plugin(s)",
+)
+
+parser.add_argument(
+    "-d",
+    "--socket-dir",
+    dest="socket_dir",
+    required=False,
+    action="store",
+    default="",
+    help="Relative or absolute path to running VPP's socket directory.\n"
+    "The directory must contain VPP's socket files:api.sock & stats.sock.\n"
+    "Default: /var/run/vpp if VPP is started as the root user, else "
+    "/var/run/user/${uid}/vpp.",
+)
+
+default_decode_pcaps = False
+parser.add_argument(
+    "--decode-pcaps",
+    action="store_true",
+    default=default_decode_pcaps,
+    help=f"if set, decode all pcap files from a test run (default: {default_decode_pcaps})",
 )
 
 config = parser.parse_args()
@@ -397,7 +453,10 @@ config.test_src_dir = test_dirs
 
 
 if config.venv_dir is None:
-    config.venv_dir = f"{ws}/test/venv"
+    config.venv_dir = f"{ws}/build-root/test/venv"
+
+if config.failed_dir is None:
+    config.failed_dir = f"{config.tmp_dir}"
 
 available_cpus = psutil.Process().cpu_affinity()
 num_cpus = len(available_cpus)
@@ -409,6 +468,10 @@ elif config.max_vpp_cpus > 0:
 else:
     max_vpp_cpus = num_cpus
 
+if not config.skip_netns_tests:
+    if not can_create_namespaces():
+        config.skip_netns_tests = True
+
 if __name__ == "__main__":
     print("Provided arguments:")
     for i in config.__dict__: