Tom Rini | 10e4779 | 2018-05-06 17:58:06 -0400 | [diff] [blame] | 1 | // SPDX-License-Identifier: GPL-2.0 |
Joe Hershberger | 11dd7cc | 2015-05-20 14:27:28 -0500 | [diff] [blame] | 2 | /* |
| 3 | * (C) Copyright 2015 |
| 4 | * Joe Hershberger, National Instruments, joe.hershberger@ni.com |
Joe Hershberger | 11dd7cc | 2015-05-20 14:27:28 -0500 | [diff] [blame] | 5 | */ |
| 6 | |
Joe Hershberger | 11dd7cc | 2015-05-20 14:27:28 -0500 | [diff] [blame] | 7 | #include <command.h> |
Simon Glass | 6db8ea5 | 2020-07-28 19:41:13 -0600 | [diff] [blame] | 8 | #include <console.h> |
Tom Rini | dec7ea0 | 2024-05-20 13:35:03 -0600 | [diff] [blame] | 9 | #include <vsprintf.h> |
Joe Hershberger | 11dd7cc | 2015-05-20 14:27:28 -0500 | [diff] [blame] | 10 | #include <test/suites.h> |
Simon Glass | 81cbe1c | 2017-11-25 11:57:29 -0700 | [diff] [blame] | 11 | #include <test/test.h> |
Simon Glass | 5722fb2 | 2021-03-07 17:34:47 -0700 | [diff] [blame] | 12 | #include <test/ut.h> |
Joe Hershberger | 11dd7cc | 2015-05-20 14:27:28 -0500 | [diff] [blame] | 13 | |
Simon Glass | 78fd76b | 2025-01-20 14:25:33 -0700 | [diff] [blame] | 14 | /** |
| 15 | * struct suite - A set of tests for a certain topic |
| 16 | * |
| 17 | * All tests end up in a single 'struct unit_test' linker-list array, in order |
| 18 | * of the suite they are in |
| 19 | * |
| 20 | * @name: Name of suite |
| 21 | * @start: First test in suite |
| 22 | * @end: End test in suite (points to the first test in the next suite) |
| 23 | * @cmd: Command to use to run the suite |
| 24 | */ |
| 25 | struct suite { |
| 26 | const char *name; |
| 27 | struct unit_test *start; |
| 28 | struct unit_test *end; |
| 29 | ut_cmd_func cmd; |
| 30 | }; |
| 31 | |
Simon Glass | 6685ece | 2025-01-20 14:25:58 -0700 | [diff] [blame] | 32 | static int do_ut_all(struct unit_test_state *uts, struct cmd_tbl *cmdtp, |
| 33 | int flag, int argc, char *const argv[]); |
Joe Hershberger | 11dd7cc | 2015-05-20 14:27:28 -0500 | [diff] [blame] | 34 | |
Simon Glass | fb998c2 | 2022-10-29 19:47:12 -0600 | [diff] [blame] | 35 | static int do_ut_info(struct cmd_tbl *cmdtp, int flag, int argc, |
| 36 | char *const argv[]); |
| 37 | |
Simon Glass | 6685ece | 2025-01-20 14:25:58 -0700 | [diff] [blame] | 38 | int cmd_ut_category(struct unit_test_state *uts, const char *name, |
| 39 | const char *prefix, struct unit_test *tests, int n_ents, |
Simon Glass | ed38aef | 2020-05-10 11:40:03 -0600 | [diff] [blame] | 40 | int argc, char *const argv[]) |
Simon Glass | 81cbe1c | 2017-11-25 11:57:29 -0700 | [diff] [blame] | 41 | { |
Simon Glass | 85ba7c3 | 2022-10-29 19:47:13 -0600 | [diff] [blame] | 42 | const char *test_insert = NULL; |
Simon Glass | 91a187b | 2022-08-01 07:58:45 -0600 | [diff] [blame] | 43 | int runs_per_text = 1; |
Simon Glass | 1f1614b | 2022-10-20 18:22:50 -0600 | [diff] [blame] | 44 | bool force_run = false; |
Simon Glass | 5722fb2 | 2021-03-07 17:34:47 -0700 | [diff] [blame] | 45 | int ret; |
Simon Glass | 81cbe1c | 2017-11-25 11:57:29 -0700 | [diff] [blame] | 46 | |
Simon Glass | 1f1614b | 2022-10-20 18:22:50 -0600 | [diff] [blame] | 47 | while (argc > 1 && *argv[1] == '-') { |
| 48 | const char *str = argv[1]; |
| 49 | |
| 50 | switch (str[1]) { |
| 51 | case 'r': |
| 52 | runs_per_text = dectoul(str + 2, NULL); |
| 53 | break; |
| 54 | case 'f': |
| 55 | force_run = true; |
| 56 | break; |
Simon Glass | 85ba7c3 | 2022-10-29 19:47:13 -0600 | [diff] [blame] | 57 | case 'I': |
| 58 | test_insert = str + 2; |
| 59 | break; |
Simon Glass | 1f1614b | 2022-10-20 18:22:50 -0600 | [diff] [blame] | 60 | } |
Simon Glass | 91a187b | 2022-08-01 07:58:45 -0600 | [diff] [blame] | 61 | argv++; |
Simon Glass | 85ba7c3 | 2022-10-29 19:47:13 -0600 | [diff] [blame] | 62 | argc--; |
Simon Glass | 91a187b | 2022-08-01 07:58:45 -0600 | [diff] [blame] | 63 | } |
| 64 | |
Simon Glass | 6685ece | 2025-01-20 14:25:58 -0700 | [diff] [blame] | 65 | ret = ut_run_list(uts, name, prefix, tests, n_ents, |
Simon Glass | 793a98e | 2023-11-18 14:05:20 -0700 | [diff] [blame] | 66 | cmd_arg1(argc, argv), runs_per_text, force_run, |
Simon Glass | 85ba7c3 | 2022-10-29 19:47:13 -0600 | [diff] [blame] | 67 | test_insert); |
Simon Glass | 81cbe1c | 2017-11-25 11:57:29 -0700 | [diff] [blame] | 68 | |
Simon Glass | 5722fb2 | 2021-03-07 17:34:47 -0700 | [diff] [blame] | 69 | return ret ? CMD_RET_FAILURE : 0; |
Simon Glass | 81cbe1c | 2017-11-25 11:57:29 -0700 | [diff] [blame] | 70 | } |
| 71 | |
Simon Glass | 78fd76b | 2025-01-20 14:25:33 -0700 | [diff] [blame] | 72 | /* declare linker-list symbols for the start and end of a suite */ |
| 73 | #define SUITE_DECL(_name) \ |
| 74 | ll_start_decl(suite_start_ ## _name, struct unit_test, ut_ ## _name); \ |
| 75 | ll_end_decl(suite_end_ ## _name, struct unit_test, ut_ ## _name) |
| 76 | |
| 77 | /* declare a test suite which uses a subcommand to run */ |
| 78 | #define SUITE_CMD(_name, _cmd_func) { \ |
| 79 | #_name, \ |
| 80 | suite_start_ ## _name, \ |
| 81 | suite_end_ ## _name, \ |
| 82 | _cmd_func, \ |
| 83 | } |
| 84 | |
| 85 | /* declare a test suite which can be run directly without a subcommand */ |
| 86 | #define SUITE(_name) { \ |
| 87 | #_name, \ |
| 88 | suite_start_ ## _name, \ |
| 89 | suite_end_ ## _name, \ |
| 90 | NULL, \ |
| 91 | } |
| 92 | |
Simon Glass | 4c99070 | 2025-01-20 14:26:03 -0700 | [diff] [blame^] | 93 | SUITE_DECL(addrmap); |
Simon Glass | 78fd76b | 2025-01-20 14:25:33 -0700 | [diff] [blame] | 94 | SUITE_DECL(bdinfo); |
Simon Glass | 4c99070 | 2025-01-20 14:26:03 -0700 | [diff] [blame^] | 95 | SUITE_DECL(bloblist); |
| 96 | SUITE_DECL(bootm); |
Simon Glass | 78fd76b | 2025-01-20 14:25:33 -0700 | [diff] [blame] | 97 | SUITE_DECL(bootstd); |
| 98 | SUITE_DECL(cmd); |
| 99 | SUITE_DECL(common); |
| 100 | SUITE_DECL(dm); |
| 101 | SUITE_DECL(env); |
| 102 | SUITE_DECL(exit); |
| 103 | SUITE_DECL(fdt); |
| 104 | SUITE_DECL(font); |
Simon Glass | 4c99070 | 2025-01-20 14:26:03 -0700 | [diff] [blame^] | 105 | SUITE_DECL(hush); |
Simon Glass | 78fd76b | 2025-01-20 14:25:33 -0700 | [diff] [blame] | 106 | SUITE_DECL(lib); |
Simon Glass | 4c99070 | 2025-01-20 14:26:03 -0700 | [diff] [blame^] | 107 | SUITE_DECL(loadm); |
Simon Glass | 78fd76b | 2025-01-20 14:25:33 -0700 | [diff] [blame] | 108 | SUITE_DECL(log); |
| 109 | SUITE_DECL(mbr); |
Simon Glass | 78fd76b | 2025-01-20 14:25:33 -0700 | [diff] [blame] | 110 | SUITE_DECL(measurement); |
Simon Glass | 4c99070 | 2025-01-20 14:26:03 -0700 | [diff] [blame^] | 111 | SUITE_DECL(mem); |
| 112 | SUITE_DECL(optee); |
| 113 | SUITE_DECL(overlay); |
Simon Glass | 78fd76b | 2025-01-20 14:25:33 -0700 | [diff] [blame] | 114 | SUITE_DECL(pci_mps); |
| 115 | SUITE_DECL(seama); |
Simon Glass | 4c99070 | 2025-01-20 14:26:03 -0700 | [diff] [blame^] | 116 | SUITE_DECL(setexpr); |
Simon Glass | 78fd76b | 2025-01-20 14:25:33 -0700 | [diff] [blame] | 117 | SUITE_DECL(upl); |
| 118 | |
| 119 | static struct suite suites[] = { |
Simon Glass | 4c99070 | 2025-01-20 14:26:03 -0700 | [diff] [blame^] | 120 | SUITE(addrmap), |
Simon Glass | e1dc050 | 2025-01-20 14:25:34 -0700 | [diff] [blame] | 121 | SUITE(bdinfo), |
Simon Glass | 4c99070 | 2025-01-20 14:26:03 -0700 | [diff] [blame^] | 122 | SUITE(bloblist), |
| 123 | SUITE(bootm), |
Simon Glass | 804aa37 | 2023-10-01 19:15:15 -0600 | [diff] [blame] | 124 | #ifdef CONFIG_UT_BOOTSTD |
Simon Glass | 78fd76b | 2025-01-20 14:25:33 -0700 | [diff] [blame] | 125 | SUITE_CMD(bootstd, do_ut_bootstd), |
Simon Glass | b255efc | 2022-04-24 23:31:24 -0600 | [diff] [blame] | 126 | #endif |
Simon Glass | c235657 | 2025-01-20 14:25:35 -0700 | [diff] [blame] | 127 | SUITE(cmd), |
Simon Glass | bc39468a | 2025-01-20 14:25:36 -0700 | [diff] [blame] | 128 | SUITE(common), |
Simon Glass | 82f00f2 | 2025-01-20 14:25:37 -0700 | [diff] [blame] | 129 | SUITE(dm), |
Simon Glass | 2ff779d | 2025-01-20 14:25:38 -0700 | [diff] [blame] | 130 | SUITE(env), |
Simon Glass | 3e5f32d | 2025-01-20 14:25:39 -0700 | [diff] [blame] | 131 | SUITE(exit), |
Simon Glass | 936b69e | 2025-01-20 14:25:40 -0700 | [diff] [blame] | 132 | SUITE(fdt), |
Simon Glass | 1b0b3f5 | 2025-01-20 14:25:41 -0700 | [diff] [blame] | 133 | SUITE(font), |
Simon Glass | 4c99070 | 2025-01-20 14:26:03 -0700 | [diff] [blame^] | 134 | SUITE(hush), |
| 135 | SUITE(lib), |
| 136 | SUITE(loadm), |
| 137 | SUITE(log), |
| 138 | SUITE(mbr), |
| 139 | SUITE(measurement), |
| 140 | SUITE(mem), |
Heiko Stuebner | 1c9bb9b | 2019-10-23 16:46:41 +0200 | [diff] [blame] | 141 | #ifdef CONFIG_UT_OPTEE |
Simon Glass | 78fd76b | 2025-01-20 14:25:33 -0700 | [diff] [blame] | 142 | SUITE_CMD(optee, do_ut_optee), |
Heiko Stuebner | 1c9bb9b | 2019-10-23 16:46:41 +0200 | [diff] [blame] | 143 | #endif |
Maxime Ripard | 0e31a11 | 2016-07-05 10:26:46 +0200 | [diff] [blame] | 144 | #ifdef CONFIG_UT_OVERLAY |
Simon Glass | 78fd76b | 2025-01-20 14:25:33 -0700 | [diff] [blame] | 145 | SUITE_CMD(overlay, do_ut_overlay), |
Maxime Ripard | 0e31a11 | 2016-07-05 10:26:46 +0200 | [diff] [blame] | 146 | #endif |
Simon Glass | c6cede3 | 2025-01-20 14:25:53 -0700 | [diff] [blame] | 147 | SUITE(pci_mps), |
Simon Glass | f0764dd | 2025-01-20 14:25:54 -0700 | [diff] [blame] | 148 | SUITE(seama), |
Simon Glass | 4c99070 | 2025-01-20 14:26:03 -0700 | [diff] [blame^] | 149 | SUITE(setexpr), |
Simon Glass | 0cf497c | 2025-01-20 14:25:55 -0700 | [diff] [blame] | 150 | SUITE(upl), |
Joe Hershberger | 11dd7cc | 2015-05-20 14:27:28 -0500 | [diff] [blame] | 151 | }; |
| 152 | |
Simon Glass | a3ce129 | 2025-01-20 14:25:57 -0700 | [diff] [blame] | 153 | /** |
| 154 | * has_tests() - Check if a suite has tests, i.e. is supported in this build |
| 155 | * |
| 156 | * If the suite is run using a command, we have to assume that tests may be |
| 157 | * present, since we have no visibility |
| 158 | * |
| 159 | * @ste: Suite to check |
| 160 | * Return: true if supported, false if not |
| 161 | */ |
| 162 | static bool has_tests(struct suite *ste) |
| 163 | { |
| 164 | int n_ents = ste->end - ste->start; |
| 165 | |
| 166 | return n_ents || ste->cmd; |
| 167 | } |
| 168 | |
Simon Glass | 78fd76b | 2025-01-20 14:25:33 -0700 | [diff] [blame] | 169 | /** run_suite() - Run a suite of tests */ |
Simon Glass | 6685ece | 2025-01-20 14:25:58 -0700 | [diff] [blame] | 170 | static int run_suite(struct unit_test_state *uts, struct suite *ste, |
| 171 | struct cmd_tbl *cmdtp, int flag, int argc, |
| 172 | char *const argv[]) |
Simon Glass | 78fd76b | 2025-01-20 14:25:33 -0700 | [diff] [blame] | 173 | { |
| 174 | int ret; |
| 175 | |
| 176 | if (ste->cmd) { |
Simon Glass | 6685ece | 2025-01-20 14:25:58 -0700 | [diff] [blame] | 177 | ret = ste->cmd(uts, cmdtp, flag, argc, argv); |
Simon Glass | 78fd76b | 2025-01-20 14:25:33 -0700 | [diff] [blame] | 178 | } else { |
| 179 | int n_ents = ste->end - ste->start; |
| 180 | char prefix[30]; |
| 181 | |
| 182 | /* use a standard prefix */ |
| 183 | snprintf(prefix, sizeof(prefix), "%s_test", ste->name); |
Simon Glass | 6685ece | 2025-01-20 14:25:58 -0700 | [diff] [blame] | 184 | ret = cmd_ut_category(uts, ste->name, prefix, ste->start, |
| 185 | n_ents, argc, argv); |
Simon Glass | 78fd76b | 2025-01-20 14:25:33 -0700 | [diff] [blame] | 186 | } |
| 187 | |
| 188 | return ret; |
| 189 | } |
| 190 | |
Simon Glass | 6685ece | 2025-01-20 14:25:58 -0700 | [diff] [blame] | 191 | static int do_ut_all(struct unit_test_state *uts, struct cmd_tbl *cmdtp, |
| 192 | int flag, int argc, char *const argv[]) |
Joe Hershberger | 11dd7cc | 2015-05-20 14:27:28 -0500 | [diff] [blame] | 193 | { |
| 194 | int i; |
| 195 | int retval; |
| 196 | int any_fail = 0; |
| 197 | |
Simon Glass | 78fd76b | 2025-01-20 14:25:33 -0700 | [diff] [blame] | 198 | for (i = 0; i < ARRAY_SIZE(suites); i++) { |
| 199 | struct suite *ste = &suites[i]; |
| 200 | char *const argv[] = {(char *)ste->name, NULL}; |
| 201 | |
Simon Glass | a3ce129 | 2025-01-20 14:25:57 -0700 | [diff] [blame] | 202 | if (has_tests(ste)) { |
| 203 | printf("----Running %s tests----\n", ste->name); |
Simon Glass | 6685ece | 2025-01-20 14:25:58 -0700 | [diff] [blame] | 204 | retval = run_suite(uts, ste, cmdtp, flag, 1, argv); |
Simon Glass | a3ce129 | 2025-01-20 14:25:57 -0700 | [diff] [blame] | 205 | if (!any_fail) |
| 206 | any_fail = retval; |
| 207 | } |
Joe Hershberger | 11dd7cc | 2015-05-20 14:27:28 -0500 | [diff] [blame] | 208 | } |
Simon Glass | fb82a04 | 2025-01-20 14:26:02 -0700 | [diff] [blame] | 209 | ut_report(&uts->total, uts->run_count); |
Joe Hershberger | 11dd7cc | 2015-05-20 14:27:28 -0500 | [diff] [blame] | 210 | |
| 211 | return any_fail; |
| 212 | } |
| 213 | |
Simon Glass | fb998c2 | 2022-10-29 19:47:12 -0600 | [diff] [blame] | 214 | static int do_ut_info(struct cmd_tbl *cmdtp, int flag, int argc, |
| 215 | char *const argv[]) |
| 216 | { |
Simon Glass | a3ce129 | 2025-01-20 14:25:57 -0700 | [diff] [blame] | 217 | int suite_count, i; |
Simon Glass | cfb38f8 | 2025-01-20 14:25:30 -0700 | [diff] [blame] | 218 | const char *flags; |
| 219 | |
Simon Glass | a3ce129 | 2025-01-20 14:25:57 -0700 | [diff] [blame] | 220 | for (suite_count = 0, i = 0; i < ARRAY_SIZE(suites); i++) { |
| 221 | struct suite *ste = &suites[i]; |
| 222 | |
| 223 | if (has_tests(ste)) |
| 224 | suite_count++; |
| 225 | } |
| 226 | |
| 227 | printf("Test suites: %d\n", suite_count); |
Simon Glass | fb998c2 | 2022-10-29 19:47:12 -0600 | [diff] [blame] | 228 | printf("Total tests: %d\n", (int)UNIT_TEST_ALL_COUNT()); |
| 229 | |
Simon Glass | cfb38f8 | 2025-01-20 14:25:30 -0700 | [diff] [blame] | 230 | flags = cmd_arg1(argc, argv); |
| 231 | if (flags && !strcmp("-s", flags)) { |
| 232 | int i; |
| 233 | |
| 234 | puts("\nTests Suite\n"); |
| 235 | puts("----- -----\n"); |
Simon Glass | 7d4ae01 | 2025-01-20 14:25:56 -0700 | [diff] [blame] | 236 | for (i = 0; i < ARRAY_SIZE(suites); i++) { |
Simon Glass | 78fd76b | 2025-01-20 14:25:33 -0700 | [diff] [blame] | 237 | struct suite *ste = &suites[i]; |
| 238 | long n_ent = ste->end - ste->start; |
| 239 | |
| 240 | if (n_ent) |
| 241 | printf("%5ld %s\n", n_ent, ste->name); |
Simon Glass | a3ce129 | 2025-01-20 14:25:57 -0700 | [diff] [blame] | 242 | else if (ste->cmd) |
Simon Glass | 78fd76b | 2025-01-20 14:25:33 -0700 | [diff] [blame] | 243 | printf("%5s %s\n", "?", ste->name); |
| 244 | } |
Simon Glass | cfb38f8 | 2025-01-20 14:25:30 -0700 | [diff] [blame] | 245 | } |
| 246 | |
Simon Glass | fb998c2 | 2022-10-29 19:47:12 -0600 | [diff] [blame] | 247 | return 0; |
| 248 | } |
| 249 | |
Simon Glass | 78fd76b | 2025-01-20 14:25:33 -0700 | [diff] [blame] | 250 | static struct suite *find_suite(const char *name) |
| 251 | { |
| 252 | struct suite *ste; |
| 253 | int i; |
| 254 | |
| 255 | for (i = 0, ste = suites; i < ARRAY_SIZE(suites); i++, ste++) { |
| 256 | if (!strcmp(ste->name, name)) |
| 257 | return ste; |
| 258 | } |
| 259 | |
| 260 | return NULL; |
| 261 | } |
| 262 | |
Simon Glass | ed38aef | 2020-05-10 11:40:03 -0600 | [diff] [blame] | 263 | static int do_ut(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[]) |
Joe Hershberger | 11dd7cc | 2015-05-20 14:27:28 -0500 | [diff] [blame] | 264 | { |
Simon Glass | 6685ece | 2025-01-20 14:25:58 -0700 | [diff] [blame] | 265 | struct unit_test_state uts; |
Simon Glass | 78fd76b | 2025-01-20 14:25:33 -0700 | [diff] [blame] | 266 | struct suite *ste; |
| 267 | const char *name; |
| 268 | int ret; |
Joe Hershberger | 11dd7cc | 2015-05-20 14:27:28 -0500 | [diff] [blame] | 269 | |
| 270 | if (argc < 2) |
| 271 | return CMD_RET_USAGE; |
| 272 | |
| 273 | /* drop initial "ut" arg */ |
| 274 | argc--; |
| 275 | argv++; |
| 276 | |
Simon Glass | 6685ece | 2025-01-20 14:25:58 -0700 | [diff] [blame] | 277 | ut_init_state(&uts); |
Simon Glass | 78fd76b | 2025-01-20 14:25:33 -0700 | [diff] [blame] | 278 | name = argv[0]; |
| 279 | if (!strcmp(name, "all")) { |
Simon Glass | 6685ece | 2025-01-20 14:25:58 -0700 | [diff] [blame] | 280 | ret = do_ut_all(&uts, cmdtp, flag, argc, argv); |
Simon Glass | 78fd76b | 2025-01-20 14:25:33 -0700 | [diff] [blame] | 281 | } else if (!strcmp(name, "info")) { |
| 282 | ret = do_ut_info(cmdtp, flag, argc, argv); |
| 283 | } else { |
| 284 | ste = find_suite(argv[0]); |
| 285 | if (!ste) { |
| 286 | printf("Suite '%s' not found\n", argv[0]); |
| 287 | return CMD_RET_FAILURE; |
Simon Glass | a3ce129 | 2025-01-20 14:25:57 -0700 | [diff] [blame] | 288 | } else if (!has_tests(ste)) { |
| 289 | /* perhaps a Kconfig option needs to be set? */ |
| 290 | printf("Suite '%s' is not enabled\n", argv[0]); |
| 291 | return CMD_RET_FAILURE; |
Simon Glass | 78fd76b | 2025-01-20 14:25:33 -0700 | [diff] [blame] | 292 | } |
Joe Hershberger | 11dd7cc | 2015-05-20 14:27:28 -0500 | [diff] [blame] | 293 | |
Simon Glass | 6685ece | 2025-01-20 14:25:58 -0700 | [diff] [blame] | 294 | ret = run_suite(&uts, ste, cmdtp, flag, argc, argv); |
Simon Glass | 78fd76b | 2025-01-20 14:25:33 -0700 | [diff] [blame] | 295 | } |
| 296 | if (ret) |
| 297 | return ret; |
Simon Glass | 6685ece | 2025-01-20 14:25:58 -0700 | [diff] [blame] | 298 | ut_uninit_state(&uts); |
Joe Hershberger | 11dd7cc | 2015-05-20 14:27:28 -0500 | [diff] [blame] | 299 | |
Simon Glass | 78fd76b | 2025-01-20 14:25:33 -0700 | [diff] [blame] | 300 | return 0; |
Joe Hershberger | 11dd7cc | 2015-05-20 14:27:28 -0500 | [diff] [blame] | 301 | } |
| 302 | |
Tom Rini | 03f146c | 2023-10-07 15:13:08 -0400 | [diff] [blame] | 303 | U_BOOT_LONGHELP(ut, |
Simon Glass | 154bb8e | 2022-10-29 19:47:10 -0600 | [diff] [blame] | 304 | "[-r] [-f] [<suite>] - run unit tests\n" |
| 305 | " -r<runs> Number of times to run each test\n" |
| 306 | " -f Force 'manual' tests to run as well\n" |
| 307 | " <suite> Test suite to run, or all\n" |
| 308 | "\n" |
Simon Glass | fb998c2 | 2022-10-29 19:47:12 -0600 | [diff] [blame] | 309 | "\nOptions for <suite>:" |
Simon Glass | 154bb8e | 2022-10-29 19:47:10 -0600 | [diff] [blame] | 310 | "\nall - execute all enabled tests" |
Simon Glass | cfb38f8 | 2025-01-20 14:25:30 -0700 | [diff] [blame] | 311 | "\ninfo [-s] - show info about tests [and suites]" |
Simon Glass | 154bb8e | 2022-10-29 19:47:10 -0600 | [diff] [blame] | 312 | #ifdef CONFIG_CMD_ADDRMAP |
| 313 | "\naddrmap - very basic test of addrmap command" |
| 314 | #endif |
Marek Vasut | 2cd173c | 2023-05-31 03:03:58 +0200 | [diff] [blame] | 315 | #ifdef CONFIG_CMD_BDI |
| 316 | "\nbdinfo - bdinfo command" |
| 317 | #endif |
Heinrich Schuchardt | b8b6c81 | 2018-08-31 21:31:28 +0200 | [diff] [blame] | 318 | #ifdef CONFIG_SANDBOX |
Simon Glass | 154bb8e | 2022-10-29 19:47:10 -0600 | [diff] [blame] | 319 | "\nbloblist - bloblist implementation" |
Heinrich Schuchardt | b8b6c81 | 2018-08-31 21:31:28 +0200 | [diff] [blame] | 320 | #endif |
Simon Glass | b255efc | 2022-04-24 23:31:24 -0600 | [diff] [blame] | 321 | #ifdef CONFIG_BOOTSTD |
Simon Glass | 154bb8e | 2022-10-29 19:47:10 -0600 | [diff] [blame] | 322 | "\nbootstd - standard boot implementation" |
| 323 | #endif |
Simon Glass | 621a97e | 2023-10-01 19:15:12 -0600 | [diff] [blame] | 324 | #ifdef CONFIG_CMDLINE |
| 325 | "\ncmd - test various commands" |
| 326 | #endif |
Simon Glass | 3394c3c | 2024-11-02 13:36:56 -0600 | [diff] [blame] | 327 | "\ncommon - tests for common/ directory" |
Joe Hershberger | 9dc1d71 | 2015-05-20 14:27:29 -0500 | [diff] [blame] | 328 | #ifdef CONFIG_UT_DM |
Simon Glass | 154bb8e | 2022-10-29 19:47:10 -0600 | [diff] [blame] | 329 | "\ndm - driver model" |
Joe Hershberger | 9dc1d71 | 2015-05-20 14:27:29 -0500 | [diff] [blame] | 330 | #endif |
Joe Hershberger | 26e038f | 2015-05-20 14:27:36 -0500 | [diff] [blame] | 331 | #ifdef CONFIG_UT_ENV |
Simon Glass | 154bb8e | 2022-10-29 19:47:10 -0600 | [diff] [blame] | 332 | "\nenv - environment" |
Joe Hershberger | 26e038f | 2015-05-20 14:27:36 -0500 | [diff] [blame] | 333 | #endif |
Simon Glass | f3c6a1d | 2022-07-13 06:06:59 -0600 | [diff] [blame] | 334 | #ifdef CONFIG_CMD_FDT |
Simon Glass | 154bb8e | 2022-10-29 19:47:10 -0600 | [diff] [blame] | 335 | "\nfdt - fdt command" |
Simon Glass | f3c6a1d | 2022-07-13 06:06:59 -0600 | [diff] [blame] | 336 | #endif |
Simon Glass | 9e972c3 | 2022-10-06 08:36:16 -0600 | [diff] [blame] | 337 | #ifdef CONFIG_CONSOLE_TRUETYPE |
Marek Vasut | ef9eb6c | 2023-08-13 00:16:41 +0200 | [diff] [blame] | 338 | "\nfont - font command" |
Simon Glass | 154bb8e | 2022-10-29 19:47:10 -0600 | [diff] [blame] | 339 | #endif |
Francis Laniel | 2dba91a | 2023-12-22 22:02:21 +0100 | [diff] [blame] | 340 | #if CONFIG_IS_ENABLED(HUSH_PARSER) |
| 341 | "\nhush - Test hush behavior" |
| 342 | #endif |
Simon Glass | 154bb8e | 2022-10-29 19:47:10 -0600 | [diff] [blame] | 343 | #ifdef CONFIG_CMD_LOADM |
| 344 | "\nloadm - loadm command parameters and loading memory blob" |
Simon Glass | 9e972c3 | 2022-10-06 08:36:16 -0600 | [diff] [blame] | 345 | #endif |
Heinrich Schuchardt | f77a635 | 2019-01-30 07:53:31 +0100 | [diff] [blame] | 346 | #ifdef CONFIG_UT_LIB |
Simon Glass | 154bb8e | 2022-10-29 19:47:10 -0600 | [diff] [blame] | 347 | "\nlib - library functions" |
Heinrich Schuchardt | f77a635 | 2019-01-30 07:53:31 +0100 | [diff] [blame] | 348 | #endif |
Heinrich Schuchardt | f433d50 | 2020-02-26 21:48:18 +0100 | [diff] [blame] | 349 | #ifdef CONFIG_UT_LOG |
Simon Glass | 154bb8e | 2022-10-29 19:47:10 -0600 | [diff] [blame] | 350 | "\nlog - logging functions" |
Heinrich Schuchardt | f433d50 | 2020-02-26 21:48:18 +0100 | [diff] [blame] | 351 | #endif |
Simon Glass | 154bb8e | 2022-10-29 19:47:10 -0600 | [diff] [blame] | 352 | "\nmem - memory-related commands" |
Heiko Stuebner | 1c9bb9b | 2019-10-23 16:46:41 +0200 | [diff] [blame] | 353 | #ifdef CONFIG_UT_OPTEE |
Simon Glass | 154bb8e | 2022-10-29 19:47:10 -0600 | [diff] [blame] | 354 | "\noptee - test OP-TEE" |
Heiko Stuebner | 1c9bb9b | 2019-10-23 16:46:41 +0200 | [diff] [blame] | 355 | #endif |
Maxime Ripard | 0e31a11 | 2016-07-05 10:26:46 +0200 | [diff] [blame] | 356 | #ifdef CONFIG_UT_OVERLAY |
Simon Glass | 154bb8e | 2022-10-29 19:47:10 -0600 | [diff] [blame] | 357 | "\noverlay - device tree overlays" |
Maxime Ripard | 0e31a11 | 2016-07-05 10:26:46 +0200 | [diff] [blame] | 358 | #endif |
Stephen Carlson | e5c05ae | 2023-03-10 11:07:15 -0800 | [diff] [blame] | 359 | #ifdef CONFIG_CMD_PCI_MPS |
| 360 | "\npci_mps - PCI Express Maximum Payload Size" |
| 361 | #endif |
Simon Glass | 154bb8e | 2022-10-29 19:47:10 -0600 | [diff] [blame] | 362 | "\nsetexpr - setexpr command" |
Linus Walleij | bef3925 | 2023-02-01 00:16:13 +0100 | [diff] [blame] | 363 | #ifdef CONFIG_CMD_SEAMA |
| 364 | "\nseama - seama command parameters loading and decoding" |
| 365 | #endif |
Tom Rini | 03f146c | 2023-10-07 15:13:08 -0400 | [diff] [blame] | 366 | ); |
Joe Hershberger | 11dd7cc | 2015-05-20 14:27:28 -0500 | [diff] [blame] | 367 | |
| 368 | U_BOOT_CMD( |
| 369 | ut, CONFIG_SYS_MAXARGS, 1, do_ut, |
| 370 | "unit tests", ut_help_text |
| 371 | ); |