summaryrefslogtreecommitdiff
path: root/tests/vboot_api_kernel2_tests.c
diff options
context:
space:
mode:
Diffstat (limited to 'tests/vboot_api_kernel2_tests.c')
-rw-r--r--tests/vboot_api_kernel2_tests.c31
1 files changed, 31 insertions, 0 deletions
diff --git a/tests/vboot_api_kernel2_tests.c b/tests/vboot_api_kernel2_tests.c
index 11c4c2f6..651e8fef 100644
--- a/tests/vboot_api_kernel2_tests.c
+++ b/tests/vboot_api_kernel2_tests.c
@@ -33,6 +33,7 @@ static struct vb2_context ctx;
static struct vb2_shared_data *sd;
static int shutdown_request_calls_left;
+static int shutdown_request_power_held;
static int audio_looping_calls_left;
static uint32_t vbtlk_retval;
static int vbexlegacy_called;
@@ -73,6 +74,7 @@ static void ResetMocks(void)
sd->vbsd = shared;
shutdown_request_calls_left = -1;
+ shutdown_request_power_held = -1;
audio_looping_calls_left = 30;
vbtlk_retval = 1000;
vbexlegacy_called = 0;
@@ -104,6 +106,15 @@ uint32_t VbExIsShutdownRequested(void)
else if (shutdown_request_calls_left > 0)
shutdown_request_calls_left--;
+ if (shutdown_request_power_held >= 0) {
+ /* Hold power button for 10 calls, then release for 10. */
+ if (shutdown_request_calls_left % 10 == 0)
+ shutdown_request_power_held
+ = !shutdown_request_power_held;
+ if (shutdown_request_power_held)
+ return VB_SHUTDOWN_REQUEST_POWER_BUTTON;
+ }
+
return 0;
}
@@ -579,6 +590,26 @@ static void VbBootRecTest(void)
VBERROR_SHUTDOWN_REQUESTED,
"Shutdown requested by keyboard");
+ /* Ignore power button held on boot */
+ ResetMocks();
+ shutdown_request_calls_left = 100;
+ shutdown_request_power_held = 1;
+ shared->flags = VBSD_BOOT_REC_SWITCH_ON;
+ trust_ec = 1;
+ vbtlk_retval = VBERROR_NO_DISK_FOUND - VB_DISK_FLAG_REMOVABLE;
+ TEST_EQ(VbBootRecovery(&ctx),
+ VBERROR_SHUTDOWN_REQUESTED,
+ "Ignore power button held on boot");
+ TEST_EQ(screens_displayed[0], VB_SCREEN_RECOVERY_INSERT,
+ " insert screen");
+ /*
+ * shutdown_request_power_held holds power button for 10 calls, then
+ * releases for 10, then holds again, so expect shutdown after 20:
+ * 100 - 20 = 80.
+ */
+ TEST_EQ(shutdown_request_calls_left, 80,
+ " ignore held button");
+
/* Broken screen */
ResetMocks();
shutdown_request_calls_left = 100;