[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