[PATCH v6 5/8] test: capsule: Modify the capsule tests to use GUID values for sandbox
Sughosh Ganu
sughosh.ganu at linaro.org
Wed Apr 13 10:29:32 CEST 2022
On Wed, 13 Apr 2022 at 12:05, AKASHI Takahiro
<takahiro.akashi at linaro.org> 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 <sughosh.ganu at linaro.org>
> > ---
> >
> > 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 <takahiro.akashi at linaro.org>
> > +#
> > +# 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 *
> > +
> > +
> > + at pytest.mark.boardspec('sandbox64')
> > + at pytest.mark.boardspec('sandbox_flattree')
> > + at pytest.mark.buildconfigspec('efi_capsule_firmware_fit')
> > + at pytest.mark.buildconfigspec('efi_capsule_on_disk')
> > + at pytest.mark.buildconfigspec('dfu')
> > + at pytest.mark.buildconfigspec('dfu_sf')
> > + at pytest.mark.buildconfigspec('cmd_efidebug')
> > + at pytest.mark.buildconfigspec('cmd_fat')
> > + at pytest.mark.buildconfigspec('cmd_memory')
> > + at pytest.mark.buildconfigspec('cmd_nvedit_efi')
> > + at pytest.mark.buildconfigspec('cmd_sf')
> > + at 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')
> > - at 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
> >
More information about the U-Boot
mailing list