Support per-partition timestamps
update_engine is heading toward supporting partial updates, which an OTA
update can update just a subset of all partitions. In this context, a
single max_timestamp in OTA manifest is insufficient for checking
potential downgrades, as different partitions can have different
timestamps. This CL adds per-partition timestamp support on
update_engine side. update_engine will accept a payload with
per-partition timestamps and reject the update if any partition has an
older timestamp.
Changes made:
1. Add new version field to PartitionUpdate protobuf message.
2. Add new methods to HardwareInterface for fetching/checking
timestamp of each partition.
3. Update delta_performer to invoke new APIs in 2 properly.
4. Add relevant testcases.
Test: unittest
Bug: 162553432
Change-Id: I767343e003fd35ce0d22197b15040488cf30be30
diff --git a/common/utils_unittest.cc b/common/utils_unittest.cc
index ebcc548..37871d2 100644
--- a/common/utils_unittest.cc
+++ b/common/utils_unittest.cc
@@ -481,4 +481,12 @@
IGNORE_EINTR(close(fd));
}
+TEST(UtilsTest, ValidatePerPartitionTimestamp) {
+ ASSERT_FALSE(utils::IsTimestampNewer("10", "5"));
+ ASSERT_TRUE(utils::IsTimestampNewer("10", "11"));
+ ASSERT_FALSE(utils::IsTimestampNewer("10", "lol"));
+ ASSERT_FALSE(utils::IsTimestampNewer("lol", "ZZZ"));
+ ASSERT_TRUE(utils::IsTimestampNewer("10", ""));
+}
+
} // namespace chromeos_update_engine