diff mbox series

[v4,6/6] test/py: Add tests for the SquashFS commands

Message ID 20200730133352.18223-7-joaomarcos.costa@bootlin.com
State Accepted
Commit f428e33b6bd7d01dc488534f59f56c4907c76b2f
Delegated to: Tom Rini
Headers show
Series Add support for the SquashFS filesystem | expand

Commit Message

Joao Marcos Costa July 30, 2020, 1:33 p.m. UTC
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@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

Comments

Tom Rini Aug. 8, 2020, 12:31 p.m. UTC | #1
On Thu, Jul 30, 2020 at 03:33:52PM +0200, Joao Marcos Costa wrote:

> 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@bootlin.com>

Applied to u-boot/master, thanks!
Tom Rini Aug. 8, 2020, 2:41 p.m. UTC | #2
On Sat, Aug 08, 2020 at 08:31:06AM -0400, Tom Rini wrote:
> On Thu, Jul 30, 2020 at 03:33:52PM +0200, Joao Marcos Costa wrote:
> 
> > 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@bootlin.com>
> 
> Applied to u-boot/master, thanks!

But... CI got backed up and I missed a real failure.  Over at
https://dev.azure.com/u-boot/u-boot/_build/results?buildId=1053&view=logs&j=50449d1b-398e-53ae-48fa-6bf338edeb51&t=97605dd2-f5a5-5dd7-2118-315ffdc8bcd6&l=558
the problem is:
>       os.mkdir(src)
E       PermissionError: [Errno 13] Permission denied: 'test/py/tests/test_fs/test_squashfs/sqfs_src/'

because our source directory is read-only.  I believe you need to use
cons.config.build_dir instead to get to our build directory.  Both tests
fail in this manner.  Can you please confirm my suggestion fixes this?
If you don't want to configure Azure support directly you can submit a
PR against the github mirror and that in turn will trigger an Azure run
you can follow.  Thanks!

> 
> -- 
> Tom
Joao Marcos Costa Aug. 10, 2020, 12:35 p.m. UTC | #3
Hello!

On Sat, 8 Aug 2020 10:41:38 -0400
Tom Rini <trini@konsulko.com> wrote:

> On Sat, Aug 08, 2020 at 08:31:06AM -0400, Tom Rini wrote:
> > On Thu, Jul 30, 2020 at 03:33:52PM +0200, Joao Marcos Costa wrote:
> >   
> > > 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@bootlin.com>  
> > 
> > Applied to u-boot/master, thanks!  
> 
> But... CI got backed up and I missed a real failure.  Over at
> https://dev.azure.com/u-boot/u-boot/_build/results?buildId=1053&view=logs&j=50449d1b-398e-53ae-48fa-6bf338edeb51&t=97605dd2-f5a5-5dd7-2118-315ffdc8bcd6&l=558
> the problem is:
> >       os.mkdir(src)  
> E       PermissionError: [Errno 13] Permission denied:
> 'test/py/tests/test_fs/test_squashfs/sqfs_src/'
> 
> because our source directory is read-only.  I believe you need to use
> cons.config.build_dir instead to get to our build directory.  Both
> tests fail in this manner.  Can you please confirm my suggestion
> fixes this? If you don't want to configure Azure support directly you
> can submit a PR against the github mirror and that in turn will
> trigger an Azure run you can follow.  Thanks!

I submitted the PR that applies your suggestion and it really
solves the problem. Here is the link to the log:
https://travis-ci.org/github/u-boot/u-boot/jobs/716488309#L1307

I will send the patch in a few minutes. Thanks!

> 
> > 
> > -- 
> > Tom  
> 
> 
> 

Joao Marcos
diff mbox series

Patch

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@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@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@bootlin.com>
+
+import os
+import pytest
+from sqfs_common import *
+
+@pytest.mark.boardspec('sandbox')
+@pytest.mark.buildconfigspec('cmd_fs_generic')
+@pytest.mark.buildconfigspec('cmd_squashfs')
+@pytest.mark.buildconfigspec('fs_squashfs')
+@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@bootlin.com>
+
+import os
+import pytest
+from sqfs_common import *
+
+@pytest.mark.boardspec('sandbox')
+@pytest.mark.buildconfigspec('cmd_fs_generic')
+@pytest.mark.buildconfigspec('cmd_squashfs')
+@pytest.mark.buildconfigspec('fs_squashfs')
+@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()