xref: /aosp_15_r20/external/trace-cmd/utest/trace-utest.c (revision 58e6ee5f017f6a8912852c892d18457e4bafb554)
1*58e6ee5fSAndroid Build Coastguard Worker // SPDX-License-Identifier: LGPL-2.1
2*58e6ee5fSAndroid Build Coastguard Worker /*
3*58e6ee5fSAndroid Build Coastguard Worker  * Copyright (C) 2020, VMware, Tzvetomir Stoyanov <[email protected]>
4*58e6ee5fSAndroid Build Coastguard Worker  *
5*58e6ee5fSAndroid Build Coastguard Worker  */
6*58e6ee5fSAndroid Build Coastguard Worker #include <stdio.h>
7*58e6ee5fSAndroid Build Coastguard Worker #include <unistd.h>
8*58e6ee5fSAndroid Build Coastguard Worker #include <getopt.h>
9*58e6ee5fSAndroid Build Coastguard Worker #include <stdlib.h>
10*58e6ee5fSAndroid Build Coastguard Worker 
11*58e6ee5fSAndroid Build Coastguard Worker #include <CUnit/CUnit.h>
12*58e6ee5fSAndroid Build Coastguard Worker #include <CUnit/Basic.h>
13*58e6ee5fSAndroid Build Coastguard Worker 
14*58e6ee5fSAndroid Build Coastguard Worker #include "trace-utest.h"
15*58e6ee5fSAndroid Build Coastguard Worker 
16*58e6ee5fSAndroid Build Coastguard Worker enum unit_tests {
17*58e6ee5fSAndroid Build Coastguard Worker 	RUN_NONE	= 0,
18*58e6ee5fSAndroid Build Coastguard Worker 	RUN_TRACEFS	= (1 << 0),
19*58e6ee5fSAndroid Build Coastguard Worker 	RUN_ALL		= 0xFFFF
20*58e6ee5fSAndroid Build Coastguard Worker };
21*58e6ee5fSAndroid Build Coastguard Worker 
print_help(char ** argv)22*58e6ee5fSAndroid Build Coastguard Worker static void print_help(char **argv)
23*58e6ee5fSAndroid Build Coastguard Worker {
24*58e6ee5fSAndroid Build Coastguard Worker 	printf("Usage: %s [OPTIONS]\n", basename(argv[0]));
25*58e6ee5fSAndroid Build Coastguard Worker 	printf("\t-s, --silent\tPrint test summary\n");
26*58e6ee5fSAndroid Build Coastguard Worker 	printf("\t-r, --run test\tRun specific test:\n");
27*58e6ee5fSAndroid Build Coastguard Worker 	printf("\t\t  tracefs   run libtracefs tests\n");
28*58e6ee5fSAndroid Build Coastguard Worker 	printf("\t-h, --help\tPrint usage information\n");
29*58e6ee5fSAndroid Build Coastguard Worker 	exit(0);
30*58e6ee5fSAndroid Build Coastguard Worker }
31*58e6ee5fSAndroid Build Coastguard Worker 
main(int argc,char ** argv)32*58e6ee5fSAndroid Build Coastguard Worker int main(int argc, char **argv)
33*58e6ee5fSAndroid Build Coastguard Worker {
34*58e6ee5fSAndroid Build Coastguard Worker 	CU_BasicRunMode verbose = CU_BRM_VERBOSE;
35*58e6ee5fSAndroid Build Coastguard Worker 	enum unit_tests tests = RUN_NONE;
36*58e6ee5fSAndroid Build Coastguard Worker 
37*58e6ee5fSAndroid Build Coastguard Worker 	for (;;) {
38*58e6ee5fSAndroid Build Coastguard Worker 		int c;
39*58e6ee5fSAndroid Build Coastguard Worker 		int index = 0;
40*58e6ee5fSAndroid Build Coastguard Worker 		const char *opts = "+hsr:";
41*58e6ee5fSAndroid Build Coastguard Worker 		static struct option long_options[] = {
42*58e6ee5fSAndroid Build Coastguard Worker 			{"silent", no_argument, NULL, 's'},
43*58e6ee5fSAndroid Build Coastguard Worker 			{"run", required_argument, NULL, 'r'},
44*58e6ee5fSAndroid Build Coastguard Worker 			{"help", no_argument, NULL, 'h'},
45*58e6ee5fSAndroid Build Coastguard Worker 			{NULL, 0, NULL, 0}
46*58e6ee5fSAndroid Build Coastguard Worker 		};
47*58e6ee5fSAndroid Build Coastguard Worker 
48*58e6ee5fSAndroid Build Coastguard Worker 		c = getopt_long (argc, argv, opts, long_options, &index);
49*58e6ee5fSAndroid Build Coastguard Worker 		if (c == -1)
50*58e6ee5fSAndroid Build Coastguard Worker 			break;
51*58e6ee5fSAndroid Build Coastguard Worker 		switch (c) {
52*58e6ee5fSAndroid Build Coastguard Worker 		case 'r':
53*58e6ee5fSAndroid Build Coastguard Worker 			if (strcmp(optarg, "tracefs") == 0)
54*58e6ee5fSAndroid Build Coastguard Worker 				tests |= RUN_TRACEFS;
55*58e6ee5fSAndroid Build Coastguard Worker 			else
56*58e6ee5fSAndroid Build Coastguard Worker 				print_help(argv);
57*58e6ee5fSAndroid Build Coastguard Worker 			break;
58*58e6ee5fSAndroid Build Coastguard Worker 		case 's':
59*58e6ee5fSAndroid Build Coastguard Worker 			verbose = CU_BRM_SILENT;
60*58e6ee5fSAndroid Build Coastguard Worker 			break;
61*58e6ee5fSAndroid Build Coastguard Worker 		case 'h':
62*58e6ee5fSAndroid Build Coastguard Worker 		default:
63*58e6ee5fSAndroid Build Coastguard Worker 			print_help(argv);
64*58e6ee5fSAndroid Build Coastguard Worker 			break;
65*58e6ee5fSAndroid Build Coastguard Worker 		}
66*58e6ee5fSAndroid Build Coastguard Worker 	}
67*58e6ee5fSAndroid Build Coastguard Worker 
68*58e6ee5fSAndroid Build Coastguard Worker 	if (tests == RUN_NONE)
69*58e6ee5fSAndroid Build Coastguard Worker 		tests = RUN_ALL;
70*58e6ee5fSAndroid Build Coastguard Worker 
71*58e6ee5fSAndroid Build Coastguard Worker 	if (CU_initialize_registry() != CUE_SUCCESS) {
72*58e6ee5fSAndroid Build Coastguard Worker 		printf("Test registry cannot be initialized\n");
73*58e6ee5fSAndroid Build Coastguard Worker 		return -1;
74*58e6ee5fSAndroid Build Coastguard Worker 	}
75*58e6ee5fSAndroid Build Coastguard Worker 
76*58e6ee5fSAndroid Build Coastguard Worker 	if (tests & RUN_TRACEFS)
77*58e6ee5fSAndroid Build Coastguard Worker 		test_tracefs_lib();
78*58e6ee5fSAndroid Build Coastguard Worker 
79*58e6ee5fSAndroid Build Coastguard Worker 	CU_basic_set_mode(verbose);
80*58e6ee5fSAndroid Build Coastguard Worker 	CU_basic_run_tests();
81*58e6ee5fSAndroid Build Coastguard Worker 	CU_cleanup_registry();
82*58e6ee5fSAndroid Build Coastguard Worker 	return 0;
83*58e6ee5fSAndroid Build Coastguard Worker }
84