Signed-off-by: Rasmus Villemoes <rasmus.villem...@prevas.dk> --- configs/sandbox64_defconfig | 1 + configs/sandbox_defconfig | 1 + include/configs/sandbox.h | 8 ++- test/env/Makefile | 1 + test/env/default.c | 102 ++++++++++++++++++++++++++++++++++++ 5 files changed, 112 insertions(+), 1 deletion(-) create mode 100644 test/env/default.c
diff --git a/configs/sandbox64_defconfig b/configs/sandbox64_defconfig index dc993cd13a..fa8f5190ed 100644 --- a/configs/sandbox64_defconfig +++ b/configs/sandbox64_defconfig @@ -91,6 +91,7 @@ CONFIG_ENV_IS_NOWHERE=y CONFIG_ENV_IS_IN_EXT4=y CONFIG_ENV_EXT4_INTERFACE="host" CONFIG_ENV_EXT4_DEVICE_AND_PART="0:0" +CONFIG_ENV_AMEND_DEFAULT_FROM_FDT=y CONFIG_BOOTP_SEND_HOSTNAME=y CONFIG_NETCONSOLE=y CONFIG_IP_DEFRAG=y diff --git a/configs/sandbox_defconfig b/configs/sandbox_defconfig index f2a767a4cd..f1a4ecbf01 100644 --- a/configs/sandbox_defconfig +++ b/configs/sandbox_defconfig @@ -105,6 +105,7 @@ CONFIG_ENV_IS_NOWHERE=y CONFIG_ENV_IS_IN_EXT4=y CONFIG_ENV_EXT4_INTERFACE="host" CONFIG_ENV_EXT4_DEVICE_AND_PART="0:0" +CONFIG_ENV_AMEND_DEFAULT_FROM_FDT=y CONFIG_BOOTP_SEND_HOSTNAME=y CONFIG_NETCONSOLE=y CONFIG_IP_DEFRAG=y diff --git a/include/configs/sandbox.h b/include/configs/sandbox.h index e0708fe573..928a80d872 100644 --- a/include/configs/sandbox.h +++ b/include/configs/sandbox.h @@ -106,11 +106,17 @@ "scriptaddr=0x1000\0" \ "pxefile_addr_r=0x2000\0" +#define TEST_ENV_SETTINGS \ + "test0=a\0" \ + "test1=b\0" \ + "test2=c\0" + #define CONFIG_EXTRA_ENV_SETTINGS \ SANDBOX_SERIAL_SETTINGS \ SANDBOX_ETH_SETTINGS \ BOOTENV \ - MEM_LAYOUT_ENV_SETTINGS + MEM_LAYOUT_ENV_SETTINGS \ + TEST_ENV_SETTINGS #ifndef CONFIG_SPL_BUILD #define CONFIG_SYS_IDE_MAXBUS 1 diff --git a/test/env/Makefile b/test/env/Makefile index 5c8eae31b0..740b9c522e 100644 --- a/test/env/Makefile +++ b/test/env/Makefile @@ -5,3 +5,4 @@ obj-y += cmd_ut_env.o obj-y += attr.o obj-y += hashtable.o +obj-y += default.o diff --git a/test/env/default.c b/test/env/default.c new file mode 100644 index 0000000000..36fae5d783 --- /dev/null +++ b/test/env/default.c @@ -0,0 +1,102 @@ +// SPDX-License-Identifier: GPL-2.0 + +#include <common.h> +#include <command.h> +#include <env_attr.h> +#include <test/env.h> +#include <test/ut.h> +#include <fdt_support.h> + +DECLARE_GLOBAL_DATA_PTR; + +static char *testvars[] = {"test0", "test1", "test2", "test3"}; + +static int test_amend_default_from_fdt(struct unit_test_state *uts) +{ + static const char def_env[] = "test1=x\0test2=\0test3=y"; + void *blob = (void*)gd->fdt_blob; + const char *val; + + ut_assert(fdt_find_or_add_subnode(blob, 0, "config") >= 0); + ut_assertok(fdt_find_and_setprop(blob, "/config", "default-environment", + def_env, sizeof(def_env), 1)); + + env_set("test0", NULL); + env_set_default_vars(ARRAY_SIZE(testvars), testvars, 0); + + val = env_get("test0"); + ut_assertnonnull(val); + ut_asserteq_str("a", val); + + val = env_get("test1"); + ut_assertnonnull(val); + ut_asserteq_str("x", val); + + val = env_get("test2"); + ut_assertnull(val); + + val = env_get("test3"); + ut_assertnonnull(val); + ut_asserteq_str("y", val); + + return 0; +} + +static int env_test_default(struct unit_test_state *uts) +{ + const char *val; + int ret = 0; + void *blob; + const void *orig_blob; + int blob_sz; + int i; + + for (i = 0; i < ARRAY_SIZE(testvars); ++i) { + ut_assertok(env_set(testvars[i], "ggg")); + val = env_get(testvars[i]); + ut_assertnonnull(val); + ut_asserteq_str(val, "ggg"); + } + + env_set_default_vars(ARRAY_SIZE(testvars), testvars, 0); + + val = env_get("test0"); + ut_assertnonnull(val); + ut_asserteq_str("a", val); + + val = env_get("test1"); + ut_assertnonnull(val); + ut_asserteq_str("b", val); + + val = env_get("test2"); + ut_assertnonnull(val); + ut_asserteq_str("c", val); + + /* + * env_set_default_vars() leaves existing variables alone that + * are not defined in the default environment. + */ + val = env_get("test3"); + ut_assertnonnull(val); + ut_asserteq_str("ggg", val); + + if (!IS_ENABLED(CONFIG_ENV_AMEND_DEFAULT_FROM_FDT)) + return ret; + + blob_sz = fdt_totalsize(gd->fdt_blob) + 256; + blob = malloc(blob_sz); + ut_assertnonnull(blob); + + /* Make a writable copy of the fdt blob */ + ut_assertok(fdt_open_into(gd->fdt_blob, blob, blob_sz)); + orig_blob = gd->fdt_blob; + gd->fdt_blob = blob; + + ret = test_amend_default_from_fdt(uts); + + gd->fdt_blob = orig_blob; + free(blob); + + return ret; +} +ENV_TEST(env_test_default, 0); -- 2.23.0