u-boot/test/command_ut.c
Tom Rini d678a59d2d Revert "Merge patch series "arm: dts: am62-beagleplay: Fix Beagleplay Ethernet""
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 commit c8ffd1356d, reversing
changes made to 2ee6f3a5f7.

Reported-by: Jonas Karlman <jonas@kwiboo.se>
Signed-off-by: Tom Rini <trini@konsulko.com>
2024-05-19 08:16:36 -06:00

104 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",
""
);