brintos

brintos / linux-shallow public Read only

0
0
Text · 5.7 KiB · bb143de Raw
176 lines · c
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}176