diff options
author | Yifan Hong <elsk@google.com> | 2018-10-18 11:29:40 -0700 |
---|---|---|
committer | Yifan Hong <elsk@google.com> | 2018-10-26 18:23:52 +0000 |
commit | 398cb549ae896e92bafa3f113ebf54150ee5ecc2 (patch) | |
tree | 9e065f836c56407d2e74ba2b70863f79a56421af /payload_generator/payload_generation_config_unittest.cc | |
parent | 549eb36af81d1d542efc80c1b79049a1fcea1380 (diff) |
Add dynamic_partition_metadata to update manifest
At build time, it will be filled with BOARD_SUPER_PARTITION_GROUPS,
BOARD_*_SIZE, and BOARD_*_PARTITION_LIST.
Only the information from the new target_files package is used. The
META/dynamic_partition_info.txt from old target_files is ignored.
Test: builds and manual OTA
Bug: 117182932
Change-Id: I02ce99caaf7d01cec1470f7262c45490c15dfcb7
Diffstat (limited to 'payload_generator/payload_generation_config_unittest.cc')
-rw-r--r-- | payload_generator/payload_generation_config_unittest.cc | 91 |
1 files changed, 91 insertions, 0 deletions
diff --git a/payload_generator/payload_generation_config_unittest.cc b/payload_generator/payload_generation_config_unittest.cc index 3545056c..70a3df31 100644 --- a/payload_generator/payload_generation_config_unittest.cc +++ b/payload_generator/payload_generation_config_unittest.cc @@ -16,6 +16,8 @@ #include "update_engine/payload_generator/payload_generation_config.h" +#include <utility> + #include <gtest/gtest.h> namespace chromeos_update_engine { @@ -51,4 +53,93 @@ TEST_F(PayloadGenerationConfigTest, LoadPostInstallConfigNameMismatchTest) { EXPECT_TRUE(image_config.partitions[0].postinstall.IsEmpty()); } +TEST_F(PayloadGenerationConfigTest, LoadDynamicPartitionMetadataTest) { + ImageConfig image_config; + brillo::KeyValueStore store; + ASSERT_TRUE( + store.LoadFromString("super_partition_groups=group_a group_b\n" + "group_a_size=3221225472\n" + "group_a_partition_list=system product_services\n" + "group_b_size=2147483648\n" + "group_b_partition_list=vendor\n")); + EXPECT_TRUE(image_config.LoadDynamicPartitionMetadata(store)); + ASSERT_NE(nullptr, image_config.dynamic_partition_metadata); + + ASSERT_EQ(2, image_config.dynamic_partition_metadata->groups_size()); + + const auto& group_a = image_config.dynamic_partition_metadata->groups(0); + EXPECT_EQ("group_a", group_a.name()); + EXPECT_EQ(3221225472u, group_a.size()); + ASSERT_EQ(2, group_a.partition_names_size()); + EXPECT_EQ("system", group_a.partition_names(0)); + EXPECT_EQ("product_services", group_a.partition_names(1)); + + const auto& group_b = image_config.dynamic_partition_metadata->groups(1); + EXPECT_EQ("group_b", group_b.name()); + EXPECT_EQ(2147483648u, group_b.size()); + ASSERT_EQ(1, group_b.partition_names_size()); + EXPECT_EQ("vendor", group_b.partition_names(0)); +} + +TEST_F(PayloadGenerationConfigTest, + LoadDynamicPartitionMetadataMissingSizeTest) { + ImageConfig image_config; + brillo::KeyValueStore store; + ASSERT_TRUE( + store.LoadFromString("super_partition_groups=foo\n" + "foo_partition_list=baz\n")); + EXPECT_FALSE(image_config.LoadDynamicPartitionMetadata(store)); + EXPECT_EQ(nullptr, image_config.dynamic_partition_metadata); +} + +TEST_F(PayloadGenerationConfigTest, LoadDynamicPartitionMetadataBadSizeTest) { + ImageConfig image_config; + brillo::KeyValueStore store; + ASSERT_TRUE( + store.LoadFromString("super_partition_groups=foo\n" + "foo_size=bar\n" + "foo_partition_list=baz\n")); + EXPECT_FALSE(image_config.LoadDynamicPartitionMetadata(store)); + EXPECT_EQ(nullptr, image_config.dynamic_partition_metadata); +} + +TEST_F(PayloadGenerationConfigTest, ValidateDynamicPartitionMetadata) { + ImageConfig image_config; + + PartitionConfig system("system"); + system.size = 2147483648u; + PartitionConfig product_services("product_services"); + product_services.size = 1073741824u; + + image_config.partitions.push_back(std::move(system)); + image_config.partitions.push_back(std::move(product_services)); + + brillo::KeyValueStore store; + ASSERT_TRUE( + store.LoadFromString("super_partition_groups=foo\n" + "foo_size=3221225472\n" + "foo_partition_list=system product_services\n")); + EXPECT_TRUE(image_config.LoadDynamicPartitionMetadata(store)); + EXPECT_NE(nullptr, image_config.dynamic_partition_metadata); + + EXPECT_TRUE(image_config.ValidateDynamicPartitionMetadata()); +} + +TEST_F(PayloadGenerationConfigTest, ValidateDynamicPartitionMetadataTooBig) { + ImageConfig image_config; + + PartitionConfig system("system"); + system.size = 4294967296u; + image_config.partitions.push_back(std::move(system)); + + brillo::KeyValueStore store; + ASSERT_TRUE( + store.LoadFromString("super_partition_groups=foo\n" + "foo_size=3221225472\n" + "foo_partition_list=system\n")); + EXPECT_TRUE(image_config.LoadDynamicPartitionMetadata(store)); + EXPECT_NE(nullptr, image_config.dynamic_partition_metadata); + + EXPECT_FALSE(image_config.ValidateDynamicPartitionMetadata()); +} } // namespace chromeos_update_engine |