test: Support tests which can only be run manually
[platform/kernel/u-boot.git] / test / cmd_ut.c
1 // SPDX-License-Identifier: GPL-2.0
2 /*
3  * (C) Copyright 2015
4  * Joe Hershberger, National Instruments, joe.hershberger@ni.com
5  */
6
7 #include <common.h>
8 #include <command.h>
9 #include <console.h>
10 #include <test/suites.h>
11 #include <test/test.h>
12 #include <test/ut.h>
13
14 static int do_ut_all(struct cmd_tbl *cmdtp, int flag, int argc,
15                      char *const argv[]);
16
17 int cmd_ut_category(const char *name, const char *prefix,
18                     struct unit_test *tests, int n_ents,
19                     int argc, char *const argv[])
20 {
21         int runs_per_text = 1;
22         bool force_run = false;
23         int ret;
24
25         while (argc > 1 && *argv[1] == '-') {
26                 const char *str = argv[1];
27
28                 switch (str[1]) {
29                 case 'r':
30                         runs_per_text = dectoul(str + 2, NULL);
31                         break;
32                 case 'f':
33                         force_run = true;
34                         break;
35                 }
36                 argv++;
37                 argc++;
38         }
39
40         ret = ut_run_list(name, prefix, tests, n_ents,
41                           argc > 1 ? argv[1] : NULL, runs_per_text, force_run);
42
43         return ret ? CMD_RET_FAILURE : 0;
44 }
45
46 static struct cmd_tbl cmd_ut_sub[] = {
47         U_BOOT_CMD_MKENT(all, CONFIG_SYS_MAXARGS, 1, do_ut_all, "", ""),
48 #ifdef CONFIG_BOOTSTD
49         U_BOOT_CMD_MKENT(bootstd, CONFIG_SYS_MAXARGS, 1, do_ut_bootstd,
50                          "", ""),
51 #endif
52         U_BOOT_CMD_MKENT(common, CONFIG_SYS_MAXARGS, 1, do_ut_common, "", ""),
53 #if defined(CONFIG_UT_DM)
54         U_BOOT_CMD_MKENT(dm, CONFIG_SYS_MAXARGS, 1, do_ut_dm, "", ""),
55 #endif
56 #if defined(CONFIG_UT_ENV)
57         U_BOOT_CMD_MKENT(env, CONFIG_SYS_MAXARGS, 1, do_ut_env, "", ""),
58 #endif
59 #ifdef CONFIG_CMD_FDT
60         U_BOOT_CMD_MKENT(fdt, CONFIG_SYS_MAXARGS, 1, do_ut_fdt, "", ""),
61 #endif
62 #ifdef CONFIG_CONSOLE_TRUETYPE
63         U_BOOT_CMD_MKENT(font, CONFIG_SYS_MAXARGS, 1, do_ut_font, "", ""),
64 #endif
65 #ifdef CONFIG_UT_OPTEE
66         U_BOOT_CMD_MKENT(optee, CONFIG_SYS_MAXARGS, 1, do_ut_optee, "", ""),
67 #endif
68 #ifdef CONFIG_UT_OVERLAY
69         U_BOOT_CMD_MKENT(overlay, CONFIG_SYS_MAXARGS, 1, do_ut_overlay, "", ""),
70 #endif
71 #ifdef CONFIG_UT_LIB
72         U_BOOT_CMD_MKENT(lib, CONFIG_SYS_MAXARGS, 1, do_ut_lib, "", ""),
73 #endif
74 #ifdef CONFIG_UT_LOG
75         U_BOOT_CMD_MKENT(log, CONFIG_SYS_MAXARGS, 1, do_ut_log, "", ""),
76 #endif
77         U_BOOT_CMD_MKENT(mem, CONFIG_SYS_MAXARGS, 1, do_ut_mem, "", ""),
78 #if defined(CONFIG_SANDBOX) && defined(CONFIG_CMD_SETEXPR)
79         U_BOOT_CMD_MKENT(setexpr, CONFIG_SYS_MAXARGS, 1, do_ut_setexpr, "",
80                          ""),
81 #endif
82         U_BOOT_CMD_MKENT(print, CONFIG_SYS_MAXARGS, 1, do_ut_print, "", ""),
83 #ifdef CONFIG_UT_TIME
84         U_BOOT_CMD_MKENT(time, CONFIG_SYS_MAXARGS, 1, do_ut_time, "", ""),
85 #endif
86 #if CONFIG_IS_ENABLED(UT_UNICODE) && !defined(API_BUILD)
87         U_BOOT_CMD_MKENT(unicode, CONFIG_SYS_MAXARGS, 1, do_ut_unicode, "", ""),
88 #endif
89 #ifdef CONFIG_SANDBOX
90         U_BOOT_CMD_MKENT(compression, CONFIG_SYS_MAXARGS, 1, do_ut_compression,
91                          "", ""),
92         U_BOOT_CMD_MKENT(bloblist, CONFIG_SYS_MAXARGS, 1, do_ut_bloblist,
93                          "", ""),
94         U_BOOT_CMD_MKENT(bootm, CONFIG_SYS_MAXARGS, 1, do_ut_bootm, "", ""),
95 #endif
96         U_BOOT_CMD_MKENT(str, CONFIG_SYS_MAXARGS, 1, do_ut_str, "", ""),
97 #ifdef CONFIG_CMD_ADDRMAP
98         U_BOOT_CMD_MKENT(addrmap, CONFIG_SYS_MAXARGS, 1, do_ut_addrmap, "", ""),
99 #endif
100 #ifdef CONFIG_CMD_LOADM
101         U_BOOT_CMD_MKENT(loadm, CONFIG_SYS_MAXARGS, 1, do_ut_loadm, "", ""),
102 #endif
103 };
104
105 static int do_ut_all(struct cmd_tbl *cmdtp, int flag, int argc,
106                      char *const argv[])
107 {
108         int i;
109         int retval;
110         int any_fail = 0;
111
112         for (i = 1; i < ARRAY_SIZE(cmd_ut_sub); i++) {
113                 printf("----Running %s tests----\n", cmd_ut_sub[i].name);
114                 retval = cmd_ut_sub[i].cmd(cmdtp, flag, 1, &cmd_ut_sub[i].name);
115                 if (!any_fail)
116                         any_fail = retval;
117         }
118
119         return any_fail;
120 }
121
122 static int do_ut(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
123 {
124         struct cmd_tbl *cp;
125
126         if (argc < 2)
127                 return CMD_RET_USAGE;
128
129         /* drop initial "ut" arg */
130         argc--;
131         argv++;
132
133         cp = find_cmd_tbl(argv[0], cmd_ut_sub, ARRAY_SIZE(cmd_ut_sub));
134
135         if (cp)
136                 return cp->cmd(cmdtp, flag, argc, argv);
137
138         return CMD_RET_USAGE;
139 }
140
141 #ifdef CONFIG_SYS_LONGHELP
142 static char ut_help_text[] =
143         "all - execute all enabled tests\n"
144 #ifdef CONFIG_SANDBOX
145         "ut bloblist - Test bloblist implementation\n"
146         "ut compression - Test compressors and bootm decompression\n"
147 #endif
148 #ifdef CONFIG_BOOTSTD
149         "ut bootstd - Test standard boot implementation\n"
150 #endif
151 #ifdef CONFIG_UT_DM
152         "ut dm [test-name]\n"
153 #endif
154 #ifdef CONFIG_UT_ENV
155         "ut env [test-name]\n"
156 #endif
157 #ifdef CONFIG_CMD_FDT
158         "ut fdt [test-name] - test of the fdt command\n"
159 #endif
160 #ifdef CONFIG_CONSOLE_TRUETYPE
161         "ut font [test-name] - test of the font command\n"
162 #endif
163 #ifdef CONFIG_UT_LIB
164         "ut lib [test-name] - test library functions\n"
165 #endif
166 #ifdef CONFIG_UT_LOG
167         "ut log [test-name] - test logging functions\n"
168 #endif
169         "ut mem [test-name] - test memory-related commands\n"
170 #ifdef CONFIG_UT_OPTEE
171         "ut optee [test-name]\n"
172 #endif
173 #ifdef CONFIG_UT_OVERLAY
174         "ut overlay [test-name]\n"
175 #endif
176         "ut print [test-name]  - test printing\n"
177         "ut setexpr [test-name] - test setexpr command\n"
178 #ifdef CONFIG_SANDBOX
179         "ut str - Basic test of string functions\n"
180 #endif
181 #ifdef CONFIG_UT_TIME
182         "ut time - Very basic test of time functions\n"
183 #endif
184 #if defined(CONFIG_UT_UNICODE) && \
185         !defined(CONFIG_SPL_BUILD) && !defined(API_BUILD)
186         "ut unicode [test-name] - test Unicode functions\n"
187 #endif
188 #ifdef CONFIG_CMD_ADDRMAP
189         "ut addrmap - Very basic test of addrmap command\n"
190 #endif
191 #ifdef CONFIG_CMD_LOADM
192         "ut loadm [test-name]- test of parameters and load memory blob\n"
193 #endif
194         "All commands accept an optional [-r<runs>] flag before [test-name], to\n"
195         "run each test multiple times (<runs> is in decimal)";
196 #endif /* CONFIG_SYS_LONGHELP */
197
198 U_BOOT_CMD(
199         ut, CONFIG_SYS_MAXARGS, 1, do_ut,
200         "unit tests", ut_help_text
201 );