From 225df798cf259a9cfe39e7080c575bd335ee8755 Mon Sep 17 00:00:00 2001 From: Randall Spangler Date: Tue, 20 Feb 2018 15:20:16 -0800 Subject: tests: Cover a few assorted new cases Assorted addtional tests to improve coverage of the firmware libraries. BUG=none BRANCH=none TEST=make runtests Change-Id: Iaf707bd54ca5dc10745eb19dfa9e9afbf0d74112 Signed-off-by: Randall Spangler Reviewed-on: https://chromium-review.googlesource.com/927608 Reviewed-by: Julius Werner --- tests/vb20_rsa_padding_tests.c | 3 +++ tests/vb2_api_tests.c | 17 ++++++++++++++++- tests/vb2_misc_tests.c | 26 ++++++++++++++++++++++++++ tests/vb2_nvstorage_tests.c | 12 +++++++++--- tests/vb2_sha_tests.c | 3 +++ tests/vboot_common_tests.c | 6 ++++-- 6 files changed, 61 insertions(+), 6 deletions(-) diff --git a/tests/vb20_rsa_padding_tests.c b/tests/vb20_rsa_padding_tests.c index 7c1df6a5..6c17c46b 100644 --- a/tests/vb20_rsa_padding_tests.c +++ b/tests/vb20_rsa_padding_tests.c @@ -66,6 +66,9 @@ static void test_verify_digest(struct vb2_public_key *key) { TEST_SUCC(vb2_rsa_verify_digest(key, sig, test_message_sha1_hash, &wb), "vb2_rsa_verify_digest() good"); + TEST_EQ(vb2_rsa_verify_digest(key, NULL, test_message_sha1_hash, &wb), + VB2_ERROR_RSA_VERIFY_PARAM, "vb2_rsa_verify_digest() bad arg"); + memcpy(sig, signatures[0], sizeof(sig)); vb2_workbuf_init(&wb, workbuf, sizeof(sig) * 3 - 1); TEST_EQ(vb2_rsa_verify_digest(key, sig, test_message_sha1_hash, &wb), diff --git a/tests/vb2_api_tests.c b/tests/vb2_api_tests.c index 49af6fd1..88dfa967 100644 --- a/tests/vb2_api_tests.c +++ b/tests/vb2_api_tests.c @@ -242,10 +242,11 @@ static void phase2_tests(void) reset_common_data(FOR_MISC); TEST_SUCC(vb2api_fw_phase2(&cc), "phase2 good"); TEST_EQ(cc.flags & VB2_CONTEXT_CLEAR_RAM, 0, " clear ram flag"); + TEST_EQ(cc.flags & VB2_CONTEXT_FW_SLOT_B, 0, " slot b flag"); reset_common_data(FOR_MISC); cc.flags |= VB2_CONTEXT_DEVELOPER_MODE; - TEST_SUCC(vb2api_fw_phase2(&cc), "phase1 dev"); + TEST_SUCC(vb2api_fw_phase2(&cc), "phase2 dev"); TEST_NEQ(cc.flags & VB2_CONTEXT_CLEAR_RAM, 0, " clear ram flag"); reset_common_data(FOR_MISC); @@ -259,6 +260,20 @@ static void phase2_tests(void) TEST_EQ(vb2api_fw_phase2(&cc), VB2_ERROR_MOCK, "phase2 slot"); TEST_EQ(vb2_nv_get(&cc, VB2_NV_RECOVERY_REQUEST), VB2_RECOVERY_FW_SLOT, " recovery reason"); + + /* S3 resume exits before clearing RAM */ + reset_common_data(FOR_MISC); + cc.flags |= VB2_CONTEXT_S3_RESUME; + cc.flags |= VB2_CONTEXT_DEVELOPER_MODE; + TEST_SUCC(vb2api_fw_phase2(&cc), "phase2 s3 dev"); + TEST_EQ(cc.flags & VB2_CONTEXT_CLEAR_RAM, 0, " clear ram flag"); + TEST_EQ(cc.flags & VB2_CONTEXT_FW_SLOT_B, 0, " slot b flag"); + + reset_common_data(FOR_MISC); + cc.flags |= VB2_CONTEXT_S3_RESUME; + vb2_nv_set(&cc, VB2_NV_FW_TRIED, 1); + TEST_SUCC(vb2api_fw_phase2(&cc), "phase2 s3"); + TEST_NEQ(cc.flags & VB2_CONTEXT_FW_SLOT_B, 0, " slot b flag"); } static void get_pcr_digest_tests(void) diff --git a/tests/vb2_misc_tests.c b/tests/vb2_misc_tests.c index 01131b49..4186ed59 100644 --- a/tests/vb2_misc_tests.c +++ b/tests/vb2_misc_tests.c @@ -281,6 +281,16 @@ static void recovery_tests(void) "Recovery reason forced"); TEST_NEQ(sd->flags & VB2_SD_FLAG_MANUAL_RECOVERY, 0, "SD flag set"); + + /* Override at broken screen */ + reset_common_data(); + vb2_nv_set(&cc, VB2_NV_RECOVERY_SUBCODE, VB2_RECOVERY_US_TEST); + cc.flags |= VB2_CONTEXT_FORCE_RECOVERY_MODE; + vb2_check_recovery(&cc); + TEST_EQ(sd->recovery_reason, VB2_RECOVERY_US_TEST, + "Recovery reason forced from broken"); + TEST_NEQ(sd->flags & VB2_SD_FLAG_MANUAL_RECOVERY, + 0, "SD flag set"); } static void dev_switch_tests(void) @@ -293,6 +303,7 @@ static void dev_switch_tests(void) TEST_EQ(sd->flags & VB2_SD_DEV_MODE_ENABLED, 0, " sd not in dev"); TEST_EQ(cc.flags & VB2_CONTEXT_DEVELOPER_MODE, 0, " ctx not in dev"); TEST_EQ(mock_tpm_clear_called, 0, " no tpm clear"); + TEST_EQ(vb2_nv_get(&cc, VB2_NV_REQ_WIPEOUT), 0, " no nv wipeout"); /* Dev mode */ reset_common_data(); @@ -376,6 +387,15 @@ static void dev_switch_tests(void) " doesn't set dev on in secdata but does set last boot dev"); TEST_EQ(mock_tpm_clear_called, 1, " tpm clear"); + /* Request disable by ctx flag */ + reset_common_data(); + vb2_secdata_set(&cc, VB2_SECDATA_FLAGS, + (VB2_SECDATA_FLAG_DEV_MODE | + VB2_SECDATA_FLAG_LAST_BOOT_DEVELOPER)); + cc.flags |= VB2_DISABLE_DEVELOPER_MODE; + TEST_SUCC(vb2_check_dev_switch(&cc), "disable dev on ctx request"); + TEST_EQ(sd->flags & VB2_SD_DEV_MODE_ENABLED, 0, " sd not in dev"); + /* Simulate clear owner failure */ reset_common_data(); vb2_secdata_set(&cc, VB2_SECDATA_FLAGS, @@ -442,6 +462,12 @@ static void dev_switch_tests(void) TEST_NEQ(sd->flags & VB2_SD_DEV_MODE_ENABLED, 0, " sd in dev"); TEST_NEQ(cc.flags & VB2_CONTEXT_DEVELOPER_MODE, 0, " ctx in dev"); TEST_EQ(mock_tpm_clear_called, 1, " tpm clear"); + + /* Force wipeout by ctx flag */ + reset_common_data(); + cc.flags |= VB2_CONTEXT_FORCE_WIPEOUT_MODE; + TEST_SUCC(vb2_check_dev_switch(&cc), "wipeout on ctx flag"); + TEST_EQ(vb2_nv_get(&cc, VB2_NV_REQ_WIPEOUT), 1, " nv wipeout"); } static void tpm_clear_tests(void) diff --git a/tests/vb2_nvstorage_tests.c b/tests/vb2_nvstorage_tests.c index fe31a5ee..f509b0ab 100644 --- a/tests/vb2_nvstorage_tests.c +++ b/tests/vb2_nvstorage_tests.c @@ -51,11 +51,13 @@ static struct nv_field nvfields[] = { {VB2_NV_CLEAR_TPM_OWNER_REQUEST, 0, 1, 0, "clear tpm owner request"}, {VB2_NV_CLEAR_TPM_OWNER_DONE, 0, 1, 0, "clear tpm owner done"}, {VB2_NV_TPM_REQUESTED_REBOOT, 0, 1, 0, "tpm requested reboot"}, + {VB2_NV_REQ_WIPEOUT, 0, 1, 0, "request wipeout"}, {VB2_NV_OPROM_NEEDED, 0, 1, 0, "oprom needed"}, {VB2_NV_BACKUP_NVRAM_REQUEST, 0, 1, 0, "backup nvram request"}, {VB2_NV_FASTBOOT_UNLOCK_IN_FW, 0, 1, 0, "fastboot unlock in fw"}, {VB2_NV_BOOT_ON_AC_DETECT, 0, 1, 0, "boot on ac detect"}, {VB2_NV_TRY_RO_SYNC, 0, 1, 0, "try read only software sync"}, + {VB2_NV_BATTERY_CUTOFF_REQUEST, 0, 1, 0, "battery cutoff request"}, {VB2_NV_KERNEL_MAX_ROLLFORWARD, 0, 0x12345678, 0xFEDCBA98, "kernel max rollforward"}, {0, 0, 0, 0, NULL} @@ -197,12 +199,16 @@ static void nv_storage_test(void) TEST_EQ(vb2_nv_get(&c, VB2_NV_LOCALIZATION_INDEX), 0, "Localization index out of range"); - vb2_nv_set(&c, VB2_NV_FW_RESULT, VB2_FW_RESULT_UNKNOWN + 1); - vb2_nv_set(&c, VB2_NV_FW_RESULT, VB2_FW_RESULT_UNKNOWN + 100); + vb2_nv_set(&c, VB2_NV_FW_RESULT, 100); TEST_EQ(vb2_nv_get(&c, VB2_NV_FW_RESULT), VB2_FW_RESULT_UNKNOWN, "Firmware result out of range"); - vb2_nv_set(&c, VB2_NV_DEV_DEFAULT_BOOT, VB2_DEV_DEFAULT_BOOT_DISK + 100); + vb2_nv_set(&c, VB2_NV_FW_PREV_RESULT, 100); + TEST_EQ(vb2_nv_get(&c, VB2_NV_FW_PREV_RESULT), + VB2_FW_RESULT_UNKNOWN, "Fw prev result out of range"); + + vb2_nv_set(&c, VB2_NV_DEV_DEFAULT_BOOT, + VB2_DEV_DEFAULT_BOOT_DISK + 100); TEST_EQ(vb2_nv_get(&c, VB2_NV_DEV_DEFAULT_BOOT), VB2_DEV_DEFAULT_BOOT_DISK, "default to booting from disk"); } diff --git a/tests/vb2_sha_tests.c b/tests/vb2_sha_tests.c index 94236355..54bca66f 100644 --- a/tests/vb2_sha_tests.c +++ b/tests/vb2_sha_tests.c @@ -181,6 +181,9 @@ static void hash_algorithm_name_tests(void) TEST_STR_NEQ(vb2_get_hash_algorithm_name(alg), VB2_INVALID_ALG_NAME, test_name); } + + TEST_STR_EQ(vb2_get_hash_algorithm_name(VB2_HASH_INVALID), + VB2_INVALID_ALG_NAME, "hash alg name invalid"); } int main(int argc, char *argv[]) diff --git a/tests/vboot_common_tests.c b/tests/vboot_common_tests.c index 8ca49a68..225d0bbb 100644 --- a/tests/vboot_common_tests.c +++ b/tests/vboot_common_tests.c @@ -220,8 +220,10 @@ static void VbSharedDataTest(void) TEST_EQ(d->kernel_version_lowest, 0, "VbSharedDataInit kernel_version_lowest"); - TEST_NEQ(VBOOT_SUCCESS, VbSharedDataSetKernelKey(NULL, NULL), - "VbSharedDataSetKernelKey null"); + TEST_EQ(VBOOT_SHARED_DATA_INVALID, VbSharedDataSetKernelKey(NULL, NULL), + "VbSharedDataSetKernelKey sd null"); + TEST_EQ(VBOOT_PUBLIC_KEY_INVALID, VbSharedDataSetKernelKey(d, NULL), + "VbSharedDataSetKernelKey pubkey null"); } int main(int argc, char* argv[]) -- cgit v1.2.1