blob: 565d964c46b8595ff59b98883019c6786cb7c4ea [file] [edit]
# Copyright 2026 The ChromiumOS Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
# Library of handy test functions.
TESTLIB = ${BUILD}/tests/test.a
TEST_COMMON_DIR = tests/common
TESTLIB_SRCS += $(wildcard $(TEST_COMMON_DIR)/*.c)
TESTLIB_SRCS += tests/crc32_test.c
TESTLIB_OBJS = ${TESTLIB_SRCS:%.c=${BUILD}/%.o}
# Compiled tests.
TEST_NAMES = \
tests/cbfstool_tests \
tests/cgptlib_test \
tests/chromeos_config_tests \
tests/gpt_misc_tests \
tests/sha_benchmark \
tests/subprocess_tests \
tests/verify_kernel
ifeq ($(filter-out 0,${MOCK_TPM})$(filter-out 0,${TPM2_MODE}),)
TEST_NAMES += tests/tlcl_tests
endif
TEST_FUTIL_NAMES = \
tests/futility/binary_editor \
tests/futility/test_file_types \
tests/futility/test_not_really
ifneq ($(filter-out 0,${USE_FLASHROM}),)
TEST_FUTIL_NAMES += \
tests/futility/test_misc \
tests/futility/test_updater_utils \
tests/futility/test_updater_utils_servo
endif
TEST_NAMES += ${TEST_FUTIL_NAMES}
TEST2X_NAMES = \
tests/vb2_api_tests \
tests/vb2_auxfw_sync_tests \
tests/vb2_common_tests \
tests/vb2_common2_tests \
tests/vb2_common3_tests \
tests/vb2_crypto_tests \
tests/vb2_ec_sync_tests \
tests/vb2_firmware_tests \
tests/vb2_gbb_init_tests \
tests/vb2_gbb_tests \
tests/vb2_host_key_tests \
tests/vb2_host_nvdata_flashrom_tests \
tests/vb2_inject_kernel_subkey_tests \
tests/vb2_kernel_tests \
tests/vb2_keyblock_hash_tests \
tests/vb2_load_kernel_tests \
tests/vb2_load_kernel2_tests \
tests/vb2_misc_tests \
tests/vb2_misc2_tests \
tests/vb2_nvstorage_tests \
tests/vb2_rsa_padding_tests \
tests/vb2_rsa_utility_tests \
tests/vb2_recovery_reasons_tests \
tests/vb2_secdata_firmware_tests \
tests/vb2_secdata_fwmp_tests \
tests/vb2_secdata_kernel_tests \
tests/vb2_sha_api_tests \
tests/vb2_sha_tests \
tests/vb2_verify_fw \
tests/vb20_api_kernel_tests \
tests/hmac_test
ifeq ($(filter-out 0,${USE_FLASHROM}),)
TEST2X_NAMES += tests/vb2_host_flashrom_tests
endif
ifneq ($(filter-out 0,${USE_AVB}),)
TEST2X_NAMES += \
tests/vb2_avb_tests \
tests/vb2_load_android_tests
endif
TEST21_NAMES = \
tests/vb21_host_common2_tests \
tests/vb21_host_common_tests \
tests/vb21_host_key_tests \
tests/vb21_host_misc_tests \
tests/vb21_host_sig_tests
TEST_NAMES += ${TEST2X_NAMES} ${TEST21_NAMES}
ifeq (${ARCH}, x86_64)
DUT_TEST_NAMES += tests/vb2_sha256_x86_tests
endif
HWCRYPTO_RSA_TESTS = \
tests/vb2_hwcrypto_rsa_padding_tests \
tests/vb2_hwcrypto_verify_fw
TEST_NAMES += ${DUT_TEST_NAMES}
ifeq (${ENABLE_HWCRYPTO_RSA_TESTS},1)
TEST2X_NAMES += ${HWCRYPTO_RSA_TESTS}
endif
ifeq ($(filter-out 0,${TPM2_MODE}),)
TLCL_TEST_NAMES = \
tests/tpm_lite/tpmtest_earlyextend \
tests/tpm_lite/tpmtest_earlynvram \
tests/tpm_lite/tpmtest_earlynvram2 \
tests/tpm_lite/tpmtest_enable \
tests/tpm_lite/tpmtest_fastenable \
tests/tpm_lite/tpmtest_globallock \
tests/tpm_lite/tpmtest_redefine_unowned \
tests/tpm_lite/tpmtest_spaceperm \
tests/tpm_lite/tpmtest_testsetup \
tests/tpm_lite/tpmtest_timing \
tests/tpm_lite/tpmtest_writelimit
else
TLCL_TEST_NAMES =
endif
TEST_NAMES += ${TLCL_TEST_NAMES}
TEST_BINS = $(addprefix ${BUILD}/,${TEST_NAMES})
TEST_OBJS += $(addsuffix .o,${TEST_BINS}) ${TESTLIB_OBJS}
TEST_FUTIL_BINS = $(addprefix ${BUILD}/,${TEST_FUTIL_NAMES})
TEST2X_BINS = $(addprefix ${BUILD}/,${TEST2X_NAMES})
TEST21_BINS = $(addprefix ${BUILD}/,${TEST21_NAMES})
DUT_TEST_BINS = $(addprefix ${BUILD}/,${DUT_TEST_NAMES})
# Directory containing test keys
TEST_KEYS = ${SRC_RUN}/tests/testkeys
# Fuzzing binaries
FUZZ_TEST_NAMES = \
tests/cgpt_fuzzer \
tests/vb2_keyblock_fuzzer \
tests/vb2_preamble_fuzzer
FUZZ_TEST_BINS = $(addprefix ${BUILD}/,${FUZZ_TEST_NAMES})
# Rules for tests
${TEST_BINS}: ${UTILLIB} ${TESTLIB}
${TEST_BINS}: INCLUDES += -Itests
${TEST_BINS}: LIBS = ${TESTLIB} ${UTILLIB}
${TEST_FUTIL_BINS}: ${FUTIL_OBJS} ${UTILLIB}
${TEST_FUTIL_BINS}: INCLUDES += -Ifutility
${TEST_FUTIL_BINS}: OBJS += ${FUTIL_OBJS} ${UTILLIB}
${TEST_FUTIL_BINS}: LDLIBS += ${FUTIL_LIBS}
${TEST2X_BINS}: ${FWLIB}
${TEST2X_BINS}: LIBS += ${FWLIB}
${TEST21_BINS}: LDLIBS += ${CRYPTO_LIBS}
${BUILD}/tests/%: LDLIBS += -lrt -luuid
${BUILD}/tests/%: LIBS += ${TESTLIB}
ifeq ($(filter-out 0,${TPM2_MODE}),)
TLCL_TEST_BINS = $(addprefix ${BUILD}/,${TLCL_TEST_NAMES})
${TLCL_TEST_BINS}: OBJS += ${BUILD}/tests/tpm_lite/tlcl_tests.o
${TLCL_TEST_BINS}: ${BUILD}/tests/tpm_lite/tlcl_tests.o
TEST_OBJS += ${BUILD}/tests/tpm_lite/tlcl_tests.o
endif
${TESTLIB}: ${TESTLIB_OBJS}
@${PRINTF} " RM $(subst ${BUILD}/,,$@)\n"
${Q}rm -f $@
@${PRINTF} " AR $(subst ${BUILD}/,,$@)\n"
${Q}ar qcT $@ $^
${BUILD}/tests/vb2_host_key_tests: LDLIBS += ${CRYPTO_LIBS}
${BUILD}/tests/vb2_common2_tests: LDLIBS += ${CRYPTO_LIBS}
${BUILD}/tests/vb2_common3_tests: LDLIBS += ${CRYPTO_LIBS}
${BUILD}/tests/verify_kernel: LDLIBS += ${CRYPTO_LIBS}
${BUILD}/tests/hmac_test: LDLIBS += ${CRYPTO_LIBS}
# Special build for sha256_x86 test
${BUILD}/tests/vb2_sha256_x86_tests: \
${BUILD}/firmware/2lib/2sha256_x86.o ${BUILD}/firmware/2lib/2hwcrypto.o
${BUILD}/tests/vb2_sha256_x86_tests: \
LIBS += ${BUILD}/firmware/2lib/2sha256_x86.o ${BUILD}/firmware/2lib/2hwcrypto.o
# Test runner rules
.PHONY: tests runtests rununittests runtestscripts runfutiltests runcgpttests runmisctests run2tests runfutiltestscripts
tests: ${TEST_BINS}
runtests: rununittests runtestscripts runfutiltests
${Q}echo -e "\nruntests: \E[32;1mALL TESTS PASSED SUCCESSFULLY!\E[0;m\n"
rununittests: runcgpttests runmisctests run2tests
runcgpttests: install_for_test
${RUNTEST} ${BUILD_RUN}/tests/cgptlib_test
runtestscripts: install_for_test ${HOSTLIB_DEF} ${HOSTLIB_UNDEF}
${RUNTEST} ${SRC_RUN}/scripts/image_signing/sign_android_unittests.sh
${RUNTEST} ${SRC_RUN}/scripts/image_signing/sign_uefi_unittest.py
${RUNTEST} $(SRC_RUN)/scripts/image_signing/lib/generate_android_cloud_config_unittest.py
${RUNTEST} ${SRC_RUN}/tests/load_kernel_tests.sh
${RUNTEST} ${SRC_RUN}/tests/run_cgpt_tests.sh ${BUILD_RUN}/cgpt/cgpt
${RUNTEST} ${SRC_RUN}/tests/run_preamble_tests.sh
${RUNTEST} ${SRC_RUN}/tests/run_vbutil_kernel_arg_tests.sh
${RUNTEST} ${SRC_RUN}/tests/run_vbutil_tests.sh
${RUNTEST} ${SRC_RUN}/tests/swap_ec_rw_tests.sh
${RUNTEST} ${SRC_RUN}/tests/vb2_rsa_tests.sh
${RUNTEST} ${SRC_RUN}/tests/vb2_firmware_tests.sh
${RUNTEST} ${SRC_RUN}/tests/vhost_reference.sh ${HOSTLIB_DEF} ${HOSTLIB_UNDEF}
runmisctests: install_for_test
${RUNTEST} ${BUILD_RUN}/tests/cbfstool_tests
${RUNTEST} ${BUILD_RUN}/tests/gpt_misc_tests
${RUNTEST} ${BUILD_RUN}/tests/subprocess_tests
ifeq ($(filter-out 0,${MOCK_TPM})$(filter-out 0,${TPM2_MODE}),)
${RUNTEST} ${BUILD_RUN}/tests/tlcl_tests
endif
run2tests: install_for_test
${RUNTEST} ${BUILD_RUN}/tests/vb2_api_tests
${RUNTEST} ${BUILD_RUN}/tests/vb2_auxfw_sync_tests
ifneq ($(filter-out 0,${USE_AVB}),)
${RUNTEST} ${BUILD_RUN}/tests/vb2_avb_tests ${TEST_KEYS}
${RUNTEST} ${BUILD_RUN}/tests/vb2_load_android_tests
endif
${RUNTEST} ${BUILD_RUN}/tests/vb2_common_tests
${RUNTEST} ${BUILD_RUN}/tests/vb2_common2_tests ${TEST_KEYS}
${RUNTEST} ${BUILD_RUN}/tests/vb2_common3_tests ${TEST_KEYS}
${RUNTEST} ${BUILD_RUN}/tests/vb2_crypto_tests
${RUNTEST} ${BUILD_RUN}/tests/vb2_ec_sync_tests
${RUNTEST} ${BUILD_RUN}/tests/vb2_firmware_tests
${RUNTEST} ${BUILD_RUN}/tests/vb2_gbb_init_tests
${RUNTEST} ${BUILD_RUN}/tests/vb2_gbb_tests
ifeq ($(filter-out 0,${USE_FLASHROM}),)
${RUNTEST} ${BUILD_RUN}/tests/vb2_host_flashrom_tests
endif
${RUNTEST} ${BUILD_RUN}/tests/vb2_host_key_tests
${RUNTEST} ${BUILD_RUN}/tests/vb2_host_nvdata_flashrom_tests
${RUNTEST} ${BUILD_RUN}/tests/vb2_inject_kernel_subkey_tests
${RUNTEST} ${BUILD_RUN}/tests/vb2_load_kernel_tests
${RUNTEST} ${BUILD_RUN}/tests/vb2_load_kernel2_tests
${RUNTEST} ${BUILD_RUN}/tests/vb2_kernel_tests
${RUNTEST} ${BUILD_RUN}/tests/vb2_keyblock_hash_tests
${RUNTEST} ${BUILD_RUN}/tests/vb2_misc_tests
${RUNTEST} ${BUILD_RUN}/tests/vb2_misc2_tests
${RUNTEST} ${BUILD_RUN}/tests/vb2_nvstorage_tests
${RUNTEST} ${BUILD_RUN}/tests/vb2_recovery_reasons_tests
${RUNTEST} ${BUILD_RUN}/tests/vb2_rsa_utility_tests
${RUNTEST} ${BUILD_RUN}/tests/vb2_secdata_firmware_tests
${RUNTEST} ${BUILD_RUN}/tests/vb2_secdata_fwmp_tests
${RUNTEST} ${BUILD_RUN}/tests/vb2_secdata_kernel_tests
${RUNTEST} ${BUILD_RUN}/tests/vb2_sha_api_tests
${RUNTEST} ${BUILD_RUN}/tests/vb2_sha_tests
${RUNTEST} ${BUILD_RUN}/tests/vb20_api_kernel_tests
${RUNTEST} ${BUILD_RUN}/tests/vb21_host_common_tests
${RUNTEST} ${BUILD_RUN}/tests/vb21_host_common2_tests ${TEST_KEYS}
${RUNTEST} ${BUILD_RUN}/tests/vb21_host_key_tests ${TEST_KEYS} ${BUILD_RUN}
${RUNTEST} ${BUILD_RUN}/tests/vb21_host_misc_tests ${BUILD_RUN}
${RUNTEST} ${BUILD_RUN}/tests/vb21_host_sig_tests ${TEST_KEYS}
runfutiltestscripts: install_for_test
${RUNTEST} ${SRC_RUN}/tests/futility/run_test_scripts.sh
runfutiltests: install_for_test runfutiltestscripts
${RUNTEST} ${BUILD_RUN}/tests/futility/test_file_types
${RUNTEST} ${BUILD_RUN}/tests/futility/test_not_really
ifneq ($(filter-out 0,${USE_FLASHROM}),)
${RUNTEST} ${BUILD_RUN}/tests/futility/test_misc
${RUNTEST} ${BUILD_RUN}/tests/futility/test_updater_utils
${RUNTEST} ${BUILD_RUN}/tests/futility/test_updater_utils_servo
endif
rm -rf ${SRC_RUN}/tests/futility/data_copy
.PHONY: install_dut_test
install_dut_test: ${DUT_TEST_BINS}
ifneq ($(strip ${DUT_TEST_BINS}),)
@${PRINTF} " INSTALL DUT TESTS\n"
${Q}mkdir -p ${DUT_TEST_DIR}
${Q}${INSTALL} -t ${DUT_TEST_DIR} $^
endif
.PHONY: fuzzers
fuzzers: ${FUZZ_TEST_BINS}
${FUZZ_TEST_BINS}: ${FWLIB}
${FUZZ_TEST_BINS}: LIBS = ${FWLIB}
${FUZZ_TEST_BINS}: LDFLAGS += -fsanitize=fuzzer