All of lore.kernel.org
 help / color / mirror / Atom feed
From: Patrick Delaunay <patrick.delaunay@st.com>
To: u-boot@lists.denx.de
Subject: [PATCH v4 11/14] test: environment in ext4
Date: Tue, 28 Jul 2020 11:51:24 +0200	[thread overview]
Message-ID: <20200728095128.2363-12-patrick.delaunay@st.com> (raw)
In-Reply-To: <20200728095128.2363-1-patrick.delaunay@st.com>

Add basic test to persistent environment in ext4:
save and load in host ext4 file 'uboot.env'.

On first execution an empty EXT4 file system is created in
persistent data dir: env.ext4.img.

Signed-off-by: Patrick Delaunay <patrick.delaunay@st.com>
---

(no changes since v3)

Changes in v3:
- replace specific sandbox command by generic command
  'env select' and 'env load'
- update after Stephen Warren comments

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

diff --git a/test/py/tests/test_env.py b/test/py/tests/test_env.py
index a64aaa9bc5..70913c8d9a 100644
--- a/test/py/tests/test_env.py
+++ b/test/py/tests/test_env.py
@@ -4,6 +4,10 @@
 
 # Test operation of shell commands relating to environment variables.
 
+import os
+import os.path
+from subprocess import call, check_call, CalledProcessError
+
 import pytest
 import u_boot_utils
 
@@ -374,7 +378,6 @@ def test_env_info(state_test_env):
 @pytest.mark.buildconfigspec('cmd_nvedit_info')
 @pytest.mark.buildconfigspec('cmd_echo')
 def test_env_info_sandbox(state_test_env):
-
     """Test 'env info' command result with several options on sandbox
        with a known ENV configuration: ready & default & persistent
     """
@@ -399,3 +402,95 @@ def test_env_info_sandbox(state_test_env):
     response = c.run_command('env info -d -p -q')
     response = c.run_command('echo $?')
     assert response == "1"
+
+def mk_env_ext4(state_test_env):
+
+    """Create a empty ext4 file system volume."""
+    c = state_test_env.u_boot_console
+    filename = 'env.ext4.img'
+    persistent = c.config.persistent_data_dir + '/' + filename
+    fs_img = c.config.result_dir  + '/' + filename
+
+    if os.path.exists(persistent):
+        c.log.action('Disk image file ' + persistent + ' already exists')
+    else:
+        try:
+            u_boot_utils.run_and_log(c, 'dd if=/dev/zero of=%s bs=1M count=16' % persistent)
+            u_boot_utils.run_and_log(c, 'mkfs.ext4 -O ^metadata_csum %s' % persistent)
+        except CalledProcessError:
+            call('rm -f %s' % persistent, shell=True)
+            raise
+
+    u_boot_utils.run_and_log(c, ['cp',  '-f', persistent, fs_img])
+    return fs_img
+
+ 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_ext4')
+def test_env_ext4(state_test_env):
+
+    """Test ENV in EXT4 on sandbox."""
+    c = state_test_env.u_boot_console
+    fs_img = ''
+    try:
+        fs_img = mk_env_ext4(state_test_env)
+
+        c.run_command('host bind 0  %s' % fs_img)
+
+        response = c.run_command('ext4ls host 0:0')
+        assert 'uboot.env' not in response
+
+        # force env location: EXT4 (prio 1 in sandbox)
+        response = c.run_command('env select EXT4')
+        assert 'Select Environment on EXT4: OK' in response
+
+        response = c.run_command('env save')
+        assert 'Saving Environment to EXT4' in response
+
+        response = c.run_command('env load')
+        assert 'Loading Environment from EXT4... OK' in response
+
+        response = c.run_command('ext4ls host 0:0')
+        assert '8192 uboot.env' 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"
+
+        # 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 fs_img:
+            call('rm -f %s' % fs_img, shell=True)
-- 
2.17.1

  parent reply	other threads:[~2020-07-28  9:51 UTC|newest]

Thread overview: 33+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-07-28  9:51 [PATCH v4 00/14] env: ext4: corrections and add test for env in ext4 Patrick Delaunay
2020-07-28  9:51 ` [PATCH v4 01/14] env: add absolute path at CONFIG_ENV_EXT4_FILE Patrick Delaunay
2020-07-31 21:40   ` Tom Rini
2020-07-28  9:51 ` [PATCH v4 02/14] env: ext4: set gd->env_valid Patrick Delaunay
2020-07-31 21:40   ` Tom Rini
2020-07-28  9:51 ` [PATCH v4 03/14] env: sf: avoid space in backend name Patrick Delaunay
2020-07-31 21:40   ` Tom Rini
2020-07-28  9:51 ` [PATCH v4 04/14] env: correctly handle env_load_prio Patrick Delaunay
2020-07-31 21:40   ` Tom Rini
2020-07-28  9:51 ` [PATCH v4 05/14] env: nowhere: add .load ops Patrick Delaunay
2020-07-31 21:41   ` Tom Rini
2020-07-28  9:51 ` [PATCH v4 06/14] env: the ops driver load becomes mandatory in struct env_driver Patrick Delaunay
2020-07-31 21:41   ` Tom Rini
2020-07-28  9:51 ` [PATCH v4 07/14] cmd: env: add env load command Patrick Delaunay
2020-07-31 21:41   ` Tom Rini
2020-07-28  9:51 ` [PATCH v4 08/14] cmd: env: add env select command Patrick Delaunay
2020-07-31 21:41   ` Tom Rini
2020-07-28  9:51 ` [PATCH v4 09/14] configs: sandbox: activate env in ext4 support Patrick Delaunay
2020-07-31 21:41   ` Tom Rini
2020-07-28  9:51 ` [PATCH v4 10/14] configs: sandbox: activate command env select and env load Patrick Delaunay
2020-07-31 21:41   ` Tom Rini
2020-07-28  9:51 ` Patrick Delaunay [this message]
2020-07-31 21:41   ` [PATCH v4 11/14] test: environment in ext4 Tom Rini
2020-08-03 15:43   ` Stephen Warren
2020-08-03 15:51     ` Tom Rini
2020-08-03 16:57       ` Stephen Warren
2020-08-03 17:11         ` Tom Rini
2020-07-28  9:51 ` [PATCH v4 12/14] env: ext4: introduce new function env_ext4_save_buffer Patrick Delaunay
2020-07-31 21:41   ` Tom Rini
2020-07-28  9:51 ` [PATCH v4 13/14] env: ext4: add support of command env erase Patrick Delaunay
2020-07-31 21:41   ` Tom Rini
2020-07-28  9:51 ` [PATCH v4 14/14] test: sandbox: add test for erase command Patrick Delaunay
2020-07-31 21:42   ` Tom Rini

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20200728095128.2363-12-patrick.delaunay@st.com \
    --to=patrick.delaunay@st.com \
    --cc=u-boot@lists.denx.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.