[PATCH v5 5/8] test: capsule: Modify the capsule tests to use GUID values for sandbox
Heinrich Schuchardt
xypron.glpk at gmx.de
Sat Apr 2 11:41:17 CEST 2022
On 4/1/22 21:17, 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.
>
> The UEFI specification does not allow installation of multiple
> Firmware Management Protocols(FMP) at the same time. Install the
This is not what the specification says. The specification has:
"In all cases a specific updatable hardware firmware store must be
represented by exactly one FMP instance."
So you can have one FMP instance for updating U-Boot, another one for
OP-TEE, and a third for TF-A if all three use disjunct firmware stores,
e.g. separate partitions on the SD card.
Best regards
Heinrich
> 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.
>
> Signed-off-by: Sughosh Ganu <sughosh.ganu at linaro.org>
> ---
>
> Changes since V4: None
>
> 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 | 186 ++++++++++++++++++
> ...rmware.py => test_capsule_firmware_raw.py} | 159 +++++----------
> 6 files changed, 258 insertions(+), 115 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 7c157a23d0..1a0142795a 100644
> --- a/configs/sandbox64_defconfig
> +++ b/configs/sandbox64_defconfig
> @@ -247,7 +247,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 ab0e2defee..de2526df09 100644
> --- a/configs/sandbox_defconfig
> +++ b/configs/sandbox_defconfig
> @@ -318,7 +318,6 @@ CONFIG_LZ4=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 217b0647bb..bbcf435ac6 100644
> --- a/configs/sandbox_flattree_defconfig
> +++ b/configs/sandbox_flattree_defconfig
> @@ -29,6 +29,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
> @@ -210,3 +211,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..2c94df6c5c
> --- /dev/null
> +++ b/test/py/tests/test_efi_capsule/test_capsule_firmware_fit.py
> @@ -0,0 +1,186 @@
> +# 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)
> + """
> + 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..c9eaf5e6d8 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,12 +24,12 @@ 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)
> @@ -41,7 +40,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 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 +62,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,17 +81,12 @@ 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)
> -
> output = u_boot_console.run_command_list([
> 'sf probe 0:0',
> 'sf read 4000000 100000 10',
> @@ -107,6 +102,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 +113,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 +133,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 +160,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 +199,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 +208,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 +245,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 +257,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 +278,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)
More information about the U-Boot
mailing list