blob: c7380e8552f7d52ca1ddc784ace9ca66f282284b [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 }
Alex Deymo0d11c602014-04-23 20:12:20 -0700108};
109
Alex Deymo63784a52014-05-28 10:46:14 -0700110TEST_F(UmChromeOSPolicyTest, UpdateCheckAllowedWaitsForTheTimeout) {
Alex Deymo0d11c602014-04-23 20:12:20 -0700111 // We get the next update_check timestamp from the policy's private method
112 // and then we check the public method respects that value on the normal
113 // case.
114 Time next_update_check;
115 Time last_checked_time =
116 fake_clock_.GetWallclockTime() + TimeDelta::FromMinutes(1234);
117
Alex Deymo0d11c602014-04-23 20:12:20 -0700118 fake_state_.updater_provider()->var_last_checked_time()->reset(
119 new Time(last_checked_time));
Amin Hassani186ff6a2018-02-27 11:06:03 -0800120 CallMethodWithContext(&NextUpdateCheckTimePolicyImpl::NextUpdateCheckTime,
121 &next_update_check,
122 ChromeOSPolicy::kNextUpdateCheckPolicyConstants);
Alex Deymo0d11c602014-04-23 20:12:20 -0700123
124 UpdateCheckParams result;
125
126 // Check that the policy blocks until the next_update_check is reached.
127 SetUpDefaultClock();
128 SetUpDefaultState();
129 fake_state_.updater_provider()->var_last_checked_time()->reset(
130 new Time(last_checked_time));
131 fake_clock_.SetWallclockTime(next_update_check - TimeDelta::FromSeconds(1));
132 ExpectPolicyStatus(EvalStatus::kAskMeAgainLater,
133 &Policy::UpdateCheckAllowed, &result);
134
135 SetUpDefaultClock();
136 SetUpDefaultState();
137 fake_state_.updater_provider()->var_last_checked_time()->reset(
138 new Time(last_checked_time));
139 fake_clock_.SetWallclockTime(next_update_check + TimeDelta::FromSeconds(1));
140 ExpectPolicyStatus(EvalStatus::kSucceeded,
141 &Policy::UpdateCheckAllowed, &result);
Gilad Arnolda1eabcd2014-07-09 15:42:40 -0700142 EXPECT_TRUE(result.updates_enabled);
Gilad Arnold44dc3bf2014-07-18 23:39:38 -0700143 EXPECT_FALSE(result.is_interactive);
Gilad Arnolda1eabcd2014-07-09 15:42:40 -0700144}
145
146TEST_F(UmChromeOSPolicyTest, UpdateCheckAllowedWaitsForOOBE) {
Alex Vakulenko072359c2014-07-18 11:41:07 -0700147 // Update checks are deferred until OOBE is completed.
Gilad Arnolda1eabcd2014-07-09 15:42:40 -0700148
149 // Ensure that update is not allowed even if wait period is satisfied.
150 Time next_update_check;
151 Time last_checked_time =
152 fake_clock_.GetWallclockTime() + TimeDelta::FromMinutes(1234);
153
154 fake_state_.updater_provider()->var_last_checked_time()->reset(
155 new Time(last_checked_time));
Amin Hassani186ff6a2018-02-27 11:06:03 -0800156 CallMethodWithContext(&NextUpdateCheckTimePolicyImpl::NextUpdateCheckTime,
157 &next_update_check,
158 ChromeOSPolicy::kNextUpdateCheckPolicyConstants);
Gilad Arnolda1eabcd2014-07-09 15:42:40 -0700159
160 SetUpDefaultClock();
161 SetUpDefaultState();
162 fake_state_.updater_provider()->var_last_checked_time()->reset(
163 new Time(last_checked_time));
164 fake_clock_.SetWallclockTime(next_update_check + TimeDelta::FromSeconds(1));
165 fake_state_.system_provider()->var_is_oobe_complete()->reset(
166 new bool(false));
167
168 UpdateCheckParams result;
169 ExpectPolicyStatus(EvalStatus::kAskMeAgainLater,
170 &Policy::UpdateCheckAllowed, &result);
171
172 // Now check that it is allowed if OOBE is completed.
173 SetUpDefaultClock();
174 SetUpDefaultState();
175 fake_state_.updater_provider()->var_last_checked_time()->reset(
176 new Time(last_checked_time));
177 fake_clock_.SetWallclockTime(next_update_check + TimeDelta::FromSeconds(1));
178 ExpectPolicyStatus(EvalStatus::kSucceeded,
179 &Policy::UpdateCheckAllowed, &result);
180 EXPECT_TRUE(result.updates_enabled);
Gilad Arnold44dc3bf2014-07-18 23:39:38 -0700181 EXPECT_FALSE(result.is_interactive);
Alex Deymo0d11c602014-04-23 20:12:20 -0700182}
183
Gilad Arnold42f253b2014-06-25 12:39:17 -0700184TEST_F(UmChromeOSPolicyTest, UpdateCheckAllowedWithAttributes) {
Alex Vakulenko072359c2014-07-18 11:41:07 -0700185 // Update check is allowed, response includes attributes for use in the
Gilad Arnold42f253b2014-06-25 12:39:17 -0700186 // request.
187 SetUpdateCheckAllowed(true);
188
189 // Override specific device policy attributes.
Gilad Arnoldd4b30322014-07-21 15:35:27 -0700190 fake_state_.device_policy_provider()->var_target_version_prefix()->
191 reset(new string("1.2"));
Marton Hunyady0e0e3542018-02-21 18:51:39 +0100192 fake_state_.device_policy_provider()
193 ->var_rollback_allowed_milestones()
194 ->reset(new int(5));
195 fake_state_.device_policy_provider()->var_release_channel_delegated()->reset(
196 new bool(false));
Gilad Arnold42f253b2014-06-25 12:39:17 -0700197 fake_state_.device_policy_provider()->var_release_channel()->
198 reset(new string("foo-channel"));
199
200 UpdateCheckParams result;
201 ExpectPolicyStatus(EvalStatus::kSucceeded,
202 &Policy::UpdateCheckAllowed, &result);
203 EXPECT_TRUE(result.updates_enabled);
Gilad Arnoldd4b30322014-07-21 15:35:27 -0700204 EXPECT_EQ("1.2", result.target_version_prefix);
Marton Hunyady0e0e3542018-02-21 18:51:39 +0100205 EXPECT_EQ(5, result.rollback_allowed_milestones);
Gilad Arnold42f253b2014-06-25 12:39:17 -0700206 EXPECT_EQ("foo-channel", result.target_channel);
Gilad Arnold44dc3bf2014-07-18 23:39:38 -0700207 EXPECT_FALSE(result.is_interactive);
Gilad Arnold42f253b2014-06-25 12:39:17 -0700208}
209
Marton Hunyadyba51c3f2018-04-25 15:18:10 +0200210TEST_F(UmChromeOSPolicyTest, UpdateCheckAllowedRollbackAllowed) {
211 // Update check is allowed, response includes attributes for use in the
212 // request.
213 SetUpdateCheckAllowed(true);
214
215 // Override RollbackToTargetVersion device policy attribute.
216 fake_state_.device_policy_provider()->var_rollback_to_target_version()->reset(
217 new RollbackToTargetVersion(
218 RollbackToTargetVersion::kRollbackWithFullPowerwash));
219
220 UpdateCheckParams result;
221 ExpectPolicyStatus(
222 EvalStatus::kSucceeded, &Policy::UpdateCheckAllowed, &result);
223 EXPECT_TRUE(result.rollback_allowed);
224}
225
226TEST_F(UmChromeOSPolicyTest, UpdateCheckAllowedRollbackDisabled) {
227 // Update check is allowed, response includes attributes for use in the
228 // request.
229 SetUpdateCheckAllowed(true);
230
231 // Override RollbackToTargetVersion device policy attribute.
232 fake_state_.device_policy_provider()->var_rollback_to_target_version()->reset(
233 new RollbackToTargetVersion(RollbackToTargetVersion::kDisabled));
234
235 UpdateCheckParams result;
236 ExpectPolicyStatus(
237 EvalStatus::kSucceeded, &Policy::UpdateCheckAllowed, &result);
238 EXPECT_FALSE(result.rollback_allowed);
239}
240
241TEST_F(UmChromeOSPolicyTest, UpdateCheckAllowedRollbackUnspecified) {
242 // Update check is allowed, response includes attributes for use in the
243 // request.
244 SetUpdateCheckAllowed(true);
245
246 // Override RollbackToTargetVersion device policy attribute.
247 fake_state_.device_policy_provider()->var_rollback_to_target_version()->reset(
248 new RollbackToTargetVersion(RollbackToTargetVersion::kUnspecified));
249
250 UpdateCheckParams result;
251 ExpectPolicyStatus(
252 EvalStatus::kSucceeded, &Policy::UpdateCheckAllowed, &result);
253 EXPECT_FALSE(result.rollback_allowed);
254}
255
256TEST_F(UmChromeOSPolicyTest, UpdateCheckAllowedRollbackNotSet) {
257 // Update check is allowed, response includes attributes for use in the
258 // request.
259 SetUpdateCheckAllowed(true);
260
261 // Don't set RollbackToTargetVersion device policy attribute.
262
263 UpdateCheckParams result;
264 ExpectPolicyStatus(
265 EvalStatus::kSucceeded, &Policy::UpdateCheckAllowed, &result);
266 EXPECT_FALSE(result.rollback_allowed);
267}
268
Gilad Arnoldfe12a0f2014-07-09 14:26:57 -0700269TEST_F(UmChromeOSPolicyTest,
270 UpdateCheckAllowedUpdatesDisabledForUnofficialBuilds) {
Gilad Arnold44dc3bf2014-07-18 23:39:38 -0700271 // UpdateCheckAllowed should return kAskMeAgainLater if this is an unofficial
272 // build; we don't want periodic update checks on developer images.
Gilad Arnoldfe12a0f2014-07-09 14:26:57 -0700273
274 fake_state_.system_provider()->var_is_official_build()->reset(
275 new bool(false));
276
277 UpdateCheckParams result;
Gilad Arnold44dc3bf2014-07-18 23:39:38 -0700278 ExpectPolicyStatus(EvalStatus::kAskMeAgainLater,
Gilad Arnoldfe12a0f2014-07-09 14:26:57 -0700279 &Policy::UpdateCheckAllowed, &result);
Gilad Arnoldfe12a0f2014-07-09 14:26:57 -0700280}
281
Gilad Arnoldbfc44f72014-07-09 14:41:39 -0700282TEST_F(UmChromeOSPolicyTest,
Aaron Wood56d8ab32017-09-22 15:56:18 -0700283 UpdateCheckAllowedUpdatesDisabledWhenNotEnoughSlotsAbUpdates) {
Gilad Arnoldbfc44f72014-07-09 14:41:39 -0700284 // UpdateCheckAllowed should return false (kSucceeded) if the image booted
Aaron Wood56d8ab32017-09-22 15:56:18 -0700285 // without enough slots to do A/B updates.
Gilad Arnoldbfc44f72014-07-09 14:41:39 -0700286
Aaron Woodc73fdc12017-12-06 11:09:15 -0800287 // NOLINTNEXTLINE(readability/casting)
Alex Deymo763e7db2015-08-27 21:08:08 -0700288 fake_state_.system_provider()->var_num_slots()->reset(new unsigned int(1));
Gilad Arnoldbfc44f72014-07-09 14:41:39 -0700289
290 UpdateCheckParams result;
291 ExpectPolicyStatus(EvalStatus::kSucceeded,
292 &Policy::UpdateCheckAllowed, &result);
293 EXPECT_FALSE(result.updates_enabled);
294}
295
Gilad Arnoldfe12a0f2014-07-09 14:26:57 -0700296TEST_F(UmChromeOSPolicyTest, UpdateCheckAllowedUpdatesDisabledByPolicy) {
Gilad Arnold42f253b2014-06-25 12:39:17 -0700297 // UpdateCheckAllowed should return kAskMeAgainLater because a device policy
298 // is loaded and prohibits updates.
299
300 SetUpdateCheckAllowed(false);
301 fake_state_.device_policy_provider()->var_update_disabled()->reset(
302 new bool(true));
303
Gilad Arnold42f253b2014-06-25 12:39:17 -0700304 UpdateCheckParams result;
305 ExpectPolicyStatus(EvalStatus::kAskMeAgainLater,
306 &Policy::UpdateCheckAllowed, &result);
307}
308
Gilad Arnoldec7f9162014-07-15 13:24:46 -0700309TEST_F(UmChromeOSPolicyTest,
310 UpdateCheckAllowedForcedUpdateRequestedInteractive) {
311 // UpdateCheckAllowed should return true because a forced update request was
312 // signaled for an interactive update.
Gilad Arnold44dc3bf2014-07-18 23:39:38 -0700313
314 SetUpdateCheckAllowed(true);
Gilad Arnoldec7f9162014-07-15 13:24:46 -0700315 fake_state_.updater_provider()->var_forced_update_requested()->reset(
316 new UpdateRequestStatus(UpdateRequestStatus::kInteractive));
Gilad Arnold44dc3bf2014-07-18 23:39:38 -0700317
318 UpdateCheckParams result;
319 ExpectPolicyStatus(EvalStatus::kSucceeded,
320 &Policy::UpdateCheckAllowed, &result);
321 EXPECT_TRUE(result.updates_enabled);
322 EXPECT_TRUE(result.is_interactive);
323}
324
Gilad Arnoldec7f9162014-07-15 13:24:46 -0700325TEST_F(UmChromeOSPolicyTest, UpdateCheckAllowedForcedUpdateRequestedPeriodic) {
326 // UpdateCheckAllowed should return true because a forced update request was
327 // signaled for a periodic check.
328
329 SetUpdateCheckAllowed(true);
330 fake_state_.updater_provider()->var_forced_update_requested()->reset(
331 new UpdateRequestStatus(UpdateRequestStatus::kPeriodic));
332
333 UpdateCheckParams result;
334 ExpectPolicyStatus(EvalStatus::kSucceeded,
335 &Policy::UpdateCheckAllowed, &result);
336 EXPECT_TRUE(result.updates_enabled);
337 EXPECT_FALSE(result.is_interactive);
338}
339
Xiyuan Xia6e30bc52016-02-24 15:35:42 -0800340TEST_F(UmChromeOSPolicyTest, UpdateCheckAllowedKioskPin) {
341 // Update check is allowed.
342 SetUpdateCheckAllowed(true);
343
344 // A typical setup for kiosk pin policy: AU disabled, allow kiosk to pin
345 // and there is a kiosk required platform version.
346 fake_state_.device_policy_provider()->var_update_disabled()->reset(
347 new bool(true));
348 fake_state_.device_policy_provider()
349 ->var_allow_kiosk_app_control_chrome_version()
350 ->reset(new bool(true));
351 fake_state_.system_provider()->var_kiosk_required_platform_version()->reset(
352 new string("1234.0.0"));
353
354 UpdateCheckParams result;
355 ExpectPolicyStatus(EvalStatus::kSucceeded,
356 &Policy::UpdateCheckAllowed, &result);
357 EXPECT_TRUE(result.updates_enabled);
358 EXPECT_EQ("1234.0.0", result.target_version_prefix);
359 EXPECT_FALSE(result.is_interactive);
360}
361
362TEST_F(UmChromeOSPolicyTest, UpdateCheckAllowedDisabledWhenNoKioskPin) {
363 // Update check is allowed.
364 SetUpdateCheckAllowed(true);
365
366 // Disable AU policy is set but kiosk pin policy is set to false. Update is
367 // disabled in such case.
368 fake_state_.device_policy_provider()->var_update_disabled()->reset(
369 new bool(true));
370 fake_state_.device_policy_provider()
371 ->var_allow_kiosk_app_control_chrome_version()
372 ->reset(new bool(false));
373
374 UpdateCheckParams result;
375 ExpectPolicyStatus(EvalStatus::kAskMeAgainLater,
376 &Policy::UpdateCheckAllowed, &result);
377}
378
379TEST_F(UmChromeOSPolicyTest, UpdateCheckAllowedKioskPinWithNoRequiredVersion) {
380 // Update check is allowed.
381 SetUpdateCheckAllowed(true);
382
383 // AU disabled, allow kiosk to pin but there is no kiosk required platform
Xiyuan Xiaed9bd922016-04-07 14:45:16 -0700384 // version (i.e. app does not provide the info). Update to latest in such
385 // case.
Xiyuan Xia6e30bc52016-02-24 15:35:42 -0800386 fake_state_.device_policy_provider()->var_update_disabled()->reset(
387 new bool(true));
388 fake_state_.device_policy_provider()
389 ->var_allow_kiosk_app_control_chrome_version()
390 ->reset(new bool(true));
Xiyuan Xiaed9bd922016-04-07 14:45:16 -0700391 fake_state_.system_provider()->var_kiosk_required_platform_version()->reset(
392 new string());
Xiyuan Xia6e30bc52016-02-24 15:35:42 -0800393
394 UpdateCheckParams result;
395 ExpectPolicyStatus(EvalStatus::kSucceeded,
396 &Policy::UpdateCheckAllowed, &result);
397 EXPECT_TRUE(result.updates_enabled);
Xiyuan Xiaed9bd922016-04-07 14:45:16 -0700398 EXPECT_TRUE(result.target_version_prefix.empty());
Xiyuan Xia6e30bc52016-02-24 15:35:42 -0800399 EXPECT_FALSE(result.is_interactive);
400}
401
Xiyuan Xiaed9bd922016-04-07 14:45:16 -0700402TEST_F(UmChromeOSPolicyTest,
403 UpdateCheckAllowedKioskPinWithFailedGetRequiredVersionCall) {
404 // AU disabled, allow kiosk to pin but D-Bus call to get required platform
405 // version failed. Defer update check in this case.
406 fake_state_.device_policy_provider()->var_update_disabled()->reset(
407 new bool(true));
408 fake_state_.device_policy_provider()
409 ->var_allow_kiosk_app_control_chrome_version()
410 ->reset(new bool(true));
411 fake_state_.system_provider()->var_kiosk_required_platform_version()->reset(
412 nullptr);
413
414 UpdateCheckParams result;
415 ExpectPolicyStatus(EvalStatus::kAskMeAgainLater,
416 &Policy::UpdateCheckAllowed, &result);
417}
418
Alex Deymo63784a52014-05-28 10:46:14 -0700419TEST_F(UmChromeOSPolicyTest, UpdateCanStartFailsCheckAllowedError) {
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700420 // The UpdateCanStart policy fails, not being able to query
421 // UpdateCheckAllowed.
422
423 // Configure the UpdateCheckAllowed policy to fail.
424 fake_state_.updater_provider()->var_updater_started_time()->reset(nullptr);
425
426 // Check that the UpdateCanStart fails.
427 UpdateState update_state = GetDefaultUpdateState(TimeDelta::FromMinutes(10));
Gilad Arnold42f253b2014-06-25 12:39:17 -0700428 UpdateDownloadParams result;
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700429 ExpectPolicyStatus(EvalStatus::kFailed,
Gilad Arnolddc4bb262014-07-23 10:45:19 -0700430 &Policy::UpdateCanStart, &result, update_state);
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700431}
432
Alex Deymo63784a52014-05-28 10:46:14 -0700433TEST_F(UmChromeOSPolicyTest, UpdateCanStartNotAllowedCheckDue) {
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700434 // The UpdateCanStart policy returns false because we are due for another
Gilad Arnold14a9e702014-10-08 08:09:09 -0700435 // update check. Ensure that download related values are still returned.
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700436
437 SetUpdateCheckAllowed(true);
438
439 // Check that the UpdateCanStart returns false.
440 UpdateState update_state = GetDefaultUpdateState(TimeDelta::FromMinutes(10));
Gilad Arnold42f253b2014-06-25 12:39:17 -0700441 UpdateDownloadParams result;
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700442 ExpectPolicyStatus(EvalStatus::kSucceeded,
Gilad Arnolddc4bb262014-07-23 10:45:19 -0700443 &Policy::UpdateCanStart, &result, update_state);
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700444 EXPECT_FALSE(result.update_can_start);
445 EXPECT_EQ(UpdateCannotStartReason::kCheckDue, result.cannot_start_reason);
Gilad Arnold14a9e702014-10-08 08:09:09 -0700446 EXPECT_EQ(0, result.download_url_idx);
447 EXPECT_EQ(0, result.download_url_num_errors);
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700448}
449
Alex Deymo63784a52014-05-28 10:46:14 -0700450TEST_F(UmChromeOSPolicyTest, UpdateCanStartAllowedNoDevicePolicy) {
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700451 // The UpdateCanStart policy returns true; no device policy is loaded.
452
453 SetUpdateCheckAllowed(false);
454 fake_state_.device_policy_provider()->var_device_policy_is_loaded()->reset(
455 new bool(false));
456
457 // Check that the UpdateCanStart returns true with no further attributes.
458 UpdateState update_state = GetDefaultUpdateState(TimeDelta::FromMinutes(10));
Gilad Arnold42f253b2014-06-25 12:39:17 -0700459 UpdateDownloadParams result;
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700460 ExpectPolicyStatus(EvalStatus::kSucceeded,
Gilad Arnolddc4bb262014-07-23 10:45:19 -0700461 &Policy::UpdateCanStart, &result, update_state);
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700462 EXPECT_TRUE(result.update_can_start);
Gilad Arnoldb2f99192014-10-07 13:01:52 -0700463 EXPECT_FALSE(result.p2p_downloading_allowed);
464 EXPECT_FALSE(result.p2p_sharing_allowed);
Gilad Arnoldb3b05442014-05-30 14:25:05 -0700465 EXPECT_EQ(0, result.download_url_idx);
Gilad Arnold14a9e702014-10-08 08:09:09 -0700466 EXPECT_TRUE(result.download_url_allowed);
Gilad Arnolddc4bb262014-07-23 10:45:19 -0700467 EXPECT_EQ(0, result.download_url_num_errors);
468 EXPECT_FALSE(result.do_increment_failures);
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700469}
470
Alex Deymo63784a52014-05-28 10:46:14 -0700471TEST_F(UmChromeOSPolicyTest, UpdateCanStartAllowedBlankPolicy) {
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700472 // The UpdateCanStart policy returns true; device policy is loaded but imposes
473 // no restrictions on updating.
474
475 SetUpdateCheckAllowed(false);
476
477 // Check that the UpdateCanStart returns true.
478 UpdateState update_state = GetDefaultUpdateState(TimeDelta::FromMinutes(10));
Gilad Arnold42f253b2014-06-25 12:39:17 -0700479 UpdateDownloadParams result;
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700480 ExpectPolicyStatus(EvalStatus::kSucceeded,
Gilad Arnolddc4bb262014-07-23 10:45:19 -0700481 &Policy::UpdateCanStart, &result, update_state);
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700482 EXPECT_TRUE(result.update_can_start);
Gilad Arnoldb2f99192014-10-07 13:01:52 -0700483 EXPECT_FALSE(result.p2p_downloading_allowed);
484 EXPECT_FALSE(result.p2p_sharing_allowed);
Gilad Arnoldb3b05442014-05-30 14:25:05 -0700485 EXPECT_EQ(0, result.download_url_idx);
Gilad Arnold14a9e702014-10-08 08:09:09 -0700486 EXPECT_TRUE(result.download_url_allowed);
Gilad Arnolddc4bb262014-07-23 10:45:19 -0700487 EXPECT_EQ(0, result.download_url_num_errors);
488 EXPECT_FALSE(result.do_increment_failures);
489}
490
491TEST_F(UmChromeOSPolicyTest,
492 UpdateCanStartNotAllowedBackoffNewWaitPeriodApplies) {
493 // The UpdateCanStart policy returns false; failures are reported and a new
494 // backoff period is enacted.
495
496 SetUpdateCheckAllowed(false);
497
498 const Time curr_time = fake_clock_.GetWallclockTime();
499 UpdateState update_state = GetDefaultUpdateState(TimeDelta::FromSeconds(10));
500 update_state.download_errors_max = 1;
501 update_state.download_errors.emplace_back(
502 0, ErrorCode::kDownloadTransferError,
503 curr_time - TimeDelta::FromSeconds(8));
504 update_state.download_errors.emplace_back(
505 0, ErrorCode::kDownloadTransferError,
506 curr_time - TimeDelta::FromSeconds(2));
507
508 // Check that UpdateCanStart returns false and a new backoff expiry is
509 // generated.
510 UpdateDownloadParams result;
511 ExpectPolicyStatus(EvalStatus::kSucceeded, &Policy::UpdateCanStart, &result,
512 update_state);
513 EXPECT_FALSE(result.update_can_start);
514 EXPECT_EQ(UpdateCannotStartReason::kBackoff, result.cannot_start_reason);
515 EXPECT_TRUE(result.do_increment_failures);
516 EXPECT_LT(curr_time, result.backoff_expiry);
517}
518
519TEST_F(UmChromeOSPolicyTest,
520 UpdateCanStartNotAllowedBackoffPrevWaitPeriodStillApplies) {
521 // The UpdateCanStart policy returns false; a previously enacted backoff
522 // period still applies.
523
524 SetUpdateCheckAllowed(false);
525
526 const Time curr_time = fake_clock_.GetWallclockTime();
527 UpdateState update_state = GetDefaultUpdateState(TimeDelta::FromSeconds(10));
528 update_state.download_errors_max = 1;
529 update_state.download_errors.emplace_back(
530 0, ErrorCode::kDownloadTransferError,
531 curr_time - TimeDelta::FromSeconds(8));
532 update_state.download_errors.emplace_back(
533 0, ErrorCode::kDownloadTransferError,
534 curr_time - TimeDelta::FromSeconds(2));
535 update_state.failures_last_updated = curr_time;
536 update_state.backoff_expiry = curr_time + TimeDelta::FromMinutes(3);
537
538 // Check that UpdateCanStart returns false and a new backoff expiry is
539 // generated.
540 UpdateDownloadParams result;
541 ExpectPolicyStatus(EvalStatus::kAskMeAgainLater, &Policy::UpdateCanStart,
542 &result, update_state);
543 EXPECT_FALSE(result.update_can_start);
544 EXPECT_EQ(UpdateCannotStartReason::kBackoff, result.cannot_start_reason);
545 EXPECT_FALSE(result.do_increment_failures);
546 EXPECT_LT(curr_time, result.backoff_expiry);
547}
548
549TEST_F(UmChromeOSPolicyTest, UpdateCanStartAllowedBackoffSatisfied) {
550 // The UpdateCanStart policy returns true; a previously enacted backoff period
551 // has elapsed, we're good to go.
552
553 SetUpdateCheckAllowed(false);
554
555 const Time curr_time = fake_clock_.GetWallclockTime();
556 UpdateState update_state = GetDefaultUpdateState(TimeDelta::FromSeconds(10));
557 update_state.download_errors_max = 1;
558 update_state.download_errors.emplace_back(
559 0, ErrorCode::kDownloadTransferError,
560 curr_time - TimeDelta::FromSeconds(8));
561 update_state.download_errors.emplace_back(
562 0, ErrorCode::kDownloadTransferError,
563 curr_time - TimeDelta::FromSeconds(2));
564 update_state.failures_last_updated = curr_time - TimeDelta::FromSeconds(1);
565 update_state.backoff_expiry = curr_time - TimeDelta::FromSeconds(1);
566
567 // Check that UpdateCanStart returns false and a new backoff expiry is
568 // generated.
569 UpdateDownloadParams result;
570 ExpectPolicyStatus(EvalStatus::kSucceeded, &Policy::UpdateCanStart,
571 &result, update_state);
572 EXPECT_TRUE(result.update_can_start);
573 EXPECT_EQ(UpdateCannotStartReason::kUndefined, result.cannot_start_reason);
574 EXPECT_EQ(0, result.download_url_idx);
Gilad Arnold14a9e702014-10-08 08:09:09 -0700575 EXPECT_TRUE(result.download_url_allowed);
Gilad Arnolddc4bb262014-07-23 10:45:19 -0700576 EXPECT_EQ(0, result.download_url_num_errors);
577 EXPECT_FALSE(result.do_increment_failures);
578 EXPECT_EQ(Time(), result.backoff_expiry);
579}
580
581TEST_F(UmChromeOSPolicyTest, UpdateCanStartAllowedBackoffDisabled) {
582 // The UpdateCanStart policy returns false; failures are reported but backoff
583 // is disabled.
584
585 SetUpdateCheckAllowed(false);
586
587 const Time curr_time = fake_clock_.GetWallclockTime();
588 UpdateState update_state = GetDefaultUpdateState(TimeDelta::FromSeconds(10));
589 update_state.download_errors_max = 1;
590 update_state.download_errors.emplace_back(
591 0, ErrorCode::kDownloadTransferError,
592 curr_time - TimeDelta::FromSeconds(8));
593 update_state.download_errors.emplace_back(
594 0, ErrorCode::kDownloadTransferError,
595 curr_time - TimeDelta::FromSeconds(2));
596 update_state.is_backoff_disabled = true;
597
598 // Check that UpdateCanStart returns false and a new backoff expiry is
599 // generated.
600 UpdateDownloadParams result;
601 ExpectPolicyStatus(EvalStatus::kSucceeded, &Policy::UpdateCanStart, &result,
602 update_state);
603 EXPECT_TRUE(result.update_can_start);
604 EXPECT_EQ(UpdateCannotStartReason::kUndefined, result.cannot_start_reason);
605 EXPECT_EQ(0, result.download_url_idx);
Gilad Arnold14a9e702014-10-08 08:09:09 -0700606 EXPECT_TRUE(result.download_url_allowed);
Gilad Arnolddc4bb262014-07-23 10:45:19 -0700607 EXPECT_EQ(0, result.download_url_num_errors);
608 EXPECT_TRUE(result.do_increment_failures);
609 EXPECT_EQ(Time(), result.backoff_expiry);
610}
611
612TEST_F(UmChromeOSPolicyTest, UpdateCanStartAllowedNoBackoffInteractive) {
613 // The UpdateCanStart policy returns false; failures are reported but this is
614 // an interactive update check.
615
616 SetUpdateCheckAllowed(false);
617
618 const Time curr_time = fake_clock_.GetWallclockTime();
619 UpdateState update_state = GetDefaultUpdateState(TimeDelta::FromSeconds(10));
620 update_state.download_errors_max = 1;
621 update_state.download_errors.emplace_back(
622 0, ErrorCode::kDownloadTransferError,
623 curr_time - TimeDelta::FromSeconds(8));
624 update_state.download_errors.emplace_back(
625 0, ErrorCode::kDownloadTransferError,
626 curr_time - TimeDelta::FromSeconds(2));
627 update_state.is_interactive = true;
628
629 // Check that UpdateCanStart returns false and a new backoff expiry is
630 // generated.
631 UpdateDownloadParams result;
632 ExpectPolicyStatus(EvalStatus::kSucceeded, &Policy::UpdateCanStart, &result,
633 update_state);
634 EXPECT_TRUE(result.update_can_start);
635 EXPECT_EQ(UpdateCannotStartReason::kUndefined, result.cannot_start_reason);
636 EXPECT_EQ(0, result.download_url_idx);
Gilad Arnold14a9e702014-10-08 08:09:09 -0700637 EXPECT_TRUE(result.download_url_allowed);
Gilad Arnolddc4bb262014-07-23 10:45:19 -0700638 EXPECT_EQ(0, result.download_url_num_errors);
639 EXPECT_TRUE(result.do_increment_failures);
640 EXPECT_EQ(Time(), result.backoff_expiry);
641}
642
643TEST_F(UmChromeOSPolicyTest, UpdateCanStartAllowedNoBackoffDelta) {
644 // The UpdateCanStart policy returns false; failures are reported but this is
645 // a delta payload.
646
647 SetUpdateCheckAllowed(false);
648
649 const Time curr_time = fake_clock_.GetWallclockTime();
650 UpdateState update_state = GetDefaultUpdateState(TimeDelta::FromSeconds(10));
651 update_state.download_errors_max = 1;
652 update_state.download_errors.emplace_back(
653 0, ErrorCode::kDownloadTransferError,
654 curr_time - TimeDelta::FromSeconds(8));
655 update_state.download_errors.emplace_back(
656 0, ErrorCode::kDownloadTransferError,
657 curr_time - TimeDelta::FromSeconds(2));
658 update_state.is_delta_payload = true;
659
660 // Check that UpdateCanStart returns false and a new backoff expiry is
661 // generated.
662 UpdateDownloadParams result;
663 ExpectPolicyStatus(EvalStatus::kSucceeded, &Policy::UpdateCanStart, &result,
664 update_state);
665 EXPECT_TRUE(result.update_can_start);
666 EXPECT_EQ(UpdateCannotStartReason::kUndefined, result.cannot_start_reason);
667 EXPECT_EQ(0, result.download_url_idx);
Gilad Arnold14a9e702014-10-08 08:09:09 -0700668 EXPECT_TRUE(result.download_url_allowed);
Gilad Arnolddc4bb262014-07-23 10:45:19 -0700669 EXPECT_EQ(0, result.download_url_num_errors);
670 EXPECT_TRUE(result.do_increment_failures);
671 EXPECT_EQ(Time(), result.backoff_expiry);
672}
673
674TEST_F(UmChromeOSPolicyTest, UpdateCanStartAllowedNoBackoffUnofficialBuild) {
675 // The UpdateCanStart policy returns false; failures are reported but this is
676 // an unofficial build.
677
678 SetUpdateCheckAllowed(false);
679
680 const Time curr_time = fake_clock_.GetWallclockTime();
681 UpdateState update_state = GetDefaultUpdateState(TimeDelta::FromSeconds(10));
682 update_state.download_errors_max = 1;
683 update_state.download_errors.emplace_back(
684 0, ErrorCode::kDownloadTransferError,
685 curr_time - TimeDelta::FromSeconds(8));
686 update_state.download_errors.emplace_back(
687 0, ErrorCode::kDownloadTransferError,
688 curr_time - TimeDelta::FromSeconds(2));
689
690 fake_state_.system_provider()->var_is_official_build()->
691 reset(new bool(false));
692
693 // Check that UpdateCanStart returns false and a new backoff expiry is
694 // generated.
695 UpdateDownloadParams result;
696 ExpectPolicyStatus(EvalStatus::kSucceeded, &Policy::UpdateCanStart, &result,
697 update_state);
698 EXPECT_TRUE(result.update_can_start);
699 EXPECT_EQ(UpdateCannotStartReason::kUndefined, result.cannot_start_reason);
700 EXPECT_EQ(0, result.download_url_idx);
Gilad Arnold14a9e702014-10-08 08:09:09 -0700701 EXPECT_TRUE(result.download_url_allowed);
Gilad Arnolddc4bb262014-07-23 10:45:19 -0700702 EXPECT_EQ(0, result.download_url_num_errors);
703 EXPECT_TRUE(result.do_increment_failures);
704 EXPECT_EQ(Time(), result.backoff_expiry);
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700705}
706
Alex Deymo63784a52014-05-28 10:46:14 -0700707TEST_F(UmChromeOSPolicyTest, UpdateCanStartFailsScatteringFailed) {
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700708 // The UpdateCanStart policy fails because the UpdateScattering policy it
709 // depends on fails (unset variable).
710
711 SetUpdateCheckAllowed(false);
712
713 // Override the default seed variable with a null value so that the policy
714 // request would fail.
Gilad Arnolddc4bb262014-07-23 10:45:19 -0700715 // TODO(garnold) This failure may or may not fail a number
716 // sub-policies/decisions, like scattering and backoff. We'll need a more
717 // deliberate setup to ensure that we're failing what we want to be failing.
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700718 fake_state_.random_provider()->var_seed()->reset(nullptr);
719
720 // Check that the UpdateCanStart fails.
721 UpdateState update_state = GetDefaultUpdateState(TimeDelta::FromSeconds(1));
Gilad Arnold42f253b2014-06-25 12:39:17 -0700722 UpdateDownloadParams result;
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700723 ExpectPolicyStatus(EvalStatus::kFailed,
Gilad Arnolddc4bb262014-07-23 10:45:19 -0700724 &Policy::UpdateCanStart, &result, update_state);
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700725}
726
Alex Deymo63784a52014-05-28 10:46:14 -0700727TEST_F(UmChromeOSPolicyTest,
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700728 UpdateCanStartNotAllowedScatteringNewWaitPeriodApplies) {
729 // The UpdateCanStart policy returns false; device policy is loaded and
730 // scattering applies due to an unsatisfied wait period, which was newly
731 // generated.
732
733 SetUpdateCheckAllowed(false);
734 fake_state_.device_policy_provider()->var_scatter_factor()->reset(
735 new TimeDelta(TimeDelta::FromMinutes(2)));
736
737
738 UpdateState update_state = GetDefaultUpdateState(TimeDelta::FromSeconds(1));
739
740 // Check that the UpdateCanStart returns false and a new wait period
741 // generated.
Gilad Arnold42f253b2014-06-25 12:39:17 -0700742 UpdateDownloadParams result;
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700743 ExpectPolicyStatus(EvalStatus::kSucceeded, &Policy::UpdateCanStart, &result,
Gilad Arnolddc4bb262014-07-23 10:45:19 -0700744 update_state);
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700745 EXPECT_FALSE(result.update_can_start);
746 EXPECT_EQ(UpdateCannotStartReason::kScattering, result.cannot_start_reason);
747 EXPECT_LT(TimeDelta(), result.scatter_wait_period);
748 EXPECT_EQ(0, result.scatter_check_threshold);
749}
750
Alex Deymo63784a52014-05-28 10:46:14 -0700751TEST_F(UmChromeOSPolicyTest,
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700752 UpdateCanStartNotAllowedScatteringPrevWaitPeriodStillApplies) {
753 // The UpdateCanStart policy returns false w/ kAskMeAgainLater; device policy
754 // is loaded and a previously generated scattering period still applies, none
755 // of the scattering values has changed.
756
757 SetUpdateCheckAllowed(false);
758 fake_state_.device_policy_provider()->var_scatter_factor()->reset(
759 new TimeDelta(TimeDelta::FromMinutes(2)));
760
761 UpdateState update_state = GetDefaultUpdateState(TimeDelta::FromSeconds(1));
762 update_state.scatter_wait_period = TimeDelta::FromSeconds(35);
763
764 // Check that the UpdateCanStart returns false and a new wait period
765 // generated.
Gilad Arnold42f253b2014-06-25 12:39:17 -0700766 UpdateDownloadParams result;
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700767 ExpectPolicyStatus(EvalStatus::kAskMeAgainLater, &Policy::UpdateCanStart,
Gilad Arnolddc4bb262014-07-23 10:45:19 -0700768 &result, update_state);
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700769 EXPECT_FALSE(result.update_can_start);
770 EXPECT_EQ(UpdateCannotStartReason::kScattering, result.cannot_start_reason);
771 EXPECT_EQ(TimeDelta::FromSeconds(35), result.scatter_wait_period);
772 EXPECT_EQ(0, result.scatter_check_threshold);
773}
774
Alex Deymo63784a52014-05-28 10:46:14 -0700775TEST_F(UmChromeOSPolicyTest,
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700776 UpdateCanStartNotAllowedScatteringNewCountThresholdApplies) {
777 // The UpdateCanStart policy returns false; device policy is loaded and
778 // scattering applies due to an unsatisfied update check count threshold.
779 //
780 // This ensures a non-zero check threshold, which may or may not be combined
781 // with a non-zero wait period (for which we cannot reliably control).
782
783 SetUpdateCheckAllowed(false);
784 fake_state_.device_policy_provider()->var_scatter_factor()->reset(
785 new TimeDelta(TimeDelta::FromSeconds(1)));
786
787 UpdateState update_state = GetDefaultUpdateState(TimeDelta::FromSeconds(1));
788 update_state.scatter_check_threshold_min = 2;
789 update_state.scatter_check_threshold_max = 5;
790
791 // Check that the UpdateCanStart returns false.
Gilad Arnold42f253b2014-06-25 12:39:17 -0700792 UpdateDownloadParams result;
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700793 ExpectPolicyStatus(EvalStatus::kSucceeded, &Policy::UpdateCanStart, &result,
Gilad Arnolddc4bb262014-07-23 10:45:19 -0700794 update_state);
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700795 EXPECT_FALSE(result.update_can_start);
796 EXPECT_EQ(UpdateCannotStartReason::kScattering, result.cannot_start_reason);
797 EXPECT_LE(2, result.scatter_check_threshold);
798 EXPECT_GE(5, result.scatter_check_threshold);
799}
800
Alex Deymo63784a52014-05-28 10:46:14 -0700801TEST_F(UmChromeOSPolicyTest,
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700802 UpdateCanStartNotAllowedScatteringPrevCountThresholdStillApplies) {
803 // The UpdateCanStart policy returns false; device policy is loaded and
804 // scattering due to a previously generated count threshold still applies.
805
806 SetUpdateCheckAllowed(false);
807 fake_state_.device_policy_provider()->var_scatter_factor()->reset(
808 new TimeDelta(TimeDelta::FromSeconds(1)));
809
810 UpdateState update_state = GetDefaultUpdateState(TimeDelta::FromSeconds(1));
811 update_state.scatter_check_threshold = 3;
812 update_state.scatter_check_threshold_min = 2;
813 update_state.scatter_check_threshold_max = 5;
814
815 // Check that the UpdateCanStart returns false.
Gilad Arnold42f253b2014-06-25 12:39:17 -0700816 UpdateDownloadParams result;
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700817 ExpectPolicyStatus(EvalStatus::kSucceeded, &Policy::UpdateCanStart, &result,
Gilad Arnolddc4bb262014-07-23 10:45:19 -0700818 update_state);
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700819 EXPECT_FALSE(result.update_can_start);
820 EXPECT_EQ(UpdateCannotStartReason::kScattering, result.cannot_start_reason);
821 EXPECT_EQ(3, result.scatter_check_threshold);
822}
823
Alex Deymo63784a52014-05-28 10:46:14 -0700824TEST_F(UmChromeOSPolicyTest, UpdateCanStartAllowedScatteringSatisfied) {
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700825 // The UpdateCanStart policy returns true; device policy is loaded and
826 // scattering is enabled, but both wait period and check threshold are
827 // satisfied.
828
829 SetUpdateCheckAllowed(false);
830 fake_state_.device_policy_provider()->var_scatter_factor()->reset(
831 new TimeDelta(TimeDelta::FromSeconds(120)));
832
833 UpdateState update_state = GetDefaultUpdateState(TimeDelta::FromSeconds(75));
834 update_state.num_checks = 4;
835 update_state.scatter_wait_period = TimeDelta::FromSeconds(60);
836 update_state.scatter_check_threshold = 3;
837 update_state.scatter_check_threshold_min = 2;
838 update_state.scatter_check_threshold_max = 5;
839
840 // Check that the UpdateCanStart returns true.
Gilad Arnold42f253b2014-06-25 12:39:17 -0700841 UpdateDownloadParams result;
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700842 ExpectPolicyStatus(EvalStatus::kSucceeded, &Policy::UpdateCanStart, &result,
Gilad Arnolddc4bb262014-07-23 10:45:19 -0700843 update_state);
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700844 EXPECT_TRUE(result.update_can_start);
845 EXPECT_EQ(TimeDelta(), result.scatter_wait_period);
846 EXPECT_EQ(0, result.scatter_check_threshold);
Gilad Arnoldb3b05442014-05-30 14:25:05 -0700847 EXPECT_EQ(0, result.download_url_idx);
Gilad Arnold14a9e702014-10-08 08:09:09 -0700848 EXPECT_TRUE(result.download_url_allowed);
Gilad Arnolddc4bb262014-07-23 10:45:19 -0700849 EXPECT_EQ(0, result.download_url_num_errors);
850 EXPECT_FALSE(result.do_increment_failures);
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700851}
852
Alex Deymo63784a52014-05-28 10:46:14 -0700853TEST_F(UmChromeOSPolicyTest,
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700854 UpdateCanStartAllowedInteractivePreventsScattering) {
855 // The UpdateCanStart policy returns true; device policy is loaded and
856 // scattering would have applied, except that the update check is interactive
857 // and so it is suppressed.
858
859 SetUpdateCheckAllowed(false);
860 fake_state_.device_policy_provider()->var_scatter_factor()->reset(
861 new TimeDelta(TimeDelta::FromSeconds(1)));
862
863 UpdateState update_state = GetDefaultUpdateState(TimeDelta::FromSeconds(1));
Gilad Arnolddc4bb262014-07-23 10:45:19 -0700864 update_state.is_interactive = true;
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700865 update_state.scatter_check_threshold = 0;
866 update_state.scatter_check_threshold_min = 2;
867 update_state.scatter_check_threshold_max = 5;
868
869 // Check that the UpdateCanStart returns true.
Gilad Arnold42f253b2014-06-25 12:39:17 -0700870 UpdateDownloadParams result;
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700871 ExpectPolicyStatus(EvalStatus::kSucceeded, &Policy::UpdateCanStart, &result,
Gilad Arnolddc4bb262014-07-23 10:45:19 -0700872 update_state);
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700873 EXPECT_TRUE(result.update_can_start);
874 EXPECT_EQ(TimeDelta(), result.scatter_wait_period);
875 EXPECT_EQ(0, result.scatter_check_threshold);
Gilad Arnoldb3b05442014-05-30 14:25:05 -0700876 EXPECT_EQ(0, result.download_url_idx);
Gilad Arnold14a9e702014-10-08 08:09:09 -0700877 EXPECT_TRUE(result.download_url_allowed);
Gilad Arnolddc4bb262014-07-23 10:45:19 -0700878 EXPECT_EQ(0, result.download_url_num_errors);
879 EXPECT_FALSE(result.do_increment_failures);
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700880}
881
Alex Deymo63784a52014-05-28 10:46:14 -0700882TEST_F(UmChromeOSPolicyTest,
Gilad Arnold76a11f62014-05-20 09:02:12 -0700883 UpdateCanStartAllowedOobePreventsScattering) {
884 // The UpdateCanStart policy returns true; device policy is loaded and
885 // scattering would have applied, except that OOBE was not completed and so it
886 // is suppressed.
887
888 SetUpdateCheckAllowed(false);
889 fake_state_.device_policy_provider()->var_scatter_factor()->reset(
890 new TimeDelta(TimeDelta::FromSeconds(1)));
891 fake_state_.system_provider()->var_is_oobe_complete()->reset(new bool(false));
892
893 UpdateState update_state = GetDefaultUpdateState(TimeDelta::FromSeconds(1));
Gilad Arnolddc4bb262014-07-23 10:45:19 -0700894 update_state.is_interactive = true;
Gilad Arnold76a11f62014-05-20 09:02:12 -0700895 update_state.scatter_check_threshold = 0;
896 update_state.scatter_check_threshold_min = 2;
897 update_state.scatter_check_threshold_max = 5;
898
899 // Check that the UpdateCanStart returns true.
Gilad Arnold42f253b2014-06-25 12:39:17 -0700900 UpdateDownloadParams result;
Gilad Arnold76a11f62014-05-20 09:02:12 -0700901 ExpectPolicyStatus(EvalStatus::kSucceeded, &Policy::UpdateCanStart, &result,
Gilad Arnolddc4bb262014-07-23 10:45:19 -0700902 update_state);
Gilad Arnold76a11f62014-05-20 09:02:12 -0700903 EXPECT_TRUE(result.update_can_start);
904 EXPECT_EQ(TimeDelta(), result.scatter_wait_period);
905 EXPECT_EQ(0, result.scatter_check_threshold);
Gilad Arnoldb3b05442014-05-30 14:25:05 -0700906 EXPECT_EQ(0, result.download_url_idx);
Gilad Arnold14a9e702014-10-08 08:09:09 -0700907 EXPECT_TRUE(result.download_url_allowed);
Gilad Arnolddc4bb262014-07-23 10:45:19 -0700908 EXPECT_EQ(0, result.download_url_num_errors);
909 EXPECT_FALSE(result.do_increment_failures);
Gilad Arnold76a11f62014-05-20 09:02:12 -0700910}
911
Alex Deymo63784a52014-05-28 10:46:14 -0700912TEST_F(UmChromeOSPolicyTest, UpdateCanStartAllowedWithAttributes) {
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700913 // The UpdateCanStart policy returns true; device policy permits both HTTP and
914 // P2P updates, as well as a non-empty target channel string.
915
916 SetUpdateCheckAllowed(false);
917
918 // Override specific device policy attributes.
919 fake_state_.device_policy_provider()->var_http_downloads_enabled()->reset(
920 new bool(true));
921 fake_state_.device_policy_provider()->var_au_p2p_enabled()->reset(
922 new bool(true));
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700923
924 // Check that the UpdateCanStart returns true.
925 UpdateState update_state = GetDefaultUpdateState(TimeDelta::FromMinutes(10));
Gilad Arnold42f253b2014-06-25 12:39:17 -0700926 UpdateDownloadParams result;
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700927 ExpectPolicyStatus(EvalStatus::kSucceeded, &Policy::UpdateCanStart, &result,
Gilad Arnolddc4bb262014-07-23 10:45:19 -0700928 update_state);
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700929 EXPECT_TRUE(result.update_can_start);
Gilad Arnoldb2f99192014-10-07 13:01:52 -0700930 EXPECT_TRUE(result.p2p_downloading_allowed);
931 EXPECT_TRUE(result.p2p_sharing_allowed);
Gilad Arnoldb3b05442014-05-30 14:25:05 -0700932 EXPECT_EQ(0, result.download_url_idx);
Gilad Arnold14a9e702014-10-08 08:09:09 -0700933 EXPECT_TRUE(result.download_url_allowed);
Gilad Arnolddc4bb262014-07-23 10:45:19 -0700934 EXPECT_EQ(0, result.download_url_num_errors);
935 EXPECT_FALSE(result.do_increment_failures);
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700936}
937
Alex Deymo63784a52014-05-28 10:46:14 -0700938TEST_F(UmChromeOSPolicyTest, UpdateCanStartAllowedWithP2PFromUpdater) {
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700939 // The UpdateCanStart policy returns true; device policy forbids both HTTP and
940 // P2P updates, but the updater is configured to allow P2P and overrules the
941 // setting.
942
943 SetUpdateCheckAllowed(false);
944
945 // Override specific device policy attributes.
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700946 fake_state_.updater_provider()->var_p2p_enabled()->reset(new bool(true));
947
948 // Check that the UpdateCanStart returns true.
949 UpdateState update_state = GetDefaultUpdateState(TimeDelta::FromMinutes(10));
Gilad Arnold42f253b2014-06-25 12:39:17 -0700950 UpdateDownloadParams result;
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700951 ExpectPolicyStatus(EvalStatus::kSucceeded, &Policy::UpdateCanStart, &result,
Gilad Arnolddc4bb262014-07-23 10:45:19 -0700952 update_state);
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700953 EXPECT_TRUE(result.update_can_start);
Gilad Arnoldb2f99192014-10-07 13:01:52 -0700954 EXPECT_TRUE(result.p2p_downloading_allowed);
955 EXPECT_TRUE(result.p2p_sharing_allowed);
Gilad Arnoldb3b05442014-05-30 14:25:05 -0700956 EXPECT_EQ(0, result.download_url_idx);
Gilad Arnold14a9e702014-10-08 08:09:09 -0700957 EXPECT_TRUE(result.download_url_allowed);
Gilad Arnolddc4bb262014-07-23 10:45:19 -0700958 EXPECT_EQ(0, result.download_url_num_errors);
959 EXPECT_FALSE(result.do_increment_failures);
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700960}
961
Gilad Arnoldb2f99192014-10-07 13:01:52 -0700962TEST_F(UmChromeOSPolicyTest,
Gilad Arnold78ecbfc2014-10-22 14:38:25 -0700963 UpdateCanStartAllowedP2PDownloadingBlockedDueToOmaha) {
964 // The UpdateCanStart policy returns true; device policy permits HTTP, but
965 // policy blocks P2P downloading because Omaha forbids it. P2P sharing is
966 // still permitted.
967
968 SetUpdateCheckAllowed(false);
969
970 // Override specific device policy attributes.
971 fake_state_.device_policy_provider()->var_http_downloads_enabled()->reset(
972 new bool(true));
973 fake_state_.device_policy_provider()->var_au_p2p_enabled()->reset(
974 new bool(true));
975
976 // Check that the UpdateCanStart returns true.
977 UpdateState update_state = GetDefaultUpdateState(TimeDelta::FromMinutes(10));
978 update_state.p2p_downloading_disabled = true;
979 UpdateDownloadParams result;
980 ExpectPolicyStatus(EvalStatus::kSucceeded, &Policy::UpdateCanStart, &result,
981 update_state);
982 EXPECT_TRUE(result.update_can_start);
983 EXPECT_FALSE(result.p2p_downloading_allowed);
984 EXPECT_TRUE(result.p2p_sharing_allowed);
985}
986
987TEST_F(UmChromeOSPolicyTest,
988 UpdateCanStartAllowedP2PSharingBlockedDueToOmaha) {
989 // The UpdateCanStart policy returns true; device policy permits HTTP, but
990 // policy blocks P2P sharing because Omaha forbids it. P2P downloading is
991 // still permitted.
992
993 SetUpdateCheckAllowed(false);
994
995 // Override specific device policy attributes.
996 fake_state_.device_policy_provider()->var_http_downloads_enabled()->reset(
997 new bool(true));
998 fake_state_.device_policy_provider()->var_au_p2p_enabled()->reset(
999 new bool(true));
1000
1001 // Check that the UpdateCanStart returns true.
1002 UpdateState update_state = GetDefaultUpdateState(TimeDelta::FromMinutes(10));
1003 update_state.p2p_sharing_disabled = true;
1004 UpdateDownloadParams result;
1005 ExpectPolicyStatus(EvalStatus::kSucceeded, &Policy::UpdateCanStart, &result,
1006 update_state);
1007 EXPECT_TRUE(result.update_can_start);
1008 EXPECT_TRUE(result.p2p_downloading_allowed);
1009 EXPECT_FALSE(result.p2p_sharing_allowed);
1010}
1011
1012TEST_F(UmChromeOSPolicyTest,
1013 UpdateCanStartAllowedP2PDownloadingBlockedDueToNumAttempts) {
Gilad Arnold349ac832014-10-06 14:20:28 -07001014 // The UpdateCanStart policy returns true; device policy permits HTTP but
Gilad Arnoldb2f99192014-10-07 13:01:52 -07001015 // blocks P2P download, because the max number of P2P downloads have been
1016 // attempted. P2P sharing is still permitted.
Gilad Arnold349ac832014-10-06 14:20:28 -07001017
1018 SetUpdateCheckAllowed(false);
1019
1020 // Override specific device policy attributes.
1021 fake_state_.device_policy_provider()->var_http_downloads_enabled()->reset(
1022 new bool(true));
1023 fake_state_.device_policy_provider()->var_au_p2p_enabled()->reset(
1024 new bool(true));
1025
1026 // Check that the UpdateCanStart returns true.
1027 UpdateState update_state = GetDefaultUpdateState(TimeDelta::FromMinutes(10));
1028 update_state.p2p_num_attempts = ChromeOSPolicy::kMaxP2PAttempts;
1029 UpdateDownloadParams result;
1030 ExpectPolicyStatus(EvalStatus::kSucceeded, &Policy::UpdateCanStart, &result,
1031 update_state);
1032 EXPECT_TRUE(result.update_can_start);
Gilad Arnoldb2f99192014-10-07 13:01:52 -07001033 EXPECT_FALSE(result.p2p_downloading_allowed);
1034 EXPECT_TRUE(result.p2p_sharing_allowed);
Gilad Arnold349ac832014-10-06 14:20:28 -07001035}
1036
1037TEST_F(UmChromeOSPolicyTest,
Gilad Arnold78ecbfc2014-10-22 14:38:25 -07001038 UpdateCanStartAllowedP2PDownloadingBlockedDueToAttemptsPeriod) {
Gilad Arnold349ac832014-10-06 14:20:28 -07001039 // The UpdateCanStart policy returns true; device policy permits HTTP but
Gilad Arnoldb2f99192014-10-07 13:01:52 -07001040 // blocks P2P download, because the max period for attempt to download via P2P
1041 // has elapsed. P2P sharing is still permitted.
Gilad Arnold349ac832014-10-06 14:20:28 -07001042
1043 SetUpdateCheckAllowed(false);
1044
1045 // Override specific device policy attributes.
1046 fake_state_.device_policy_provider()->var_http_downloads_enabled()->reset(
1047 new bool(true));
1048 fake_state_.device_policy_provider()->var_au_p2p_enabled()->reset(
1049 new bool(true));
1050
1051 // Check that the UpdateCanStart returns true.
1052 UpdateState update_state = GetDefaultUpdateState(TimeDelta::FromMinutes(10));
1053 update_state.p2p_num_attempts = 1;
1054 update_state.p2p_first_attempted =
1055 fake_clock_.GetWallclockTime() -
Alex Deymof329b932014-10-30 01:37:48 -07001056 TimeDelta::FromSeconds(
1057 ChromeOSPolicy::kMaxP2PAttemptsPeriodInSeconds + 1);
Gilad Arnold349ac832014-10-06 14:20:28 -07001058 UpdateDownloadParams result;
1059 ExpectPolicyStatus(EvalStatus::kSucceeded, &Policy::UpdateCanStart, &result,
1060 update_state);
1061 EXPECT_TRUE(result.update_can_start);
Gilad Arnoldb2f99192014-10-07 13:01:52 -07001062 EXPECT_FALSE(result.p2p_downloading_allowed);
1063 EXPECT_TRUE(result.p2p_sharing_allowed);
Gilad Arnold349ac832014-10-06 14:20:28 -07001064}
1065
Gilad Arnoldb3b05442014-05-30 14:25:05 -07001066TEST_F(UmChromeOSPolicyTest,
1067 UpdateCanStartAllowedWithHttpUrlForUnofficialBuild) {
Gilad Arnoldf62a4b82014-05-01 07:41:07 -07001068 // The UpdateCanStart policy returns true; device policy forbids both HTTP and
1069 // P2P updates, but marking this an unofficial build overrules the HTTP
1070 // setting.
1071
1072 SetUpdateCheckAllowed(false);
1073
1074 // Override specific device policy attributes.
Gilad Arnoldb3b05442014-05-30 14:25:05 -07001075 fake_state_.device_policy_provider()->var_http_downloads_enabled()->reset(
1076 new bool(false));
Gilad Arnoldf62a4b82014-05-01 07:41:07 -07001077 fake_state_.system_provider()->var_is_official_build()->
1078 reset(new bool(false));
1079
1080 // Check that the UpdateCanStart returns true.
1081 UpdateState update_state = GetDefaultUpdateState(TimeDelta::FromMinutes(10));
Gilad Arnold42f253b2014-06-25 12:39:17 -07001082 UpdateDownloadParams result;
Gilad Arnoldf62a4b82014-05-01 07:41:07 -07001083 ExpectPolicyStatus(EvalStatus::kSucceeded, &Policy::UpdateCanStart, &result,
Gilad Arnolddc4bb262014-07-23 10:45:19 -07001084 update_state);
Gilad Arnoldf62a4b82014-05-01 07:41:07 -07001085 EXPECT_TRUE(result.update_can_start);
Gilad Arnoldb3b05442014-05-30 14:25:05 -07001086 EXPECT_EQ(0, result.download_url_idx);
Gilad Arnold14a9e702014-10-08 08:09:09 -07001087 EXPECT_TRUE(result.download_url_allowed);
Gilad Arnolddc4bb262014-07-23 10:45:19 -07001088 EXPECT_EQ(0, result.download_url_num_errors);
1089 EXPECT_FALSE(result.do_increment_failures);
Gilad Arnoldb3b05442014-05-30 14:25:05 -07001090}
1091
1092TEST_F(UmChromeOSPolicyTest, UpdateCanStartAllowedWithHttpsUrl) {
1093 // The UpdateCanStart policy returns true; device policy forbids both HTTP and
1094 // P2P updates, but an HTTPS URL is provided and selected for download.
1095
1096 SetUpdateCheckAllowed(false);
1097
1098 // Override specific device policy attributes.
1099 fake_state_.device_policy_provider()->var_http_downloads_enabled()->reset(
1100 new bool(false));
1101
1102 // Add an HTTPS URL.
1103 UpdateState update_state = GetDefaultUpdateState(TimeDelta::FromMinutes(10));
Gilad Arnolddc4bb262014-07-23 10:45:19 -07001104 update_state.download_urls.emplace_back("https://secure/url/");
Gilad Arnoldb3b05442014-05-30 14:25:05 -07001105
1106 // Check that the UpdateCanStart returns true.
Gilad Arnold42f253b2014-06-25 12:39:17 -07001107 UpdateDownloadParams result;
Gilad Arnoldb3b05442014-05-30 14:25:05 -07001108 ExpectPolicyStatus(EvalStatus::kSucceeded, &Policy::UpdateCanStart, &result,
Gilad Arnolddc4bb262014-07-23 10:45:19 -07001109 update_state);
Gilad Arnoldb3b05442014-05-30 14:25:05 -07001110 EXPECT_TRUE(result.update_can_start);
Gilad Arnoldb3b05442014-05-30 14:25:05 -07001111 EXPECT_EQ(1, result.download_url_idx);
Gilad Arnold14a9e702014-10-08 08:09:09 -07001112 EXPECT_TRUE(result.download_url_allowed);
Gilad Arnolddc4bb262014-07-23 10:45:19 -07001113 EXPECT_EQ(0, result.download_url_num_errors);
1114 EXPECT_FALSE(result.do_increment_failures);
1115}
1116
1117TEST_F(UmChromeOSPolicyTest, UpdateCanStartAllowedMaxErrorsNotExceeded) {
1118 // The UpdateCanStart policy returns true; the first URL has download errors
1119 // but does not exceed the maximum allowed number of failures, so it is stilli
1120 // usable.
1121
1122 SetUpdateCheckAllowed(false);
1123
1124 // Add a second URL; update with this URL attempted and failed enough times to
1125 // disqualify the current (first) URL.
1126 UpdateState update_state = GetDefaultUpdateState(TimeDelta::FromMinutes(10));
1127 update_state.num_checks = 5;
1128 update_state.download_urls.emplace_back("http://another/fake/url/");
1129 Time t = fake_clock_.GetWallclockTime() - TimeDelta::FromSeconds(12);
1130 for (int i = 0; i < 5; i++) {
1131 update_state.download_errors.emplace_back(
1132 0, ErrorCode::kDownloadTransferError, t);
1133 t += TimeDelta::FromSeconds(1);
1134 }
1135
1136 // Check that the UpdateCanStart returns true.
1137 UpdateDownloadParams result;
1138 ExpectPolicyStatus(EvalStatus::kSucceeded, &Policy::UpdateCanStart, &result,
1139 update_state);
1140 EXPECT_TRUE(result.update_can_start);
Gilad Arnolddc4bb262014-07-23 10:45:19 -07001141 EXPECT_EQ(0, result.download_url_idx);
Gilad Arnold14a9e702014-10-08 08:09:09 -07001142 EXPECT_TRUE(result.download_url_allowed);
Gilad Arnolddc4bb262014-07-23 10:45:19 -07001143 EXPECT_EQ(5, result.download_url_num_errors);
1144 EXPECT_FALSE(result.do_increment_failures);
Gilad Arnoldb3b05442014-05-30 14:25:05 -07001145}
1146
1147TEST_F(UmChromeOSPolicyTest, UpdateCanStartAllowedWithSecondUrlMaxExceeded) {
1148 // The UpdateCanStart policy returns true; the first URL exceeded the maximum
1149 // allowed number of failures, but a second URL is available.
1150
1151 SetUpdateCheckAllowed(false);
1152
1153 // Add a second URL; update with this URL attempted and failed enough times to
Gilad Arnolddc4bb262014-07-23 10:45:19 -07001154 // disqualify the current (first) URL.
Gilad Arnoldb3b05442014-05-30 14:25:05 -07001155 UpdateState update_state = GetDefaultUpdateState(TimeDelta::FromMinutes(10));
1156 update_state.num_checks = 10;
Gilad Arnolddc4bb262014-07-23 10:45:19 -07001157 update_state.download_urls.emplace_back("http://another/fake/url/");
1158 Time t = fake_clock_.GetWallclockTime() - TimeDelta::FromSeconds(12);
1159 for (int i = 0; i < 11; i++) {
1160 update_state.download_errors.emplace_back(
1161 0, ErrorCode::kDownloadTransferError, t);
1162 t += TimeDelta::FromSeconds(1);
1163 }
Gilad Arnoldb3b05442014-05-30 14:25:05 -07001164
1165 // Check that the UpdateCanStart returns true.
Gilad Arnold42f253b2014-06-25 12:39:17 -07001166 UpdateDownloadParams result;
Gilad Arnoldb3b05442014-05-30 14:25:05 -07001167 ExpectPolicyStatus(EvalStatus::kSucceeded, &Policy::UpdateCanStart, &result,
Gilad Arnolddc4bb262014-07-23 10:45:19 -07001168 update_state);
Gilad Arnoldb3b05442014-05-30 14:25:05 -07001169 EXPECT_TRUE(result.update_can_start);
Gilad Arnoldb3b05442014-05-30 14:25:05 -07001170 EXPECT_EQ(1, result.download_url_idx);
Gilad Arnold14a9e702014-10-08 08:09:09 -07001171 EXPECT_TRUE(result.download_url_allowed);
Gilad Arnolddc4bb262014-07-23 10:45:19 -07001172 EXPECT_EQ(0, result.download_url_num_errors);
1173 EXPECT_FALSE(result.do_increment_failures);
Gilad Arnoldb3b05442014-05-30 14:25:05 -07001174}
1175
1176TEST_F(UmChromeOSPolicyTest, UpdateCanStartAllowedWithSecondUrlHardError) {
1177 // The UpdateCanStart policy returns true; the first URL fails with a hard
1178 // error, but a second URL is available.
1179
1180 SetUpdateCheckAllowed(false);
1181
1182 // Add a second URL; update with this URL attempted and failed in a way that
1183 // causes it to switch directly to the next URL.
1184 UpdateState update_state = GetDefaultUpdateState(TimeDelta::FromMinutes(10));
1185 update_state.num_checks = 10;
Gilad Arnolddc4bb262014-07-23 10:45:19 -07001186 update_state.download_urls.emplace_back("http://another/fake/url/");
1187 update_state.download_errors.emplace_back(
1188 0, ErrorCode::kPayloadHashMismatchError,
1189 fake_clock_.GetWallclockTime() - TimeDelta::FromSeconds(1));
Gilad Arnoldb3b05442014-05-30 14:25:05 -07001190
1191 // Check that the UpdateCanStart returns true.
Gilad Arnold42f253b2014-06-25 12:39:17 -07001192 UpdateDownloadParams result;
Gilad Arnoldb3b05442014-05-30 14:25:05 -07001193 ExpectPolicyStatus(EvalStatus::kSucceeded, &Policy::UpdateCanStart, &result,
Gilad Arnolddc4bb262014-07-23 10:45:19 -07001194 update_state);
Gilad Arnoldb3b05442014-05-30 14:25:05 -07001195 EXPECT_TRUE(result.update_can_start);
Gilad Arnoldb3b05442014-05-30 14:25:05 -07001196 EXPECT_EQ(1, result.download_url_idx);
Gilad Arnold14a9e702014-10-08 08:09:09 -07001197 EXPECT_TRUE(result.download_url_allowed);
Gilad Arnolddc4bb262014-07-23 10:45:19 -07001198 EXPECT_EQ(0, result.download_url_num_errors);
1199 EXPECT_FALSE(result.do_increment_failures);
Gilad Arnoldb3b05442014-05-30 14:25:05 -07001200}
1201
1202TEST_F(UmChromeOSPolicyTest, UpdateCanStartAllowedUrlWrapsAround) {
1203 // The UpdateCanStart policy returns true; URL search properly wraps around
1204 // the last one on the list.
1205
1206 SetUpdateCheckAllowed(false);
1207
1208 // Add a second URL; update with this URL attempted and failed in a way that
Gilad Arnolddc4bb262014-07-23 10:45:19 -07001209 // causes it to switch directly to the next URL. We must disable backoff in
1210 // order for it not to interfere.
Gilad Arnoldb3b05442014-05-30 14:25:05 -07001211 UpdateState update_state = GetDefaultUpdateState(TimeDelta::FromMinutes(10));
Gilad Arnolddc4bb262014-07-23 10:45:19 -07001212 update_state.num_checks = 1;
1213 update_state.is_backoff_disabled = true;
1214 update_state.download_urls.emplace_back("http://another/fake/url/");
1215 update_state.download_errors.emplace_back(
1216 1, ErrorCode::kPayloadHashMismatchError,
1217 fake_clock_.GetWallclockTime() - TimeDelta::FromSeconds(1));
Gilad Arnoldb3b05442014-05-30 14:25:05 -07001218
1219 // Check that the UpdateCanStart returns true.
Gilad Arnold42f253b2014-06-25 12:39:17 -07001220 UpdateDownloadParams result;
Gilad Arnoldb3b05442014-05-30 14:25:05 -07001221 ExpectPolicyStatus(EvalStatus::kSucceeded, &Policy::UpdateCanStart, &result,
Gilad Arnolddc4bb262014-07-23 10:45:19 -07001222 update_state);
Gilad Arnoldb3b05442014-05-30 14:25:05 -07001223 EXPECT_TRUE(result.update_can_start);
Gilad Arnoldb3b05442014-05-30 14:25:05 -07001224 EXPECT_EQ(0, result.download_url_idx);
Gilad Arnold14a9e702014-10-08 08:09:09 -07001225 EXPECT_TRUE(result.download_url_allowed);
Gilad Arnolddc4bb262014-07-23 10:45:19 -07001226 EXPECT_EQ(0, result.download_url_num_errors);
1227 EXPECT_TRUE(result.do_increment_failures);
Gilad Arnoldb3b05442014-05-30 14:25:05 -07001228}
1229
1230TEST_F(UmChromeOSPolicyTest, UpdateCanStartNotAllowedNoUsableUrls) {
1231 // The UpdateCanStart policy returns false; there's a single HTTP URL but its
1232 // use is forbidden by policy.
Gilad Arnolddc4bb262014-07-23 10:45:19 -07001233 //
1234 // Note: In the case where no usable URLs are found, the policy should not
1235 // increment the number of failed attempts! Doing so would result in a
1236 // non-idempotent semantics, and does not fall within the intended purpose of
1237 // the backoff mechanism anyway.
Gilad Arnoldb3b05442014-05-30 14:25:05 -07001238
1239 SetUpdateCheckAllowed(false);
1240
1241 // Override specific device policy attributes.
1242 fake_state_.device_policy_provider()->var_http_downloads_enabled()->reset(
1243 new bool(false));
1244
1245 // Check that the UpdateCanStart returns false.
1246 UpdateState update_state = GetDefaultUpdateState(TimeDelta::FromMinutes(10));
Gilad Arnold42f253b2014-06-25 12:39:17 -07001247 UpdateDownloadParams result;
Gilad Arnolddc4bb262014-07-23 10:45:19 -07001248 ExpectPolicyStatus(EvalStatus::kSucceeded, &Policy::UpdateCanStart, &result,
1249 update_state);
1250 EXPECT_FALSE(result.update_can_start);
1251 EXPECT_EQ(UpdateCannotStartReason::kCannotDownload,
1252 result.cannot_start_reason);
1253 EXPECT_FALSE(result.do_increment_failures);
Gilad Arnoldb3b05442014-05-30 14:25:05 -07001254}
1255
1256TEST_F(UmChromeOSPolicyTest, UpdateCanStartAllowedNoUsableUrlsButP2PEnabled) {
1257 // The UpdateCanStart policy returns true; there's a single HTTP URL but its
1258 // use is forbidden by policy, however P2P is enabled. The result indicates
1259 // that no URL can be used.
Gilad Arnolddc4bb262014-07-23 10:45:19 -07001260 //
1261 // Note: The number of failed attempts should not increase in this case (see
1262 // above test).
Gilad Arnoldb3b05442014-05-30 14:25:05 -07001263
1264 SetUpdateCheckAllowed(false);
1265
1266 // Override specific device policy attributes.
1267 fake_state_.device_policy_provider()->var_au_p2p_enabled()->reset(
1268 new bool(true));
1269 fake_state_.device_policy_provider()->var_http_downloads_enabled()->reset(
1270 new bool(false));
1271
1272 // Check that the UpdateCanStart returns true.
1273 UpdateState update_state = GetDefaultUpdateState(TimeDelta::FromMinutes(10));
Gilad Arnold42f253b2014-06-25 12:39:17 -07001274 UpdateDownloadParams result;
Gilad Arnoldb3b05442014-05-30 14:25:05 -07001275 ExpectPolicyStatus(EvalStatus::kSucceeded, &Policy::UpdateCanStart, &result,
Gilad Arnolddc4bb262014-07-23 10:45:19 -07001276 update_state);
Gilad Arnoldb3b05442014-05-30 14:25:05 -07001277 EXPECT_TRUE(result.update_can_start);
Gilad Arnoldb2f99192014-10-07 13:01:52 -07001278 EXPECT_TRUE(result.p2p_downloading_allowed);
1279 EXPECT_TRUE(result.p2p_sharing_allowed);
Gilad Arnoldb3b05442014-05-30 14:25:05 -07001280 EXPECT_GT(0, result.download_url_idx);
Gilad Arnold14a9e702014-10-08 08:09:09 -07001281 EXPECT_TRUE(result.download_url_allowed);
Gilad Arnolddc4bb262014-07-23 10:45:19 -07001282 EXPECT_EQ(0, result.download_url_num_errors);
1283 EXPECT_FALSE(result.do_increment_failures);
Gilad Arnoldf62a4b82014-05-01 07:41:07 -07001284}
1285
Gilad Arnoldef8d0872014-10-03 14:14:06 -07001286TEST_F(UmChromeOSPolicyTest,
1287 UpdateCanStartAllowedNoUsableUrlsButEnterpriseEnrolled) {
1288 // The UpdateCanStart policy returns true; there's a single HTTP URL but its
1289 // use is forbidden by policy, and P2P is unset on the policy, however the
1290 // device is enterprise-enrolled so P2P is allowed. The result indicates that
1291 // no URL can be used.
1292 //
1293 // Note: The number of failed attempts should not increase in this case (see
1294 // above test).
1295
1296 SetUpdateCheckAllowed(false);
1297
1298 // Override specific device policy attributes.
1299 fake_state_.device_policy_provider()->var_au_p2p_enabled()->reset(nullptr);
1300 fake_state_.device_policy_provider()->var_owner()->reset(nullptr);
1301 fake_state_.device_policy_provider()->var_http_downloads_enabled()->reset(
1302 new bool(false));
1303
1304 // Check that the UpdateCanStart returns true.
1305 UpdateState update_state = GetDefaultUpdateState(TimeDelta::FromMinutes(10));
1306 UpdateDownloadParams result;
1307 ExpectPolicyStatus(EvalStatus::kSucceeded, &Policy::UpdateCanStart, &result,
1308 update_state);
1309 EXPECT_TRUE(result.update_can_start);
Gilad Arnoldb2f99192014-10-07 13:01:52 -07001310 EXPECT_TRUE(result.p2p_downloading_allowed);
1311 EXPECT_TRUE(result.p2p_sharing_allowed);
Gilad Arnoldef8d0872014-10-03 14:14:06 -07001312 EXPECT_GT(0, result.download_url_idx);
Gilad Arnold14a9e702014-10-08 08:09:09 -07001313 EXPECT_TRUE(result.download_url_allowed);
Gilad Arnoldef8d0872014-10-03 14:14:06 -07001314 EXPECT_EQ(0, result.download_url_num_errors);
1315 EXPECT_FALSE(result.do_increment_failures);
1316}
1317
Gilad Arnold684219d2014-07-07 14:54:57 -07001318TEST_F(UmChromeOSPolicyTest, UpdateDownloadAllowedEthernetDefault) {
Gilad Arnold0adbc942014-05-12 10:35:43 -07001319 // Ethernet is always allowed.
1320
1321 fake_state_.shill_provider()->var_conn_type()->
1322 reset(new ConnectionType(ConnectionType::kEthernet));
1323
1324 bool result;
1325 ExpectPolicyStatus(EvalStatus::kSucceeded,
Gilad Arnold684219d2014-07-07 14:54:57 -07001326 &Policy::UpdateDownloadAllowed, &result);
Gilad Arnold0adbc942014-05-12 10:35:43 -07001327 EXPECT_TRUE(result);
1328}
1329
Gilad Arnold684219d2014-07-07 14:54:57 -07001330TEST_F(UmChromeOSPolicyTest, UpdateDownloadAllowedWifiDefault) {
Gilad Arnold0adbc942014-05-12 10:35:43 -07001331 // Wifi is allowed if not tethered.
1332
1333 fake_state_.shill_provider()->var_conn_type()->
1334 reset(new ConnectionType(ConnectionType::kWifi));
1335
1336 bool result;
1337 ExpectPolicyStatus(EvalStatus::kSucceeded,
Gilad Arnold684219d2014-07-07 14:54:57 -07001338 &Policy::UpdateDownloadAllowed, &result);
Gilad Arnold0adbc942014-05-12 10:35:43 -07001339 EXPECT_TRUE(result);
1340}
1341
Alex Deymo63784a52014-05-28 10:46:14 -07001342TEST_F(UmChromeOSPolicyTest,
Gilad Arnold0adbc942014-05-12 10:35:43 -07001343 UpdateCurrentConnectionNotAllowedWifiTetheredDefault) {
1344 // Tethered wifi is not allowed by default.
1345
1346 fake_state_.shill_provider()->var_conn_type()->
1347 reset(new ConnectionType(ConnectionType::kWifi));
1348 fake_state_.shill_provider()->var_conn_tethering()->
1349 reset(new ConnectionTethering(ConnectionTethering::kConfirmed));
1350
1351 bool result;
Gilad Arnold28d6be62014-06-30 14:04:04 -07001352 ExpectPolicyStatus(EvalStatus::kAskMeAgainLater,
Gilad Arnold684219d2014-07-07 14:54:57 -07001353 &Policy::UpdateDownloadAllowed, &result);
Gilad Arnold0adbc942014-05-12 10:35:43 -07001354}
1355
Alex Deymo63784a52014-05-28 10:46:14 -07001356TEST_F(UmChromeOSPolicyTest,
Gilad Arnold684219d2014-07-07 14:54:57 -07001357 UpdateDownloadAllowedWifiTetheredPolicyOverride) {
Gilad Arnold0adbc942014-05-12 10:35:43 -07001358 // Tethered wifi can be allowed by policy.
1359
1360 fake_state_.shill_provider()->var_conn_type()->
1361 reset(new ConnectionType(ConnectionType::kWifi));
1362 fake_state_.shill_provider()->var_conn_tethering()->
1363 reset(new ConnectionTethering(ConnectionTethering::kConfirmed));
1364 set<ConnectionType> allowed_connections;
1365 allowed_connections.insert(ConnectionType::kCellular);
1366 fake_state_.device_policy_provider()->
1367 var_allowed_connection_types_for_update()->
1368 reset(new set<ConnectionType>(allowed_connections));
1369
1370 bool result;
1371 ExpectPolicyStatus(EvalStatus::kSucceeded,
Gilad Arnold684219d2014-07-07 14:54:57 -07001372 &Policy::UpdateDownloadAllowed, &result);
Gilad Arnold0adbc942014-05-12 10:35:43 -07001373 EXPECT_TRUE(result);
1374}
1375
Gilad Arnold684219d2014-07-07 14:54:57 -07001376TEST_F(UmChromeOSPolicyTest, UpdateDownloadAllowedWimaxDefault) {
Gilad Arnold0adbc942014-05-12 10:35:43 -07001377 // Wimax is always allowed.
1378
1379 fake_state_.shill_provider()->var_conn_type()->
1380 reset(new ConnectionType(ConnectionType::kWifi));
1381
1382 bool result;
1383 ExpectPolicyStatus(EvalStatus::kSucceeded,
Gilad Arnold684219d2014-07-07 14:54:57 -07001384 &Policy::UpdateDownloadAllowed, &result);
Gilad Arnold0adbc942014-05-12 10:35:43 -07001385 EXPECT_TRUE(result);
1386}
1387
Alex Deymo63784a52014-05-28 10:46:14 -07001388TEST_F(UmChromeOSPolicyTest,
Gilad Arnold0adbc942014-05-12 10:35:43 -07001389 UpdateCurrentConnectionNotAllowedBluetoothDefault) {
1390 // Bluetooth is never allowed.
1391
1392 fake_state_.shill_provider()->var_conn_type()->
1393 reset(new ConnectionType(ConnectionType::kBluetooth));
1394
1395 bool result;
Gilad Arnold28d6be62014-06-30 14:04:04 -07001396 ExpectPolicyStatus(EvalStatus::kAskMeAgainLater,
Gilad Arnold684219d2014-07-07 14:54:57 -07001397 &Policy::UpdateDownloadAllowed, &result);
Gilad Arnold0adbc942014-05-12 10:35:43 -07001398}
1399
Alex Deymo63784a52014-05-28 10:46:14 -07001400TEST_F(UmChromeOSPolicyTest,
Gilad Arnold0adbc942014-05-12 10:35:43 -07001401 UpdateCurrentConnectionNotAllowedBluetoothPolicyCannotOverride) {
1402 // Bluetooth cannot be allowed even by policy.
1403
1404 fake_state_.shill_provider()->var_conn_type()->
1405 reset(new ConnectionType(ConnectionType::kBluetooth));
1406 set<ConnectionType> allowed_connections;
1407 allowed_connections.insert(ConnectionType::kBluetooth);
1408 fake_state_.device_policy_provider()->
1409 var_allowed_connection_types_for_update()->
1410 reset(new set<ConnectionType>(allowed_connections));
1411
1412 bool result;
Gilad Arnold28d6be62014-06-30 14:04:04 -07001413 ExpectPolicyStatus(EvalStatus::kAskMeAgainLater,
Gilad Arnold684219d2014-07-07 14:54:57 -07001414 &Policy::UpdateDownloadAllowed, &result);
Gilad Arnold0adbc942014-05-12 10:35:43 -07001415}
1416
Alex Deymo63784a52014-05-28 10:46:14 -07001417TEST_F(UmChromeOSPolicyTest, UpdateCurrentConnectionNotAllowedCellularDefault) {
Gilad Arnold0adbc942014-05-12 10:35:43 -07001418 // Cellular is not allowed by default.
1419
1420 fake_state_.shill_provider()->var_conn_type()->
1421 reset(new ConnectionType(ConnectionType::kCellular));
1422
1423 bool result;
Gilad Arnold28d6be62014-06-30 14:04:04 -07001424 ExpectPolicyStatus(EvalStatus::kAskMeAgainLater,
Gilad Arnold684219d2014-07-07 14:54:57 -07001425 &Policy::UpdateDownloadAllowed, &result);
Gilad Arnold0adbc942014-05-12 10:35:43 -07001426}
1427
Alex Deymo63784a52014-05-28 10:46:14 -07001428TEST_F(UmChromeOSPolicyTest,
Gilad Arnold684219d2014-07-07 14:54:57 -07001429 UpdateDownloadAllowedCellularPolicyOverride) {
Gilad Arnold0adbc942014-05-12 10:35:43 -07001430 // Update over cellular can be enabled by policy.
1431
1432 fake_state_.shill_provider()->var_conn_type()->
1433 reset(new ConnectionType(ConnectionType::kCellular));
1434 set<ConnectionType> allowed_connections;
1435 allowed_connections.insert(ConnectionType::kCellular);
1436 fake_state_.device_policy_provider()->
1437 var_allowed_connection_types_for_update()->
1438 reset(new set<ConnectionType>(allowed_connections));
1439
1440 bool result;
1441 ExpectPolicyStatus(EvalStatus::kSucceeded,
Gilad Arnold684219d2014-07-07 14:54:57 -07001442 &Policy::UpdateDownloadAllowed, &result);
Gilad Arnold0adbc942014-05-12 10:35:43 -07001443 EXPECT_TRUE(result);
1444}
1445
Alex Deymo63784a52014-05-28 10:46:14 -07001446TEST_F(UmChromeOSPolicyTest,
Gilad Arnold684219d2014-07-07 14:54:57 -07001447 UpdateDownloadAllowedCellularUserOverride) {
Gilad Arnold0adbc942014-05-12 10:35:43 -07001448 // Update over cellular can be enabled by user settings, but only if policy
1449 // is present and does not determine allowed connections.
1450
1451 fake_state_.shill_provider()->var_conn_type()->
1452 reset(new ConnectionType(ConnectionType::kCellular));
1453 set<ConnectionType> allowed_connections;
1454 allowed_connections.insert(ConnectionType::kCellular);
1455 fake_state_.updater_provider()->var_cellular_enabled()->
1456 reset(new bool(true));
1457
1458 bool result;
1459 ExpectPolicyStatus(EvalStatus::kSucceeded,
Gilad Arnold684219d2014-07-07 14:54:57 -07001460 &Policy::UpdateDownloadAllowed, &result);
Gilad Arnold0adbc942014-05-12 10:35:43 -07001461 EXPECT_TRUE(result);
1462}
1463
Gilad Arnold14a9e702014-10-08 08:09:09 -07001464TEST_F(UmChromeOSPolicyTest,
1465 UpdateCanStartAllowedScatteringSupressedDueToP2P) {
1466 // The UpdateCanStart policy returns true; scattering should have applied, but
1467 // P2P download is allowed. Scattering values are nonetheless returned, and so
1468 // are download URL values, albeit the latter are not allowed to be used.
1469
1470 SetUpdateCheckAllowed(false);
1471 fake_state_.device_policy_provider()->var_scatter_factor()->reset(
1472 new TimeDelta(TimeDelta::FromMinutes(2)));
1473 fake_state_.updater_provider()->var_p2p_enabled()->reset(new bool(true));
1474
1475 UpdateState update_state = GetDefaultUpdateState(TimeDelta::FromSeconds(1));
1476 update_state.scatter_wait_period = TimeDelta::FromSeconds(35);
1477
1478 UpdateDownloadParams result;
1479 ExpectPolicyStatus(EvalStatus::kSucceeded, &Policy::UpdateCanStart,
1480 &result, update_state);
1481 EXPECT_TRUE(result.update_can_start);
1482 EXPECT_EQ(0, result.download_url_idx);
1483 EXPECT_FALSE(result.download_url_allowed);
1484 EXPECT_EQ(0, result.download_url_num_errors);
1485 EXPECT_TRUE(result.p2p_downloading_allowed);
1486 EXPECT_TRUE(result.p2p_sharing_allowed);
1487 EXPECT_FALSE(result.do_increment_failures);
1488 EXPECT_EQ(TimeDelta::FromSeconds(35), result.scatter_wait_period);
1489 EXPECT_EQ(0, result.scatter_check_threshold);
1490}
1491
1492TEST_F(UmChromeOSPolicyTest,
1493 UpdateCanStartAllowedBackoffSupressedDueToP2P) {
1494 // The UpdateCanStart policy returns true; backoff should have applied, but
1495 // P2P download is allowed. Backoff values are nonetheless returned, and so
1496 // are download URL values, albeit the latter are not allowed to be used.
1497
1498 SetUpdateCheckAllowed(false);
1499
1500 const Time curr_time = fake_clock_.GetWallclockTime();
1501 UpdateState update_state = GetDefaultUpdateState(TimeDelta::FromSeconds(10));
1502 update_state.download_errors_max = 1;
1503 update_state.download_errors.emplace_back(
1504 0, ErrorCode::kDownloadTransferError,
1505 curr_time - TimeDelta::FromSeconds(8));
1506 update_state.download_errors.emplace_back(
1507 0, ErrorCode::kDownloadTransferError,
1508 curr_time - TimeDelta::FromSeconds(2));
1509 fake_state_.updater_provider()->var_p2p_enabled()->reset(new bool(true));
1510
1511 UpdateDownloadParams result;
1512 ExpectPolicyStatus(EvalStatus::kSucceeded, &Policy::UpdateCanStart, &result,
1513 update_state);
1514 EXPECT_TRUE(result.update_can_start);
1515 EXPECT_EQ(0, result.download_url_idx);
1516 EXPECT_FALSE(result.download_url_allowed);
1517 EXPECT_EQ(0, result.download_url_num_errors);
1518 EXPECT_TRUE(result.p2p_downloading_allowed);
1519 EXPECT_TRUE(result.p2p_sharing_allowed);
1520 EXPECT_TRUE(result.do_increment_failures);
1521 EXPECT_LT(curr_time, result.backoff_expiry);
1522}
1523
Gilad Arnold78ecbfc2014-10-22 14:38:25 -07001524TEST_F(UmChromeOSPolicyTest, P2PEnabledNotAllowed) {
1525 bool result;
1526 ExpectPolicyStatus(EvalStatus::kSucceeded, &Policy::P2PEnabled, &result);
1527 EXPECT_FALSE(result);
1528}
1529
1530TEST_F(UmChromeOSPolicyTest, P2PEnabledAllowedByDevicePolicy) {
1531 fake_state_.device_policy_provider()->var_au_p2p_enabled()->reset(
1532 new bool(true));
1533
1534 bool result;
1535 ExpectPolicyStatus(EvalStatus::kSucceeded, &Policy::P2PEnabled, &result);
1536 EXPECT_TRUE(result);
1537}
1538
1539TEST_F(UmChromeOSPolicyTest, P2PEnabledAllowedByUpdater) {
1540 fake_state_.updater_provider()->var_p2p_enabled()->reset(new bool(true));
1541
1542 bool result;
1543 ExpectPolicyStatus(EvalStatus::kSucceeded, &Policy::P2PEnabled, &result);
1544 EXPECT_TRUE(result);
1545}
1546
1547TEST_F(UmChromeOSPolicyTest, P2PEnabledAllowedDeviceEnterpriseEnrolled) {
1548 fake_state_.device_policy_provider()->var_au_p2p_enabled()->reset(nullptr);
1549 fake_state_.device_policy_provider()->var_owner()->reset(nullptr);
1550
1551 bool result;
1552 ExpectPolicyStatus(EvalStatus::kSucceeded, &Policy::P2PEnabled, &result);
1553 EXPECT_TRUE(result);
1554}
1555
1556TEST_F(UmChromeOSPolicyTest, P2PEnabledChangedBlocks) {
1557 bool result;
1558 ExpectPolicyStatus(EvalStatus::kAskMeAgainLater, &Policy::P2PEnabledChanged,
1559 &result, false);
1560}
1561
Alex Deymo63784a52014-05-28 10:46:14 -07001562} // namespace chromeos_update_manager