diff mbox series

[U-Boot,v3,2/2] test/py: add test for whitelist of variables while importing environment

Message ID c18ca519ed41a642bdefb60e6fc0af534b40bbcf.1527236883.git-series.quentin.schulz@bootlin.com
State Superseded
Delegated to: Tom Rini
Headers show
Series [U-Boot,v3,1/2] cmd: nvedit: env import can now import only variables passed as parameters | expand

Commit Message

Quentin Schulz May 25, 2018, 8:38 a.m. UTC
This tests that the importing of an environment with a specified
whitelist works as intended.

If there are variables passed as parameter to the env import command,
   those only should be imported in the current environment.

For each variable passed as parameter, if
 - foo is bar in current env and bar2 in exported env, after importing
 exported env, foo shall be bar2,
 - foo does not exist in current env and foo is bar2 in exported env,
 after importing exported env, foo shall be bar2,
 - foo is bar in current env and does not exist in exported env (but is
 passed as parameter), after importing exported env, foo shall be empty,

Any variable not passed as parameter should be left untouched.

Two other tests are made to test that size cannot be '-' if the checksum
protection is enabled.

Signed-off-by: Quentin Schulz <quentin.schulz@bootlin.com>
---

v3:
  - update whitelist test to reflect changes made in patch 1,
  - add two tests for no size parameter passed but checksum protection is
  enabled because I added the possibility to have a sentinel in place of
  size parameter,
  - I intentionally didn't put the Reviewed and Acked-by of Simon and
  Stephen since the code changed since v2,

added in v2

 test/py/tests/test_env.py | 50 ++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 50 insertions(+)

Comments

Simon Glass May 26, 2018, 2:07 a.m. UTC | #1
Hi,

On 25 May 2018 at 02:38, Quentin Schulz <quentin.schulz@bootlin.com> wrote:
> This tests that the importing of an environment with a specified
> whitelist works as intended.
>
> If there are variables passed as parameter to the env import command,
>    those only should be imported in the current environment.
>
> For each variable passed as parameter, if
>  - foo is bar in current env and bar2 in exported env, after importing
>  exported env, foo shall be bar2,
>  - foo does not exist in current env and foo is bar2 in exported env,
>  after importing exported env, foo shall be bar2,
>  - foo is bar in current env and does not exist in exported env (but is
>  passed as parameter), after importing exported env, foo shall be empty,
>
> Any variable not passed as parameter should be left untouched.
>
> Two other tests are made to test that size cannot be '-' if the checksum
> protection is enabled.
>
> Signed-off-by: Quentin Schulz <quentin.schulz@bootlin.com>
> ---
>
> v3:
>   - update whitelist test to reflect changes made in patch 1,
>   - add two tests for no size parameter passed but checksum protection is
>   enabled because I added the possibility to have a sentinel in place of
>   size parameter,
>   - I intentionally didn't put the Reviewed and Acked-by of Simon and
>   Stephen since the code changed since v2,
>
> added in v2
>
>  test/py/tests/test_env.py | 50 ++++++++++++++++++++++++++++++++++++++++-
>  1 file changed, 50 insertions(+)

Reviewed-by: Simon Glass <sjg@chromium.org>

Some nits below

>
> diff --git a/test/py/tests/test_env.py b/test/py/tests/test_env.py
> index bfb5fc0..b83d2b1 100644
> --- a/test/py/tests/test_env.py
> +++ b/test/py/tests/test_env.py
> @@ -5,6 +5,7 @@
>  # Test operation of shell commands relating to environment variables.
>
>  import pytest
> +import u_boot_utils
>
>  # FIXME: This might be useful for other tests;
>  # perhaps refactor it into ConsoleBase or some other state object?
> @@ -239,3 +240,52 @@ def test_env_expansion_spaces(state_test_env):
>              unset_var(state_test_env, var_space)
>          if var_test:
>              unset_var(state_test_env, var_test)
> +
> +def test_env_import_checksum_no_size(state_test_env):
> +    """Test that omitted ('-') size parameter with checksum validation fails the
> +       env import function.
> +    """
> +    c = state_test_env.u_boot_console
> +    ram_base = u_boot_utils.find_ram_base(state_test_env.u_boot_console)
> +    addr = '%08x' % ram_base
> +
> +    with c.disable_check('error_notification'):
> +        response = c.run_command('env import -c %s -' % addr)
> +    assert(response == '## Error: external checksum format must pass size')
> +
> +def test_env_import_whitelist_checksum_no_size(state_test_env):
> +    """Test that omitted ('-') size parameter with checksum validation fails the
> +       env import function when variables are passed as parameters.
> +    """
> +    c = state_test_env.u_boot_console
> +    ram_base = u_boot_utils.find_ram_base(state_test_env.u_boot_console)
> +    addr = '%08x' % ram_base
> +
> +    with c.disable_check('error_notification'):
> +        response = c.run_command('env import -c %s - foo1 foo2 foo4' % addr)
> +    assert(response == '## Error: external checksum format must pass size')
> +
> +def test_env_import_whitelist(state_test_env):
> +    """Test importing only a handful of env variables from an environment."""
> +    c = state_test_env.u_boot_console
> +    ram_base = u_boot_utils.find_ram_base(state_test_env.u_boot_console)
> +    addr = '%08x' % ram_base
> +
> +    set_var(state_test_env, "foo1", "bar1")

