diff options
author | Yifan Hong <elsk@google.com> | 2019-09-16 13:18:22 -0700 |
---|---|---|
committer | Yifan Hong <elsk@google.com> | 2019-09-23 19:38:27 -0700 |
commit | 13d41cb2accc1e2e1271b22a53f0dce6db0493f5 (patch) | |
tree | a3f1a02ee80743e96abdd8be437411402b02b16d /dynamic_partition_control_android_unittest.cc | |
parent | 87ea73fe5a48c54ad56ba769375d180d1ce5c614 (diff) |
[REFACTOR] Pass DeltaArchiveManifest to DynamicPartitionControl
DynamicPartitionControl need the list of operations to calculate
COW sizes.
- Remove BootControlInterface::PartitionMetadata. Replace all references
with DeltaArchiveManifest. DeltaArchiveManifest has all information
that PartitionMetadata has.
- Rename all InitPartitionMetadata to PreparePartitionsForUpdate
- Change all PreparePartitionsForUpdate to use new signature
Bug: 138816109
Test: update_enigne_unittests --gtest_filter=*BootControl*:*Dynamic*
Change-Id: I4389ba2b1801addf8c3bc8395e2ea6a9a3ed27a0
Diffstat (limited to 'dynamic_partition_control_android_unittest.cc')
-rw-r--r-- | dynamic_partition_control_android_unittest.cc | 159 |
1 files changed, 81 insertions, 78 deletions
diff --git a/dynamic_partition_control_android_unittest.cc b/dynamic_partition_control_android_unittest.cc index 1a3f6647..552774e6 100644 --- a/dynamic_partition_control_android_unittest.cc +++ b/dynamic_partition_control_android_unittest.cc @@ -86,7 +86,7 @@ class DynamicPartitionControlAndroidTest : public ::testing::Test { LoadMetadataBuilder(GetSuperDevice(slot), slot, _)) .Times(AnyNumber()) .WillRepeatedly(Invoke([sizes](auto, auto, auto) { - return NewFakeMetadata(PartitionSuffixSizesToMetadata(sizes)); + return NewFakeMetadata(PartitionSuffixSizesToManifest(sizes)); })); } @@ -112,7 +112,7 @@ class DynamicPartitionControlAndroidTest : public ::testing::Test { } bool PreparePartitionsForUpdate(const PartitionSizes& partition_sizes) { return dynamicControl().PreparePartitionsForUpdate( - source(), target(), PartitionSizesToMetadata(partition_sizes)); + source(), target(), PartitionSizesToManifest(partition_sizes)); } void SetSlots(const TestParam& slots) { slots_ = slots; } @@ -125,24 +125,24 @@ class DynamicPartitionControlAndroidTest : public ::testing::Test { const PartitionSizes& update_metadata, const PartitionSuffixSizes& expected) { return UpdatePartitionMetadata( - PartitionSuffixSizesToMetadata(source_metadata), - PartitionSizesToMetadata(update_metadata), - PartitionSuffixSizesToMetadata(expected)); + PartitionSuffixSizesToManifest(source_metadata), + PartitionSizesToManifest(update_metadata), + PartitionSuffixSizesToManifest(expected)); } testing::AssertionResult UpdatePartitionMetadata( - const PartitionMetadata& source_metadata, - const PartitionMetadata& update_metadata, - const PartitionMetadata& expected) { + const DeltaArchiveManifest& source_manifest, + const DeltaArchiveManifest& update_manifest, + const DeltaArchiveManifest& expected) { return UpdatePartitionMetadata( - source_metadata, update_metadata, MetadataMatches(expected)); + source_manifest, update_manifest, MetadataMatches(expected)); } testing::AssertionResult UpdatePartitionMetadata( - const PartitionMetadata& source_metadata, - const PartitionMetadata& update_metadata, + const DeltaArchiveManifest& source_manifest, + const DeltaArchiveManifest& update_manifest, const Matcher<MetadataBuilder*>& matcher) { - auto super_metadata = NewFakeMetadata(source_metadata); + auto super_metadata = NewFakeMetadata(source_manifest); if (!module_->UpdatePartitionMetadata( - super_metadata.get(), target(), update_metadata)) { + super_metadata.get(), target(), update_manifest)) { return testing::AssertionFailure() << "UpdatePartitionMetadataInternal failed"; } @@ -290,112 +290,115 @@ INSTANTIATE_TEST_CASE_P(DynamicPartitionControlAndroidTest, class DynamicPartitionControlAndroidGroupTestP : public DynamicPartitionControlAndroidTestP { public: - PartitionMetadata source_metadata; + DeltaArchiveManifest source_manifest; void SetUp() override { DynamicPartitionControlAndroidTestP::SetUp(); - source_metadata = { - .groups = {SimpleGroup(S("android"), 3_GiB, S("system"), 2_GiB), - SimpleGroup(S("oem"), 2_GiB, S("vendor"), 1_GiB), - SimpleGroup(T("android"), 3_GiB, T("system"), 0), - SimpleGroup(T("oem"), 2_GiB, T("vendor"), 0)}}; + AddGroupAndPartition( + &source_manifest, S("android"), 3_GiB, S("system"), 2_GiB); + AddGroupAndPartition(&source_manifest, S("oem"), 2_GiB, S("vendor"), 1_GiB); + AddGroupAndPartition(&source_manifest, T("android"), 3_GiB, T("system"), 0); + AddGroupAndPartition(&source_manifest, T("oem"), 2_GiB, T("vendor"), 0); } - // Return a simple group with only one partition. - PartitionMetadata::Group SimpleGroup(const string& group, - uint64_t group_size, - const string& partition, - uint64_t partition_size) { - return {.name = group, - .size = group_size, - .partitions = {{.name = partition, .size = partition_size}}}; + void AddGroupAndPartition(DeltaArchiveManifest* manifest, + const string& group, + uint64_t group_size, + const string& partition, + uint64_t partition_size) { + auto* g = AddGroup(manifest, group, group_size); + AddPartition(manifest, g, partition, partition_size); } }; // Allow to resize within group. TEST_P(DynamicPartitionControlAndroidGroupTestP, ResizeWithinGroup) { - PartitionMetadata expected{ - .groups = {SimpleGroup(T("android"), 3_GiB, T("system"), 3_GiB), - SimpleGroup(T("oem"), 2_GiB, T("vendor"), 2_GiB)}}; + DeltaArchiveManifest expected; + AddGroupAndPartition(&expected, T("android"), 3_GiB, T("system"), 3_GiB); + AddGroupAndPartition(&expected, T("oem"), 2_GiB, T("vendor"), 2_GiB); - PartitionMetadata update_metadata{ - .groups = {SimpleGroup("android", 3_GiB, "system", 3_GiB), - SimpleGroup("oem", 2_GiB, "vendor", 2_GiB)}}; + DeltaArchiveManifest update_manifest; + AddGroupAndPartition(&update_manifest, "android", 3_GiB, "system", 3_GiB); + AddGroupAndPartition(&update_manifest, "oem", 2_GiB, "vendor", 2_GiB); EXPECT_TRUE( - UpdatePartitionMetadata(source_metadata, update_metadata, expected)); + UpdatePartitionMetadata(source_manifest, update_manifest, expected)); } TEST_P(DynamicPartitionControlAndroidGroupTestP, NotEnoughSpaceForGroup) { - PartitionMetadata update_metadata{ - .groups = {SimpleGroup("android", 3_GiB, "system", 1_GiB), - SimpleGroup("oem", 2_GiB, "vendor", 3_GiB)}}; - EXPECT_FALSE(UpdatePartitionMetadata(source_metadata, update_metadata, {})) + DeltaArchiveManifest update_manifest; + AddGroupAndPartition(&update_manifest, "android", 3_GiB, "system", 1_GiB), + AddGroupAndPartition(&update_manifest, "oem", 2_GiB, "vendor", 3_GiB); + EXPECT_FALSE(UpdatePartitionMetadata(source_manifest, update_manifest, {})) << "Should not be able to grow over maximum size of group"; } TEST_P(DynamicPartitionControlAndroidGroupTestP, GroupTooBig) { - PartitionMetadata update_metadata{ - .groups = {{.name = "android", .size = 3_GiB}, - {.name = "oem", .size = 3_GiB}}}; - EXPECT_FALSE(UpdatePartitionMetadata(source_metadata, update_metadata, {})) + DeltaArchiveManifest update_manifest; + AddGroup(&update_manifest, "android", 3_GiB); + AddGroup(&update_manifest, "oem", 3_GiB); + EXPECT_FALSE(UpdatePartitionMetadata(source_manifest, update_manifest, {})) << "Should not be able to grow over size of super / 2"; } TEST_P(DynamicPartitionControlAndroidGroupTestP, AddPartitionToGroup) { - PartitionMetadata expected{ - .groups = {{.name = T("android"), - .size = 3_GiB, - .partitions = {{.name = T("system"), .size = 2_GiB}, - {.name = T("system_ext"), .size = 1_GiB}}}}}; - PartitionMetadata update_metadata{ - .groups = {{.name = "android", - .size = 3_GiB, - .partitions = {{.name = "system", .size = 2_GiB}, - {.name = "system_ext", .size = 1_GiB}}}, - SimpleGroup("oem", 2_GiB, "vendor", 2_GiB)}}; + DeltaArchiveManifest expected; + auto* g = AddGroup(&expected, T("android"), 3_GiB); + AddPartition(&expected, g, T("system"), 2_GiB); + AddPartition(&expected, g, T("system_ext"), 1_GiB); + + DeltaArchiveManifest update_manifest; + g = AddGroup(&update_manifest, "android", 3_GiB); + AddPartition(&update_manifest, g, "system", 2_GiB); + AddPartition(&update_manifest, g, "system_ext", 1_GiB); + AddGroupAndPartition(&update_manifest, "oem", 2_GiB, "vendor", 2_GiB); + EXPECT_TRUE( - UpdatePartitionMetadata(source_metadata, update_metadata, expected)); + UpdatePartitionMetadata(source_manifest, update_manifest, expected)); } TEST_P(DynamicPartitionControlAndroidGroupTestP, RemovePartitionFromGroup) { - PartitionMetadata expected{ - .groups = {{.name = T("android"), .size = 3_GiB, .partitions = {}}}}; - PartitionMetadata update_metadata{ - .groups = {{.name = "android", .size = 3_GiB, .partitions = {}}, - SimpleGroup("oem", 2_GiB, "vendor", 2_GiB)}}; + DeltaArchiveManifest expected; + AddGroup(&expected, T("android"), 3_GiB); + + DeltaArchiveManifest update_manifest; + AddGroup(&update_manifest, "android", 3_GiB); + AddGroupAndPartition(&update_manifest, "oem", 2_GiB, "vendor", 2_GiB); + EXPECT_TRUE( - UpdatePartitionMetadata(source_metadata, update_metadata, expected)); + UpdatePartitionMetadata(source_manifest, update_manifest, expected)); } TEST_P(DynamicPartitionControlAndroidGroupTestP, AddGroup) { - PartitionMetadata expected{ - .groups = { - SimpleGroup(T("new_group"), 2_GiB, T("new_partition"), 2_GiB)}}; - PartitionMetadata update_metadata{ - .groups = {SimpleGroup("android", 2_GiB, "system", 2_GiB), - SimpleGroup("oem", 1_GiB, "vendor", 1_GiB), - SimpleGroup("new_group", 2_GiB, "new_partition", 2_GiB)}}; + DeltaArchiveManifest expected; + AddGroupAndPartition( + &expected, T("new_group"), 2_GiB, T("new_partition"), 2_GiB); + + DeltaArchiveManifest update_manifest; + AddGroupAndPartition(&update_manifest, "android", 2_GiB, "system", 2_GiB); + AddGroupAndPartition(&update_manifest, "oem", 1_GiB, "vendor", 1_GiB); + AddGroupAndPartition( + &update_manifest, "new_group", 2_GiB, "new_partition", 2_GiB); EXPECT_TRUE( - UpdatePartitionMetadata(source_metadata, update_metadata, expected)); + UpdatePartitionMetadata(source_manifest, update_manifest, expected)); } TEST_P(DynamicPartitionControlAndroidGroupTestP, RemoveGroup) { - PartitionMetadata update_metadata{ - .groups = {SimpleGroup("android", 2_GiB, "system", 2_GiB)}}; + DeltaArchiveManifest update_manifest; + AddGroupAndPartition(&update_manifest, "android", 2_GiB, "system", 2_GiB); EXPECT_TRUE(UpdatePartitionMetadata( - source_metadata, update_metadata, Not(HasGroup(T("oem"))))); + source_manifest, update_manifest, Not(HasGroup(T("oem"))))); } TEST_P(DynamicPartitionControlAndroidGroupTestP, ResizeGroup) { - PartitionMetadata expected{ - .groups = {SimpleGroup(T("android"), 2_GiB, T("system"), 2_GiB), - SimpleGroup(T("oem"), 3_GiB, T("vendor"), 3_GiB)}}; - PartitionMetadata update_metadata{ - .groups = {SimpleGroup("android", 2_GiB, "system", 2_GiB), - SimpleGroup("oem", 3_GiB, "vendor", 3_GiB)}}; + DeltaArchiveManifest expected; + AddGroupAndPartition(&expected, T("android"), 2_GiB, T("system"), 2_GiB); + AddGroupAndPartition(&expected, T("oem"), 3_GiB, T("vendor"), 3_GiB); + DeltaArchiveManifest update_manifest; + AddGroupAndPartition(&update_manifest, "android", 2_GiB, "system", 2_GiB), + AddGroupAndPartition(&update_manifest, "oem", 3_GiB, "vendor", 3_GiB); EXPECT_TRUE( - UpdatePartitionMetadata(source_metadata, update_metadata, expected)); + UpdatePartitionMetadata(source_manifest, update_manifest, expected)); } INSTANTIATE_TEST_CASE_P(DynamicPartitionControlAndroidTest, |