summaryrefslogtreecommitdiff
path: root/tests/vboot_api_kernel4_tests.c
diff options
context:
space:
mode:
Diffstat (limited to 'tests/vboot_api_kernel4_tests.c')
-rw-r--r--tests/vboot_api_kernel4_tests.c58
1 files changed, 58 insertions, 0 deletions
diff --git a/tests/vboot_api_kernel4_tests.c b/tests/vboot_api_kernel4_tests.c
index 82d6d5db..2d7e04e1 100644
--- a/tests/vboot_api_kernel4_tests.c
+++ b/tests/vboot_api_kernel4_tests.c
@@ -40,6 +40,10 @@ static struct RollbackSpaceFwmp rfr_fwmp;
static int rkr_retval, rkw_retval, rkl_retval, rfr_retval;
static VbError_t vbboot_retval;
+static uint32_t mock_switches[8];
+static uint32_t mock_switches_count;
+static int mock_switches_are_stuck;
+
/* Reset mock data (for use before each test) */
static void ResetMocks(void)
{
@@ -75,6 +79,10 @@ static void ResetMocks(void)
rkr_version = new_version = 0x10002;
rkr_retval = rkw_retval = rkl_retval = VBERROR_SUCCESS;
vbboot_retval = VBERROR_SUCCESS;
+
+ memset(mock_switches, 0, sizeof(mock_switches));
+ mock_switches_count = 0;
+ mock_switches_are_stuck = 0;
}
/* Mock functions */
@@ -144,6 +152,14 @@ VbError_t VbBootRecovery(struct vb2_context *ctx)
return vbboot_retval;
}
+VbError_t VbBootDiagnostic(struct vb2_context *ctx)
+{
+ if (vbboot_retval == -4)
+ return VBERROR_SIMULATED;
+
+ return vbboot_retval;
+}
+
static void test_slk(VbError_t retval, int recovery_reason, const char *desc)
{
TEST_EQ(VbSelectAndLoadKernel(&cparams, &kparams), retval, desc);
@@ -151,6 +167,21 @@ static void test_slk(VbError_t retval, int recovery_reason, const char *desc)
recovery_reason, " recovery reason");
}
+uint32_t VbExGetSwitches(uint32_t request_mask)
+{
+ if (mock_switches_are_stuck)
+ return mock_switches[0] & request_mask;
+ if (mock_switches_count < ARRAY_SIZE(mock_switches))
+ return mock_switches[mock_switches_count++] & request_mask;
+ else
+ return 0;
+}
+
+int vb2ex_tpm_set_mode(enum vb2_tpm_mode mode_val)
+{
+ return VB2_SUCCESS;
+}
+
/* Tests */
static void VbSlkTest(void)
@@ -226,6 +257,33 @@ static void VbSlkTest(void)
vbboot_retval = -1;
test_slk(VBERROR_SIMULATED, 0, "Normal boot bad");
+ /* Check that NV_DIAG_REQUEST triggers diagnostic UI */
+ if (DIAGNOSTIC_UI) {
+ ResetMocks();
+ mock_switches[1] = VB_SWITCH_FLAG_PHYS_PRESENCE_PRESSED;
+ vb2_nv_set(&ctx, VB2_NV_DIAG_REQUEST, 1);
+ vb2_nv_set(&ctx, VB2_NV_OPROM_NEEDED, 1);
+ vbboot_retval = -4;
+ test_slk(VBERROR_SIMULATED, 0, "Normal boot with diag");
+ TEST_EQ(vb2_nv_get(&ctx, VB2_NV_DIAG_REQUEST), 0,
+ " diag not requested");
+ TEST_EQ(vb2_nv_get(&ctx, VB2_NV_OPROM_NEEDED), 1,
+ " oprom still needed");
+
+ ResetMocks();
+ mock_switches[1] = VB_SWITCH_FLAG_PHYS_PRESENCE_PRESSED;
+ vb2_nv_set(&ctx, VB2_NV_DIAG_REQUEST, 1);
+ vb2_nv_set(&ctx, VB2_NV_OPROM_NEEDED, 1);
+ shared->flags |= VBSD_OPROM_MATTERS;
+ vbboot_retval = -4;
+ test_slk(VBERROR_SIMULATED, 0,
+ "Normal boot with diag and oprom");
+ TEST_EQ(vb2_nv_get(&ctx, VB2_NV_DIAG_REQUEST), 0,
+ " diag not requested");
+ TEST_EQ(vb2_nv_get(&ctx, VB2_NV_OPROM_NEEDED), 0,
+ " oprom not needed");
+ }
+
/* Boot dev */
ResetMocks();
shared->flags |= VBSD_BOOT_DEV_SWITCH_ON;