
Hi,
Le 20/11/2020 à 02:35, Tom Rini a écrit :
On Tue, Nov 03, 2020 at 12:11:25PM +0100, Richard Genoud wrote:
The code for reading a fragmented file is not functionnal. It's better to signal this to the user.
Signed-off-by: Richard Genoud richard.genoud@posteo.net
This change causes the test.py squashfs tests to fail. I am unsure if the problem is with the tests or this exposing further problems in the code.
Actually, reading a fragmented file doesn't work. The test only check if the file is read, but not it's content.
With this following patch, we'll see that the file content is not the same :
From 68f87301c059aaae8e90e42fbec9b560aee0c6eb Mon Sep 17 00:00:00 2001 From: Richard Genoud richard.genoud@posteo.net Date: Tue, 24 Nov 2020 17:45:07 +0100 Subject: [PATCH] test/py: SquashFS: Check if loaded file is corrupted
After loading the file in memory, its content should be checked for errors.
Signed-off-by: Richard Genoud richard.genoud@posteo.net --- test/py/tests/test_fs/test_squashfs/sqfs_common.py | 5 ++++- test/py/tests/test_fs/test_squashfs/test_sqfs_load.py | 6 +++++- 2 files changed, 9 insertions(+), 2 deletions(-)
diff --git a/test/py/tests/test_fs/test_squashfs/sqfs_common.py b/test/py/tests/test_fs/test_squashfs/sqfs_common.py index c96f92c1d8f..a7673c73762 100644 --- a/test/py/tests/test_fs/test_squashfs/sqfs_common.py +++ b/test/py/tests/test_fs/test_squashfs/sqfs_common.py @@ -6,6 +6,7 @@ import os import random import string import subprocess +import zlib
def sqfs_get_random_letters(size): letters = [] @@ -19,12 +20,14 @@ def sqfs_generate_file(path, size): file = open(path, "w") file.write(content) file.close() + return zlib.crc32(content.encode())
class Compression: def __init__(self, name, files, sizes, block_size = 4096): self.name = name self.files = files self.sizes = sizes + self.crc = [] self.mksquashfs_opts = " -b " + str(block_size) + " -comp " + self.name
def add_opt(self, opt): @@ -34,7 +37,7 @@ class Compression: src = os.path.join(build_dir, "sqfs_src/") os.mkdir(src) for (f, s) in zip(self.files, self.sizes): - sqfs_generate_file(src + f, s) + self.crc.append(sqfs_generate_file(src + f, s))
# the symbolic link always targets the first file os.symlink(self.files[0], src + "sym") 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 index 9e900623846..2ab4660036e 100644 --- a/test/py/tests/test_fs/test_squashfs/test_sqfs_load.py +++ b/test/py/tests/test_fs/test_squashfs/test_sqfs_load.py @@ -4,6 +4,7 @@
import os import pytest +import zlib from sqfs_common import *
@pytest.mark.boardspec('sandbox') @@ -14,6 +15,7 @@ from sqfs_common import * def test_sqfs_load(u_boot_console): build_dir = u_boot_console.config.build_dir command = "sqfsload host 0 $kernel_addr_r " + sum_command = "crc32 -v $kernel_addr_r $filesize "
for opt in comp_opts: # generate and load the squashfs image @@ -30,10 +32,12 @@ def test_sqfs_load(u_boot_console): output = u_boot_console.run_command(command + "xxx") assert "File not found." in output
- for (f, s) in zip(opt.files, opt.sizes): + for (f, s, c) in zip(opt.files, opt.sizes, opt.crc): try: output = u_boot_console.run_command(command + f) assert str(s) in output + output = u_boot_console.run_command(sum_command + format(c, '08x')) + assert not 'ERROR' in output except: assert False opt.cleanup(build_dir)