1 // SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause)
3 #include "test_progs.h"
4 #include "testing_helpers.h"
6 static void init_test_filter_set(struct test_filter_set *set)
12 static void free_test_filter_set(struct test_filter_set *set)
16 for (i = 0; i < set->cnt; i++) {
17 for (j = 0; j < set->tests[i].subtest_cnt; j++)
18 free((void *)set->tests[i].subtests[j]);
19 free(set->tests[i].subtests);
20 free(set->tests[i].name);
24 init_test_filter_set(set);
27 static void test_parse_test_list(void)
29 struct test_filter_set set;
31 init_test_filter_set(&set);
33 ASSERT_OK(parse_test_list("arg_parsing", &set, true), "parsing");
34 if (!ASSERT_EQ(set.cnt, 1, "test filters count"))
36 if (!ASSERT_OK_PTR(set.tests, "test filters initialized"))
38 ASSERT_EQ(set.tests[0].subtest_cnt, 0, "subtest filters count");
39 ASSERT_OK(strcmp("arg_parsing", set.tests[0].name), "subtest name");
40 free_test_filter_set(&set);
42 ASSERT_OK(parse_test_list("arg_parsing,bpf_cookie", &set, true),
44 if (!ASSERT_EQ(set.cnt, 2, "count of test filters"))
46 if (!ASSERT_OK_PTR(set.tests, "test filters initialized"))
48 ASSERT_EQ(set.tests[0].subtest_cnt, 0, "subtest filters count");
49 ASSERT_EQ(set.tests[1].subtest_cnt, 0, "subtest filters count");
50 ASSERT_OK(strcmp("arg_parsing", set.tests[0].name), "test name");
51 ASSERT_OK(strcmp("bpf_cookie", set.tests[1].name), "test name");
52 free_test_filter_set(&set);
54 ASSERT_OK(parse_test_list("arg_parsing/arg_parsing,bpf_cookie",
58 if (!ASSERT_EQ(set.cnt, 2, "count of test filters"))
60 if (!ASSERT_OK_PTR(set.tests, "test filters initialized"))
62 if (!ASSERT_EQ(set.tests[0].subtest_cnt, 1, "subtest filters count"))
64 ASSERT_EQ(set.tests[1].subtest_cnt, 0, "subtest filters count");
65 ASSERT_OK(strcmp("arg_parsing", set.tests[0].name), "test name");
66 ASSERT_OK(strcmp("arg_parsing", set.tests[0].subtests[0]),
68 ASSERT_OK(strcmp("bpf_cookie", set.tests[1].name), "test name");
69 free_test_filter_set(&set);
71 ASSERT_OK(parse_test_list("arg_parsing/arg_parsing", &set, true),
73 ASSERT_OK(parse_test_list("bpf_cookie", &set, true), "parsing");
74 ASSERT_OK(parse_test_list("send_signal", &set, true), "parsing");
75 if (!ASSERT_EQ(set.cnt, 3, "count of test filters"))
77 if (!ASSERT_OK_PTR(set.tests, "test filters initialized"))
79 if (!ASSERT_EQ(set.tests[0].subtest_cnt, 1, "subtest filters count"))
81 ASSERT_EQ(set.tests[1].subtest_cnt, 0, "subtest filters count");
82 ASSERT_EQ(set.tests[2].subtest_cnt, 0, "subtest filters count");
83 ASSERT_OK(strcmp("arg_parsing", set.tests[0].name), "test name");
84 ASSERT_OK(strcmp("arg_parsing", set.tests[0].subtests[0]),
86 ASSERT_OK(strcmp("bpf_cookie", set.tests[1].name), "test name");
87 ASSERT_OK(strcmp("send_signal", set.tests[2].name), "test name");
88 free_test_filter_set(&set);
90 ASSERT_OK(parse_test_list("bpf_cookie/trace", &set, false), "parsing");
91 if (!ASSERT_EQ(set.cnt, 1, "count of test filters"))
93 if (!ASSERT_OK_PTR(set.tests, "test filters initialized"))
95 if (!ASSERT_EQ(set.tests[0].subtest_cnt, 1, "subtest filters count"))
97 ASSERT_OK(strcmp("*bpf_cookie*", set.tests[0].name), "test name");
98 ASSERT_OK(strcmp("*trace*", set.tests[0].subtests[0]), "subtest name");
99 free_test_filter_set(&set);
101 ASSERT_OK(parse_test_list("t/subtest1,t/subtest2", &set, true),
103 if (!ASSERT_EQ(set.cnt, 1, "count of test filters"))
105 if (!ASSERT_OK_PTR(set.tests, "test filters initialized"))
107 if (!ASSERT_EQ(set.tests[0].subtest_cnt, 2, "subtest filters count"))
109 ASSERT_OK(strcmp("t", set.tests[0].name), "test name");
110 ASSERT_OK(strcmp("subtest1", set.tests[0].subtests[0]), "subtest name");
111 ASSERT_OK(strcmp("subtest2", set.tests[0].subtests[1]), "subtest name");
113 free_test_filter_set(&set);
116 static void test_parse_test_list_file(void)
118 struct test_filter_set set;
123 snprintf(tmpfile, sizeof(tmpfile), "/tmp/bpf_arg_parsing_test.XXXXXX");
124 fd = mkstemp(tmpfile);
125 if (!ASSERT_GE(fd, 0, "create tmp"))
128 fp = fdopen(fd, "w");
129 if (!ASSERT_NEQ(fp, NULL, "fdopen tmp")) {
134 fprintf(fp, "# comment\n");
135 fprintf(fp, " test_with_spaces \n");
136 fprintf(fp, "testA/subtest # comment\n");
137 fprintf(fp, "testB#comment with no space\n");
138 fprintf(fp, "testB # duplicate\n");
139 fprintf(fp, "testA/subtest # subtest duplicate\n");
140 fprintf(fp, "testA/subtest2\n");
141 fprintf(fp, "testC_no_eof_newline");
144 if (!ASSERT_OK(ferror(fp), "prepare tmp"))
147 init_test_filter_set(&set);
149 ASSERT_OK(parse_test_list_file(tmpfile, &set, true), "parse file");
151 ASSERT_EQ(set.cnt, 4, "test count");
152 ASSERT_OK(strcmp("test_with_spaces", set.tests[0].name), "test 0 name");
153 ASSERT_EQ(set.tests[0].subtest_cnt, 0, "test 0 subtest count");
154 ASSERT_OK(strcmp("testA", set.tests[1].name), "test 1 name");
155 ASSERT_EQ(set.tests[1].subtest_cnt, 2, "test 1 subtest count");
156 ASSERT_OK(strcmp("subtest", set.tests[1].subtests[0]), "test 1 subtest 0");
157 ASSERT_OK(strcmp("subtest2", set.tests[1].subtests[1]), "test 1 subtest 1");
158 ASSERT_OK(strcmp("testB", set.tests[2].name), "test 2 name");
159 ASSERT_OK(strcmp("testC_no_eof_newline", set.tests[3].name), "test 3 name");
161 free_test_filter_set(&set);
169 void test_arg_parsing(void)
171 if (test__start_subtest("test_parse_test_list"))
172 test_parse_test_list();
173 if (test__start_subtest("test_parse_test_list_file"))
174 test_parse_test_list_file();