~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/tools/testing/selftests/bpf/prog_tests/arg_parsing.c

Version: ~ [ linux-6.11.5 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.58 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.114 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.169 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.228 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.284 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.322 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.9 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  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 }
176 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php