Only prevent boot image downgrade if sysprop set.
Only return timestamp error if ro.build.ab_update.gki.prevent_downgrade_version is set.
Otherwise, log warning message and continue the update.
This allows devices that does not support GKI updates to install OTA packages where
the boot image has a lower version than the existing, which is supported before.
Bug: 162623577
Test: apply OTA on devices with and without sysprop set
Change-Id: Ie98fb49ffaae1aa60fc94766f53a6fbbae519a5b
diff --git a/hardware_android_unittest.cc b/hardware_android_unittest.cc
index 9a491f3..679356c 100644
--- a/hardware_android_unittest.cc
+++ b/hardware_android_unittest.cc
@@ -14,54 +14,70 @@
// limitations under the License.
//
+#include <gmock/gmock.h>
#include <gtest/gtest.h>
#include "update_engine/common/error_code.h"
-#include "update_engine/common/test_utils.h"
#include "update_engine/hardware_android.h"
+using ::testing::NiceMock;
+using ::testing::Return;
+
namespace chromeos_update_engine {
TEST(HardwareAndroidTest, IsKernelUpdateValid) {
EXPECT_EQ(ErrorCode::kSuccess,
- HardwareAndroid::IsKernelUpdateValid("5.4.42-not-gki", ""))
+ HardwareAndroid::IsKernelUpdateValid(
+ "5.4.42-not-gki", "", true /*prevent_downgrade*/))
<< "Legacy update should be fine";
- EXPECT_EQ(ErrorCode::kSuccess,
- HardwareAndroid::IsKernelUpdateValid("5.4.42-not-gki",
- "5.4.42-android12-0"))
+ EXPECT_EQ(
+ ErrorCode::kSuccess,
+ HardwareAndroid::IsKernelUpdateValid(
+ "5.4.42-not-gki", "5.4.42-android12-0", true /*prevent_downgrade*/))
<< "Update to GKI should be fine";
- EXPECT_EQ(
- ErrorCode::kDownloadManifestParseError,
- HardwareAndroid::IsKernelUpdateValid("5.4.42-not-gki", "5.4.42-not-gki"))
+ EXPECT_EQ(ErrorCode::kDownloadManifestParseError,
+ HardwareAndroid::IsKernelUpdateValid(
+ "5.4.42-not-gki", "5.4.42-not-gki", true /*prevent_downgrade*/))
<< "Should report parse error for invalid version field";
EXPECT_EQ(ErrorCode::kSuccess,
- HardwareAndroid::IsKernelUpdateValid(
- "5.4.42-android12-0-something", "5.4.42-android12-0-something"))
+ HardwareAndroid::IsKernelUpdateValid("5.4.42-android12-0-something",
+ "5.4.42-android12-0-something",
+ true /*prevent_downgrade*/))
<< "Self update should be fine";
EXPECT_EQ(ErrorCode::kSuccess,
- HardwareAndroid::IsKernelUpdateValid(
- "5.4.42-android12-0-something", "5.4.43-android12-0-something"))
+ HardwareAndroid::IsKernelUpdateValid("5.4.42-android12-0-something",
+ "5.4.43-android12-0-something",
+ true /*prevent_downgrade*/))
<< "Sub-level update should be fine";
EXPECT_EQ(
ErrorCode::kSuccess,
HardwareAndroid::IsKernelUpdateValid("5.4.42-android12-0-something",
- "5.10.10-android12-0-something"))
+ "5.10.10-android12-0-something",
+ true /*prevent_downgrade*/))
<< "KMI version update should be fine";
EXPECT_EQ(ErrorCode::kPayloadTimestampError,
HardwareAndroid::IsKernelUpdateValid("5.4.42-android12-0-something",
- "5.4.5-android12-0-something"))
+ "5.4.5-android12-0-something",
+ true /*prevent_downgrade*/))
<< "Should detect sub-level downgrade";
EXPECT_EQ(ErrorCode::kPayloadTimestampError,
HardwareAndroid::IsKernelUpdateValid("5.4.42-android12-0-something",
- "5.1.5-android12-0-something"))
+ "5.1.5-android12-0-something",
+ true /*prevent_downgrade*/))
<< "Should detect KMI version downgrade";
+
+ EXPECT_EQ(ErrorCode::kSuccess,
+ HardwareAndroid::IsKernelUpdateValid("5.4.42-android12-0-something",
+ "5.4.5-android12-0-something",
+ false /*prevent_downgrade*/))
+ << "Should suppress sub-level downgrade";
}
} // namespace chromeos_update_engine