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 14static int do_ut_all(struct cmd_tbl *cmdtp, int flag, int argc, 15 char *const argv[]); 16 17static int do_ut_info(struct cmd_tbl *cmdtp, int flag, int argc, 18 char *const argv[]); 19 20int cmd_ut_category(const char *name, const char *prefix, 21 struct unit_test *tests, int n_ents, 22 int argc, char *const argv[]) 23{ 24 const char *test_insert = NULL; 25 int runs_per_text = 1; 26 bool force_run = false; 27 int ret; 28 29 while (argc > 1 && *argv[1] == '-') { 30 const char *str = argv[1]; 31 32 switch (str[1]) { 33 case 'r': 34 runs_per_text = dectoul(str + 2, NULL); 35 break; 36 case 'f': 37 force_run = true; 38 break; 39 case 'I': 40 test_insert = str + 2; 41 break; 42 } 43 argv++; 44 argc--; 45 } 46 47 ret = ut_run_list(name, prefix, tests, n_ents, 48 cmd_arg1(argc, argv), runs_per_text, force_run, 49 test_insert); 50 51 return ret ? CMD_RET_FAILURE : 0; 52} 53 54static struct cmd_tbl cmd_ut_sub[] = { 55 U_BOOT_CMD_MKENT(all, CONFIG_SYS_MAXARGS, 1, do_ut_all, "", ""), 56 U_BOOT_CMD_MKENT(info, 1, 1, do_ut_info, "", ""), 57#ifdef CONFIG_CMD_BDI 58 U_BOOT_CMD_MKENT(bdinfo, CONFIG_SYS_MAXARGS, 1, do_ut_bdinfo, "", ""), 59#endif 60#ifdef CONFIG_UT_BOOTSTD 61 U_BOOT_CMD_MKENT(bootstd, CONFIG_SYS_MAXARGS, 1, do_ut_bootstd, 62 "", ""), 63#endif 64#ifdef CONFIG_CMDLINE 65 U_BOOT_CMD_MKENT(cmd, CONFIG_SYS_MAXARGS, 1, do_ut_cmd, "", ""), 66#endif 67 U_BOOT_CMD_MKENT(common, CONFIG_SYS_MAXARGS, 1, do_ut_common, "", ""), 68#if defined(CONFIG_UT_DM) 69 U_BOOT_CMD_MKENT(dm, CONFIG_SYS_MAXARGS, 1, do_ut_dm, "", ""), 70#endif 71#if defined(CONFIG_UT_ENV) 72 U_BOOT_CMD_MKENT(env, CONFIG_SYS_MAXARGS, 1, do_ut_env, "", ""), 73#endif 74 U_BOOT_CMD_MKENT(exit, CONFIG_SYS_MAXARGS, 1, do_ut_exit, "", ""), 75#ifdef CONFIG_CMD_FDT 76 U_BOOT_CMD_MKENT(fdt, CONFIG_SYS_MAXARGS, 1, do_ut_fdt, "", ""), 77#endif 78#ifdef CONFIG_CONSOLE_TRUETYPE 79 U_BOOT_CMD_MKENT(font, CONFIG_SYS_MAXARGS, 1, do_ut_font, "", ""), 80#endif 81#ifdef CONFIG_UT_OPTEE 82 U_BOOT_CMD_MKENT(optee, CONFIG_SYS_MAXARGS, 1, do_ut_optee, "", ""), 83#endif 84#ifdef CONFIG_UT_OVERLAY 85 U_BOOT_CMD_MKENT(overlay, CONFIG_SYS_MAXARGS, 1, do_ut_overlay, "", ""), 86#endif 87#ifdef CONFIG_UT_LIB 88 U_BOOT_CMD_MKENT(lib, CONFIG_SYS_MAXARGS, 1, do_ut_lib, "", ""), 89#endif 90#ifdef CONFIG_UT_LOG 91 U_BOOT_CMD_MKENT(log, CONFIG_SYS_MAXARGS, 1, do_ut_log, "", ""), 92#endif 93#if defined(CONFIG_SANDBOX) && defined(CONFIG_CMD_MBR) && defined(CONFIG_CMD_MMC) \ 94 && defined(CONFIG_MMC_SANDBOX) && defined(CONFIG_MMC_WRITE) 95 U_BOOT_CMD_MKENT(mbr, CONFIG_SYS_MAXARGS, 1, do_ut_mbr, "", ""), 96#endif 97 U_BOOT_CMD_MKENT(mem, CONFIG_SYS_MAXARGS, 1, do_ut_mem, "", ""), 98#if defined(CONFIG_SANDBOX) && defined(CONFIG_CMD_SETEXPR) 99 U_BOOT_CMD_MKENT(setexpr, CONFIG_SYS_MAXARGS, 1, do_ut_setexpr, "", 100 ""), 101#endif 102 U_BOOT_CMD_MKENT(print, CONFIG_SYS_MAXARGS, 1, do_ut_print, "", ""), 103#ifdef CONFIG_UT_TIME 104 U_BOOT_CMD_MKENT(time, CONFIG_SYS_MAXARGS, 1, do_ut_time, "", ""), 105#endif 106#if CONFIG_IS_ENABLED(UT_UNICODE) && !defined(API_BUILD) 107 U_BOOT_CMD_MKENT(unicode, CONFIG_SYS_MAXARGS, 1, do_ut_unicode, "", ""), 108#endif 109#ifdef CONFIG_MEASURED_BOOT 110 U_BOOT_CMD_MKENT(measurement, CONFIG_SYS_MAXARGS, 1, do_ut_measurement, 111 "", ""), 112#endif 113#ifdef CONFIG_SANDBOX 114 U_BOOT_CMD_MKENT(compression, CONFIG_SYS_MAXARGS, 1, do_ut_compression, 115 "", ""), 116 U_BOOT_CMD_MKENT(bloblist, CONFIG_SYS_MAXARGS, 1, do_ut_bloblist, 117 "", ""), 118 U_BOOT_CMD_MKENT(bootm, CONFIG_SYS_MAXARGS, 1, do_ut_bootm, "", ""), 119#endif 120 U_BOOT_CMD_MKENT(str, CONFIG_SYS_MAXARGS, 1, do_ut_str, "", ""), 121#ifdef CONFIG_CMD_ADDRMAP 122 U_BOOT_CMD_MKENT(addrmap, CONFIG_SYS_MAXARGS, 1, do_ut_addrmap, "", ""), 123#endif 124#if CONFIG_IS_ENABLED(HUSH_PARSER) 125 U_BOOT_CMD_MKENT(hush, CONFIG_SYS_MAXARGS, 1, do_ut_hush, "", ""), 126#endif 127#ifdef CONFIG_CMD_LOADM 128 U_BOOT_CMD_MKENT(loadm, CONFIG_SYS_MAXARGS, 1, do_ut_loadm, "", ""), 129#endif 130#ifdef CONFIG_CMD_PCI_MPS 131 U_BOOT_CMD_MKENT(pci_mps, CONFIG_SYS_MAXARGS, 1, do_ut_pci_mps, "", ""), 132#endif 133#ifdef CONFIG_CMD_SEAMA 134 U_BOOT_CMD_MKENT(seama, CONFIG_SYS_MAXARGS, 1, do_ut_seama, "", ""), 135#endif 136}; 137 138static int do_ut_all(struct cmd_tbl *cmdtp, int flag, int argc, 139 char *const argv[]) 140{ 141 int i; 142 int retval; 143 int any_fail = 0; 144 145 for (i = 1; i < ARRAY_SIZE(cmd_ut_sub); i++) { 146 printf("----Running %s tests----\n", cmd_ut_sub[i].name); 147 retval = cmd_ut_sub[i].cmd(cmdtp, flag, 1, &cmd_ut_sub[i].name); 148 if (!any_fail) 149 any_fail = retval; 150 } 151 152 return any_fail; 153} 154 155static int do_ut_info(struct cmd_tbl *cmdtp, int flag, int argc, 156 char *const argv[]) 157{ 158 printf("Test suites: %d\n", (int)ARRAY_SIZE(cmd_ut_sub)); 159 printf("Total tests: %d\n", (int)UNIT_TEST_ALL_COUNT()); 160 161 return 0; 162} 163 164static int do_ut(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[]) 165{ 166 struct cmd_tbl *cp; 167 168 if (argc < 2) 169 return CMD_RET_USAGE; 170 171 /* drop initial "ut" arg */ 172 argc--; 173 argv++; 174 175 cp = find_cmd_tbl(argv[0], cmd_ut_sub, ARRAY_SIZE(cmd_ut_sub)); 176 177 if (cp) 178 return cp->cmd(cmdtp, flag, argc, argv); 179 180 return CMD_RET_USAGE; 181} 182 183U_BOOT_LONGHELP(ut, 184 "[-r] [-f] [<suite>] - run unit tests\n" 185 " -r<runs> Number of times to run each test\n" 186 " -f Force 'manual' tests to run as well\n" 187 " <suite> Test suite to run, or all\n" 188 "\n" 189 "\nOptions for <suite>:" 190 "\nall - execute all enabled tests" 191 "\ninfo - show info about tests" 192#ifdef CONFIG_CMD_ADDRMAP 193 "\naddrmap - very basic test of addrmap command" 194#endif 195#ifdef CONFIG_CMD_BDI 196 "\nbdinfo - bdinfo command" 197#endif 198#ifdef CONFIG_SANDBOX 199 "\nbloblist - bloblist implementation" 200#endif 201#ifdef CONFIG_BOOTSTD 202 "\nbootstd - standard boot implementation" 203#endif 204#ifdef CONFIG_CMDLINE 205 "\ncmd - test various commands" 206#endif 207#ifdef CONFIG_SANDBOX 208 "\ncompression - compressors and bootm decompression" 209#endif 210#ifdef CONFIG_UT_DM 211 "\ndm - driver model" 212#endif 213#ifdef CONFIG_UT_ENV 214 "\nenv - environment" 215#endif 216#ifdef CONFIG_CMD_FDT 217 "\nfdt - fdt command" 218#endif 219#ifdef CONFIG_CONSOLE_TRUETYPE 220 "\nfont - font command" 221#endif 222#if CONFIG_IS_ENABLED(HUSH_PARSER) 223 "\nhush - Test hush behavior" 224#endif 225#ifdef CONFIG_CMD_LOADM 226 "\nloadm - loadm command parameters and loading memory blob" 227#endif 228#ifdef CONFIG_UT_LIB 229 "\nlib - library functions" 230#endif 231#ifdef CONFIG_UT_LOG 232 "\nlog - logging functions" 233#endif 234 "\nmem - memory-related commands" 235#ifdef CONFIG_UT_OPTEE 236 "\noptee - test OP-TEE" 237#endif 238#ifdef CONFIG_UT_OVERLAY 239 "\noverlay - device tree overlays" 240#endif 241#ifdef CONFIG_CMD_PCI_MPS 242 "\npci_mps - PCI Express Maximum Payload Size" 243#endif 244 "\nprint - printing things to the console" 245 "\nsetexpr - setexpr command" 246#ifdef CONFIG_SANDBOX 247 "\nstr - basic test of string functions" 248#endif 249#ifdef CONFIG_CMD_SEAMA 250 "\nseama - seama command parameters loading and decoding" 251#endif 252#ifdef CONFIG_UT_TIME 253 "\ntime - very basic test of time functions" 254#endif 255#if defined(CONFIG_UT_UNICODE) && \ 256 !defined(CONFIG_SPL_BUILD) && !defined(API_BUILD) 257 "\nunicode - Unicode functions" 258#endif 259 ); 260 261U_BOOT_CMD( 262 ut, CONFIG_SYS_MAXARGS, 1, do_ut, 263 "unit tests", ut_help_text 264); 265