test/py: rewrite sqfsls command test suite
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@gmail.com>
This commit is contained in:
parent
edb5545dcb
commit
4be66e420a
@ -4,7 +4,101 @@
|
|||||||
|
|
||||||
import os
|
import os
|
||||||
import pytest
|
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.boardspec('sandbox')
|
||||||
@pytest.mark.buildconfigspec('cmd_fs_generic')
|
@pytest.mark.buildconfigspec('cmd_fs_generic')
|
||||||
@ -12,25 +106,33 @@ from sqfs_common import *
|
|||||||
@pytest.mark.buildconfigspec('fs_squashfs')
|
@pytest.mark.buildconfigspec('fs_squashfs')
|
||||||
@pytest.mark.requiredtool('mksquashfs')
|
@pytest.mark.requiredtool('mksquashfs')
|
||||||
def test_sqfs_ls(u_boot_console):
|
def test_sqfs_ls(u_boot_console):
|
||||||
build_dir = u_boot_console.config.build_dir
|
""" Executes the sqfsls test suite.
|
||||||
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)
|
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
|
# 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:
|
try:
|
||||||
# list files in root directory
|
image_path = os.path.join(build_dir, image)
|
||||||
output = u_boot_console.run_command("sqfsls host 0")
|
u_boot_console.run_command('host bind 0 {}'.format(image_path))
|
||||||
assert str(len(opt.files) + 1) + " file(s), 0 dir(s)" in output
|
sqfs_run_all_ls_tests(u_boot_console)
|
||||||
assert "<SYM> sym" in output
|
|
||||||
output = u_boot_console.run_command("sqfsls host 0 xxx")
|
|
||||||
assert "** Cannot find directory. **" in output
|
|
||||||
except:
|
except:
|
||||||
opt.cleanup(build_dir)
|
clean_all_images(build_dir)
|
||||||
assert False
|
clean_sqfs_src_dir(build_dir)
|
||||||
opt.cleanup(build_dir)
|
raise AssertionError
|
||||||
|
|
||||||
|
# clean test environment
|
||||||
|
clean_all_images(build_dir)
|
||||||
|
clean_sqfs_src_dir(build_dir)
|
||||||
|
Loading…
Reference in New Issue
Block a user