Don't rollback if the other partition isn't valid.
Before we start a rollback to the other OS slot, validate the GPT flags show
it as bootable. This should prevent us from attempting a rollback if an
update has been attempted and failed, or is currently in progress. Such
a rollback would always fail, since the other partition would be left in
a partially modified state.
Piggyback:
Move sanity test in hardware that was added to the wrong method.
Undid some unittest changes that were decided against after the fact.
BUG=chromium:267054
TEST=Unittests
Manual Update Rollbacks (with/without flags on other partition)
Change-Id: Ide6b0673855ba2e4b05a0db93413a1a9f2ece2a9
Reviewed-on: https://chromium-review.googlesource.com/176755
Reviewed-by: David Zeuthen <zeuthen@chromium.org>
Commit-Queue: Don Garrett <dgarrett@chromium.org>
Tested-by: Don Garrett <dgarrett@chromium.org>
diff --git a/delta_performer_unittest.cc b/delta_performer_unittest.cc
index d2a3ebd..80aa064 100644
--- a/delta_performer_unittest.cc
+++ b/delta_performer_unittest.cc
@@ -1162,7 +1162,7 @@
DeltaPerformer *performer = new DeltaPerformer(&prefs,
&mock_system_state,
&install_plan);
- FakeHardware& fake_hardware = mock_system_state.get_mock_hardware().fake();
+ FakeHardware* fake_hardware = mock_system_state.get_fake_hardware();
string temp_dir;
EXPECT_TRUE(utils::MakeTempDirectory("/tmp/PublicKeyFromResponseTests.XXXXXX",
@@ -1172,46 +1172,46 @@
EXPECT_EQ(0, System(StringPrintf("touch %s", existing_file.c_str())));
// Non-official build, non-existing public-key, key in response -> true
- fake_hardware.SetIsOfficialBuild(false);
+ fake_hardware->SetIsOfficialBuild(false);
performer->public_key_path_ = non_existing_file;
install_plan.public_key_rsa = "VGVzdAo="; // result of 'echo "Test" | base64'
EXPECT_TRUE(performer->GetPublicKeyFromResponse(&key_path));
EXPECT_FALSE(key_path.empty());
EXPECT_EQ(unlink(key_path.value().c_str()), 0);
// Same with official build -> false
- fake_hardware.SetIsOfficialBuild(true);
+ fake_hardware->SetIsOfficialBuild(true);
EXPECT_FALSE(performer->GetPublicKeyFromResponse(&key_path));
// Non-official build, existing public-key, key in response -> false
- fake_hardware.SetIsOfficialBuild(false);
+ fake_hardware->SetIsOfficialBuild(false);
performer->public_key_path_ = existing_file;
install_plan.public_key_rsa = "VGVzdAo="; // result of 'echo "Test" | base64'
EXPECT_FALSE(performer->GetPublicKeyFromResponse(&key_path));
// Same with official build -> false
- fake_hardware.SetIsOfficialBuild(true);
+ fake_hardware->SetIsOfficialBuild(true);
EXPECT_FALSE(performer->GetPublicKeyFromResponse(&key_path));
// Non-official build, non-existing public-key, no key in response -> false
- fake_hardware.SetIsOfficialBuild(false);
+ fake_hardware->SetIsOfficialBuild(false);
performer->public_key_path_ = non_existing_file;
install_plan.public_key_rsa = "";
EXPECT_FALSE(performer->GetPublicKeyFromResponse(&key_path));
// Same with official build -> false
- fake_hardware.SetIsOfficialBuild(true);
+ fake_hardware->SetIsOfficialBuild(true);
EXPECT_FALSE(performer->GetPublicKeyFromResponse(&key_path));
// Non-official build, existing public-key, no key in response -> false
- fake_hardware.SetIsOfficialBuild(false);
+ fake_hardware->SetIsOfficialBuild(false);
performer->public_key_path_ = existing_file;
install_plan.public_key_rsa = "";
EXPECT_FALSE(performer->GetPublicKeyFromResponse(&key_path));
// Same with official build -> false
- fake_hardware.SetIsOfficialBuild(true);
+ fake_hardware->SetIsOfficialBuild(true);
EXPECT_FALSE(performer->GetPublicKeyFromResponse(&key_path));
// Non-official build, non-existing public-key, key in response
// but invalid base64 -> false
- fake_hardware.SetIsOfficialBuild(false);
+ fake_hardware->SetIsOfficialBuild(false);
performer->public_key_path_ = non_existing_file;
install_plan.public_key_rsa = "not-valid-base64";
EXPECT_FALSE(performer->GetPublicKeyFromResponse(&key_path));