updater: Add TransferList class.

This would be the top-level class that represents and holds the info
parsed from a transfer list file.

Bug: 112151972
Test: Run recovery_unit_test and recovery_component_test on marlin.
Change-Id: I83b54df9d1411542eeeb8ef4a2db167e97f989c3
This commit is contained in:
Tao Bao
2018-08-17 09:37:26 -07:00
parent fae0881528
commit f8811bbd3a
4 changed files with 186 additions and 10 deletions
+12 -10
View File
@@ -56,8 +56,6 @@ using namespace std::string_literals;
using PackageEntries = std::unordered_map<std::string, std::string>;
static constexpr size_t kTransferListHeaderLines = 4;
struct selabel_handle* sehandle = nullptr;
static void expect(const char* expected, const std::string& expr_str, CauseCode cause_code,
@@ -846,7 +844,8 @@ TEST_F(UpdaterTest, last_command_update) {
};
// "2\nstash " + block3_hash + " 2,2,3"
std::string last_command_content = "2\n" + transfer_list_fail[kTransferListHeaderLines + 2];
std::string last_command_content =
"2\n" + transfer_list_fail[TransferList::kTransferListHeaderLines + 2];
RunBlockImageUpdate(false, entries, image_file_, "");
@@ -895,7 +894,8 @@ TEST_F(UpdaterTest, last_command_update_unresumable) {
ASSERT_TRUE(android::base::WriteStringToFile(block1 + block1, image_file_));
std::string last_command_content = "0\n" + transfer_list_unresumable[kTransferListHeaderLines];
std::string last_command_content =
"0\n" + transfer_list_unresumable[TransferList::kTransferListHeaderLines];
ASSERT_TRUE(android::base::WriteStringToFile(last_command_content, last_command_file_));
RunBlockImageUpdate(false, entries, image_file_, "");
@@ -934,7 +934,8 @@ TEST_F(UpdaterTest, last_command_verify) {
ASSERT_TRUE(android::base::WriteStringToFile(block1 + block1 + block3, image_file_));
// Last command: "move " + block1_hash + " 2,1,2 1 2,0,1"
std::string last_command_content = "2\n" + transfer_list_verify[kTransferListHeaderLines + 2];
std::string last_command_content =
"2\n" + transfer_list_verify[TransferList::kTransferListHeaderLines + 2];
// First run: expect the verification to succeed and the last_command_file is intact.
ASSERT_TRUE(android::base::WriteStringToFile(last_command_content, last_command_file_));
@@ -1129,16 +1130,17 @@ static const std::vector<std::string> g_transfer_list = GenerateTransferList();
INSTANTIATE_TEST_CASE_P(InterruptAfterEachCommand, ResumableUpdaterTest,
::testing::Range(static_cast<size_t>(0),
g_transfer_list.size() - kTransferListHeaderLines));
g_transfer_list.size() -
TransferList::kTransferListHeaderLines));
TEST_P(ResumableUpdaterTest, InterruptVerifyResume) {
ASSERT_TRUE(android::base::WriteStringToFile(g_source_image, image_file_));
LOG(INFO) << "Interrupting at line " << index_ << " ("
<< g_transfer_list[kTransferListHeaderLines + index_] << ")";
<< g_transfer_list[TransferList::kTransferListHeaderLines + index_] << ")";
std::vector<std::string> transfer_list_copy{ g_transfer_list };
transfer_list_copy[kTransferListHeaderLines + index_] = "abort";
transfer_list_copy[TransferList::kTransferListHeaderLines + index_] = "abort";
g_entries["transfer_list"] = android::base::Join(transfer_list_copy, '\n');
@@ -1151,8 +1153,8 @@ TEST_P(ResumableUpdaterTest, InterruptVerifyResume) {
if (index_ == 0) {
ASSERT_EQ(-1, access(last_command_file_.c_str(), R_OK));
} else {
last_command_expected =
std::to_string(index_ - 1) + "\n" + g_transfer_list[kTransferListHeaderLines + index_ - 1];
last_command_expected = std::to_string(index_ - 1) + "\n" +
g_transfer_list[TransferList::kTransferListHeaderLines + index_ - 1];
std::string last_command_actual;
ASSERT_TRUE(android::base::ReadFileToString(last_command_file_, &last_command_actual));
ASSERT_EQ(last_command_expected, last_command_actual);