summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorHsuan Ting Chen <roccochen@chromium.org>2020-09-15 15:30:00 +0800
committerCommit Bot <commit-bot@chromium.org>2020-09-17 05:09:39 +0000
commit4e5ce4293a724bce9e1fa36c5e305bdbc85946bd (patch)
tree38b606e00753d0c1d6e63ce1cfabb405579fb2da /tests
parent3fbb2d16c42b70a1fdf57dc693e10ca11c998d10 (diff)
downloadvboot-4e5ce4293a724bce9e1fa36c5e305bdbc85946bd.tar.gz
vboot/ui: Force to reacquire log on initializationstabilize-13482.B
Force to reacquire a newer firmware log snapshot every time when the user enters the firmware log screen. Re-entering (e.g. back from language selection or debug info tab) will still show the cached firmware log string. BUG=b:146399181, b:168442372 TEST=make clean && make runtests TEST=Build locally, navigate to the firmware log screen, go back, and enter the firmware log screen again. BRANCH=none Cq-Depend: chromium:2409742 Change-Id: I8c3eea23446c58603ce698a86f1aca4b264ebb0e Signed-off-by: Hsuan Ting Chen <roccochen@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/vboot_reference/+/2411761 Commit-Queue: Yu-Ping Wu <yupingso@chromium.org>
Diffstat (limited to 'tests')
-rw-r--r--tests/vb2_ui_tests.c90
1 files changed, 87 insertions, 3 deletions
diff --git a/tests/vb2_ui_tests.c b/tests/vb2_ui_tests.c
index 66916602..5dc1a2e7 100644
--- a/tests/vb2_ui_tests.c
+++ b/tests/vb2_ui_tests.c
@@ -91,6 +91,11 @@ static int mock_pp_pressed_total;
static int mock_enable_dev_mode;
+#define MOCK_PREPARE_LOG_SIZE 32
+
+static int mock_snapshot_count;
+static char mock_prepare_log[64][MOCK_PREPARE_LOG_SIZE];
+static int mock_prepare_log_count;
static uint32_t mock_log_page_count;
static void add_mock_key(uint32_t press, int trusted)
@@ -321,6 +326,8 @@ static void reset_common_data(enum reset_type t)
mock_enable_dev_mode = 0;
/* For vb2ex_prepare_log_screen */
+ mock_snapshot_count = 0;
+ mock_prepare_log_count = 0;
mock_log_page_count = 1;
/* Avoid Iteration #0 */
@@ -526,17 +533,26 @@ const char *vb2ex_get_debug_info(struct vb2_context *c)
return "mocked debug info";
}
-const char *vb2ex_get_firmware_log(void)
+const char *vb2ex_get_firmware_log(int reset)
{
- return "mocked firmware log";
+ static char mock_firmware_log_buf[MOCK_PREPARE_LOG_SIZE];
+ if (reset)
+ mock_snapshot_count++;
+ snprintf(mock_firmware_log_buf, MOCK_PREPARE_LOG_SIZE,
+ "%d", mock_snapshot_count);
+ return mock_firmware_log_buf;
}
uint32_t vb2ex_prepare_log_screen(const char *str)
{
+ if (mock_prepare_log_count < ARRAY_SIZE(mock_prepare_log))
+ strncpy(mock_prepare_log[mock_prepare_log_count],
+ str, MOCK_PREPARE_LOG_SIZE);
+ mock_prepare_log_count++;
+
return mock_log_page_count;
}
-
/* Tests */
static void developer_tests(void)
{
@@ -1168,6 +1184,73 @@ static void debug_info_tests(void)
VB2_DEBUG("...done.\n");
}
+static void firmware_log_tests(void)
+{
+ VB2_DEBUG("Testing firmware log screens...\n");
+
+ /* Get firmware log */
+ reset_common_data(FOR_MANUAL_RECOVERY);
+ add_mock_keypress(VB_KEY_DOWN);
+ add_mock_keypress(VB_KEY_DOWN);
+ if (DIAGNOSTIC_UI)
+ add_mock_keypress(VB_KEY_DOWN);
+ add_mock_keypress(VB_KEY_ENTER);
+ add_mock_keypress(VB_KEY_DOWN);
+ add_mock_keypress(VB_KEY_DOWN);
+ add_mock_keypress(VB_KEY_ENTER);
+ TEST_EQ(vb2_manual_recovery_menu(ctx), VB2_REQUEST_SHUTDOWN,
+ "get firmware log");
+ TEST_EQ(mock_prepare_log_count, 1,
+ " prepared firmware log once");
+ TEST_EQ(strcmp(mock_prepare_log[0], "1"), 0,
+ " got correct firmware log");
+
+ /* Enter firmware log screen again will reacquire a newer one */
+ reset_common_data(FOR_MANUAL_RECOVERY);
+ add_mock_keypress(VB_KEY_DOWN);
+ add_mock_keypress(VB_KEY_DOWN);
+ if (DIAGNOSTIC_UI)
+ add_mock_keypress(VB_KEY_DOWN);
+ add_mock_keypress(VB_KEY_ENTER);
+ add_mock_keypress(VB_KEY_DOWN);
+ add_mock_keypress(VB_KEY_DOWN);
+ add_mock_keypress(VB_KEY_ENTER);
+ add_mock_keypress(VB_KEY_ESC);
+ add_mock_keypress(VB_KEY_ENTER);
+ TEST_EQ(vb2_manual_recovery_menu(ctx), VB2_REQUEST_SHUTDOWN,
+ "enter the screen again and reacquire a new log");
+ TEST_EQ(mock_prepare_log_count, 2,
+ " prepared firmware log twice");
+ TEST_EQ(strcmp(mock_prepare_log[0], "1"), 0,
+ " got correct firmware log");
+ TEST_EQ(strcmp(mock_prepare_log[1], "2"), 0,
+ " got a new firmware log");
+
+ /* Back to firmware log screen again will not reacquire a newer one */
+ reset_common_data(FOR_MANUAL_RECOVERY);
+ add_mock_keypress(VB_KEY_DOWN);
+ add_mock_keypress(VB_KEY_DOWN);
+ if (DIAGNOSTIC_UI)
+ add_mock_keypress(VB_KEY_DOWN);
+ add_mock_keypress(VB_KEY_ENTER);
+ add_mock_keypress(VB_KEY_DOWN);
+ add_mock_keypress(VB_KEY_DOWN);
+ add_mock_keypress(VB_KEY_ENTER);
+ add_mock_keypress('\t'); /* enter debug info screen */
+ add_mock_keypress(VB_KEY_ESC);
+ TEST_EQ(vb2_manual_recovery_menu(ctx), VB2_REQUEST_SHUTDOWN,
+ "back to the screen and do not reacquire a new log");
+ TEST_EQ(mock_prepare_log_count, 3,
+ " prepared firmware log three times");
+ TEST_EQ(strcmp(mock_prepare_log[0], "1"), 0,
+ " got correct firmware log");
+ /* Skip entry #1 which is for preparing debug info */
+ TEST_EQ(strcmp(mock_prepare_log[2], "1"), 0,
+ " got the same firmware log");
+
+ VB2_DEBUG("...done.\n");
+}
+
static void developer_screen_tests(void)
{
VB2_DEBUG("Testing developer mode screens...\n");
@@ -1669,6 +1752,7 @@ int main(void)
manual_recovery_tests();
language_selection_tests();
debug_info_tests();
+ firmware_log_tests();
/* Screen displayed */
developer_screen_tests();