1 //
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
17 #include "update_engine/update_manager/enterprise_device_policy_impl.h"
18
19 #include <memory>
20
21 #include "update_engine/update_manager/policy_test_utils.h"
22
23 namespace chromeos_update_manager {
24
25 class UmEnterpriseDevicePolicyImplTest : public UmPolicyTestBase {
26 protected:
UmEnterpriseDevicePolicyImplTest()27 UmEnterpriseDevicePolicyImplTest() : UmPolicyTestBase() {
28 policy_ = std::make_unique<EnterpriseDevicePolicyImpl>();
29 }
30
SetUpDefaultState()31 void SetUpDefaultState() override {
32 UmPolicyTestBase::SetUpDefaultState();
33
34 fake_state_.device_policy_provider()->var_device_policy_is_loaded()->reset(
35 new bool(true));
36 }
37 };
38
TEST_F(UmEnterpriseDevicePolicyImplTest,KioskAppVersionSet)39 TEST_F(UmEnterpriseDevicePolicyImplTest, KioskAppVersionSet) {
40 fake_state_.device_policy_provider()->var_update_disabled()->reset(
41 new bool(true));
42 fake_state_.device_policy_provider()
43 ->var_allow_kiosk_app_control_chrome_version()
44 ->reset(new bool(true));
45
46 fake_state_.system_provider()->var_kiosk_required_platform_version()->reset(
47 new std::string("1234.5.6"));
48
49 UpdateCheckParams result;
50 ExpectPolicyStatus(
51 EvalStatus::kContinue, &Policy::UpdateCheckAllowed, &result);
52 EXPECT_EQ(result.target_version_prefix, "1234.5.6");
53 }
54
TEST_F(UmEnterpriseDevicePolicyImplTest,KioskAppVersionUnreadableNoUpdate)55 TEST_F(UmEnterpriseDevicePolicyImplTest, KioskAppVersionUnreadableNoUpdate) {
56 fake_state_.device_policy_provider()->var_update_disabled()->reset(
57 new bool(true));
58 fake_state_.device_policy_provider()
59 ->var_allow_kiosk_app_control_chrome_version()
60 ->reset(new bool(true));
61
62 fake_state_.system_provider()->var_kiosk_required_platform_version()->reset(
63 nullptr);
64
65 UpdateCheckParams result;
66 ExpectPolicyStatus(
67 EvalStatus::kAskMeAgainLater, &Policy::UpdateCheckAllowed, &result);
68 }
69
TEST_F(UmEnterpriseDevicePolicyImplTest,KioskAppVersionUnreadableUpdate)70 TEST_F(UmEnterpriseDevicePolicyImplTest, KioskAppVersionUnreadableUpdate) {
71 fake_state_.device_policy_provider()->var_update_disabled()->reset(
72 new bool(true));
73 fake_state_.device_policy_provider()
74 ->var_allow_kiosk_app_control_chrome_version()
75 ->reset(new bool(true));
76
77 // The real variable returns an empty string after several unsuccessful
78 // reading attempts. Fake this by setting it directly to empty string.
79 fake_state_.system_provider()->var_kiosk_required_platform_version()->reset(
80 new std::string(""));
81
82 UpdateCheckParams result;
83 ExpectPolicyStatus(
84 EvalStatus::kContinue, &Policy::UpdateCheckAllowed, &result);
85 EXPECT_EQ(result.target_version_prefix, "");
86 }
87
TEST_F(UmEnterpriseDevicePolicyImplTest,KioskAppVersionUnreadableUpdateWithMinVersion)88 TEST_F(UmEnterpriseDevicePolicyImplTest,
89 KioskAppVersionUnreadableUpdateWithMinVersion) {
90 fake_state_.device_policy_provider()->var_update_disabled()->reset(
91 new bool(true));
92 fake_state_.device_policy_provider()
93 ->var_allow_kiosk_app_control_chrome_version()
94 ->reset(new bool(true));
95
96 // The real variable returns an empty string after several unsuccessful
97 // reading attempts. Fake this by setting it directly to empty string.
98 fake_state_.system_provider()->var_kiosk_required_platform_version()->reset(
99 new std::string(""));
100 // Update if the minimum version is above the current OS version.
101 fake_state_.device_policy_provider()->var_device_minimum_version()->reset(
102 new base::Version("2.0.0"));
103 fake_state_.system_provider()->var_chromeos_version()->reset(
104 new base::Version("1.0.0"));
105
106 UpdateCheckParams result;
107 ExpectPolicyStatus(
108 EvalStatus::kContinue, &Policy::UpdateCheckAllowed, &result);
109 EXPECT_EQ(result.target_version_prefix, "");
110 }
111
TEST_F(UmEnterpriseDevicePolicyImplTest,KioskAppVersionUnreadableNoUpdateWithMinVersion)112 TEST_F(UmEnterpriseDevicePolicyImplTest,
113 KioskAppVersionUnreadableNoUpdateWithMinVersion) {
114 fake_state_.device_policy_provider()->var_update_disabled()->reset(
115 new bool(true));
116 fake_state_.device_policy_provider()
117 ->var_allow_kiosk_app_control_chrome_version()
118 ->reset(new bool(true));
119
120 // The real variable returns an empty string after several unsuccessful
121 // reading attempts. Fake this by setting it directly to empty string.
122 fake_state_.system_provider()->var_kiosk_required_platform_version()->reset(
123 new std::string(""));
124 // Block update if the minimum version is below the current OS version.
125 fake_state_.device_policy_provider()->var_device_minimum_version()->reset(
126 new base::Version("1.0.0"));
127 fake_state_.system_provider()->var_chromeos_version()->reset(
128 new base::Version("2.0.0"));
129
130 UpdateCheckParams result;
131 ExpectPolicyStatus(
132 EvalStatus::kAskMeAgainLater, &Policy::UpdateCheckAllowed, &result);
133 }
134
TEST_F(UmEnterpriseDevicePolicyImplTest,ChannelDowngradeBehaviorNoRollback)135 TEST_F(UmEnterpriseDevicePolicyImplTest, ChannelDowngradeBehaviorNoRollback) {
136 fake_state_.device_policy_provider()->var_release_channel_delegated()->reset(
137 new bool(false));
138 fake_state_.device_policy_provider()->var_release_channel()->reset(
139 new std::string("stable-channel"));
140
141 UpdateCheckParams result;
142 ExpectPolicyStatus(
143 EvalStatus::kContinue, &Policy::UpdateCheckAllowed, &result);
144 EXPECT_FALSE(result.rollback_on_channel_downgrade);
145 }
146
TEST_F(UmEnterpriseDevicePolicyImplTest,ChannelDowngradeBehaviorRollback)147 TEST_F(UmEnterpriseDevicePolicyImplTest, ChannelDowngradeBehaviorRollback) {
148 fake_state_.device_policy_provider()->var_release_channel_delegated()->reset(
149 new bool(false));
150 fake_state_.device_policy_provider()->var_release_channel()->reset(
151 new std::string("stable-channel"));
152 fake_state_.device_policy_provider()->var_channel_downgrade_behavior()->reset(
153 new ChannelDowngradeBehavior(ChannelDowngradeBehavior::kRollback));
154
155 UpdateCheckParams result;
156 ExpectPolicyStatus(
157 EvalStatus::kContinue, &Policy::UpdateCheckAllowed, &result);
158 EXPECT_TRUE(result.rollback_on_channel_downgrade);
159 }
160
TEST_F(UmEnterpriseDevicePolicyImplTest,QuickFixBuildToken)161 TEST_F(UmEnterpriseDevicePolicyImplTest, QuickFixBuildToken) {
162 fake_state_.device_policy_provider()->var_quick_fix_build_token()->reset(
163 new std::string("token"));
164 UpdateCheckParams result;
165 ExpectPolicyStatus(
166 EvalStatus::kContinue, &Policy::UpdateCheckAllowed, &result);
167 EXPECT_EQ(result.quick_fix_build_token, "token");
168 }
169
170 } // namespace chromeos_update_manager
171