mirror of
https://github.com/u-boot/u-boot.git
synced 2025-04-29 01:14:45 +00:00
test: efi_capsule: refactor efi_capsule test
Current efi capsule python tests have much code duplication. This commit creates the common function in test/py/tests/test_efi_capsule/capsule_common.py, aim to reduce the code size and improve maintainability. Reviewed-by: Simon Glass <sjg@chromium.org> Signed-off-by: Masahisa Kojima <masahisa.kojima@linaro.org> Acked-by: Ilias Apalodimas <ilias.apalodimas@linaro.org>
This commit is contained in:
parent
027f8a82ea
commit
482ef90aeb
5 changed files with 276 additions and 631 deletions
142
test/py/tests/test_efi_capsule/capsule_common.py
Normal file
142
test/py/tests/test_efi_capsule/capsule_common.py
Normal file
|
@ -0,0 +1,142 @@
|
||||||
|
# SPDX-License-Identifier: GPL-2.0+
|
||||||
|
# Copyright (c) 2023, Linaro Limited
|
||||||
|
|
||||||
|
|
||||||
|
"""Common function for UEFI capsule test."""
|
||||||
|
|
||||||
|
from capsule_defs import CAPSULE_DATA_DIR, CAPSULE_INSTALL_DIR
|
||||||
|
|
||||||
|
def setup(u_boot_console, disk_img, osindications):
|
||||||
|
"""setup the test
|
||||||
|
|
||||||
|
Args:
|
||||||
|
u_boot_console -- A console connection to U-Boot.
|
||||||
|
disk_img -- A path to disk image to be used for testing.
|
||||||
|
osindications -- String of osindications value.
|
||||||
|
"""
|
||||||
|
u_boot_console.run_command_list([
|
||||||
|
f'host bind 0 {disk_img}',
|
||||||
|
'printenv -e PlatformLangCodes', # workaround for terminal size determination
|
||||||
|
'efidebug boot add -b 1 TEST host 0:1 /helloworld.efi',
|
||||||
|
'efidebug boot order 1',
|
||||||
|
'env set dfu_alt_info "sf 0:0=u-boot-bin raw 0x100000 0x50000;'
|
||||||
|
'u-boot-env raw 0x150000 0x200000"'])
|
||||||
|
|
||||||
|
if osindications is None:
|
||||||
|
u_boot_console.run_command('env set -e OsIndications')
|
||||||
|
else:
|
||||||
|
u_boot_console.run_command(f'env set -e -nv -bs -rt OsIndications ={osindications}')
|
||||||
|
|
||||||
|
u_boot_console.run_command('env save')
|
||||||
|
|
||||||
|
def init_content(u_boot_console, target, filename, expected):
|
||||||
|
"""initialize test content
|
||||||
|
|
||||||
|
Args:
|
||||||
|
u_boot_console -- A console connection to U-Boot.
|
||||||
|
target -- Target address to place the content.
|
||||||
|
filename -- File name of the content.
|
||||||
|
expected -- Expected string of the content.
|
||||||
|
"""
|
||||||
|
output = u_boot_console.run_command_list([
|
||||||
|
'sf probe 0:0',
|
||||||
|
f'fatload host 0:1 4000000 {CAPSULE_DATA_DIR}/{filename}',
|
||||||
|
f'sf write 4000000 {target} 10',
|
||||||
|
'sf read 5000000 100000 10',
|
||||||
|
'md.b 5000000 10'])
|
||||||
|
assert expected in ''.join(output)
|
||||||
|
|
||||||
|
def place_capsule_file(u_boot_console, filenames):
|
||||||
|
"""place the capsule file
|
||||||
|
|
||||||
|
Args:
|
||||||
|
u_boot_console -- A console connection to U-Boot.
|
||||||
|
filenames -- File name array of the target capsule files.
|
||||||
|
"""
|
||||||
|
for name in filenames:
|
||||||
|
u_boot_console.run_command_list([
|
||||||
|
f'fatload host 0:1 4000000 {CAPSULE_DATA_DIR}/{name}',
|
||||||
|
f'fatwrite host 0:1 4000000 {CAPSULE_INSTALL_DIR}/{name} $filesize'])
|
||||||
|
|
||||||
|
output = u_boot_console.run_command(f'fatls host 0:1 {CAPSULE_INSTALL_DIR}')
|
||||||
|
for name in filenames:
|
||||||
|
assert name in ''.join(output)
|
||||||
|
|
||||||
|
def exec_manual_update(u_boot_console, disk_img, filenames, need_reboot = True):
|
||||||
|
"""execute capsule update manually
|
||||||
|
|
||||||
|
Args:
|
||||||
|
u_boot_console -- A console connection to U-Boot.
|
||||||
|
disk_img -- A path to disk image to be used for testing.
|
||||||
|
filenames -- File name array of the target capsule files.
|
||||||
|
need_reboot -- Flag indicates whether system reboot is required.
|
||||||
|
"""
|
||||||
|
# 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"',
|
||||||
|
f'host bind 0 {disk_img}',
|
||||||
|
f'fatls host 0:1 {CAPSULE_INSTALL_DIR}'])
|
||||||
|
for name in filenames:
|
||||||
|
assert name in ''.join(output)
|
||||||
|
|
||||||
|
# need to run uefi command to initiate capsule handling
|
||||||
|
u_boot_console.run_command(
|
||||||
|
'env print -e Capsule0000', wait_for_reboot = need_reboot)
|
||||||
|
|
||||||
|
def check_file_removed(u_boot_console, disk_img, filenames):
|
||||||
|
"""check files are removed
|
||||||
|
|
||||||
|
Args:
|
||||||
|
u_boot_console -- A console connection to U-Boot.
|
||||||
|
disk_img -- A path to disk image to be used for testing.
|
||||||
|
filenames -- File name array of the target capsule files.
|
||||||
|
"""
|
||||||
|
output = u_boot_console.run_command_list([
|
||||||
|
f'host bind 0 {disk_img}',
|
||||||
|
f'fatls host 0:1 {CAPSULE_INSTALL_DIR}'])
|
||||||
|
for name in filenames:
|
||||||
|
assert name not in ''.join(output)
|
||||||
|
|
||||||
|
def check_file_exist(u_boot_console, disk_img, filenames):
|
||||||
|
"""check files exist
|
||||||
|
|
||||||
|
Args:
|
||||||
|
u_boot_console -- A console connection to U-Boot.
|
||||||
|
disk_img -- A path to disk image to be used for testing.
|
||||||
|
filenames -- File name array of the target capsule files.
|
||||||
|
"""
|
||||||
|
output = u_boot_console.run_command_list([
|
||||||
|
f'host bind 0 {disk_img}',
|
||||||
|
f'fatls host 0:1 {CAPSULE_INSTALL_DIR}'])
|
||||||
|
for name in filenames:
|
||||||
|
assert name in ''.join(output)
|
||||||
|
|
||||||
|
def verify_content(u_boot_console, target, expected):
|
||||||
|
"""verify the content
|
||||||
|
|
||||||
|
Args:
|
||||||
|
u_boot_console -- A console connection to U-Boot.
|
||||||
|
target -- Target address to verify.
|
||||||
|
expected -- Expected string of the content.
|
||||||
|
"""
|
||||||
|
output = u_boot_console.run_command_list([
|
||||||
|
'sf probe 0:0',
|
||||||
|
f'sf read 4000000 {target} 10',
|
||||||
|
'md.b 4000000 10'])
|
||||||
|
assert expected in ''.join(output)
|
||||||
|
|
||||||
|
def do_reboot_dtb_specified(u_boot_config, u_boot_console, dtb_filename):
|
||||||
|
"""do reboot with specified DTB
|
||||||
|
|
||||||
|
Args:
|
||||||
|
u_boot_config -- U-boot configuration.
|
||||||
|
u_boot_console -- A console connection to U-Boot.
|
||||||
|
dtb_filename -- DTB file name.
|
||||||
|
"""
|
||||||
|
mnt_point = u_boot_config.persistent_data_dir + '/test_efi_capsule'
|
||||||
|
u_boot_console.config.dtb = mnt_point + CAPSULE_DATA_DIR \
|
||||||
|
+ f'/{dtb_filename}'
|
||||||
|
u_boot_console.restart_uboot()
|
|
@ -7,8 +7,14 @@ This test verifies capsule-on-disk firmware update for FIT images
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
from capsule_defs import CAPSULE_DATA_DIR, CAPSULE_INSTALL_DIR
|
from capsule_common import (
|
||||||
|
setup,
|
||||||
|
init_content,
|
||||||
|
place_capsule_file,
|
||||||
|
exec_manual_update,
|
||||||
|
check_file_removed,
|
||||||
|
verify_content
|
||||||
|
)
|
||||||
|
|
||||||
@pytest.mark.boardspec('sandbox_flattree')
|
@pytest.mark.boardspec('sandbox_flattree')
|
||||||
@pytest.mark.buildconfigspec('efi_capsule_firmware_fit')
|
@pytest.mark.buildconfigspec('efi_capsule_firmware_fit')
|
||||||
|
@ -40,37 +46,12 @@ class TestEfiCapsuleFirmwareFit():
|
||||||
u_boot_console.restart_uboot()
|
u_boot_console.restart_uboot()
|
||||||
|
|
||||||
disk_img = efi_capsule_data
|
disk_img = efi_capsule_data
|
||||||
|
capsule_files = ['Test05']
|
||||||
with u_boot_console.log.section('Test Case 1-a, before reboot'):
|
with u_boot_console.log.section('Test Case 1-a, before reboot'):
|
||||||
output = u_boot_console.run_command_list([
|
setup(u_boot_console, disk_img, '0x0000000000000004')
|
||||||
'host bind 0 %s' % disk_img,
|
init_content(u_boot_console, '100000', 'u-boot.bin.old', 'Old')
|
||||||
'efidebug boot add -b 1 TEST host 0:1 /helloworld.efi -s ""',
|
init_content(u_boot_console, '150000', 'u-boot.env.old', 'Old')
|
||||||
'efidebug boot order 1',
|
place_capsule_file(u_boot_console, capsule_files)
|
||||||
'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(
|
capsule_early = u_boot_config.buildconfig.get(
|
||||||
'config_efi_capsule_on_disk_early')
|
'config_efi_capsule_on_disk_early')
|
||||||
|
@ -80,28 +61,13 @@ class TestEfiCapsuleFirmwareFit():
|
||||||
|
|
||||||
with u_boot_console.log.section('Test Case 1-b, after reboot'):
|
with u_boot_console.log.section('Test Case 1-b, after reboot'):
|
||||||
if not capsule_early:
|
if not capsule_early:
|
||||||
# make sure that dfu_alt_info exists even persistent variables
|
exec_manual_update(u_boot_console, disk_img, capsule_files)
|
||||||
# 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
|
# deleted anyway
|
||||||
output = u_boot_console.run_command(
|
check_file_removed(u_boot_console, disk_img, capsule_files)
|
||||||
'env print -e Capsule0000', wait_for_reboot = True)
|
|
||||||
|
|
||||||
output = u_boot_console.run_command_list([
|
verify_content(u_boot_console, '100000', 'u-boot:Old')
|
||||||
'sf probe 0:0',
|
verify_content(u_boot_console, '150000', 'u-boot-env:Old')
|
||||||
'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(
|
def test_efi_capsule_fw2(
|
||||||
self, u_boot_config, u_boot_console, efi_capsule_data):
|
self, u_boot_config, u_boot_console, efi_capsule_data):
|
||||||
|
@ -112,38 +78,12 @@ class TestEfiCapsuleFirmwareFit():
|
||||||
"""
|
"""
|
||||||
|
|
||||||
disk_img = efi_capsule_data
|
disk_img = efi_capsule_data
|
||||||
|
capsule_files = ['Test04']
|
||||||
with u_boot_console.log.section('Test Case 2-a, before reboot'):
|
with u_boot_console.log.section('Test Case 2-a, before reboot'):
|
||||||
output = u_boot_console.run_command_list([
|
setup(u_boot_console, disk_img, '0x0000000000000004')
|
||||||
'host bind 0 %s' % disk_img,
|
init_content(u_boot_console, '100000', 'u-boot.bin.old', 'Old')
|
||||||
'printenv -e PlatformLangCodes', # workaround for terminal size determination
|
init_content(u_boot_console, '150000', 'u-boot.env.old', 'Old')
|
||||||
'efidebug boot add -b 1 TEST host 0:1 /helloworld.efi -s ""',
|
place_capsule_file(u_boot_console, capsule_files)
|
||||||
'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(
|
capsule_early = u_boot_config.buildconfig.get(
|
||||||
'config_efi_capsule_on_disk_early')
|
'config_efi_capsule_on_disk_early')
|
||||||
|
@ -155,36 +95,12 @@ class TestEfiCapsuleFirmwareFit():
|
||||||
|
|
||||||
with u_boot_console.log.section('Test Case 2-b, after reboot'):
|
with u_boot_console.log.section('Test Case 2-b, after reboot'):
|
||||||
if not capsule_early:
|
if not capsule_early:
|
||||||
# make sure that dfu_alt_info exists even persistent variables
|
exec_manual_update(u_boot_console, disk_img, capsule_files)
|
||||||
# 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
|
check_file_removed(u_boot_console, disk_img, capsule_files)
|
||||||
output = u_boot_console.run_command(
|
|
||||||
'env print -e Capsule0000', wait_for_reboot = True)
|
|
||||||
|
|
||||||
output = u_boot_console.run_command_list([
|
expected = 'u-boot:Old' if capsule_auth else 'u-boot:New'
|
||||||
'host bind 0 %s' % disk_img,
|
verify_content(u_boot_console, '100000', expected)
|
||||||
'fatls host 0:1 %s' % CAPSULE_INSTALL_DIR])
|
|
||||||
assert 'Test04' not in ''.join(output)
|
|
||||||
|
|
||||||
output = u_boot_console.run_command_list([
|
expected = 'u-boot-env:Old' if capsule_auth else 'u-boot-env:New'
|
||||||
'sf probe 0:0',
|
verify_content(u_boot_console, '150000', expected)
|
||||||
'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)
|
|
||||||
|
|
|
@ -7,7 +7,15 @@ This test verifies capsule-on-disk firmware update for raw images
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
from capsule_defs import CAPSULE_DATA_DIR, CAPSULE_INSTALL_DIR
|
from capsule_common import (
|
||||||
|
setup,
|
||||||
|
init_content,
|
||||||
|
place_capsule_file,
|
||||||
|
exec_manual_update,
|
||||||
|
check_file_removed,
|
||||||
|
check_file_exist,
|
||||||
|
verify_content
|
||||||
|
)
|
||||||
|
|
||||||
@pytest.mark.boardspec('sandbox')
|
@pytest.mark.boardspec('sandbox')
|
||||||
@pytest.mark.buildconfigspec('efi_capsule_firmware_raw')
|
@pytest.mark.buildconfigspec('efi_capsule_firmware_raw')
|
||||||
|
@ -40,37 +48,12 @@ class TestEfiCapsuleFirmwareRaw:
|
||||||
u_boot_console.restart_uboot()
|
u_boot_console.restart_uboot()
|
||||||
|
|
||||||
disk_img = efi_capsule_data
|
disk_img = efi_capsule_data
|
||||||
|
capsule_files = ['Test03']
|
||||||
with u_boot_console.log.section('Test Case 1-a, before reboot'):
|
with u_boot_console.log.section('Test Case 1-a, before reboot'):
|
||||||
output = u_boot_console.run_command_list([
|
setup(u_boot_console, disk_img, '0x0000000000000004')
|
||||||
'host bind 0 %s' % disk_img,
|
init_content(u_boot_console, '100000', 'u-boot.bin.old', 'Old')
|
||||||
'efidebug boot add -b 1 TEST host 0:1 /helloworld.efi -s ""',
|
init_content(u_boot_console, '150000', 'u-boot.env.old', 'Old')
|
||||||
'efidebug boot order 1',
|
place_capsule_file(u_boot_console, capsule_files)
|
||||||
'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/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)
|
|
||||||
|
|
||||||
# reboot
|
# reboot
|
||||||
u_boot_console.restart_uboot()
|
u_boot_console.restart_uboot()
|
||||||
|
@ -80,28 +63,13 @@ class TestEfiCapsuleFirmwareRaw:
|
||||||
|
|
||||||
with u_boot_console.log.section('Test Case 1-b, after reboot'):
|
with u_boot_console.log.section('Test Case 1-b, after reboot'):
|
||||||
if not capsule_early:
|
if not capsule_early:
|
||||||
# make sure that dfu_alt_info exists even persistent variables
|
exec_manual_update(u_boot_console, disk_img, capsule_files)
|
||||||
# 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
|
# deleted anyway
|
||||||
output = u_boot_console.run_command(
|
check_file_removed(u_boot_console, disk_img, capsule_files)
|
||||||
'env print -e Capsule0000', wait_for_reboot = True)
|
|
||||||
|
|
||||||
output = u_boot_console.run_command_list([
|
verify_content(u_boot_console, '100000', 'u-boot:Old')
|
||||||
'sf probe 0:0',
|
verify_content(u_boot_console, '150000', 'u-boot-env:Old')
|
||||||
'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(
|
def test_efi_capsule_fw2(
|
||||||
self, u_boot_config, u_boot_console, efi_capsule_data):
|
self, u_boot_config, u_boot_console, efi_capsule_data):
|
||||||
|
@ -112,44 +80,12 @@ class TestEfiCapsuleFirmwareRaw:
|
||||||
0x150000-0x200000: U-Boot environment (but dummy)
|
0x150000-0x200000: U-Boot environment (but dummy)
|
||||||
"""
|
"""
|
||||||
disk_img = efi_capsule_data
|
disk_img = efi_capsule_data
|
||||||
|
capsule_files = ['Test01', 'Test02']
|
||||||
with u_boot_console.log.section('Test Case 2-a, before reboot'):
|
with u_boot_console.log.section('Test Case 2-a, before reboot'):
|
||||||
output = u_boot_console.run_command_list([
|
setup(u_boot_console, disk_img, None)
|
||||||
'host bind 0 %s' % disk_img,
|
init_content(u_boot_console, '100000', 'u-boot.bin.old', 'Old')
|
||||||
'printenv -e PlatformLangCodes', # workaround for terminal size determination
|
init_content(u_boot_console, '150000', 'u-boot.env.old', 'Old')
|
||||||
'efidebug boot add -b 1 TEST host 0:1 /helloworld.efi -s ""',
|
place_capsule_file(u_boot_console, capsule_files)
|
||||||
'efidebug boot order 1',
|
|
||||||
'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'])
|
|
||||||
|
|
||||||
# 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 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,
|
|
||||||
'fatls host 0:1 %s' % CAPSULE_INSTALL_DIR])
|
|
||||||
assert 'Test02' in ''.join(output)
|
|
||||||
|
|
||||||
# reboot
|
# reboot
|
||||||
u_boot_console.restart_uboot()
|
u_boot_console.restart_uboot()
|
||||||
|
@ -158,35 +94,12 @@ class TestEfiCapsuleFirmwareRaw:
|
||||||
'config_efi_capsule_on_disk_early')
|
'config_efi_capsule_on_disk_early')
|
||||||
with u_boot_console.log.section('Test Case 2-b, after reboot'):
|
with u_boot_console.log.section('Test Case 2-b, after reboot'):
|
||||||
if not capsule_early:
|
if not capsule_early:
|
||||||
# make sure that dfu_alt_info exists even persistent variables
|
exec_manual_update(u_boot_console, disk_img, capsule_files, False)
|
||||||
# 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 'Test01' in ''.join(output)
|
|
||||||
assert 'Test02' in ''.join(output)
|
|
||||||
|
|
||||||
# need to run uefi command to initiate capsule handling
|
check_file_exist(u_boot_console, disk_img, capsule_files)
|
||||||
output = u_boot_console.run_command(
|
|
||||||
'env print -e Capsule0000')
|
|
||||||
|
|
||||||
output = u_boot_console.run_command_list([
|
verify_content(u_boot_console, '100000', 'u-boot:Old')
|
||||||
'host bind 0 %s' % disk_img,
|
verify_content(u_boot_console, '150000', 'u-boot-env:Old')
|
||||||
'fatls host 0:1 %s' % CAPSULE_INSTALL_DIR])
|
|
||||||
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'])
|
|
||||||
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_fw3(
|
def test_efi_capsule_fw3(
|
||||||
self, u_boot_config, u_boot_console, efi_capsule_data):
|
self, u_boot_config, u_boot_console, efi_capsule_data):
|
||||||
|
@ -195,45 +108,12 @@ class TestEfiCapsuleFirmwareRaw:
|
||||||
0x100000-0x150000: U-Boot binary (but dummy)
|
0x100000-0x150000: U-Boot binary (but dummy)
|
||||||
"""
|
"""
|
||||||
disk_img = efi_capsule_data
|
disk_img = efi_capsule_data
|
||||||
|
capsule_files = ['Test01', 'Test02']
|
||||||
with u_boot_console.log.section('Test Case 3-a, before reboot'):
|
with u_boot_console.log.section('Test Case 3-a, before reboot'):
|
||||||
output = u_boot_console.run_command_list([
|
setup(u_boot_console, disk_img, '0x0000000000000004')
|
||||||
'host bind 0 %s' % disk_img,
|
init_content(u_boot_console, '100000', 'u-boot.bin.old', 'Old')
|
||||||
'printenv -e PlatformLangCodes', # workaround for terminal size determination
|
init_content(u_boot_console, '150000', 'u-boot.env.old', 'Old')
|
||||||
'efidebug boot add -b 1 TEST host 0:1 /helloworld.efi -s ""',
|
place_capsule_file(u_boot_console, capsule_files)
|
||||||
'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 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,
|
|
||||||
'fatls host 0:1 %s' % CAPSULE_INSTALL_DIR])
|
|
||||||
assert 'Test02' in ''.join(output)
|
|
||||||
|
|
||||||
capsule_early = u_boot_config.buildconfig.get(
|
capsule_early = u_boot_config.buildconfig.get(
|
||||||
'config_efi_capsule_on_disk_early')
|
'config_efi_capsule_on_disk_early')
|
||||||
|
@ -245,18 +125,7 @@ class TestEfiCapsuleFirmwareRaw:
|
||||||
|
|
||||||
with u_boot_console.log.section('Test Case 3-b, after reboot'):
|
with u_boot_console.log.section('Test Case 3-b, after reboot'):
|
||||||
if not capsule_early:
|
if not capsule_early:
|
||||||
# make sure that dfu_alt_info exists even persistent variables
|
exec_manual_update(u_boot_console, disk_img, capsule_files)
|
||||||
# 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 '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)
|
|
||||||
|
|
||||||
# make sure the dfu_alt_info exists because it is required for making ESRT.
|
# make sure the dfu_alt_info exists because it is required for making ESRT.
|
||||||
output = u_boot_console.run_command_list([
|
output = u_boot_console.run_command_list([
|
||||||
|
@ -269,26 +138,10 @@ class TestEfiCapsuleFirmwareRaw:
|
||||||
# ensure that SANDBOX_UBOOT_IMAGE_GUID is in the ESRT.
|
# ensure that SANDBOX_UBOOT_IMAGE_GUID is in the ESRT.
|
||||||
assert '09D7CF52-0720-4710-91D1-08469B7FE9C8' in ''.join(output)
|
assert '09D7CF52-0720-4710-91D1-08469B7FE9C8' in ''.join(output)
|
||||||
|
|
||||||
output = u_boot_console.run_command_list([
|
check_file_removed(u_boot_console, disk_img, capsule_files)
|
||||||
'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([
|
expected = 'u-boot:Old' if capsule_auth else 'u-boot:New'
|
||||||
'sf probe 0:0',
|
verify_content(u_boot_console, '100000', expected)
|
||||||
'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([
|
expected = 'u-boot-env:Old' if capsule_auth else 'u-boot-env:New'
|
||||||
'sf probe 0:0',
|
verify_content(u_boot_console, '150000', expected)
|
||||||
'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)
|
|
||||||
|
|
|
@ -10,7 +10,15 @@ with signed capsule files containing FIT images
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
from capsule_defs import CAPSULE_DATA_DIR, CAPSULE_INSTALL_DIR
|
from capsule_common import (
|
||||||
|
setup,
|
||||||
|
init_content,
|
||||||
|
place_capsule_file,
|
||||||
|
exec_manual_update,
|
||||||
|
check_file_removed,
|
||||||
|
verify_content,
|
||||||
|
do_reboot_dtb_specified
|
||||||
|
)
|
||||||
|
|
||||||
@pytest.mark.boardspec('sandbox_flattree')
|
@pytest.mark.boardspec('sandbox_flattree')
|
||||||
@pytest.mark.buildconfigspec('efi_capsule_firmware_fit')
|
@pytest.mark.buildconfigspec('efi_capsule_firmware_fit')
|
||||||
|
@ -37,70 +45,23 @@ class TestEfiCapsuleFirmwareSignedFit():
|
||||||
should pass and the firmware be updated.
|
should pass and the firmware be updated.
|
||||||
"""
|
"""
|
||||||
disk_img = efi_capsule_data
|
disk_img = efi_capsule_data
|
||||||
|
capsule_files = ['Test13']
|
||||||
with u_boot_console.log.section('Test Case 1-a, before reboot'):
|
with u_boot_console.log.section('Test Case 1-a, before reboot'):
|
||||||
output = u_boot_console.run_command_list([
|
setup(u_boot_console, disk_img, '0x0000000000000004')
|
||||||
'host bind 0 %s' % disk_img,
|
init_content(u_boot_console, '100000', 'u-boot.bin.old', 'Old')
|
||||||
'printenv -e PlatformLangCodes', # workaround for terminal size determination
|
place_capsule_file(u_boot_console, capsule_files)
|
||||||
'efidebug boot add -b 1 TEST host 0:1 /helloworld.efi',
|
|
||||||
'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
|
do_reboot_dtb_specified(u_boot_config, u_boot_console, 'test_sig.dtb')
|
||||||
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/Test13' % CAPSULE_DATA_DIR,
|
|
||||||
'fatwrite host 0:1 4000000 %s/Test13 $filesize'
|
|
||||||
% CAPSULE_INSTALL_DIR,
|
|
||||||
'fatls host 0:1 %s' % CAPSULE_INSTALL_DIR])
|
|
||||||
assert 'Test13' in ''.join(output)
|
|
||||||
|
|
||||||
# reboot
|
|
||||||
mnt_point = u_boot_config.persistent_data_dir + '/test_efi_capsule'
|
|
||||||
u_boot_console.config.dtb = mnt_point + CAPSULE_DATA_DIR \
|
|
||||||
+ '/test_sig.dtb'
|
|
||||||
u_boot_console.restart_uboot()
|
|
||||||
|
|
||||||
capsule_early = u_boot_config.buildconfig.get(
|
capsule_early = u_boot_config.buildconfig.get(
|
||||||
'config_efi_capsule_on_disk_early')
|
'config_efi_capsule_on_disk_early')
|
||||||
with u_boot_console.log.section('Test Case 1-b, after reboot'):
|
with u_boot_console.log.section('Test Case 1-b, after reboot'):
|
||||||
if not capsule_early:
|
if not capsule_early:
|
||||||
# make sure that dfu_alt_info exists even persistent variables
|
exec_manual_update(u_boot_console, disk_img, capsule_files)
|
||||||
# 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 'Test13' in ''.join(output)
|
|
||||||
|
|
||||||
# need to run uefi command to initiate capsule handling
|
check_file_removed(u_boot_console, disk_img, capsule_files)
|
||||||
output = u_boot_console.run_command(
|
|
||||||
'env print -e Capsule0000', wait_for_reboot = True)
|
|
||||||
|
|
||||||
output = u_boot_console.run_command_list([
|
verify_content(u_boot_console, '100000', 'u-boot:New')
|
||||||
'host bind 0 %s' % disk_img,
|
|
||||||
'fatls host 0:1 %s' % CAPSULE_INSTALL_DIR])
|
|
||||||
assert 'Test13' not in ''.join(output)
|
|
||||||
|
|
||||||
output = u_boot_console.run_command_list([
|
|
||||||
'sf probe 0:0',
|
|
||||||
'sf read 4000000 100000 10',
|
|
||||||
'md.b 4000000 10'])
|
|
||||||
assert 'u-boot:New' in ''.join(output)
|
|
||||||
|
|
||||||
def test_efi_capsule_auth2(
|
def test_efi_capsule_auth2(
|
||||||
self, u_boot_config, u_boot_console, efi_capsule_data):
|
self, u_boot_config, u_boot_console, efi_capsule_data):
|
||||||
|
@ -113,73 +74,26 @@ class TestEfiCapsuleFirmwareSignedFit():
|
||||||
not be updated.
|
not be updated.
|
||||||
"""
|
"""
|
||||||
disk_img = efi_capsule_data
|
disk_img = efi_capsule_data
|
||||||
|
capsule_files = ['Test14']
|
||||||
with u_boot_console.log.section('Test Case 2-a, before reboot'):
|
with u_boot_console.log.section('Test Case 2-a, before reboot'):
|
||||||
output = u_boot_console.run_command_list([
|
setup(u_boot_console, disk_img, '0x0000000000000004')
|
||||||
'host bind 0 %s' % disk_img,
|
init_content(u_boot_console, '100000', 'u-boot.bin.old', 'Old')
|
||||||
'printenv -e PlatformLangCodes', # workaround for terminal size determination
|
place_capsule_file(u_boot_console, capsule_files)
|
||||||
'efidebug boot add -b 1 TEST host 0:1 /helloworld.efi',
|
|
||||||
'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
|
do_reboot_dtb_specified(u_boot_config, u_boot_console, 'test_sig.dtb')
|
||||||
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/Test14' % CAPSULE_DATA_DIR,
|
|
||||||
'fatwrite host 0:1 4000000 %s/Test14 $filesize'
|
|
||||||
% CAPSULE_INSTALL_DIR,
|
|
||||||
'fatls host 0:1 %s' % CAPSULE_INSTALL_DIR])
|
|
||||||
assert 'Test14' in ''.join(output)
|
|
||||||
|
|
||||||
# reboot
|
|
||||||
mnt_point = u_boot_config.persistent_data_dir + '/test_efi_capsule'
|
|
||||||
u_boot_console.config.dtb = mnt_point + CAPSULE_DATA_DIR \
|
|
||||||
+ '/test_sig.dtb'
|
|
||||||
u_boot_console.restart_uboot()
|
|
||||||
|
|
||||||
capsule_early = u_boot_config.buildconfig.get(
|
capsule_early = u_boot_config.buildconfig.get(
|
||||||
'config_efi_capsule_on_disk_early')
|
'config_efi_capsule_on_disk_early')
|
||||||
with u_boot_console.log.section('Test Case 2-b, after reboot'):
|
with u_boot_console.log.section('Test Case 2-b, after reboot'):
|
||||||
if not capsule_early:
|
if not capsule_early:
|
||||||
# make sure that dfu_alt_info exists even persistent variables
|
exec_manual_update(u_boot_console, disk_img, capsule_files)
|
||||||
# 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 'Test14' 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)
|
|
||||||
|
|
||||||
# deleted any way
|
# deleted any way
|
||||||
output = u_boot_console.run_command_list([
|
check_file_removed(u_boot_console, disk_img, capsule_files)
|
||||||
'host bind 0 %s' % disk_img,
|
|
||||||
'fatls host 0:1 %s' % CAPSULE_INSTALL_DIR])
|
|
||||||
assert 'Test14' not in ''.join(output)
|
|
||||||
|
|
||||||
# TODO: check CapsuleStatus in CapsuleXXXX
|
# TODO: check CapsuleStatus in CapsuleXXXX
|
||||||
|
|
||||||
output = u_boot_console.run_command_list([
|
verify_content(u_boot_console, '100000', 'u-boot:Old')
|
||||||
'sf probe 0:0',
|
|
||||||
'sf read 4000000 100000 10',
|
|
||||||
'md.b 4000000 10'])
|
|
||||||
assert 'u-boot:Old' in ''.join(output)
|
|
||||||
|
|
||||||
def test_efi_capsule_auth3(
|
def test_efi_capsule_auth3(
|
||||||
self, u_boot_config, u_boot_console, efi_capsule_data):
|
self, u_boot_config, u_boot_console, efi_capsule_data):
|
||||||
|
@ -191,70 +105,23 @@ class TestEfiCapsuleFirmwareSignedFit():
|
||||||
should fail and the firmware not be updated.
|
should fail and the firmware not be updated.
|
||||||
"""
|
"""
|
||||||
disk_img = efi_capsule_data
|
disk_img = efi_capsule_data
|
||||||
|
capsule_files = ['Test02']
|
||||||
with u_boot_console.log.section('Test Case 3-a, before reboot'):
|
with u_boot_console.log.section('Test Case 3-a, before reboot'):
|
||||||
output = u_boot_console.run_command_list([
|
setup(u_boot_console, disk_img, '0x0000000000000004')
|
||||||
'host bind 0 %s' % disk_img,
|
init_content(u_boot_console, '100000', 'u-boot.bin.old', 'Old')
|
||||||
'printenv -e PlatformLangCodes', # workaround for terminal size determination
|
place_capsule_file(u_boot_console, capsule_files)
|
||||||
'efidebug boot add -b 1 TEST host 0:1 /helloworld.efi',
|
|
||||||
'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
|
do_reboot_dtb_specified(u_boot_config, u_boot_console, 'test_sig.dtb')
|
||||||
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/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
|
|
||||||
mnt_point = u_boot_config.persistent_data_dir + '/test_efi_capsule'
|
|
||||||
u_boot_console.config.dtb = mnt_point + CAPSULE_DATA_DIR \
|
|
||||||
+ '/test_sig.dtb'
|
|
||||||
u_boot_console.restart_uboot()
|
|
||||||
|
|
||||||
capsule_early = u_boot_config.buildconfig.get(
|
capsule_early = u_boot_config.buildconfig.get(
|
||||||
'config_efi_capsule_on_disk_early')
|
'config_efi_capsule_on_disk_early')
|
||||||
with u_boot_console.log.section('Test Case 3-b, after reboot'):
|
with u_boot_console.log.section('Test Case 3-b, after reboot'):
|
||||||
if not capsule_early:
|
if not capsule_early:
|
||||||
# make sure that dfu_alt_info exists even persistent variables
|
exec_manual_update(u_boot_console, disk_img, capsule_files)
|
||||||
# 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 '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)
|
|
||||||
|
|
||||||
# deleted any way
|
# deleted any way
|
||||||
output = u_boot_console.run_command_list([
|
check_file_removed(u_boot_console, disk_img, capsule_files)
|
||||||
'host bind 0 %s' % disk_img,
|
|
||||||
'fatls host 0:1 %s' % CAPSULE_INSTALL_DIR])
|
|
||||||
assert 'Test02' not in ''.join(output)
|
|
||||||
|
|
||||||
# TODO: check CapsuleStatus in CapsuleXXXX
|
# TODO: check CapsuleStatus in CapsuleXXXX
|
||||||
|
|
||||||
output = u_boot_console.run_command_list([
|
verify_content(u_boot_console, '100000', 'u-boot:Old')
|
||||||
'sf probe 0:0',
|
|
||||||
'sf read 4000000 100000 10',
|
|
||||||
'md.b 4000000 10'])
|
|
||||||
assert 'u-boot:Old' in ''.join(output)
|
|
||||||
|
|
|
@ -8,7 +8,15 @@ with signed capsule files containing raw images
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
from capsule_defs import CAPSULE_DATA_DIR, CAPSULE_INSTALL_DIR
|
from capsule_common import (
|
||||||
|
setup,
|
||||||
|
init_content,
|
||||||
|
place_capsule_file,
|
||||||
|
exec_manual_update,
|
||||||
|
check_file_removed,
|
||||||
|
verify_content,
|
||||||
|
do_reboot_dtb_specified
|
||||||
|
)
|
||||||
|
|
||||||
@pytest.mark.boardspec('sandbox')
|
@pytest.mark.boardspec('sandbox')
|
||||||
@pytest.mark.buildconfigspec('efi_capsule_firmware_raw')
|
@pytest.mark.buildconfigspec('efi_capsule_firmware_raw')
|
||||||
|
@ -34,69 +42,23 @@ class TestEfiCapsuleFirmwareSignedRaw():
|
||||||
should pass and the firmware be updated.
|
should pass and the firmware be updated.
|
||||||
"""
|
"""
|
||||||
disk_img = efi_capsule_data
|
disk_img = efi_capsule_data
|
||||||
|
capsule_files = ['Test11']
|
||||||
with u_boot_console.log.section('Test Case 1-a, before reboot'):
|
with u_boot_console.log.section('Test Case 1-a, before reboot'):
|
||||||
output = u_boot_console.run_command_list([
|
setup(u_boot_console, disk_img, '0x0000000000000004')
|
||||||
'host bind 0 %s' % disk_img,
|
init_content(u_boot_console, '100000', 'u-boot.bin.old', 'Old')
|
||||||
'efidebug boot add -b 1 TEST host 0:1 /helloworld.efi',
|
place_capsule_file(u_boot_console, capsule_files)
|
||||||
'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
|
do_reboot_dtb_specified(u_boot_config, u_boot_console, 'test_sig.dtb')
|
||||||
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/Test11' % CAPSULE_DATA_DIR,
|
|
||||||
'fatwrite host 0:1 4000000 %s/Test11 $filesize'
|
|
||||||
% CAPSULE_INSTALL_DIR,
|
|
||||||
'fatls host 0:1 %s' % CAPSULE_INSTALL_DIR])
|
|
||||||
assert 'Test11' in ''.join(output)
|
|
||||||
|
|
||||||
# reboot
|
|
||||||
mnt_point = u_boot_config.persistent_data_dir + '/test_efi_capsule'
|
|
||||||
u_boot_console.config.dtb = mnt_point + CAPSULE_DATA_DIR \
|
|
||||||
+ '/test_sig.dtb'
|
|
||||||
u_boot_console.restart_uboot()
|
|
||||||
|
|
||||||
capsule_early = u_boot_config.buildconfig.get(
|
capsule_early = u_boot_config.buildconfig.get(
|
||||||
'config_efi_capsule_on_disk_early')
|
'config_efi_capsule_on_disk_early')
|
||||||
with u_boot_console.log.section('Test Case 1-b, after reboot'):
|
with u_boot_console.log.section('Test Case 1-b, after reboot'):
|
||||||
if not capsule_early:
|
if not capsule_early:
|
||||||
# make sure that dfu_alt_info exists even persistent variables
|
exec_manual_update(u_boot_console, disk_img, capsule_files)
|
||||||
# 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 'Test11' in ''.join(output)
|
|
||||||
|
|
||||||
# need to run uefi command to initiate capsule handling
|
check_file_removed(u_boot_console, disk_img, capsule_files)
|
||||||
output = u_boot_console.run_command(
|
|
||||||
'env print -e Capsule0000', wait_for_reboot = True)
|
|
||||||
|
|
||||||
output = u_boot_console.run_command_list([
|
verify_content(u_boot_console, '100000', 'u-boot:New')
|
||||||
'host bind 0 %s' % disk_img,
|
|
||||||
'fatls host 0:1 %s' % CAPSULE_INSTALL_DIR])
|
|
||||||
assert 'Test11' not in ''.join(output)
|
|
||||||
|
|
||||||
output = u_boot_console.run_command_list([
|
|
||||||
'sf probe 0:0',
|
|
||||||
'sf read 4000000 100000 10',
|
|
||||||
'md.b 4000000 10'])
|
|
||||||
assert 'u-boot:New' in ''.join(output)
|
|
||||||
|
|
||||||
def test_efi_capsule_auth2(
|
def test_efi_capsule_auth2(
|
||||||
self, u_boot_config, u_boot_console, efi_capsule_data):
|
self, u_boot_config, u_boot_console, efi_capsule_data):
|
||||||
|
@ -108,73 +70,25 @@ class TestEfiCapsuleFirmwareSignedRaw():
|
||||||
not be updated.
|
not be updated.
|
||||||
"""
|
"""
|
||||||
disk_img = efi_capsule_data
|
disk_img = efi_capsule_data
|
||||||
|
capsule_files = ['Test12']
|
||||||
with u_boot_console.log.section('Test Case 2-a, before reboot'):
|
with u_boot_console.log.section('Test Case 2-a, before reboot'):
|
||||||
output = u_boot_console.run_command_list([
|
setup(u_boot_console, disk_img, '0x0000000000000004')
|
||||||
'host bind 0 %s' % disk_img,
|
init_content(u_boot_console, '100000', 'u-boot.bin.old', 'Old')
|
||||||
'printenv -e PlatformLangCodes', # workaround for terminal size determination
|
place_capsule_file(u_boot_console, capsule_files)
|
||||||
'efidebug boot add -b 1 TEST host 0:1 /helloworld.efi',
|
|
||||||
'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
|
do_reboot_dtb_specified(u_boot_config, u_boot_console, 'test_sig.dtb')
|
||||||
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/Test12' % CAPSULE_DATA_DIR,
|
|
||||||
'fatwrite host 0:1 4000000 %s/Test12 $filesize'
|
|
||||||
% CAPSULE_INSTALL_DIR,
|
|
||||||
'fatls host 0:1 %s' % CAPSULE_INSTALL_DIR])
|
|
||||||
assert 'Test12' in ''.join(output)
|
|
||||||
|
|
||||||
# reboot
|
|
||||||
mnt_point = u_boot_config.persistent_data_dir + '/test_efi_capsule'
|
|
||||||
u_boot_console.config.dtb = mnt_point + CAPSULE_DATA_DIR \
|
|
||||||
+ '/test_sig.dtb'
|
|
||||||
u_boot_console.restart_uboot()
|
|
||||||
|
|
||||||
capsule_early = u_boot_config.buildconfig.get(
|
capsule_early = u_boot_config.buildconfig.get(
|
||||||
'config_efi_capsule_on_disk_early')
|
'config_efi_capsule_on_disk_early')
|
||||||
with u_boot_console.log.section('Test Case 2-b, after reboot'):
|
with u_boot_console.log.section('Test Case 2-b, after reboot'):
|
||||||
if not capsule_early:
|
if not capsule_early:
|
||||||
# make sure that dfu_alt_info exists even persistent variables
|
exec_manual_update(u_boot_console, disk_img, capsule_files)
|
||||||
# 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 'Test12' in ''.join(output)
|
|
||||||
|
|
||||||
# need to run uefi command to initiate capsule handling
|
check_file_removed(u_boot_console, disk_img, capsule_files)
|
||||||
output = u_boot_console.run_command(
|
|
||||||
'env print -e Capsule0000', wait_for_reboot = True)
|
|
||||||
|
|
||||||
# deleted any way
|
|
||||||
output = u_boot_console.run_command_list([
|
|
||||||
'host bind 0 %s' % disk_img,
|
|
||||||
'fatls host 0:1 %s' % CAPSULE_INSTALL_DIR])
|
|
||||||
assert 'Test12' not in ''.join(output)
|
|
||||||
|
|
||||||
# TODO: check CapsuleStatus in CapsuleXXXX
|
# TODO: check CapsuleStatus in CapsuleXXXX
|
||||||
|
|
||||||
output = u_boot_console.run_command_list([
|
verify_content(u_boot_console, '100000', 'u-boot:Old')
|
||||||
'sf probe 0:0',
|
|
||||||
'sf read 4000000 100000 10',
|
|
||||||
'md.b 4000000 10'])
|
|
||||||
assert 'u-boot:Old' in ''.join(output)
|
|
||||||
|
|
||||||
def test_efi_capsule_auth3(
|
def test_efi_capsule_auth3(
|
||||||
self, u_boot_config, u_boot_console, efi_capsule_data):
|
self, u_boot_config, u_boot_console, efi_capsule_data):
|
||||||
|
@ -185,70 +99,23 @@ class TestEfiCapsuleFirmwareSignedRaw():
|
||||||
should fail and the firmware not be updated.
|
should fail and the firmware not be updated.
|
||||||
"""
|
"""
|
||||||
disk_img = efi_capsule_data
|
disk_img = efi_capsule_data
|
||||||
|
capsule_files = ['Test02']
|
||||||
with u_boot_console.log.section('Test Case 3-a, before reboot'):
|
with u_boot_console.log.section('Test Case 3-a, before reboot'):
|
||||||
output = u_boot_console.run_command_list([
|
setup(u_boot_console, disk_img, '0x0000000000000004')
|
||||||
'host bind 0 %s' % disk_img,
|
init_content(u_boot_console, '100000', 'u-boot.bin.old', 'Old')
|
||||||
'printenv -e PlatformLangCodes', # workaround for terminal size determination
|
place_capsule_file(u_boot_console, capsule_files)
|
||||||
'efidebug boot add -b 1 TEST host 0:1 /helloworld.efi',
|
|
||||||
'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
|
do_reboot_dtb_specified(u_boot_config, u_boot_console, 'test_sig.dtb')
|
||||||
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/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
|
|
||||||
mnt_point = u_boot_config.persistent_data_dir + '/test_efi_capsule'
|
|
||||||
u_boot_console.config.dtb = mnt_point + CAPSULE_DATA_DIR \
|
|
||||||
+ '/test_sig.dtb'
|
|
||||||
u_boot_console.restart_uboot()
|
|
||||||
|
|
||||||
capsule_early = u_boot_config.buildconfig.get(
|
capsule_early = u_boot_config.buildconfig.get(
|
||||||
'config_efi_capsule_on_disk_early')
|
'config_efi_capsule_on_disk_early')
|
||||||
with u_boot_console.log.section('Test Case 3-b, after reboot'):
|
with u_boot_console.log.section('Test Case 3-b, after reboot'):
|
||||||
if not capsule_early:
|
if not capsule_early:
|
||||||
# make sure that dfu_alt_info exists even persistent variables
|
exec_manual_update(u_boot_console, disk_img, capsule_files)
|
||||||
# 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 '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)
|
|
||||||
|
|
||||||
# deleted anyway
|
# deleted anyway
|
||||||
output = u_boot_console.run_command_list([
|
check_file_removed(u_boot_console, disk_img, capsule_files)
|
||||||
'host bind 0 %s' % disk_img,
|
|
||||||
'fatls host 0:1 %s' % CAPSULE_INSTALL_DIR])
|
|
||||||
assert 'Test02' not in ''.join(output)
|
|
||||||
|
|
||||||
# TODO: check CapsuleStatus in CapsuleXXXX
|
# TODO: check CapsuleStatus in CapsuleXXXX
|
||||||
|
|
||||||
output = u_boot_console.run_command_list([
|
verify_content(u_boot_console, '100000', 'u-boot:Old')
|
||||||
'sf probe 0:0',
|
|
||||||
'sf read 4000000 100000 10',
|
|
||||||
'md.b 4000000 10'])
|
|
||||||
assert 'u-boot:Old' in ''.join(output)
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue