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