]> Git Repo - J-linux.git/blob - tools/testing/selftests/bpf/prog_tests/arg_parsing.c
Merge tag 'vfs-6.13-rc7.fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/vfs/vfs
[J-linux.git] / tools / testing / selftests / bpf / prog_tests / arg_parsing.c
1 // SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause)
2
3 #include "test_progs.h"
4 #include "testing_helpers.h"
5
6 static void init_test_filter_set(struct test_filter_set *set)
7 {
8         set->cnt = 0;
9         set->tests = NULL;
10 }
11
12 static void free_test_filter_set(struct test_filter_set *set)
13 {
14         int i, j;
15
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);
21         }
22
23         free(set->tests);
24         init_test_filter_set(set);
25 }
26
27 static void test_parse_test_list(void)
28 {
29         struct test_filter_set set;
30
31         init_test_filter_set(&set);
32
33         ASSERT_OK(parse_test_list("arg_parsing", &set, true), "parsing");
34         if (!ASSERT_EQ(set.cnt, 1, "test filters count"))
35                 goto error;
36         if (!ASSERT_OK_PTR(set.tests, "test filters initialized"))
37                 goto error;
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);
41
42         ASSERT_OK(parse_test_list("arg_parsing,bpf_cookie", &set, true),
43                   "parsing");
44         if (!ASSERT_EQ(set.cnt, 2, "count of test filters"))
45                 goto error;
46         if (!ASSERT_OK_PTR(set.tests, "test filters initialized"))
47                 goto error;
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);
53
54         ASSERT_OK(parse_test_list("arg_parsing/arg_parsing,bpf_cookie",
55                                   &set,
56                                   true),
57                   "parsing");
58         if (!ASSERT_EQ(set.cnt, 2, "count of test filters"))
59                 goto error;
60         if (!ASSERT_OK_PTR(set.tests, "test filters initialized"))
61                 goto error;
62         if (!ASSERT_EQ(set.tests[0].subtest_cnt, 1, "subtest filters count"))
63                 goto error;
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]),
67                   "subtest name");
68         ASSERT_OK(strcmp("bpf_cookie", set.tests[1].name), "test name");
69         free_test_filter_set(&set);
70
71         ASSERT_OK(parse_test_list("arg_parsing/arg_parsing", &set, true),
72                   "parsing");
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"))
76                 goto error;
77         if (!ASSERT_OK_PTR(set.tests, "test filters initialized"))
78                 goto error;
79         if (!ASSERT_EQ(set.tests[0].subtest_cnt, 1, "subtest filters count"))
80                 goto error;
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]),
85                   "subtest name");
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);
89
90         ASSERT_OK(parse_test_list("bpf_cookie/trace", &set, false), "parsing");
91         if (!ASSERT_EQ(set.cnt, 1, "count of test filters"))
92                 goto error;
93         if (!ASSERT_OK_PTR(set.tests, "test filters initialized"))
94                 goto error;
95         if (!ASSERT_EQ(set.tests[0].subtest_cnt, 1, "subtest filters count"))
96                 goto error;
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);
100
101         ASSERT_OK(parse_test_list("t/subtest1,t/subtest2", &set, true),
102                   "parsing");
103         if (!ASSERT_EQ(set.cnt, 1, "count of test filters"))
104                 goto error;
105         if (!ASSERT_OK_PTR(set.tests, "test filters initialized"))
106                 goto error;
107         if (!ASSERT_EQ(set.tests[0].subtest_cnt, 2, "subtest filters count"))
108                 goto error;
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");
112 error:
113         free_test_filter_set(&set);
114 }
115
116 static void test_parse_test_list_file(void)
117 {
118         struct test_filter_set set;
119         char tmpfile[80];
120         FILE *fp;
121         int fd;
122
123         snprintf(tmpfile, sizeof(tmpfile), "/tmp/bpf_arg_parsing_test.XXXXXX");
124         fd = mkstemp(tmpfile);
125         if (!ASSERT_GE(fd, 0, "create tmp"))
126                 return;
127
128         fp = fdopen(fd, "w");
129         if (!ASSERT_NEQ(fp, NULL, "fdopen tmp")) {
130                 close(fd);
131                 goto out_remove;
132         }
133
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");
142         fflush(fp);
143
144         if (!ASSERT_OK(ferror(fp), "prepare tmp"))
145                 goto out_fclose;
146
147         init_test_filter_set(&set);
148
149         ASSERT_OK(parse_test_list_file(tmpfile, &set, true), "parse file");
150
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");
160
161         free_test_filter_set(&set);
162
163 out_fclose:
164         fclose(fp);
165 out_remove:
166         remove(tmpfile);
167 }
168
169 void test_arg_parsing(void)
170 {
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();
175 }
This page took 0.037931 seconds and 4 git commands to generate.