Please use ' for strings rather than ", except for the function/class comments

> +    set_var(state_test_env, "foo2", "bar2")
> +    set_var(state_test_env, "foo3", "bar3")
> +
> +    c.run_command('env export %s' % addr)
> +
> +    unset_var(state_test_env, "foo1")
> +    set_var(state_test_env, "foo2", "test2")
> +    set_var(state_test_env, "foo4", "bar4")
> +
> +    #no foo1 in current env, foo2 overridden, foo3 should be of the value
> +    #before exporting and foo4 should be deleted

Spaces after each #

> +    c.run_command('env import %s - foo1 foo2 foo4' % addr)
> +
> +    validate_set(state_test_env, "foo1", "bar1")
> +    validate_set(state_test_env, "foo2", "bar2")
> +    validate_set(state_test_env, "foo3", "bar3")
> +    validate_empty(state_test_env, "foo4")
> --
> git-series 0.9.1
diff mbox series

Patch

diff --git a/test/py/tests/test_env.py b/test/py/tests/test_env.py
index bfb5fc0..b83d2b1 100644
--- a/test/py/tests/test_env.py
+++ b/test/py/tests/test_env.py
@@ -5,6 +5,7 @@ 
 # Test operation of shell commands relating to environment variables.
 
 import pytest
+import u_boot_utils
 
 # FIXME: This might be useful for other tests;
 # perhaps refactor it into ConsoleBase or some other state object?
@@ -239,3 +240,52 @@  def test_env_expansion_spaces(state_test_env):
             unset_var(state_test_env, var_space)
         if var_test:
             unset_var(state_test_env, var_test)
+
+def test_env_import_checksum_no_size(state_test_env):
+    """Test that omitted ('-') size parameter with checksum validation fails the
+       env import function.
+    """
+    c = state_test_env.u_boot_console
+    ram_base = u_boot_utils.find_ram_base(state_test_env.u_boot_console)
+    addr = '%08x' % ram_base
+
+    with c.disable_check('error_notification'):
+        response = c.run_command('env import -c %s -' % addr)
+    assert(response == '## Error: external checksum format must pass size')
+
+def test_env_import_whitelist_checksum_no_size(state_test_env):
+    """Test that omitted ('-') size parameter with checksum validation fails the
+       env import function when variables are passed as parameters.
+    """
+    c = state_test_env.u_boot_console
+    ram_base = u_boot_utils.find_ram_base(state_test_env.u_boot_console)
+    addr = '%08x' % ram_base
+
+    with c.disable_check('error_notification'):
+        response = c.run_command('env import -c %s - foo1 foo2 foo4' % addr)
+    assert(response == '## Error: external checksum format must pass size')
+
+def test_env_import_whitelist(state_test_env):
+    """Test importing only a handful of env variables from an environment."""
+    c = state_test_env.u_boot_console
+    ram_base = u_boot_utils.find_ram_base(state_test_env.u_boot_console)
+    addr = '%08x' % ram_base
+
+    set_var(state_test_env, "foo1", "bar1")
+    set_var(state_test_env, "foo2", "bar2")
+    set_var(state_test_env, "foo3", "bar3")
+
+    c.run_command('env export %s' % addr)
+
+    unset_var(state_test_env, "foo1")
+    set_var(state_test_env, "foo2", "test2")
+    set_var(state_test_env, "foo4", "bar4")
+
+    #no foo1 in current env, foo2 overridden, foo3 should be of the value
+    #before exporting and foo4 should be deleted
+    c.run_command('env import %s - foo1 foo2 foo4' % addr)
+
+    validate_set(state_test_env, "foo1", "bar1")
+    validate_set(state_test_env, "foo2", "bar2")
+    validate_set(state_test_env, "foo3", "bar3")
+    validate_empty(state_test_env, "foo4")