mirror of
https://xff.cz/git/u-boot/
synced 2025-10-27 08:33:10 +01:00
When bringing in the series 'arm: dts: am62-beagleplay: Fix Beagleplay Ethernet"' I failed to notice that b4 noticed it was based on next and so took that as the base commit and merged that part of next to master. This reverts commitc8ffd1356d, reversing changes made to2ee6f3a5f7. Reported-by: Jonas Karlman <jonas@kwiboo.se> Signed-off-by: Tom Rini <trini@konsulko.com>
105 lines
2.9 KiB
C
105 lines
2.9 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>
|
|
|
|
static const char test_cmd[] = "setenv list 1\n setenv list ${list}2; "
|
|
"setenv list ${list}3\0"
|
|
"setenv list ${list}4";
|
|
|
|
static int do_ut_cmd(struct cmd_tbl *cmdtp, int flag, int argc,
|
|
char *const argv[])
|
|
{
|
|
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" */
|
|
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);
|
|
|
|
printf("%s: Everything went swimmingly\n", __func__);
|
|
return 0;
|
|
}
|
|
|
|
U_BOOT_CMD(
|
|
ut_cmd, 5, 1, do_ut_cmd,
|
|
"Very basic test of command parsers",
|
|
""
|
|
);
|