It is handy during testing and/or debugging to be able to run a single test from test_memcontrol. Allow passing in a test name through a command line argument (e.g. ./test_memcontrol -t test_memcg_recharge). Change-Id: I0e0d74d81fdd9d997987389085a816715160467f Signed-off-by: Yosry Ahmed <yosryahmed@xxxxxxxxxx> --- .../selftests/cgroup/test_memcontrol.c | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/tools/testing/selftests/cgroup/test_memcontrol.c b/tools/testing/selftests/cgroup/test_memcontrol.c index a2a90f4bfe9f..d8f8a13bc6c4 100644 --- a/tools/testing/selftests/cgroup/test_memcontrol.c +++ b/tools/testing/selftests/cgroup/test_memcontrol.c @@ -1308,9 +1308,36 @@ struct memcg_test { int main(int argc, char **argv) { + int opt; char root[PATH_MAX]; + int selected_test = -1; int i, proc_status, ret = EXIT_SUCCESS; + while ((opt = getopt(argc, argv, "ht:")) != -1) { + switch (opt) { + case 't': + for (i = 0; i < ARRAY_SIZE(tests); i++) { + if (!strcmp(tests[i].name, optarg)) { + selected_test = i; + break; + } + } + if (selected_test >= 0) + break; + fprintf(stderr, "test %s not found\n", optarg); + return EXIT_FAILURE; + case 'h': + fprintf(stderr, + "Usage: %s [-h] [-t name]\n" + "\t-h print help\n" + "\t-t name run specific test\n" + , argv[0]); + return ret; + default: + break; + } + } + if (cg_find_unified_root(root, sizeof(root))) ksft_exit_skip("cgroup v2 isn't mounted\n"); @@ -1336,6 +1363,9 @@ int main(int argc, char **argv) has_localevents = proc_status; for (i = 0; i < ARRAY_SIZE(tests); i++) { + if (selected_test >= 0 && selected_test != i) + continue; + switch (tests[i].fn(root)) { case KSFT_PASS: ksft_test_result_pass("%s\n", tests[i].name); -- 2.41.0.162.gfafddb0af9-goog