]> Git Repo - J-u-boot.git/blame - test/command_ut.c
Merge patch series "test/overlay: Make this depend on SANDBOX"
[J-u-boot.git] / test / command_ut.c
CommitLineData
83d290c5 1// SPDX-License-Identifier: GPL-2.0+
a72007d9
SG
2/*
3 * Copyright (c) 2012, The Chromium Authors
a72007d9
SG
4 */
5
6#define DEBUG
7
288b29e4 8#include <command.h>
09140113 9#include <env.h>
f7ae49fc 10#include <log.h>
dd1f34a9
EB
11#include <string.h>
12#include <linux/errno.h>
a72007d9
SG
13
14static const char test_cmd[] = "setenv list 1\n setenv list ${list}2; "
15 "setenv list ${list}3\0"
16 "setenv list ${list}4";
17
09140113
SG
18static int do_ut_cmd(struct cmd_tbl *cmdtp, int flag, int argc,
19 char *const argv[])
a72007d9 20{
dd1f34a9
EB
21 char long_str[CONFIG_SYS_CBSIZE + 42];
22
a72007d9 23 printf("%s: Testing commands\n", __func__);
67486728 24 run_command("env default -f -a", 0);
a72007d9 25
a72007d9
SG
26 /* commands separated by \n */
27 run_command_list("setenv list 1\n setenv list ${list}1", -1, 0);
00caae6d 28 assert(!strcmp("11", env_get("list")));
a72007d9
SG
29
30 /* command followed by \n and nothing else */
31 run_command_list("setenv list 1${list}\n", -1, 0);
00caae6d 32 assert(!strcmp("111", env_get("list")));
a72007d9 33
a72007d9
SG
34 /* a command string with \0 in it. Stuff after \0 should be ignored */
35 run_command("setenv list", 0);
36 run_command_list(test_cmd, sizeof(test_cmd), 0);
00caae6d 37 assert(!strcmp("123", env_get("list")));
a72007d9
SG
38
39 /*
40 * a command list where we limit execution to only the first command
41 * using the length parameter.
42 */
43 run_command_list("setenv list 1\n setenv list ${list}2; "
44 "setenv list ${list}3", strlen("setenv list 1"), 0);
00caae6d 45 assert(!strcmp("1", env_get("list")));
a72007d9 46
93ce7561
SG
47 assert(run_command("false", 0) == 1);
48 assert(run_command("echo", 0) == 0);
49 assert(run_command_list("false", -1, 0) == 1);
50 assert(run_command_list("echo", -1, 0) == 0);
51
f1f9d4fa 52#ifdef CONFIG_HUSH_PARSER
87b6398b
SG
53 run_command("setenv foo 'setenv black 1\nsetenv adder 2'", 0);
54 run_command("run foo", 0);
00caae6d
SG
55 assert(env_get("black") != NULL);
56 assert(!strcmp("1", env_get("black")));
57 assert(env_get("adder") != NULL);
58 assert(!strcmp("2", env_get("adder")));
f2afe701
SW
59#endif
60
484408fb
RV
61 assert(run_command("", 0) == 0);
62 assert(run_command(" ", 0) == 0);
63
2302b3ab
RV
64 assert(run_command("'", 0) == 1);
65
dd1f34a9
EB
66 /* Variadic function test-cases */
67#pragma GCC diagnostic push
68#pragma GCC diagnostic ignored "-Wformat-zero-length"
69 assert(run_commandf("") == 0);
70#pragma GCC diagnostic pop
71 assert(run_commandf(" ") == 0);
72 assert(run_commandf("'") == 1);
73
74 assert(run_commandf("env %s %s", "delete -f", "list") == 0);
75 /* Expected: "Error: "list" not defined" */
76 assert(run_commandf("printenv list") == 1);
77
78 memset(long_str, 'x', sizeof(long_str));
79 assert(run_commandf("Truncation case: %s", long_str) == -ENOSPC);
80
81 if (IS_ENABLED(CONFIG_HUSH_PARSER)) {
82 assert(run_commandf("env %s %s %s %s", "delete -f", "adder",
83 "black", "foo") == 0);
84 assert(run_commandf("setenv foo 'setenv %s 1\nsetenv %s 2'",
85 "black", "adder") == 0);
86 run_command("run foo", 0);
87 assert(env_get("black"));
88 assert(!strcmp("1", env_get("black")));
89 assert(env_get("adder"));
90 assert(!strcmp("2", env_get("adder")));
91 }
92
93 /* Clean up before exit */
94 run_command("env default -f -a", 0);
95
a72007d9
SG
96 printf("%s: Everything went swimmingly\n", __func__);
97 return 0;
98}
99
100U_BOOT_CMD(
101 ut_cmd, 5, 1, do_ut_cmd,
102 "Very basic test of command parsers",
103 ""
104);
This page took 0.425618 seconds and 4 git commands to generate.