diff options
Diffstat (limited to 'tests/vb2_ui_tests.c')
-rw-r--r-- | tests/vb2_ui_tests.c | 122 |
1 files changed, 78 insertions, 44 deletions
diff --git a/tests/vb2_ui_tests.c b/tests/vb2_ui_tests.c index 2f652880..1bd9e8b9 100644 --- a/tests/vb2_ui_tests.c +++ b/tests/vb2_ui_tests.c @@ -45,6 +45,11 @@ static int mock_key_trusted[64]; static int mock_key_count; static int mock_key_total; +static uint64_t mock_get_timer_last; +static uint64_t mock_time; +static const uint64_t mock_time_start = 31ULL * VB_USEC_PER_SEC; +static int mock_vbexbeep_called; + static enum vb2_dev_default_boot mock_default_boot; static int mock_dev_boot_allowed; static int mock_dev_boot_legacy_allowed; @@ -135,8 +140,15 @@ static void displayed_no_extra(void) " no extra screens"); } +/* Type of test to reset for */ +enum reset_type { + FOR_DEVELOPER, + FOR_BROKEN_RECOVERY, + FOR_MANUAL_RECOVERY, +}; + /* Reset mock data (for use before each test) */ -static void reset_common_data(void) +static void reset_common_data(enum reset_type t) { TEST_SUCC(vb2api_init(workbuf, sizeof(workbuf), &ctx), "vb2api_init failed"); @@ -145,6 +157,9 @@ static void reset_common_data(void) vb2_nv_init(ctx); + if (t == FOR_DEVELOPER) + ctx->flags |= VB2_CONTEXT_DEVELOPER_MODE; + sd = vb2_get_sd(ctx); /* For try_recovery_action */ @@ -171,7 +186,10 @@ static void reset_common_data(void) mock_displayed_i = 0; /* For shutdown_required */ - mock_calls_until_shutdown = 10; + if (t == FOR_DEVELOPER) + mock_calls_until_shutdown = 2000; /* Larger than 30s */ + else + mock_calls_until_shutdown = 10; /* For VbExKeyboardRead */ memset(mock_key, 0, sizeof(mock_key)); @@ -181,6 +199,11 @@ static void reset_common_data(void) /* Avoid iteration #0 which has a screen change by global action */ add_mock_keypress(0); + /* For vboot_audio.h */ + mock_get_timer_last = 0; + mock_time = mock_time_start; + mock_vbexbeep_called = 0; + /* For dev_boot* in 2misc.h */ mock_default_boot = VB2_DEV_DEFAULT_BOOT_DISK; mock_dev_boot_allowed = 1; @@ -261,6 +284,23 @@ uint32_t VbExKeyboardReadWithFlags(uint32_t *key_flags) return 0; } +uint64_t VbExGetTimer(void) +{ + mock_get_timer_last = mock_time; + return mock_time; +} + +void VbExSleepMs(uint32_t msec) +{ + mock_time += msec * VB_USEC_PER_MSEC; +} + +vb2_error_t VbExBeep(uint32_t msec, uint32_t frequency) +{ + mock_vbexbeep_called++; + return VB2_SUCCESS; +} + enum vb2_dev_default_boot vb2_get_dev_boot_target(struct vb2_context *c) { return mock_default_boot; @@ -311,51 +351,45 @@ static void developer_tests(void) { VB2_DEBUG("Testing developer mode...\n"); - /* Proceed */ - reset_common_data(); + /* Proceed to internal disk after timeout */ + reset_common_data(FOR_DEVELOPER); add_mock_vbtlk(VB2_SUCCESS, VB_DISK_FLAG_FIXED); - TEST_EQ(vb2_developer_menu(ctx), VB2_SUCCESS, "proceed"); - displayed_no_extra(); - TEST_EQ(vb2_nv_get(ctx, VB2_NV_RECOVERY_REQUEST), 0, - " recovery reason"); - TEST_EQ(mock_vbtlk_count, mock_vbtlk_total, " used up mock_vbtlk"); - - /* Proceed to legacy */ - reset_common_data(); - mock_default_boot = VB2_DEV_DEFAULT_BOOT_LEGACY; - mock_dev_boot_legacy_allowed = 1; - TEST_EQ(vb2_developer_menu(ctx), VB2_SUCCESS, "proceed to legacy"); - TEST_EQ(mock_vbexlegacy_called, 1, " try legacy"); - TEST_EQ(mock_altfw_num_last, 0, " check altfw_num"); - displayed_no_extra(); - TEST_EQ(mock_vbtlk_count, mock_vbtlk_total, " used up mock_vbtlk"); - - /* Proceed to legacy only if enabled */ - reset_common_data(); - add_mock_vbtlk(VB2_SUCCESS, VB_DISK_FLAG_FIXED); - mock_default_boot = VB2_DEV_DEFAULT_BOOT_LEGACY; TEST_EQ(vb2_developer_menu(ctx), VB2_SUCCESS, - "default legacy not enabled"); - TEST_EQ(mock_vbexlegacy_called, 0, " not legacy"); + "proceed to internal disk after timeout"); + displayed_eq("dev mode", VB2_SCREEN_DEVELOPER_MODE, MOCK_IGNORE, + MOCK_IGNORE, MOCK_IGNORE); displayed_no_extra(); + TEST_TRUE(mock_get_timer_last - mock_time_start >= + 30 * VB_USEC_PER_SEC, " finished delay"); + TEST_EQ(mock_vbexbeep_called, 2, " beeped twice"); TEST_EQ(mock_vbtlk_count, mock_vbtlk_total, " used up mock_vbtlk"); - /* Proceed to USB */ - reset_common_data(); + /* Proceed to USB after timeout */ + reset_common_data(FOR_DEVELOPER); add_mock_vbtlk(VB2_SUCCESS, VB_DISK_FLAG_REMOVABLE); mock_default_boot = VB2_DEV_DEFAULT_BOOT_USB; mock_dev_boot_usb_allowed = 1; - TEST_EQ(vb2_developer_menu(ctx), VB2_SUCCESS, "proceed to USB"); + TEST_EQ(vb2_developer_menu(ctx), VB2_SUCCESS, + "proceed to USB after timeout"); + displayed_eq("dev mode", VB2_SCREEN_DEVELOPER_MODE, MOCK_IGNORE, + MOCK_IGNORE, MOCK_IGNORE); displayed_no_extra(); + TEST_TRUE(mock_get_timer_last - mock_time_start >= + 30 * VB_USEC_PER_SEC, " finished delay"); + TEST_EQ(mock_vbexbeep_called, 2, " beeped twice"); TEST_EQ(mock_vbtlk_count, mock_vbtlk_total, " used up mock_vbtlk"); - /* Proceed to USB only if enabled */ - reset_common_data(); - add_mock_vbtlk(VB2_SUCCESS, VB_DISK_FLAG_FIXED); + /* Default boot USB not allowed, don't boot */ + reset_common_data(FOR_DEVELOPER); mock_default_boot = VB2_DEV_DEFAULT_BOOT_USB; - TEST_EQ(vb2_developer_menu(ctx), VB2_SUCCESS, - "default USB not enabled"); + TEST_EQ(vb2_developer_menu(ctx), VB2_REQUEST_SHUTDOWN, + "default USB not allowed, don't boot"); + displayed_eq("dev mode", VB2_SCREEN_DEVELOPER_MODE, MOCK_IGNORE, + MOCK_IGNORE, MOCK_IGNORE); displayed_no_extra(); + TEST_TRUE(mock_get_timer_last - mock_time_start >= + 30 * VB_USEC_PER_SEC, " finished delay"); + TEST_EQ(mock_vbexbeep_called, 2, " beeped twice"); TEST_EQ(mock_vbtlk_count, mock_vbtlk_total, " used up mock_vbtlk"); VB2_DEBUG("...done.\n"); @@ -367,7 +401,7 @@ static void broken_recovery_tests(void) /* BROKEN screen shutdown request */ if (!DETACHABLE) { - reset_common_data(); + reset_common_data(FOR_BROKEN_RECOVERY); add_mock_keypress(VB_BUTTON_POWER_SHORT_PRESS); mock_calls_until_shutdown = -1; TEST_EQ(vb2_broken_recovery_menu(ctx), @@ -379,7 +413,7 @@ static void broken_recovery_tests(void) } /* Shortcuts that are always ignored in BROKEN */ - reset_common_data(); + reset_common_data(FOR_BROKEN_RECOVERY); add_mock_key(VB_KEY_CTRL('D'), 1); add_mock_key(VB_KEY_CTRL('U'), 1); add_mock_key(VB_KEY_CTRL('L'), 1); @@ -388,7 +422,7 @@ static void broken_recovery_tests(void) add_mock_key(VB_BUTTON_VOL_DOWN_LONG_PRESS, 1); TEST_EQ(vb2_broken_recovery_menu(ctx), VB2_REQUEST_SHUTDOWN, "Shortcuts ignored in BROKEN"); - TEST_EQ(mock_calls_until_shutdown, 0, " ignore all"); + TEST_EQ(mock_calls_until_shutdown, 0, " loop forever"); displayed_eq("broken screen", VB2_SCREEN_RECOVERY_BROKEN, MOCK_IGNORE, MOCK_IGNORE, MOCK_IGNORE); displayed_no_extra(); @@ -401,7 +435,7 @@ static void manual_recovery_tests(void) VB2_DEBUG("Testing manual recovery mode...\n"); /* Timeout, shutdown */ - reset_common_data(); + reset_common_data(FOR_MANUAL_RECOVERY); add_mock_vbtlk(VB2_ERROR_LK_NO_DISK_FOUND, VB_DISK_FLAG_REMOVABLE); TEST_EQ(vb2_manual_recovery_menu(ctx), VB2_REQUEST_SHUTDOWN, "timeout, shutdown"); @@ -411,7 +445,7 @@ static void manual_recovery_tests(void) /* Power button short pressed = shutdown request */ if (!DETACHABLE) { - reset_common_data(); + reset_common_data(FOR_MANUAL_RECOVERY); add_mock_keypress(VB_BUTTON_POWER_SHORT_PRESS); add_mock_vbtlk(VB2_ERROR_LK_NO_DISK_FOUND, VB_DISK_FLAG_REMOVABLE); @@ -424,7 +458,7 @@ static void manual_recovery_tests(void) } /* Item 1 = phone recovery */ - reset_common_data(); + reset_common_data(FOR_MANUAL_RECOVERY); add_mock_keypress(VB_KEY_ENTER); add_mock_vbtlk(VB2_ERROR_LK_NO_DISK_FOUND, VB_DISK_FLAG_REMOVABLE); TEST_EQ(vb2_manual_recovery_menu(ctx), VB2_REQUEST_SHUTDOWN, @@ -436,7 +470,7 @@ static void manual_recovery_tests(void) displayed_no_extra(); /* Item 2 = external disk recovery */ - reset_common_data(); + reset_common_data(FOR_MANUAL_RECOVERY); add_mock_keypress(VB_KEY_DOWN); add_mock_keypress(VB_KEY_ENTER); add_mock_vbtlk(VB2_ERROR_LK_NO_DISK_FOUND, VB_DISK_FLAG_REMOVABLE); @@ -451,7 +485,7 @@ static void manual_recovery_tests(void) displayed_no_extra(); /* Boots if we have a valid image on first try */ - reset_common_data(); + reset_common_data(FOR_MANUAL_RECOVERY); add_mock_vbtlk(VB2_SUCCESS, VB_DISK_FLAG_REMOVABLE); add_mock_vbtlk(VB2_ERROR_MOCK, VB_DISK_FLAG_REMOVABLE); TEST_EQ(vb2_manual_recovery_menu(ctx), VB2_SUCCESS, @@ -461,7 +495,7 @@ static void manual_recovery_tests(void) displayed_no_extra(); /* Boots eventually if we get a valid image later */ - reset_common_data(); + reset_common_data(FOR_MANUAL_RECOVERY); add_mock_vbtlk(VB2_ERROR_LK_NO_DISK_FOUND, VB_DISK_FLAG_REMOVABLE); add_mock_vbtlk(VB2_ERROR_LK_NO_DISK_FOUND, VB_DISK_FLAG_REMOVABLE); add_mock_vbtlk(VB2_SUCCESS, VB_DISK_FLAG_REMOVABLE); @@ -473,7 +507,7 @@ static void manual_recovery_tests(void) displayed_no_extra(); /* Invalid image, then remove, then valid image */ - reset_common_data(); + reset_common_data(FOR_MANUAL_RECOVERY); add_mock_vbtlk(VB2_ERROR_MOCK, VB_DISK_FLAG_REMOVABLE); add_mock_vbtlk(VB2_ERROR_LK_NO_DISK_FOUND, VB_DISK_FLAG_REMOVABLE); add_mock_vbtlk(VB2_ERROR_LK_NO_DISK_FOUND, VB_DISK_FLAG_REMOVABLE); |