From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-15.8 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 21958C47082 for ; Mon, 24 May 2021 02:32:16 +0000 (UTC) Received: from phobos.denx.de (phobos.denx.de [85.214.62.61]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 6186C61139 for ; Mon, 24 May 2021 02:32:15 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 6186C61139 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id D179382E9C; Mon, 24 May 2021 04:32:07 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Authentication-Results: phobos.denx.de; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="VoukLLHl"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id ACE9D82E94; Mon, 24 May 2021 04:31:57 +0200 (CEST) Received: from mail-qk1-x732.google.com (mail-qk1-x732.google.com [IPv6:2607:f8b0:4864:20::732]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits)) (No client certificate requested) by phobos.denx.de (Postfix) with ESMTPS id B9B3882E8D for ; Mon, 24 May 2021 04:31:52 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=jmcosta944@gmail.com Received: by mail-qk1-x732.google.com with SMTP id 82so14357317qki.8 for ; Sun, 23 May 2021 19:31:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=i/QoXQadgZupvNuLlOoNpLEi/INQocuL+VfaRx7nqSQ=; b=VoukLLHlZdmKgcZDavE6p5Klonpx8dVqwanF97meOKhTkdaNw4jBJuO3fWzvC4bnaF +q8CPe8ZpBPcqthyMXlnz6DLxE+LrqP0ScQI6tf6BaV2s6NP9D9OEDjI8Di90Yg6hVEr osEVLXQpGRh20jkraGwrLVUKB6JVxKP+iCY7m/A1iCKt53Y7vPf4knFySqhFJs9C8lAj LgmHTC+/tNaFL8v2796+3VMtdZut7C/YpMzzxvBfL1/Jvo6F8pyG3uXeHxzWVAfHizqI aWuz6rJa14ZW+tRQ71VBqy+G40dvGszyviL/Q1tcj5W8FjYJXlnzsW5ht16CRBs4O84k YhAg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=i/QoXQadgZupvNuLlOoNpLEi/INQocuL+VfaRx7nqSQ=; b=t+uGb+3ZGZ02CdYLHWGU7KO3DxQRVBAELOXfqQ/yKltlUzoZ9r9zgdEtQHpJr70Ytg 1C4ZUqy0MGMH2lCSRZ9xDl6CeW4521zU+pg8+N9JUXyyFjGcOmiT2ogbwXQCB+kPveOT yJ9HEPy6Sr6qfOd7IWy8nQK2mb15exv2RAMXcG/2twZHG1zJC2kRNN47bPzp+oJdSaAv EQteDvPdOQtyNVy4X+FDPbGaQGS7cH7xCF4MILEy7cxoJCpxsr21ZJiJSxgIA5lNQVfW /NgNlvERmHnJHhzBgYyexXcJFZeLlJfMlYvqpv94IuiFvWsdASZht3lhaM8cYoXmYhX1 B9Kw== X-Gm-Message-State: AOAM531mQqmxSFzCvDzkXmh9o/cPnlq7gOFNqj2ESs9xnVSvXiZoZamn YQpIhGI4YstMnEUDu3LRiuep4m+FLzfpKU+n X-Google-Smtp-Source: ABdhPJy8bjZh8CCTzHpaXxWbexHOpPeSFHYvLboLz9MLq9ipQlKNFAO28ntgblc4vrdyiz8tdQMlUg== X-Received: by 2002:a05:620a:200d:: with SMTP id c13mr26983995qka.360.1621823511432; Sun, 23 May 2021 19:31:51 -0700 (PDT) Received: from localhost.localdomain ([177.194.32.83]) by smtp.googlemail.com with ESMTPSA id h5sm10385647qkg.122.2021.05.23.19.31.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 23 May 2021 19:31:51 -0700 (PDT) From: Joao Marcos Costa To: u-boot@lists.denx.de Cc: thomas.petazzoni@bootlin.com, miquel.raynal@bootlin.com, richard.genoud@posteo.net, sjg@chromium.org, Joao Marcos Costa Subject: [PATCH 2/3] test/py: rewrite sqfsload command test suite Date: Sun, 23 May 2021 23:31:32 -0300 Message-Id: <20210524023133.22100-3-jmcosta944@gmail.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210524023133.22100-1-jmcosta944@gmail.com> References: <20210524023133.22100-1-jmcosta944@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.34 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" X-Virus-Scanned: clamav-milter 0.102.4 at phobos.denx.de X-Virus-Status: Clean The previous strategy to know if a file was correctly loaded was to check for how many bytes were read and compare it against the file's original size. Since this is not a good solution, replace it by comparing the checksum of the loaded bytes against the original file's checksum. Add more test cases: files at a sub-directory and non-existent file. Signed-off-by: Joao Marcos Costa --- .../test_fs/test_squashfs/test_sqfs_load.py | 99 +++++++++++++------ 1 file changed, 69 insertions(+), 30 deletions(-) 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 9e90062384..0b416eb4c3 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 @@ -1,11 +1,62 @@ # SPDX-License-Identifier: GPL-2.0 -# Copyright (C) 2020 Bootlin +# Copyright (C) 2021 Bootlin # Author: Joao Marcos Costa import os import pytest from sqfs_common import * +@pytest.mark.requiredtool('md5sum') +def original_md5sum(path): + out = subprocess.run(['md5sum ' + path], shell = True, check = True, + capture_output = True, text = True) + checksum = out.stdout.split()[0] + + return checksum + +def uboot_md5sum(u_boot_console, address, count): + out = u_boot_console.run_command('md5sum {} {}'.format(address, count)) + checksum = out.split()[-1] + + return checksum + +# loads files and asserts checksums +def sqfs_load_files(u_boot_console, files, sizes, address): + build_dir = u_boot_console.config.build_dir + for (f, size) in zip(files, sizes): + out = u_boot_console.run_command('sqfsload host 0 {} {}'.format(address, f)) + + # check if the right amount of bytes was read + assert size in out + + # compare original file's checksum against u-boot's + u_boot_checksum = uboot_md5sum(u_boot_console, address, hex(int(size))) + original_checksum = original_md5sum(os.path.join(build_dir, sqfs_src_dir + '/' + f)) + assert u_boot_checksum == original_checksum + +def sqfs_load_files_at_root(u_boot_console): + files = ['f4096', 'f5096', 'f1000'] + sizes = ['4096', '5096', '1000'] + address = '$kernel_addr_r' + sqfs_load_files(u_boot_console, files, sizes, address) + +def sqfs_load_files_at_subdir(u_boot_console): + files = ['subdir/subdir-file'] + sizes = ['100'] + address = '$kernel_addr_r' + sqfs_load_files(u_boot_console, files, sizes, address) + +def sqfs_load_non_existent_file(u_boot_console): + address = '$kernel_addr_r' + f = 'non-existent' + out = u_boot_console.run_command('sqfsload host 0 {} {}'.format(address, f)) + assert 'Failed to load' in out + +def sqfs_run_all_load_tests(u_boot_console): + sqfs_load_files_at_root(u_boot_console) + sqfs_load_files_at_subdir(u_boot_console) + sqfs_load_non_existent_file(u_boot_console) + @pytest.mark.boardspec('sandbox') @pytest.mark.buildconfigspec('cmd_fs_generic') @pytest.mark.buildconfigspec('cmd_squashfs') @@ -13,34 +64,22 @@ from sqfs_common import * @pytest.mark.requiredtool('mksquashfs') def test_sqfs_load(u_boot_console): build_dir = u_boot_console.config.build_dir - command = "sqfsload host 0 $kernel_addr_r " - for opt in comp_opts: - # generate and load the squashfs image + # setup test environment + generate_sqfs_src_dir(build_dir) + make_all_images(build_dir) + + # run all tests for each image + for image in standard_table.keys(): 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) - - output = u_boot_console.run_command(command + "xxx") - assert "File not found." in output - - for (f, s) in zip(opt.files, opt.sizes): - try: - output = u_boot_console.run_command(command + f) - assert str(s) in output - except: - assert False - opt.cleanup(build_dir) - - # test symbolic link - output = u_boot_console.run_command(command + "sym") - assert str(opt.sizes[0]) in output - - # remove generated files - opt.cleanup(build_dir) + image_path = os.path.join(build_dir, image) + u_boot_console.run_command('host bind 0 {}'.format(image_path)) + sqfs_run_all_load_tests(u_boot_console) + except: + 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