test/py: Rework test_efi_capsule to not use virt-make-fs
FIXME: Reword more The problem with using "virt-make-fs" to make a filesystem image is that it is extremely slow. Switch to using the fs_helper functions we have instead from the filesystem tests as these can add files to images and are significantly faster and still do not require root access. The main change here is that our mount point directory has changed from "test_efi_capsule" to "scratch" and so we need to update other functions too. As the disk image that we get created doesn't have a GPT, invoke sgdisk to do a conversion first. Signed-off-by: Tom Rini <trini@konsulko.com>
This commit is contained in:
@@ -136,7 +136,7 @@ def do_reboot_dtb_specified(u_boot_config, ubman, dtb_filename):
|
|||||||
ubman -- A console connection to U-Boot.
|
ubman -- A console connection to U-Boot.
|
||||||
dtb_filename -- DTB file name.
|
dtb_filename -- DTB file name.
|
||||||
"""
|
"""
|
||||||
mnt_point = u_boot_config.persistent_data_dir + '/test_efi_capsule'
|
mnt_point = u_boot_config.persistent_data_dir + '/scratch'
|
||||||
ubman.config.dtb = mnt_point + CAPSULE_DATA_DIR \
|
ubman.config.dtb = mnt_point + CAPSULE_DATA_DIR \
|
||||||
+ f'/{dtb_filename}'
|
+ f'/{dtb_filename}'
|
||||||
ubman.restart_uboot()
|
ubman.restart_uboot()
|
||||||
|
@@ -7,11 +7,12 @@
|
|||||||
import os
|
import os
|
||||||
|
|
||||||
from subprocess import call, check_call, CalledProcessError
|
from subprocess import call, check_call, CalledProcessError
|
||||||
|
from tests import fs_helper
|
||||||
import pytest
|
import pytest
|
||||||
from capsule_defs import CAPSULE_DATA_DIR, CAPSULE_INSTALL_DIR, EFITOOLS_PATH
|
from capsule_defs import CAPSULE_DATA_DIR, CAPSULE_INSTALL_DIR, EFITOOLS_PATH
|
||||||
|
|
||||||
@pytest.fixture(scope='session')
|
@pytest.fixture(scope='function')
|
||||||
def efi_capsule_data(request, u_boot_config):
|
def efi_capsule_data(request, ubman):
|
||||||
"""Set up a file system and return path to image.
|
"""Set up a file system and return path to image.
|
||||||
|
|
||||||
The function sets up a file system to be used in UEFI capsule and
|
The function sets up a file system to be used in UEFI capsule and
|
||||||
@@ -19,14 +20,14 @@ def efi_capsule_data(request, u_boot_config):
|
|||||||
for testing.
|
for testing.
|
||||||
|
|
||||||
request -- Pytest request object.
|
request -- Pytest request object.
|
||||||
u_boot_config -- U-Boot configuration.
|
ubman -- U-Boot configuration.
|
||||||
"""
|
"""
|
||||||
mnt_point = u_boot_config.persistent_data_dir + '/test_efi_capsule'
|
try:
|
||||||
|
image_path, mnt_point = fs_helper.setup_image(ubman, 0, 0xc,
|
||||||
|
basename='test_efi_capsule')
|
||||||
data_dir = mnt_point + CAPSULE_DATA_DIR
|
data_dir = mnt_point + CAPSULE_DATA_DIR
|
||||||
install_dir = mnt_point + CAPSULE_INSTALL_DIR
|
install_dir = mnt_point + CAPSULE_INSTALL_DIR
|
||||||
image_path = u_boot_config.persistent_data_dir + '/test_efi_capsule.img'
|
|
||||||
|
|
||||||
try:
|
|
||||||
# Create a target device
|
# Create a target device
|
||||||
check_call('dd if=/dev/zero of=./spi.bin bs=1MiB count=16', shell=True)
|
check_call('dd if=/dev/zero of=./spi.bin bs=1MiB count=16', shell=True)
|
||||||
|
|
||||||
@@ -34,9 +35,9 @@ def efi_capsule_data(request, u_boot_config):
|
|||||||
check_call('mkdir -p %s' % data_dir, shell=True)
|
check_call('mkdir -p %s' % data_dir, shell=True)
|
||||||
check_call('mkdir -p %s' % install_dir, shell=True)
|
check_call('mkdir -p %s' % install_dir, shell=True)
|
||||||
|
|
||||||
capsule_auth_enabled = u_boot_config.buildconfig.get(
|
capsule_auth_enabled = ubman.config.buildconfig.get(
|
||||||
'config_efi_capsule_authenticate')
|
'config_efi_capsule_authenticate')
|
||||||
key_dir = u_boot_config.source_dir + '/board/sandbox'
|
key_dir = ubman.config.source_dir + '/board/sandbox'
|
||||||
if capsule_auth_enabled:
|
if capsule_auth_enabled:
|
||||||
# Get the keys from the board directory
|
# Get the keys from the board directory
|
||||||
check_call('cp %s/capsule_priv_key_good.key %s/SIGNER.key'
|
check_call('cp %s/capsule_priv_key_good.key %s/SIGNER.key'
|
||||||
@@ -54,12 +55,12 @@ def efi_capsule_data(request, u_boot_config):
|
|||||||
# Update dtb to add the version information
|
# Update dtb to add the version information
|
||||||
check_call('cd %s; '
|
check_call('cd %s; '
|
||||||
'cp %s/test/py/tests/test_efi_capsule/version.dtso .'
|
'cp %s/test/py/tests/test_efi_capsule/version.dtso .'
|
||||||
% (data_dir, u_boot_config.source_dir), shell=True)
|
% (data_dir, ubman.config.source_dir), shell=True)
|
||||||
|
|
||||||
if capsule_auth_enabled:
|
if capsule_auth_enabled:
|
||||||
check_call('cd %s; '
|
check_call('cd %s; '
|
||||||
'cp %s/arch/sandbox/dts/test.dtb test_sig.dtb'
|
'cp %s/arch/sandbox/dts/test.dtb test_sig.dtb'
|
||||||
% (data_dir, u_boot_config.build_dir), shell=True)
|
% (data_dir, ubman.config.build_dir), shell=True)
|
||||||
check_call('cd %s; '
|
check_call('cd %s; '
|
||||||
'dtc -@ -I dts -O dtb -o version.dtbo version.dtso; '
|
'dtc -@ -I dts -O dtb -o version.dtbo version.dtso; '
|
||||||
'fdtoverlay -i test_sig.dtb '
|
'fdtoverlay -i test_sig.dtb '
|
||||||
@@ -70,29 +71,33 @@ def efi_capsule_data(request, u_boot_config):
|
|||||||
'dtc -@ -I dts -O dtb -o version.dtbo version.dtso; '
|
'dtc -@ -I dts -O dtb -o version.dtbo version.dtso; '
|
||||||
'fdtoverlay -i %s/arch/sandbox/dts/test.dtb '
|
'fdtoverlay -i %s/arch/sandbox/dts/test.dtb '
|
||||||
'-o test_ver.dtb version.dtbo'
|
'-o test_ver.dtb version.dtbo'
|
||||||
% (data_dir, u_boot_config.build_dir), shell=True)
|
% (data_dir, ubman.config.build_dir), shell=True)
|
||||||
|
|
||||||
# two regions: one for u-boot.bin and the other for u-boot.env
|
# 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)
|
shell=True)
|
||||||
|
|
||||||
pythonpath = os.environ.get('PYTHONPATH', '')
|
pythonpath = os.environ.get('PYTHONPATH', '')
|
||||||
os.environ['PYTHONPATH'] = pythonpath + ':' + '%s/scripts/dtc/pylibfdt' % u_boot_config.build_dir
|
os.environ['PYTHONPATH'] = pythonpath + ':' + '%s/scripts/dtc/pylibfdt' % ubman.config.build_dir
|
||||||
check_call('cd %s; '
|
check_call('cd %s; '
|
||||||
'cc -E -I %s/include -x assembler-with-cpp -o capsule_gen_tmp.dts %s/test/py/tests/test_efi_capsule/capsule_gen_binman.dts; '
|
'cc -E -I %s/include -x assembler-with-cpp -o capsule_gen_tmp.dts %s/test/py/tests/test_efi_capsule/capsule_gen_binman.dts; '
|
||||||
'dtc -I dts -O dtb capsule_gen_tmp.dts -o capsule_binman.dtb;'
|
'dtc -I dts -O dtb capsule_gen_tmp.dts -o capsule_binman.dtb;'
|
||||||
% (data_dir, u_boot_config.source_dir, u_boot_config.source_dir), shell=True)
|
% (data_dir, ubman.config.source_dir, ubman.config.source_dir), shell=True)
|
||||||
check_call('cd %s; '
|
check_call('cd %s; '
|
||||||
'./tools/binman/binman --toolpath %s/tools build -u -d %s/capsule_binman.dtb -O %s -m --allow-missing -I %s -I ./board/sandbox -I ./arch/sandbox/dts'
|
'./tools/binman/binman --toolpath %s/tools build -u -d %s/capsule_binman.dtb -O %s -m --allow-missing -I %s -I ./board/sandbox -I ./arch/sandbox/dts'
|
||||||
% (u_boot_config.source_dir, u_boot_config.build_dir, data_dir, data_dir, data_dir), shell=True)
|
% (ubman.config.source_dir, ubman.config.build_dir, data_dir, data_dir, data_dir), shell=True)
|
||||||
check_call('cp %s/Test* %s' % (u_boot_config.build_dir, data_dir), shell=True)
|
check_call('cp %s/Test* %s' % (ubman.config.build_dir, data_dir), shell=True)
|
||||||
os.environ['PYTHONPATH'] = pythonpath
|
os.environ['PYTHONPATH'] = pythonpath
|
||||||
|
|
||||||
# Create a disk image with EFI system partition
|
# Create a 16MiB partition as the EFI system partition in the disk
|
||||||
check_call('virt-make-fs --partition=gpt --size=+1M --type=vfat %s %s' %
|
# image
|
||||||
(mnt_point, image_path), shell=True)
|
fsfile = fs_helper.mk_fs(ubman.config, 'vfat', 0x1000000,
|
||||||
|
'test_efi_capsule', mnt_point)
|
||||||
|
check_call(f'dd conv=notrunc if={fsfile} of={image_path} bs=1M seek=1', shell=True)
|
||||||
|
check_call('sgdisk --mbrtogpt %s' % image_path, shell=True)
|
||||||
check_call('sgdisk %s -A 1:set:0 -t 1:C12A7328-F81F-11D2-BA4B-00A0C93EC93B' %
|
check_call('sgdisk %s -A 1:set:0 -t 1:C12A7328-F81F-11D2-BA4B-00A0C93EC93B' %
|
||||||
image_path, shell=True)
|
image_path, shell=True)
|
||||||
|
call('rm -f %s' % fsfile, shell=True)
|
||||||
|
|
||||||
except CalledProcessError as exception:
|
except CalledProcessError as exception:
|
||||||
pytest.skip('Setup failed: %s' % exception.cmd)
|
pytest.skip('Setup failed: %s' % exception.cmd)
|
||||||
|
Reference in New Issue
Block a user