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 <rspangler@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/927608
Reviewed-by: Julius Werner <jwerner@chromium.org>
diff --git a/tests/vb20_rsa_padding_tests.c b/tests/vb20_rsa_padding_tests.c
index 7c1df6a..6c17c46 100644
--- a/tests/vb20_rsa_padding_tests.c
+++ b/tests/vb20_rsa_padding_tests.c
@@ -66,6 +66,9 @@
 	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 49af6fd..88dfa96 100644
--- a/tests/vb2_api_tests.c
+++ b/tests/vb2_api_tests.c
@@ -242,10 +242,11 @@
 	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 @@
 	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 01131b4..4186ed5 100644
--- a/tests/vb2_misc_tests.c
+++ b/tests/vb2_misc_tests.c
@@ -281,6 +281,16 @@
 		"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 @@
 	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 @@
 		"  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 @@
 	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 fe31a5e..f509b0a 100644
--- a/tests/vb2_nvstorage_tests.c
+++ b/tests/vb2_nvstorage_tests.c
@@ -51,11 +51,13 @@
 	{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 @@
 	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 9423635..54bca66 100644
--- a/tests/vb2_sha_tests.c
+++ b/tests/vb2_sha_tests.c
@@ -181,6 +181,9 @@
 		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 8ca49a6..225d0bb 100644
--- a/tests/vboot_common_tests.c
+++ b/tests/vboot_common_tests.c
@@ -220,8 +220,10 @@
 	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[])