Linux Audio

Check our new training course

Loading...
Note: File does not exist in v3.15.
  1// SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause)
  2
  3#include "test_progs.h"
  4#include "testing_helpers.h"
  5
  6static void init_test_filter_set(struct test_filter_set *set)
  7{
  8	set->cnt = 0;
  9	set->tests = NULL;
 10}
 11
 12static 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
 27static 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");
112error:
113	free_test_filter_set(&set);
114}
115
116static 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
163out_fclose:
164	fclose(fp);
165out_remove:
166	remove(tmpfile);
167}
168
169void 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}