test: hush: Test hush if/else

As asked in commit 9c6bf1715f ("test/py: hush_if_test: Add tests to cover
octal/hex values"), this commit translates test_hush_if_test.py to a C test.

Signed-off-by: Francis Laniel <francis.laniel@amarulasolutions.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
Francis Laniel
2023-12-28 12:02:56 -05:00
committed by Tom Rini
parent cb1277cc4d
commit d3bc2c54ac
2 changed files with 317 additions and 0 deletions
+1
View File
@@ -4,3 +4,4 @@
# Francis Laniel, Amarula Solutions, francis.laniel@amarulasolutions.com
obj-y += cmd_ut_hush.o
obj-y += if.o
+316
View File
@@ -0,0 +1,316 @@
// SPDX-License-Identifier: GPL-2.0
/*
* (C) Copyright 2021
* Francis Laniel, Amarula Solutions, francis.laniel@amarulasolutions.com
*/
#include <common.h>
#include <command.h>
#include <env_attr.h>
#include <test/hush.h>
#include <test/ut.h>
/*
* All tests will execute the following:
* if condition_to_test; then
* true
* else
* false
* fi
* If condition is true, command returns 1, 0 otherwise.
*/
const char *if_format = "if %s; then true; else false; fi";
static int hush_test_if_base(struct unit_test_state *uts)
{
char if_formatted[128];
sprintf(if_formatted, if_format, "true");
ut_assertok(run_command(if_formatted, 0));
sprintf(if_formatted, if_format, "false");
ut_asserteq(1, run_command(if_formatted, 0));
return 0;
}
HUSH_TEST(hush_test_if_base, 0);
static int hush_test_if_basic_operators(struct unit_test_state *uts)
{
char if_formatted[128];
sprintf(if_formatted, if_format, "test aaa = aaa");
ut_assertok(run_command(if_formatted, 0));
sprintf(if_formatted, if_format, "test aaa = bbb");
ut_asserteq(1, run_command(if_formatted, 0));
sprintf(if_formatted, if_format, "test aaa != bbb");
ut_assertok(run_command(if_formatted, 0));
sprintf(if_formatted, if_format, "test aaa != aaa");
ut_asserteq(1, run_command(if_formatted, 0));
sprintf(if_formatted, if_format, "test aaa < bbb");
ut_assertok(run_command(if_formatted, 0));
sprintf(if_formatted, if_format, "test bbb < aaa");
ut_asserteq(1, run_command(if_formatted, 0));
sprintf(if_formatted, if_format, "test bbb > aaa");
ut_assertok(run_command(if_formatted, 0));
sprintf(if_formatted, if_format, "test aaa > bbb");
ut_asserteq(1, run_command(if_formatted, 0));
sprintf(if_formatted, if_format, "test 123 -eq 123");
ut_assertok(run_command(if_formatted, 0));
sprintf(if_formatted, if_format, "test 123 -eq 456");
ut_asserteq(1, run_command(if_formatted, 0));
sprintf(if_formatted, if_format, "test 123 -ne 456");
ut_assertok(run_command(if_formatted, 0));
sprintf(if_formatted, if_format, "test 123 -ne 123");
ut_asserteq(1, run_command(if_formatted, 0));
sprintf(if_formatted, if_format, "test 123 -lt 456");
ut_assertok(run_command(if_formatted, 0));
sprintf(if_formatted, if_format, "test 123 -lt 123");
ut_asserteq(1, run_command(if_formatted, 0));
sprintf(if_formatted, if_format, "test 456 -lt 123");
ut_asserteq(1, run_command(if_formatted, 0));
sprintf(if_formatted, if_format, "test 123 -le 456");
ut_assertok(run_command(if_formatted, 0));
sprintf(if_formatted, if_format, "test 123 -le 123");
ut_assertok(run_command(if_formatted, 0));
sprintf(if_formatted, if_format, "test 456 -le 123");
ut_asserteq(1, run_command(if_formatted, 0));
sprintf(if_formatted, if_format, "test 456 -gt 123");
ut_assertok(run_command(if_formatted, 0));
sprintf(if_formatted, if_format, "test 123 -gt 123");
ut_asserteq(1, run_command(if_formatted, 0));
sprintf(if_formatted, if_format, "test 123 -gt 456");
ut_asserteq(1, run_command(if_formatted, 0));
sprintf(if_formatted, if_format, "test 456 -ge 123");
ut_assertok(run_command(if_formatted, 0));
sprintf(if_formatted, if_format, "test 123 -ge 123");
ut_assertok(run_command(if_formatted, 0));
sprintf(if_formatted, if_format, "test 123 -ge 456");
ut_asserteq(1, run_command(if_formatted, 0));
return 0;
}
HUSH_TEST(hush_test_if_basic_operators, 0);
static int hush_test_if_octal(struct unit_test_state *uts)
{
char if_formatted[128];
sprintf(if_formatted, if_format, "test 010 -eq 010");
ut_assertok(run_command(if_formatted, 0));
sprintf(if_formatted, if_format, "test 010 -eq 011");
ut_asserteq(1, run_command(if_formatted, 0));
sprintf(if_formatted, if_format, "test 010 -ne 011");
ut_assertok(run_command(if_formatted, 0));
sprintf(if_formatted, if_format, "test 010 -ne 010");
ut_asserteq(1, run_command(if_formatted, 0));
return 0;
}
HUSH_TEST(hush_test_if_octal, 0);
static int hush_test_if_hexadecimal(struct unit_test_state *uts)
{
char if_formatted[128];
sprintf(if_formatted, if_format, "test 0x2000000 -gt 0x2000001");
ut_asserteq(1, run_command(if_formatted, 0));
sprintf(if_formatted, if_format, "test 0x2000000 -gt 0x2000000");
ut_asserteq(1, run_command(if_formatted, 0));
sprintf(if_formatted, if_format, "test 0x2000000 -gt 0x1ffffff");
ut_assertok(run_command(if_formatted, 0));
return 0;
}
HUSH_TEST(hush_test_if_hexadecimal, 0);
static int hush_test_if_mixed(struct unit_test_state *uts)
{
char if_formatted[128];
sprintf(if_formatted, if_format, "test 010 -eq 10");
ut_asserteq(1, run_command(if_formatted, 0));
sprintf(if_formatted, if_format, "test 010 -ne 10");
ut_assertok(run_command(if_formatted, 0));
sprintf(if_formatted, if_format, "test 0xa -eq 10");
ut_assertok(run_command(if_formatted, 0));
sprintf(if_formatted, if_format, "test 0xa -eq 012");
ut_assertok(run_command(if_formatted, 0));
sprintf(if_formatted, if_format, "test 2000000 -gt 0x1ffffff");
ut_asserteq(1, run_command(if_formatted, 0));
sprintf(if_formatted, if_format, "test 0x2000000 -gt 1ffffff");
ut_assertok(run_command(if_formatted, 0));
sprintf(if_formatted, if_format, "test 0x2000000 -lt 1ffffff");
ut_asserteq(1, run_command(if_formatted, 0));
sprintf(if_formatted, if_format, "test 0x2000000 -eq 2000000");
ut_asserteq(1, run_command(if_formatted, 0));
sprintf(if_formatted, if_format, "test 0x2000000 -ne 2000000");
ut_assertok(run_command(if_formatted, 0));
sprintf(if_formatted, if_format, "test -z \"\"");
ut_assertok(run_command(if_formatted, 0));
sprintf(if_formatted, if_format, "test -z \"aaa\"");
ut_asserteq(1, run_command(if_formatted, 0));
sprintf(if_formatted, if_format, "test -n \"aaa\"");
ut_assertok(run_command(if_formatted, 0));
sprintf(if_formatted, if_format, "test -n \"\"");
ut_asserteq(1, run_command(if_formatted, 0));
return 0;
}
HUSH_TEST(hush_test_if_mixed, 0);
static int hush_test_if_inverted(struct unit_test_state *uts)
{
char if_formatted[128];
sprintf(if_formatted, if_format, "test ! aaa = aaa");
ut_asserteq(1, run_command(if_formatted, 0));
sprintf(if_formatted, if_format, "test ! aaa = bbb");
ut_assertok(run_command(if_formatted, 0));
sprintf(if_formatted, if_format, "test ! ! aaa = aaa");
ut_assertok(run_command(if_formatted, 0));
sprintf(if_formatted, if_format, "test ! ! aaa = bbb");
ut_asserteq(1, run_command(if_formatted, 0));
return 0;
}
HUSH_TEST(hush_test_if_inverted, 0);
static int hush_test_if_binary(struct unit_test_state *uts)
{
char if_formatted[128];
sprintf(if_formatted, if_format, "test aaa != aaa -o bbb != bbb");
ut_asserteq(1, run_command(if_formatted, 0));
sprintf(if_formatted, if_format, "test aaa != aaa -o bbb = bbb");
ut_assertok(run_command(if_formatted, 0));
sprintf(if_formatted, if_format, "test aaa = aaa -o bbb != bbb");
ut_assertok(run_command(if_formatted, 0));
sprintf(if_formatted, if_format, "test aaa = aaa -o bbb = bbb");
ut_assertok(run_command(if_formatted, 0));
sprintf(if_formatted, if_format, "test aaa != aaa -a bbb != bbb");
ut_asserteq(1, run_command(if_formatted, 0));
sprintf(if_formatted, if_format, "test aaa != aaa -a bbb = bbb");
ut_asserteq(1, run_command(if_formatted, 0));
sprintf(if_formatted, if_format, "test aaa = aaa -a bbb != bbb");
ut_asserteq(1, run_command(if_formatted, 0));
sprintf(if_formatted, if_format, "test aaa = aaa -a bbb = bbb");
ut_assertok(run_command(if_formatted, 0));
return 0;
}
HUSH_TEST(hush_test_if_binary, 0);
static int hush_test_if_inverted_binary(struct unit_test_state *uts)
{
char if_formatted[128];
sprintf(if_formatted, if_format, "test ! aaa != aaa -o ! bbb != bbb");
ut_assertok(run_command(if_formatted, 0));
sprintf(if_formatted, if_format, "test ! aaa != aaa -o ! bbb = bbb");
ut_assertok(run_command(if_formatted, 0));
sprintf(if_formatted, if_format, "test ! aaa = aaa -o ! bbb != bbb");
ut_assertok(run_command(if_formatted, 0));
sprintf(if_formatted, if_format, "test ! aaa = aaa -o ! bbb = bbb");
ut_asserteq(1, run_command(if_formatted, 0));
sprintf(if_formatted, if_format,
"test ! ! aaa != aaa -o ! ! bbb != bbb");
ut_asserteq(1, run_command(if_formatted, 0));
sprintf(if_formatted, if_format,
"test ! ! aaa != aaa -o ! ! bbb = bbb");
ut_assertok(run_command(if_formatted, 0));
sprintf(if_formatted, if_format,
"test ! ! aaa = aaa -o ! ! bbb != bbb");
ut_assertok(run_command(if_formatted, 0));
sprintf(if_formatted, if_format, "test ! ! aaa = aaa -o ! ! bbb = bbb");
ut_assertok(run_command(if_formatted, 0));
return 0;
}
HUSH_TEST(hush_test_if_inverted_binary, 0);
static int hush_test_if_z_operator(struct unit_test_state *uts)
{
char if_formatted[128];
/* Deal with environment variable used during test. */
env_set("ut_var_nonexistent", NULL);
env_set("ut_var_exists", "1");
env_set("ut_var_unset", "1");
sprintf(if_formatted, if_format, "test -z \"$ut_var_nonexistent\"");
ut_assertok(run_command(if_formatted, 0));
sprintf(if_formatted, if_format, "test -z \"$ut_var_exists\"");
ut_asserteq(1, run_command(if_formatted, 0));
sprintf(if_formatted, if_format, "test -z \"$ut_var_unset\"");
ut_asserteq(1, run_command(if_formatted, 0));
env_set("ut_var_unset", NULL);
sprintf(if_formatted, if_format, "test -z \"$ut_var_unset\"");
ut_assertok(run_command(if_formatted, 0));
/* Clear the set environment variable. */
env_set("ut_var_exists", NULL);
return 0;
}
HUSH_TEST(hush_test_if_z_operator, 0);