aboutsummaryrefslogtreecommitdiff
path: root/test/py/tests/test_efi_capsule/conftest.py
diff options
context:
space:
mode:
authorAKASHI Takahiro <takahiro.akashi@linaro.org>2020-11-30 18:12:16 +0900
committerHeinrich Schuchardt <xypron.glpk@gmx.de>2020-12-03 21:22:50 +0100
commit450596f2ac3fd1425b33d02dc38b37ee3f3d2492 (patch)
treee88327f5077d8f970fb15ec40ddff2f62cfb7563 /test/py/tests/test_efi_capsule/conftest.py
parentfab430be2f48a61eea470468ec57b0454707e2b4 (diff)
test/py: efi_capsule: test for FIT image capsule
The test can run on sandbox build and it attempts to execute a firmware update via a capsule-on-disk, using a FIT image capsule, CONFIG_EFI_CAPSULE_FIT. To run this test successfully, you need configure U-Boot specifically; See test_capsule_firmware.py for requirements, and hence it won't run on Travis CI, at least, for now. Signed-off-by: AKASHI Takahiro <takahiro.akashi@linaro.org>
Diffstat (limited to 'test/py/tests/test_efi_capsule/conftest.py')
-rw-r--r--test/py/tests/test_efi_capsule/conftest.py71
1 files changed, 71 insertions, 0 deletions
diff --git a/test/py/tests/test_efi_capsule/conftest.py b/test/py/tests/test_efi_capsule/conftest.py
new file mode 100644
index 0000000000..d10494a7ee
--- /dev/null
+++ b/test/py/tests/test_efi_capsule/conftest.py
@@ -0,0 +1,71 @@
+# SPDX-License-Identifier: GPL-2.0+
+# Copyright (c) 2020, Linaro Limited
+# Author: AKASHI Takahiro <takahiro.akashi@linaro.org>
+
+import os
+import os.path
+import re
+from subprocess import call, check_call, check_output, CalledProcessError
+import pytest
+from capsule_defs import *
+
+#
+# Fixture for UEFI secure boot test
+#
+
+
+@pytest.fixture(scope='session')
+def efi_capsule_data(request, u_boot_config):
+ """Set up a file system to be used in UEFI capsule test.
+
+ Args:
+ request: Pytest request object.
+ u_boot_config: U-boot configuration.
+
+ Return:
+ A path to disk image to be used for testing
+ """
+ global CAPSULE_DATA_DIR, CAPSULE_INSTALL_DIR
+
+ mnt_point = u_boot_config.persistent_data_dir + '/test_efi_capsule'
+ data_dir = mnt_point + CAPSULE_DATA_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
+ check_call('dd if=/dev/zero of=./spi.bin bs=1MiB count=16', shell=True)
+
+ check_call('rm -rf %s' % mnt_point, shell=True)
+ check_call('mkdir -p %s' % data_dir, shell=True)
+ check_call('mkdir -p %s' % install_dir, shell=True)
+
+ # 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,
+ 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),
+ shell=True)
+ 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 --fit uboot_bin_env.itb --index 1 Test01' %
+ (data_dir, u_boot_config.build_dir),
+ shell=True)
+
+ # Create a disk image with EFI system partition
+ check_call('virt-make-fs --partition=gpt --size=+1M --type=vfat %s %s' %
+ (mnt_point, image_path), shell=True)
+ check_call('sgdisk %s -A 1:set:0 -t 1:C12A7328-F81F-11D2-BA4B-00A0C93EC93B' %
+ image_path, shell=True)
+
+ except CalledProcessError as exception:
+ pytest.skip('Setup failed: %s' % exception.cmd)
+ return
+ else:
+ yield image_path
+ finally:
+ call('rm -rf %s' % mnt_point, shell=True)
+ call('rm -f %s' % image_path, shell=True)
+ call('rm -f ./spi.bin', shell=True)