hs-test: support running multiple specific tests 41/41641/1
authorAdrian Villin <avillin@cisco.com>
Wed, 9 Oct 2024 09:03:35 +0000 (11:03 +0200)
committerAdrian Villin <avillin@cisco.com>
Wed, 9 Oct 2024 09:03:35 +0000 (11:03 +0200)
- make test TEST=[test1],[test2] runs those two tests in random order

Type: test

Change-Id: I1a1af7c99ef7867ca94cec4175605f428dcd58fd
Signed-off-by: Adrian Villin <avillin@cisco.com>
extras/hs-test/README.rst
extras/hs-test/hs_test.sh

index 6a4cea1..159f679 100644 (file)
@@ -27,7 +27,7 @@ Anatomy of a test case
 **Action flow when running a test case**:
 
 #. It starts with running ``make test``. Optional arguments are VERBOSE, PERSIST (topology configuration isn't cleaned up after test run, use ``make cleanup-hst`` to clean up),
-   TEST=<test-name> to run a specific test and PARALLEL=[n-cpus].
+   TEST=<test-name> to run a specific test and PARALLEL=[n-cpus]. If you want to run multiple specific tests, separate their names with a comma.
 #. ``make list-tests`` (or ``make help``) shows all tests.
 #. ``Ginkgo`` looks for a spec suite in the current directory and then compiles it to a .test binary.
 #. The Ginkgo test framework runs each function that was registered manually using ``Register[SuiteName]Test()``. Each of these functions correspond to a suite.
index 85c0dd7..b935f5d 100644 (file)
@@ -3,14 +3,14 @@
 source vars
 
 args=
-single_test=0
+focused_test=0
 persist_set=0
 unconfigure_set=0
 debug_set=0
 leak_check_set=0
 debug_build=
 ginkgo_args=
-tc_name=
+tc_names=()
 
 for i in "$@"
 do
@@ -55,13 +55,12 @@ case "${i}" in
         args="$args -vppsrc ${i#*=}"
         ;;
     --test=*)
-        tc_name="${i#*=}"
-        if [ "$tc_name" != "all" ]; then
-            single_test=1
-            ginkgo_args="$ginkgo_args --focus $tc_name -vv"
+        tc_list="${i#*=}"
+        ginkgo_args="$ginkgo_args -v"
+        if [ "$tc_list" != "all" ]; then
+            focused_test=1
+            IFS=',' read -r -a tc_names <<< "$tc_list"
             args="$args -verbose"
-        else
-            ginkgo_args="$ginkgo_args -v"
         fi
         ;;
     --parallel=*)
@@ -86,12 +85,16 @@ case "${i}" in
 esac
 done
 
-if [ $single_test -eq 0 ] && [ $persist_set -eq 1 ]; then
+for name in "${tc_names[@]}"; do
+    ginkgo_args="$ginkgo_args --focus $name"
+done
+
+if [ $focused_test -eq 0 ] && [ $persist_set -eq 1 ]; then
     echo "persist flag is not supported while running all tests!"
     exit 1
 fi
 
-if [ $unconfigure_set -eq 1 ] && [ $single_test -eq 0 ]; then
+if [ $unconfigure_set -eq 1 ] && [ $focused_test -eq 0 ]; then
     echo "a single test has to be specified when unconfigure is set"
     exit 1
 fi
@@ -101,13 +104,13 @@ if [ $persist_set -eq 1 ] && [ $unconfigure_set -eq 1 ]; then
     exit 1
 fi
 
-if [ $single_test -eq 0 ] && [ $debug_set -eq 1 ]; then
+if [ $focused_test -eq 0 ] && [ $debug_set -eq 1 ]; then
     echo "VPP debug flag is not supported while running all tests!"
     exit 1
 fi
 
 if [ $leak_check_set -eq 1 ]; then
-  if [ $single_test -eq 0 ]; then
+  if [ $focused_test -eq 0 ]; then
     echo "a single test has to be specified when leak_check is set"
     exit 1
   fi