Loading fs_mgr/fs_mgr_fstab.cpp +6 −1 Original line number Diff line number Diff line Loading @@ -657,7 +657,12 @@ void TransformFstabForDsu(Fstab* fstab, const std::string& dsu_slot, if (partition_ext4 == fstab->end()) { auto new_entry = *GetEntryForMountPoint(fstab, mount_point); new_entry.fs_type = "ext4"; fstab->emplace_back(new_entry); auto it = std::find_if(fstab->rbegin(), fstab->rend(), [&mount_point](const auto& entry) { return entry.mount_point == mount_point; }); auto end_of_mount_point_group = fstab->begin() + std::distance(it, fstab->rend()); fstab->insert(end_of_mount_point_group, new_entry); } } } Loading fs_mgr/tests/fs_mgr_test.cpp +73 −0 Original line number Diff line number Diff line Loading @@ -1104,3 +1104,76 @@ source none6 swap defaults readahead_size_kb=0 EXPECT_TRUE(CompareFlags(flags, entry->fs_mgr_flags)); EXPECT_EQ(0, entry->readahead_size_kb); } TEST(fs_mgr, TransformFstabForDsu) { TemporaryFile tf; ASSERT_TRUE(tf.fd != -1); std::string fstab_contents = R"fs( system /system erofs ro wait,logical,first_stage_mount system /system ext4 ro wait,logical,first_stage_mount vendor /vendor ext4 ro wait,logical,first_stage_mount data /data f2fs noatime wait )fs"; ASSERT_TRUE(android::base::WriteStringToFile(fstab_contents, tf.path)); Fstab fstab; EXPECT_TRUE(ReadFstabFromFile(tf.path, &fstab)); TransformFstabForDsu(&fstab, "dsu", {"system_gsi", "userdata_gsi"}); ASSERT_EQ(4U, fstab.size()); auto entry = fstab.begin(); EXPECT_EQ("/system", entry->mount_point); EXPECT_EQ("system_gsi", entry->blk_device); entry++; EXPECT_EQ("/system", entry->mount_point); EXPECT_EQ("system_gsi", entry->blk_device); entry++; EXPECT_EQ("/vendor", entry->mount_point); EXPECT_EQ("vendor", entry->blk_device); entry++; EXPECT_EQ("/data", entry->mount_point); EXPECT_EQ("userdata_gsi", entry->blk_device); entry++; } TEST(fs_mgr, TransformFstabForDsu_synthesisExt4Entry) { TemporaryFile tf; ASSERT_TRUE(tf.fd != -1); std::string fstab_contents = R"fs( system /system erofs ro wait,logical,first_stage_mount vendor /vendor ext4 ro wait,logical,first_stage_mount data /data f2fs noatime wait )fs"; ASSERT_TRUE(android::base::WriteStringToFile(fstab_contents, tf.path)); Fstab fstab; EXPECT_TRUE(ReadFstabFromFile(tf.path, &fstab)); TransformFstabForDsu(&fstab, "dsu", {"system_gsi", "userdata_gsi"}); ASSERT_EQ(4U, fstab.size()); auto entry = fstab.begin(); EXPECT_EQ("/system", entry->mount_point); EXPECT_EQ("system_gsi", entry->blk_device); EXPECT_EQ("erofs", entry->fs_type); entry++; EXPECT_EQ("/system", entry->mount_point); EXPECT_EQ("system_gsi", entry->blk_device); EXPECT_EQ("ext4", entry->fs_type); entry++; EXPECT_EQ("/vendor", entry->mount_point); EXPECT_EQ("vendor", entry->blk_device); entry++; EXPECT_EQ("/data", entry->mount_point); EXPECT_EQ("userdata_gsi", entry->blk_device); entry++; } Loading
fs_mgr/fs_mgr_fstab.cpp +6 −1 Original line number Diff line number Diff line Loading @@ -657,7 +657,12 @@ void TransformFstabForDsu(Fstab* fstab, const std::string& dsu_slot, if (partition_ext4 == fstab->end()) { auto new_entry = *GetEntryForMountPoint(fstab, mount_point); new_entry.fs_type = "ext4"; fstab->emplace_back(new_entry); auto it = std::find_if(fstab->rbegin(), fstab->rend(), [&mount_point](const auto& entry) { return entry.mount_point == mount_point; }); auto end_of_mount_point_group = fstab->begin() + std::distance(it, fstab->rend()); fstab->insert(end_of_mount_point_group, new_entry); } } } Loading
fs_mgr/tests/fs_mgr_test.cpp +73 −0 Original line number Diff line number Diff line Loading @@ -1104,3 +1104,76 @@ source none6 swap defaults readahead_size_kb=0 EXPECT_TRUE(CompareFlags(flags, entry->fs_mgr_flags)); EXPECT_EQ(0, entry->readahead_size_kb); } TEST(fs_mgr, TransformFstabForDsu) { TemporaryFile tf; ASSERT_TRUE(tf.fd != -1); std::string fstab_contents = R"fs( system /system erofs ro wait,logical,first_stage_mount system /system ext4 ro wait,logical,first_stage_mount vendor /vendor ext4 ro wait,logical,first_stage_mount data /data f2fs noatime wait )fs"; ASSERT_TRUE(android::base::WriteStringToFile(fstab_contents, tf.path)); Fstab fstab; EXPECT_TRUE(ReadFstabFromFile(tf.path, &fstab)); TransformFstabForDsu(&fstab, "dsu", {"system_gsi", "userdata_gsi"}); ASSERT_EQ(4U, fstab.size()); auto entry = fstab.begin(); EXPECT_EQ("/system", entry->mount_point); EXPECT_EQ("system_gsi", entry->blk_device); entry++; EXPECT_EQ("/system", entry->mount_point); EXPECT_EQ("system_gsi", entry->blk_device); entry++; EXPECT_EQ("/vendor", entry->mount_point); EXPECT_EQ("vendor", entry->blk_device); entry++; EXPECT_EQ("/data", entry->mount_point); EXPECT_EQ("userdata_gsi", entry->blk_device); entry++; } TEST(fs_mgr, TransformFstabForDsu_synthesisExt4Entry) { TemporaryFile tf; ASSERT_TRUE(tf.fd != -1); std::string fstab_contents = R"fs( system /system erofs ro wait,logical,first_stage_mount vendor /vendor ext4 ro wait,logical,first_stage_mount data /data f2fs noatime wait )fs"; ASSERT_TRUE(android::base::WriteStringToFile(fstab_contents, tf.path)); Fstab fstab; EXPECT_TRUE(ReadFstabFromFile(tf.path, &fstab)); TransformFstabForDsu(&fstab, "dsu", {"system_gsi", "userdata_gsi"}); ASSERT_EQ(4U, fstab.size()); auto entry = fstab.begin(); EXPECT_EQ("/system", entry->mount_point); EXPECT_EQ("system_gsi", entry->blk_device); EXPECT_EQ("erofs", entry->fs_type); entry++; EXPECT_EQ("/system", entry->mount_point); EXPECT_EQ("system_gsi", entry->blk_device); EXPECT_EQ("ext4", entry->fs_type); entry++; EXPECT_EQ("/vendor", entry->mount_point); EXPECT_EQ("vendor", entry->blk_device); entry++; EXPECT_EQ("/data", entry->mount_point); EXPECT_EQ("userdata_gsi", entry->blk_device); entry++; }