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