From ace2f054ed43f249514c9ac50da67acf3e834d97 Mon Sep 17 00:00:00 2001 From: Bruce Richardson Date: Wed, 27 Jan 2021 17:42:55 +0000 Subject: [PATCH] test: take test names from command line 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 Acked-by: Aaron Conole --- app/test/commands.c | 11 +++++++++++ app/test/test.c | 40 +++++++++++++++++++++++++++++++++------- app/test/test.h | 1 + 3 files changed, 45 insertions(+), 7 deletions(-) diff --git a/app/test/commands.c b/app/test/commands.c index d48dd513d7..76f6ee5d23 100644 --- a/app/test/commands.c +++ b/app/test/commands.c @@ -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; +} diff --git a/app/test/test.c b/app/test/test.c index 864523ed61..94352a95d5 100644 --- a/app/test/test.c +++ b/app/test/test.c @@ -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; diff --git a/app/test/test.h b/app/test/test.h index b07f6c1ef0..cd047eb26c 100644 --- a/app/test/test.h +++ b/app/test/test.h @@ -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); -- 2.20.1