[PATCH v4 6/6] test/py: Add tests for the SquashFS commands
Joao Marcos Costa
joaomarcos.costa at bootlin.com
Thu Jul 30 15:33:52 CEST 2020
Add Python scripts to test 'ls' and 'load' commands. The scripts
generate a SquashFS image and clean the directory after the assertions,
or if an exception is raised.
Signed-off-by: Joao Marcos Costa <joaomarcos.costa at bootlin.com>
---
Changes in v4:
- This patch was added in v4 and did not exist in the last version.
MAINTAINERS | 1 +
configs/sandbox_defconfig | 1 +
.../test_fs/test_squashfs/sqfs_common.py | 42 +++++++++++++++++++
.../test_fs/test_squashfs/test_sqfs_load.py | 33 +++++++++++++++
.../test_fs/test_squashfs/test_sqfs_ls.py | 26 ++++++++++++
5 files changed, 103 insertions(+)
create mode 100644 test/py/tests/test_fs/test_squashfs/sqfs_common.py
create mode 100644 test/py/tests/test_fs/test_squashfs/test_sqfs_load.py
create mode 100644 test/py/tests/test_fs/test_squashfs/test_sqfs_ls.py
diff --git a/MAINTAINERS b/MAINTAINERS
index 8ec6c5db81..b12074ff3f 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -975,6 +975,7 @@ S: Maintained
F: fs/squashfs/
F: include/sqfs.h
F: cmd/sqfs.c
+F: test/py/tests/test_fs/test_squashfs/
TARGET_BCMNS3
M: Bharat Gooty <bharat.gooty at broadcom.com>
diff --git a/configs/sandbox_defconfig b/configs/sandbox_defconfig
index 829056e9ce..4dd5f87c68 100644
--- a/configs/sandbox_defconfig
+++ b/configs/sandbox_defconfig
@@ -84,6 +84,7 @@ CONFIG_CMD_TPM=y
CONFIG_CMD_TPM_TEST=y
CONFIG_CMD_BTRFS=y
CONFIG_CMD_CBFS=y
+CONFIG_CMD_SQUASHFS=y
CONFIG_CMD_CRAMFS=y
CONFIG_CMD_EXT4_WRITE=y
CONFIG_CMD_MTDPARTS=y
diff --git a/test/py/tests/test_fs/test_squashfs/sqfs_common.py b/test/py/tests/test_fs/test_squashfs/sqfs_common.py
new file mode 100644
index 0000000000..9ef7b19ad9
--- /dev/null
+++ b/test/py/tests/test_fs/test_squashfs/sqfs_common.py
@@ -0,0 +1,42 @@
+# SPDX-License-Identifier: GPL-2.0
+# Copyright (C) 2020 Bootlin
+# Author: Joao Marcos Costa <joaomarcos.costa at bootlin.com>
+
+import os
+import random
+import string
+
+def sqfs_get_random_letters(size):
+ letters = []
+ for i in range(0, size):
+ letters.append(random.choice(string.ascii_letters))
+
+ return ''.join(letters)
+
+def sqfs_generate_file(path, size):
+ content = sqfs_get_random_letters(size)
+ file = open(path, "w")
+ file.write(content)
+ file.close()
+
+# generate image with three files and a symbolic link
+def sqfs_generate_image():
+ src = "test/py/tests/test_fs/test_squashfs/sqfs_src/"
+ dest = "test/py/tests/test_fs/test_squashfs/sqfs"
+ os.mkdir(src)
+ sqfs_generate_file(src + "frag_only", 100)
+ sqfs_generate_file(src + "blks_frag", 5100)
+ sqfs_generate_file(src + "blks_only", 4096)
+ os.symlink("frag_only", src + "sym")
+ os.system("mksquashfs " + src + " " + dest + " -b 4096 -always-use-fragments")
+
+# removes all files created by sqfs_generate_image()
+def sqfs_clean():
+ src = "test/py/tests/test_fs/test_squashfs/sqfs_src/"
+ dest = "test/py/tests/test_fs/test_squashfs/sqfs"
+ os.remove(src + "frag_only")
+ os.remove(src + "blks_frag")
+ os.remove(src + "blks_only")
+ os.remove(src + "sym")
+ os.rmdir(src)
+ os.remove(dest)
diff --git a/test/py/tests/test_fs/test_squashfs/test_sqfs_load.py b/test/py/tests/test_fs/test_squashfs/test_sqfs_load.py
new file mode 100644
index 0000000000..9b828fdf04
--- /dev/null
+++ b/test/py/tests/test_fs/test_squashfs/test_sqfs_load.py
@@ -0,0 +1,33 @@
+# SPDX-License-Identifier: GPL-2.0
+# Copyright (C) 2020 Bootlin
+# Author: Joao Marcos Costa <joaomarcos.costa at bootlin.com>
+
+import os
+import pytest
+from sqfs_common import *
+
+ at pytest.mark.boardspec('sandbox')
+ at pytest.mark.buildconfigspec('cmd_fs_generic')
+ at pytest.mark.buildconfigspec('cmd_squashfs')
+ at pytest.mark.buildconfigspec('fs_squashfs')
+ at pytest.mark.requiredtool('mksquashfs')
+def test_sqfs_load(u_boot_console):
+ sqfs_generate_image()
+ command = "sqfsload host 0 $kernel_addr_r "
+ path = "test/py/tests/test_fs/test_squashfs/sqfs"
+
+ try:
+ output = u_boot_console.run_command("host bind 0 " + path)
+ output = u_boot_console.run_command(command + "xxx")
+ assert "File not found." in output
+ output = u_boot_console.run_command(command + "frag_only")
+ assert "100 bytes read in" in output
+ output = u_boot_console.run_command(command + "blks_frag")
+ assert "5100 bytes read in" in output
+ output = u_boot_console.run_command(command + "blks_only")
+ assert "4096 bytes read in" in output
+ output = u_boot_console.run_command(command + "sym")
+ assert "100 bytes read in" in output
+ except:
+ sqfs_clean()
+ sqfs_clean()
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
new file mode 100644
index 0000000000..dc31f1a50e
--- /dev/null
+++ b/test/py/tests/test_fs/test_squashfs/test_sqfs_ls.py
@@ -0,0 +1,26 @@
+# SPDX-License-Identifier: GPL-2.0
+# Copyright (C) 2020 Bootlin
+# Author: Joao Marcos Costa <joaomarcos.costa at bootlin.com>
+
+import os
+import pytest
+from sqfs_common import *
+
+ at pytest.mark.boardspec('sandbox')
+ at pytest.mark.buildconfigspec('cmd_fs_generic')
+ at pytest.mark.buildconfigspec('cmd_squashfs')
+ at pytest.mark.buildconfigspec('fs_squashfs')
+ at pytest.mark.requiredtool('mksquashfs')
+def test_sqfs_ls(u_boot_console):
+ sqfs_generate_image()
+ path = "test/py/tests/test_fs/test_squashfs/sqfs"
+ try:
+ output = u_boot_console.run_command("host bind 0 " + path)
+ output = u_boot_console.run_command("sqfsls host 0")
+ assert "4 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
+ except:
+ sqfs_clean()
+ sqfs_clean()
--
2.17.1
More information about the U-Boot
mailing list