183d290c5STom Rini // SPDX-License-Identifier: GPL-2.0
2c617ede0SJoe Hershberger /*
3c617ede0SJoe Hershberger * (C) Copyright 2015
4c617ede0SJoe Hershberger * Joe Hershberger, National Instruments, joe.hershberger@ni.com
5c617ede0SJoe Hershberger */
6c617ede0SJoe Hershberger
7c617ede0SJoe Hershberger #include <common.h>
8c617ede0SJoe Hershberger #include <command.h>
9c617ede0SJoe Hershberger #include <test/suites.h>
104d869c1eSSimon Glass #include <test/test.h>
11c617ede0SJoe Hershberger
12c617ede0SJoe Hershberger static int do_ut_all(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]);
13c617ede0SJoe Hershberger
cmd_ut_category(const char * name,struct unit_test * tests,int n_ents,int argc,char * const argv[])144d869c1eSSimon Glass int cmd_ut_category(const char *name, struct unit_test *tests, int n_ents,
154d869c1eSSimon Glass int argc, char * const argv[])
164d869c1eSSimon Glass {
174d869c1eSSimon Glass struct unit_test_state uts = { .fail_count = 0 };
184d869c1eSSimon Glass struct unit_test *test;
194d869c1eSSimon Glass
204d869c1eSSimon Glass if (argc == 1)
214d869c1eSSimon Glass printf("Running %d %s tests\n", n_ents, name);
224d869c1eSSimon Glass
234d869c1eSSimon Glass for (test = tests; test < tests + n_ents; test++) {
244d869c1eSSimon Glass if (argc > 1 && strcmp(argv[1], test->name))
254d869c1eSSimon Glass continue;
264d869c1eSSimon Glass printf("Test: %s\n", test->name);
274d869c1eSSimon Glass
284d869c1eSSimon Glass uts.start = mallinfo();
294d869c1eSSimon Glass
304d869c1eSSimon Glass test->func(&uts);
314d869c1eSSimon Glass }
324d869c1eSSimon Glass
334d869c1eSSimon Glass printf("Failures: %d\n", uts.fail_count);
344d869c1eSSimon Glass
354d869c1eSSimon Glass return uts.fail_count ? CMD_RET_FAILURE : 0;
364d869c1eSSimon Glass }
374d869c1eSSimon Glass
38c617ede0SJoe Hershberger static cmd_tbl_t cmd_ut_sub[] = {
39c617ede0SJoe Hershberger U_BOOT_CMD_MKENT(all, CONFIG_SYS_MAXARGS, 1, do_ut_all, "", ""),
4040441e0bSJoe Hershberger #if defined(CONFIG_UT_DM)
4140441e0bSJoe Hershberger U_BOOT_CMD_MKENT(dm, CONFIG_SYS_MAXARGS, 1, do_ut_dm, "", ""),
4240441e0bSJoe Hershberger #endif
43421f86f3SJoe Hershberger #if defined(CONFIG_UT_ENV)
44421f86f3SJoe Hershberger U_BOOT_CMD_MKENT(env, CONFIG_SYS_MAXARGS, 1, do_ut_env, "", ""),
45421f86f3SJoe Hershberger #endif
46f2a9942fSMaxime Ripard #ifdef CONFIG_UT_OVERLAY
47f2a9942fSMaxime Ripard U_BOOT_CMD_MKENT(overlay, CONFIG_SYS_MAXARGS, 1, do_ut_overlay, "", ""),
48f2a9942fSMaxime Ripard #endif
49*2dd0111aSHeinrich Schuchardt #ifdef CONFIG_UT_LIB
50*2dd0111aSHeinrich Schuchardt U_BOOT_CMD_MKENT(lib, CONFIG_SYS_MAXARGS, 1, do_ut_lib, "", ""),
51*2dd0111aSHeinrich Schuchardt #endif
52c812f722SJoe Hershberger #ifdef CONFIG_UT_TIME
53c812f722SJoe Hershberger U_BOOT_CMD_MKENT(time, CONFIG_SYS_MAXARGS, 1, do_ut_time, "", ""),
54c812f722SJoe Hershberger #endif
55f11a164bSHeinrich Schuchardt #if CONFIG_IS_ENABLED(UT_UNICODE) && !defined(API_BUILD)
56f11a164bSHeinrich Schuchardt U_BOOT_CMD_MKENT(unicode, CONFIG_SYS_MAXARGS, 1, do_ut_unicode, "", ""),
57f11a164bSHeinrich Schuchardt #endif
580aac10f2SSimon Glass #ifdef CONFIG_SANDBOX
590aac10f2SSimon Glass U_BOOT_CMD_MKENT(compression, CONFIG_SYS_MAXARGS, 1, do_ut_compression,
600aac10f2SSimon Glass "", ""),
61919e7a8fSSimon Glass U_BOOT_CMD_MKENT(bloblist, CONFIG_SYS_MAXARGS, 1, do_ut_bloblist,
62919e7a8fSSimon Glass "", ""),
630aac10f2SSimon Glass #endif
64c617ede0SJoe Hershberger };
65c617ede0SJoe Hershberger
do_ut_all(cmd_tbl_t * cmdtp,int flag,int argc,char * const argv[])66c617ede0SJoe Hershberger static int do_ut_all(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
67c617ede0SJoe Hershberger {
68c617ede0SJoe Hershberger int i;
69c617ede0SJoe Hershberger int retval;
70c617ede0SJoe Hershberger int any_fail = 0;
71c617ede0SJoe Hershberger
72c617ede0SJoe Hershberger for (i = 1; i < ARRAY_SIZE(cmd_ut_sub); i++) {
73c617ede0SJoe Hershberger printf("----Running %s tests----\n", cmd_ut_sub[i].name);
74c617ede0SJoe Hershberger retval = cmd_ut_sub[i].cmd(cmdtp, flag, 1, &cmd_ut_sub[i].name);
75c617ede0SJoe Hershberger if (!any_fail)
76c617ede0SJoe Hershberger any_fail = retval;
77c617ede0SJoe Hershberger }
78c617ede0SJoe Hershberger
79c617ede0SJoe Hershberger return any_fail;
80c617ede0SJoe Hershberger }
81c617ede0SJoe Hershberger
do_ut(cmd_tbl_t * cmdtp,int flag,int argc,char * const argv[])82c617ede0SJoe Hershberger static int do_ut(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
83c617ede0SJoe Hershberger {
84c617ede0SJoe Hershberger cmd_tbl_t *cp;
85c617ede0SJoe Hershberger
86c617ede0SJoe Hershberger if (argc < 2)
87c617ede0SJoe Hershberger return CMD_RET_USAGE;
88c617ede0SJoe Hershberger
89c617ede0SJoe Hershberger /* drop initial "ut" arg */
90c617ede0SJoe Hershberger argc--;
91c617ede0SJoe Hershberger argv++;
92c617ede0SJoe Hershberger
93c617ede0SJoe Hershberger cp = find_cmd_tbl(argv[0], cmd_ut_sub, ARRAY_SIZE(cmd_ut_sub));
94c617ede0SJoe Hershberger
95c617ede0SJoe Hershberger if (cp)
96c617ede0SJoe Hershberger return cp->cmd(cmdtp, flag, argc, argv);
97c617ede0SJoe Hershberger
98c617ede0SJoe Hershberger return CMD_RET_USAGE;
99c617ede0SJoe Hershberger }
100c617ede0SJoe Hershberger
101c617ede0SJoe Hershberger #ifdef CONFIG_SYS_LONGHELP
102c617ede0SJoe Hershberger static char ut_help_text[] =
103c617ede0SJoe Hershberger "all - execute all enabled tests\n"
104f11a164bSHeinrich Schuchardt #ifdef CONFIG_SANDBOX
105919e7a8fSSimon Glass "ut bloblist - Test bloblist implementation\n"
106f11a164bSHeinrich Schuchardt "ut compression - Test compressors and bootm decompression\n"
107f11a164bSHeinrich Schuchardt #endif
10840441e0bSJoe Hershberger #ifdef CONFIG_UT_DM
10940441e0bSJoe Hershberger "ut dm [test-name]\n"
11040441e0bSJoe Hershberger #endif
111421f86f3SJoe Hershberger #ifdef CONFIG_UT_ENV
112421f86f3SJoe Hershberger "ut env [test-name]\n"
113421f86f3SJoe Hershberger #endif
114*2dd0111aSHeinrich Schuchardt #ifdef CONFIG_UT_LIB
115*2dd0111aSHeinrich Schuchardt "ut lib [test-name] - test library functions\n"
116*2dd0111aSHeinrich Schuchardt #endif
117f2a9942fSMaxime Ripard #ifdef CONFIG_UT_OVERLAY
118f2a9942fSMaxime Ripard "ut overlay [test-name]\n"
119f2a9942fSMaxime Ripard #endif
120c812f722SJoe Hershberger #ifdef CONFIG_UT_TIME
121c812f722SJoe Hershberger "ut time - Very basic test of time functions\n"
122c812f722SJoe Hershberger #endif
123f11a164bSHeinrich Schuchardt #if defined(CONFIG_UT_UNICODE) && \
124f11a164bSHeinrich Schuchardt !defined(CONFIG_SPL_BUILD) && !defined(API_BUILD)
125f11a164bSHeinrich Schuchardt "ut unicode [test-name] - test Unicode functions\n"
1260aac10f2SSimon Glass #endif
127c617ede0SJoe Hershberger ;
128f11a164bSHeinrich Schuchardt #endif /* CONFIG_SYS_LONGHELP */
129c617ede0SJoe Hershberger
130c617ede0SJoe Hershberger U_BOOT_CMD(
131c617ede0SJoe Hershberger ut, CONFIG_SYS_MAXARGS, 1, do_ut,
132c617ede0SJoe Hershberger "unit tests", ut_help_text
133c617ede0SJoe Hershberger );
134