xref: /openbmc/u-boot/test/command_ut.c (revision 83d290c56fab2d38cd1ab4c4cc7099559c1d5046)
1*83d290c5STom Rini // SPDX-License-Identifier: GPL-2.0+
2a72007d9SSimon Glass /*
3a72007d9SSimon Glass  * Copyright (c) 2012, The Chromium Authors
4a72007d9SSimon Glass  */
5a72007d9SSimon Glass 
6a72007d9SSimon Glass #define DEBUG
7a72007d9SSimon Glass 
8a72007d9SSimon Glass #include <common.h>
9a72007d9SSimon Glass 
10a72007d9SSimon Glass static const char test_cmd[] = "setenv list 1\n setenv list ${list}2; "
11a72007d9SSimon Glass 		"setenv list ${list}3\0"
12a72007d9SSimon Glass 		"setenv list ${list}4";
13a72007d9SSimon Glass 
do_ut_cmd(cmd_tbl_t * cmdtp,int flag,int argc,char * const argv[])14a72007d9SSimon Glass static int do_ut_cmd(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
15a72007d9SSimon Glass {
16a72007d9SSimon Glass 	printf("%s: Testing commands\n", __func__);
1767486728SStephen Warren 	run_command("env default -f -a", 0);
18a72007d9SSimon Glass 
19a72007d9SSimon Glass 	/* commands separated by \n */
20a72007d9SSimon Glass 	run_command_list("setenv list 1\n setenv list ${list}1", -1, 0);
2100caae6dSSimon Glass 	assert(!strcmp("11", env_get("list")));
22a72007d9SSimon Glass 
23a72007d9SSimon Glass 	/* command followed by \n and nothing else */
24a72007d9SSimon Glass 	run_command_list("setenv list 1${list}\n", -1, 0);
2500caae6dSSimon Glass 	assert(!strcmp("111", env_get("list")));
26a72007d9SSimon Glass 
27a72007d9SSimon Glass 	/* a command string with \0 in it. Stuff after \0 should be ignored */
28a72007d9SSimon Glass 	run_command("setenv list", 0);
29a72007d9SSimon Glass 	run_command_list(test_cmd, sizeof(test_cmd), 0);
3000caae6dSSimon Glass 	assert(!strcmp("123", env_get("list")));
31a72007d9SSimon Glass 
32a72007d9SSimon Glass 	/*
33a72007d9SSimon Glass 	 * a command list where we limit execution to only the first command
34a72007d9SSimon Glass 	 * using the length parameter.
35a72007d9SSimon Glass 	 */
36a72007d9SSimon Glass 	run_command_list("setenv list 1\n setenv list ${list}2; "
37a72007d9SSimon Glass 		"setenv list ${list}3", strlen("setenv list 1"), 0);
3800caae6dSSimon Glass 	assert(!strcmp("1", env_get("list")));
39a72007d9SSimon Glass 
4093ce7561SSimon Glass 	assert(run_command("false", 0) == 1);
4193ce7561SSimon Glass 	assert(run_command("echo", 0) == 0);
4293ce7561SSimon Glass 	assert(run_command_list("false", -1, 0) == 1);
4393ce7561SSimon Glass 	assert(run_command_list("echo", -1, 0) == 0);
4493ce7561SSimon Glass 
45f1f9d4faSMasahiro Yamada #ifdef CONFIG_HUSH_PARSER
4687b6398bSSimon Glass 	run_command("setenv foo 'setenv black 1\nsetenv adder 2'", 0);
4787b6398bSSimon Glass 	run_command("run foo", 0);
4800caae6dSSimon Glass 	assert(env_get("black") != NULL);
4900caae6dSSimon Glass 	assert(!strcmp("1", env_get("black")));
5000caae6dSSimon Glass 	assert(env_get("adder") != NULL);
5100caae6dSSimon Glass 	assert(!strcmp("2", env_get("adder")));
52f2afe701SStephen Warren #endif
53f2afe701SStephen Warren 
54484408fbSRabin Vincent 	assert(run_command("", 0) == 0);
55484408fbSRabin Vincent 	assert(run_command(" ", 0) == 0);
56484408fbSRabin Vincent 
572302b3abSRabin Vincent 	assert(run_command("'", 0) == 1);
582302b3abSRabin Vincent 
59a72007d9SSimon Glass 	printf("%s: Everything went swimmingly\n", __func__);
60a72007d9SSimon Glass 	return 0;
61a72007d9SSimon Glass }
62a72007d9SSimon Glass 
63a72007d9SSimon Glass U_BOOT_CMD(
64a72007d9SSimon Glass 	ut_cmd,	5,	1,	do_ut_cmd,
65a72007d9SSimon Glass 	"Very basic test of command parsers",
66a72007d9SSimon Glass 	""
67a72007d9SSimon Glass );
68