blob: 679356c9f4805e3e020dcdde09fbd0658dd69a40 [file] [log] [blame]
Yifan Hongfd6640f2020-08-27 19:13:17 -07001//
2// Copyright (C) 2020 The Android Open Source Project
3//
4// Licensed under the Apache License, Version 2.0 (the "License");
5// you may not use this file except in compliance with the License.
6// You may obtain a copy of the License at
7//
8// http://www.apache.org/licenses/LICENSE-2.0
9//
10// Unless required by applicable law or agreed to in writing, software
11// distributed under the License is distributed on an "AS IS" BASIS,
12// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13// See the License for the specific language governing permissions and
14// limitations under the License.
15//
16
Yifan Hong126d13e2020-09-21 19:50:06 -070017#include <gmock/gmock.h>
Yifan Hongfd6640f2020-08-27 19:13:17 -070018#include <gtest/gtest.h>
19
20#include "update_engine/common/error_code.h"
Yifan Hongfd6640f2020-08-27 19:13:17 -070021#include "update_engine/hardware_android.h"
22
Yifan Hong126d13e2020-09-21 19:50:06 -070023using ::testing::NiceMock;
24using ::testing::Return;
25
Yifan Hongfd6640f2020-08-27 19:13:17 -070026namespace chromeos_update_engine {
27
28TEST(HardwareAndroidTest, IsKernelUpdateValid) {
29 EXPECT_EQ(ErrorCode::kSuccess,
Yifan Hong126d13e2020-09-21 19:50:06 -070030 HardwareAndroid::IsKernelUpdateValid(
31 "5.4.42-not-gki", "", true /*prevent_downgrade*/))
Yifan Hongfd6640f2020-08-27 19:13:17 -070032 << "Legacy update should be fine";
33
Yifan Hong126d13e2020-09-21 19:50:06 -070034 EXPECT_EQ(
35 ErrorCode::kSuccess,
36 HardwareAndroid::IsKernelUpdateValid(
37 "5.4.42-not-gki", "5.4.42-android12-0", true /*prevent_downgrade*/))
Yifan Hongfd6640f2020-08-27 19:13:17 -070038 << "Update to GKI should be fine";
39
Yifan Hong126d13e2020-09-21 19:50:06 -070040 EXPECT_EQ(ErrorCode::kDownloadManifestParseError,
41 HardwareAndroid::IsKernelUpdateValid(
42 "5.4.42-not-gki", "5.4.42-not-gki", true /*prevent_downgrade*/))
Yifan Hongfd6640f2020-08-27 19:13:17 -070043 << "Should report parse error for invalid version field";
44
45 EXPECT_EQ(ErrorCode::kSuccess,
Yifan Hong126d13e2020-09-21 19:50:06 -070046 HardwareAndroid::IsKernelUpdateValid("5.4.42-android12-0-something",
47 "5.4.42-android12-0-something",
48 true /*prevent_downgrade*/))
Yifan Hongfd6640f2020-08-27 19:13:17 -070049 << "Self update should be fine";
50
51 EXPECT_EQ(ErrorCode::kSuccess,
Yifan Hong126d13e2020-09-21 19:50:06 -070052 HardwareAndroid::IsKernelUpdateValid("5.4.42-android12-0-something",
53 "5.4.43-android12-0-something",
54 true /*prevent_downgrade*/))
Yifan Hongfd6640f2020-08-27 19:13:17 -070055 << "Sub-level update should be fine";
56
57 EXPECT_EQ(
58 ErrorCode::kSuccess,
59 HardwareAndroid::IsKernelUpdateValid("5.4.42-android12-0-something",
Yifan Hong126d13e2020-09-21 19:50:06 -070060 "5.10.10-android12-0-something",
61 true /*prevent_downgrade*/))
Yifan Hongfd6640f2020-08-27 19:13:17 -070062 << "KMI version update should be fine";
63
64 EXPECT_EQ(ErrorCode::kPayloadTimestampError,
65 HardwareAndroid::IsKernelUpdateValid("5.4.42-android12-0-something",
Yifan Hong126d13e2020-09-21 19:50:06 -070066 "5.4.5-android12-0-something",
67 true /*prevent_downgrade*/))
Yifan Hongfd6640f2020-08-27 19:13:17 -070068 << "Should detect sub-level downgrade";
69
70 EXPECT_EQ(ErrorCode::kPayloadTimestampError,
71 HardwareAndroid::IsKernelUpdateValid("5.4.42-android12-0-something",
Yifan Hong126d13e2020-09-21 19:50:06 -070072 "5.1.5-android12-0-something",
73 true /*prevent_downgrade*/))
Yifan Hongfd6640f2020-08-27 19:13:17 -070074 << "Should detect KMI version downgrade";
Yifan Hong126d13e2020-09-21 19:50:06 -070075
76 EXPECT_EQ(ErrorCode::kSuccess,
77 HardwareAndroid::IsKernelUpdateValid("5.4.42-android12-0-something",
78 "5.4.5-android12-0-something",
79 false /*prevent_downgrade*/))
80 << "Should suppress sub-level downgrade";
Yifan Hongfd6640f2020-08-27 19:13:17 -070081}
82
83} // namespace chromeos_update_engine