[U-Boot] [PATCH V2 3/7] test/py: add test of setenv/printenv/echo
Stephen Warren
swarren at wwwdotorg.org
Wed Dec 2 23:18:24 CET 2015
This tests basic environment variable functionality.
Signed-off-by: Stephen Warren <swarren at wwwdotorg.org>
Signed-off-by: Stephen Warren <swarren at nvidia.com>
---
test/py/test_env.py | 121 ++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 121 insertions(+)
create mode 100644 test/py/test_env.py
diff --git a/test/py/test_env.py b/test/py/test_env.py
new file mode 100644
index 000000000000..3af0176c4523
--- /dev/null
+++ b/test/py/test_env.py
@@ -0,0 +1,121 @@
+# Copyright (c) 2015 Stephen Warren
+# Copyright (c) 2015, NVIDIA CORPORATION. All rights reserved.
+#
+# SPDX-License-Identifier: GPL-2.0
+
+import pytest
+
+# FIXME: This might be useful for other tests;
+# perhaps refactor it into ConsoleBase or some other state object?
+class StateTestEnv(object):
+ def __init__(self, uboot_console):
+ self.uboot_console = uboot_console
+ self.get_env()
+ self.set_var = self.get_non_existent_var()
+
+ def get_env(self):
+ response = self.uboot_console.run_command("printenv")
+ self.env = {}
+ for l in response.splitlines():
+ if not "=" in l:
+ continue
+ (var, value) = l.strip().split("=")
+ self.env[var] = value
+
+ def get_existent_var(self):
+ for var in self.env:
+ return var
+
+ def get_non_existent_var(self):
+ n = 0
+ while True:
+ var = "test_env_" + str(n)
+ if var not in self.env:
+ return var
+ n += 1
+
+ at pytest.fixture(scope="module")
+def state_test_env(uboot_console):
+ return StateTestEnv(uboot_console)
+
+def unset_var(state_test_env, var):
+ state_test_env.uboot_console.run_command("setenv " + var)
+ if var in state_test_env.env:
+ del state_test_env.env[var]
+
+def set_var(state_test_env, var, value):
+ state_test_env.uboot_console.run_command("setenv " + var + " \"" + value + "\"")
+ state_test_env.env[var] = value
+
+def validate_empty(state_test_env, var):
+ response = state_test_env.uboot_console.run_command("echo $" + var)
+ assert response == ""
+
+def validate_set(state_test_env, var, value):
+ # echo does not preserve leading, internal, or trailing whitespace in the
+ # value. printenv does, and hence allows more complete testing.
+ response = state_test_env.uboot_console.run_command("printenv " + var)
+ assert response == (var + "=" + value)
+
+def test_env_echo_exists(state_test_env):
+ """Echo a variable that exists"""
+ var = state_test_env.get_existent_var()
+ value = state_test_env.env[var]
+ validate_set(state_test_env, var, value)
+
+def test_env_echo_non_existent(state_test_env):
+ """Echo a variable that doesn't exist"""
+ var = state_test_env.set_var
+ validate_empty(state_test_env, var)
+
+def test_env_printenv_non_existent(state_test_env):
+ """Check printenv error message"""
+ var = state_test_env.set_var
+ c = state_test_env.uboot_console
+ with c.disable_check("error_notification"):
+ response = c.run_command("printenv " + var)
+ assert(response == "## Error: \"" + var + "\" not defined")
+
+def test_env_unset_non_existent(state_test_env):
+ """Unset a nonexistent variable"""
+ var = state_test_env.get_non_existent_var()
+ unset_var(state_test_env, var)
+ validate_empty(state_test_env, var)
+
+def test_env_set_non_existent(state_test_env):
+ """Set a new variable"""
+ var = state_test_env.set_var
+ value = "foo"
+ set_var(state_test_env, var, value)
+ validate_set(state_test_env, var, value)
+
+def test_env_set_existing(state_test_env):
+ """Set an existing variable"""
+ var = state_test_env.set_var
+ value = "bar"
+ set_var(state_test_env, var, value)
+ validate_set(state_test_env, var, value)
+
+def test_env_unset_existing(state_test_env):
+ """Unset a variable"""
+ var = state_test_env.set_var
+ unset_var(state_test_env, var)
+ validate_empty(state_test_env, var)
+
+def test_env_expansion_spaces(state_test_env):
+ var_space = None
+ var_test = None
+ try:
+ var_space = state_test_env.get_non_existent_var()
+ set_var(state_test_env, var_space, " ")
+
+ var_test = state_test_env.get_non_existent_var()
+ value = " 1${%(var_space)s}${%(var_space)s} 2 " % locals()
+ set_var(state_test_env, var_test, value)
+ value = " 1 2 "
+ validate_set(state_test_env, var_test, value)
+ finally:
+ if var_space:
+ unset_var(state_test_env, var_space)
+ if var_test:
+ unset_var(state_test_env, var_test)
--
2.6.3
More information about the U-Boot
mailing list