summaryrefslogtreecommitdiff
path: root/payload_generator/payload_generation_config_unittest.cc
diff options
context:
space:
mode:
authorYifan Hong <elsk@google.com>2018-10-18 11:29:40 -0700
committerYifan Hong <elsk@google.com>2018-10-26 18:23:52 +0000
commit398cb549ae896e92bafa3f113ebf54150ee5ecc2 (patch)
tree9e065f836c56407d2e74ba2b70863f79a56421af /payload_generator/payload_generation_config_unittest.cc
parent549eb36af81d1d542efc80c1b79049a1fcea1380 (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.cc91
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