// 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);
