[PATCH v3 3/3] test/py: rewrite sqfsls command test suite

Joao Marcos Costa jmcosta944 at gmail.com
Thu Jul 1 00:45:05 CEST 2021


Add more details to test cases by comparing each expected line with the
command's output. Add new test cases:
- sqfsls at an empty directory
- sqfsls at a sub-directory

Signed-off-by: Joao Marcos Costa <jmcosta944 at gmail.com>
---
 .../test_fs/test_squashfs/test_sqfs_ls.py     | 140 +++++++++++++++---
 1 file changed, 121 insertions(+), 19 deletions(-)

diff --git a/test/py/tests/test_fs/test_squashfs/test_sqfs_ls.py b/test/py/tests/test_fs/test_squashfs/test_sqfs_ls.py
index a0dca2e2fc..9eb00d6888 100644
--- a/test/py/tests/test_fs/test_squashfs/test_sqfs_ls.py
+++ b/test/py/tests/test_fs/test_squashfs/test_sqfs_ls.py
@@ -4,7 +4,101 @@
 
 import os
 import pytest
-from sqfs_common import *
+
+from sqfs_common import STANDARD_TABLE
+from sqfs_common import generate_sqfs_src_dir, make_all_images
+from sqfs_common import clean_sqfs_src_dir, clean_all_images
+from sqfs_common import check_mksquashfs_version
+
+def sqfs_ls_at_root(u_boot_console):
+    """ Runs sqfsls at image's root.
+
+    This test checks if all the present files and directories were listed. Also,
+    it checks if passing the slash or not changes the output, which it shouldn't.
+
+    Args:
+        u_boot_console: provides the means to interact with U-Boot's console.
+    """
+
+    no_slash = u_boot_console.run_command('sqfsls host 0')
+    slash = u_boot_console.run_command('sqfsls host 0 /')
+    assert no_slash == slash
+
+    expected_lines = ['empty-dir/', '1000   f1000', '4096   f4096', '5096   f5096',
+                      'subdir/', '<SYM>   sym', '4 file(s), 2 dir(s)']
+
+    output = u_boot_console.run_command('sqfsls host 0')
+    for line in expected_lines:
+        assert line in output
+
+def sqfs_ls_at_empty_dir(u_boot_console):
+    """ Runs sqfsls at an empty directory.
+
+    This tests checks if sqfsls will print anything other than the 'Empty directory'
+    message.
+
+    Args:
+        u_boot_console: provides the means to interact with U-Boot's console.
+    """
+    assert u_boot_console.run_command('sqfsls host 0 empty-dir') == 'Empty directory.'
+
+def sqfs_ls_at_subdir(u_boot_console):
+    """ Runs sqfsls at the SquashFS image's subdir.
+
+    This test checks if the path resolution works, since the directory is not the
+    root.
+
+    Args:
+        u_boot_console: provides the means to interact with U-Boot's console.
+    """
+    expected_lines = ['100   subdir-file', '1 file(s), 0 dir(s)']
+    output = u_boot_console.run_command('sqfsls host 0 subdir')
+    for line in expected_lines:
+        assert line in output
+
+def sqfs_ls_at_symlink(u_boot_console):
+    """ Runs sqfsls at a SquashFS image's symbolic link.
+
+    This test checks if the symbolic link's target resolution works.
+
+    Args:
+        u_boot_console: provides the means to interact with U-Boot's console.
+    """
+    # since sym -> subdir, the following outputs must be equal
+    output = u_boot_console.run_command('sqfsls host 0 sym')
+    output_subdir = u_boot_console.run_command('sqfsls host 0 subdir')
+    assert output == output_subdir
+
+    expected_lines = ['100   subdir-file', '1 file(s), 0 dir(s)']
+    for line in expected_lines:
+        assert line in output
+
+def sqfs_ls_at_non_existent_dir(u_boot_console):
+    """ Runs sqfsls at a file and at a non-existent directory.
+
+    This test checks if the SquashFS support won't crash if it doesn't find the
+    specified directory or if it takes a file as an input instead of an actual
+    directory. In both cases, the output should be the same.
+
+    Args:
+        u_boot_console: provides the means to interact with U-Boot's console.
+    """
+    out_non_existent = u_boot_console.run_command('sqfsls host 0 fff')
+    out_not_dir = u_boot_console.run_command('sqfsls host 0 f1000')
+    assert out_non_existent == out_not_dir
+    assert '** Cannot find directory. **' in out_non_existent
+
+def sqfs_run_all_ls_tests(u_boot_console):
+    """ Runs all the previously defined test cases.
+
+    Args:
+        u_boot_console: provides the means to interact with U-Boot's console.
+    """
+    sqfs_ls_at_root(u_boot_console)
+    sqfs_ls_at_empty_dir(u_boot_console)
+    sqfs_ls_at_subdir(u_boot_console)
+    sqfs_ls_at_symlink(u_boot_console)
+    sqfs_ls_at_non_existent_dir(u_boot_console)
 
 @pytest.mark.boardspec('sandbox')
 @pytest.mark.buildconfigspec('cmd_fs_generic')
@@ -12,25 +106,33 @@ from sqfs_common import *
 @pytest.mark.buildconfigspec('fs_squashfs')
 @pytest.mark.requiredtool('mksquashfs')
 def test_sqfs_ls(u_boot_console):
+    """ Executes the sqfsls test suite.
+
+    First, it generates the SquashFS images, then it runs the test cases and
+    finally cleans the workspace. If an exception is raised, the workspace is
+    cleaned before exiting.
+
+    Args:
+        u_boot_console: provides the means to interact with U-Boot's console.
+    """
     build_dir = u_boot_console.config.build_dir
-    for opt in comp_opts:
-        try:
-            opt.gen_image(build_dir)
-        except RuntimeError:
-            opt.clean_source(build_dir)
-            # skip unsupported compression types
-            continue
-        path = os.path.join(build_dir, "sqfs-" + opt.name)
-        output = u_boot_console.run_command("host bind 0 " + path)
 
+    # setup test environment
+    check_mksquashfs_version()
+    generate_sqfs_src_dir(build_dir)
+    make_all_images(build_dir)
+
+    # run all tests for each image
+    for image in STANDARD_TABLE:
         try:
-            # list files in root directory
-            output = u_boot_console.run_command("sqfsls host 0")
-            assert str(len(opt.files) + 1) + " file(s), 0 dir(s)" in output
-            assert "<SYM>   sym" in output
-            output = u_boot_console.run_command("sqfsls host 0 xxx")
-            assert "** Cannot find directory. **" in output
+            image_path = os.path.join(build_dir, image)
+            u_boot_console.run_command('host bind 0 {}'.format(image_path))
+            sqfs_run_all_ls_tests(u_boot_console)
         except:
-            opt.cleanup(build_dir)
-            assert False
-        opt.cleanup(build_dir)
+            clean_all_images(build_dir)
+            clean_sqfs_src_dir(build_dir)
+            raise AssertionError
+
+    # clean test environment
+    clean_all_images(build_dir)
+    clean_sqfs_src_dir(build_dir)
-- 
2.25.1



More information about the U-Boot mailing list