blob: 524779f95799aa512656b89a3707e9e1829c7d91 [file] [log] [blame]
Alex Deymoaea4c1c2015-08-19 20:24:43 -07001//
2// Copyright (C) 2014 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//
Alex Deymo0d11c602014-04-23 20:12:20 -070016
Alex Deymo63784a52014-05-28 10:46:14 -070017#include "update_engine/update_manager/chromeos_policy.h"
Alex Deymo0d11c602014-04-23 20:12:20 -070018
Amin Hassani186ff6a2018-02-27 11:06:03 -080019#include <memory>
Gilad Arnold0adbc942014-05-12 10:35:43 -070020#include <set>
Alex Deymo0d11c602014-04-23 20:12:20 -070021
Amin Hassani186ff6a2018-02-27 11:06:03 -080022#include "update_engine/update_manager/next_update_check_policy_impl.h"
23#include "update_engine/update_manager/policy_test_utils.h"
Alex Deymo0d11c602014-04-23 20:12:20 -070024
25using base::Time;
26using base::TimeDelta;
Sen Jiang255e22b2016-05-20 16:15:29 -070027using chromeos_update_engine::ConnectionTethering;
28using chromeos_update_engine::ConnectionType;
Gilad Arnoldb3b05442014-05-30 14:25:05 -070029using chromeos_update_engine::ErrorCode;
Gilad Arnold0adbc942014-05-12 10:35:43 -070030using std::set;
Alex Deymo0d11c602014-04-23 20:12:20 -070031using std::string;
32
Alex Deymo63784a52014-05-28 10:46:14 -070033namespace chromeos_update_manager {
Alex Deymo0d11c602014-04-23 20:12:20 -070034
Amin Hassani186ff6a2018-02-27 11:06:03 -080035class UmChromeOSPolicyTest : public UmPolicyTestBase {
Alex Deymo0d11c602014-04-23 20:12:20 -070036 protected:
Amin Hassani186ff6a2018-02-27 11:06:03 -080037 UmChromeOSPolicyTest() : UmPolicyTestBase() {
38 policy_ = std::make_unique<ChromeOSPolicy>();
39 }
40
Alex Deymo610277e2014-11-11 21:18:11 -080041 void SetUp() override {
Amin Hassani186ff6a2018-02-27 11:06:03 -080042 UmPolicyTestBase::SetUp();
Gilad Arnoldf62a4b82014-05-01 07:41:07 -070043 SetUpDefaultDevicePolicy();
Alex Deymo0d11c602014-04-23 20:12:20 -070044 }
45
Amin Hassani186ff6a2018-02-27 11:06:03 -080046 void SetUpDefaultState() override {
47 UmPolicyTestBase::SetUpDefaultState();
Gilad Arnoldf62a4b82014-05-01 07:41:07 -070048
Gilad Arnolda1eabcd2014-07-09 15:42:40 -070049 // OOBE is enabled by default.
50 fake_state_.config_provider()->var_is_oobe_enabled()->reset(
51 new bool(true));
52
Gilad Arnold76a11f62014-05-20 09:02:12 -070053 // For the purpose of the tests, this is an official build and OOBE was
54 // completed.
Gilad Arnoldf62a4b82014-05-01 07:41:07 -070055 fake_state_.system_provider()->var_is_official_build()->reset(
56 new bool(true));
Gilad Arnold76a11f62014-05-20 09:02:12 -070057 fake_state_.system_provider()->var_is_oobe_complete()->reset(
58 new bool(true));
Aaron Woodc73fdc12017-12-06 11:09:15 -080059 // NOLINTNEXTLINE(readability/casting)
Alex Deymo763e7db2015-08-27 21:08:08 -070060 fake_state_.system_provider()->var_num_slots()->reset(new unsigned int(2));
Gilad Arnold0adbc942014-05-12 10:35:43 -070061
62 // Connection is wifi, untethered.
63 fake_state_.shill_provider()->var_conn_type()->
64 reset(new ConnectionType(ConnectionType::kWifi));
65 fake_state_.shill_provider()->var_conn_tethering()->
66 reset(new ConnectionTethering(ConnectionTethering::kNotDetected));
Gilad Arnoldf62a4b82014-05-01 07:41:07 -070067 }
68
Gilad Arnoldb3b05442014-05-30 14:25:05 -070069 // Sets up a default device policy that does not impose any restrictions
70 // (HTTP) nor enables any features (P2P).
Gilad Arnoldf62a4b82014-05-01 07:41:07 -070071 void SetUpDefaultDevicePolicy() {
72 fake_state_.device_policy_provider()->var_device_policy_is_loaded()->reset(
73 new bool(true));
74 fake_state_.device_policy_provider()->var_update_disabled()->reset(
75 new bool(false));
76 fake_state_.device_policy_provider()->
77 var_allowed_connection_types_for_update()->reset(nullptr);
78 fake_state_.device_policy_provider()->var_scatter_factor()->reset(
79 new TimeDelta());
80 fake_state_.device_policy_provider()->var_http_downloads_enabled()->reset(
Gilad Arnoldb3b05442014-05-30 14:25:05 -070081 new bool(true));
Gilad Arnoldf62a4b82014-05-01 07:41:07 -070082 fake_state_.device_policy_provider()->var_au_p2p_enabled()->reset(
83 new bool(false));
84 fake_state_.device_policy_provider()->var_release_channel_delegated()->
85 reset(new bool(true));
86 }
87
Amin Hassani186ff6a2018-02-27 11:06:03 -080088 // Configures the policy to return a desired value from UpdateCheckAllowed by
Gilad Arnoldf62a4b82014-05-01 07:41:07 -070089 // faking the current wall clock time as needed. Restores the default state.
90 // This is used when testing policies that depend on this one.
Amin Hassani186ff6a2018-02-27 11:06:03 -080091 //
92 // Note that the default implementation relies on NextUpdateCheckPolicyImpl to
93 // set the FakeClock to the appropriate time.
94 virtual void SetUpdateCheckAllowed(bool allow_check) {
Gilad Arnoldf62a4b82014-05-01 07:41:07 -070095 Time next_update_check;
Amin Hassani186ff6a2018-02-27 11:06:03 -080096 CallMethodWithContext(&NextUpdateCheckTimePolicyImpl::NextUpdateCheckTime,
97 &next_update_check,
98 ChromeOSPolicy::kNextUpdateCheckPolicyConstants);
Gilad Arnoldf62a4b82014-05-01 07:41:07 -070099 SetUpDefaultState();
100 SetUpDefaultDevicePolicy();
101 Time curr_time = next_update_check;
102 if (allow_check)
103 curr_time += TimeDelta::FromSeconds(1);
104 else
105 curr_time -= TimeDelta::FromSeconds(1);
106 fake_clock_.SetWallclockTime(curr_time);
107 }
Marton Hunyady8b936f22018-06-15 16:44:37 +0200108
109 // Sets the policies required for a kiosk app to control Chrome OS version:
110 // - AllowKioskAppControlChromeVersion = True
111 // - UpdateDisabled = True
112 // In the kiosk app manifest:
113 // - RequiredPlatformVersion = 1234.
114 void SetKioskAppControlsChromeOsVersion() {
115 fake_state_.device_policy_provider()
116 ->var_allow_kiosk_app_control_chrome_version()
117 ->reset(new bool(true));
118 fake_state_.device_policy_provider()->var_update_disabled()->reset(
119 new bool(true));
120 fake_state_.system_provider()->var_kiosk_required_platform_version()->reset(
121 new string("1234."));
122 }
123
124 // Sets up a test with the value of RollbackToTargetVersion policy (and
125 // whether it's set), and returns the value of
126 // UpdateCheckParams.rollback_allowed.
127 bool TestRollbackAllowed(bool set_policy,
128 RollbackToTargetVersion rollback_to_target_version) {
129 // Update check is allowed, response includes attributes for use in the
130 // request.
131 SetUpdateCheckAllowed(true);
132
133 if (set_policy) {
134 // Override RollbackToTargetVersion device policy attribute.
135 fake_state_.device_policy_provider()
136 ->var_rollback_to_target_version()
137 ->reset(new RollbackToTargetVersion(rollback_to_target_version));
138 }
139
140 UpdateCheckParams result;
141 ExpectPolicyStatus(
142 EvalStatus::kSucceeded, &Policy::UpdateCheckAllowed, &result);
143 return result.rollback_allowed;
144 }
Alex Deymo0d11c602014-04-23 20:12:20 -0700145};
146
Alex Deymo63784a52014-05-28 10:46:14 -0700147TEST_F(UmChromeOSPolicyTest, UpdateCheckAllowedWaitsForTheTimeout) {
Alex Deymo0d11c602014-04-23 20:12:20 -0700148 // We get the next update_check timestamp from the policy's private method
149 // and then we check the public method respects that value on the normal
150 // case.
151 Time next_update_check;
152 Time last_checked_time =
153 fake_clock_.GetWallclockTime() + TimeDelta::FromMinutes(1234);
154
Alex Deymo0d11c602014-04-23 20:12:20 -0700155 fake_state_.updater_provider()->var_last_checked_time()->reset(
156 new Time(last_checked_time));
Amin Hassani186ff6a2018-02-27 11:06:03 -0800157 CallMethodWithContext(&NextUpdateCheckTimePolicyImpl::NextUpdateCheckTime,
158 &next_update_check,
159 ChromeOSPolicy::kNextUpdateCheckPolicyConstants);
Alex Deymo0d11c602014-04-23 20:12:20 -0700160
161 UpdateCheckParams result;
162
163 // Check that the policy blocks until the next_update_check is reached.
164 SetUpDefaultClock();
165 SetUpDefaultState();
166 fake_state_.updater_provider()->var_last_checked_time()->reset(
167 new Time(last_checked_time));
168 fake_clock_.SetWallclockTime(next_update_check - TimeDelta::FromSeconds(1));
169 ExpectPolicyStatus(EvalStatus::kAskMeAgainLater,
170 &Policy::UpdateCheckAllowed, &result);
171
172 SetUpDefaultClock();
173 SetUpDefaultState();
174 fake_state_.updater_provider()->var_last_checked_time()->reset(
175 new Time(last_checked_time));
176 fake_clock_.SetWallclockTime(next_update_check + TimeDelta::FromSeconds(1));
177 ExpectPolicyStatus(EvalStatus::kSucceeded,
178 &Policy::UpdateCheckAllowed, &result);
Gilad Arnolda1eabcd2014-07-09 15:42:40 -0700179 EXPECT_TRUE(result.updates_enabled);
Amin Hassanied37d682018-04-06 13:22:00 -0700180 EXPECT_FALSE(result.interactive);
Gilad Arnolda1eabcd2014-07-09 15:42:40 -0700181}
182
183TEST_F(UmChromeOSPolicyTest, UpdateCheckAllowedWaitsForOOBE) {
Alex Vakulenko072359c2014-07-18 11:41:07 -0700184 // Update checks are deferred until OOBE is completed.
Gilad Arnolda1eabcd2014-07-09 15:42:40 -0700185
186 // Ensure that update is not allowed even if wait period is satisfied.
187 Time next_update_check;
188 Time last_checked_time =
189 fake_clock_.GetWallclockTime() + TimeDelta::FromMinutes(1234);
190
191 fake_state_.updater_provider()->var_last_checked_time()->reset(
192 new Time(last_checked_time));
Amin Hassani186ff6a2018-02-27 11:06:03 -0800193 CallMethodWithContext(&NextUpdateCheckTimePolicyImpl::NextUpdateCheckTime,
194 &next_update_check,
195 ChromeOSPolicy::kNextUpdateCheckPolicyConstants);
Gilad Arnolda1eabcd2014-07-09 15:42:40 -0700196
197 SetUpDefaultClock();
198 SetUpDefaultState();
199 fake_state_.updater_provider()->var_last_checked_time()->reset(
200 new Time(last_checked_time));
201 fake_clock_.SetWallclockTime(next_update_check + TimeDelta::FromSeconds(1));
202 fake_state_.system_provider()->var_is_oobe_complete()->reset(
203 new bool(false));
204
205 UpdateCheckParams result;
206 ExpectPolicyStatus(EvalStatus::kAskMeAgainLater,
207 &Policy::UpdateCheckAllowed, &result);
208
209 // Now check that it is allowed if OOBE is completed.
210 SetUpDefaultClock();
211 SetUpDefaultState();
212 fake_state_.updater_provider()->var_last_checked_time()->reset(
213 new Time(last_checked_time));
214 fake_clock_.SetWallclockTime(next_update_check + TimeDelta::FromSeconds(1));
215 ExpectPolicyStatus(EvalStatus::kSucceeded,
216 &Policy::UpdateCheckAllowed, &result);
217 EXPECT_TRUE(result.updates_enabled);
Amin Hassanied37d682018-04-06 13:22:00 -0700218 EXPECT_FALSE(result.interactive);
Alex Deymo0d11c602014-04-23 20:12:20 -0700219}
220
Gilad Arnold42f253b2014-06-25 12:39:17 -0700221TEST_F(UmChromeOSPolicyTest, UpdateCheckAllowedWithAttributes) {
Alex Vakulenko072359c2014-07-18 11:41:07 -0700222 // Update check is allowed, response includes attributes for use in the
Gilad Arnold42f253b2014-06-25 12:39:17 -0700223 // request.
224 SetUpdateCheckAllowed(true);
225
226 // Override specific device policy attributes.
Gilad Arnoldd4b30322014-07-21 15:35:27 -0700227 fake_state_.device_policy_provider()->var_target_version_prefix()->
228 reset(new string("1.2"));
Marton Hunyady0e0e3542018-02-21 18:51:39 +0100229 fake_state_.device_policy_provider()
230 ->var_rollback_allowed_milestones()
231 ->reset(new int(5));
232 fake_state_.device_policy_provider()->var_release_channel_delegated()->reset(
233 new bool(false));
Gilad Arnold42f253b2014-06-25 12:39:17 -0700234 fake_state_.device_policy_provider()->var_release_channel()->
235 reset(new string("foo-channel"));
236
237 UpdateCheckParams result;
238 ExpectPolicyStatus(EvalStatus::kSucceeded,
239 &Policy::UpdateCheckAllowed, &result);
240 EXPECT_TRUE(result.updates_enabled);
Gilad Arnoldd4b30322014-07-21 15:35:27 -0700241 EXPECT_EQ("1.2", result.target_version_prefix);
Marton Hunyady0e0e3542018-02-21 18:51:39 +0100242 EXPECT_EQ(5, result.rollback_allowed_milestones);
Gilad Arnold42f253b2014-06-25 12:39:17 -0700243 EXPECT_EQ("foo-channel", result.target_channel);
Amin Hassanied37d682018-04-06 13:22:00 -0700244 EXPECT_FALSE(result.interactive);
Gilad Arnold42f253b2014-06-25 12:39:17 -0700245}
246
Marton Hunyadyba51c3f2018-04-25 15:18:10 +0200247TEST_F(UmChromeOSPolicyTest, UpdateCheckAllowedRollbackAllowed) {
Marton Hunyady8b936f22018-06-15 16:44:37 +0200248 EXPECT_TRUE(TestRollbackAllowed(
249 true, RollbackToTargetVersion::kRollbackWithFullPowerwash));
Marton Hunyadyba51c3f2018-04-25 15:18:10 +0200250}
251
252TEST_F(UmChromeOSPolicyTest, UpdateCheckAllowedRollbackDisabled) {
Marton Hunyady8b936f22018-06-15 16:44:37 +0200253 EXPECT_FALSE(TestRollbackAllowed(true, RollbackToTargetVersion::kDisabled));
Marton Hunyadyba51c3f2018-04-25 15:18:10 +0200254}
255
256TEST_F(UmChromeOSPolicyTest, UpdateCheckAllowedRollbackUnspecified) {
Marton Hunyady8b936f22018-06-15 16:44:37 +0200257 EXPECT_FALSE(
258 TestRollbackAllowed(true, RollbackToTargetVersion::kUnspecified));
Marton Hunyadyba51c3f2018-04-25 15:18:10 +0200259}
260
261TEST_F(UmChromeOSPolicyTest, UpdateCheckAllowedRollbackNotSet) {
Marton Hunyady8b936f22018-06-15 16:44:37 +0200262 EXPECT_FALSE(
263 TestRollbackAllowed(false, RollbackToTargetVersion::kUnspecified));
264}
Marton Hunyadyba51c3f2018-04-25 15:18:10 +0200265
Marton Hunyady8b936f22018-06-15 16:44:37 +0200266TEST_F(UmChromeOSPolicyTest, UpdateCheckAllowedKioskRollbackAllowed) {
267 SetKioskAppControlsChromeOsVersion();
Marton Hunyadyba51c3f2018-04-25 15:18:10 +0200268
Marton Hunyady8b936f22018-06-15 16:44:37 +0200269 EXPECT_TRUE(TestRollbackAllowed(
270 true, RollbackToTargetVersion::kRollbackWithFullPowerwash));
271}
272
273TEST_F(UmChromeOSPolicyTest, UpdateCheckAllowedKioskRollbackDisabled) {
274 SetKioskAppControlsChromeOsVersion();
275
276 EXPECT_FALSE(TestRollbackAllowed(true, RollbackToTargetVersion::kDisabled));
277}
278
279TEST_F(UmChromeOSPolicyTest, UpdateCheckAllowedKioskRollbackUnspecified) {
280 SetKioskAppControlsChromeOsVersion();
281
282 EXPECT_FALSE(
283 TestRollbackAllowed(true, RollbackToTargetVersion::kUnspecified));
284}
285
286TEST_F(UmChromeOSPolicyTest, UpdateCheckAllowedKioskRollbackNotSet) {
287 SetKioskAppControlsChromeOsVersion();
288
289 EXPECT_FALSE(
290 TestRollbackAllowed(false, RollbackToTargetVersion::kUnspecified));
Marton Hunyadyba51c3f2018-04-25 15:18:10 +0200291}
292
Gilad Arnoldfe12a0f2014-07-09 14:26:57 -0700293TEST_F(UmChromeOSPolicyTest,
294 UpdateCheckAllowedUpdatesDisabledForUnofficialBuilds) {
Gilad Arnold44dc3bf2014-07-18 23:39:38 -0700295 // UpdateCheckAllowed should return kAskMeAgainLater if this is an unofficial
296 // build; we don't want periodic update checks on developer images.
Gilad Arnoldfe12a0f2014-07-09 14:26:57 -0700297
298 fake_state_.system_provider()->var_is_official_build()->reset(
299 new bool(false));
300
301 UpdateCheckParams result;
Gilad Arnold44dc3bf2014-07-18 23:39:38 -0700302 ExpectPolicyStatus(EvalStatus::kAskMeAgainLater,
Gilad Arnoldfe12a0f2014-07-09 14:26:57 -0700303 &Policy::UpdateCheckAllowed, &result);
Gilad Arnoldfe12a0f2014-07-09 14:26:57 -0700304}
305
Gilad Arnoldbfc44f72014-07-09 14:41:39 -0700306TEST_F(UmChromeOSPolicyTest,
Aaron Wood56d8ab32017-09-22 15:56:18 -0700307 UpdateCheckAllowedUpdatesDisabledWhenNotEnoughSlotsAbUpdates) {
Gilad Arnoldbfc44f72014-07-09 14:41:39 -0700308 // UpdateCheckAllowed should return false (kSucceeded) if the image booted
Aaron Wood56d8ab32017-09-22 15:56:18 -0700309 // without enough slots to do A/B updates.
Gilad Arnoldbfc44f72014-07-09 14:41:39 -0700310
Aaron Woodc73fdc12017-12-06 11:09:15 -0800311 // NOLINTNEXTLINE(readability/casting)
Alex Deymo763e7db2015-08-27 21:08:08 -0700312 fake_state_.system_provider()->var_num_slots()->reset(new unsigned int(1));
Gilad Arnoldbfc44f72014-07-09 14:41:39 -0700313
314 UpdateCheckParams result;
315 ExpectPolicyStatus(EvalStatus::kSucceeded,
316 &Policy::UpdateCheckAllowed, &result);
317 EXPECT_FALSE(result.updates_enabled);
318}
319
Gilad Arnoldfe12a0f2014-07-09 14:26:57 -0700320TEST_F(UmChromeOSPolicyTest, UpdateCheckAllowedUpdatesDisabledByPolicy) {
Gilad Arnold42f253b2014-06-25 12:39:17 -0700321 // UpdateCheckAllowed should return kAskMeAgainLater because a device policy
322 // is loaded and prohibits updates.
323
324 SetUpdateCheckAllowed(false);
325 fake_state_.device_policy_provider()->var_update_disabled()->reset(
326 new bool(true));
327
Gilad Arnold42f253b2014-06-25 12:39:17 -0700328 UpdateCheckParams result;
329 ExpectPolicyStatus(EvalStatus::kAskMeAgainLater,
330 &Policy::UpdateCheckAllowed, &result);
331}
332
Gilad Arnoldec7f9162014-07-15 13:24:46 -0700333TEST_F(UmChromeOSPolicyTest,
334 UpdateCheckAllowedForcedUpdateRequestedInteractive) {
335 // UpdateCheckAllowed should return true because a forced update request was
336 // signaled for an interactive update.
Gilad Arnold44dc3bf2014-07-18 23:39:38 -0700337
338 SetUpdateCheckAllowed(true);
Gilad Arnoldec7f9162014-07-15 13:24:46 -0700339 fake_state_.updater_provider()->var_forced_update_requested()->reset(
340 new UpdateRequestStatus(UpdateRequestStatus::kInteractive));
Gilad Arnold44dc3bf2014-07-18 23:39:38 -0700341
342 UpdateCheckParams result;
343 ExpectPolicyStatus(EvalStatus::kSucceeded,
344 &Policy::UpdateCheckAllowed, &result);
345 EXPECT_TRUE(result.updates_enabled);
Amin Hassanied37d682018-04-06 13:22:00 -0700346 EXPECT_TRUE(result.interactive);
Gilad Arnold44dc3bf2014-07-18 23:39:38 -0700347}
348
Gilad Arnoldec7f9162014-07-15 13:24:46 -0700349TEST_F(UmChromeOSPolicyTest, UpdateCheckAllowedForcedUpdateRequestedPeriodic) {
350 // UpdateCheckAllowed should return true because a forced update request was
351 // signaled for a periodic check.
352
353 SetUpdateCheckAllowed(true);
354 fake_state_.updater_provider()->var_forced_update_requested()->reset(
355 new UpdateRequestStatus(UpdateRequestStatus::kPeriodic));
356
357 UpdateCheckParams result;
358 ExpectPolicyStatus(EvalStatus::kSucceeded,
359 &Policy::UpdateCheckAllowed, &result);
360 EXPECT_TRUE(result.updates_enabled);
Amin Hassanied37d682018-04-06 13:22:00 -0700361 EXPECT_FALSE(result.interactive);
Gilad Arnoldec7f9162014-07-15 13:24:46 -0700362}
363
Xiyuan Xia6e30bc52016-02-24 15:35:42 -0800364TEST_F(UmChromeOSPolicyTest, UpdateCheckAllowedKioskPin) {
365 // Update check is allowed.
366 SetUpdateCheckAllowed(true);
367
Marton Hunyady8b936f22018-06-15 16:44:37 +0200368 SetKioskAppControlsChromeOsVersion();
Xiyuan Xia6e30bc52016-02-24 15:35:42 -0800369
370 UpdateCheckParams result;
371 ExpectPolicyStatus(EvalStatus::kSucceeded,
372 &Policy::UpdateCheckAllowed, &result);
373 EXPECT_TRUE(result.updates_enabled);
Marton Hunyady8b936f22018-06-15 16:44:37 +0200374 EXPECT_EQ("1234.", result.target_version_prefix);
Amin Hassanied37d682018-04-06 13:22:00 -0700375 EXPECT_FALSE(result.interactive);
Xiyuan Xia6e30bc52016-02-24 15:35:42 -0800376}
377
378TEST_F(UmChromeOSPolicyTest, UpdateCheckAllowedDisabledWhenNoKioskPin) {
379 // Update check is allowed.
380 SetUpdateCheckAllowed(true);
381
382 // Disable AU policy is set but kiosk pin policy is set to false. Update is
383 // disabled in such case.
384 fake_state_.device_policy_provider()->var_update_disabled()->reset(
385 new bool(true));
386 fake_state_.device_policy_provider()
387 ->var_allow_kiosk_app_control_chrome_version()
388 ->reset(new bool(false));
389
390 UpdateCheckParams result;
391 ExpectPolicyStatus(EvalStatus::kAskMeAgainLater,
392 &Policy::UpdateCheckAllowed, &result);
393}
394
395TEST_F(UmChromeOSPolicyTest, UpdateCheckAllowedKioskPinWithNoRequiredVersion) {
396 // Update check is allowed.
397 SetUpdateCheckAllowed(true);
398
399 // AU disabled, allow kiosk to pin but there is no kiosk required platform
Xiyuan Xiaed9bd922016-04-07 14:45:16 -0700400 // version (i.e. app does not provide the info). Update to latest in such
401 // case.
Xiyuan Xia6e30bc52016-02-24 15:35:42 -0800402 fake_state_.device_policy_provider()->var_update_disabled()->reset(
403 new bool(true));
404 fake_state_.device_policy_provider()
405 ->var_allow_kiosk_app_control_chrome_version()
406 ->reset(new bool(true));
Xiyuan Xiaed9bd922016-04-07 14:45:16 -0700407 fake_state_.system_provider()->var_kiosk_required_platform_version()->reset(
408 new string());
Xiyuan Xia6e30bc52016-02-24 15:35:42 -0800409
410 UpdateCheckParams result;
411 ExpectPolicyStatus(EvalStatus::kSucceeded,
412 &Policy::UpdateCheckAllowed, &result);
413 EXPECT_TRUE(result.updates_enabled);
Xiyuan Xiaed9bd922016-04-07 14:45:16 -0700414 EXPECT_TRUE(result.target_version_prefix.empty());
Amin Hassanied37d682018-04-06 13:22:00 -0700415 EXPECT_FALSE(result.interactive);
Xiyuan Xia6e30bc52016-02-24 15:35:42 -0800416}
417
Xiyuan Xiaed9bd922016-04-07 14:45:16 -0700418TEST_F(UmChromeOSPolicyTest,
419 UpdateCheckAllowedKioskPinWithFailedGetRequiredVersionCall) {
420 // AU disabled, allow kiosk to pin but D-Bus call to get required platform
421 // version failed. Defer update check in this case.
422 fake_state_.device_policy_provider()->var_update_disabled()->reset(
423 new bool(true));
424 fake_state_.device_policy_provider()
425 ->var_allow_kiosk_app_control_chrome_version()
426 ->reset(new bool(true));
427 fake_state_.system_provider()->var_kiosk_required_platform_version()->reset(
428 nullptr);
429
430 UpdateCheckParams result;
431 ExpectPolicyStatus(EvalStatus::kAskMeAgainLater,
432 &Policy::UpdateCheckAllowed, &result);
433}
434
Alex Deymo63784a52014-05-28 10:46:14 -0700435TEST_F(UmChromeOSPolicyTest, UpdateCanStartFailsCheckAllowedError) {
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700436 // The UpdateCanStart policy fails, not being able to query
437 // UpdateCheckAllowed.
438
439 // Configure the UpdateCheckAllowed policy to fail.
440 fake_state_.updater_provider()->var_updater_started_time()->reset(nullptr);
441
442 // Check that the UpdateCanStart fails.
443 UpdateState update_state = GetDefaultUpdateState(TimeDelta::FromMinutes(10));
Gilad Arnold42f253b2014-06-25 12:39:17 -0700444 UpdateDownloadParams result;
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700445 ExpectPolicyStatus(EvalStatus::kFailed,
Gilad Arnolddc4bb262014-07-23 10:45:19 -0700446 &Policy::UpdateCanStart, &result, update_state);
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700447}
448
Alex Deymo63784a52014-05-28 10:46:14 -0700449TEST_F(UmChromeOSPolicyTest, UpdateCanStartNotAllowedCheckDue) {
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700450 // The UpdateCanStart policy returns false because we are due for another
Gilad Arnold14a9e702014-10-08 08:09:09 -0700451 // update check. Ensure that download related values are still returned.
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700452
453 SetUpdateCheckAllowed(true);
454
455 // Check that the UpdateCanStart returns false.
456 UpdateState update_state = GetDefaultUpdateState(TimeDelta::FromMinutes(10));
Gilad Arnold42f253b2014-06-25 12:39:17 -0700457 UpdateDownloadParams result;
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700458 ExpectPolicyStatus(EvalStatus::kSucceeded,
Gilad Arnolddc4bb262014-07-23 10:45:19 -0700459 &Policy::UpdateCanStart, &result, update_state);
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700460 EXPECT_FALSE(result.update_can_start);
461 EXPECT_EQ(UpdateCannotStartReason::kCheckDue, result.cannot_start_reason);
Gilad Arnold14a9e702014-10-08 08:09:09 -0700462 EXPECT_EQ(0, result.download_url_idx);
463 EXPECT_EQ(0, result.download_url_num_errors);
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700464}
465
Alex Deymo63784a52014-05-28 10:46:14 -0700466TEST_F(UmChromeOSPolicyTest, UpdateCanStartAllowedNoDevicePolicy) {
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700467 // The UpdateCanStart policy returns true; no device policy is loaded.
468
469 SetUpdateCheckAllowed(false);
470 fake_state_.device_policy_provider()->var_device_policy_is_loaded()->reset(
471 new bool(false));
472
473 // Check that the UpdateCanStart returns true with no further attributes.
474 UpdateState update_state = GetDefaultUpdateState(TimeDelta::FromMinutes(10));
Gilad Arnold42f253b2014-06-25 12:39:17 -0700475 UpdateDownloadParams result;
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700476 ExpectPolicyStatus(EvalStatus::kSucceeded,
Gilad Arnolddc4bb262014-07-23 10:45:19 -0700477 &Policy::UpdateCanStart, &result, update_state);
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700478 EXPECT_TRUE(result.update_can_start);
Gilad Arnoldb2f99192014-10-07 13:01:52 -0700479 EXPECT_FALSE(result.p2p_downloading_allowed);
480 EXPECT_FALSE(result.p2p_sharing_allowed);
Gilad Arnoldb3b05442014-05-30 14:25:05 -0700481 EXPECT_EQ(0, result.download_url_idx);
Gilad Arnold14a9e702014-10-08 08:09:09 -0700482 EXPECT_TRUE(result.download_url_allowed);
Gilad Arnolddc4bb262014-07-23 10:45:19 -0700483 EXPECT_EQ(0, result.download_url_num_errors);
484 EXPECT_FALSE(result.do_increment_failures);
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700485}
486
Alex Deymo63784a52014-05-28 10:46:14 -0700487TEST_F(UmChromeOSPolicyTest, UpdateCanStartAllowedBlankPolicy) {
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700488 // The UpdateCanStart policy returns true; device policy is loaded but imposes
489 // no restrictions on updating.
490
491 SetUpdateCheckAllowed(false);
492
493 // Check that the UpdateCanStart returns true.
494 UpdateState update_state = GetDefaultUpdateState(TimeDelta::FromMinutes(10));
Gilad Arnold42f253b2014-06-25 12:39:17 -0700495 UpdateDownloadParams result;
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700496 ExpectPolicyStatus(EvalStatus::kSucceeded,
Gilad Arnolddc4bb262014-07-23 10:45:19 -0700497 &Policy::UpdateCanStart, &result, update_state);
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700498 EXPECT_TRUE(result.update_can_start);
Gilad Arnoldb2f99192014-10-07 13:01:52 -0700499 EXPECT_FALSE(result.p2p_downloading_allowed);
500 EXPECT_FALSE(result.p2p_sharing_allowed);
Gilad Arnoldb3b05442014-05-30 14:25:05 -0700501 EXPECT_EQ(0, result.download_url_idx);
Gilad Arnold14a9e702014-10-08 08:09:09 -0700502 EXPECT_TRUE(result.download_url_allowed);
Gilad Arnolddc4bb262014-07-23 10:45:19 -0700503 EXPECT_EQ(0, result.download_url_num_errors);
504 EXPECT_FALSE(result.do_increment_failures);
505}
506
507TEST_F(UmChromeOSPolicyTest,
508 UpdateCanStartNotAllowedBackoffNewWaitPeriodApplies) {
509 // The UpdateCanStart policy returns false; failures are reported and a new
510 // backoff period is enacted.
511
512 SetUpdateCheckAllowed(false);
513
514 const Time curr_time = fake_clock_.GetWallclockTime();
515 UpdateState update_state = GetDefaultUpdateState(TimeDelta::FromSeconds(10));
516 update_state.download_errors_max = 1;
517 update_state.download_errors.emplace_back(
518 0, ErrorCode::kDownloadTransferError,
519 curr_time - TimeDelta::FromSeconds(8));
520 update_state.download_errors.emplace_back(
521 0, ErrorCode::kDownloadTransferError,
522 curr_time - TimeDelta::FromSeconds(2));
523
524 // Check that UpdateCanStart returns false and a new backoff expiry is
525 // generated.
526 UpdateDownloadParams result;
527 ExpectPolicyStatus(EvalStatus::kSucceeded, &Policy::UpdateCanStart, &result,
528 update_state);
529 EXPECT_FALSE(result.update_can_start);
530 EXPECT_EQ(UpdateCannotStartReason::kBackoff, result.cannot_start_reason);
531 EXPECT_TRUE(result.do_increment_failures);
532 EXPECT_LT(curr_time, result.backoff_expiry);
533}
534
535TEST_F(UmChromeOSPolicyTest,
536 UpdateCanStartNotAllowedBackoffPrevWaitPeriodStillApplies) {
537 // The UpdateCanStart policy returns false; a previously enacted backoff
538 // period still applies.
539
540 SetUpdateCheckAllowed(false);
541
542 const Time curr_time = fake_clock_.GetWallclockTime();
543 UpdateState update_state = GetDefaultUpdateState(TimeDelta::FromSeconds(10));
544 update_state.download_errors_max = 1;
545 update_state.download_errors.emplace_back(
546 0, ErrorCode::kDownloadTransferError,
547 curr_time - TimeDelta::FromSeconds(8));
548 update_state.download_errors.emplace_back(
549 0, ErrorCode::kDownloadTransferError,
550 curr_time - TimeDelta::FromSeconds(2));
551 update_state.failures_last_updated = curr_time;
552 update_state.backoff_expiry = curr_time + TimeDelta::FromMinutes(3);
553
554 // Check that UpdateCanStart returns false and a new backoff expiry is
555 // generated.
556 UpdateDownloadParams result;
557 ExpectPolicyStatus(EvalStatus::kAskMeAgainLater, &Policy::UpdateCanStart,
558 &result, update_state);
559 EXPECT_FALSE(result.update_can_start);
560 EXPECT_EQ(UpdateCannotStartReason::kBackoff, result.cannot_start_reason);
561 EXPECT_FALSE(result.do_increment_failures);
562 EXPECT_LT(curr_time, result.backoff_expiry);
563}
564
565TEST_F(UmChromeOSPolicyTest, UpdateCanStartAllowedBackoffSatisfied) {
566 // The UpdateCanStart policy returns true; a previously enacted backoff period
567 // has elapsed, we're good to go.
568
569 SetUpdateCheckAllowed(false);
570
571 const Time curr_time = fake_clock_.GetWallclockTime();
572 UpdateState update_state = GetDefaultUpdateState(TimeDelta::FromSeconds(10));
573 update_state.download_errors_max = 1;
574 update_state.download_errors.emplace_back(
575 0, ErrorCode::kDownloadTransferError,
576 curr_time - TimeDelta::FromSeconds(8));
577 update_state.download_errors.emplace_back(
578 0, ErrorCode::kDownloadTransferError,
579 curr_time - TimeDelta::FromSeconds(2));
580 update_state.failures_last_updated = curr_time - TimeDelta::FromSeconds(1);
581 update_state.backoff_expiry = curr_time - TimeDelta::FromSeconds(1);
582
583 // Check that UpdateCanStart returns false and a new backoff expiry is
584 // generated.
585 UpdateDownloadParams result;
586 ExpectPolicyStatus(EvalStatus::kSucceeded, &Policy::UpdateCanStart,
587 &result, update_state);
588 EXPECT_TRUE(result.update_can_start);
589 EXPECT_EQ(UpdateCannotStartReason::kUndefined, result.cannot_start_reason);
590 EXPECT_EQ(0, result.download_url_idx);
Gilad Arnold14a9e702014-10-08 08:09:09 -0700591 EXPECT_TRUE(result.download_url_allowed);
Gilad Arnolddc4bb262014-07-23 10:45:19 -0700592 EXPECT_EQ(0, result.download_url_num_errors);
593 EXPECT_FALSE(result.do_increment_failures);
594 EXPECT_EQ(Time(), result.backoff_expiry);
595}
596
597TEST_F(UmChromeOSPolicyTest, UpdateCanStartAllowedBackoffDisabled) {
598 // The UpdateCanStart policy returns false; failures are reported but backoff
599 // is disabled.
600
601 SetUpdateCheckAllowed(false);
602
603 const Time curr_time = fake_clock_.GetWallclockTime();
604 UpdateState update_state = GetDefaultUpdateState(TimeDelta::FromSeconds(10));
605 update_state.download_errors_max = 1;
606 update_state.download_errors.emplace_back(
607 0, ErrorCode::kDownloadTransferError,
608 curr_time - TimeDelta::FromSeconds(8));
609 update_state.download_errors.emplace_back(
610 0, ErrorCode::kDownloadTransferError,
611 curr_time - TimeDelta::FromSeconds(2));
612 update_state.is_backoff_disabled = true;
613
614 // Check that UpdateCanStart returns false and a new backoff expiry is
615 // generated.
616 UpdateDownloadParams result;
617 ExpectPolicyStatus(EvalStatus::kSucceeded, &Policy::UpdateCanStart, &result,
618 update_state);
619 EXPECT_TRUE(result.update_can_start);
620 EXPECT_EQ(UpdateCannotStartReason::kUndefined, result.cannot_start_reason);
621 EXPECT_EQ(0, result.download_url_idx);
Gilad Arnold14a9e702014-10-08 08:09:09 -0700622 EXPECT_TRUE(result.download_url_allowed);
Gilad Arnolddc4bb262014-07-23 10:45:19 -0700623 EXPECT_EQ(0, result.download_url_num_errors);
624 EXPECT_TRUE(result.do_increment_failures);
625 EXPECT_EQ(Time(), result.backoff_expiry);
626}
627
628TEST_F(UmChromeOSPolicyTest, UpdateCanStartAllowedNoBackoffInteractive) {
629 // The UpdateCanStart policy returns false; failures are reported but this is
630 // an interactive update check.
631
632 SetUpdateCheckAllowed(false);
633
634 const Time curr_time = fake_clock_.GetWallclockTime();
635 UpdateState update_state = GetDefaultUpdateState(TimeDelta::FromSeconds(10));
636 update_state.download_errors_max = 1;
637 update_state.download_errors.emplace_back(
638 0, ErrorCode::kDownloadTransferError,
639 curr_time - TimeDelta::FromSeconds(8));
640 update_state.download_errors.emplace_back(
641 0, ErrorCode::kDownloadTransferError,
642 curr_time - TimeDelta::FromSeconds(2));
Amin Hassanied37d682018-04-06 13:22:00 -0700643 update_state.interactive = true;
Gilad Arnolddc4bb262014-07-23 10:45:19 -0700644
645 // Check that UpdateCanStart returns false and a new backoff expiry is
646 // generated.
647 UpdateDownloadParams result;
648 ExpectPolicyStatus(EvalStatus::kSucceeded, &Policy::UpdateCanStart, &result,
649 update_state);
650 EXPECT_TRUE(result.update_can_start);
651 EXPECT_EQ(UpdateCannotStartReason::kUndefined, result.cannot_start_reason);
652 EXPECT_EQ(0, result.download_url_idx);
Gilad Arnold14a9e702014-10-08 08:09:09 -0700653 EXPECT_TRUE(result.download_url_allowed);
Gilad Arnolddc4bb262014-07-23 10:45:19 -0700654 EXPECT_EQ(0, result.download_url_num_errors);
655 EXPECT_TRUE(result.do_increment_failures);
656 EXPECT_EQ(Time(), result.backoff_expiry);
657}
658
659TEST_F(UmChromeOSPolicyTest, UpdateCanStartAllowedNoBackoffDelta) {
660 // The UpdateCanStart policy returns false; failures are reported but this is
661 // a delta payload.
662
663 SetUpdateCheckAllowed(false);
664
665 const Time curr_time = fake_clock_.GetWallclockTime();
666 UpdateState update_state = GetDefaultUpdateState(TimeDelta::FromSeconds(10));
667 update_state.download_errors_max = 1;
668 update_state.download_errors.emplace_back(
669 0, ErrorCode::kDownloadTransferError,
670 curr_time - TimeDelta::FromSeconds(8));
671 update_state.download_errors.emplace_back(
672 0, ErrorCode::kDownloadTransferError,
673 curr_time - TimeDelta::FromSeconds(2));
674 update_state.is_delta_payload = true;
675
676 // Check that UpdateCanStart returns false and a new backoff expiry is
677 // generated.
678 UpdateDownloadParams result;
679 ExpectPolicyStatus(EvalStatus::kSucceeded, &Policy::UpdateCanStart, &result,
680 update_state);
681 EXPECT_TRUE(result.update_can_start);
682 EXPECT_EQ(UpdateCannotStartReason::kUndefined, result.cannot_start_reason);
683 EXPECT_EQ(0, result.download_url_idx);
Gilad Arnold14a9e702014-10-08 08:09:09 -0700684 EXPECT_TRUE(result.download_url_allowed);
Gilad Arnolddc4bb262014-07-23 10:45:19 -0700685 EXPECT_EQ(0, result.download_url_num_errors);
686 EXPECT_TRUE(result.do_increment_failures);
687 EXPECT_EQ(Time(), result.backoff_expiry);
688}
689
690TEST_F(UmChromeOSPolicyTest, UpdateCanStartAllowedNoBackoffUnofficialBuild) {
691 // The UpdateCanStart policy returns false; failures are reported but this is
692 // an unofficial build.
693
694 SetUpdateCheckAllowed(false);
695
696 const Time curr_time = fake_clock_.GetWallclockTime();
697 UpdateState update_state = GetDefaultUpdateState(TimeDelta::FromSeconds(10));
698 update_state.download_errors_max = 1;
699 update_state.download_errors.emplace_back(
700 0, ErrorCode::kDownloadTransferError,
701 curr_time - TimeDelta::FromSeconds(8));
702 update_state.download_errors.emplace_back(
703 0, ErrorCode::kDownloadTransferError,
704 curr_time - TimeDelta::FromSeconds(2));
705
706 fake_state_.system_provider()->var_is_official_build()->
707 reset(new bool(false));
708
709 // Check that UpdateCanStart returns false and a new backoff expiry is
710 // generated.
711 UpdateDownloadParams result;
712 ExpectPolicyStatus(EvalStatus::kSucceeded, &Policy::UpdateCanStart, &result,
713 update_state);
714 EXPECT_TRUE(result.update_can_start);
715 EXPECT_EQ(UpdateCannotStartReason::kUndefined, result.cannot_start_reason);
716 EXPECT_EQ(0, result.download_url_idx);
Gilad Arnold14a9e702014-10-08 08:09:09 -0700717 EXPECT_TRUE(result.download_url_allowed);
Gilad Arnolddc4bb262014-07-23 10:45:19 -0700718 EXPECT_EQ(0, result.download_url_num_errors);
719 EXPECT_TRUE(result.do_increment_failures);
720 EXPECT_EQ(Time(), result.backoff_expiry);
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700721}
722
Alex Deymo63784a52014-05-28 10:46:14 -0700723TEST_F(UmChromeOSPolicyTest, UpdateCanStartFailsScatteringFailed) {
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700724 // The UpdateCanStart policy fails because the UpdateScattering policy it
725 // depends on fails (unset variable).
726
727 SetUpdateCheckAllowed(false);
728
729 // Override the default seed variable with a null value so that the policy
730 // request would fail.
Gilad Arnolddc4bb262014-07-23 10:45:19 -0700731 // TODO(garnold) This failure may or may not fail a number
732 // sub-policies/decisions, like scattering and backoff. We'll need a more
733 // deliberate setup to ensure that we're failing what we want to be failing.
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700734 fake_state_.random_provider()->var_seed()->reset(nullptr);
735
736 // Check that the UpdateCanStart fails.
737 UpdateState update_state = GetDefaultUpdateState(TimeDelta::FromSeconds(1));
Gilad Arnold42f253b2014-06-25 12:39:17 -0700738 UpdateDownloadParams result;
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700739 ExpectPolicyStatus(EvalStatus::kFailed,
Gilad Arnolddc4bb262014-07-23 10:45:19 -0700740 &Policy::UpdateCanStart, &result, update_state);
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700741}
742
Alex Deymo63784a52014-05-28 10:46:14 -0700743TEST_F(UmChromeOSPolicyTest,
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700744 UpdateCanStartNotAllowedScatteringNewWaitPeriodApplies) {
745 // The UpdateCanStart policy returns false; device policy is loaded and
746 // scattering applies due to an unsatisfied wait period, which was newly
747 // generated.
748
749 SetUpdateCheckAllowed(false);
750 fake_state_.device_policy_provider()->var_scatter_factor()->reset(
751 new TimeDelta(TimeDelta::FromMinutes(2)));
752
753
754 UpdateState update_state = GetDefaultUpdateState(TimeDelta::FromSeconds(1));
755
756 // Check that the UpdateCanStart returns false and a new wait period
757 // generated.
Gilad Arnold42f253b2014-06-25 12:39:17 -0700758 UpdateDownloadParams result;
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700759 ExpectPolicyStatus(EvalStatus::kSucceeded, &Policy::UpdateCanStart, &result,
Gilad Arnolddc4bb262014-07-23 10:45:19 -0700760 update_state);
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700761 EXPECT_FALSE(result.update_can_start);
762 EXPECT_EQ(UpdateCannotStartReason::kScattering, result.cannot_start_reason);
763 EXPECT_LT(TimeDelta(), result.scatter_wait_period);
764 EXPECT_EQ(0, result.scatter_check_threshold);
765}
766
Alex Deymo63784a52014-05-28 10:46:14 -0700767TEST_F(UmChromeOSPolicyTest,
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700768 UpdateCanStartNotAllowedScatteringPrevWaitPeriodStillApplies) {
769 // The UpdateCanStart policy returns false w/ kAskMeAgainLater; device policy
770 // is loaded and a previously generated scattering period still applies, none
771 // of the scattering values has changed.
772
773 SetUpdateCheckAllowed(false);
774 fake_state_.device_policy_provider()->var_scatter_factor()->reset(
775 new TimeDelta(TimeDelta::FromMinutes(2)));
776
777 UpdateState update_state = GetDefaultUpdateState(TimeDelta::FromSeconds(1));
778 update_state.scatter_wait_period = TimeDelta::FromSeconds(35);
779
780 // Check that the UpdateCanStart returns false and a new wait period
781 // generated.
Gilad Arnold42f253b2014-06-25 12:39:17 -0700782 UpdateDownloadParams result;
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700783 ExpectPolicyStatus(EvalStatus::kAskMeAgainLater, &Policy::UpdateCanStart,
Gilad Arnolddc4bb262014-07-23 10:45:19 -0700784 &result, update_state);
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700785 EXPECT_FALSE(result.update_can_start);
786 EXPECT_EQ(UpdateCannotStartReason::kScattering, result.cannot_start_reason);
787 EXPECT_EQ(TimeDelta::FromSeconds(35), result.scatter_wait_period);
788 EXPECT_EQ(0, result.scatter_check_threshold);
789}
790
Alex Deymo63784a52014-05-28 10:46:14 -0700791TEST_F(UmChromeOSPolicyTest,
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700792 UpdateCanStartNotAllowedScatteringNewCountThresholdApplies) {
793 // The UpdateCanStart policy returns false; device policy is loaded and
794 // scattering applies due to an unsatisfied update check count threshold.
795 //
796 // This ensures a non-zero check threshold, which may or may not be combined
797 // with a non-zero wait period (for which we cannot reliably control).
798
799 SetUpdateCheckAllowed(false);
800 fake_state_.device_policy_provider()->var_scatter_factor()->reset(
801 new TimeDelta(TimeDelta::FromSeconds(1)));
802
803 UpdateState update_state = GetDefaultUpdateState(TimeDelta::FromSeconds(1));
804 update_state.scatter_check_threshold_min = 2;
805 update_state.scatter_check_threshold_max = 5;
806
807 // Check that the UpdateCanStart returns false.
Gilad Arnold42f253b2014-06-25 12:39:17 -0700808 UpdateDownloadParams result;
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700809 ExpectPolicyStatus(EvalStatus::kSucceeded, &Policy::UpdateCanStart, &result,
Gilad Arnolddc4bb262014-07-23 10:45:19 -0700810 update_state);
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700811 EXPECT_FALSE(result.update_can_start);
812 EXPECT_EQ(UpdateCannotStartReason::kScattering, result.cannot_start_reason);
813 EXPECT_LE(2, result.scatter_check_threshold);
814 EXPECT_GE(5, result.scatter_check_threshold);
815}
816
Alex Deymo63784a52014-05-28 10:46:14 -0700817TEST_F(UmChromeOSPolicyTest,
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700818 UpdateCanStartNotAllowedScatteringPrevCountThresholdStillApplies) {
819 // The UpdateCanStart policy returns false; device policy is loaded and
820 // scattering due to a previously generated count threshold still applies.
821
822 SetUpdateCheckAllowed(false);
823 fake_state_.device_policy_provider()->var_scatter_factor()->reset(
824 new TimeDelta(TimeDelta::FromSeconds(1)));
825
826 UpdateState update_state = GetDefaultUpdateState(TimeDelta::FromSeconds(1));
827 update_state.scatter_check_threshold = 3;
828 update_state.scatter_check_threshold_min = 2;
829 update_state.scatter_check_threshold_max = 5;
830
831 // Check that the UpdateCanStart returns false.
Gilad Arnold42f253b2014-06-25 12:39:17 -0700832 UpdateDownloadParams result;
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700833 ExpectPolicyStatus(EvalStatus::kSucceeded, &Policy::UpdateCanStart, &result,
Gilad Arnolddc4bb262014-07-23 10:45:19 -0700834 update_state);
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700835 EXPECT_FALSE(result.update_can_start);
836 EXPECT_EQ(UpdateCannotStartReason::kScattering, result.cannot_start_reason);
837 EXPECT_EQ(3, result.scatter_check_threshold);
838}
839
Alex Deymo63784a52014-05-28 10:46:14 -0700840TEST_F(UmChromeOSPolicyTest, UpdateCanStartAllowedScatteringSatisfied) {
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700841 // The UpdateCanStart policy returns true; device policy is loaded and
842 // scattering is enabled, but both wait period and check threshold are
843 // satisfied.
844
845 SetUpdateCheckAllowed(false);
846 fake_state_.device_policy_provider()->var_scatter_factor()->reset(
847 new TimeDelta(TimeDelta::FromSeconds(120)));
848
849 UpdateState update_state = GetDefaultUpdateState(TimeDelta::FromSeconds(75));
850 update_state.num_checks = 4;
851 update_state.scatter_wait_period = TimeDelta::FromSeconds(60);
852 update_state.scatter_check_threshold = 3;
853 update_state.scatter_check_threshold_min = 2;
854 update_state.scatter_check_threshold_max = 5;
855
856 // Check that the UpdateCanStart returns true.
Gilad Arnold42f253b2014-06-25 12:39:17 -0700857 UpdateDownloadParams result;
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700858 ExpectPolicyStatus(EvalStatus::kSucceeded, &Policy::UpdateCanStart, &result,
Gilad Arnolddc4bb262014-07-23 10:45:19 -0700859 update_state);
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700860 EXPECT_TRUE(result.update_can_start);
861 EXPECT_EQ(TimeDelta(), result.scatter_wait_period);
862 EXPECT_EQ(0, result.scatter_check_threshold);
Gilad Arnoldb3b05442014-05-30 14:25:05 -0700863 EXPECT_EQ(0, result.download_url_idx);
Gilad Arnold14a9e702014-10-08 08:09:09 -0700864 EXPECT_TRUE(result.download_url_allowed);
Gilad Arnolddc4bb262014-07-23 10:45:19 -0700865 EXPECT_EQ(0, result.download_url_num_errors);
866 EXPECT_FALSE(result.do_increment_failures);
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700867}
868
Alex Deymo63784a52014-05-28 10:46:14 -0700869TEST_F(UmChromeOSPolicyTest,
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700870 UpdateCanStartAllowedInteractivePreventsScattering) {
871 // The UpdateCanStart policy returns true; device policy is loaded and
872 // scattering would have applied, except that the update check is interactive
873 // and so it is suppressed.
874
875 SetUpdateCheckAllowed(false);
876 fake_state_.device_policy_provider()->var_scatter_factor()->reset(
877 new TimeDelta(TimeDelta::FromSeconds(1)));
878
879 UpdateState update_state = GetDefaultUpdateState(TimeDelta::FromSeconds(1));
Amin Hassanied37d682018-04-06 13:22:00 -0700880 update_state.interactive = true;
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700881 update_state.scatter_check_threshold = 0;
882 update_state.scatter_check_threshold_min = 2;
883 update_state.scatter_check_threshold_max = 5;
884
885 // Check that the UpdateCanStart returns true.
Gilad Arnold42f253b2014-06-25 12:39:17 -0700886 UpdateDownloadParams result;
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700887 ExpectPolicyStatus(EvalStatus::kSucceeded, &Policy::UpdateCanStart, &result,
Gilad Arnolddc4bb262014-07-23 10:45:19 -0700888 update_state);
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700889 EXPECT_TRUE(result.update_can_start);
890 EXPECT_EQ(TimeDelta(), result.scatter_wait_period);
891 EXPECT_EQ(0, result.scatter_check_threshold);
Gilad Arnoldb3b05442014-05-30 14:25:05 -0700892 EXPECT_EQ(0, result.download_url_idx);
Gilad Arnold14a9e702014-10-08 08:09:09 -0700893 EXPECT_TRUE(result.download_url_allowed);
Gilad Arnolddc4bb262014-07-23 10:45:19 -0700894 EXPECT_EQ(0, result.download_url_num_errors);
895 EXPECT_FALSE(result.do_increment_failures);
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700896}
897
Alex Deymo63784a52014-05-28 10:46:14 -0700898TEST_F(UmChromeOSPolicyTest,
Gilad Arnold76a11f62014-05-20 09:02:12 -0700899 UpdateCanStartAllowedOobePreventsScattering) {
900 // The UpdateCanStart policy returns true; device policy is loaded and
901 // scattering would have applied, except that OOBE was not completed and so it
902 // is suppressed.
903
904 SetUpdateCheckAllowed(false);
905 fake_state_.device_policy_provider()->var_scatter_factor()->reset(
906 new TimeDelta(TimeDelta::FromSeconds(1)));
907 fake_state_.system_provider()->var_is_oobe_complete()->reset(new bool(false));
908
909 UpdateState update_state = GetDefaultUpdateState(TimeDelta::FromSeconds(1));
Amin Hassanied37d682018-04-06 13:22:00 -0700910 update_state.interactive = true;
Gilad Arnold76a11f62014-05-20 09:02:12 -0700911 update_state.scatter_check_threshold = 0;
912 update_state.scatter_check_threshold_min = 2;
913 update_state.scatter_check_threshold_max = 5;
914
915 // Check that the UpdateCanStart returns true.
Gilad Arnold42f253b2014-06-25 12:39:17 -0700916 UpdateDownloadParams result;
Gilad Arnold76a11f62014-05-20 09:02:12 -0700917 ExpectPolicyStatus(EvalStatus::kSucceeded, &Policy::UpdateCanStart, &result,
Gilad Arnolddc4bb262014-07-23 10:45:19 -0700918 update_state);
Gilad Arnold76a11f62014-05-20 09:02:12 -0700919 EXPECT_TRUE(result.update_can_start);
920 EXPECT_EQ(TimeDelta(), result.scatter_wait_period);
921 EXPECT_EQ(0, result.scatter_check_threshold);
Gilad Arnoldb3b05442014-05-30 14:25:05 -0700922 EXPECT_EQ(0, result.download_url_idx);
Gilad Arnold14a9e702014-10-08 08:09:09 -0700923 EXPECT_TRUE(result.download_url_allowed);
Gilad Arnolddc4bb262014-07-23 10:45:19 -0700924 EXPECT_EQ(0, result.download_url_num_errors);
925 EXPECT_FALSE(result.do_increment_failures);
Gilad Arnold76a11f62014-05-20 09:02:12 -0700926}
927
Alex Deymo63784a52014-05-28 10:46:14 -0700928TEST_F(UmChromeOSPolicyTest, UpdateCanStartAllowedWithAttributes) {
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700929 // The UpdateCanStart policy returns true; device policy permits both HTTP and
930 // P2P updates, as well as a non-empty target channel string.
931
932 SetUpdateCheckAllowed(false);
933
934 // Override specific device policy attributes.
935 fake_state_.device_policy_provider()->var_http_downloads_enabled()->reset(
936 new bool(true));
937 fake_state_.device_policy_provider()->var_au_p2p_enabled()->reset(
938 new bool(true));
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700939
940 // Check that the UpdateCanStart returns true.
941 UpdateState update_state = GetDefaultUpdateState(TimeDelta::FromMinutes(10));
Gilad Arnold42f253b2014-06-25 12:39:17 -0700942 UpdateDownloadParams result;
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700943 ExpectPolicyStatus(EvalStatus::kSucceeded, &Policy::UpdateCanStart, &result,
Gilad Arnolddc4bb262014-07-23 10:45:19 -0700944 update_state);
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700945 EXPECT_TRUE(result.update_can_start);
Gilad Arnoldb2f99192014-10-07 13:01:52 -0700946 EXPECT_TRUE(result.p2p_downloading_allowed);
947 EXPECT_TRUE(result.p2p_sharing_allowed);
Gilad Arnoldb3b05442014-05-30 14:25:05 -0700948 EXPECT_EQ(0, result.download_url_idx);
Gilad Arnold14a9e702014-10-08 08:09:09 -0700949 EXPECT_TRUE(result.download_url_allowed);
Gilad Arnolddc4bb262014-07-23 10:45:19 -0700950 EXPECT_EQ(0, result.download_url_num_errors);
951 EXPECT_FALSE(result.do_increment_failures);
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700952}
953
Alex Deymo63784a52014-05-28 10:46:14 -0700954TEST_F(UmChromeOSPolicyTest, UpdateCanStartAllowedWithP2PFromUpdater) {
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700955 // The UpdateCanStart policy returns true; device policy forbids both HTTP and
956 // P2P updates, but the updater is configured to allow P2P and overrules the
957 // setting.
958
959 SetUpdateCheckAllowed(false);
960
961 // Override specific device policy attributes.
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700962 fake_state_.updater_provider()->var_p2p_enabled()->reset(new bool(true));
963
964 // Check that the UpdateCanStart returns true.
965 UpdateState update_state = GetDefaultUpdateState(TimeDelta::FromMinutes(10));
Gilad Arnold42f253b2014-06-25 12:39:17 -0700966 UpdateDownloadParams result;
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700967 ExpectPolicyStatus(EvalStatus::kSucceeded, &Policy::UpdateCanStart, &result,
Gilad Arnolddc4bb262014-07-23 10:45:19 -0700968 update_state);
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700969 EXPECT_TRUE(result.update_can_start);
Gilad Arnoldb2f99192014-10-07 13:01:52 -0700970 EXPECT_TRUE(result.p2p_downloading_allowed);
971 EXPECT_TRUE(result.p2p_sharing_allowed);
Gilad Arnoldb3b05442014-05-30 14:25:05 -0700972 EXPECT_EQ(0, result.download_url_idx);
Gilad Arnold14a9e702014-10-08 08:09:09 -0700973 EXPECT_TRUE(result.download_url_allowed);
Gilad Arnolddc4bb262014-07-23 10:45:19 -0700974 EXPECT_EQ(0, result.download_url_num_errors);
975 EXPECT_FALSE(result.do_increment_failures);
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700976}
977
Gilad Arnoldb2f99192014-10-07 13:01:52 -0700978TEST_F(UmChromeOSPolicyTest,
Gilad Arnold78ecbfc2014-10-22 14:38:25 -0700979 UpdateCanStartAllowedP2PDownloadingBlockedDueToOmaha) {
980 // The UpdateCanStart policy returns true; device policy permits HTTP, but
981 // policy blocks P2P downloading because Omaha forbids it. P2P sharing is
982 // still permitted.
983
984 SetUpdateCheckAllowed(false);
985
986 // Override specific device policy attributes.
987 fake_state_.device_policy_provider()->var_http_downloads_enabled()->reset(
988 new bool(true));
989 fake_state_.device_policy_provider()->var_au_p2p_enabled()->reset(
990 new bool(true));
991
992 // Check that the UpdateCanStart returns true.
993 UpdateState update_state = GetDefaultUpdateState(TimeDelta::FromMinutes(10));
994 update_state.p2p_downloading_disabled = true;
995 UpdateDownloadParams result;
996 ExpectPolicyStatus(EvalStatus::kSucceeded, &Policy::UpdateCanStart, &result,
997 update_state);
998 EXPECT_TRUE(result.update_can_start);
999 EXPECT_FALSE(result.p2p_downloading_allowed);
1000 EXPECT_TRUE(result.p2p_sharing_allowed);
1001}
1002
1003TEST_F(UmChromeOSPolicyTest,
1004 UpdateCanStartAllowedP2PSharingBlockedDueToOmaha) {
1005 // The UpdateCanStart policy returns true; device policy permits HTTP, but
1006 // policy blocks P2P sharing because Omaha forbids it. P2P downloading is
1007 // still permitted.
1008
1009 SetUpdateCheckAllowed(false);
1010
1011 // Override specific device policy attributes.
1012 fake_state_.device_policy_provider()->var_http_downloads_enabled()->reset(
1013 new bool(true));
1014 fake_state_.device_policy_provider()->var_au_p2p_enabled()->reset(
1015 new bool(true));
1016
1017 // Check that the UpdateCanStart returns true.
1018 UpdateState update_state = GetDefaultUpdateState(TimeDelta::FromMinutes(10));
1019 update_state.p2p_sharing_disabled = true;
1020 UpdateDownloadParams result;
1021 ExpectPolicyStatus(EvalStatus::kSucceeded, &Policy::UpdateCanStart, &result,
1022 update_state);
1023 EXPECT_TRUE(result.update_can_start);
1024 EXPECT_TRUE(result.p2p_downloading_allowed);
1025 EXPECT_FALSE(result.p2p_sharing_allowed);
1026}
1027
1028TEST_F(UmChromeOSPolicyTest,
1029 UpdateCanStartAllowedP2PDownloadingBlockedDueToNumAttempts) {
Gilad Arnold349ac832014-10-06 14:20:28 -07001030 // The UpdateCanStart policy returns true; device policy permits HTTP but
Gilad Arnoldb2f99192014-10-07 13:01:52 -07001031 // blocks P2P download, because the max number of P2P downloads have been
1032 // attempted. P2P sharing is still permitted.
Gilad Arnold349ac832014-10-06 14:20:28 -07001033
1034 SetUpdateCheckAllowed(false);
1035
1036 // Override specific device policy attributes.
1037 fake_state_.device_policy_provider()->var_http_downloads_enabled()->reset(
1038 new bool(true));
1039 fake_state_.device_policy_provider()->var_au_p2p_enabled()->reset(
1040 new bool(true));
1041
1042 // Check that the UpdateCanStart returns true.
1043 UpdateState update_state = GetDefaultUpdateState(TimeDelta::FromMinutes(10));
1044 update_state.p2p_num_attempts = ChromeOSPolicy::kMaxP2PAttempts;
1045 UpdateDownloadParams result;
1046 ExpectPolicyStatus(EvalStatus::kSucceeded, &Policy::UpdateCanStart, &result,
1047 update_state);
1048 EXPECT_TRUE(result.update_can_start);
Gilad Arnoldb2f99192014-10-07 13:01:52 -07001049 EXPECT_FALSE(result.p2p_downloading_allowed);
1050 EXPECT_TRUE(result.p2p_sharing_allowed);
Gilad Arnold349ac832014-10-06 14:20:28 -07001051}
1052
1053TEST_F(UmChromeOSPolicyTest,
Gilad Arnold78ecbfc2014-10-22 14:38:25 -07001054 UpdateCanStartAllowedP2PDownloadingBlockedDueToAttemptsPeriod) {
Gilad Arnold349ac832014-10-06 14:20:28 -07001055 // The UpdateCanStart policy returns true; device policy permits HTTP but
Gilad Arnoldb2f99192014-10-07 13:01:52 -07001056 // blocks P2P download, because the max period for attempt to download via P2P
1057 // has elapsed. P2P sharing is still permitted.
Gilad Arnold349ac832014-10-06 14:20:28 -07001058
1059 SetUpdateCheckAllowed(false);
1060
1061 // Override specific device policy attributes.
1062 fake_state_.device_policy_provider()->var_http_downloads_enabled()->reset(
1063 new bool(true));
1064 fake_state_.device_policy_provider()->var_au_p2p_enabled()->reset(
1065 new bool(true));
1066
1067 // Check that the UpdateCanStart returns true.
1068 UpdateState update_state = GetDefaultUpdateState(TimeDelta::FromMinutes(10));
1069 update_state.p2p_num_attempts = 1;
1070 update_state.p2p_first_attempted =
1071 fake_clock_.GetWallclockTime() -
Alex Deymof329b932014-10-30 01:37:48 -07001072 TimeDelta::FromSeconds(
1073 ChromeOSPolicy::kMaxP2PAttemptsPeriodInSeconds + 1);
Gilad Arnold349ac832014-10-06 14:20:28 -07001074 UpdateDownloadParams result;
1075 ExpectPolicyStatus(EvalStatus::kSucceeded, &Policy::UpdateCanStart, &result,
1076 update_state);
1077 EXPECT_TRUE(result.update_can_start);
Gilad Arnoldb2f99192014-10-07 13:01:52 -07001078 EXPECT_FALSE(result.p2p_downloading_allowed);
1079 EXPECT_TRUE(result.p2p_sharing_allowed);
Gilad Arnold349ac832014-10-06 14:20:28 -07001080}
1081
Gilad Arnoldb3b05442014-05-30 14:25:05 -07001082TEST_F(UmChromeOSPolicyTest,
1083 UpdateCanStartAllowedWithHttpUrlForUnofficialBuild) {
Gilad Arnoldf62a4b82014-05-01 07:41:07 -07001084 // The UpdateCanStart policy returns true; device policy forbids both HTTP and
1085 // P2P updates, but marking this an unofficial build overrules the HTTP
1086 // setting.
1087
1088 SetUpdateCheckAllowed(false);
1089
1090 // Override specific device policy attributes.
Gilad Arnoldb3b05442014-05-30 14:25:05 -07001091 fake_state_.device_policy_provider()->var_http_downloads_enabled()->reset(
1092 new bool(false));
Gilad Arnoldf62a4b82014-05-01 07:41:07 -07001093 fake_state_.system_provider()->var_is_official_build()->
1094 reset(new bool(false));
1095
1096 // Check that the UpdateCanStart returns true.
1097 UpdateState update_state = GetDefaultUpdateState(TimeDelta::FromMinutes(10));
Gilad Arnold42f253b2014-06-25 12:39:17 -07001098 UpdateDownloadParams result;
Gilad Arnoldf62a4b82014-05-01 07:41:07 -07001099 ExpectPolicyStatus(EvalStatus::kSucceeded, &Policy::UpdateCanStart, &result,
Gilad Arnolddc4bb262014-07-23 10:45:19 -07001100 update_state);
Gilad Arnoldf62a4b82014-05-01 07:41:07 -07001101 EXPECT_TRUE(result.update_can_start);
Gilad Arnoldb3b05442014-05-30 14:25:05 -07001102 EXPECT_EQ(0, result.download_url_idx);
Gilad Arnold14a9e702014-10-08 08:09:09 -07001103 EXPECT_TRUE(result.download_url_allowed);
Gilad Arnolddc4bb262014-07-23 10:45:19 -07001104 EXPECT_EQ(0, result.download_url_num_errors);
1105 EXPECT_FALSE(result.do_increment_failures);
Gilad Arnoldb3b05442014-05-30 14:25:05 -07001106}
1107
1108TEST_F(UmChromeOSPolicyTest, UpdateCanStartAllowedWithHttpsUrl) {
1109 // The UpdateCanStart policy returns true; device policy forbids both HTTP and
1110 // P2P updates, but an HTTPS URL is provided and selected for download.
1111
1112 SetUpdateCheckAllowed(false);
1113
1114 // Override specific device policy attributes.
1115 fake_state_.device_policy_provider()->var_http_downloads_enabled()->reset(
1116 new bool(false));
1117
1118 // Add an HTTPS URL.
1119 UpdateState update_state = GetDefaultUpdateState(TimeDelta::FromMinutes(10));
Gilad Arnolddc4bb262014-07-23 10:45:19 -07001120 update_state.download_urls.emplace_back("https://secure/url/");
Gilad Arnoldb3b05442014-05-30 14:25:05 -07001121
1122 // Check that the UpdateCanStart returns true.
Gilad Arnold42f253b2014-06-25 12:39:17 -07001123 UpdateDownloadParams result;
Gilad Arnoldb3b05442014-05-30 14:25:05 -07001124 ExpectPolicyStatus(EvalStatus::kSucceeded, &Policy::UpdateCanStart, &result,
Gilad Arnolddc4bb262014-07-23 10:45:19 -07001125 update_state);
Gilad Arnoldb3b05442014-05-30 14:25:05 -07001126 EXPECT_TRUE(result.update_can_start);
Gilad Arnoldb3b05442014-05-30 14:25:05 -07001127 EXPECT_EQ(1, result.download_url_idx);
Gilad Arnold14a9e702014-10-08 08:09:09 -07001128 EXPECT_TRUE(result.download_url_allowed);
Gilad Arnolddc4bb262014-07-23 10:45:19 -07001129 EXPECT_EQ(0, result.download_url_num_errors);
1130 EXPECT_FALSE(result.do_increment_failures);
1131}
1132
1133TEST_F(UmChromeOSPolicyTest, UpdateCanStartAllowedMaxErrorsNotExceeded) {
1134 // The UpdateCanStart policy returns true; the first URL has download errors
1135 // but does not exceed the maximum allowed number of failures, so it is stilli
1136 // usable.
1137
1138 SetUpdateCheckAllowed(false);
1139
1140 // Add a second URL; update with this URL attempted and failed enough times to
1141 // disqualify the current (first) URL.
1142 UpdateState update_state = GetDefaultUpdateState(TimeDelta::FromMinutes(10));
1143 update_state.num_checks = 5;
1144 update_state.download_urls.emplace_back("http://another/fake/url/");
1145 Time t = fake_clock_.GetWallclockTime() - TimeDelta::FromSeconds(12);
1146 for (int i = 0; i < 5; i++) {
1147 update_state.download_errors.emplace_back(
1148 0, ErrorCode::kDownloadTransferError, t);
1149 t += TimeDelta::FromSeconds(1);
1150 }
1151
1152 // Check that the UpdateCanStart returns true.
1153 UpdateDownloadParams result;
1154 ExpectPolicyStatus(EvalStatus::kSucceeded, &Policy::UpdateCanStart, &result,
1155 update_state);
1156 EXPECT_TRUE(result.update_can_start);
Gilad Arnolddc4bb262014-07-23 10:45:19 -07001157 EXPECT_EQ(0, result.download_url_idx);
Gilad Arnold14a9e702014-10-08 08:09:09 -07001158 EXPECT_TRUE(result.download_url_allowed);
Gilad Arnolddc4bb262014-07-23 10:45:19 -07001159 EXPECT_EQ(5, result.download_url_num_errors);
1160 EXPECT_FALSE(result.do_increment_failures);
Gilad Arnoldb3b05442014-05-30 14:25:05 -07001161}
1162
1163TEST_F(UmChromeOSPolicyTest, UpdateCanStartAllowedWithSecondUrlMaxExceeded) {
1164 // The UpdateCanStart policy returns true; the first URL exceeded the maximum
1165 // allowed number of failures, but a second URL is available.
1166
1167 SetUpdateCheckAllowed(false);
1168
1169 // Add a second URL; update with this URL attempted and failed enough times to
Gilad Arnolddc4bb262014-07-23 10:45:19 -07001170 // disqualify the current (first) URL.
Gilad Arnoldb3b05442014-05-30 14:25:05 -07001171 UpdateState update_state = GetDefaultUpdateState(TimeDelta::FromMinutes(10));
1172 update_state.num_checks = 10;
Gilad Arnolddc4bb262014-07-23 10:45:19 -07001173 update_state.download_urls.emplace_back("http://another/fake/url/");
1174 Time t = fake_clock_.GetWallclockTime() - TimeDelta::FromSeconds(12);
1175 for (int i = 0; i < 11; i++) {
1176 update_state.download_errors.emplace_back(
1177 0, ErrorCode::kDownloadTransferError, t);
1178 t += TimeDelta::FromSeconds(1);
1179 }
Gilad Arnoldb3b05442014-05-30 14:25:05 -07001180
1181 // Check that the UpdateCanStart returns true.
Gilad Arnold42f253b2014-06-25 12:39:17 -07001182 UpdateDownloadParams result;
Gilad Arnoldb3b05442014-05-30 14:25:05 -07001183 ExpectPolicyStatus(EvalStatus::kSucceeded, &Policy::UpdateCanStart, &result,
Gilad Arnolddc4bb262014-07-23 10:45:19 -07001184 update_state);
Gilad Arnoldb3b05442014-05-30 14:25:05 -07001185 EXPECT_TRUE(result.update_can_start);
Gilad Arnoldb3b05442014-05-30 14:25:05 -07001186 EXPECT_EQ(1, result.download_url_idx);
Gilad Arnold14a9e702014-10-08 08:09:09 -07001187 EXPECT_TRUE(result.download_url_allowed);
Gilad Arnolddc4bb262014-07-23 10:45:19 -07001188 EXPECT_EQ(0, result.download_url_num_errors);
1189 EXPECT_FALSE(result.do_increment_failures);
Gilad Arnoldb3b05442014-05-30 14:25:05 -07001190}
1191
1192TEST_F(UmChromeOSPolicyTest, UpdateCanStartAllowedWithSecondUrlHardError) {
1193 // The UpdateCanStart policy returns true; the first URL fails with a hard
1194 // error, but a second URL is available.
1195
1196 SetUpdateCheckAllowed(false);
1197
1198 // Add a second URL; update with this URL attempted and failed in a way that
1199 // causes it to switch directly to the next URL.
1200 UpdateState update_state = GetDefaultUpdateState(TimeDelta::FromMinutes(10));
1201 update_state.num_checks = 10;
Gilad Arnolddc4bb262014-07-23 10:45:19 -07001202 update_state.download_urls.emplace_back("http://another/fake/url/");
1203 update_state.download_errors.emplace_back(
1204 0, ErrorCode::kPayloadHashMismatchError,
1205 fake_clock_.GetWallclockTime() - TimeDelta::FromSeconds(1));
Gilad Arnoldb3b05442014-05-30 14:25:05 -07001206
1207 // Check that the UpdateCanStart returns true.
Gilad Arnold42f253b2014-06-25 12:39:17 -07001208 UpdateDownloadParams result;
Gilad Arnoldb3b05442014-05-30 14:25:05 -07001209 ExpectPolicyStatus(EvalStatus::kSucceeded, &Policy::UpdateCanStart, &result,
Gilad Arnolddc4bb262014-07-23 10:45:19 -07001210 update_state);
Gilad Arnoldb3b05442014-05-30 14:25:05 -07001211 EXPECT_TRUE(result.update_can_start);
Gilad Arnoldb3b05442014-05-30 14:25:05 -07001212 EXPECT_EQ(1, result.download_url_idx);
Gilad Arnold14a9e702014-10-08 08:09:09 -07001213 EXPECT_TRUE(result.download_url_allowed);
Gilad Arnolddc4bb262014-07-23 10:45:19 -07001214 EXPECT_EQ(0, result.download_url_num_errors);
1215 EXPECT_FALSE(result.do_increment_failures);
Gilad Arnoldb3b05442014-05-30 14:25:05 -07001216}
1217
1218TEST_F(UmChromeOSPolicyTest, UpdateCanStartAllowedUrlWrapsAround) {
1219 // The UpdateCanStart policy returns true; URL search properly wraps around
1220 // the last one on the list.
1221
1222 SetUpdateCheckAllowed(false);
1223
1224 // Add a second URL; update with this URL attempted and failed in a way that
Gilad Arnolddc4bb262014-07-23 10:45:19 -07001225 // causes it to switch directly to the next URL. We must disable backoff in
1226 // order for it not to interfere.
Gilad Arnoldb3b05442014-05-30 14:25:05 -07001227 UpdateState update_state = GetDefaultUpdateState(TimeDelta::FromMinutes(10));
Gilad Arnolddc4bb262014-07-23 10:45:19 -07001228 update_state.num_checks = 1;
1229 update_state.is_backoff_disabled = true;
1230 update_state.download_urls.emplace_back("http://another/fake/url/");
1231 update_state.download_errors.emplace_back(
1232 1, ErrorCode::kPayloadHashMismatchError,
1233 fake_clock_.GetWallclockTime() - TimeDelta::FromSeconds(1));
Gilad Arnoldb3b05442014-05-30 14:25:05 -07001234
1235 // Check that the UpdateCanStart returns true.
Gilad Arnold42f253b2014-06-25 12:39:17 -07001236 UpdateDownloadParams result;
Gilad Arnoldb3b05442014-05-30 14:25:05 -07001237 ExpectPolicyStatus(EvalStatus::kSucceeded, &Policy::UpdateCanStart, &result,
Gilad Arnolddc4bb262014-07-23 10:45:19 -07001238 update_state);
Gilad Arnoldb3b05442014-05-30 14:25:05 -07001239 EXPECT_TRUE(result.update_can_start);
Gilad Arnoldb3b05442014-05-30 14:25:05 -07001240 EXPECT_EQ(0, result.download_url_idx);
Gilad Arnold14a9e702014-10-08 08:09:09 -07001241 EXPECT_TRUE(result.download_url_allowed);
Gilad Arnolddc4bb262014-07-23 10:45:19 -07001242 EXPECT_EQ(0, result.download_url_num_errors);
1243 EXPECT_TRUE(result.do_increment_failures);
Gilad Arnoldb3b05442014-05-30 14:25:05 -07001244}
1245
1246TEST_F(UmChromeOSPolicyTest, UpdateCanStartNotAllowedNoUsableUrls) {
1247 // The UpdateCanStart policy returns false; there's a single HTTP URL but its
1248 // use is forbidden by policy.
Gilad Arnolddc4bb262014-07-23 10:45:19 -07001249 //
1250 // Note: In the case where no usable URLs are found, the policy should not
1251 // increment the number of failed attempts! Doing so would result in a
1252 // non-idempotent semantics, and does not fall within the intended purpose of
1253 // the backoff mechanism anyway.
Gilad Arnoldb3b05442014-05-30 14:25:05 -07001254
1255 SetUpdateCheckAllowed(false);
1256
1257 // Override specific device policy attributes.
1258 fake_state_.device_policy_provider()->var_http_downloads_enabled()->reset(
1259 new bool(false));
1260
1261 // Check that the UpdateCanStart returns false.
1262 UpdateState update_state = GetDefaultUpdateState(TimeDelta::FromMinutes(10));
Gilad Arnold42f253b2014-06-25 12:39:17 -07001263 UpdateDownloadParams result;
Gilad Arnolddc4bb262014-07-23 10:45:19 -07001264 ExpectPolicyStatus(EvalStatus::kSucceeded, &Policy::UpdateCanStart, &result,
1265 update_state);
1266 EXPECT_FALSE(result.update_can_start);
1267 EXPECT_EQ(UpdateCannotStartReason::kCannotDownload,
1268 result.cannot_start_reason);
1269 EXPECT_FALSE(result.do_increment_failures);
Gilad Arnoldb3b05442014-05-30 14:25:05 -07001270}
1271
1272TEST_F(UmChromeOSPolicyTest, UpdateCanStartAllowedNoUsableUrlsButP2PEnabled) {
1273 // The UpdateCanStart policy returns true; there's a single HTTP URL but its
1274 // use is forbidden by policy, however P2P is enabled. The result indicates
1275 // that no URL can be used.
Gilad Arnolddc4bb262014-07-23 10:45:19 -07001276 //
1277 // Note: The number of failed attempts should not increase in this case (see
1278 // above test).
Gilad Arnoldb3b05442014-05-30 14:25:05 -07001279
1280 SetUpdateCheckAllowed(false);
1281
1282 // Override specific device policy attributes.
1283 fake_state_.device_policy_provider()->var_au_p2p_enabled()->reset(
1284 new bool(true));
1285 fake_state_.device_policy_provider()->var_http_downloads_enabled()->reset(
1286 new bool(false));
1287
1288 // Check that the UpdateCanStart returns true.
1289 UpdateState update_state = GetDefaultUpdateState(TimeDelta::FromMinutes(10));
Gilad Arnold42f253b2014-06-25 12:39:17 -07001290 UpdateDownloadParams result;
Gilad Arnoldb3b05442014-05-30 14:25:05 -07001291 ExpectPolicyStatus(EvalStatus::kSucceeded, &Policy::UpdateCanStart, &result,
Gilad Arnolddc4bb262014-07-23 10:45:19 -07001292 update_state);
Gilad Arnoldb3b05442014-05-30 14:25:05 -07001293 EXPECT_TRUE(result.update_can_start);
Gilad Arnoldb2f99192014-10-07 13:01:52 -07001294 EXPECT_TRUE(result.p2p_downloading_allowed);
1295 EXPECT_TRUE(result.p2p_sharing_allowed);
Gilad Arnoldb3b05442014-05-30 14:25:05 -07001296 EXPECT_GT(0, result.download_url_idx);
Gilad Arnold14a9e702014-10-08 08:09:09 -07001297 EXPECT_TRUE(result.download_url_allowed);
Gilad Arnolddc4bb262014-07-23 10:45:19 -07001298 EXPECT_EQ(0, result.download_url_num_errors);
1299 EXPECT_FALSE(result.do_increment_failures);
Gilad Arnoldf62a4b82014-05-01 07:41:07 -07001300}
1301
Gilad Arnoldef8d0872014-10-03 14:14:06 -07001302TEST_F(UmChromeOSPolicyTest,
1303 UpdateCanStartAllowedNoUsableUrlsButEnterpriseEnrolled) {
1304 // The UpdateCanStart policy returns true; there's a single HTTP URL but its
1305 // use is forbidden by policy, and P2P is unset on the policy, however the
1306 // device is enterprise-enrolled so P2P is allowed. The result indicates that
1307 // no URL can be used.
1308 //
1309 // Note: The number of failed attempts should not increase in this case (see
1310 // above test).
1311
1312 SetUpdateCheckAllowed(false);
1313
1314 // Override specific device policy attributes.
1315 fake_state_.device_policy_provider()->var_au_p2p_enabled()->reset(nullptr);
1316 fake_state_.device_policy_provider()->var_owner()->reset(nullptr);
1317 fake_state_.device_policy_provider()->var_http_downloads_enabled()->reset(
1318 new bool(false));
1319
1320 // Check that the UpdateCanStart returns true.
1321 UpdateState update_state = GetDefaultUpdateState(TimeDelta::FromMinutes(10));
1322 UpdateDownloadParams result;
1323 ExpectPolicyStatus(EvalStatus::kSucceeded, &Policy::UpdateCanStart, &result,
1324 update_state);
1325 EXPECT_TRUE(result.update_can_start);
Gilad Arnoldb2f99192014-10-07 13:01:52 -07001326 EXPECT_TRUE(result.p2p_downloading_allowed);
1327 EXPECT_TRUE(result.p2p_sharing_allowed);
Gilad Arnoldef8d0872014-10-03 14:14:06 -07001328 EXPECT_GT(0, result.download_url_idx);
Gilad Arnold14a9e702014-10-08 08:09:09 -07001329 EXPECT_TRUE(result.download_url_allowed);
Gilad Arnoldef8d0872014-10-03 14:14:06 -07001330 EXPECT_EQ(0, result.download_url_num_errors);
1331 EXPECT_FALSE(result.do_increment_failures);
1332}
1333
Gilad Arnold684219d2014-07-07 14:54:57 -07001334TEST_F(UmChromeOSPolicyTest, UpdateDownloadAllowedEthernetDefault) {
Gilad Arnold0adbc942014-05-12 10:35:43 -07001335 // Ethernet is always allowed.
1336
1337 fake_state_.shill_provider()->var_conn_type()->
1338 reset(new ConnectionType(ConnectionType::kEthernet));
1339
1340 bool result;
1341 ExpectPolicyStatus(EvalStatus::kSucceeded,
Gilad Arnold684219d2014-07-07 14:54:57 -07001342 &Policy::UpdateDownloadAllowed, &result);
Gilad Arnold0adbc942014-05-12 10:35:43 -07001343 EXPECT_TRUE(result);
1344}
1345
Gilad Arnold684219d2014-07-07 14:54:57 -07001346TEST_F(UmChromeOSPolicyTest, UpdateDownloadAllowedWifiDefault) {
Gilad Arnold0adbc942014-05-12 10:35:43 -07001347 // Wifi is allowed if not tethered.
1348
1349 fake_state_.shill_provider()->var_conn_type()->
1350 reset(new ConnectionType(ConnectionType::kWifi));
1351
1352 bool result;
1353 ExpectPolicyStatus(EvalStatus::kSucceeded,
Gilad Arnold684219d2014-07-07 14:54:57 -07001354 &Policy::UpdateDownloadAllowed, &result);
Gilad Arnold0adbc942014-05-12 10:35:43 -07001355 EXPECT_TRUE(result);
1356}
1357
Alex Deymo63784a52014-05-28 10:46:14 -07001358TEST_F(UmChromeOSPolicyTest,
Gilad Arnold0adbc942014-05-12 10:35:43 -07001359 UpdateCurrentConnectionNotAllowedWifiTetheredDefault) {
1360 // Tethered wifi is not allowed by default.
1361
1362 fake_state_.shill_provider()->var_conn_type()->
1363 reset(new ConnectionType(ConnectionType::kWifi));
1364 fake_state_.shill_provider()->var_conn_tethering()->
1365 reset(new ConnectionTethering(ConnectionTethering::kConfirmed));
1366
1367 bool result;
Gilad Arnold28d6be62014-06-30 14:04:04 -07001368 ExpectPolicyStatus(EvalStatus::kAskMeAgainLater,
Gilad Arnold684219d2014-07-07 14:54:57 -07001369 &Policy::UpdateDownloadAllowed, &result);
Gilad Arnold0adbc942014-05-12 10:35:43 -07001370}
1371
Alex Deymo63784a52014-05-28 10:46:14 -07001372TEST_F(UmChromeOSPolicyTest,
Gilad Arnold684219d2014-07-07 14:54:57 -07001373 UpdateDownloadAllowedWifiTetheredPolicyOverride) {
Gilad Arnold0adbc942014-05-12 10:35:43 -07001374 // Tethered wifi can be allowed by policy.
1375
1376 fake_state_.shill_provider()->var_conn_type()->
1377 reset(new ConnectionType(ConnectionType::kWifi));
1378 fake_state_.shill_provider()->var_conn_tethering()->
1379 reset(new ConnectionTethering(ConnectionTethering::kConfirmed));
1380 set<ConnectionType> allowed_connections;
1381 allowed_connections.insert(ConnectionType::kCellular);
1382 fake_state_.device_policy_provider()->
1383 var_allowed_connection_types_for_update()->
1384 reset(new set<ConnectionType>(allowed_connections));
1385
1386 bool result;
1387 ExpectPolicyStatus(EvalStatus::kSucceeded,
Gilad Arnold684219d2014-07-07 14:54:57 -07001388 &Policy::UpdateDownloadAllowed, &result);
Gilad Arnold0adbc942014-05-12 10:35:43 -07001389 EXPECT_TRUE(result);
1390}
1391
Gilad Arnold684219d2014-07-07 14:54:57 -07001392TEST_F(UmChromeOSPolicyTest, UpdateDownloadAllowedWimaxDefault) {
Gilad Arnold0adbc942014-05-12 10:35:43 -07001393 // Wimax is always allowed.
1394
1395 fake_state_.shill_provider()->var_conn_type()->
1396 reset(new ConnectionType(ConnectionType::kWifi));
1397
1398 bool result;
1399 ExpectPolicyStatus(EvalStatus::kSucceeded,
Gilad Arnold684219d2014-07-07 14:54:57 -07001400 &Policy::UpdateDownloadAllowed, &result);
Gilad Arnold0adbc942014-05-12 10:35:43 -07001401 EXPECT_TRUE(result);
1402}
1403
Alex Deymo63784a52014-05-28 10:46:14 -07001404TEST_F(UmChromeOSPolicyTest,
Gilad Arnold0adbc942014-05-12 10:35:43 -07001405 UpdateCurrentConnectionNotAllowedBluetoothDefault) {
1406 // Bluetooth is never allowed.
1407
1408 fake_state_.shill_provider()->var_conn_type()->
1409 reset(new ConnectionType(ConnectionType::kBluetooth));
1410
1411 bool result;
Gilad Arnold28d6be62014-06-30 14:04:04 -07001412 ExpectPolicyStatus(EvalStatus::kAskMeAgainLater,
Gilad Arnold684219d2014-07-07 14:54:57 -07001413 &Policy::UpdateDownloadAllowed, &result);
Gilad Arnold0adbc942014-05-12 10:35:43 -07001414}
1415
Alex Deymo63784a52014-05-28 10:46:14 -07001416TEST_F(UmChromeOSPolicyTest,
Gilad Arnold0adbc942014-05-12 10:35:43 -07001417 UpdateCurrentConnectionNotAllowedBluetoothPolicyCannotOverride) {
1418 // Bluetooth cannot be allowed even by policy.
1419
1420 fake_state_.shill_provider()->var_conn_type()->
1421 reset(new ConnectionType(ConnectionType::kBluetooth));
1422 set<ConnectionType> allowed_connections;
1423 allowed_connections.insert(ConnectionType::kBluetooth);
1424 fake_state_.device_policy_provider()->
1425 var_allowed_connection_types_for_update()->
1426 reset(new set<ConnectionType>(allowed_connections));
1427
1428 bool result;
Gilad Arnold28d6be62014-06-30 14:04:04 -07001429 ExpectPolicyStatus(EvalStatus::kAskMeAgainLater,
Gilad Arnold684219d2014-07-07 14:54:57 -07001430 &Policy::UpdateDownloadAllowed, &result);
Gilad Arnold0adbc942014-05-12 10:35:43 -07001431}
1432
Alex Deymo63784a52014-05-28 10:46:14 -07001433TEST_F(UmChromeOSPolicyTest, UpdateCurrentConnectionNotAllowedCellularDefault) {
Gilad Arnold0adbc942014-05-12 10:35:43 -07001434 // Cellular is not allowed by default.
1435
1436 fake_state_.shill_provider()->var_conn_type()->
1437 reset(new ConnectionType(ConnectionType::kCellular));
1438
1439 bool result;
Gilad Arnold28d6be62014-06-30 14:04:04 -07001440 ExpectPolicyStatus(EvalStatus::kAskMeAgainLater,
Gilad Arnold684219d2014-07-07 14:54:57 -07001441 &Policy::UpdateDownloadAllowed, &result);
Gilad Arnold0adbc942014-05-12 10:35:43 -07001442}
1443
Alex Deymo63784a52014-05-28 10:46:14 -07001444TEST_F(UmChromeOSPolicyTest,
Gilad Arnold684219d2014-07-07 14:54:57 -07001445 UpdateDownloadAllowedCellularPolicyOverride) {
Gilad Arnold0adbc942014-05-12 10:35:43 -07001446 // Update over cellular can be enabled by policy.
1447
1448 fake_state_.shill_provider()->var_conn_type()->
1449 reset(new ConnectionType(ConnectionType::kCellular));
1450 set<ConnectionType> allowed_connections;
1451 allowed_connections.insert(ConnectionType::kCellular);
1452 fake_state_.device_policy_provider()->
1453 var_allowed_connection_types_for_update()->
1454 reset(new set<ConnectionType>(allowed_connections));
1455
1456 bool result;
1457 ExpectPolicyStatus(EvalStatus::kSucceeded,
Gilad Arnold684219d2014-07-07 14:54:57 -07001458 &Policy::UpdateDownloadAllowed, &result);
Gilad Arnold0adbc942014-05-12 10:35:43 -07001459 EXPECT_TRUE(result);
1460}
1461
Alex Deymo63784a52014-05-28 10:46:14 -07001462TEST_F(UmChromeOSPolicyTest,
Gilad Arnold684219d2014-07-07 14:54:57 -07001463 UpdateDownloadAllowedCellularUserOverride) {
Gilad Arnold0adbc942014-05-12 10:35:43 -07001464 // Update over cellular can be enabled by user settings, but only if policy
1465 // is present and does not determine allowed connections.
1466
1467 fake_state_.shill_provider()->var_conn_type()->
1468 reset(new ConnectionType(ConnectionType::kCellular));
1469 set<ConnectionType> allowed_connections;
1470 allowed_connections.insert(ConnectionType::kCellular);
1471 fake_state_.updater_provider()->var_cellular_enabled()->
1472 reset(new bool(true));
1473
1474 bool result;
1475 ExpectPolicyStatus(EvalStatus::kSucceeded,
Gilad Arnold684219d2014-07-07 14:54:57 -07001476 &Policy::UpdateDownloadAllowed, &result);
Gilad Arnold0adbc942014-05-12 10:35:43 -07001477 EXPECT_TRUE(result);
1478}
1479
Gilad Arnold14a9e702014-10-08 08:09:09 -07001480TEST_F(UmChromeOSPolicyTest,
1481 UpdateCanStartAllowedScatteringSupressedDueToP2P) {
1482 // The UpdateCanStart policy returns true; scattering should have applied, but
1483 // P2P download is allowed. Scattering values are nonetheless returned, and so
1484 // are download URL values, albeit the latter are not allowed to be used.
1485
1486 SetUpdateCheckAllowed(false);
1487 fake_state_.device_policy_provider()->var_scatter_factor()->reset(
1488 new TimeDelta(TimeDelta::FromMinutes(2)));
1489 fake_state_.updater_provider()->var_p2p_enabled()->reset(new bool(true));
1490
1491 UpdateState update_state = GetDefaultUpdateState(TimeDelta::FromSeconds(1));
1492 update_state.scatter_wait_period = TimeDelta::FromSeconds(35);
1493
1494 UpdateDownloadParams result;
1495 ExpectPolicyStatus(EvalStatus::kSucceeded, &Policy::UpdateCanStart,
1496 &result, update_state);
1497 EXPECT_TRUE(result.update_can_start);
1498 EXPECT_EQ(0, result.download_url_idx);
1499 EXPECT_FALSE(result.download_url_allowed);
1500 EXPECT_EQ(0, result.download_url_num_errors);
1501 EXPECT_TRUE(result.p2p_downloading_allowed);
1502 EXPECT_TRUE(result.p2p_sharing_allowed);
1503 EXPECT_FALSE(result.do_increment_failures);
1504 EXPECT_EQ(TimeDelta::FromSeconds(35), result.scatter_wait_period);
1505 EXPECT_EQ(0, result.scatter_check_threshold);
1506}
1507
1508TEST_F(UmChromeOSPolicyTest,
1509 UpdateCanStartAllowedBackoffSupressedDueToP2P) {
1510 // The UpdateCanStart policy returns true; backoff should have applied, but
1511 // P2P download is allowed. Backoff values are nonetheless returned, and so
1512 // are download URL values, albeit the latter are not allowed to be used.
1513
1514 SetUpdateCheckAllowed(false);
1515
1516 const Time curr_time = fake_clock_.GetWallclockTime();
1517 UpdateState update_state = GetDefaultUpdateState(TimeDelta::FromSeconds(10));
1518 update_state.download_errors_max = 1;
1519 update_state.download_errors.emplace_back(
1520 0, ErrorCode::kDownloadTransferError,
1521 curr_time - TimeDelta::FromSeconds(8));
1522 update_state.download_errors.emplace_back(
1523 0, ErrorCode::kDownloadTransferError,
1524 curr_time - TimeDelta::FromSeconds(2));
1525 fake_state_.updater_provider()->var_p2p_enabled()->reset(new bool(true));
1526
1527 UpdateDownloadParams result;
1528 ExpectPolicyStatus(EvalStatus::kSucceeded, &Policy::UpdateCanStart, &result,
1529 update_state);
1530 EXPECT_TRUE(result.update_can_start);
1531 EXPECT_EQ(0, result.download_url_idx);
1532 EXPECT_FALSE(result.download_url_allowed);
1533 EXPECT_EQ(0, result.download_url_num_errors);
1534 EXPECT_TRUE(result.p2p_downloading_allowed);
1535 EXPECT_TRUE(result.p2p_sharing_allowed);
1536 EXPECT_TRUE(result.do_increment_failures);
1537 EXPECT_LT(curr_time, result.backoff_expiry);
1538}
1539
Gilad Arnold78ecbfc2014-10-22 14:38:25 -07001540TEST_F(UmChromeOSPolicyTest, P2PEnabledNotAllowed) {
1541 bool result;
1542 ExpectPolicyStatus(EvalStatus::kSucceeded, &Policy::P2PEnabled, &result);
1543 EXPECT_FALSE(result);
1544}
1545
1546TEST_F(UmChromeOSPolicyTest, P2PEnabledAllowedByDevicePolicy) {
1547 fake_state_.device_policy_provider()->var_au_p2p_enabled()->reset(
1548 new bool(true));
1549
1550 bool result;
1551 ExpectPolicyStatus(EvalStatus::kSucceeded, &Policy::P2PEnabled, &result);
1552 EXPECT_TRUE(result);
1553}
1554
1555TEST_F(UmChromeOSPolicyTest, P2PEnabledAllowedByUpdater) {
1556 fake_state_.updater_provider()->var_p2p_enabled()->reset(new bool(true));
1557
1558 bool result;
1559 ExpectPolicyStatus(EvalStatus::kSucceeded, &Policy::P2PEnabled, &result);
1560 EXPECT_TRUE(result);
1561}
1562
1563TEST_F(UmChromeOSPolicyTest, P2PEnabledAllowedDeviceEnterpriseEnrolled) {
1564 fake_state_.device_policy_provider()->var_au_p2p_enabled()->reset(nullptr);
1565 fake_state_.device_policy_provider()->var_owner()->reset(nullptr);
1566
1567 bool result;
1568 ExpectPolicyStatus(EvalStatus::kSucceeded, &Policy::P2PEnabled, &result);
1569 EXPECT_TRUE(result);
1570}
1571
1572TEST_F(UmChromeOSPolicyTest, P2PEnabledChangedBlocks) {
1573 bool result;
1574 ExpectPolicyStatus(EvalStatus::kAskMeAgainLater, &Policy::P2PEnabledChanged,
1575 &result, false);
1576}
1577
Alex Deymo63784a52014-05-28 10:46:14 -07001578} // namespace chromeos_update_manager