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

Sughosh Ganu sughosh.ganu at linaro.org
Wed Apr 13 10:29:32 CEST 2022


On Wed, 13 Apr 2022 at 12:05, AKASHI Takahiro
<takahiro.akashi at linaro.org> wrote:
>
> On Tue, Apr 12, 2022 at 06:34:44PM +0530, Sughosh Ganu wrote:
> > The current UEFI capsule updation code uses two GUID values, one for
> > FIT images, and one for raw images across platforms. This logic is
> > being changed to have GUID values per image, per platform. Change the
> > tests for the capsule update code to reflect this change. The GUID
> > values now used are the ones specific to the sandbox platform -- one
> > for the u-boot image, and another for the u-boot environment image.
> >
> > Install the FMP instance for raw images on the sandbox variant for
> > testing the capsule update code. Install the FMP instance for the FIT
> > images on the sandbox64 and sandbox_flattree variant for testing
> > capsule update for FIT images. This is being done by splitting the
> > capsule update script for FIT and raw images.
>
> Why do we have to have different configs to test FIT and RAW capsules?

With the current design, we have an FMP instance per platform. But the
struct efi_fw_images can be extended to have a fmp member, so every
image would have an FMP instance associated with it. With that, a
platform can define multiple FMP instances. Would you prefer that?

