test: take test names from command line
authorBruce Richardson <bruce.richardson@intel.com>
Wed, 27 Jan 2021 17:42:55 +0000 (17:42 +0000)
committerDavid Marchand <david.marchand@redhat.com>
Wed, 14 Apr 2021 13:14:56 +0000 (15:14 +0200)
While having the ability to run a test based off the DPDK_TEST
environment variable is useful, it's sometimes more convenient to
specify the test name as a commandline parameter to a test binary.
This patch adds support for checking all parameters after the EAL ones, and
running all valid autotests requested - either from DPDK_TEST or on the
commandline. This also allows multiple tests to be run in a single
automated session, which is useful for working with components which have
multiple test suites.

Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
Acked-by: Aaron Conole <aconole@redhat.com>
app/test/commands.c
app/test/test.c
app/test/test.h

index d48dd51..76f6ee5 100644 (file)
@@ -381,3 +381,14 @@ int commands_init(void)
        cmd_autotest_autotest.string_data.str = commands;
        return 0;
 }
+
+int command_valid(const char *cmd)
+{
+       struct test_command *t;
+
+       TAILQ_FOREACH(t, &commands_list, next) {
+               if (strcmp(t->command, cmd) == 0)
+                       return 1;
+       }
+       return 0;
+}
index 864523e..94352a9 100644 (file)
@@ -93,6 +93,9 @@ main(int argc, char **argv)
 {
 #ifdef RTE_LIB_CMDLINE
        struct cmdline *cl;
+       char *tests[argc]; /* store an array of tests to run */
+       int test_count = 0;
+       int i;
 #endif
        char *extra_args;
        int ret;
@@ -135,6 +138,7 @@ main(int argc, char **argv)
        }
 
        argv += ret;
+       argc -= ret;
 
        prgname = argv[0];
 
@@ -166,7 +170,25 @@ main(int argc, char **argv)
 
 #ifdef RTE_LIB_CMDLINE
        char *dpdk_test = getenv("DPDK_TEST");
-       if (dpdk_test && strlen(dpdk_test)) {
+
+       if (dpdk_test && strlen(dpdk_test) == 0)
+               dpdk_test = NULL;
+
+       if (dpdk_test && !command_valid(dpdk_test)) {
+               RTE_LOG(WARNING, APP, "Invalid DPDK_TEST value '%s'\n", dpdk_test);
+               dpdk_test = NULL;
+       }
+
+       if (dpdk_test)
+               tests[test_count++] = dpdk_test;
+       for (i = 1; i < argc; i++) {
+               if (!command_valid(argv[i]))
+                       RTE_LOG(WARNING, APP, "Invalid test requested: '%s'\n", argv[i]);
+               else
+                       tests[test_count++] = argv[i];
+       }
+
+       if (test_count > 0) {
                char buf[1024];
 
                cl = cmdline_new(main_ctx, "RTE>>", 0, 1);
@@ -175,13 +197,17 @@ main(int argc, char **argv)
                        goto out;
                }
 
-               snprintf(buf, sizeof(buf), "%s\n", dpdk_test);
-               if (cmdline_in(cl, buf, strlen(buf)) < 0) {
-                       printf("error on cmdline input\n");
+               for (i = 0; i < test_count; i++) {
+                       snprintf(buf, sizeof(buf), "%s\n", tests[i]);
+                       if (cmdline_in(cl, buf, strlen(buf)) < 0) {
+                               printf("error on cmdline input\n");
 
-                       ret = -1;
-               } else {
-                       ret = last_test_result;
+                               ret = -1;
+                       } else
+                               ret = last_test_result;
+
+                       if (ret != 0)
+                               break;
                }
                cmdline_free(cl);
                goto out;
index b07f6c1..cd047eb 100644 (file)
@@ -152,6 +152,7 @@ extern int last_test_result;
 extern const char *prgname;
 
 int commands_init(void);
+int command_valid(const char *cmd);
 
 int test_mp_secondary(void);
 int test_timer_secondary(void);