From b920b57715471fe9beadb251745cac0ca453c02c Mon Sep 17 00:00:00 2001 From: David Anderson Date: Mon, 18 May 2020 17:38:47 +0000 Subject: [PATCH] Re-enable boot HAL tests and make sure they restore previous slot flags. Bug: 154667790 Test: set slot to a run SetActiveBootSlot/SetSlotAsUnbootable tests fastboot reboot bootloader fastboot getvar current-slot shoud be a repeat on b slot Change-Id: Icff45d3949d0ad76d22bdf8830c0903e81027b6e Merged-In: Icff45d3949d0ad76d22bdf8830c0903e81027b6e --- .../functional/VtsHalBootV1_0TargetTest.cpp | 29 +++++++++++++++---- 1 file changed, 23 insertions(+), 6 deletions(-) diff --git a/boot/1.0/vts/functional/VtsHalBootV1_0TargetTest.cpp b/boot/1.0/vts/functional/VtsHalBootV1_0TargetTest.cpp index fbddf6d7e1..613c528a0a 100644 --- a/boot/1.0/vts/functional/VtsHalBootV1_0TargetTest.cpp +++ b/boot/1.0/vts/functional/VtsHalBootV1_0TargetTest.cpp @@ -82,6 +82,10 @@ TEST_P(BootHidlTest, MarkBootSuccessful) { // Sanity check Boot::setActiveBootSlot() on good and bad inputs. TEST_P(BootHidlTest, SetActiveBootSlot) { + Slot curSlot = boot->getCurrentSlot(); + Slot otherSlot = curSlot ? 0 : 1; + auto otherBootable = boot->isSlotBootable(otherSlot); + for (Slot s = 0; s < 2; s++) { CommandResult cr; Return result = boot->setActiveBootSlot(s, generate_callback(&cr)); @@ -90,7 +94,17 @@ TEST_P(BootHidlTest, SetActiveBootSlot) { { // Restore original flags to avoid problems on reboot CommandResult cr; - Return result = boot->markBootSuccessful(generate_callback(&cr)); + auto result = boot->setActiveBootSlot(curSlot, generate_callback(&cr)); + EXPECT_TRUE(result.isOk()); + EXPECT_TRUE(cr.success); + + if (otherBootable == BoolResult::FALSE) { + result = boot->setSlotAsUnbootable(otherSlot, generate_callback(&cr)); + EXPECT_TRUE(result.isOk()); + EXPECT_TRUE(cr.success); + } + + result = boot->markBootSuccessful(generate_callback(&cr)); EXPECT_TRUE(result.isOk()); EXPECT_TRUE(cr.success); } @@ -105,19 +119,22 @@ TEST_P(BootHidlTest, SetActiveBootSlot) { // Sanity check Boot::setSlotAsUnbootable() on good and bad inputs. TEST_P(BootHidlTest, SetSlotAsUnbootable) { + Slot curSlot = boot->getCurrentSlot(); + Slot otherSlot = curSlot ? 0 : 1; + auto otherBootable = boot->isSlotBootable(otherSlot); { CommandResult cr; - Slot curSlot = boot->getCurrentSlot(); - Slot otherSlot = curSlot ? 0 : 1; Return result = boot->setSlotAsUnbootable(otherSlot, generate_callback(&cr)); EXPECT_TRUE(result.isOk()); if (cr.success) { EXPECT_EQ(BoolResult::FALSE, boot->isSlotBootable(otherSlot)); // Restore original flags to avoid problems on reboot - result = boot->setActiveBootSlot(otherSlot, generate_callback(&cr)); - EXPECT_TRUE(result.isOk()); - EXPECT_TRUE(cr.success); + if (otherBootable == BoolResult::TRUE) { + result = boot->setActiveBootSlot(otherSlot, generate_callback(&cr)); + EXPECT_TRUE(result.isOk()); + EXPECT_TRUE(cr.success); + } result = boot->setActiveBootSlot(curSlot, generate_callback(&cr)); EXPECT_TRUE(result.isOk()); EXPECT_TRUE(cr.success);