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 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 smtp.lore.kernel.org (Postfix) with ESMTPS id 0AD2FC433EF for ; Wed, 13 Apr 2022 08:29:53 +0000 (UTC) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id BECE480330; Wed, 13 Apr 2022 10:29:51 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=linaro.org 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=linaro.org header.i=@linaro.org header.b="Guf5wqo7"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id 6EA0080330; Wed, 13 Apr 2022 10:29:50 +0200 (CEST) Received: from mail-qk1-x72f.google.com (mail-qk1-x72f.google.com [IPv6:2607:f8b0:4864:20::72f]) (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 2E01B8141C for ; Wed, 13 Apr 2022 10:29:45 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=sughosh.ganu@linaro.org Received: by mail-qk1-x72f.google.com with SMTP id t207so855770qke.2 for ; Wed, 13 Apr 2022 01:29:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=mime-version:references:in-reply-to:from:date:message-id:subject:to; bh=q9by6d8VbI6uoSIx4juLf/mhp7Gxl7IoVoIhuY8+LvI=; b=Guf5wqo74i6mgj77XurTW0H/da0a09X74rUop16TOTiyo9nrV3IR7vsa33L+6fXHkC 1LbKKVL+PXA578Y3ioIugjZ3Msix6VDJQ/VzZFTipxew6D715uYYcr0nekYoOxxdr5aN 0RYssXecYEr0iCe4HWhnpPbh4RRBXiswOt1nUzmNc8ekCfbhUVCjofALHpvX/PNAdN1h Po5E3ADNCAJzwN48qWcImkcB+db9usDJhMKzO8U3kxEHO0ntX5f+PIj/zAEyu+lBssZX /T739wINLCDj8lUl5O8LVfAUfDplGrkdQnLxVl7IZ57GxM15LrMbg5mUh05cN0ApnyLc XM3w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to; bh=q9by6d8VbI6uoSIx4juLf/mhp7Gxl7IoVoIhuY8+LvI=; b=NJlTc6W+6mVc6f22c1wZwYjtso2kCI8ALWXfjkd4MoaWpZ9QgwOMutGoaYibcE6MTd b3XJzzs+2DrZlmfCIpM3mD9p7vFD+F6GoLLVW+1S4EjT+Wieruj68AhQDJJC2lyoXmv0 UEZQGNNbz7dWcqzbz08xXJsnKVRb6S4+X7c/pQ3YcOpgxm7B0s4sue0maMK+bWrv4/6I xRnnxqYkQaOhdw2pyfTQjomLe8jRR7M7v27H0DPYGXcIFAPldG6+mEA1pyjCS7N4rKu8 mAVNWahUNYsgTSvcP/ltRIlIdv7RRi/WgcUEqO2DM/iMNsiUXXrNMexYWcPCColStMCU 2k4w== X-Gm-Message-State: AOAM531HX0rippemZbl0+EnGi8aA0ATnO4non9pmRVuPLfLdSRSW12+a iC+8kIeLGqYLYgow8qCgNEYrpKRYBbZWyDhX11yqDw== X-Google-Smtp-Source: ABdhPJzVeuZ0D5SJqU4xpXARyD1GEtXxX8dLZ01S1k5YiMwn/X1L3jYVLbvEBZUEMC+LgkciIpR+bwfCuE6MgM9sJv4= X-Received: by 2002:a05:620a:2892:b0:67e:be24:e5d7 with SMTP id j18-20020a05620a289200b0067ebe24e5d7mr5811262qkp.762.1649838583474; Wed, 13 Apr 2022 01:29:43 -0700 (PDT) MIME-Version: 1.0 References: <20220412130447.300574-1-sughosh.ganu@linaro.org> <20220412130447.300574-6-sughosh.ganu@linaro.org> <20220413063532.GD87648@laputa> In-Reply-To: <20220413063532.GD87648@laputa> From: Sughosh Ganu Date: Wed, 13 Apr 2022 13:59:32 +0530 Message-ID: Subject: Re: [PATCH v6 5/8] test: capsule: Modify the capsule tests to use GUID values for sandbox To: AKASHI Takahiro , Sughosh Ganu , u-boot@lists.denx.de, Heinrich Schuchardt , Ilias Apalodimas , Ying-Chun Liu , Tuomas Tynkkynen , Heiko Thiery , Frieder Schrempf , Michael Walle , Masami Hiramatsu , Jassi Brar , Michal Simek , Michal Simek Content-Type: text/plain; charset="UTF-8" X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.39 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.103.5 at phobos.denx.de X-Virus-Status: Clean On Wed, 13 Apr 2022 at 12:05, AKASHI Takahiro wrote: > > On Tue, Apr 12, 2022 at 06:34:44PM +0530, Sughosh Ganu wrote: > > The current UEFI capsule updation code uses two GUID values, one for > > FIT images, and one for raw images across platforms. This logic is > > being changed to have GUID values per image, per platform. Change the > > tests for the capsule update code to reflect this change. The GUID > > values now used are the ones specific to the sandbox platform -- one > > for the u-boot image, and another for the u-boot environment image. > > > > Install the FMP instance for raw images on the sandbox variant for > > testing the capsule update code. Install the FMP instance for the FIT > > images on the sandbox64 and sandbox_flattree variant for testing > > capsule update for FIT images. This is being done by splitting the > > capsule update script for FIT and raw images. > > Why do we have to have different configs to test FIT and RAW capsules? With the current design, we have an FMP instance per platform. But the struct efi_fw_images can be extended to have a fmp member, so every image would have an FMP instance associated with it. With that, a platform can define multiple FMP instances. Would you prefer that? > > > Signed-off-by: Sughosh Ganu > > --- > > > > Changes since V5: > > * Restart the platform before starting the tests. This is done to > > clear out any stale state from a previously run test. > > > > > > configs/sandbox64_defconfig | 1 - > > configs/sandbox_defconfig | 1 - > > configs/sandbox_flattree_defconfig | 5 + > > test/py/tests/test_efi_capsule/conftest.py | 21 +- > > .../test_capsule_firmware_fit.py | 191 ++++++++++++++++++ > > ...rmware.py => test_capsule_firmware_raw.py} | 167 ++++++--------- > > 6 files changed, 270 insertions(+), 116 deletions(-) > > create mode 100644 test/py/tests/test_efi_capsule/test_capsule_firmware_fit.py > > rename test/py/tests/test_efi_capsule/{test_capsule_firmware.py => test_capsule_firmware_raw.py} (75%) > > > > diff --git a/configs/sandbox64_defconfig b/configs/sandbox64_defconfig > > index 88f9ecbb7f..db748bbed3 100644 > > --- a/configs/sandbox64_defconfig > > +++ b/configs/sandbox64_defconfig > > @@ -246,7 +246,6 @@ CONFIG_ERRNO_STR=y > > CONFIG_EFI_RUNTIME_UPDATE_CAPSULE=y > > CONFIG_EFI_CAPSULE_ON_DISK=y > > CONFIG_EFI_CAPSULE_FIRMWARE_FIT=y > > -CONFIG_EFI_CAPSULE_FIRMWARE_RAW=y > > CONFIG_EFI_SECURE_BOOT=y > > CONFIG_TEST_FDTDEC=y > > CONFIG_UNIT_TEST=y > > diff --git a/configs/sandbox_defconfig b/configs/sandbox_defconfig > > index cb8d590eb6..0dfc2d863d 100644 > > --- a/configs/sandbox_defconfig > > +++ b/configs/sandbox_defconfig > > @@ -319,7 +319,6 @@ CONFIG_SHA384=y > > CONFIG_ERRNO_STR=y > > CONFIG_EFI_RUNTIME_UPDATE_CAPSULE=y > > CONFIG_EFI_CAPSULE_ON_DISK=y > > -CONFIG_EFI_CAPSULE_FIRMWARE_FIT=y > > CONFIG_EFI_CAPSULE_FIRMWARE_RAW=y > > CONFIG_EFI_SECURE_BOOT=y > > CONFIG_TEST_FDTDEC=y > > diff --git a/configs/sandbox_flattree_defconfig b/configs/sandbox_flattree_defconfig > > index 24b272068a..27dd38a0c0 100644 > > --- a/configs/sandbox_flattree_defconfig > > +++ b/configs/sandbox_flattree_defconfig > > @@ -28,6 +28,7 @@ CONFIG_CMD_BOOTEFI_HELLO=y > > CONFIG_CMD_ASKENV=y > > CONFIG_CMD_GREPENV=y > > CONFIG_CMD_ERASEENV=y > > +CONFIG_CMD_NVEDIT_EFI=y > > CONFIG_CMD_NVEDIT_INFO=y > > CONFIG_CMD_NVEDIT_LOAD=y > > CONFIG_CMD_NVEDIT_SELECT=y > > @@ -209,3 +210,7 @@ CONFIG_HEXDUMP=y > > CONFIG_UNIT_TEST=y > > CONFIG_UT_TIME=y > > CONFIG_UT_DM=y > > +CONFIG_EFI_RUNTIME_UPDATE_CAPSULE=y > > +CONFIG_EFI_CAPSULE_ON_DISK=y > > +CONFIG_EFI_CAPSULE_FIRMWARE_FIT=y > > +CONFIG_DFU_SF=y > > diff --git a/test/py/tests/test_efi_capsule/conftest.py b/test/py/tests/test_efi_capsule/conftest.py > > index 9076087a12..d757415c88 100644 > > --- a/test/py/tests/test_efi_capsule/conftest.py > > +++ b/test/py/tests/test_efi_capsule/conftest.py > > @@ -72,7 +72,7 @@ def efi_capsule_data(request, u_boot_config): > > > > # Create capsule files > > # two regions: one for u-boot.bin and the other for u-boot.env > > - check_call('cd %s; echo -n u-boot:Old > u-boot.bin.old; echo -n u-boot:New > u-boot.bin.new; echo -n u-boot-env:Old -> u-boot.env.old; echo -n u-boot-env:New > u-boot.env.new' % data_dir, > > + check_call('cd %s; echo -n u-boot:Old > u-boot.bin.old; echo -n u-boot:New > u-boot.bin.new; echo -n u-boot-env:Old > u-boot.env.old; echo -n u-boot-env:New > u-boot.env.new' % data_dir, > > shell=True) > > check_call('sed -e \"s?BINFILE1?u-boot.bin.new?\" -e \"s?BINFILE2?u-boot.env.new?\" %s/test/py/tests/test_efi_capsule/uboot_bin_env.its > %s/uboot_bin_env.its' % > > (u_boot_config.source_dir, data_dir), > > @@ -80,21 +80,29 @@ def efi_capsule_data(request, u_boot_config): > > check_call('cd %s; %s/tools/mkimage -f uboot_bin_env.its uboot_bin_env.itb' % > > (data_dir, u_boot_config.build_dir), > > shell=True) > > - check_call('cd %s; %s/tools/mkeficapsule --index 1 --fit uboot_bin_env.itb Test01' % > > + check_call('cd %s; %s/tools/mkeficapsule --index 1 --guid 09D7CF52-0720-4710-91D1-08469B7FE9C8 u-boot.bin.new Test01' % > > (data_dir, u_boot_config.build_dir), > > shell=True) > > - check_call('cd %s; %s/tools/mkeficapsule --index 1 --raw u-boot.bin.new Test02' % > > + check_call('cd %s; %s/tools/mkeficapsule --index 2 --guid 5A7021F5-FEF2-48B4-AABA-832E777418C0 u-boot.env.new Test02' % > > (data_dir, u_boot_config.build_dir), > > shell=True) > > - check_call('cd %s; %s/tools/mkeficapsule --index 1 --guid E2BB9C06-70E9-4B14-97A3-5A7913176E3F u-boot.bin.new Test03' % > > + check_call('cd %s; %s/tools/mkeficapsule --index 1 --guid 058B7D83-50D5-4C47-A195-60D86AD341C4 u-boot.bin.new Test03' % > > (data_dir, u_boot_config.build_dir), > > shell=True) > > + check_call('cd %s; %s/tools/mkeficapsule --index 1 --guid 3673B45D-6A7C-46F3-9E60-ADABB03F7937 uboot_bin_env.itb Test04' % > > + (data_dir, u_boot_config.build_dir), > > + shell=True) > > + check_call('cd %s; %s/tools/mkeficapsule --index 1 --guid 058B7D83-50D5-4C47-A195-60D86AD341C4 uboot_bin_env.itb Test05' % > > + (data_dir, u_boot_config.build_dir), > > + shell=True) > > + > > if capsule_auth_enabled: > > # firmware signed with proper key > > check_call('cd %s; ' > > '%s/tools/mkeficapsule --index 1 --monotonic-count 1 ' > > '--private-key SIGNER.key --certificate SIGNER.crt ' > > - '--raw u-boot.bin.new Test11' > > + '--guid 09D7DF52-0720-4710-91D1-08469B7FE9C8 ' > > + 'u-boot.bin.new Test11' > > % (data_dir, u_boot_config.build_dir), > > shell=True) > > # firmware signed with *mal* key > > @@ -102,7 +110,8 @@ def efi_capsule_data(request, u_boot_config): > > '%s/tools/mkeficapsule --index 1 --monotonic-count 1 ' > > '--private-key SIGNER2.key ' > > '--certificate SIGNER2.crt ' > > - '--raw u-boot.bin.new Test12' > > + '--guid 09D7DF52-0720-4710-91D1-08469B7FE9C8 ' > > + 'u-boot.bin.new Test12' > > % (data_dir, u_boot_config.build_dir), > > shell=True) > > > > diff --git a/test/py/tests/test_efi_capsule/test_capsule_firmware_fit.py b/test/py/tests/test_efi_capsule/test_capsule_firmware_fit.py > > new file mode 100644 > > index 0000000000..5bef84958b > > --- /dev/null > > +++ b/test/py/tests/test_efi_capsule/test_capsule_firmware_fit.py > > If possible, can you manage the git history so that > test/py/tests/test_efi_capsule/test_capsule_firmware_fit.py > is the original and > test/py/tests/test_efi_capsule/test_capsule_firmware_raw.py > is a new test? > I think that will reflect the correct history of development/changes. Okay. Let me see if/how that can be done. If you know a way to do so, please let me know. -sughosh > > -Takahiro Akashi > > > @@ -0,0 +1,191 @@ > > +# SPDX-License-Identifier: GPL-2.0+ > > +# Copyright (c) 2020, Linaro Limited > > +# Author: AKASHI Takahiro > > +# > > +# U-Boot UEFI: Firmware Update Test > > + > > +""" > > +This test verifies capsule-on-disk firmware update for FIT images > > +""" > > + > > +from subprocess import check_call, check_output, CalledProcessError > > +import pytest > > +from capsule_defs import * > > + > > + > > +@pytest.mark.boardspec('sandbox64') > > +@pytest.mark.boardspec('sandbox_flattree') > > +@pytest.mark.buildconfigspec('efi_capsule_firmware_fit') > > +@pytest.mark.buildconfigspec('efi_capsule_on_disk') > > +@pytest.mark.buildconfigspec('dfu') > > +@pytest.mark.buildconfigspec('dfu_sf') > > +@pytest.mark.buildconfigspec('cmd_efidebug') > > +@pytest.mark.buildconfigspec('cmd_fat') > > +@pytest.mark.buildconfigspec('cmd_memory') > > +@pytest.mark.buildconfigspec('cmd_nvedit_efi') > > +@pytest.mark.buildconfigspec('cmd_sf') > > +@pytest.mark.slow > > +class TestEfiCapsuleFirmwareFit(object): > > + def test_efi_capsule_fw1( > > + self, u_boot_config, u_boot_console, efi_capsule_data): > > + """ > > + Test Case 1 - Update U-Boot and U-Boot environment on SPI Flash > > + but with an incorrect GUID value in the capsule > > + No update should happen > > + 0x100000-0x150000: U-Boot binary (but dummy) > > + 0x150000-0x200000: U-Boot environment (but dummy) > > + """ > > + # other tests might have run and the > > + # system might not be in a clean state. > > + # Restart before starting the tests. > > + u_boot_console.restart_uboot() > > + > > + disk_img = efi_capsule_data > > + with u_boot_console.log.section('Test Case 1-a, before reboot'): > > + output = u_boot_console.run_command_list([ > > + 'host bind 0 %s' % disk_img, > > + 'efidebug boot add -b 1 TEST host 0:1 /helloworld.efi -s ""', > > + 'efidebug boot order 1', > > + 'env set -e -nv -bs -rt OsIndications =0x0000000000000004', > > + 'env set dfu_alt_info "sf 0:0=u-boot-bin raw 0x100000 0x50000;u-boot-env raw 0x150000 0x200000"', > > + 'env save']) > > + > > + # initialize contents > > + output = u_boot_console.run_command_list([ > > + 'sf probe 0:0', > > + 'fatload host 0:1 4000000 %s/u-boot.bin.old' % CAPSULE_DATA_DIR, > > + 'sf write 4000000 100000 10', > > + 'sf read 5000000 100000 10', > > + 'md.b 5000000 10']) > > + assert 'Old' in ''.join(output) > > + output = u_boot_console.run_command_list([ > > + 'sf probe 0:0', > > + 'fatload host 0:1 4000000 %s/u-boot.env.old' % CAPSULE_DATA_DIR, > > + 'sf write 4000000 150000 10', > > + 'sf read 5000000 150000 10', > > + 'md.b 5000000 10']) > > + assert 'Old' in ''.join(output) > > + > > + # place a capsule file > > + output = u_boot_console.run_command_list([ > > + 'fatload host 0:1 4000000 %s/Test05' % CAPSULE_DATA_DIR, > > + 'fatwrite host 0:1 4000000 %s/Test05 $filesize' % CAPSULE_INSTALL_DIR, > > + 'fatls host 0:1 %s' % CAPSULE_INSTALL_DIR]) > > + assert 'Test05' in ''.join(output) > > + > > + capsule_early = u_boot_config.buildconfig.get( > > + 'config_efi_capsule_on_disk_early') > > + capsule_auth = u_boot_config.buildconfig.get( > > + 'config_efi_capsule_authenticate') > > + > > + # reboot > > + u_boot_console.restart_uboot(expect_reset = capsule_early) > > + > > + with u_boot_console.log.section('Test Case 1-b, after reboot'): > > + if not capsule_early: > > + # make sure that dfu_alt_info exists even persistent variables > > + # are not available. > > + output = u_boot_console.run_command_list([ > > + 'env set dfu_alt_info "sf 0:0=u-boot-bin raw 0x100000 0x50000;u-boot-env raw 0x150000 0x200000"', > > + 'host bind 0 %s' % disk_img, > > + 'fatls host 0:1 %s' % CAPSULE_INSTALL_DIR]) > > + assert 'Test05' in ''.join(output) > > + > > + # need to run uefi command to initiate capsule handling > > + output = u_boot_console.run_command( > > + 'env print -e Capsule0000', wait_for_reboot = True) > > + > > + output = u_boot_console.run_command_list([ > > + 'sf probe 0:0', > > + 'sf read 4000000 100000 10', > > + 'md.b 4000000 10']) > > + assert 'u-boot:Old' in ''.join(output) > > + > > + output = u_boot_console.run_command_list([ > > + 'sf read 4000000 150000 10', > > + 'md.b 4000000 10']) > > + assert 'u-boot-env:Old' in ''.join(output) > > + > > + def test_efi_capsule_fw2( > > + self, u_boot_config, u_boot_console, efi_capsule_data): > > + """ > > + Test Case 2 - Update U-Boot and U-Boot environment on SPI Flash > > + 0x100000-0x150000: U-Boot binary (but dummy) > > + 0x150000-0x200000: U-Boot environment (but dummy) > > + """ > > + disk_img = efi_capsule_data > > + with u_boot_console.log.section('Test Case 2-a, before reboot'): > > + output = u_boot_console.run_command_list([ > > + 'host bind 0 %s' % disk_img, > > + 'efidebug boot add -b 1 TEST host 0:1 /helloworld.efi -s ""', > > + 'efidebug boot order 1', > > + 'env set -e -nv -bs -rt OsIndications =0x0000000000000004', > > + 'env set dfu_alt_info "sf 0:0=u-boot-bin raw 0x100000 0x50000;u-boot-env raw 0x150000 0x200000"', > > + 'env save']) > > + > > + # initialize contents > > + output = u_boot_console.run_command_list([ > > + 'sf probe 0:0', > > + 'fatload host 0:1 4000000 %s/u-boot.bin.old' % CAPSULE_DATA_DIR, > > + 'sf write 4000000 100000 10', > > + 'sf read 5000000 100000 10', > > + 'md.b 5000000 10']) > > + assert 'Old' in ''.join(output) > > + output = u_boot_console.run_command_list([ > > + 'sf probe 0:0', > > + 'fatload host 0:1 4000000 %s/u-boot.env.old' % CAPSULE_DATA_DIR, > > + 'sf write 4000000 150000 10', > > + 'sf read 5000000 150000 10', > > + 'md.b 5000000 10']) > > + assert 'Old' in ''.join(output) > > + > > + # place a capsule file > > + output = u_boot_console.run_command_list([ > > + 'fatload host 0:1 4000000 %s/Test04' % CAPSULE_DATA_DIR, > > + 'fatwrite host 0:1 4000000 %s/Test04 $filesize' % CAPSULE_INSTALL_DIR, > > + 'fatls host 0:1 %s' % CAPSULE_INSTALL_DIR]) > > + assert 'Test04' in ''.join(output) > > + > > + capsule_early = u_boot_config.buildconfig.get( > > + 'config_efi_capsule_on_disk_early') > > + capsule_auth = u_boot_config.buildconfig.get( > > + 'config_efi_capsule_authenticate') > > + > > + # reboot > > + u_boot_console.restart_uboot(expect_reset = capsule_early) > > + > > + with u_boot_console.log.section('Test Case 2-b, after reboot'): > > + if not capsule_early: > > + # make sure that dfu_alt_info exists even persistent variables > > + # are not available. > > + output = u_boot_console.run_command_list([ > > + 'env set dfu_alt_info "sf 0:0=u-boot-bin raw 0x100000 0x50000;u-boot-env raw 0x150000 0x200000"', > > + 'host bind 0 %s' % disk_img, > > + 'fatls host 0:1 %s' % CAPSULE_INSTALL_DIR]) > > + assert 'Test04' in ''.join(output) > > + > > + # need to run uefi command to initiate capsule handling > > + output = u_boot_console.run_command( > > + 'env print -e Capsule0000', wait_for_reboot = True) > > + > > + output = u_boot_console.run_command_list([ > > + 'host bind 0 %s' % disk_img, > > + 'fatls host 0:1 %s' % CAPSULE_INSTALL_DIR]) > > + assert 'Test04' not in ''.join(output) > > + > > + output = u_boot_console.run_command_list([ > > + 'sf probe 0:0', > > + 'sf read 4000000 100000 10', > > + 'md.b 4000000 10']) > > + if capsule_auth: > > + assert 'u-boot:Old' in ''.join(output) > > + else: > > + assert 'u-boot:New' in ''.join(output) > > + > > + output = u_boot_console.run_command_list([ > > + 'sf read 4000000 150000 10', > > + 'md.b 4000000 10']) > > + if capsule_auth: > > + assert 'u-boot-env:Old' in ''.join(output) > > + else: > > + assert 'u-boot-env:New' in ''.join(output) > > diff --git a/test/py/tests/test_efi_capsule/test_capsule_firmware.py b/test/py/tests/test_efi_capsule/test_capsule_firmware_raw.py > > similarity index 75% > > rename from test/py/tests/test_efi_capsule/test_capsule_firmware.py > > rename to test/py/tests/test_efi_capsule/test_capsule_firmware_raw.py > > index 1dcf1c70f4..ae99f080ff 100644 > > --- a/test/py/tests/test_efi_capsule/test_capsule_firmware.py > > +++ b/test/py/tests/test_efi_capsule/test_capsule_firmware_raw.py > > @@ -5,7 +5,7 @@ > > # U-Boot UEFI: Firmware Update Test > > > > """ > > -This test verifies capsule-on-disk firmware update > > +This test verifies capsule-on-disk firmware update for raw images > > """ > > > > from subprocess import check_call, check_output, CalledProcessError > > @@ -14,7 +14,6 @@ from capsule_defs import * > > > > > > @pytest.mark.boardspec('sandbox') > > -@pytest.mark.buildconfigspec('efi_capsule_firmware_fit') > > @pytest.mark.buildconfigspec('efi_capsule_firmware_raw') > > @pytest.mark.buildconfigspec('efi_capsule_on_disk') > > @pytest.mark.buildconfigspec('dfu') > > @@ -25,23 +24,29 @@ from capsule_defs import * > > @pytest.mark.buildconfigspec('cmd_nvedit_efi') > > @pytest.mark.buildconfigspec('cmd_sf') > > @pytest.mark.slow > > -class TestEfiCapsuleFirmwareFit(object): > > +class TestEfiCapsuleFirmwareRaw(object): > > def test_efi_capsule_fw1( > > self, u_boot_config, u_boot_console, efi_capsule_data): > > """ > > Test Case 1 - Update U-Boot and U-Boot environment on SPI Flash > > - but with OsIndications unset > > + but with an incorrect GUID value in the capsule > > No update should happen > > 0x100000-0x150000: U-Boot binary (but dummy) > > 0x150000-0x200000: U-Boot environment (but dummy) > > """ > > + > > + # other tests might have run and the > > + # system might not be in a clean state. > > + # Restart before starting the tests. > > + u_boot_console.restart_uboot() > > + > > disk_img = efi_capsule_data > > with u_boot_console.log.section('Test Case 1-a, before reboot'): > > output = u_boot_console.run_command_list([ > > 'host bind 0 %s' % disk_img, > > 'efidebug boot add -b 1 TEST host 0:1 /helloworld.efi -s ""', > > 'efidebug boot order 1', > > - 'env set -e OsIndications', > > + 'env set -e -nv -bs -rt OsIndications =0x0000000000000004', > > 'env set dfu_alt_info "sf 0:0=u-boot-bin raw 0x100000 0x50000;u-boot-env raw 0x150000 0x200000"', > > 'env save']) > > > > @@ -63,16 +68,17 @@ class TestEfiCapsuleFirmwareFit(object): > > > > # place a capsule file > > output = u_boot_console.run_command_list([ > > - 'fatload host 0:1 4000000 %s/Test01' % CAPSULE_DATA_DIR, > > - 'fatwrite host 0:1 4000000 %s/Test01 $filesize' % CAPSULE_INSTALL_DIR, > > + 'fatload host 0:1 4000000 %s/Test03' % CAPSULE_DATA_DIR, > > + 'fatwrite host 0:1 4000000 %s/Test03 $filesize' % CAPSULE_INSTALL_DIR, > > 'fatls host 0:1 %s' % CAPSULE_INSTALL_DIR]) > > - assert 'Test01' in ''.join(output) > > + assert 'Test03' in ''.join(output) > > > > # reboot > > u_boot_console.restart_uboot() > > > > capsule_early = u_boot_config.buildconfig.get( > > 'config_efi_capsule_on_disk_early') > > + > > with u_boot_console.log.section('Test Case 1-b, after reboot'): > > if not capsule_early: > > # make sure that dfu_alt_info exists even persistent variables > > @@ -81,16 +87,11 @@ class TestEfiCapsuleFirmwareFit(object): > > 'env set dfu_alt_info "sf 0:0=u-boot-bin raw 0x100000 0x50000;u-boot-env raw 0x150000 0x200000"', > > 'host bind 0 %s' % disk_img, > > 'fatls host 0:1 %s' % CAPSULE_INSTALL_DIR]) > > - assert 'Test01' in ''.join(output) > > + assert 'Test03' in ''.join(output) > > > > # need to run uefi command to initiate capsule handling > > output = u_boot_console.run_command( > > - 'env print -e Capsule0000') > > - > > - output = u_boot_console.run_command_list([ > > - 'host bind 0 %s' % disk_img, > > - 'fatls host 0:1 %s' % CAPSULE_INSTALL_DIR]) > > - assert 'Test01' in ''.join(output) > > + 'env print -e Capsule0000', wait_for_reboot = True) > > > > output = u_boot_console.run_command_list([ > > 'sf probe 0:0', > > @@ -107,6 +108,8 @@ class TestEfiCapsuleFirmwareFit(object): > > self, u_boot_config, u_boot_console, efi_capsule_data): > > """ > > Test Case 2 - Update U-Boot and U-Boot environment on SPI Flash > > + but with OsIndications unset > > + No update should happen > > 0x100000-0x150000: U-Boot binary (but dummy) > > 0x150000-0x200000: U-Boot environment (but dummy) > > """ > > @@ -116,7 +119,7 @@ class TestEfiCapsuleFirmwareFit(object): > > 'host bind 0 %s' % disk_img, > > 'efidebug boot add -b 1 TEST host 0:1 /helloworld.efi -s ""', > > 'efidebug boot order 1', > > - 'env set -e -nv -bs -rt OsIndications =0x0000000000000004', > > + 'env set -e OsIndications', > > 'env set dfu_alt_info "sf 0:0=u-boot-bin raw 0x100000 0x50000;u-boot-env raw 0x150000 0x200000"', > > 'env save']) > > > > @@ -136,21 +139,24 @@ class TestEfiCapsuleFirmwareFit(object): > > 'md.b 5000000 10']) > > assert 'Old' in ''.join(output) > > > > - # place a capsule file > > + # place the capsule files > > output = u_boot_console.run_command_list([ > > 'fatload host 0:1 4000000 %s/Test01' % CAPSULE_DATA_DIR, > > 'fatwrite host 0:1 4000000 %s/Test01 $filesize' % CAPSULE_INSTALL_DIR, > > 'fatls host 0:1 %s' % CAPSULE_INSTALL_DIR]) > > assert 'Test01' in ''.join(output) > > > > - capsule_early = u_boot_config.buildconfig.get( > > - 'config_efi_capsule_on_disk_early') > > - capsule_auth = u_boot_config.buildconfig.get( > > - 'config_efi_capsule_authenticate') > > + output = u_boot_console.run_command_list([ > > + 'fatload host 0:1 4000000 %s/Test02' % CAPSULE_DATA_DIR, > > + 'fatwrite host 0:1 4000000 %s/Test02 $filesize' % CAPSULE_INSTALL_DIR, > > + 'fatls host 0:1 %s' % CAPSULE_INSTALL_DIR]) > > + assert 'Test02' in ''.join(output) > > > > # reboot > > - u_boot_console.restart_uboot(expect_reset = capsule_early) > > + u_boot_console.restart_uboot() > > > > + capsule_early = u_boot_config.buildconfig.get( > > + 'config_efi_capsule_on_disk_early') > > with u_boot_console.log.section('Test Case 2-b, after reboot'): > > if not capsule_early: > > # make sure that dfu_alt_info exists even persistent variables > > @@ -160,32 +166,28 @@ class TestEfiCapsuleFirmwareFit(object): > > 'host bind 0 %s' % disk_img, > > 'fatls host 0:1 %s' % CAPSULE_INSTALL_DIR]) > > assert 'Test01' in ''.join(output) > > + assert 'Test02' in ''.join(output) > > > > # need to run uefi command to initiate capsule handling > > output = u_boot_console.run_command( > > - 'env print -e Capsule0000', wait_for_reboot = True) > > + 'env print -e Capsule0000') > > > > output = u_boot_console.run_command_list([ > > 'host bind 0 %s' % disk_img, > > 'fatls host 0:1 %s' % CAPSULE_INSTALL_DIR]) > > - assert 'Test01' not in ''.join(output) > > + assert 'Test01' in ''.join(output) > > + assert 'Test02' in ''.join(output) > > > > output = u_boot_console.run_command_list([ > > 'sf probe 0:0', > > 'sf read 4000000 100000 10', > > 'md.b 4000000 10']) > > - if capsule_auth: > > - assert 'u-boot:Old' in ''.join(output) > > - else: > > - assert 'u-boot:New' in ''.join(output) > > + assert 'u-boot:Old' in ''.join(output) > > > > output = u_boot_console.run_command_list([ > > 'sf read 4000000 150000 10', > > 'md.b 4000000 10']) > > - if capsule_auth: > > - assert 'u-boot-env:Old' in ''.join(output) > > - else: > > - assert 'u-boot-env:New' in ''.join(output) > > + assert 'u-boot-env:Old' in ''.join(output) > > > > def test_efi_capsule_fw3( > > self, u_boot_config, u_boot_console, efi_capsule_data): > > @@ -203,7 +205,7 @@ class TestEfiCapsuleFirmwareFit(object): > > 'env set dfu_alt_info "sf 0:0=u-boot-bin raw 0x100000 0x50000;u-boot-env raw 0x150000 0x200000"', > > 'env save']) > > > > - # initialize content > > + # initialize contents > > output = u_boot_console.run_command_list([ > > 'sf probe 0:0', > > 'fatload host 0:1 4000000 %s/u-boot.bin.old' % CAPSULE_DATA_DIR, > > @@ -212,7 +214,21 @@ class TestEfiCapsuleFirmwareFit(object): > > 'md.b 5000000 10']) > > assert 'Old' in ''.join(output) > > > > - # place a capsule file > > + output = u_boot_console.run_command_list([ > > + 'sf probe 0:0', > > + 'fatload host 0:1 4000000 %s/u-boot.env.old' % CAPSULE_DATA_DIR, > > + 'sf write 4000000 150000 10', > > + 'sf read 5000000 100000 10', > > + 'md.b 5000000 10']) > > + assert 'Old' in ''.join(output) > > + > > + # place the capsule files > > + output = u_boot_console.run_command_list([ > > + 'fatload host 0:1 4000000 %s/Test01' % CAPSULE_DATA_DIR, > > + 'fatwrite host 0:1 4000000 %s/Test01 $filesize' % CAPSULE_INSTALL_DIR, > > + 'fatls host 0:1 %s' % CAPSULE_INSTALL_DIR]) > > + assert 'Test01' in ''.join(output) > > + > > output = u_boot_console.run_command_list([ > > 'fatload host 0:1 4000000 %s/Test02' % CAPSULE_DATA_DIR, > > 'fatwrite host 0:1 4000000 %s/Test02 $filesize' % CAPSULE_INSTALL_DIR, > > @@ -235,6 +251,7 @@ class TestEfiCapsuleFirmwareFit(object): > > 'env set dfu_alt_info "sf 0:0=u-boot-bin raw 0x100000 0x50000;u-boot-env raw 0x150000 0x200000"', > > 'host bind 0 %s' % disk_img, > > 'fatls host 0:1 %s' % CAPSULE_INSTALL_DIR]) > > + assert 'Test01' in ''.join(output) > > assert 'Test02' in ''.join(output) > > > > # need to run uefi command to initiate capsule handling > > @@ -246,15 +263,16 @@ class TestEfiCapsuleFirmwareFit(object): > > 'env set dfu_alt_info "sf 0:0=u-boot-bin raw 0x100000 0x50000;u-boot-env raw 0x150000 0x200000"', > > 'efidebug capsule esrt']) > > > > - # ensure that EFI_FIRMWARE_IMAGE_TYPE_UBOOT_FIT_GUID is in the ESRT. > > - assert 'AE13FF2D-9AD4-4E25-9AC8-6D80B3B22147' in ''.join(output) > > + # ensure that SANDBOX_UBOOT_ENV_IMAGE_GUID is in the ESRT. > > + assert '5A7021F5-FEF2-48B4-AABA-832E777418C0' in ''.join(output) > > > > - # ensure that EFI_FIRMWARE_IMAGE_TYPE_UBOOT_RAW_GUID is in the ESRT. > > - assert 'E2BB9C06-70E9-4B14-97A3-5A7913176E3F' in ''.join(output) > > + # ensure that SANDBOX_UBOOT_IMAGE_GUID is in the ESRT. > > + assert '09D7CF52-0720-4710-91D1-08469B7FE9C8' in ''.join(output) > > > > output = u_boot_console.run_command_list([ > > 'host bind 0 %s' % disk_img, > > 'fatls host 0:1 %s' % CAPSULE_INSTALL_DIR]) > > + assert 'Test01' not in ''.join(output) > > assert 'Test02' not in ''.join(output) > > > > output = u_boot_console.run_command_list([ > > @@ -266,78 +284,11 @@ class TestEfiCapsuleFirmwareFit(object): > > else: > > assert 'u-boot:New' in ''.join(output) > > > > - def test_efi_capsule_fw4( > > - self, u_boot_config, u_boot_console, efi_capsule_data): > > - """ > > - Test Case 4 - Test "--guid" option of mkeficapsule > > - The test scenario is the same as Case 3. > > - """ > > - disk_img = efi_capsule_data > > - with u_boot_console.log.section('Test Case 4-a, before reboot'): > > - output = u_boot_console.run_command_list([ > > - 'host bind 0 %s' % disk_img, > > - 'efidebug boot add -b 1 TEST host 0:1 /helloworld.efi -s ""', > > - 'efidebug boot order 1', > > - 'env set -e -nv -bs -rt OsIndications =0x0000000000000004', > > - 'env set dfu_alt_info "sf 0:0=u-boot-bin raw 0x100000 0x50000;u-boot-env raw 0x150000 0x200000"', > > - 'env save']) > > - > > - # initialize content > > output = u_boot_console.run_command_list([ > > 'sf probe 0:0', > > - 'fatload host 0:1 4000000 %s/u-boot.bin.old' % CAPSULE_DATA_DIR, > > - 'sf write 4000000 100000 10', > > - 'sf read 5000000 100000 10', > > - 'md.b 5000000 10']) > > - assert 'Old' in ''.join(output) > > - > > - # place a capsule file > > - output = u_boot_console.run_command_list([ > > - 'fatload host 0:1 4000000 %s/Test03' % CAPSULE_DATA_DIR, > > - 'fatwrite host 0:1 4000000 %s/Test03 $filesize' % CAPSULE_INSTALL_DIR, > > - 'fatls host 0:1 %s' % CAPSULE_INSTALL_DIR]) > > - assert 'Test03' in ''.join(output) > > - > > - capsule_early = u_boot_config.buildconfig.get( > > - 'config_efi_capsule_on_disk_early') > > - capsule_auth = u_boot_config.buildconfig.get( > > - 'config_efi_capsule_authenticate') > > - > > - # reboot > > - u_boot_console.restart_uboot(expect_reset = capsule_early) > > - > > - with u_boot_console.log.section('Test Case 4-b, after reboot'): > > - if not capsule_early: > > - # make sure that dfu_alt_info exists even persistent variables > > - # are not available. > > - output = u_boot_console.run_command_list([ > > - 'env set dfu_alt_info "sf 0:0=u-boot-bin raw 0x100000 0x50000;u-boot-env raw 0x150000 0x200000"', > > - 'host bind 0 %s' % disk_img, > > - 'fatls host 0:1 %s' % CAPSULE_INSTALL_DIR]) > > - assert 'Test03' in ''.join(output) > > - > > - # need to run uefi command to initiate capsule handling > > - output = u_boot_console.run_command( > > - 'env print -e Capsule0000', wait_for_reboot = True) > > - > > - # make sure the dfu_alt_info exists because it is required for making ESRT. > > - output = u_boot_console.run_command_list([ > > - 'env set dfu_alt_info "sf 0:0=u-boot-bin raw 0x100000 0x50000;u-boot-env raw 0x150000 0x200000"', > > - 'efidebug capsule esrt']) > > - > > - # ensure that EFI_FIRMWARE_IMAGE_TYPE_UBOOT_RAW_GUID is in the ESRT. > > - assert 'E2BB9C06-70E9-4B14-97A3-5A7913176E3F' in ''.join(output) > > - > > - output = u_boot_console.run_command_list([ > > - 'host bind 0 %s' % disk_img, > > - 'fatls host 0:1 %s' % CAPSULE_INSTALL_DIR]) > > - assert 'Test03' not in ''.join(output) > > - > > - output = u_boot_console.run_command_list([ > > - 'sf probe 0:0', > > - 'sf read 4000000 100000 10', > > + 'sf read 4000000 150000 10', > > 'md.b 4000000 10']) > > if capsule_auth: > > - assert 'u-boot:Old' in ''.join(output) > > + assert 'u-boot-env:Old' in ''.join(output) > > else: > > - assert 'u-boot:New' in ''.join(output) > > + assert 'u-boot-env:New' in ''.join(output) > > -- > > 2.25.1 > >