summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/vb2_ui_action_tests.c12
-rw-r--r--tests/vb2_ui_tests.c122
-rw-r--r--tests/vb2_ui_utility_tests.c4
3 files changed, 87 insertions, 51 deletions
diff --git a/tests/vb2_ui_action_tests.c b/tests/vb2_ui_action_tests.c
index dd87bc33..03b4eed7 100644
--- a/tests/vb2_ui_action_tests.c
+++ b/tests/vb2_ui_action_tests.c
@@ -142,7 +142,7 @@ static vb2_error_t global_action_countdown(struct vb2_ui_context *ui)
static vb2_error_t global_action_change_screen(struct vb2_ui_context *ui)
{
- change_screen(ui, MOCK_SCREEN_BASE);
+ vb2_ui_change_screen(ui, MOCK_SCREEN_BASE);
return VB2_REQUEST_UI_CONTINUE;
}
@@ -500,7 +500,8 @@ static void menu_action_tests(void)
reset_common_data();
mock_state->screen = &mock_screen_base;
mock_ui_context.key = VB_KEY_ENTER;
- TEST_EQ(menu_select_action(&mock_ui_context), VB2_REQUEST_UI_CONTINUE,
+ TEST_EQ(vb2_ui_menu_select_action(&mock_ui_context),
+ VB2_REQUEST_UI_CONTINUE,
"menu_select_action with no item screen");
screen_state_eq(mock_state, MOCK_SCREEN_BASE, 0, MOCK_IGNORE);
@@ -512,7 +513,7 @@ static void menu_action_tests(void)
mock_state->screen = &mock_screen_menu;
mock_state->selected_item = i;
mock_ui_context.key = VB_KEY_ENTER;
- TEST_EQ(menu_select_action(&mock_ui_context),
+ TEST_EQ(vb2_ui_menu_select_action(&mock_ui_context),
VB2_REQUEST_UI_CONTINUE, test_name);
screen_state_eq(mock_state, target_id, 0, MOCK_IGNORE);
}
@@ -522,7 +523,8 @@ static void menu_action_tests(void)
mock_state->screen = &mock_screen_menu;
mock_state->selected_item = 4;
mock_ui_context.key = VB_KEY_ENTER;
- TEST_EQ(menu_select_action(&mock_ui_context), VB2_REQUEST_UI_CONTINUE,
+ TEST_EQ(vb2_ui_menu_select_action(&mock_ui_context),
+ VB2_REQUEST_UI_CONTINUE,
"select no target");
screen_state_eq(mock_state, MOCK_SCREEN_MENU, 4, MOCK_IGNORE);
@@ -532,7 +534,7 @@ static void menu_action_tests(void)
mock_state->screen = &mock_screen_menu;
mock_state->selected_item = 1;
mock_ui_context.key = VB_BUTTON_POWER_SHORT_PRESS;
- TEST_EQ(menu_select_action(&mock_ui_context),
+ TEST_EQ(vb2_ui_menu_select_action(&mock_ui_context),
VB2_REQUEST_UI_CONTINUE,
"ignore power button short press when not DETACHABLE");
screen_state_eq(mock_state, MOCK_SCREEN_MENU, 1, MOCK_IGNORE);
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);
diff --git a/tests/vb2_ui_utility_tests.c b/tests/vb2_ui_utility_tests.c
index 5350e1c6..b616bcb8 100644
--- a/tests/vb2_ui_utility_tests.c
+++ b/tests/vb2_ui_utility_tests.c
@@ -240,7 +240,7 @@ static void change_screen_tests(void)
mock_state->screen = &mock_screen_menu;
mock_state->selected_item = 2;
mock_state->disabled_item_mask = 0x10;
- TEST_EQ(change_screen(&mock_ui_context, MOCK_SCREEN_BASE),
+ TEST_EQ(vb2_ui_change_screen(&mock_ui_context, MOCK_SCREEN_BASE),
VB2_REQUEST_UI_CONTINUE,
"change_screen will clear screen state");
screen_state_eq(mock_state, MOCK_SCREEN_BASE, 0, 0);
@@ -248,7 +248,7 @@ static void change_screen_tests(void)
/* Change to screen which does not exist */
reset_common_data();
mock_state->screen = &mock_screen_menu;
- TEST_EQ(change_screen(&mock_ui_context, MOCK_NO_SCREEN),
+ TEST_EQ(vb2_ui_change_screen(&mock_ui_context, MOCK_NO_SCREEN),
VB2_REQUEST_UI_CONTINUE,
"change to screen which does not exist");
screen_state_eq(mock_state, MOCK_SCREEN_MENU, MOCK_IGNORE, MOCK_IGNORE);