diff options
-rw-r--r-- | firmware/2lib/2stub.c | 6 | ||||
-rw-r--r-- | firmware/2lib/2ui.c | 37 | ||||
-rw-r--r-- | firmware/2lib/2ui_screens.c | 369 | ||||
-rw-r--r-- | firmware/2lib/include/2api.h | 14 | ||||
-rw-r--r-- | firmware/2lib/include/2ui.h | 14 | ||||
-rw-r--r-- | firmware/lib/vboot_api_kernel.c | 2 | ||||
-rw-r--r-- | tests/vb2_ui_action_tests.c | 64 | ||||
-rw-r--r-- | tests/vb2_ui_tests.c | 502 | ||||
-rw-r--r-- | tests/vboot_api_kernel4_tests.c | 2 |
9 files changed, 22 insertions, 988 deletions
diff --git a/firmware/2lib/2stub.c b/firmware/2lib/2stub.c index 368915b1..181fa496 100644 --- a/firmware/2lib/2stub.c +++ b/firmware/2lib/2stub.c @@ -268,3 +268,9 @@ vb2_error_t vb2ex_manual_recovery_ui(struct vb2_context *ctx) { return VB2_SUCCESS; } + +__attribute__((weak)) +vb2_error_t vb2ex_developer_ui(struct vb2_context *ctx) +{ + return VB2_SUCCESS; +} diff --git a/firmware/2lib/2ui.c b/firmware/2lib/2ui.c index db79eb72..ab0692bf 100644 --- a/firmware/2lib/2ui.c +++ b/firmware/2lib/2ui.c @@ -414,43 +414,6 @@ vb2_error_t vb2_ui_loop(struct vb2_context *ctx, enum vb2_screen root_screen_id, } /*****************************************************************************/ -/* Developer mode */ - -vb2_error_t vb2_developer_menu(struct vb2_context *ctx) -{ - enum vb2_screen root_screen_id = VB2_SCREEN_DEVELOPER_MODE; - if (!(ctx->flags & VB2_CONTEXT_DEV_BOOT_ALLOWED)) { - VB2_DEBUG("WARNING: Dev boot not allowed; forcing to-norm\n"); - root_screen_id = VB2_SCREEN_DEVELOPER_TO_NORM; - } - return vb2_ui_loop(ctx, root_screen_id, developer_action); -} - -vb2_error_t developer_action(struct vb2_ui_context *ui) -{ - /* Developer mode keyboard shortcuts */ - if (ui->key == '\t') - return vb2_ui_screen_change(ui, VB2_SCREEN_DEBUG_INFO); - - /* Ignore other shortcuts */ - if (!(ui->ctx->flags & VB2_CONTEXT_DEV_BOOT_ALLOWED)) - return VB2_REQUEST_UI_CONTINUE; - - if (ui->key == VB_KEY_CTRL('S')) - return vb2_ui_screen_change(ui, VB2_SCREEN_DEVELOPER_TO_NORM); - if (ui->key == VB_KEY_CTRL('U') || - (DETACHABLE && ui->key == VB_BUTTON_VOL_UP_LONG_PRESS)) - return vb2_ui_developer_mode_boot_external_action(ui); - if (ui->key == VB_KEY_CTRL('D') || - (DETACHABLE && ui->key == VB_BUTTON_VOL_DOWN_LONG_PRESS)) - return vb2_ui_developer_mode_boot_internal_action(ui); - if (ui->key == VB_KEY_CTRL('L')) /* L for aLtfw (formerly Legacy) */ - return vb2_ui_developer_mode_boot_altfw_action(ui); - - return VB2_SUCCESS; -} - -/*****************************************************************************/ /* Diagnostics */ vb2_error_t vb2_diagnostic_menu(struct vb2_context *ctx) diff --git a/firmware/2lib/2ui_screens.c b/firmware/2lib/2ui_screens.c index 51e428a4..5e08b57d 100644 --- a/firmware/2lib/2ui_screens.c +++ b/firmware/2lib/2ui_screens.c @@ -515,370 +515,6 @@ static const struct vb2_screen_info recovery_to_dev_screen = { }; /******************************************************************************/ -/* VB2_SCREEN_DEVELOPER_MODE */ - -#define DEVELOPER_MODE_ITEM_RETURN_TO_SECURE 1 -#define DEVELOPER_MODE_ITEM_BOOT_INTERNAL 2 -#define DEVELOPER_MODE_ITEM_BOOT_EXTERNAL 3 -#define DEVELOPER_MODE_ITEM_SELECT_ALTFW 4 - -vb2_error_t developer_mode_init(struct vb2_ui_context *ui) -{ - enum vb2_dev_default_boot_target default_boot = - vb2api_get_dev_default_boot_target(ui->ctx); - - /* Don't show "Return to secure mode" button if GBB forces dev mode. */ - if (vb2api_gbb_get_flags(ui->ctx) & VB2_GBB_FLAG_FORCE_DEV_SWITCH_ON) - VB2_SET_BIT(ui->state->hidden_item_mask, - DEVELOPER_MODE_ITEM_RETURN_TO_SECURE); - - /* Don't show "Boot from external disk" button if not allowed. */ - if (!(ui->ctx->flags & VB2_CONTEXT_DEV_BOOT_EXTERNAL_ALLOWED)) - VB2_SET_BIT(ui->state->hidden_item_mask, - DEVELOPER_MODE_ITEM_BOOT_EXTERNAL); - - /* Don't show "Select alternate bootloader" button if not allowed. */ - if (!(ui->ctx->flags & VB2_CONTEXT_DEV_BOOT_ALTFW_ALLOWED)) - VB2_SET_BIT(ui->state->hidden_item_mask, - DEVELOPER_MODE_ITEM_SELECT_ALTFW); - - /* Choose the default selection. */ - switch (default_boot) { - case VB2_DEV_DEFAULT_BOOT_TARGET_EXTERNAL: - ui->state->selected_item = DEVELOPER_MODE_ITEM_BOOT_EXTERNAL; - break; - case VB2_DEV_DEFAULT_BOOT_TARGET_ALTFW: - ui->state->selected_item = - DEVELOPER_MODE_ITEM_SELECT_ALTFW; - break; - default: - ui->state->selected_item = DEVELOPER_MODE_ITEM_BOOT_INTERNAL; - break; - } - - ui->start_time_ms = vb2ex_mtime(); - - return VB2_SUCCESS; -} - -vb2_error_t vb2_ui_developer_mode_boot_internal_action( - struct vb2_ui_context *ui) -{ - vb2_error_t rv; - - if (!(ui->ctx->flags & VB2_CONTEXT_DEVELOPER_MODE) || - !(ui->ctx->flags & VB2_CONTEXT_DEV_BOOT_ALLOWED)) { - VB2_DEBUG("ERROR: Dev mode internal boot not allowed\n"); - return VB2_SUCCESS; - } - - rv = VbTryLoadKernel(ui->ctx, VB_DISK_FLAG_FIXED); - if (rv == VB2_SUCCESS) - return VB2_REQUEST_UI_EXIT; - - VB2_DEBUG("ERROR: Failed to boot from internal disk: %#x\n", rv); - ui->error_beep = 1; - return set_ui_error(ui, VB2_UI_ERROR_INTERNAL_BOOT_FAILED); -} - -vb2_error_t vb2_ui_developer_mode_boot_external_action( - struct vb2_ui_context *ui) -{ - vb2_error_t rv; - - /* Validity check, should never happen. */ - if (!(ui->ctx->flags & VB2_CONTEXT_DEVELOPER_MODE) || - !(ui->ctx->flags & VB2_CONTEXT_DEV_BOOT_ALLOWED) || - !(ui->ctx->flags & VB2_CONTEXT_DEV_BOOT_EXTERNAL_ALLOWED)) { - VB2_DEBUG("ERROR: Dev mode external boot not allowed\n"); - ui->error_beep = 1; - return set_ui_error(ui, VB2_UI_ERROR_EXTERNAL_BOOT_DISABLED); - } - - rv = VbTryLoadKernel(ui->ctx, VB_DISK_FLAG_REMOVABLE); - if (rv == VB2_SUCCESS) { - return VB2_REQUEST_UI_EXIT; - } else if (rv == VB2_ERROR_LK_NO_DISK_FOUND) { - if (ui->state->screen->id != - VB2_SCREEN_DEVELOPER_BOOT_EXTERNAL) { - VB2_DEBUG("No external disk found\n"); - ui->error_beep = 1; - } - return vb2_ui_screen_change( - ui, VB2_SCREEN_DEVELOPER_BOOT_EXTERNAL); - } else { - if (ui->state->screen->id != - VB2_SCREEN_DEVELOPER_INVALID_DISK) { - VB2_DEBUG("Invalid external disk: %#x\n", rv); - ui->error_beep = 1; - } - return vb2_ui_screen_change( - ui, VB2_SCREEN_DEVELOPER_INVALID_DISK); - } -} - -vb2_error_t developer_mode_action(struct vb2_ui_context *ui) -{ - const int use_short = vb2api_use_short_dev_screen_delay(ui->ctx); - uint64_t elapsed_ms; - - /* Once any user interaction occurs, stop the timer. */ - if (ui->key) - ui->disable_timer = 1; - if (ui->disable_timer) - return VB2_SUCCESS; - - elapsed_ms = vb2ex_mtime() - ui->start_time_ms; - - /* If we're using short delay, wait 2 seconds and don't beep. */ - if (use_short && elapsed_ms > DEV_DELAY_SHORT_MS) { - VB2_DEBUG("Booting default target after 2s\n"); - ui->disable_timer = 1; - return vb2_ui_menu_select(ui); - } - - /* Otherwise, beep at 20 and 20.5 seconds. */ - if ((ui->beep_count == 0 && elapsed_ms > DEV_DELAY_BEEP1_MS) || - (ui->beep_count == 1 && elapsed_ms > DEV_DELAY_BEEP2_MS)) { - vb2ex_beep(250, 400); - ui->beep_count++; - } - - /* Stop after 30 seconds. */ - if (elapsed_ms > DEV_DELAY_NORMAL_MS) { - VB2_DEBUG("Booting default target after 30s\n"); - ui->disable_timer = 1; - return vb2_ui_menu_select(ui); - } - - return VB2_SUCCESS; -} - -static const struct vb2_menu_item developer_mode_items[] = { - LANGUAGE_SELECT_ITEM, - [DEVELOPER_MODE_ITEM_RETURN_TO_SECURE] = { - .text = "Return to secure mode", - .target = VB2_SCREEN_DEVELOPER_TO_NORM, - }, - [DEVELOPER_MODE_ITEM_BOOT_INTERNAL] = { - .text = "Boot from internal disk", - .action = vb2_ui_developer_mode_boot_internal_action, - }, - [DEVELOPER_MODE_ITEM_BOOT_EXTERNAL] = { - .text = "Boot from external disk", - .action = vb2_ui_developer_mode_boot_external_action, - }, - [DEVELOPER_MODE_ITEM_SELECT_ALTFW] = { - .text = "Select alternate bootloader", - .target = VB2_SCREEN_DEVELOPER_SELECT_ALTFW, - }, - ADVANCED_OPTIONS_ITEM, - POWER_OFF_ITEM, -}; - -static const struct vb2_screen_info developer_mode_screen = { - .id = VB2_SCREEN_DEVELOPER_MODE, - .name = "Developer mode", - .init = developer_mode_init, - .action = developer_mode_action, - .menu = MENU_ITEMS(developer_mode_items), -}; - -/******************************************************************************/ -/* VB2_SCREEN_DEVELOPER_TO_NORM */ - -#define DEVELOPER_TO_NORM_ITEM_CONFIRM 1 -#define DEVELOPER_TO_NORM_ITEM_CANCEL 2 - -static vb2_error_t developer_to_norm_init(struct vb2_ui_context *ui) -{ - /* Don't allow to-norm if GBB forces dev mode */ - if (vb2api_gbb_get_flags(ui->ctx) & VB2_GBB_FLAG_FORCE_DEV_SWITCH_ON) { - VB2_DEBUG("ERROR: to-norm not allowed\n"); - return set_ui_error_and_go_back( - ui, VB2_UI_ERROR_TO_NORM_NOT_ALLOWED); - } - ui->state->selected_item = DEVELOPER_TO_NORM_ITEM_CONFIRM; - /* Hide "Cancel" button if dev boot is not allowed */ - if (!(ui->ctx->flags & VB2_CONTEXT_DEV_BOOT_ALLOWED)) - VB2_SET_BIT(ui->state->hidden_item_mask, - DEVELOPER_TO_NORM_ITEM_CANCEL); - return VB2_SUCCESS; -} - -vb2_error_t developer_to_norm_action(struct vb2_ui_context *ui) -{ - if (vb2api_disable_developer_mode(ui->ctx) == VB2_SUCCESS) - return VB2_REQUEST_REBOOT; - else - return VB2_SUCCESS; -} - -static const struct vb2_menu_item developer_to_norm_items[] = { - LANGUAGE_SELECT_ITEM, - [DEVELOPER_TO_NORM_ITEM_CONFIRM] = { - .text = "Confirm", - .action = developer_to_norm_action, - }, - [DEVELOPER_TO_NORM_ITEM_CANCEL] = { - .text = "Cancel", - .action = vb2_ui_screen_back, - }, - POWER_OFF_ITEM, -}; - -static const struct vb2_screen_info developer_to_norm_screen = { - .id = VB2_SCREEN_DEVELOPER_TO_NORM, - .name = "Transition to normal mode", - .init = developer_to_norm_init, - .menu = MENU_ITEMS(developer_to_norm_items), -}; - -/******************************************************************************/ -/* VB2_SCREEN_DEVELOPER_BOOT_EXTERNAL */ - -static const struct vb2_menu_item developer_boot_external_items[] = { - LANGUAGE_SELECT_ITEM, - BACK_ITEM, - POWER_OFF_ITEM, -}; - -static const struct vb2_screen_info developer_boot_external_screen = { - .id = VB2_SCREEN_DEVELOPER_BOOT_EXTERNAL, - .name = "Developer boot from external disk", - .action = vb2_ui_developer_mode_boot_external_action, - .menu = MENU_ITEMS(developer_boot_external_items), -}; - -/******************************************************************************/ -/* VB2_SCREEN_DEVELOPER_INVALID_DISK */ - -static const struct vb2_menu_item developer_invalid_disk_items[] = { - LANGUAGE_SELECT_ITEM, - BACK_ITEM, - POWER_OFF_ITEM, -}; - -static const struct vb2_screen_info developer_invalid_disk_screen = { - .id = VB2_SCREEN_DEVELOPER_INVALID_DISK, - .name = "Invalid external disk in dev mode", - .action = vb2_ui_developer_mode_boot_external_action, - .menu = MENU_ITEMS(developer_invalid_disk_items), -}; - -/******************************************************************************/ -/* VB2_SCREEN_DEVELOPER_SELECT_ALTFW */ - -static const struct vb2_menu_item developer_select_bootloader_items_before[] = { - LANGUAGE_SELECT_ITEM, -}; - -static const struct vb2_menu_item developer_select_bootloader_items_after[] = { - BACK_ITEM, - POWER_OFF_ITEM, -}; - -static vb2_error_t developer_select_bootloader_init(struct vb2_ui_context *ui) -{ - if (vb2_get_menu(ui)->num_items == 0) - return set_ui_error_and_go_back(ui, VB2_UI_ERROR_ALTFW_EMPTY); - /* Select the first bootloader. */ - ui->state->selected_item = - ARRAY_SIZE(developer_select_bootloader_items_before); - return VB2_SUCCESS; -} - -vb2_error_t vb2_ui_developer_mode_boot_altfw_action( - struct vb2_ui_context *ui) -{ - uint32_t altfw_id; - const size_t menu_before_len = - ARRAY_SIZE(developer_select_bootloader_items_before); - - if (!(ui->ctx->flags & VB2_CONTEXT_DEVELOPER_MODE) || - !(ui->ctx->flags & VB2_CONTEXT_DEV_BOOT_ALLOWED) || - !(ui->ctx->flags & VB2_CONTEXT_DEV_BOOT_ALTFW_ALLOWED)) { - VB2_DEBUG("ERROR: Dev mode alternate bootloader not allowed\n"); - return set_ui_error(ui, VB2_UI_ERROR_ALTFW_DISABLED); - } - - if (vb2ex_get_altfw_count() == 0) { - VB2_DEBUG("ERROR: No alternate bootloader was found\n"); - return set_ui_error(ui, VB2_UI_ERROR_ALTFW_EMPTY); - } - - if (ui->key == VB_KEY_CTRL('L')) { - altfw_id = 0; - VB2_DEBUG("Try booting from default bootloader\n"); - } else { - altfw_id = ui->state->selected_item - menu_before_len + 1; - VB2_DEBUG("Try booting from bootloader #%u\n", altfw_id); - } - - /* vb2ex_run_altfw will not return if successful */ - vb2ex_run_altfw(altfw_id); - - VB2_DEBUG("ERROR: Alternate bootloader failed\n"); - return set_ui_error(ui, VB2_UI_ERROR_ALTFW_FAILED); -} - -static const struct vb2_menu *get_bootloader_menu(struct vb2_ui_context *ui) -{ - int i; - uint32_t num_bootloaders, num_items; - struct vb2_menu_item *items; - const size_t menu_before_len = - ARRAY_SIZE(developer_select_bootloader_items_before); - const size_t menu_after_len = - ARRAY_SIZE(developer_select_bootloader_items_after); - - if (ui->bootloader_menu.num_items > 0) - return &ui->bootloader_menu; - - num_bootloaders = vb2ex_get_altfw_count(); - if (num_bootloaders == 0) { - VB2_DEBUG("ERROR: No bootloader was found\n"); - return NULL; - } - VB2_DEBUG("num_bootloaders: %u\n", num_bootloaders); - num_items = num_bootloaders + menu_before_len + menu_after_len; - items = malloc(num_items * sizeof(struct vb2_menu_item)); - if (!items) { - VB2_DEBUG("ERROR: malloc failed for bootloader items\n"); - return NULL; - } - - /* Copy prefix items to the begin. */ - memcpy(&items[0], - developer_select_bootloader_items_before, - menu_before_len * sizeof(struct vb2_menu_item)); - - /* Copy bootloaders. */ - for (i = 0; i < num_bootloaders; i++) { - items[i + menu_before_len].text = "Some bootloader"; - items[i + menu_before_len].action = - vb2_ui_developer_mode_boot_altfw_action; - } - - /* Copy postfix items to the end. */ - memcpy(&items[num_items - menu_after_len], - developer_select_bootloader_items_after, - menu_after_len * sizeof(struct vb2_menu_item)); - - ui->bootloader_menu.num_items = num_items; - ui->bootloader_menu.items = items; - - return &ui->bootloader_menu; -} - -static const struct vb2_screen_info developer_select_bootloader_screen = { - .id = VB2_SCREEN_DEVELOPER_SELECT_ALTFW, - .name = "Select alternate bootloader", - .init = developer_select_bootloader_init, - .get_menu = get_bootloader_menu, -}; - -/******************************************************************************/ /* VB2_SCREEN_DIAGNOSTICS */ #define DIAGNOSTICS_ITEM_STORAGE_HEALTH 1 @@ -1218,11 +854,6 @@ static const struct vb2_screen_info *screens[] = { &debug_info_screen, &firmware_log_screen, &recovery_to_dev_screen, - &developer_mode_screen, - &developer_to_norm_screen, - &developer_boot_external_screen, - &developer_invalid_disk_screen, - &developer_select_bootloader_screen, &diagnostics_screen, &diagnostics_storage_health_screen, &diagnostics_storage_test_short_screen, diff --git a/firmware/2lib/include/2api.h b/firmware/2lib/include/2api.h index df8c8d1a..a1cda6a1 100644 --- a/firmware/2lib/include/2api.h +++ b/firmware/2lib/include/2api.h @@ -1416,6 +1416,20 @@ vb2_error_t vb2ex_broken_screen_ui(struct vb2_context *ctx); */ vb2_error_t vb2ex_manual_recovery_ui(struct vb2_context *ctx); +/** + * UI for a developer-mode boot. + * + * Enter the developer menu, which provides options to switch out of developer + * mode, boot from external media, use legacy bootloader, or boot Chrome OS from + * disk. + * + * If a timeout occurs, take the default boot action. + * + * @param ctx Vboot context + * @return VB2_SUCCESS, or non-zero error code. + */ +vb2_error_t vb2ex_developer_ui(struct vb2_context *ctx); + /* Helpers for bitmask operations */ #define VB2_SET_BIT(mask, index) ((mask) |= ((uint32_t)1 << (index))) #define VB2_CLR_BIT(mask, index) ((mask) &= ~((uint32_t)1 << (index))) diff --git a/firmware/2lib/include/2ui.h b/firmware/2lib/include/2ui.h index 2ed65e9d..0fb18513 100644 --- a/firmware/2lib/include/2ui.h +++ b/firmware/2lib/include/2ui.h @@ -232,20 +232,6 @@ vb2_error_t vb2_ui_screen_change(struct vb2_ui_context *ui, enum vb2_screen id); /* UI loops */ /** - * UI for a developer-mode boot. - * - * Enter the developer menu, which provides options to switch out of developer - * mode, boot from external media, use legacy bootloader, or boot Chrome OS from - * disk. - * - * If a timeout occurs, take the default boot action. - * - * @param ctx Vboot context - * @return VB2_SUCCESS, or non-zero error code. - */ -vb2_error_t vb2_developer_menu(struct vb2_context *ctx); - -/** * UI for a diagnostic tools boot. * * Enter the diagnostic tools menu, which provides debug information and diff --git a/firmware/lib/vboot_api_kernel.c b/firmware/lib/vboot_api_kernel.c index 9978097d..10728b95 100644 --- a/firmware/lib/vboot_api_kernel.c +++ b/firmware/lib/vboot_api_kernel.c @@ -217,7 +217,7 @@ vb2_error_t VbSelectAndLoadKernel(struct vb2_context *ctx, return VB2_REQUEST_REBOOT; } else if (ctx->flags & VB2_CONTEXT_DEVELOPER_MODE) { /* Developer boot. This has UI. */ - VB2_TRY(vb2_developer_menu(ctx)); + VB2_TRY(vb2ex_developer_ui(ctx)); } else { /* Normal boot */ VB2_TRY(vb2_normal_boot(ctx)); diff --git a/tests/vb2_ui_action_tests.c b/tests/vb2_ui_action_tests.c index 70ca23af..ba378f43 100644 --- a/tests/vb2_ui_action_tests.c +++ b/tests/vb2_ui_action_tests.c @@ -727,67 +727,6 @@ static void menu_select_tests(void) VB2_DEBUG("...done.\n"); } -static void vb2_ui_developer_mode_boot_altfw_action_tests(void) -{ - VB2_DEBUG("Test developer mode boot alternate action...\n"); - - /* Not allowed: not in dev mode */ - reset_common_data(); - ctx->flags |= VB2_CONTEXT_DEV_BOOT_ALTFW_ALLOWED; - TEST_EQ(vb2_ui_developer_mode_boot_altfw_action(&mock_ui_context), - VB2_REQUEST_UI_CONTINUE, "not allowed: not in dev mode"); - TEST_EQ(mock_ui_context.error_code, VB2_UI_ERROR_ALTFW_DISABLED, - "ui_error code is set"); - TEST_EQ(mock_run_altfw_called, 0, " vb2ex_run_altfw not called"); - - /* Not allowed: dev boot not allowed */ - reset_common_data(); - ctx->flags |= VB2_CONTEXT_DEVELOPER_MODE; - ctx->flags &= ~(uint64_t)VB2_CONTEXT_DEV_BOOT_ALLOWED; - ctx->flags |= VB2_CONTEXT_DEV_BOOT_ALTFW_ALLOWED; - TEST_EQ(vb2_ui_developer_mode_boot_altfw_action(&mock_ui_context), - VB2_REQUEST_UI_CONTINUE, "not allowed: dev boot not allowed"); - TEST_EQ(mock_ui_context.error_code, VB2_UI_ERROR_ALTFW_DISABLED, - "ui_error code is set"); - TEST_EQ(mock_run_altfw_called, 0, " vb2ex_run_altfw not called"); - - /* Not allowed: boot altfw not allowed */ - reset_common_data(); - ctx->flags |= VB2_CONTEXT_DEVELOPER_MODE; - TEST_EQ(vb2_ui_developer_mode_boot_altfw_action(&mock_ui_context), - VB2_REQUEST_UI_CONTINUE, "not allowed: boot altfw not allowed"); - TEST_EQ(mock_ui_context.error_code, VB2_UI_ERROR_ALTFW_DISABLED, - "ui_error code is set"); - TEST_EQ(mock_run_altfw_called, 0, " vb2ex_run_altfw not called"); - - /* Allowed */ - reset_common_data(); - ctx->flags |= VB2_CONTEXT_DEVELOPER_MODE; - ctx->flags |= VB2_CONTEXT_DEV_BOOT_ALTFW_ALLOWED; - mock_ui_context.state->selected_item = 2; - TEST_EQ(vb2_ui_developer_mode_boot_altfw_action(&mock_ui_context), - VB2_REQUEST_UI_CONTINUE, "allowed"); - TEST_EQ(mock_ui_context.error_code, VB2_UI_ERROR_ALTFW_FAILED, - "ui_error code is set"); - TEST_EQ(mock_run_altfw_called, 1, " vb2ex_run_altfw called once"); - TEST_EQ(mock_altfw_last, 2, " select bootloader #2"); - - /* CTRL+L = default bootloader */ - reset_common_data(); - ctx->flags |= VB2_CONTEXT_DEVELOPER_MODE; - ctx->flags |= VB2_CONTEXT_DEV_BOOT_ALTFW_ALLOWED; - mock_ui_context.key = VB_KEY_CTRL('L'); - mock_ui_context.state->selected_item = 4; /* Ignored */ - TEST_EQ(vb2_ui_developer_mode_boot_altfw_action(&mock_ui_context), - VB2_REQUEST_UI_CONTINUE, "allowed: ctrl+l"); - TEST_EQ(mock_ui_context.error_code, VB2_UI_ERROR_ALTFW_FAILED, - "ui_error code is set"); - TEST_EQ(mock_run_altfw_called, 1, " vb2ex_run_altfw called once"); - TEST_EQ(mock_altfw_last, 0, " select bootloader #0"); - - VB2_DEBUG("...done.\n"); -} - static void ui_loop_tests(void) { int i; @@ -989,9 +928,6 @@ int main(void) menu_next_tests(); menu_select_tests(); - /* Screen actions */ - vb2_ui_developer_mode_boot_altfw_action_tests(); - /* Core UI loop */ ui_loop_tests(); ui_loop_delay_tests(); diff --git a/tests/vb2_ui_tests.c b/tests/vb2_ui_tests.c index 2eaae0c3..b56d6315 100644 --- a/tests/vb2_ui_tests.c +++ b/tests/vb2_ui_tests.c @@ -140,17 +140,6 @@ static void add_mock_pp_pressed(int pressed) mock_pp_pressed[mock_pp_pressed_total++] = pressed; } -static void extend_calls_until_shutdown(void) -{ - if (mock_calls_until_shutdown < mock_key_total) - mock_calls_until_shutdown = mock_key_total; - if (mock_calls_until_shutdown < mock_vbtlk_total) - mock_calls_until_shutdown = mock_vbtlk_total; - if (mock_calls_until_shutdown < mock_pp_pressed_total) - mock_calls_until_shutdown = mock_pp_pressed_total; - mock_calls_until_shutdown++; -} - static void displayed_eq(const char *text, enum vb2_screen screen, uint32_t locale_id, @@ -229,22 +218,6 @@ static void displayed_no_extra(int line) #define DISPLAYED_NO_EXTRA() displayed_no_extra(__LINE__) -static void expect_beep(uint32_t msec, - uint32_t frequency, - uint32_t time_expected) -{ - if (mock_beep_total >= ARRAY_SIZE(mock_beep)) { - TEST_TRUE(0, " mock_beep ran out of entries!"); - return; - } - - mock_beep[mock_beep_total++] = (struct beep_call){ - .msec = msec, - .frequency = frequency, - .time_expected = time_expected, - }; -} - /* Check if the result time falls in range [expected, expected + FUZZ_MS) */ static void check_time(uint32_t result, uint32_t expected, const char *desc) { @@ -565,477 +538,6 @@ vb2_error_t vb2ex_diag_get_storage_test_log(const char **log) } /* Tests */ -static void developer_tests(void) -{ - VB2_DEBUG("Testing developer mode...\n"); - - /* Power button short pressed = shutdown request */ - if (!DETACHABLE) { - reset_common_data(FOR_DEVELOPER); - add_mock_keypress(VB_BUTTON_POWER_SHORT_PRESS); - mock_calls_until_shutdown = -1; - TEST_EQ(vb2_developer_menu(ctx), - VB2_REQUEST_SHUTDOWN, - "power button short pressed = shutdown"); - } - - /* Proceed to internal disk after timeout */ - reset_common_data(FOR_DEVELOPER); - add_mock_vbtlk(VB2_SUCCESS, VB_DISK_FLAG_FIXED); - expect_beep(250, 400, DEV_DELAY_BEEP1_MS); - expect_beep(250, 400, DEV_DELAY_BEEP2_MS); - TEST_EQ(vb2_developer_menu(ctx), VB2_SUCCESS, - "proceed to internal disk after timeout"); - check_time(mock_time_ms - mock_time_start_ms, DEV_DELAY_NORMAL_MS, - " finished delay"); - TEST_EQ(mock_beep_count, 2, " beeped twice"); - TEST_TRUE(mock_iters >= mock_vbtlk_total, " used up mock_vbtlk"); - - /* Don't proceed to internal disk after timeout (dev mode disallowed) */ - reset_common_data(FOR_DEVELOPER); - ctx->flags &= ~(uint64_t)VB2_CONTEXT_DEV_BOOT_ALLOWED; - TEST_EQ(vb2_ui_loop(ctx, VB2_SCREEN_DEVELOPER_MODE, NULL), - VB2_REQUEST_SHUTDOWN, - "do not proceed to internal disk after timeout " - "(dev mode disallowed)"); - - /* Use short delay */ - reset_common_data(FOR_DEVELOPER); - gbb.flags |= VB2_GBB_FLAG_DEV_SCREEN_SHORT_DELAY; - add_mock_vbtlk(VB2_SUCCESS, VB_DISK_FLAG_FIXED); - TEST_EQ(vb2_developer_menu(ctx), VB2_SUCCESS, - "use short delay"); - check_time(mock_time_ms - mock_time_start_ms, DEV_DELAY_SHORT_MS, - " finished delay"); - TEST_EQ(mock_beep_count, 0, " never beeped"); - - /* Stop timer on any user input: normal delay */ - reset_common_data(FOR_DEVELOPER); - add_mock_keypress('A'); - add_mock_vbtlk(VB2_SUCCESS, VB_DISK_FLAG_FIXED); - TEST_EQ(vb2_developer_menu(ctx), VB2_REQUEST_SHUTDOWN, - "stop timer on any user input: normal delay"); - TEST_TRUE(mock_time_ms - mock_time_start_ms > DEV_DELAY_NORMAL_MS, - " delay aborted"); - TEST_EQ(mock_calls_until_shutdown, 0, " loop forever"); - TEST_EQ(mock_beep_count, 0, " never beeped"); - - /* Stop timer on any user input: short delay */ - reset_common_data(FOR_DEVELOPER); - gbb.flags |= VB2_GBB_FLAG_DEV_SCREEN_SHORT_DELAY; - add_mock_keypress('A'); - add_mock_vbtlk(VB2_SUCCESS, VB_DISK_FLAG_FIXED); - TEST_EQ(vb2_developer_menu(ctx), VB2_REQUEST_SHUTDOWN, - "stop timer on any user input: short delay"); - TEST_TRUE(mock_time_ms - mock_time_start_ms > DEV_DELAY_SHORT_MS, - " delay aborted"); - TEST_EQ(mock_calls_until_shutdown, 0, " loop forever"); - TEST_EQ(mock_beep_count, 0, " never beeped"); - - /* If fail to load internal disk, don't boot */ - reset_common_data(FOR_DEVELOPER); - add_mock_vbtlk(VB2_ERROR_LK_NO_DISK_FOUND, VB_DISK_FLAG_FIXED); - TEST_NEQ(vb2_developer_menu(ctx), VB2_SUCCESS, - "if fail to load internal disk, don't boot"); - TEST_EQ(mock_calls_until_shutdown, 0, " loop forever"); - - /* Select boot internal in dev menu */ - reset_common_data(FOR_DEVELOPER); - add_mock_keypress(VB_KEY_ENTER); - add_mock_vbtlk(VB2_SUCCESS, VB_DISK_FLAG_FIXED); - TEST_EQ(vb2_developer_menu(ctx), VB2_SUCCESS, - "select boot internal in dev menu"); - - /* Ctrl+U = boot external */ - reset_common_data(FOR_DEVELOPER); - add_mock_keypress(VB_KEY_CTRL('U')); - add_mock_vbtlk(VB2_SUCCESS, VB_DISK_FLAG_REMOVABLE); - TEST_EQ(vb2_developer_menu(ctx), VB2_SUCCESS, - "ctrl+u = boot external"); - - /* Ctrl+D = boot internal */ - reset_common_data(FOR_DEVELOPER); - add_mock_keypress(VB_KEY_CTRL('D')); - add_mock_vbtlk(VB2_SUCCESS, VB_DISK_FLAG_FIXED); - TEST_EQ(vb2_developer_menu(ctx), VB2_SUCCESS, - "ctrl+d = boot internal"); - - /* VB_BUTTON_VOL_DOWN_LONG_PRESS = boot internal */ - if (DETACHABLE) { - reset_common_data(FOR_DEVELOPER); - add_mock_keypress(VB_BUTTON_VOL_DOWN_LONG_PRESS); - add_mock_vbtlk(VB2_SUCCESS, VB_DISK_FLAG_FIXED); - TEST_EQ(vb2_developer_menu(ctx), VB2_SUCCESS, - "VB_BUTTON_VOL_DOWN_LONG_PRESS = boot internal"); - } - - /* Proceed to external disk after timeout */ - reset_common_data(FOR_DEVELOPER); - add_mock_vbtlk(VB2_SUCCESS, VB_DISK_FLAG_REMOVABLE); - mock_default_boot = VB2_DEV_DEFAULT_BOOT_TARGET_EXTERNAL; - expect_beep(250, 400, DEV_DELAY_BEEP1_MS); - expect_beep(250, 400, DEV_DELAY_BEEP2_MS); - TEST_EQ(vb2_developer_menu(ctx), VB2_SUCCESS, - "proceed to external disk after timeout"); - check_time(mock_time_ms - mock_time_start_ms, DEV_DELAY_NORMAL_MS, - " finished delay"); - TEST_EQ(mock_beep_count, 2, " beeped twice"); - TEST_TRUE(mock_iters >= mock_vbtlk_total, " used up mock_vbtlk"); - - /* Default boot from external not allowed, don't boot */ - reset_common_data(FOR_DEVELOPER); - mock_default_boot = VB2_DEV_DEFAULT_BOOT_TARGET_EXTERNAL; - ctx->flags &= ~(uint64_t)VB2_CONTEXT_DEV_BOOT_EXTERNAL_ALLOWED; - TEST_EQ(vb2_developer_menu(ctx), VB2_REQUEST_SHUTDOWN, - "default boot from external disk not allowed, don't boot"); - - /* Don't proceed to external disk after timeout (dev mode disallowed) */ - reset_common_data(FOR_DEVELOPER); - ctx->flags &= ~(uint64_t)VB2_CONTEXT_DEV_BOOT_ALLOWED; - mock_default_boot = VB2_DEV_DEFAULT_BOOT_TARGET_EXTERNAL; - TEST_EQ(vb2_ui_loop(ctx, VB2_SCREEN_DEVELOPER_MODE, NULL), - VB2_REQUEST_SHUTDOWN, - "do not proceed to external disk after timeout " - "(dev mode disallowed)"); - - /* If no external disk, don't boot */ - reset_common_data(FOR_DEVELOPER); - add_mock_vbtlk(VB2_ERROR_LK_NO_DISK_FOUND, VB_DISK_FLAG_REMOVABLE); - mock_default_boot = VB2_DEV_DEFAULT_BOOT_TARGET_EXTERNAL; - TEST_EQ(vb2_developer_menu(ctx), VB2_REQUEST_SHUTDOWN, - "if no external disk, don't boot"); - - /* Select boot external in dev menu */ - reset_common_data(FOR_DEVELOPER); - add_mock_keypress(VB_KEY_ENTER); - add_mock_vbtlk(VB2_SUCCESS, VB_DISK_FLAG_REMOVABLE); - mock_default_boot = VB2_DEV_DEFAULT_BOOT_TARGET_EXTERNAL; - TEST_EQ(vb2_developer_menu(ctx), VB2_SUCCESS, - "select boot external in dev menu"); - - /* Ctrl+L = boot altfw (allowed) */ - reset_common_data(FOR_DEVELOPER); - ctx->flags |= VB2_CONTEXT_DEV_BOOT_ALTFW_ALLOWED; - add_mock_keypress(VB_KEY_CTRL('L')); - TEST_EQ(vb2_developer_menu(ctx), VB2_REQUEST_SHUTDOWN, - "ctrl+l = boot altfw"); - TEST_EQ(mock_run_altfw_called, 1, " vb2ex_run_altfw called"); - - /* Ctrl+L = boot altfw (disallowed) */ - reset_common_data(FOR_DEVELOPER); - add_mock_keypress(VB_KEY_CTRL('L')); - TEST_EQ(vb2_developer_menu(ctx), VB2_REQUEST_SHUTDOWN, - "ctrl+l = boot altfw"); - TEST_EQ(mock_run_altfw_called, 0, - " vb2ex_run_altfw not called"); - - /* VB_BUTTON_VOL_UP_LONG_PRESS = boot external */ - if (DETACHABLE) { - reset_common_data(FOR_DEVELOPER); - add_mock_keypress(VB_BUTTON_VOL_UP_LONG_PRESS); - add_mock_vbtlk(VB2_SUCCESS, VB_DISK_FLAG_REMOVABLE); - TEST_EQ(vb2_developer_menu(ctx), VB2_SUCCESS, - "VB_BUTTON_VOL_UP_LONG_PRESS = boot external"); - } - - /* Select to_norm in dev menu and confirm */ - reset_common_data(FOR_DEVELOPER); - add_mock_keypress(VB_KEY_UP); - add_mock_keypress(VB_KEY_ENTER); - add_mock_keypress(VB_KEY_ENTER); - TEST_EQ(vb2_developer_menu(ctx), VB2_REQUEST_REBOOT, - "select to_norm in dev menu and confirm"); - TEST_EQ(vb2_nv_get(ctx, VB2_NV_DISABLE_DEV_REQUEST), 1, - " disable dev request"); - - /* Select to_norm in dev menu and confirm (dev mode disallowed) */ - reset_common_data(FOR_DEVELOPER); - ctx->flags &= ~(uint64_t)VB2_CONTEXT_DEV_BOOT_ALLOWED; - add_mock_keypress(VB_KEY_UP); - add_mock_keypress(VB_KEY_ENTER); - add_mock_keypress(VB_KEY_ENTER); - TEST_EQ(vb2_ui_loop(ctx, VB2_SCREEN_DEVELOPER_MODE, NULL), - VB2_REQUEST_REBOOT, - "select to_norm in dev menu and confirm (dev mode disallowed)"); - TEST_EQ(vb2_nv_get(ctx, VB2_NV_DISABLE_DEV_REQUEST), 1, - " disable dev request"); - - /* Select to_norm in dev menu and cancel */ - reset_common_data(FOR_DEVELOPER); - add_mock_keypress(VB_KEY_UP); - add_mock_keypress(VB_KEY_ENTER); - add_mock_keypress(VB_KEY_DOWN); - add_mock_keypress(VB_KEY_ENTER); - TEST_EQ(vb2_developer_menu(ctx), VB2_REQUEST_SHUTDOWN, - "select to_norm in dev menu and cancel"); - TEST_EQ(vb2_nv_get(ctx, VB2_NV_DISABLE_DEV_REQUEST), 0, - " disable dev request"); - - /* Ctrl+S = to_norm */ - reset_common_data(FOR_DEVELOPER); - add_mock_keypress(VB_KEY_CTRL('S')); - add_mock_keypress(VB_KEY_ENTER); - TEST_EQ(vb2_developer_menu(ctx), VB2_REQUEST_REBOOT, - "ctrl+s = to_norm"); - TEST_EQ(vb2_nv_get(ctx, VB2_NV_DISABLE_DEV_REQUEST), 1, - " disable dev request"); - - /* Dev mode forced by GBB flag */ - reset_common_data(FOR_DEVELOPER); - gbb.flags |= VB2_GBB_FLAG_FORCE_DEV_SWITCH_ON; - add_mock_keypress(VB_KEY_CTRL('S')); - add_mock_keypress(VB_KEY_ENTER); - TEST_EQ(vb2_developer_menu(ctx), VB2_REQUEST_SHUTDOWN, - "dev mode forced by GBB flag"); - TEST_EQ(vb2_nv_get(ctx, VB2_NV_DISABLE_DEV_REQUEST), 0, - " disable dev request"); - - /* Power off */ - reset_common_data(FOR_DEVELOPER); - add_mock_vbtlk(VB2_SUCCESS, VB_DISK_FLAG_FIXED); - /* Navigate to the bottom most menu item */ - add_mock_keypress(VB_KEY_DOWN); - add_mock_keypress(VB_KEY_DOWN); - add_mock_keypress(VB_KEY_DOWN); - add_mock_keypress(VB_KEY_ENTER); - TEST_EQ(vb2_developer_menu(ctx), VB2_REQUEST_SHUTDOWN, - "select power off"); - - VB2_DEBUG("...done.\n"); -} - -static void debug_info_tests(void) -{ - VB2_DEBUG("Testing debug info screen...\n"); - - /* Tab = debug info for all menus */ - reset_common_data(FOR_DEVELOPER); - add_mock_keypress('\t'); - TEST_EQ(vb2_developer_menu(ctx), VB2_REQUEST_SHUTDOWN, - "tab = debug info in dev mode"); - DISPLAYED_PASS(); - DISPLAYED_EQ("debug info", VB2_SCREEN_DEBUG_INFO, MOCK_IGNORE, - MOCK_IGNORE, MOCK_IGNORE, MOCK_IGNORE, MOCK_IGNORE); - DISPLAYED_NO_EXTRA(); - - VB2_DEBUG("...done.\n"); -} - -static void developer_screen_tests(void) -{ - VB2_DEBUG("Testing developer mode screens...\n"); - - /* Dev mode: default selected item */ - reset_common_data(FOR_DEVELOPER); - add_mock_vbtlk(VB2_SUCCESS, VB_DISK_FLAG_FIXED); - TEST_EQ(vb2_developer_menu(ctx), VB2_SUCCESS, - "dev mode screen: set default selection to boot internal"); - DISPLAYED_EQ("dev mode screen", VB2_SCREEN_DEVELOPER_MODE, - MOCK_IGNORE, 2, MOCK_IGNORE, MOCK_IGNORE, MOCK_IGNORE); - - reset_common_data(FOR_DEVELOPER); - add_mock_vbtlk(VB2_SUCCESS, VB_DISK_FLAG_REMOVABLE); - mock_default_boot = VB2_DEV_DEFAULT_BOOT_TARGET_EXTERNAL; - TEST_EQ(vb2_developer_menu(ctx), VB2_SUCCESS, - "dev mode screen: set default selection to boot external"); - DISPLAYED_EQ("dev mode screen", VB2_SCREEN_DEVELOPER_MODE, - MOCK_IGNORE, 3, MOCK_IGNORE, MOCK_IGNORE, MOCK_IGNORE); - - /* Dev mode: disabled and hidden item mask */ - reset_common_data(FOR_DEVELOPER); - ctx->flags |= VB2_CONTEXT_DEV_BOOT_ALTFW_ALLOWED; - add_mock_vbtlk(VB2_SUCCESS, VB_DISK_FLAG_FIXED); - TEST_EQ(vb2_developer_menu(ctx), VB2_SUCCESS, - "dev mode screen: no disabled or hidden item"); - DISPLAYED_EQ("dev mode screen", VB2_SCREEN_DEVELOPER_MODE, - MOCK_IGNORE, MOCK_IGNORE, 0x0, 0x0, MOCK_IGNORE); - - reset_common_data(FOR_DEVELOPER); - ctx->flags |= VB2_CONTEXT_DEV_BOOT_ALTFW_ALLOWED; - gbb.flags |= VB2_GBB_FLAG_FORCE_DEV_SWITCH_ON; - add_mock_vbtlk(VB2_SUCCESS, VB_DISK_FLAG_FIXED); - TEST_EQ(vb2_developer_menu(ctx), VB2_SUCCESS, - "dev mode screen: hide to_norm item"); - DISPLAYED_EQ("dev mode screen", VB2_SCREEN_DEVELOPER_MODE, - MOCK_IGNORE, MOCK_IGNORE, 0x0, 0x2, MOCK_IGNORE); - - reset_common_data(FOR_DEVELOPER); - add_mock_vbtlk(VB2_SUCCESS, VB_DISK_FLAG_FIXED); - ctx->flags &= ~(uint64_t)VB2_CONTEXT_DEV_BOOT_EXTERNAL_ALLOWED; - ctx->flags |= VB2_CONTEXT_DEV_BOOT_ALTFW_ALLOWED; - TEST_EQ(vb2_developer_menu(ctx), VB2_SUCCESS, - "dev mode screen: hide boot external"); - DISPLAYED_EQ("dev mode screen", VB2_SCREEN_DEVELOPER_MODE, - MOCK_IGNORE, MOCK_IGNORE, 0x0, 0x8, MOCK_IGNORE); - - /* Dev mode screen */ - reset_common_data(FOR_DEVELOPER); /* Select #2 by default */ - add_mock_vbtlk(VB2_SUCCESS, VB_DISK_FLAG_FIXED); - /* #0: Language menu */ - add_mock_keypress(VB_KEY_UP); - add_mock_keypress(VB_KEY_UP); - add_mock_keypress(VB_KEY_ENTER); - /* #1: Return to secure mode */ - add_mock_keypress(VB_KEY_ESC); - add_mock_keypress(VB_KEY_DOWN); - add_mock_keypress(VB_KEY_ENTER); - /* #2: Boot internal */ - add_mock_keypress(VB_KEY_ESC); - add_mock_keypress(VB_KEY_DOWN); - add_mock_keypress(VB_KEY_ENTER); - TEST_EQ(vb2_developer_menu(ctx), VB2_SUCCESS, - "dev mode screen"); - /* #0: Language menu */ - DISPLAYED_PASS(); - DISPLAYED_PASS(); - DISPLAYED_EQ("dev mode", VB2_SCREEN_DEVELOPER_MODE, - MOCK_IGNORE, 0, MOCK_IGNORE, MOCK_IGNORE, MOCK_IGNORE); - DISPLAYED_EQ("#0: language menu", VB2_SCREEN_LANGUAGE_SELECT, - MOCK_IGNORE, MOCK_IGNORE, MOCK_IGNORE, MOCK_IGNORE, - MOCK_IGNORE); - /* #1: Return to secure mode */ - DISPLAYED_PASS(); - DISPLAYED_EQ("dev mode", VB2_SCREEN_DEVELOPER_MODE, - MOCK_IGNORE, 1, MOCK_IGNORE, MOCK_IGNORE, MOCK_IGNORE); - DISPLAYED_EQ("#1: return to secure mode", VB2_SCREEN_DEVELOPER_TO_NORM, - MOCK_IGNORE, MOCK_IGNORE, MOCK_IGNORE, MOCK_IGNORE, - MOCK_IGNORE); - /* #2: Boot internal */ - DISPLAYED_PASS(); - DISPLAYED_EQ("dev mode", VB2_SCREEN_DEVELOPER_MODE, - MOCK_IGNORE, 2, MOCK_IGNORE, MOCK_IGNORE, MOCK_IGNORE); - VB2_DEBUG("#2: boot internal (no extra screen)\n"); - DISPLAYED_NO_EXTRA(); - - reset_common_data(FOR_DEVELOPER); /* Select #3 by default */ - add_mock_vbtlk(VB2_SUCCESS, VB_DISK_FLAG_REMOVABLE); - mock_default_boot = VB2_DEV_DEFAULT_BOOT_TARGET_EXTERNAL; - /* #3: Boot external */ - add_mock_keypress(VB_KEY_ENTER); - TEST_EQ(vb2_developer_menu(ctx), VB2_SUCCESS, - "dev mode screen"); - /* #3: Boot external */ - DISPLAYED_EQ("dev mode", VB2_SCREEN_DEVELOPER_MODE, - MOCK_IGNORE, 3, MOCK_IGNORE, MOCK_IGNORE, MOCK_IGNORE); - VB2_DEBUG("#3: boot external (no extra screen)\n"); - DISPLAYED_NO_EXTRA(); - - reset_common_data(FOR_DEVELOPER); /* Select #2 by default */ - ctx->flags |= VB2_CONTEXT_DEV_BOOT_ALTFW_ALLOWED; - /* #4: Alternate boot */ - add_mock_keypress(VB_KEY_DOWN); - add_mock_keypress(VB_KEY_DOWN); - add_mock_keypress(VB_KEY_ENTER); - add_mock_keypress(VB_KEY_ENTER); - TEST_EQ(vb2_developer_menu(ctx), VB2_REQUEST_SHUTDOWN, - "dev mode screen"); - TEST_EQ(mock_run_altfw_called, 1, " vb2ex_run_altfw called"); - - reset_common_data(FOR_DEVELOPER); /* Select #2 by default */ - add_mock_vbtlk(VB2_SUCCESS, VB_DISK_FLAG_FIXED); - /* #5: Advanced options */ - add_mock_keypress(VB_KEY_DOWN); - add_mock_keypress(VB_KEY_DOWN); - add_mock_keypress(VB_KEY_ENTER); - /* End of menu */ - add_mock_keypress(VB_KEY_ESC); - add_mock_keypress(VB_KEY_DOWN); - add_mock_keypress(VB_KEY_DOWN); /* Blocked */ - TEST_EQ(vb2_developer_menu(ctx), VB2_REQUEST_SHUTDOWN, - "dev mode screen"); - /* #5: Advanced options */ - DISPLAYED_PASS(); - DISPLAYED_PASS(); - DISPLAYED_EQ("dev mode", VB2_SCREEN_DEVELOPER_MODE, - MOCK_IGNORE, 5, MOCK_IGNORE, MOCK_IGNORE, MOCK_IGNORE); - DISPLAYED_EQ("#4: advanced options", VB2_SCREEN_ADVANCED_OPTIONS, - MOCK_IGNORE, MOCK_IGNORE, MOCK_IGNORE, MOCK_IGNORE, - MOCK_IGNORE); - /* End of menu */ - DISPLAYED_PASS(); - DISPLAYED_EQ("end of menu", VB2_SCREEN_DEVELOPER_MODE, - MOCK_IGNORE, 6, MOCK_IGNORE, MOCK_IGNORE, MOCK_IGNORE); - DISPLAYED_NO_EXTRA(); - - /* Advanced options screen: disabled and hidden item mask */ - reset_common_data(FOR_DEVELOPER); - add_mock_keypress(VB_KEY_DOWN); - add_mock_keypress(VB_KEY_DOWN); - add_mock_keypress(VB_KEY_ENTER); - TEST_EQ(vb2_developer_menu(ctx), VB2_REQUEST_SHUTDOWN, - "advanced options screen: hide to_dev"); - DISPLAYED_PASS(); - DISPLAYED_PASS(); - DISPLAYED_PASS(); - DISPLAYED_EQ("advanced options", VB2_SCREEN_ADVANCED_OPTIONS, - MOCK_IGNORE, MOCK_IGNORE, 0x0, 0x2, MOCK_IGNORE); - - /* Advanced options screen */ - reset_common_data(FOR_DEVELOPER); - add_mock_keypress(VB_KEY_DOWN); - add_mock_keypress(VB_KEY_DOWN); - add_mock_keypress(VB_KEY_ENTER); - /* #0: Language menu */ - add_mock_keypress(VB_KEY_UP); - add_mock_keypress(VB_KEY_ENTER); - /* #1: (Hidden) */ - /* #2: Debug info */ - add_mock_keypress(VB_KEY_ESC); - add_mock_keypress(VB_KEY_DOWN); - add_mock_keypress(VB_KEY_ENTER); - /* #3: Firmware log */ - add_mock_keypress(VB_KEY_ESC); - add_mock_keypress(VB_KEY_DOWN); - add_mock_keypress(VB_KEY_ENTER); - /* #4: Back */ - add_mock_keypress(VB_KEY_ESC); - add_mock_keypress(VB_KEY_DOWN); - add_mock_keypress(VB_KEY_ENTER); - /* End of menu */ - add_mock_keypress(VB_KEY_ENTER); - extend_calls_until_shutdown(); - TEST_EQ(vb2_developer_menu(ctx), VB2_REQUEST_SHUTDOWN, - "advanced options screen"); - DISPLAYED_PASS(); - DISPLAYED_PASS(); - DISPLAYED_PASS(); - DISPLAYED_PASS(); - /* #0: Language menu */ - DISPLAYED_EQ("advanced options", VB2_SCREEN_ADVANCED_OPTIONS, - MOCK_IGNORE, 0, MOCK_IGNORE, MOCK_IGNORE, MOCK_IGNORE); - DISPLAYED_EQ("#0: language menu", VB2_SCREEN_LANGUAGE_SELECT, - MOCK_IGNORE, MOCK_IGNORE, MOCK_IGNORE, MOCK_IGNORE, - MOCK_IGNORE); - /* #1: (Hidden) */ - /* #2: Debug info */ - DISPLAYED_PASS(); - DISPLAYED_EQ("advanced options", VB2_SCREEN_ADVANCED_OPTIONS, - MOCK_IGNORE, 2, MOCK_IGNORE, MOCK_IGNORE, MOCK_IGNORE); - DISPLAYED_EQ("#2: debug info", VB2_SCREEN_DEBUG_INFO, - MOCK_IGNORE, MOCK_IGNORE, MOCK_IGNORE, MOCK_IGNORE, - MOCK_IGNORE); - /* #3: Firmware log */ - DISPLAYED_PASS(); - DISPLAYED_EQ("advanced options", VB2_SCREEN_ADVANCED_OPTIONS, - MOCK_IGNORE, 3, MOCK_IGNORE, MOCK_IGNORE, MOCK_IGNORE); - DISPLAYED_EQ("#3: firmware log", VB2_SCREEN_FIRMWARE_LOG, - MOCK_IGNORE, MOCK_IGNORE, MOCK_IGNORE, MOCK_IGNORE, - MOCK_IGNORE); - /* #4: Back */ - DISPLAYED_PASS(); - DISPLAYED_EQ("advanced options", VB2_SCREEN_ADVANCED_OPTIONS, - MOCK_IGNORE, 4, MOCK_IGNORE, MOCK_IGNORE, MOCK_IGNORE); - DISPLAYED_EQ("#4: back", VB2_SCREEN_DEVELOPER_MODE, - MOCK_IGNORE, MOCK_IGNORE, MOCK_IGNORE, MOCK_IGNORE, - MOCK_IGNORE); - /* End of menu */ - DISPLAYED_EQ("end of menu", VB2_SCREEN_ADVANCED_OPTIONS, - MOCK_IGNORE, 2, MOCK_IGNORE, MOCK_IGNORE, MOCK_IGNORE); - DISPLAYED_NO_EXTRA(); - - VB2_DEBUG("...done.\n"); -} - static void diagnostics_screen_tests(void) { VB2_DEBUG("Testing diagnostic screens...\n"); @@ -1146,11 +648,7 @@ static void diagnostics_screen_tests(void) int main(void) { - developer_tests(); - debug_info_tests(); - /* Screen displayed */ - developer_screen_tests(); diagnostics_screen_tests(); return gTestSuccess ? 0 : 255; diff --git a/tests/vboot_api_kernel4_tests.c b/tests/vboot_api_kernel4_tests.c index 2e4026df..14c6ea34 100644 --- a/tests/vboot_api_kernel4_tests.c +++ b/tests/vboot_api_kernel4_tests.c @@ -137,7 +137,7 @@ static vb2_error_t boot_dev(struct vb2_context *c) return vbboot_retval; } -vb2_error_t vb2_developer_menu(struct vb2_context *c) +vb2_error_t vb2ex_developer_ui(struct vb2_context *c) { return boot_dev(c); } |