mirror of
https://github.com/u-boot/u-boot.git
synced 2025-04-26 23:41:50 +00:00

The command test was the very first test written in U-Boot, some 12 years ago. It predates the unit-test subsystem and was never converted over. There is no particular need for the command test to have its own command. It is also confusing to have it separate from the normal test suites. At present this test is not run in CI. Move it into the cmd suite instead, updating it to become a unit test. One of the checks is dropped to avoid an error. Signed-off-by: Simon Glass <sjg@chromium.org> Tested-by: Tom Rini <trini@konsulko.com> # rpi_3, rpi_4, rpi_arm64, am64x_evm_a53, am64-sk
107 lines
3 KiB
C
107 lines
3 KiB
C
// SPDX-License-Identifier: GPL-2.0+
|
|
/*
|
|
* Copyright (c) 2012, The Chromium Authors
|
|
*/
|
|
|
|
#define DEBUG
|
|
|
|
#include <command.h>
|
|
#include <env.h>
|
|
#include <log.h>
|
|
#include <string.h>
|
|
#include <linux/errno.h>
|
|
#include <test/cmd.h>
|
|
#include <test/ut.h>
|
|
|
|
static const char test_cmd[] = "setenv list 1\n setenv list ${list}2; "
|
|
"setenv list ${list}3\0"
|
|
"setenv list ${list}4";
|
|
|
|
static int command_test(struct unit_test_state *uts)
|
|
{
|
|
char long_str[CONFIG_SYS_CBSIZE + 42];
|
|
|
|
printf("%s: Testing commands\n", __func__);
|
|
run_command("env default -f -a", 0);
|
|
|
|
/* commands separated by \n */
|
|
run_command_list("setenv list 1\n setenv list ${list}1", -1, 0);
|
|
assert(!strcmp("11", env_get("list")));
|
|
|
|
/* command followed by \n and nothing else */
|
|
run_command_list("setenv list 1${list}\n", -1, 0);
|
|
assert(!strcmp("111", env_get("list")));
|
|
|
|
/* a command string with \0 in it. Stuff after \0 should be ignored */
|
|
run_command("setenv list", 0);
|
|
run_command_list(test_cmd, sizeof(test_cmd), 0);
|
|
assert(!strcmp("123", env_get("list")));
|
|
|
|
/*
|
|
* a command list where we limit execution to only the first command
|
|
* using the length parameter.
|
|
*/
|
|
run_command_list("setenv list 1\n setenv list ${list}2; "
|
|
"setenv list ${list}3", strlen("setenv list 1"), 0);
|
|
assert(!strcmp("1", env_get("list")));
|
|
|
|
assert(run_command("false", 0) == 1);
|
|
assert(run_command("echo", 0) == 0);
|
|
assert(run_command_list("false", -1, 0) == 1);
|
|
assert(run_command_list("echo", -1, 0) == 0);
|
|
|
|
#ifdef CONFIG_HUSH_PARSER
|
|
run_command("setenv foo 'setenv black 1\nsetenv adder 2'", 0);
|
|
run_command("run foo", 0);
|
|
assert(env_get("black") != NULL);
|
|
assert(!strcmp("1", env_get("black")));
|
|
assert(env_get("adder") != NULL);
|
|
assert(!strcmp("2", env_get("adder")));
|
|
#endif
|
|
|
|
assert(run_command("", 0) == 0);
|
|
assert(run_command(" ", 0) == 0);
|
|
|
|
assert(run_command("'", 0) == 1);
|
|
|
|
/* Variadic function test-cases */
|
|
#pragma GCC diagnostic push
|
|
#pragma GCC diagnostic ignored "-Wformat-zero-length"
|
|
assert(run_commandf("") == 0);
|
|
#pragma GCC diagnostic pop
|
|
assert(run_commandf(" ") == 0);
|
|
assert(run_commandf("'") == 1);
|
|
|
|
assert(run_commandf("env %s %s", "delete -f", "list") == 0);
|
|
/*
|
|
* Expected: "## Error: "list" not defined"
|
|
* (disabled to avoid pytest bailing out)
|
|
*
|
|
* assert(run_commandf("printenv list") == 1);
|
|
*/
|
|
|
|
memset(long_str, 'x', sizeof(long_str));
|
|
assert(run_commandf("Truncation case: %s", long_str) == -ENOSPC);
|
|
|
|
if (IS_ENABLED(CONFIG_HUSH_PARSER)) {
|
|
assert(run_commandf("env %s %s %s %s", "delete -f", "adder",
|
|
"black", "foo") == 0);
|
|
assert(run_commandf("setenv foo 'setenv %s 1\nsetenv %s 2'",
|
|
"black", "adder") == 0);
|
|
run_command("run foo", 0);
|
|
assert(env_get("black"));
|
|
assert(!strcmp("1", env_get("black")));
|
|
assert(env_get("adder"));
|
|
assert(!strcmp("2", env_get("adder")));
|
|
}
|
|
|
|
/* Clean up before exit */
|
|
run_command("env default -f -a", 0);
|
|
|
|
/* put back the FDT environment */
|
|
ut_assertok(env_set("from_fdt", "yes"));
|
|
|
|
printf("%s: Everything went swimmingly\n", __func__);
|
|
return 0;
|
|
}
|
|
CMD_TEST(command_test, 0);
|