[PATCH v2 1/3] test: env: Add test for environment storage in SPI NOR

Heinrich Schuchardt xypron.glpk at gmx.de
Tue Dec 23 18:32:44 CET 2025


On 12/23/25 15:31, Marek Vasut wrote:
> Add test for environment stored in SPI NOR. The test works in a very
> similar way to the current test for environment stored in ext4 FS,
> except it generates spi.bin file backing the SPI NOR.
> 
> Signed-off-by: Marek Vasut <marek.vasut+renesas at mailbox.org>
> ---
> Cc: Heinrich Schuchardt <xypron.glpk at gmx.de>
> Cc: Jerome Forissier <jerome.forissier at linaro.org>
> Cc: Simon Glass <sjg at chromium.org>
> Cc: Tom Rini <trini at konsulko.com>
> Cc: u-boot at lists.denx.de
> ---
> V2: No change
> ---
>   test/py/tests/test_env.py | 99 +++++++++++++++++++++++++++++++++++++++
>   1 file changed, 99 insertions(+)
> 
> diff --git a/test/py/tests/test_env.py b/test/py/tests/test_env.py
> index 383e26c03b0..48e31f19b3c 100644
> --- a/test/py/tests/test_env.py
> +++ b/test/py/tests/test_env.py
> @@ -457,6 +457,26 @@ def mk_env_ext4(state_test_env):
>       utils.run_and_log(c, ['cp',  '-f', persistent, fs_img])
>       return fs_img
>   
> +def mk_env_spi_flash(state_test_env):

Thank you for adding the test.

Unfortunately pylint doesn't like your code. Please have a look.

W0621: Redefining name 'state_test_env' from outer scope (line 95) 
(redefined-outer-name)

> +
> +    """Create an empty SPI NOR image."""
> +    c = state_test_env.ubman
> +    filename = 'spi.bin'
> +    persistent = c.config.persistent_data_dir + '/' + filename
> +    spi_flash_img = c.config.source_dir  + '/' + filename
> +
> +    if os.path.exists(persistent):
> +        c.log.action('SPI NOR image file ' + persistent + ' already exists')
> +    else:
> +        try:
> +            utils.run_and_log(c, 'dd if=/dev/zero of=%s bs=1M count=2' % persistent)

C0209: Formatting a regular string which could be an f-string 
(consider-using-f-string)

> +        except CalledProcessError:
> +            call('rm -f %s' % persistent, shell=True)

C0209: Formatting a regular string which could be an f-string 
(consider-using-f-string)

Except for the pylint issues the patch looks good to me.

Best regards

Heinrich

> +            raise
> +
> +    utils.run_and_log(c, ['cp',  '-f', persistent, spi_flash_img])
> +    return spi_flash_img
> +
>   @pytest.mark.boardspec('sandbox')
>   @pytest.mark.buildconfigspec('cmd_echo')
>   @pytest.mark.buildconfigspec('cmd_nvedit_info')
> @@ -544,6 +564,85 @@ def test_env_ext4(state_test_env):
>           if fs_img:
>               call('rm -f %s' % fs_img, shell=True)
>   
> + at pytest.mark.boardspec('sandbox')
> + at pytest.mark.buildconfigspec('cmd_echo')
> + at pytest.mark.buildconfigspec('cmd_nvedit_info')
> + at pytest.mark.buildconfigspec('cmd_nvedit_load')
> + at pytest.mark.buildconfigspec('cmd_nvedit_select')
> + at pytest.mark.buildconfigspec('env_is_in_spi_flash')
> +def test_env_spi_flash(state_test_env):
> +
> +    """Test ENV in SPI NOR on sandbox."""
> +    c = state_test_env.ubman
> +    spi_flash_img = ''
> +    try:
> +        spi_flash_img = mk_env_spi_flash(state_test_env)
> +
> +        # force env location: SF
> +        response = c.run_command('env select SPIFlash')
> +        assert 'Select Environment on SPIFlash: OK' in response
> +
> +        response = c.run_command('env save')
> +        assert 'Saving Environment to SPIFlash' in response
> +
> +        response = c.run_command('env load')
> +        assert 'Loading Environment from SPIFlash... OK' in response
> +
> +        response = c.run_command('env info')
> +        assert 'env_valid = valid' in response
> +        assert 'env_ready = true' in response
> +        assert 'env_use_default = false' in response
> +
> +        response = c.run_command('env info -p -d')
> +        assert 'Environment was loaded from persistent storage' in response
> +        assert 'Environment can be persisted' in response
> +
> +        response = c.run_command('env info -d -q')
> +        assert response == ""
> +        response = c.run_command('echo $?')
> +        assert response == "1"
> +
> +        response = c.run_command('env info -p -q')
> +        assert response == ""
> +        response = c.run_command('echo $?')
> +        assert response == "0"
> +
> +        response = c.run_command('env erase')
> +        assert 'OK' in response
> +
> +        response = c.run_command('env load')
> +        assert 'Loading Environment from SPIFlash... ' in response
> +        assert 'bad CRC, using default environment' in response
> +
> +        response = c.run_command('env info')
> +        assert 'env_valid = invalid' in response
> +        assert 'env_ready = true' in response
> +        assert 'env_use_default = true' in response
> +
> +        response = c.run_command('env info -p -d')
> +        assert 'Default environment is used' in response
> +        assert 'Environment can be persisted' in response
> +
> +        # restore env location: NOWHERE (prio 0 in sandbox)
> +        response = c.run_command('env select nowhere')
> +        assert 'Select Environment on nowhere: OK' in response
> +
> +        response = c.run_command('env load')
> +        assert 'Loading Environment from nowhere... OK' in response
> +
> +        response = c.run_command('env info')
> +        assert 'env_valid = invalid' in response
> +        assert 'env_ready = true' in response
> +        assert 'env_use_default = true' in response
> +
> +        response = c.run_command('env info -p -d')
> +        assert 'Default environment is used' in response
> +        assert 'Environment cannot be persisted' in response
> +
> +    finally:
> +        if spi_flash_img:
> +            call('rm -f %s' % spi_flash_img, shell=True)
> +
>   def test_env_text(ubman):
>       """Test the script that converts the environment to a text file"""
>   



More information about the U-Boot mailing list