[PATCH v6 5/8] test: capsule: Modify the capsule tests to use GUID values for sandbox

AKASHI Takahiro takahiro.akashi at linaro.org
Wed Apr 13 08:35:32 CEST 2022


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?

> 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.

-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