>
> > Signed-off-by: Sughosh Ganu <sughosh.ganu at linaro.org>
> > ---
> >
> > Changes since V5:
> > * Restart the platform before starting the tests. This is done to
> >   clear out any stale state from a previously run test.
> >
> >
> >  configs/sandbox64_defconfig                   |   1 -
> >  configs/sandbox_defconfig                     |   1 -
> >  configs/sandbox_flattree_defconfig            |   5 +
> >  test/py/tests/test_efi_capsule/conftest.py    |  21 +-
> >  .../test_capsule_firmware_fit.py              | 191 ++++++++++++++++++
> >  ...rmware.py => test_capsule_firmware_raw.py} | 167 ++++++---------
> >  6 files changed, 270 insertions(+), 116 deletions(-)
> >  create mode 100644 test/py/tests/test_efi_capsule/test_capsule_firmware_fit.py
> >  rename test/py/tests/test_efi_capsule/{test_capsule_firmware.py => test_capsule_firmware_raw.py} (75%)
> >
> > diff --git a/configs/sandbox64_defconfig b/configs/sandbox64_defconfig
> > index 88f9ecbb7f..db748bbed3 100644
> > --- a/configs/sandbox64_defconfig
> > +++ b/configs/sandbox64_defconfig
> > @@ -246,7 +246,6 @@ CONFIG_ERRNO_STR=y
> >  CONFIG_EFI_RUNTIME_UPDATE_CAPSULE=y
> >  CONFIG_EFI_CAPSULE_ON_DISK=y
> >  CONFIG_EFI_CAPSULE_FIRMWARE_FIT=y
> > -CONFIG_EFI_CAPSULE_FIRMWARE_RAW=y
> >  CONFIG_EFI_SECURE_BOOT=y
> >  CONFIG_TEST_FDTDEC=y
> >  CONFIG_UNIT_TEST=y
> > diff --git a/configs/sandbox_defconfig b/configs/sandbox_defconfig
> > index cb8d590eb6..0dfc2d863d 100644
> > --- a/configs/sandbox_defconfig
> > +++ b/configs/sandbox_defconfig
> > @@ -319,7 +319,6 @@ CONFIG_SHA384=y
> >  CONFIG_ERRNO_STR=y
> >  CONFIG_EFI_RUNTIME_UPDATE_CAPSULE=y
> >  CONFIG_EFI_CAPSULE_ON_DISK=y
> > -CONFIG_EFI_CAPSULE_FIRMWARE_FIT=y
> >  CONFIG_EFI_CAPSULE_FIRMWARE_RAW=y
> >  CONFIG_EFI_SECURE_BOOT=y
> >  CONFIG_TEST_FDTDEC=y
> > diff --git a/configs/sandbox_flattree_defconfig b/configs/sandbox_flattree_defconfig
> > index 24b272068a..27dd38a0c0 100644
> > --- a/configs/sandbox_flattree_defconfig
> > +++ b/configs/sandbox_flattree_defconfig
> > @@ -28,6 +28,7 @@ CONFIG_CMD_BOOTEFI_HELLO=y
> >  CONFIG_CMD_ASKENV=y
> >  CONFIG_CMD_GREPENV=y
> >  CONFIG_CMD_ERASEENV=y
> > +CONFIG_CMD_NVEDIT_EFI=y
> >  CONFIG_CMD_NVEDIT_INFO=y
> >  CONFIG_CMD_NVEDIT_LOAD=y
> >  CONFIG_CMD_NVEDIT_SELECT=y
> > @@ -209,3 +210,7 @@ CONFIG_HEXDUMP=y
> >  CONFIG_UNIT_TEST=y
> >  CONFIG_UT_TIME=y
> >  CONFIG_UT_DM=y
> > +CONFIG_EFI_RUNTIME_UPDATE_CAPSULE=y
> > +CONFIG_EFI_CAPSULE_ON_DISK=y
> > +CONFIG_EFI_CAPSULE_FIRMWARE_FIT=y
> > +CONFIG_DFU_SF=y
> > diff --git a/test/py/tests/test_efi_capsule/conftest.py b/test/py/tests/test_efi_capsule/conftest.py
> > index 9076087a12..d757415c88 100644
> > --- a/test/py/tests/test_efi_capsule/conftest.py
> > +++ b/test/py/tests/test_efi_capsule/conftest.py
> > @@ -72,7 +72,7 @@ def efi_capsule_data(request, u_boot_config):
> >
> >          # Create capsule files
> >          # two regions: one for u-boot.bin and the other for u-boot.env
> > -        check_call('cd %s; echo -n u-boot:Old > u-boot.bin.old; echo -n u-boot:New > u-boot.bin.new; echo -n u-boot-env:Old -> u-boot.env.old; echo -n u-boot-env:New > u-boot.env.new' % data_dir,
> > +        check_call('cd %s; echo -n u-boot:Old > u-boot.bin.old; echo -n u-boot:New > u-boot.bin.new; echo -n u-boot-env:Old > u-boot.env.old; echo -n u-boot-env:New > u-boot.env.new' % data_dir,
> >                     shell=True)
> >          check_call('sed -e \"s?BINFILE1?u-boot.bin.new?\" -e \"s?BINFILE2?u-boot.env.new?\" %s/test/py/tests/test_efi_capsule/uboot_bin_env.its > %s/uboot_bin_env.its' %
> >                     (u_boot_config.source_dir, data_dir),
> > @@ -80,21 +80,29 @@ def efi_capsule_data(request, u_boot_config):
> >          check_call('cd %s; %s/tools/mkimage -f uboot_bin_env.its uboot_bin_env.itb' %
> >                     (data_dir, u_boot_config.build_dir),
> >                     shell=True)
> > -        check_call('cd %s; %s/tools/mkeficapsule --index 1 --fit uboot_bin_env.itb Test01' %
> > +        check_call('cd %s; %s/tools/mkeficapsule --index 1 --guid 09D7CF52-0720-4710-91D1-08469B7FE9C8 u-boot.bin.new Test01' %
> >                     (data_dir, u_boot_config.build_dir),
> >                     shell=True)
> > -        check_call('cd %s; %s/tools/mkeficapsule --index 1 --raw u-boot.bin.new Test02' %
> > +        check_call('cd %s; %s/tools/mkeficapsule --index 2 --guid 5A7021F5-FEF2-48B4-AABA-832E777418C0 u-boot.env.new Test02' %
> >                     (data_dir, u_boot_config.build_dir),
> >                     shell=True)
> > -        check_call('cd %s; %s/tools/mkeficapsule --index 1 --guid E2BB9C06-70E9-4B14-97A3-5A7913176E3F u-boot.bin.new Test03' %
> > +        check_call('cd %s; %s/tools/mkeficapsule --index 1 --guid 058B7D83-50D5-4C47-A195-60D86AD341C4 u-boot.bin.new Test03' %
> >                     (data_dir, u_boot_config.build_dir),
> >                     shell=True)
> > +        check_call('cd %s; %s/tools/mkeficapsule --index 1 --guid 3673B45D-6A7C-46F3-9E60-ADABB03F7937 uboot_bin_env.itb Test04' %
> > +                   (data_dir, u_boot_config.build_dir),
> > +                   shell=True)
> > +        check_call('cd %s; %s/tools/mkeficapsule --index 1 --guid  058B7D83-50D5-4C47-A195-60D86AD341C4 uboot_bin_env.itb Test05' %
> > +                   (data_dir, u_boot_config.build_dir),
> > +                   shell=True)
> > +
> >          if capsule_auth_enabled:
> >              # firmware signed with proper key
> >              check_call('cd %s; '
> >                         '%s/tools/mkeficapsule --index 1 --monotonic-count 1 '
> >                              '--private-key SIGNER.key --certificate SIGNER.crt '
> > -                            '--raw u-boot.bin.new Test11'
> > +                            '--guid 09D7DF52-0720-4710-91D1-08469B7FE9C8 '
> > +                            'u-boot.bin.new Test11'
> >                         % (data_dir, u_boot_config.build_dir),
> >                         shell=True)
> >              # firmware signed with *mal* key
> > @@ -102,7 +110,8 @@ def efi_capsule_data(request, u_boot_config):
> >                         '%s/tools/mkeficapsule --index 1 --monotonic-count 1 '
> >                              '--private-key SIGNER2.key '
> >                              '--certificate SIGNER2.crt '
> > -                            '--raw u-boot.bin.new Test12'
> > +                            '--guid 09D7DF52-0720-4710-91D1-08469B7FE9C8 '
> > +                            'u-boot.bin.new Test12'
> >                         % (data_dir, u_boot_config.build_dir),
> >                         shell=True)
> >
> > diff --git a/test/py/tests/test_efi_capsule/test_capsule_firmware_fit.py b/test/py/tests/test_efi_capsule/test_capsule_firmware_fit.py
> > new file mode 100644
> > index 0000000000..5bef84958b
> > --- /dev/null
> > +++ b/test/py/tests/test_efi_capsule/test_capsule_firmware_fit.py
>
> If possible, can you manage the git history so that
>   test/py/tests/test_efi_capsule/test_capsule_firmware_fit.py
> is the original and
>   test/py/tests/test_efi_capsule/test_capsule_firmware_raw.py
> is a new test?
> I think that will reflect the correct history of development/changes.

Okay. Let me see if/how that can be done. If you know a way to do so,
please let me know.

-sughosh

>
> -Takahiro Akashi
>
> > @@ -0,0 +1,191 @@
> > +# SPDX-License-Identifier:      GPL-2.0+
> > +# Copyright (c) 2020, Linaro Limited
> > +# Author: AKASHI Takahiro <takahiro.akashi at linaro.org>
> > +#
> > +# U-Boot UEFI: Firmware Update Test
> > +
> > +"""
> > +This test verifies capsule-on-disk firmware update for FIT images
> > +"""
> > +
> > +from subprocess import check_call, check_output, CalledProcessError
> > +import pytest
> > +from capsule_defs import *
> > +
> > +
> > + at pytest.mark.boardspec('sandbox64')
> > + at pytest.mark.boardspec('sandbox_flattree')
> > + at pytest.mark.buildconfigspec('efi_capsule_firmware_fit')
> > + at pytest.mark.buildconfigspec('efi_capsule_on_disk')
> > + at pytest.mark.buildconfigspec('dfu')
> > + at pytest.mark.buildconfigspec('dfu_sf')
> > + at pytest.mark.buildconfigspec('cmd_efidebug')
> > + at pytest.mark.buildconfigspec('cmd_fat')
> > + at pytest.mark.buildconfigspec('cmd_memory')
> > + at pytest.mark.buildconfigspec('cmd_nvedit_efi')
> > + at pytest.mark.buildconfigspec('cmd_sf')
> > + at pytest.mark.slow
> > +class TestEfiCapsuleFirmwareFit(object):
> > +    def test_efi_capsule_fw1(
> > +            self, u_boot_config, u_boot_console, efi_capsule_data):
> > +        """
> > +        Test Case 1 - Update U-Boot and U-Boot environment on SPI Flash
> > +                      but with an incorrect GUID value in the capsule
> > +                      No update should happen
> > +                      0x100000-0x150000: U-Boot binary (but dummy)
> > +                      0x150000-0x200000: U-Boot environment (but dummy)
> > +        """
> > +        # other tests might have run and the
> > +        # system might not be in a clean state.
> > +        # Restart before starting the tests.
> > +        u_boot_console.restart_uboot()
> > +
> > +        disk_img = efi_capsule_data
> > +        with u_boot_console.log.section('Test Case 1-a, before reboot'):
> > +            output = u_boot_console.run_command_list([
> > +                'host bind 0 %s' % disk_img,
> > +                'efidebug boot add -b 1 TEST host 0:1 /helloworld.efi -s ""',
> > +                'efidebug boot order 1',
> > +                'env set -e -nv -bs -rt OsIndications =0x0000000000000004',
> > +                'env set dfu_alt_info "sf 0:0=u-boot-bin raw 0x100000 0x50000;u-boot-env raw 0x150000 0x200000"',
> > +                'env save'])
> > +
> > +            # initialize contents
> > +            output = u_boot_console.run_command_list([
> > +                'sf probe 0:0',
> > +                'fatload host 0:1 4000000 %s/u-boot.bin.old' % CAPSULE_DATA_DIR,
> > +                'sf write 4000000 100000 10',
> > +                'sf read 5000000 100000 10',
> > +                'md.b 5000000 10'])
> > +            assert 'Old' in ''.join(output)
> > +            output = u_boot_console.run_command_list([
> > +                'sf probe 0:0',
> > +                'fatload host 0:1 4000000 %s/u-boot.env.old' % CAPSULE_DATA_DIR,
> > +                'sf write 4000000 150000 10',
> > +                'sf read 5000000 150000 10',
> > +                'md.b 5000000 10'])
> > +            assert 'Old' in ''.join(output)
> > +
> > +            # place a capsule file
> > +            output = u_boot_console.run_command_list([
> > +                'fatload host 0:1 4000000 %s/Test05' % CAPSULE_DATA_DIR,
> > +                'fatwrite host 0:1 4000000 %s/Test05 $filesize' % CAPSULE_INSTALL_DIR,
> > +                'fatls host 0:1 %s' % CAPSULE_INSTALL_DIR])
> > +            assert 'Test05' in ''.join(output)
> > +
> > +        capsule_early = u_boot_config.buildconfig.get(
> > +            'config_efi_capsule_on_disk_early')
> > +        capsule_auth = u_boot_config.buildconfig.get(
> > +            'config_efi_capsule_authenticate')
> > +
> > +        # reboot
> > +        u_boot_console.restart_uboot(expect_reset = capsule_early)
> > +
> > +        with u_boot_console.log.section('Test Case 1-b, after reboot'):
> > +            if not capsule_early:
> > +                # make sure that dfu_alt_info exists even persistent variables
> > +                # are not available.
> > +                output = u_boot_console.run_command_list([
> > +                    'env set dfu_alt_info "sf 0:0=u-boot-bin raw 0x100000 0x50000;u-boot-env raw 0x150000 0x200000"',
> > +                    'host bind 0 %s' % disk_img,
> > +                    'fatls host 0:1 %s' % CAPSULE_INSTALL_DIR])
> > +                assert 'Test05' in ''.join(output)
> > +
> > +                # need to run uefi command to initiate capsule handling
> > +                output = u_boot_console.run_command(
> > +                    'env print -e Capsule0000', wait_for_reboot = True)
> > +
> > +            output = u_boot_console.run_command_list([
> > +                'sf probe 0:0',
> > +                'sf read 4000000 100000 10',
> > +                'md.b 4000000 10'])
> > +            assert 'u-boot:Old' in ''.join(output)
> > +
> > +            output = u_boot_console.run_command_list([
> > +                'sf read 4000000 150000 10',
> > +                'md.b 4000000 10'])
> > +            assert 'u-boot-env:Old' in ''.join(output)
> > +
> > +    def test_efi_capsule_fw2(
> > +            self, u_boot_config, u_boot_console, efi_capsule_data):
> > +        """
> > +        Test Case 2 - Update U-Boot and U-Boot environment on SPI Flash
> > +                      0x100000-0x150000: U-Boot binary (but dummy)
> > +                      0x150000-0x200000: U-Boot environment (but dummy)
> > +        """
> > +        disk_img = efi_capsule_data
> > +        with u_boot_console.log.section('Test Case 2-a, before reboot'):
> > +            output = u_boot_console.run_command_list([
> > +                'host bind 0 %s' % disk_img,
> > +                'efidebug boot add -b 1 TEST host 0:1 /helloworld.efi -s ""',
> > +                'efidebug boot order 1',
> > +                'env set -e -nv -bs -rt OsIndications =0x0000000000000004',
> > +                'env set dfu_alt_info "sf 0:0=u-boot-bin raw 0x100000 0x50000;u-boot-env raw 0x150000 0x200000"',
> > +                'env save'])
> > +
> > +            # initialize contents
> > +            output = u_boot_console.run_command_list([
> > +                'sf probe 0:0',
> > +                'fatload host 0:1 4000000 %s/u-boot.bin.old' % CAPSULE_DATA_DIR,
> > +                'sf write 4000000 100000 10',
> > +                'sf read 5000000 100000 10',
> > +                'md.b 5000000 10'])
> > +            assert 'Old' in ''.join(output)
> > +            output = u_boot_console.run_command_list([
> > +                'sf probe 0:0',
> > +                'fatload host 0:1 4000000 %s/u-boot.env.old' % CAPSULE_DATA_DIR,
> > +                'sf write 4000000 150000 10',
> > +                'sf read 5000000 150000 10',
> > +                'md.b 5000000 10'])
> > +            assert 'Old' in ''.join(output)
> > +
> > +            # place a capsule file
> > +            output = u_boot_console.run_command_list([
> > +                'fatload host 0:1 4000000 %s/Test04' % CAPSULE_DATA_DIR,
> > +                'fatwrite host 0:1 4000000 %s/Test04 $filesize' % CAPSULE_INSTALL_DIR,
> > +                'fatls host 0:1 %s' % CAPSULE_INSTALL_DIR])
> > +            assert 'Test04' in ''.join(output)
> > +
> > +        capsule_early = u_boot_config.buildconfig.get(
> > +            'config_efi_capsule_on_disk_early')
> > +        capsule_auth = u_boot_config.buildconfig.get(
> > +            'config_efi_capsule_authenticate')
> > +
> > +        # reboot
> > +        u_boot_console.restart_uboot(expect_reset = capsule_early)
> > +
> > +        with u_boot_console.log.section('Test Case 2-b, after reboot'):
> > +            if not capsule_early:
> > +                # make sure that dfu_alt_info exists even persistent variables
> > +                # are not available.
> > +                output = u_boot_console.run_command_list([
> > +                    'env set dfu_alt_info "sf 0:0=u-boot-bin raw 0x100000 0x50000;u-boot-env raw 0x150000 0x200000"',
> > +                    'host bind 0 %s' % disk_img,
> > +                    'fatls host 0:1 %s' % CAPSULE_INSTALL_DIR])
> > +                assert 'Test04' in ''.join(output)
> > +
> > +                # need to run uefi command to initiate capsule handling
> > +                output = u_boot_console.run_command(
> > +                    'env print -e Capsule0000', wait_for_reboot = True)
> > +
> > +            output = u_boot_console.run_command_list([
> > +                'host bind 0 %s' % disk_img,
> > +                'fatls host 0:1 %s' % CAPSULE_INSTALL_DIR])
> > +            assert 'Test04' not in ''.join(output)
> > +
> > +            output = u_boot_console.run_command_list([
> > +                'sf probe 0:0',
> > +                'sf read 4000000 100000 10',
> > +                'md.b 4000000 10'])
> > +            if capsule_auth:
> > +                assert 'u-boot:Old' in ''.join(output)
> > +            else:
> > +                assert 'u-boot:New' in ''.join(output)
> > +
> > +            output = u_boot_console.run_command_list([
> > +                'sf read 4000000 150000 10',
> > +                'md.b 4000000 10'])
> > +            if capsule_auth:
> > +                assert 'u-boot-env:Old' in ''.join(output)
> > +            else:
> > +                assert 'u-boot-env:New' in ''.join(output)
> > diff --git a/test/py/tests/test_efi_capsule/test_capsule_firmware.py b/test/py/tests/test_efi_capsule/test_capsule_firmware_raw.py
> > similarity index 75%
> > rename from test/py/tests/test_efi_capsule/test_capsule_firmware.py
> > rename to test/py/tests/test_efi_capsule/test_capsule_firmware_raw.py
> > index 1dcf1c70f4..ae99f080ff 100644
> > --- a/test/py/tests/test_efi_capsule/test_capsule_firmware.py
> > +++ b/test/py/tests/test_efi_capsule/test_capsule_firmware_raw.py
> > @@ -5,7 +5,7 @@
> >  # U-Boot UEFI: Firmware Update Test
> >
> >  """
> > -This test verifies capsule-on-disk firmware update
> > +This test verifies capsule-on-disk firmware update for raw images
> >  """
> >
> >  from subprocess import check_call, check_output, CalledProcessError
> > @@ -14,7 +14,6 @@ from capsule_defs import *
> >
> >
> >  @pytest.mark.boardspec('sandbox')
> > - at pytest.mark.buildconfigspec('efi_capsule_firmware_fit')
> >  @pytest.mark.buildconfigspec('efi_capsule_firmware_raw')
> >  @pytest.mark.buildconfigspec('efi_capsule_on_disk')
> >  @pytest.mark.buildconfigspec('dfu')
> > @@ -25,23 +24,29 @@ from capsule_defs import *
> >  @pytest.mark.buildconfigspec('cmd_nvedit_efi')
> >  @pytest.mark.buildconfigspec('cmd_sf')
> >  @pytest.mark.slow
> > -class TestEfiCapsuleFirmwareFit(object):
> > +class TestEfiCapsuleFirmwareRaw(object):
> >      def test_efi_capsule_fw1(
> >              self, u_boot_config, u_boot_console, efi_capsule_data):
> >          """
> >          Test Case 1 - Update U-Boot and U-Boot environment on SPI Flash
> > -                      but with OsIndications unset
> > +                      but with an incorrect GUID value in the capsule
> >                        No update should happen
> >                        0x100000-0x150000: U-Boot binary (but dummy)
> >                        0x150000-0x200000: U-Boot environment (but dummy)
> >          """
> > +
> > +        # other tests might have run and the
> > +        # system might not be in a clean state.
> > +        # Restart before starting the tests.
> > +        u_boot_console.restart_uboot()
> > +
> >          disk_img = efi_capsule_data
> >          with u_boot_console.log.section('Test Case 1-a, before reboot'):
> >              output = u_boot_console.run_command_list([
> >                  'host bind 0 %s' % disk_img,
> >                  'efidebug boot add -b 1 TEST host 0:1 /helloworld.efi -s ""',
> >                  'efidebug boot order 1',
> > -                'env set -e OsIndications',
> > +                'env set -e -nv -bs -rt OsIndications =0x0000000000000004',
> >                  'env set dfu_alt_info "sf 0:0=u-boot-bin raw 0x100000 0x50000;u-boot-env raw 0x150000 0x200000"',
> >                  'env save'])
> >
> > @@ -63,16 +68,17 @@ class TestEfiCapsuleFirmwareFit(object):
> >
> >              # place a capsule file
> >              output = u_boot_console.run_command_list([
> > -                'fatload host 0:1 4000000 %s/Test01' % CAPSULE_DATA_DIR,
> > -                'fatwrite host 0:1 4000000 %s/Test01 $filesize' % CAPSULE_INSTALL_DIR,
> > +                'fatload host 0:1 4000000 %s/Test03' % CAPSULE_DATA_DIR,
> > +                'fatwrite host 0:1 4000000 %s/Test03 $filesize' % CAPSULE_INSTALL_DIR,
> >                  'fatls host 0:1 %s' % CAPSULE_INSTALL_DIR])
> > -            assert 'Test01' in ''.join(output)
> > +            assert 'Test03' in ''.join(output)
> >
> >          # reboot
> >          u_boot_console.restart_uboot()
> >
> >          capsule_early = u_boot_config.buildconfig.get(
> >              'config_efi_capsule_on_disk_early')
> > +
> >          with u_boot_console.log.section('Test Case 1-b, after reboot'):
> >              if not capsule_early:
> >                  # make sure that dfu_alt_info exists even persistent variables
> > @@ -81,16 +87,11 @@ class TestEfiCapsuleFirmwareFit(object):
> >                      'env set dfu_alt_info "sf 0:0=u-boot-bin raw 0x100000 0x50000;u-boot-env raw 0x150000 0x200000"',
> >                      'host bind 0 %s' % disk_img,
> >                      'fatls host 0:1 %s' % CAPSULE_INSTALL_DIR])
> > -                assert 'Test01' in ''.join(output)
> > +                assert 'Test03' in ''.join(output)
> >
> >                  # need to run uefi command to initiate capsule handling
> >                  output = u_boot_console.run_command(
> > -                    'env print -e Capsule0000')
> > -
> > -            output = u_boot_console.run_command_list([
> > -                'host bind 0 %s' % disk_img,
> > -                'fatls host 0:1 %s' % CAPSULE_INSTALL_DIR])
> > -            assert 'Test01' in ''.join(output)
> > +                    'env print -e Capsule0000', wait_for_reboot = True)
> >
> >              output = u_boot_console.run_command_list([
> >                  'sf probe 0:0',
> > @@ -107,6 +108,8 @@ class TestEfiCapsuleFirmwareFit(object):
> >              self, u_boot_config, u_boot_console, efi_capsule_data):
> >          """
> >          Test Case 2 - Update U-Boot and U-Boot environment on SPI Flash
> > +                      but with OsIndications unset
> > +                      No update should happen
> >                        0x100000-0x150000: U-Boot binary (but dummy)
> >                        0x150000-0x200000: U-Boot environment (but dummy)
> >          """
> > @@ -116,7 +119,7 @@ class TestEfiCapsuleFirmwareFit(object):
> >                  'host bind 0 %s' % disk_img,
> >                  'efidebug boot add -b 1 TEST host 0:1 /helloworld.efi -s ""',
> >                  'efidebug boot order 1',
> > -                'env set -e -nv -bs -rt OsIndications =0x0000000000000004',
> > +                'env set -e OsIndications',
> >                  'env set dfu_alt_info "sf 0:0=u-boot-bin raw 0x100000 0x50000;u-boot-env raw 0x150000 0x200000"',
> >                  'env save'])
> >
> > @@ -136,21 +139,24 @@ class TestEfiCapsuleFirmwareFit(object):
> >                  'md.b 5000000 10'])
> >              assert 'Old' in ''.join(output)
> >
> > -            # place a capsule file
> > +            # place the capsule files
> >              output = u_boot_console.run_command_list([
> >                  'fatload host 0:1 4000000 %s/Test01' % CAPSULE_DATA_DIR,
> >                  'fatwrite host 0:1 4000000 %s/Test01 $filesize' % CAPSULE_INSTALL_DIR,
> >                  'fatls host 0:1 %s' % CAPSULE_INSTALL_DIR])
> >              assert 'Test01' in ''.join(output)
> >
> > -        capsule_early = u_boot_config.buildconfig.get(
> > -            'config_efi_capsule_on_disk_early')
> > -        capsule_auth = u_boot_config.buildconfig.get(
> > -            'config_efi_capsule_authenticate')
> > +            output = u_boot_console.run_command_list([
> > +                'fatload host 0:1 4000000 %s/Test02' % CAPSULE_DATA_DIR,
> > +                'fatwrite host 0:1 4000000 %s/Test02 $filesize' % CAPSULE_INSTALL_DIR,
> > +                'fatls host 0:1 %s' % CAPSULE_INSTALL_DIR])
> > +            assert 'Test02' in ''.join(output)
> >
> >          # reboot
> > -        u_boot_console.restart_uboot(expect_reset = capsule_early)
> > +        u_boot_console.restart_uboot()
> >
> > +        capsule_early = u_boot_config.buildconfig.get(
> > +            'config_efi_capsule_on_disk_early')
> >          with u_boot_console.log.section('Test Case 2-b, after reboot'):
> >              if not capsule_early:
> >                  # make sure that dfu_alt_info exists even persistent variables
> > @@ -160,32 +166,28 @@ class TestEfiCapsuleFirmwareFit(object):
> >                      'host bind 0 %s' % disk_img,
> >                      'fatls host 0:1 %s' % CAPSULE_INSTALL_DIR])
> >                  assert 'Test01' in ''.join(output)
> > +                assert 'Test02' in ''.join(output)
> >
> >                  # need to run uefi command to initiate capsule handling
> >                  output = u_boot_console.run_command(
> > -                    'env print -e Capsule0000', wait_for_reboot = True)
> > +                    'env print -e Capsule0000')
> >
> >              output = u_boot_console.run_command_list([
> >                  'host bind 0 %s' % disk_img,
> >                  'fatls host 0:1 %s' % CAPSULE_INSTALL_DIR])
> > -            assert 'Test01' not in ''.join(output)
> > +            assert 'Test01' in ''.join(output)
> > +            assert 'Test02' in ''.join(output)
> >
> >              output = u_boot_console.run_command_list([
> >                  'sf probe 0:0',
> >                  'sf read 4000000 100000 10',
> >                  'md.b 4000000 10'])
> > -            if capsule_auth:
> > -                assert 'u-boot:Old' in ''.join(output)
> > -            else:
> > -                assert 'u-boot:New' in ''.join(output)
> > +            assert 'u-boot:Old' in ''.join(output)
> >
> >              output = u_boot_console.run_command_list([
> >                  'sf read 4000000 150000 10',
> >                  'md.b 4000000 10'])
> > -            if capsule_auth:
> > -                assert 'u-boot-env:Old' in ''.join(output)
> > -            else:
> > -                assert 'u-boot-env:New' in ''.join(output)
> > +            assert 'u-boot-env:Old' in ''.join(output)
> >
> >      def test_efi_capsule_fw3(
> >              self, u_boot_config, u_boot_console, efi_capsule_data):
> > @@ -203,7 +205,7 @@ class TestEfiCapsuleFirmwareFit(object):
> >                  'env set dfu_alt_info "sf 0:0=u-boot-bin raw 0x100000 0x50000;u-boot-env raw 0x150000 0x200000"',
> >                  'env save'])
> >
> > -            # initialize content
> > +            # initialize contents
> >              output = u_boot_console.run_command_list([
> >                  'sf probe 0:0',
> >                  'fatload host 0:1 4000000 %s/u-boot.bin.old' % CAPSULE_DATA_DIR,
> > @@ -212,7 +214,21 @@ class TestEfiCapsuleFirmwareFit(object):
> >                  'md.b 5000000 10'])
> >              assert 'Old' in ''.join(output)
> >
> > -            # place a capsule file
> > +            output = u_boot_console.run_command_list([
> > +                'sf probe 0:0',
> > +                'fatload host 0:1 4000000 %s/u-boot.env.old' % CAPSULE_DATA_DIR,
> > +                'sf write 4000000 150000 10',
> > +                'sf read 5000000 100000 10',
> > +                'md.b 5000000 10'])
> > +            assert 'Old' in ''.join(output)
> > +
> > +            # place the capsule files
> > +            output = u_boot_console.run_command_list([
> > +                'fatload host 0:1 4000000 %s/Test01' % CAPSULE_DATA_DIR,
> > +                'fatwrite host 0:1 4000000 %s/Test01 $filesize' % CAPSULE_INSTALL_DIR,
> > +                'fatls host 0:1 %s' % CAPSULE_INSTALL_DIR])
> > +            assert 'Test01' in ''.join(output)
> > +
> >              output = u_boot_console.run_command_list([
> >                  'fatload host 0:1 4000000 %s/Test02' % CAPSULE_DATA_DIR,
> >                  'fatwrite host 0:1 4000000 %s/Test02 $filesize' % CAPSULE_INSTALL_DIR,
> > @@ -235,6 +251,7 @@ class TestEfiCapsuleFirmwareFit(object):
> >                      'env set dfu_alt_info "sf 0:0=u-boot-bin raw 0x100000 0x50000;u-boot-env raw 0x150000 0x200000"',
> >                      'host bind 0 %s' % disk_img,
> >                      'fatls host 0:1 %s' % CAPSULE_INSTALL_DIR])
> > +                assert 'Test01' in ''.join(output)
> >                  assert 'Test02' in ''.join(output)
> >
> >                  # need to run uefi command to initiate capsule handling
> > @@ -246,15 +263,16 @@ class TestEfiCapsuleFirmwareFit(object):
> >                  'env set dfu_alt_info "sf 0:0=u-boot-bin raw 0x100000 0x50000;u-boot-env raw 0x150000 0x200000"',
> >                  'efidebug capsule esrt'])
> >
> > -            # ensure that EFI_FIRMWARE_IMAGE_TYPE_UBOOT_FIT_GUID is in the ESRT.
> > -            assert 'AE13FF2D-9AD4-4E25-9AC8-6D80B3B22147' in ''.join(output)
> > +            # ensure that SANDBOX_UBOOT_ENV_IMAGE_GUID is in the ESRT.
> > +            assert '5A7021F5-FEF2-48B4-AABA-832E777418C0' in ''.join(output)
> >
> > -            # ensure that  EFI_FIRMWARE_IMAGE_TYPE_UBOOT_RAW_GUID is in the ESRT.
> > -            assert 'E2BB9C06-70E9-4B14-97A3-5A7913176E3F' in ''.join(output)
> > +            # ensure that SANDBOX_UBOOT_IMAGE_GUID is in the ESRT.
> > +            assert '09D7CF52-0720-4710-91D1-08469B7FE9C8' in ''.join(output)
> >
> >              output = u_boot_console.run_command_list([
> >                  'host bind 0 %s' % disk_img,
> >                  'fatls host 0:1 %s' % CAPSULE_INSTALL_DIR])
> > +            assert 'Test01' not in ''.join(output)
> >              assert 'Test02' not in ''.join(output)
> >
> >              output = u_boot_console.run_command_list([
> > @@ -266,78 +284,11 @@ class TestEfiCapsuleFirmwareFit(object):
> >              else:
> >                  assert 'u-boot:New' in ''.join(output)
> >
> > -    def test_efi_capsule_fw4(
> > -            self, u_boot_config, u_boot_console, efi_capsule_data):
> > -        """
> > -        Test Case 4 - Test "--guid" option of mkeficapsule
> > -                      The test scenario is the same as Case 3.
> > -        """
> > -        disk_img = efi_capsule_data
> > -        with u_boot_console.log.section('Test Case 4-a, before reboot'):
> > -            output = u_boot_console.run_command_list([
> > -                'host bind 0 %s' % disk_img,
> > -                'efidebug boot add -b 1 TEST host 0:1 /helloworld.efi -s ""',
> > -                'efidebug boot order 1',
> > -                'env set -e -nv -bs -rt OsIndications =0x0000000000000004',
> > -                'env set dfu_alt_info "sf 0:0=u-boot-bin raw 0x100000 0x50000;u-boot-env raw 0x150000 0x200000"',
> > -                'env save'])
> > -
> > -            # initialize content
> >              output = u_boot_console.run_command_list([
> >                  'sf probe 0:0',
> > -                'fatload host 0:1 4000000 %s/u-boot.bin.old' % CAPSULE_DATA_DIR,
> > -                'sf write 4000000 100000 10',
> > -                'sf read 5000000 100000 10',
> > -                'md.b 5000000 10'])
> > -            assert 'Old' in ''.join(output)
> > -
> > -            # place a capsule file
> > -            output = u_boot_console.run_command_list([
> > -                'fatload host 0:1 4000000 %s/Test03' % CAPSULE_DATA_DIR,
> > -                'fatwrite host 0:1 4000000 %s/Test03 $filesize' % CAPSULE_INSTALL_DIR,
> > -                'fatls host 0:1 %s' % CAPSULE_INSTALL_DIR])
> > -            assert 'Test03' in ''.join(output)
> > -
> > -        capsule_early = u_boot_config.buildconfig.get(
> > -            'config_efi_capsule_on_disk_early')
> > -        capsule_auth = u_boot_config.buildconfig.get(
> > -            'config_efi_capsule_authenticate')
> > -
> > -        # reboot
> > -        u_boot_console.restart_uboot(expect_reset = capsule_early)
> > -
> > -        with u_boot_console.log.section('Test Case 4-b, after reboot'):
> > -            if not capsule_early:
> > -                # make sure that dfu_alt_info exists even persistent variables
> > -                # are not available.
> > -                output = u_boot_console.run_command_list([
> > -                    'env set dfu_alt_info "sf 0:0=u-boot-bin raw 0x100000 0x50000;u-boot-env raw 0x150000 0x200000"',
> > -                    'host bind 0 %s' % disk_img,
> > -                    'fatls host 0:1 %s' % CAPSULE_INSTALL_DIR])
> > -                assert 'Test03' in ''.join(output)
> > -
> > -                # need to run uefi command to initiate capsule handling
> > -                output = u_boot_console.run_command(
> > -                    'env print -e Capsule0000', wait_for_reboot = True)
> > -
> > -            # make sure the dfu_alt_info exists because it is required for making ESRT.
> > -            output = u_boot_console.run_command_list([
> > -                'env set dfu_alt_info "sf 0:0=u-boot-bin raw 0x100000 0x50000;u-boot-env raw 0x150000 0x200000"',
> > -                'efidebug capsule esrt'])
> > -
> > -            # ensure that  EFI_FIRMWARE_IMAGE_TYPE_UBOOT_RAW_GUID is in the ESRT.
> > -            assert 'E2BB9C06-70E9-4B14-97A3-5A7913176E3F' in ''.join(output)
> > -
> > -            output = u_boot_console.run_command_list([
> > -                'host bind 0 %s' % disk_img,
> > -                'fatls host 0:1 %s' % CAPSULE_INSTALL_DIR])
> > -            assert 'Test03' not in ''.join(output)
> > -
> > -            output = u_boot_console.run_command_list([
> > -                'sf probe 0:0',
> > -                'sf read 4000000 100000 10',
> > +                'sf read 4000000 150000 10',
> >                  'md.b 4000000 10'])
> >              if capsule_auth:
> > -                assert 'u-boot:Old' in ''.join(output)
> > +                assert 'u-boot-env:Old' in ''.join(output)
> >              else:
> > -                assert 'u-boot:New' in ''.join(output)
> > +                assert 'u-boot-env:New' in ''.join(output)
> > --
> > 2.25.1
> >


More information about the U-Boot mailing list