blob: b5b1bd9b5b94659a7f4fe78e21cdd5263ecf6adc [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"
Adolfo Victoria94ffe132018-06-28 16:14:56 -070024#include "update_engine/update_manager/weekly_time.h"
Alex Deymo0d11c602014-04-23 20:12:20 -070025
26using base::Time;
27using base::TimeDelta;
Sen Jiang255e22b2016-05-20 16:15:29 -070028using chromeos_update_engine::ConnectionTethering;
29using chromeos_update_engine::ConnectionType;
Gilad Arnoldb3b05442014-05-30 14:25:05 -070030using chromeos_update_engine::ErrorCode;
Adolfo Victoria0dbf1f92018-07-19 14:18:11 -070031using chromeos_update_engine::InstallPlan;
Gilad Arnold0adbc942014-05-12 10:35:43 -070032using std::set;
Alex Deymo0d11c602014-04-23 20:12:20 -070033using std::string;
34
Alex Deymo63784a52014-05-28 10:46:14 -070035namespace chromeos_update_manager {
Alex Deymo0d11c602014-04-23 20:12:20 -070036
Amin Hassani186ff6a2018-02-27 11:06:03 -080037class UmChromeOSPolicyTest : public UmPolicyTestBase {
Alex Deymo0d11c602014-04-23 20:12:20 -070038 protected:
Amin Hassani186ff6a2018-02-27 11:06:03 -080039 UmChromeOSPolicyTest() : UmPolicyTestBase() {
40 policy_ = std::make_unique<ChromeOSPolicy>();
41 }
42
Alex Deymo610277e2014-11-11 21:18:11 -080043 void SetUp() override {
Amin Hassani186ff6a2018-02-27 11:06:03 -080044 UmPolicyTestBase::SetUp();
Gilad Arnoldf62a4b82014-05-01 07:41:07 -070045 SetUpDefaultDevicePolicy();
Alex Deymo0d11c602014-04-23 20:12:20 -070046 }
47
Amin Hassani186ff6a2018-02-27 11:06:03 -080048 void SetUpDefaultState() override {
49 UmPolicyTestBase::SetUpDefaultState();
Gilad Arnoldf62a4b82014-05-01 07:41:07 -070050
Gilad Arnolda1eabcd2014-07-09 15:42:40 -070051 // OOBE is enabled by default.
52 fake_state_.config_provider()->var_is_oobe_enabled()->reset(
53 new bool(true));
54
Gilad Arnold76a11f62014-05-20 09:02:12 -070055 // For the purpose of the tests, this is an official build and OOBE was
56 // completed.
Gilad Arnoldf62a4b82014-05-01 07:41:07 -070057 fake_state_.system_provider()->var_is_official_build()->reset(
58 new bool(true));
Gilad Arnold76a11f62014-05-20 09:02:12 -070059 fake_state_.system_provider()->var_is_oobe_complete()->reset(
60 new bool(true));
Aaron Woodc73fdc12017-12-06 11:09:15 -080061 // NOLINTNEXTLINE(readability/casting)
Alex Deymo763e7db2015-08-27 21:08:08 -070062 fake_state_.system_provider()->var_num_slots()->reset(new unsigned int(2));
Gilad Arnold0adbc942014-05-12 10:35:43 -070063
64 // Connection is wifi, untethered.
65 fake_state_.shill_provider()->var_conn_type()->
66 reset(new ConnectionType(ConnectionType::kWifi));
67 fake_state_.shill_provider()->var_conn_tethering()->
68 reset(new ConnectionTethering(ConnectionTethering::kNotDetected));
Gilad Arnoldf62a4b82014-05-01 07:41:07 -070069 }
70
Gilad Arnoldb3b05442014-05-30 14:25:05 -070071 // Sets up a default device policy that does not impose any restrictions
72 // (HTTP) nor enables any features (P2P).
Gilad Arnoldf62a4b82014-05-01 07:41:07 -070073 void SetUpDefaultDevicePolicy() {
74 fake_state_.device_policy_provider()->var_device_policy_is_loaded()->reset(
75 new bool(true));
76 fake_state_.device_policy_provider()->var_update_disabled()->reset(
77 new bool(false));
78 fake_state_.device_policy_provider()->
79 var_allowed_connection_types_for_update()->reset(nullptr);
80 fake_state_.device_policy_provider()->var_scatter_factor()->reset(
81 new TimeDelta());
82 fake_state_.device_policy_provider()->var_http_downloads_enabled()->reset(
Gilad Arnoldb3b05442014-05-30 14:25:05 -070083 new bool(true));
Gilad Arnoldf62a4b82014-05-01 07:41:07 -070084 fake_state_.device_policy_provider()->var_au_p2p_enabled()->reset(
85 new bool(false));
86 fake_state_.device_policy_provider()->var_release_channel_delegated()->
87 reset(new bool(true));
Adolfo Victoria94ffe132018-06-28 16:14:56 -070088 fake_state_.device_policy_provider()
89 ->var_disallowed_time_intervals()
90 ->reset(new WeeklyTimeIntervalVector());
Gilad Arnoldf62a4b82014-05-01 07:41:07 -070091 }
92
Amin Hassani186ff6a2018-02-27 11:06:03 -080093 // Configures the policy to return a desired value from UpdateCheckAllowed by
Gilad Arnoldf62a4b82014-05-01 07:41:07 -070094 // faking the current wall clock time as needed. Restores the default state.
95 // This is used when testing policies that depend on this one.
Amin Hassani186ff6a2018-02-27 11:06:03 -080096 //
97 // Note that the default implementation relies on NextUpdateCheckPolicyImpl to
98 // set the FakeClock to the appropriate time.
99 virtual void SetUpdateCheckAllowed(bool allow_check) {
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700100 Time next_update_check;
Amin Hassani186ff6a2018-02-27 11:06:03 -0800101 CallMethodWithContext(&NextUpdateCheckTimePolicyImpl::NextUpdateCheckTime,
102 &next_update_check,
103 ChromeOSPolicy::kNextUpdateCheckPolicyConstants);
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700104 SetUpDefaultState();
105 SetUpDefaultDevicePolicy();
106 Time curr_time = next_update_check;
107 if (allow_check)
108 curr_time += TimeDelta::FromSeconds(1);
109 else
110 curr_time -= TimeDelta::FromSeconds(1);
111 fake_clock_.SetWallclockTime(curr_time);
112 }
Marton Hunyady8b936f22018-06-15 16:44:37 +0200113
114 // Sets the policies required for a kiosk app to control Chrome OS version:
115 // - AllowKioskAppControlChromeVersion = True
116 // - UpdateDisabled = True
117 // In the kiosk app manifest:
118 // - RequiredPlatformVersion = 1234.
119 void SetKioskAppControlsChromeOsVersion() {
120 fake_state_.device_policy_provider()
121 ->var_allow_kiosk_app_control_chrome_version()
122 ->reset(new bool(true));
123 fake_state_.device_policy_provider()->var_update_disabled()->reset(
124 new bool(true));
125 fake_state_.system_provider()->var_kiosk_required_platform_version()->reset(
126 new string("1234."));
127 }
128
129 // Sets up a test with the value of RollbackToTargetVersion policy (and
130 // whether it's set), and returns the value of
131 // UpdateCheckParams.rollback_allowed.
132 bool TestRollbackAllowed(bool set_policy,
133 RollbackToTargetVersion rollback_to_target_version) {
134 // Update check is allowed, response includes attributes for use in the
135 // request.
136 SetUpdateCheckAllowed(true);
137
138 if (set_policy) {
139 // Override RollbackToTargetVersion device policy attribute.
140 fake_state_.device_policy_provider()
141 ->var_rollback_to_target_version()
142 ->reset(new RollbackToTargetVersion(rollback_to_target_version));
143 }
144
145 UpdateCheckParams result;
146 ExpectPolicyStatus(
147 EvalStatus::kSucceeded, &Policy::UpdateCheckAllowed, &result);
148 return result.rollback_allowed;
149 }
Adolfo Victoria94ffe132018-06-28 16:14:56 -0700150
151 // Sets up a test with the given intervals and the current fake wallclock
152 // time.
153 void TestDisallowedTimeIntervals(const WeeklyTimeIntervalVector& intervals,
154 const EvalStatus& expected_status,
Adolfo Victoria0dbf1f92018-07-19 14:18:11 -0700155 bool kiosk) {
Adolfo Victoria94ffe132018-06-28 16:14:56 -0700156 SetUpDefaultTimeProvider();
Adolfo Victoria0dbf1f92018-07-19 14:18:11 -0700157 if (kiosk)
158 fake_state_.device_policy_provider()
159 ->var_auto_launched_kiosk_app_id()
160 ->reset(new string("myapp"));
Adolfo Victoria94ffe132018-06-28 16:14:56 -0700161 fake_state_.device_policy_provider()
162 ->var_disallowed_time_intervals()
163 ->reset(new WeeklyTimeIntervalVector(intervals));
164
165 // Check that |expected_status| matches the value of UpdateCheckAllowed
Adolfo Victoria0dbf1f92018-07-19 14:18:11 -0700166 ErrorCode result;
167 InstallPlan install_plan;
168 ExpectPolicyStatus(
169 expected_status, &Policy::UpdateCanBeApplied, &result, &install_plan);
170 if (expected_status == EvalStatus::kAskMeAgainLater)
171 EXPECT_EQ(result, ErrorCode::kOmahaUpdateDeferredPerPolicy);
172 else
173 EXPECT_EQ(result, ErrorCode::kSuccess);
Adolfo Victoria94ffe132018-06-28 16:14:56 -0700174 }
Alex Deymo0d11c602014-04-23 20:12:20 -0700175};
176
Alex Deymo63784a52014-05-28 10:46:14 -0700177TEST_F(UmChromeOSPolicyTest, UpdateCheckAllowedWaitsForTheTimeout) {
Alex Deymo0d11c602014-04-23 20:12:20 -0700178 // We get the next update_check timestamp from the policy's private method
179 // and then we check the public method respects that value on the normal
180 // case.
181 Time next_update_check;
182 Time last_checked_time =
183 fake_clock_.GetWallclockTime() + TimeDelta::FromMinutes(1234);
184
Alex Deymo0d11c602014-04-23 20:12:20 -0700185 fake_state_.updater_provider()->var_last_checked_time()->reset(
186 new Time(last_checked_time));
Amin Hassani186ff6a2018-02-27 11:06:03 -0800187 CallMethodWithContext(&NextUpdateCheckTimePolicyImpl::NextUpdateCheckTime,
188 &next_update_check,
189 ChromeOSPolicy::kNextUpdateCheckPolicyConstants);
Alex Deymo0d11c602014-04-23 20:12:20 -0700190
191 UpdateCheckParams result;
192
193 // Check that the policy blocks until the next_update_check is reached.
194 SetUpDefaultClock();
195 SetUpDefaultState();
196 fake_state_.updater_provider()->var_last_checked_time()->reset(
197 new Time(last_checked_time));
198 fake_clock_.SetWallclockTime(next_update_check - TimeDelta::FromSeconds(1));
199 ExpectPolicyStatus(EvalStatus::kAskMeAgainLater,
200 &Policy::UpdateCheckAllowed, &result);
201
202 SetUpDefaultClock();
203 SetUpDefaultState();
204 fake_state_.updater_provider()->var_last_checked_time()->reset(
205 new Time(last_checked_time));
206 fake_clock_.SetWallclockTime(next_update_check + TimeDelta::FromSeconds(1));
207 ExpectPolicyStatus(EvalStatus::kSucceeded,
208 &Policy::UpdateCheckAllowed, &result);
Gilad Arnolda1eabcd2014-07-09 15:42:40 -0700209 EXPECT_TRUE(result.updates_enabled);
Amin Hassanied37d682018-04-06 13:22:00 -0700210 EXPECT_FALSE(result.interactive);
Gilad Arnolda1eabcd2014-07-09 15:42:40 -0700211}
212
213TEST_F(UmChromeOSPolicyTest, UpdateCheckAllowedWaitsForOOBE) {
Alex Vakulenko072359c2014-07-18 11:41:07 -0700214 // Update checks are deferred until OOBE is completed.
Gilad Arnolda1eabcd2014-07-09 15:42:40 -0700215
216 // Ensure that update is not allowed even if wait period is satisfied.
217 Time next_update_check;
218 Time last_checked_time =
219 fake_clock_.GetWallclockTime() + TimeDelta::FromMinutes(1234);
220
221 fake_state_.updater_provider()->var_last_checked_time()->reset(
222 new Time(last_checked_time));
Amin Hassani186ff6a2018-02-27 11:06:03 -0800223 CallMethodWithContext(&NextUpdateCheckTimePolicyImpl::NextUpdateCheckTime,
224 &next_update_check,
225 ChromeOSPolicy::kNextUpdateCheckPolicyConstants);
Gilad Arnolda1eabcd2014-07-09 15:42:40 -0700226
227 SetUpDefaultClock();
228 SetUpDefaultState();
229 fake_state_.updater_provider()->var_last_checked_time()->reset(
230 new Time(last_checked_time));
231 fake_clock_.SetWallclockTime(next_update_check + TimeDelta::FromSeconds(1));
232 fake_state_.system_provider()->var_is_oobe_complete()->reset(
233 new bool(false));
234
235 UpdateCheckParams result;
236 ExpectPolicyStatus(EvalStatus::kAskMeAgainLater,
237 &Policy::UpdateCheckAllowed, &result);
238
239 // Now check that it is allowed if OOBE is completed.
240 SetUpDefaultClock();
241 SetUpDefaultState();
242 fake_state_.updater_provider()->var_last_checked_time()->reset(
243 new Time(last_checked_time));
244 fake_clock_.SetWallclockTime(next_update_check + TimeDelta::FromSeconds(1));
245 ExpectPolicyStatus(EvalStatus::kSucceeded,
246 &Policy::UpdateCheckAllowed, &result);
247 EXPECT_TRUE(result.updates_enabled);
Amin Hassanied37d682018-04-06 13:22:00 -0700248 EXPECT_FALSE(result.interactive);
Alex Deymo0d11c602014-04-23 20:12:20 -0700249}
250
Gilad Arnold42f253b2014-06-25 12:39:17 -0700251TEST_F(UmChromeOSPolicyTest, UpdateCheckAllowedWithAttributes) {
Alex Vakulenko072359c2014-07-18 11:41:07 -0700252 // Update check is allowed, response includes attributes for use in the
Gilad Arnold42f253b2014-06-25 12:39:17 -0700253 // request.
254 SetUpdateCheckAllowed(true);
255
256 // Override specific device policy attributes.
Gilad Arnoldd4b30322014-07-21 15:35:27 -0700257 fake_state_.device_policy_provider()->var_target_version_prefix()->
258 reset(new string("1.2"));
Marton Hunyady0e0e3542018-02-21 18:51:39 +0100259 fake_state_.device_policy_provider()
260 ->var_rollback_allowed_milestones()
261 ->reset(new int(5));
262 fake_state_.device_policy_provider()->var_release_channel_delegated()->reset(
263 new bool(false));
Gilad Arnold42f253b2014-06-25 12:39:17 -0700264 fake_state_.device_policy_provider()->var_release_channel()->
265 reset(new string("foo-channel"));
266
267 UpdateCheckParams result;
268 ExpectPolicyStatus(EvalStatus::kSucceeded,
269 &Policy::UpdateCheckAllowed, &result);
270 EXPECT_TRUE(result.updates_enabled);
Gilad Arnoldd4b30322014-07-21 15:35:27 -0700271 EXPECT_EQ("1.2", result.target_version_prefix);
Marton Hunyady0e0e3542018-02-21 18:51:39 +0100272 EXPECT_EQ(5, result.rollback_allowed_milestones);
Gilad Arnold42f253b2014-06-25 12:39:17 -0700273 EXPECT_EQ("foo-channel", result.target_channel);
Amin Hassanied37d682018-04-06 13:22:00 -0700274 EXPECT_FALSE(result.interactive);
Gilad Arnold42f253b2014-06-25 12:39:17 -0700275}
276
Marton Hunyadyba51c3f2018-04-25 15:18:10 +0200277TEST_F(UmChromeOSPolicyTest, UpdateCheckAllowedRollbackAllowed) {
Marton Hunyady8b936f22018-06-15 16:44:37 +0200278 EXPECT_TRUE(TestRollbackAllowed(
279 true, RollbackToTargetVersion::kRollbackWithFullPowerwash));
Marton Hunyadyba51c3f2018-04-25 15:18:10 +0200280}
281
282TEST_F(UmChromeOSPolicyTest, UpdateCheckAllowedRollbackDisabled) {
Marton Hunyady8b936f22018-06-15 16:44:37 +0200283 EXPECT_FALSE(TestRollbackAllowed(true, RollbackToTargetVersion::kDisabled));
Marton Hunyadyba51c3f2018-04-25 15:18:10 +0200284}
285
286TEST_F(UmChromeOSPolicyTest, UpdateCheckAllowedRollbackUnspecified) {
Marton Hunyady8b936f22018-06-15 16:44:37 +0200287 EXPECT_FALSE(
288 TestRollbackAllowed(true, RollbackToTargetVersion::kUnspecified));
Marton Hunyadyba51c3f2018-04-25 15:18:10 +0200289}
290
291TEST_F(UmChromeOSPolicyTest, UpdateCheckAllowedRollbackNotSet) {
Marton Hunyady8b936f22018-06-15 16:44:37 +0200292 EXPECT_FALSE(
293 TestRollbackAllowed(false, RollbackToTargetVersion::kUnspecified));
294}
Marton Hunyadyba51c3f2018-04-25 15:18:10 +0200295
Marton Hunyady8b936f22018-06-15 16:44:37 +0200296TEST_F(UmChromeOSPolicyTest, UpdateCheckAllowedKioskRollbackAllowed) {
297 SetKioskAppControlsChromeOsVersion();
Marton Hunyadyba51c3f2018-04-25 15:18:10 +0200298
Marton Hunyady8b936f22018-06-15 16:44:37 +0200299 EXPECT_TRUE(TestRollbackAllowed(
300 true, RollbackToTargetVersion::kRollbackWithFullPowerwash));
301}
302
303TEST_F(UmChromeOSPolicyTest, UpdateCheckAllowedKioskRollbackDisabled) {
304 SetKioskAppControlsChromeOsVersion();
305
306 EXPECT_FALSE(TestRollbackAllowed(true, RollbackToTargetVersion::kDisabled));
307}
308
309TEST_F(UmChromeOSPolicyTest, UpdateCheckAllowedKioskRollbackUnspecified) {
310 SetKioskAppControlsChromeOsVersion();
311
312 EXPECT_FALSE(
313 TestRollbackAllowed(true, RollbackToTargetVersion::kUnspecified));
314}
315
316TEST_F(UmChromeOSPolicyTest, UpdateCheckAllowedKioskRollbackNotSet) {
317 SetKioskAppControlsChromeOsVersion();
318
319 EXPECT_FALSE(
320 TestRollbackAllowed(false, RollbackToTargetVersion::kUnspecified));
Marton Hunyadyba51c3f2018-04-25 15:18:10 +0200321}
322
Gilad Arnoldfe12a0f2014-07-09 14:26:57 -0700323TEST_F(UmChromeOSPolicyTest,
324 UpdateCheckAllowedUpdatesDisabledForUnofficialBuilds) {
Gilad Arnold44dc3bf2014-07-18 23:39:38 -0700325 // UpdateCheckAllowed should return kAskMeAgainLater if this is an unofficial
326 // build; we don't want periodic update checks on developer images.
Gilad Arnoldfe12a0f2014-07-09 14:26:57 -0700327
328 fake_state_.system_provider()->var_is_official_build()->reset(
329 new bool(false));
330
331 UpdateCheckParams result;
Gilad Arnold44dc3bf2014-07-18 23:39:38 -0700332 ExpectPolicyStatus(EvalStatus::kAskMeAgainLater,
Gilad Arnoldfe12a0f2014-07-09 14:26:57 -0700333 &Policy::UpdateCheckAllowed, &result);
Gilad Arnoldfe12a0f2014-07-09 14:26:57 -0700334}
335
Gilad Arnoldbfc44f72014-07-09 14:41:39 -0700336TEST_F(UmChromeOSPolicyTest,
Aaron Wood56d8ab32017-09-22 15:56:18 -0700337 UpdateCheckAllowedUpdatesDisabledWhenNotEnoughSlotsAbUpdates) {
Gilad Arnoldbfc44f72014-07-09 14:41:39 -0700338 // UpdateCheckAllowed should return false (kSucceeded) if the image booted
Aaron Wood56d8ab32017-09-22 15:56:18 -0700339 // without enough slots to do A/B updates.
Gilad Arnoldbfc44f72014-07-09 14:41:39 -0700340
Aaron Woodc73fdc12017-12-06 11:09:15 -0800341 // NOLINTNEXTLINE(readability/casting)
Alex Deymo763e7db2015-08-27 21:08:08 -0700342 fake_state_.system_provider()->var_num_slots()->reset(new unsigned int(1));
Gilad Arnoldbfc44f72014-07-09 14:41:39 -0700343
344 UpdateCheckParams result;
345 ExpectPolicyStatus(EvalStatus::kSucceeded,
346 &Policy::UpdateCheckAllowed, &result);
347 EXPECT_FALSE(result.updates_enabled);
348}
349
Gilad Arnoldfe12a0f2014-07-09 14:26:57 -0700350TEST_F(UmChromeOSPolicyTest, UpdateCheckAllowedUpdatesDisabledByPolicy) {
Gilad Arnold42f253b2014-06-25 12:39:17 -0700351 // UpdateCheckAllowed should return kAskMeAgainLater because a device policy
352 // is loaded and prohibits updates.
353
354 SetUpdateCheckAllowed(false);
355 fake_state_.device_policy_provider()->var_update_disabled()->reset(
356 new bool(true));
357
Gilad Arnold42f253b2014-06-25 12:39:17 -0700358 UpdateCheckParams result;
359 ExpectPolicyStatus(EvalStatus::kAskMeAgainLater,
360 &Policy::UpdateCheckAllowed, &result);
361}
362
Gilad Arnoldec7f9162014-07-15 13:24:46 -0700363TEST_F(UmChromeOSPolicyTest,
364 UpdateCheckAllowedForcedUpdateRequestedInteractive) {
365 // UpdateCheckAllowed should return true because a forced update request was
366 // signaled for an interactive update.
Gilad Arnold44dc3bf2014-07-18 23:39:38 -0700367
368 SetUpdateCheckAllowed(true);
Gilad Arnoldec7f9162014-07-15 13:24:46 -0700369 fake_state_.updater_provider()->var_forced_update_requested()->reset(
370 new UpdateRequestStatus(UpdateRequestStatus::kInteractive));
Gilad Arnold44dc3bf2014-07-18 23:39:38 -0700371
372 UpdateCheckParams result;
373 ExpectPolicyStatus(EvalStatus::kSucceeded,
374 &Policy::UpdateCheckAllowed, &result);
375 EXPECT_TRUE(result.updates_enabled);
Amin Hassanied37d682018-04-06 13:22:00 -0700376 EXPECT_TRUE(result.interactive);
Gilad Arnold44dc3bf2014-07-18 23:39:38 -0700377}
378
Gilad Arnoldec7f9162014-07-15 13:24:46 -0700379TEST_F(UmChromeOSPolicyTest, UpdateCheckAllowedForcedUpdateRequestedPeriodic) {
380 // UpdateCheckAllowed should return true because a forced update request was
381 // signaled for a periodic check.
382
383 SetUpdateCheckAllowed(true);
384 fake_state_.updater_provider()->var_forced_update_requested()->reset(
385 new UpdateRequestStatus(UpdateRequestStatus::kPeriodic));
386
387 UpdateCheckParams result;
388 ExpectPolicyStatus(EvalStatus::kSucceeded,
389 &Policy::UpdateCheckAllowed, &result);
390 EXPECT_TRUE(result.updates_enabled);
Amin Hassanied37d682018-04-06 13:22:00 -0700391 EXPECT_FALSE(result.interactive);
Gilad Arnoldec7f9162014-07-15 13:24:46 -0700392}
393
Xiyuan Xia6e30bc52016-02-24 15:35:42 -0800394TEST_F(UmChromeOSPolicyTest, UpdateCheckAllowedKioskPin) {
395 // Update check is allowed.
396 SetUpdateCheckAllowed(true);
397
Marton Hunyady8b936f22018-06-15 16:44:37 +0200398 SetKioskAppControlsChromeOsVersion();
Xiyuan Xia6e30bc52016-02-24 15:35:42 -0800399
400 UpdateCheckParams result;
401 ExpectPolicyStatus(EvalStatus::kSucceeded,
402 &Policy::UpdateCheckAllowed, &result);
403 EXPECT_TRUE(result.updates_enabled);
Marton Hunyady8b936f22018-06-15 16:44:37 +0200404 EXPECT_EQ("1234.", result.target_version_prefix);
Amin Hassanied37d682018-04-06 13:22:00 -0700405 EXPECT_FALSE(result.interactive);
Xiyuan Xia6e30bc52016-02-24 15:35:42 -0800406}
407
408TEST_F(UmChromeOSPolicyTest, UpdateCheckAllowedDisabledWhenNoKioskPin) {
409 // Update check is allowed.
410 SetUpdateCheckAllowed(true);
411
412 // Disable AU policy is set but kiosk pin policy is set to false. Update is
413 // disabled in such case.
414 fake_state_.device_policy_provider()->var_update_disabled()->reset(
415 new bool(true));
416 fake_state_.device_policy_provider()
417 ->var_allow_kiosk_app_control_chrome_version()
418 ->reset(new bool(false));
419
420 UpdateCheckParams result;
421 ExpectPolicyStatus(EvalStatus::kAskMeAgainLater,
422 &Policy::UpdateCheckAllowed, &result);
423}
424
425TEST_F(UmChromeOSPolicyTest, UpdateCheckAllowedKioskPinWithNoRequiredVersion) {
426 // Update check is allowed.
427 SetUpdateCheckAllowed(true);
428
429 // AU disabled, allow kiosk to pin but there is no kiosk required platform
Xiyuan Xiaed9bd922016-04-07 14:45:16 -0700430 // version (i.e. app does not provide the info). Update to latest in such
431 // case.
Xiyuan Xia6e30bc52016-02-24 15:35:42 -0800432 fake_state_.device_policy_provider()->var_update_disabled()->reset(
433 new bool(true));
434 fake_state_.device_policy_provider()
435 ->var_allow_kiosk_app_control_chrome_version()
436 ->reset(new bool(true));
Xiyuan Xiaed9bd922016-04-07 14:45:16 -0700437 fake_state_.system_provider()->var_kiosk_required_platform_version()->reset(
438 new string());
Xiyuan Xia6e30bc52016-02-24 15:35:42 -0800439
440 UpdateCheckParams result;
441 ExpectPolicyStatus(EvalStatus::kSucceeded,
442 &Policy::UpdateCheckAllowed, &result);
443 EXPECT_TRUE(result.updates_enabled);
Xiyuan Xiaed9bd922016-04-07 14:45:16 -0700444 EXPECT_TRUE(result.target_version_prefix.empty());
Amin Hassanied37d682018-04-06 13:22:00 -0700445 EXPECT_FALSE(result.interactive);
Xiyuan Xia6e30bc52016-02-24 15:35:42 -0800446}
447
Xiyuan Xiaed9bd922016-04-07 14:45:16 -0700448TEST_F(UmChromeOSPolicyTest,
449 UpdateCheckAllowedKioskPinWithFailedGetRequiredVersionCall) {
450 // AU disabled, allow kiosk to pin but D-Bus call to get required platform
451 // version failed. Defer update check in this case.
452 fake_state_.device_policy_provider()->var_update_disabled()->reset(
453 new bool(true));
454 fake_state_.device_policy_provider()
455 ->var_allow_kiosk_app_control_chrome_version()
456 ->reset(new bool(true));
457 fake_state_.system_provider()->var_kiosk_required_platform_version()->reset(
458 nullptr);
459
460 UpdateCheckParams result;
461 ExpectPolicyStatus(EvalStatus::kAskMeAgainLater,
462 &Policy::UpdateCheckAllowed, &result);
463}
464
Alex Deymo63784a52014-05-28 10:46:14 -0700465TEST_F(UmChromeOSPolicyTest, UpdateCanStartFailsCheckAllowedError) {
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700466 // The UpdateCanStart policy fails, not being able to query
467 // UpdateCheckAllowed.
468
469 // Configure the UpdateCheckAllowed policy to fail.
470 fake_state_.updater_provider()->var_updater_started_time()->reset(nullptr);
471
472 // Check that the UpdateCanStart fails.
473 UpdateState update_state = GetDefaultUpdateState(TimeDelta::FromMinutes(10));
Gilad Arnold42f253b2014-06-25 12:39:17 -0700474 UpdateDownloadParams result;
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700475 ExpectPolicyStatus(EvalStatus::kFailed,
Gilad Arnolddc4bb262014-07-23 10:45:19 -0700476 &Policy::UpdateCanStart, &result, update_state);
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700477}
478
Alex Deymo63784a52014-05-28 10:46:14 -0700479TEST_F(UmChromeOSPolicyTest, UpdateCanStartNotAllowedCheckDue) {
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700480 // The UpdateCanStart policy returns false because we are due for another
Gilad Arnold14a9e702014-10-08 08:09:09 -0700481 // update check. Ensure that download related values are still returned.
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700482
483 SetUpdateCheckAllowed(true);
484
485 // Check that the UpdateCanStart returns false.
486 UpdateState update_state = GetDefaultUpdateState(TimeDelta::FromMinutes(10));
Gilad Arnold42f253b2014-06-25 12:39:17 -0700487 UpdateDownloadParams result;
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700488 ExpectPolicyStatus(EvalStatus::kSucceeded,
Gilad Arnolddc4bb262014-07-23 10:45:19 -0700489 &Policy::UpdateCanStart, &result, update_state);
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700490 EXPECT_FALSE(result.update_can_start);
491 EXPECT_EQ(UpdateCannotStartReason::kCheckDue, result.cannot_start_reason);
Gilad Arnold14a9e702014-10-08 08:09:09 -0700492 EXPECT_EQ(0, result.download_url_idx);
493 EXPECT_EQ(0, result.download_url_num_errors);
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700494}
495
Alex Deymo63784a52014-05-28 10:46:14 -0700496TEST_F(UmChromeOSPolicyTest, UpdateCanStartAllowedNoDevicePolicy) {
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700497 // The UpdateCanStart policy returns true; no device policy is loaded.
498
499 SetUpdateCheckAllowed(false);
500 fake_state_.device_policy_provider()->var_device_policy_is_loaded()->reset(
501 new bool(false));
502
503 // Check that the UpdateCanStart returns true with no further attributes.
504 UpdateState update_state = GetDefaultUpdateState(TimeDelta::FromMinutes(10));
Gilad Arnold42f253b2014-06-25 12:39:17 -0700505 UpdateDownloadParams result;
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700506 ExpectPolicyStatus(EvalStatus::kSucceeded,
Gilad Arnolddc4bb262014-07-23 10:45:19 -0700507 &Policy::UpdateCanStart, &result, update_state);
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700508 EXPECT_TRUE(result.update_can_start);
Gilad Arnoldb2f99192014-10-07 13:01:52 -0700509 EXPECT_FALSE(result.p2p_downloading_allowed);
510 EXPECT_FALSE(result.p2p_sharing_allowed);
Gilad Arnoldb3b05442014-05-30 14:25:05 -0700511 EXPECT_EQ(0, result.download_url_idx);
Gilad Arnold14a9e702014-10-08 08:09:09 -0700512 EXPECT_TRUE(result.download_url_allowed);
Gilad Arnolddc4bb262014-07-23 10:45:19 -0700513 EXPECT_EQ(0, result.download_url_num_errors);
514 EXPECT_FALSE(result.do_increment_failures);
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700515}
516
Alex Deymo63784a52014-05-28 10:46:14 -0700517TEST_F(UmChromeOSPolicyTest, UpdateCanStartAllowedBlankPolicy) {
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700518 // The UpdateCanStart policy returns true; device policy is loaded but imposes
519 // no restrictions on updating.
520
521 SetUpdateCheckAllowed(false);
522
523 // Check that the UpdateCanStart returns true.
524 UpdateState update_state = GetDefaultUpdateState(TimeDelta::FromMinutes(10));
Gilad Arnold42f253b2014-06-25 12:39:17 -0700525 UpdateDownloadParams result;
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700526 ExpectPolicyStatus(EvalStatus::kSucceeded,
Gilad Arnolddc4bb262014-07-23 10:45:19 -0700527 &Policy::UpdateCanStart, &result, update_state);
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700528 EXPECT_TRUE(result.update_can_start);
Gilad Arnoldb2f99192014-10-07 13:01:52 -0700529 EXPECT_FALSE(result.p2p_downloading_allowed);
530 EXPECT_FALSE(result.p2p_sharing_allowed);
Gilad Arnoldb3b05442014-05-30 14:25:05 -0700531 EXPECT_EQ(0, result.download_url_idx);
Gilad Arnold14a9e702014-10-08 08:09:09 -0700532 EXPECT_TRUE(result.download_url_allowed);
Gilad Arnolddc4bb262014-07-23 10:45:19 -0700533 EXPECT_EQ(0, result.download_url_num_errors);
534 EXPECT_FALSE(result.do_increment_failures);
535}
536
537TEST_F(UmChromeOSPolicyTest,
538 UpdateCanStartNotAllowedBackoffNewWaitPeriodApplies) {
539 // The UpdateCanStart policy returns false; failures are reported and a new
540 // backoff period is enacted.
541
542 SetUpdateCheckAllowed(false);
543
544 const Time curr_time = fake_clock_.GetWallclockTime();
545 UpdateState update_state = GetDefaultUpdateState(TimeDelta::FromSeconds(10));
546 update_state.download_errors_max = 1;
547 update_state.download_errors.emplace_back(
548 0, ErrorCode::kDownloadTransferError,
549 curr_time - TimeDelta::FromSeconds(8));
550 update_state.download_errors.emplace_back(
551 0, ErrorCode::kDownloadTransferError,
552 curr_time - TimeDelta::FromSeconds(2));
553
554 // Check that UpdateCanStart returns false and a new backoff expiry is
555 // generated.
556 UpdateDownloadParams result;
557 ExpectPolicyStatus(EvalStatus::kSucceeded, &Policy::UpdateCanStart, &result,
558 update_state);
559 EXPECT_FALSE(result.update_can_start);
560 EXPECT_EQ(UpdateCannotStartReason::kBackoff, result.cannot_start_reason);
561 EXPECT_TRUE(result.do_increment_failures);
562 EXPECT_LT(curr_time, result.backoff_expiry);
563}
564
565TEST_F(UmChromeOSPolicyTest,
566 UpdateCanStartNotAllowedBackoffPrevWaitPeriodStillApplies) {
567 // The UpdateCanStart policy returns false; a previously enacted backoff
568 // period still applies.
569
570 SetUpdateCheckAllowed(false);
571
572 const Time curr_time = fake_clock_.GetWallclockTime();
573 UpdateState update_state = GetDefaultUpdateState(TimeDelta::FromSeconds(10));
574 update_state.download_errors_max = 1;
575 update_state.download_errors.emplace_back(
576 0, ErrorCode::kDownloadTransferError,
577 curr_time - TimeDelta::FromSeconds(8));
578 update_state.download_errors.emplace_back(
579 0, ErrorCode::kDownloadTransferError,
580 curr_time - TimeDelta::FromSeconds(2));
581 update_state.failures_last_updated = curr_time;
582 update_state.backoff_expiry = curr_time + TimeDelta::FromMinutes(3);
583
584 // Check that UpdateCanStart returns false and a new backoff expiry is
585 // generated.
586 UpdateDownloadParams result;
587 ExpectPolicyStatus(EvalStatus::kAskMeAgainLater, &Policy::UpdateCanStart,
588 &result, update_state);
589 EXPECT_FALSE(result.update_can_start);
590 EXPECT_EQ(UpdateCannotStartReason::kBackoff, result.cannot_start_reason);
591 EXPECT_FALSE(result.do_increment_failures);
592 EXPECT_LT(curr_time, result.backoff_expiry);
593}
594
595TEST_F(UmChromeOSPolicyTest, UpdateCanStartAllowedBackoffSatisfied) {
596 // The UpdateCanStart policy returns true; a previously enacted backoff period
597 // has elapsed, we're good to go.
598
599 SetUpdateCheckAllowed(false);
600
601 const Time curr_time = fake_clock_.GetWallclockTime();
602 UpdateState update_state = GetDefaultUpdateState(TimeDelta::FromSeconds(10));
603 update_state.download_errors_max = 1;
604 update_state.download_errors.emplace_back(
605 0, ErrorCode::kDownloadTransferError,
606 curr_time - TimeDelta::FromSeconds(8));
607 update_state.download_errors.emplace_back(
608 0, ErrorCode::kDownloadTransferError,
609 curr_time - TimeDelta::FromSeconds(2));
610 update_state.failures_last_updated = curr_time - TimeDelta::FromSeconds(1);
611 update_state.backoff_expiry = curr_time - TimeDelta::FromSeconds(1);
612
613 // Check that UpdateCanStart returns false and a new backoff expiry is
614 // generated.
615 UpdateDownloadParams result;
616 ExpectPolicyStatus(EvalStatus::kSucceeded, &Policy::UpdateCanStart,
617 &result, update_state);
618 EXPECT_TRUE(result.update_can_start);
619 EXPECT_EQ(UpdateCannotStartReason::kUndefined, result.cannot_start_reason);
620 EXPECT_EQ(0, result.download_url_idx);
Gilad Arnold14a9e702014-10-08 08:09:09 -0700621 EXPECT_TRUE(result.download_url_allowed);
Gilad Arnolddc4bb262014-07-23 10:45:19 -0700622 EXPECT_EQ(0, result.download_url_num_errors);
623 EXPECT_FALSE(result.do_increment_failures);
624 EXPECT_EQ(Time(), result.backoff_expiry);
625}
626
627TEST_F(UmChromeOSPolicyTest, UpdateCanStartAllowedBackoffDisabled) {
628 // The UpdateCanStart policy returns false; failures are reported but backoff
629 // is disabled.
630
631 SetUpdateCheckAllowed(false);
632
633 const Time curr_time = fake_clock_.GetWallclockTime();
634 UpdateState update_state = GetDefaultUpdateState(TimeDelta::FromSeconds(10));
635 update_state.download_errors_max = 1;
636 update_state.download_errors.emplace_back(
637 0, ErrorCode::kDownloadTransferError,
638 curr_time - TimeDelta::FromSeconds(8));
639 update_state.download_errors.emplace_back(
640 0, ErrorCode::kDownloadTransferError,
641 curr_time - TimeDelta::FromSeconds(2));
642 update_state.is_backoff_disabled = true;
643
644 // Check that UpdateCanStart returns false and a new backoff expiry is
645 // generated.
646 UpdateDownloadParams result;
647 ExpectPolicyStatus(EvalStatus::kSucceeded, &Policy::UpdateCanStart, &result,
648 update_state);
649 EXPECT_TRUE(result.update_can_start);
650 EXPECT_EQ(UpdateCannotStartReason::kUndefined, result.cannot_start_reason);
651 EXPECT_EQ(0, result.download_url_idx);
Gilad Arnold14a9e702014-10-08 08:09:09 -0700652 EXPECT_TRUE(result.download_url_allowed);
Gilad Arnolddc4bb262014-07-23 10:45:19 -0700653 EXPECT_EQ(0, result.download_url_num_errors);
654 EXPECT_TRUE(result.do_increment_failures);
655 EXPECT_EQ(Time(), result.backoff_expiry);
656}
657
658TEST_F(UmChromeOSPolicyTest, UpdateCanStartAllowedNoBackoffInteractive) {
659 // The UpdateCanStart policy returns false; failures are reported but this is
660 // an interactive update check.
661
662 SetUpdateCheckAllowed(false);
663
664 const Time curr_time = fake_clock_.GetWallclockTime();
665 UpdateState update_state = GetDefaultUpdateState(TimeDelta::FromSeconds(10));
666 update_state.download_errors_max = 1;
667 update_state.download_errors.emplace_back(
668 0, ErrorCode::kDownloadTransferError,
669 curr_time - TimeDelta::FromSeconds(8));
670 update_state.download_errors.emplace_back(
671 0, ErrorCode::kDownloadTransferError,
672 curr_time - TimeDelta::FromSeconds(2));
Amin Hassanied37d682018-04-06 13:22:00 -0700673 update_state.interactive = true;
Gilad Arnolddc4bb262014-07-23 10:45:19 -0700674
675 // Check that UpdateCanStart returns false and a new backoff expiry is
676 // generated.
677 UpdateDownloadParams result;
678 ExpectPolicyStatus(EvalStatus::kSucceeded, &Policy::UpdateCanStart, &result,
679 update_state);
680 EXPECT_TRUE(result.update_can_start);
681 EXPECT_EQ(UpdateCannotStartReason::kUndefined, result.cannot_start_reason);
682 EXPECT_EQ(0, result.download_url_idx);
Gilad Arnold14a9e702014-10-08 08:09:09 -0700683 EXPECT_TRUE(result.download_url_allowed);
Gilad Arnolddc4bb262014-07-23 10:45:19 -0700684 EXPECT_EQ(0, result.download_url_num_errors);
685 EXPECT_TRUE(result.do_increment_failures);
686 EXPECT_EQ(Time(), result.backoff_expiry);
687}
688
689TEST_F(UmChromeOSPolicyTest, UpdateCanStartAllowedNoBackoffDelta) {
690 // The UpdateCanStart policy returns false; failures are reported but this is
691 // a delta payload.
692
693 SetUpdateCheckAllowed(false);
694
695 const Time curr_time = fake_clock_.GetWallclockTime();
696 UpdateState update_state = GetDefaultUpdateState(TimeDelta::FromSeconds(10));
697 update_state.download_errors_max = 1;
698 update_state.download_errors.emplace_back(
699 0, ErrorCode::kDownloadTransferError,
700 curr_time - TimeDelta::FromSeconds(8));
701 update_state.download_errors.emplace_back(
702 0, ErrorCode::kDownloadTransferError,
703 curr_time - TimeDelta::FromSeconds(2));
704 update_state.is_delta_payload = true;
705
706 // Check that UpdateCanStart returns false and a new backoff expiry is
707 // generated.
708 UpdateDownloadParams result;
709 ExpectPolicyStatus(EvalStatus::kSucceeded, &Policy::UpdateCanStart, &result,
710 update_state);
711 EXPECT_TRUE(result.update_can_start);
712 EXPECT_EQ(UpdateCannotStartReason::kUndefined, result.cannot_start_reason);
713 EXPECT_EQ(0, result.download_url_idx);
Gilad Arnold14a9e702014-10-08 08:09:09 -0700714 EXPECT_TRUE(result.download_url_allowed);
Gilad Arnolddc4bb262014-07-23 10:45:19 -0700715 EXPECT_EQ(0, result.download_url_num_errors);
716 EXPECT_TRUE(result.do_increment_failures);
717 EXPECT_EQ(Time(), result.backoff_expiry);
718}
719
720TEST_F(UmChromeOSPolicyTest, UpdateCanStartAllowedNoBackoffUnofficialBuild) {
721 // The UpdateCanStart policy returns false; failures are reported but this is
722 // an unofficial build.
723
724 SetUpdateCheckAllowed(false);
725
726 const Time curr_time = fake_clock_.GetWallclockTime();
727 UpdateState update_state = GetDefaultUpdateState(TimeDelta::FromSeconds(10));
728 update_state.download_errors_max = 1;
729 update_state.download_errors.emplace_back(
730 0, ErrorCode::kDownloadTransferError,
731 curr_time - TimeDelta::FromSeconds(8));
732 update_state.download_errors.emplace_back(
733 0, ErrorCode::kDownloadTransferError,
734 curr_time - TimeDelta::FromSeconds(2));
735
736 fake_state_.system_provider()->var_is_official_build()->
737 reset(new bool(false));
738
739 // Check that UpdateCanStart returns false and a new backoff expiry is
740 // generated.
741 UpdateDownloadParams result;
742 ExpectPolicyStatus(EvalStatus::kSucceeded, &Policy::UpdateCanStart, &result,
743 update_state);
744 EXPECT_TRUE(result.update_can_start);
745 EXPECT_EQ(UpdateCannotStartReason::kUndefined, result.cannot_start_reason);
746 EXPECT_EQ(0, result.download_url_idx);
Gilad Arnold14a9e702014-10-08 08:09:09 -0700747 EXPECT_TRUE(result.download_url_allowed);
Gilad Arnolddc4bb262014-07-23 10:45:19 -0700748 EXPECT_EQ(0, result.download_url_num_errors);
749 EXPECT_TRUE(result.do_increment_failures);
750 EXPECT_EQ(Time(), result.backoff_expiry);
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700751}
752
Alex Deymo63784a52014-05-28 10:46:14 -0700753TEST_F(UmChromeOSPolicyTest, UpdateCanStartFailsScatteringFailed) {
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700754 // The UpdateCanStart policy fails because the UpdateScattering policy it
755 // depends on fails (unset variable).
756
757 SetUpdateCheckAllowed(false);
758
759 // Override the default seed variable with a null value so that the policy
760 // request would fail.
Gilad Arnolddc4bb262014-07-23 10:45:19 -0700761 // TODO(garnold) This failure may or may not fail a number
762 // sub-policies/decisions, like scattering and backoff. We'll need a more
763 // deliberate setup to ensure that we're failing what we want to be failing.
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700764 fake_state_.random_provider()->var_seed()->reset(nullptr);
765
766 // Check that the UpdateCanStart fails.
767 UpdateState update_state = GetDefaultUpdateState(TimeDelta::FromSeconds(1));
Gilad Arnold42f253b2014-06-25 12:39:17 -0700768 UpdateDownloadParams result;
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700769 ExpectPolicyStatus(EvalStatus::kFailed,
Gilad Arnolddc4bb262014-07-23 10:45:19 -0700770 &Policy::UpdateCanStart, &result, update_state);
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700771}
772
Alex Deymo63784a52014-05-28 10:46:14 -0700773TEST_F(UmChromeOSPolicyTest,
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700774 UpdateCanStartNotAllowedScatteringNewWaitPeriodApplies) {
775 // The UpdateCanStart policy returns false; device policy is loaded and
776 // scattering applies due to an unsatisfied wait period, which was newly
777 // generated.
778
779 SetUpdateCheckAllowed(false);
780 fake_state_.device_policy_provider()->var_scatter_factor()->reset(
781 new TimeDelta(TimeDelta::FromMinutes(2)));
782
783
784 UpdateState update_state = GetDefaultUpdateState(TimeDelta::FromSeconds(1));
785
786 // Check that the UpdateCanStart returns false and a new wait period
787 // generated.
Gilad Arnold42f253b2014-06-25 12:39:17 -0700788 UpdateDownloadParams result;
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700789 ExpectPolicyStatus(EvalStatus::kSucceeded, &Policy::UpdateCanStart, &result,
Gilad Arnolddc4bb262014-07-23 10:45:19 -0700790 update_state);
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700791 EXPECT_FALSE(result.update_can_start);
792 EXPECT_EQ(UpdateCannotStartReason::kScattering, result.cannot_start_reason);
793 EXPECT_LT(TimeDelta(), result.scatter_wait_period);
794 EXPECT_EQ(0, result.scatter_check_threshold);
795}
796
Alex Deymo63784a52014-05-28 10:46:14 -0700797TEST_F(UmChromeOSPolicyTest,
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700798 UpdateCanStartNotAllowedScatteringPrevWaitPeriodStillApplies) {
799 // The UpdateCanStart policy returns false w/ kAskMeAgainLater; device policy
800 // is loaded and a previously generated scattering period still applies, none
801 // of the scattering values has changed.
802
803 SetUpdateCheckAllowed(false);
804 fake_state_.device_policy_provider()->var_scatter_factor()->reset(
805 new TimeDelta(TimeDelta::FromMinutes(2)));
806
807 UpdateState update_state = GetDefaultUpdateState(TimeDelta::FromSeconds(1));
808 update_state.scatter_wait_period = TimeDelta::FromSeconds(35);
809
810 // Check that the UpdateCanStart returns false and a new wait period
811 // generated.
Gilad Arnold42f253b2014-06-25 12:39:17 -0700812 UpdateDownloadParams result;
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700813 ExpectPolicyStatus(EvalStatus::kAskMeAgainLater, &Policy::UpdateCanStart,
Gilad Arnolddc4bb262014-07-23 10:45:19 -0700814 &result, update_state);
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700815 EXPECT_FALSE(result.update_can_start);
816 EXPECT_EQ(UpdateCannotStartReason::kScattering, result.cannot_start_reason);
817 EXPECT_EQ(TimeDelta::FromSeconds(35), result.scatter_wait_period);
818 EXPECT_EQ(0, result.scatter_check_threshold);
819}
820
Alex Deymo63784a52014-05-28 10:46:14 -0700821TEST_F(UmChromeOSPolicyTest,
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700822 UpdateCanStartNotAllowedScatteringNewCountThresholdApplies) {
823 // The UpdateCanStart policy returns false; device policy is loaded and
824 // scattering applies due to an unsatisfied update check count threshold.
825 //
826 // This ensures a non-zero check threshold, which may or may not be combined
827 // with a non-zero wait period (for which we cannot reliably control).
828
829 SetUpdateCheckAllowed(false);
830 fake_state_.device_policy_provider()->var_scatter_factor()->reset(
831 new TimeDelta(TimeDelta::FromSeconds(1)));
832
833 UpdateState update_state = GetDefaultUpdateState(TimeDelta::FromSeconds(1));
834 update_state.scatter_check_threshold_min = 2;
835 update_state.scatter_check_threshold_max = 5;
836
837 // Check that the UpdateCanStart returns false.
Gilad Arnold42f253b2014-06-25 12:39:17 -0700838 UpdateDownloadParams result;
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700839 ExpectPolicyStatus(EvalStatus::kSucceeded, &Policy::UpdateCanStart, &result,
Gilad Arnolddc4bb262014-07-23 10:45:19 -0700840 update_state);
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700841 EXPECT_FALSE(result.update_can_start);
842 EXPECT_EQ(UpdateCannotStartReason::kScattering, result.cannot_start_reason);
843 EXPECT_LE(2, result.scatter_check_threshold);
844 EXPECT_GE(5, result.scatter_check_threshold);
845}
846
Alex Deymo63784a52014-05-28 10:46:14 -0700847TEST_F(UmChromeOSPolicyTest,
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700848 UpdateCanStartNotAllowedScatteringPrevCountThresholdStillApplies) {
849 // The UpdateCanStart policy returns false; device policy is loaded and
850 // scattering due to a previously generated count threshold still applies.
851
852 SetUpdateCheckAllowed(false);
853 fake_state_.device_policy_provider()->var_scatter_factor()->reset(
854 new TimeDelta(TimeDelta::FromSeconds(1)));
855
856 UpdateState update_state = GetDefaultUpdateState(TimeDelta::FromSeconds(1));
857 update_state.scatter_check_threshold = 3;
858 update_state.scatter_check_threshold_min = 2;
859 update_state.scatter_check_threshold_max = 5;
860
861 // Check that the UpdateCanStart returns false.
Gilad Arnold42f253b2014-06-25 12:39:17 -0700862 UpdateDownloadParams result;
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700863 ExpectPolicyStatus(EvalStatus::kSucceeded, &Policy::UpdateCanStart, &result,
Gilad Arnolddc4bb262014-07-23 10:45:19 -0700864 update_state);
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700865 EXPECT_FALSE(result.update_can_start);
866 EXPECT_EQ(UpdateCannotStartReason::kScattering, result.cannot_start_reason);
867 EXPECT_EQ(3, result.scatter_check_threshold);
868}
869
Alex Deymo63784a52014-05-28 10:46:14 -0700870TEST_F(UmChromeOSPolicyTest, UpdateCanStartAllowedScatteringSatisfied) {
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700871 // The UpdateCanStart policy returns true; device policy is loaded and
872 // scattering is enabled, but both wait period and check threshold are
873 // satisfied.
874
875 SetUpdateCheckAllowed(false);
876 fake_state_.device_policy_provider()->var_scatter_factor()->reset(
877 new TimeDelta(TimeDelta::FromSeconds(120)));
878
879 UpdateState update_state = GetDefaultUpdateState(TimeDelta::FromSeconds(75));
880 update_state.num_checks = 4;
881 update_state.scatter_wait_period = TimeDelta::FromSeconds(60);
882 update_state.scatter_check_threshold = 3;
883 update_state.scatter_check_threshold_min = 2;
884 update_state.scatter_check_threshold_max = 5;
885
886 // Check that the UpdateCanStart returns true.
Gilad Arnold42f253b2014-06-25 12:39:17 -0700887 UpdateDownloadParams result;
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700888 ExpectPolicyStatus(EvalStatus::kSucceeded, &Policy::UpdateCanStart, &result,
Gilad Arnolddc4bb262014-07-23 10:45:19 -0700889 update_state);
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700890 EXPECT_TRUE(result.update_can_start);
891 EXPECT_EQ(TimeDelta(), result.scatter_wait_period);
892 EXPECT_EQ(0, result.scatter_check_threshold);
Gilad Arnoldb3b05442014-05-30 14:25:05 -0700893 EXPECT_EQ(0, result.download_url_idx);
Gilad Arnold14a9e702014-10-08 08:09:09 -0700894 EXPECT_TRUE(result.download_url_allowed);
Gilad Arnolddc4bb262014-07-23 10:45:19 -0700895 EXPECT_EQ(0, result.download_url_num_errors);
896 EXPECT_FALSE(result.do_increment_failures);
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700897}
898
Alex Deymo63784a52014-05-28 10:46:14 -0700899TEST_F(UmChromeOSPolicyTest,
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700900 UpdateCanStartAllowedInteractivePreventsScattering) {
901 // The UpdateCanStart policy returns true; device policy is loaded and
902 // scattering would have applied, except that the update check is interactive
903 // and so it is suppressed.
904
905 SetUpdateCheckAllowed(false);
906 fake_state_.device_policy_provider()->var_scatter_factor()->reset(
907 new TimeDelta(TimeDelta::FromSeconds(1)));
908
909 UpdateState update_state = GetDefaultUpdateState(TimeDelta::FromSeconds(1));
Amin Hassanied37d682018-04-06 13:22:00 -0700910 update_state.interactive = true;
Gilad Arnoldf62a4b82014-05-01 07:41:07 -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 Arnoldf62a4b82014-05-01 07:41:07 -0700917 ExpectPolicyStatus(EvalStatus::kSucceeded, &Policy::UpdateCanStart, &result,
Gilad Arnolddc4bb262014-07-23 10:45:19 -0700918 update_state);
Gilad Arnoldf62a4b82014-05-01 07:41:07 -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 Arnoldf62a4b82014-05-01 07:41:07 -0700926}
927
Alex Deymo63784a52014-05-28 10:46:14 -0700928TEST_F(UmChromeOSPolicyTest,
Gilad Arnold76a11f62014-05-20 09:02:12 -0700929 UpdateCanStartAllowedOobePreventsScattering) {
930 // The UpdateCanStart policy returns true; device policy is loaded and
931 // scattering would have applied, except that OOBE was not completed and so it
932 // is suppressed.
933
934 SetUpdateCheckAllowed(false);
935 fake_state_.device_policy_provider()->var_scatter_factor()->reset(
936 new TimeDelta(TimeDelta::FromSeconds(1)));
937 fake_state_.system_provider()->var_is_oobe_complete()->reset(new bool(false));
938
939 UpdateState update_state = GetDefaultUpdateState(TimeDelta::FromSeconds(1));
Amin Hassanied37d682018-04-06 13:22:00 -0700940 update_state.interactive = true;
Gilad Arnold76a11f62014-05-20 09:02:12 -0700941 update_state.scatter_check_threshold = 0;
942 update_state.scatter_check_threshold_min = 2;
943 update_state.scatter_check_threshold_max = 5;
944
945 // Check that the UpdateCanStart returns true.
Gilad Arnold42f253b2014-06-25 12:39:17 -0700946 UpdateDownloadParams result;
Gilad Arnold76a11f62014-05-20 09:02:12 -0700947 ExpectPolicyStatus(EvalStatus::kSucceeded, &Policy::UpdateCanStart, &result,
Gilad Arnolddc4bb262014-07-23 10:45:19 -0700948 update_state);
Gilad Arnold76a11f62014-05-20 09:02:12 -0700949 EXPECT_TRUE(result.update_can_start);
950 EXPECT_EQ(TimeDelta(), result.scatter_wait_period);
951 EXPECT_EQ(0, result.scatter_check_threshold);
Gilad Arnoldb3b05442014-05-30 14:25:05 -0700952 EXPECT_EQ(0, result.download_url_idx);
Gilad Arnold14a9e702014-10-08 08:09:09 -0700953 EXPECT_TRUE(result.download_url_allowed);
Gilad Arnolddc4bb262014-07-23 10:45:19 -0700954 EXPECT_EQ(0, result.download_url_num_errors);
955 EXPECT_FALSE(result.do_increment_failures);
Gilad Arnold76a11f62014-05-20 09:02:12 -0700956}
957
Alex Deymo63784a52014-05-28 10:46:14 -0700958TEST_F(UmChromeOSPolicyTest, UpdateCanStartAllowedWithAttributes) {
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700959 // The UpdateCanStart policy returns true; device policy permits both HTTP and
960 // P2P updates, as well as a non-empty target channel string.
961
962 SetUpdateCheckAllowed(false);
963
964 // Override specific device policy attributes.
965 fake_state_.device_policy_provider()->var_http_downloads_enabled()->reset(
966 new bool(true));
967 fake_state_.device_policy_provider()->var_au_p2p_enabled()->reset(
968 new bool(true));
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700969
970 // Check that the UpdateCanStart returns true.
971 UpdateState update_state = GetDefaultUpdateState(TimeDelta::FromMinutes(10));
Gilad Arnold42f253b2014-06-25 12:39:17 -0700972 UpdateDownloadParams result;
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700973 ExpectPolicyStatus(EvalStatus::kSucceeded, &Policy::UpdateCanStart, &result,
Gilad Arnolddc4bb262014-07-23 10:45:19 -0700974 update_state);
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700975 EXPECT_TRUE(result.update_can_start);
Gilad Arnoldb2f99192014-10-07 13:01:52 -0700976 EXPECT_TRUE(result.p2p_downloading_allowed);
977 EXPECT_TRUE(result.p2p_sharing_allowed);
Gilad Arnoldb3b05442014-05-30 14:25:05 -0700978 EXPECT_EQ(0, result.download_url_idx);
Gilad Arnold14a9e702014-10-08 08:09:09 -0700979 EXPECT_TRUE(result.download_url_allowed);
Gilad Arnolddc4bb262014-07-23 10:45:19 -0700980 EXPECT_EQ(0, result.download_url_num_errors);
981 EXPECT_FALSE(result.do_increment_failures);
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700982}
983
Alex Deymo63784a52014-05-28 10:46:14 -0700984TEST_F(UmChromeOSPolicyTest, UpdateCanStartAllowedWithP2PFromUpdater) {
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700985 // The UpdateCanStart policy returns true; device policy forbids both HTTP and
986 // P2P updates, but the updater is configured to allow P2P and overrules the
987 // setting.
988
989 SetUpdateCheckAllowed(false);
990
991 // Override specific device policy attributes.
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700992 fake_state_.updater_provider()->var_p2p_enabled()->reset(new bool(true));
993
994 // Check that the UpdateCanStart returns true.
995 UpdateState update_state = GetDefaultUpdateState(TimeDelta::FromMinutes(10));
Gilad Arnold42f253b2014-06-25 12:39:17 -0700996 UpdateDownloadParams result;
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700997 ExpectPolicyStatus(EvalStatus::kSucceeded, &Policy::UpdateCanStart, &result,
Gilad Arnolddc4bb262014-07-23 10:45:19 -0700998 update_state);
Gilad Arnoldf62a4b82014-05-01 07:41:07 -0700999 EXPECT_TRUE(result.update_can_start);
Gilad Arnoldb2f99192014-10-07 13:01:52 -07001000 EXPECT_TRUE(result.p2p_downloading_allowed);
1001 EXPECT_TRUE(result.p2p_sharing_allowed);
Gilad Arnoldb3b05442014-05-30 14:25:05 -07001002 EXPECT_EQ(0, result.download_url_idx);
Gilad Arnold14a9e702014-10-08 08:09:09 -07001003 EXPECT_TRUE(result.download_url_allowed);
Gilad Arnolddc4bb262014-07-23 10:45:19 -07001004 EXPECT_EQ(0, result.download_url_num_errors);
1005 EXPECT_FALSE(result.do_increment_failures);
Gilad Arnoldf62a4b82014-05-01 07:41:07 -07001006}
1007
Gilad Arnoldb2f99192014-10-07 13:01:52 -07001008TEST_F(UmChromeOSPolicyTest,
Gilad Arnold78ecbfc2014-10-22 14:38:25 -07001009 UpdateCanStartAllowedP2PDownloadingBlockedDueToOmaha) {
1010 // The UpdateCanStart policy returns true; device policy permits HTTP, but
1011 // policy blocks P2P downloading because Omaha forbids it. P2P sharing is
1012 // still permitted.
1013
1014 SetUpdateCheckAllowed(false);
1015
1016 // Override specific device policy attributes.
1017 fake_state_.device_policy_provider()->var_http_downloads_enabled()->reset(
1018 new bool(true));
1019 fake_state_.device_policy_provider()->var_au_p2p_enabled()->reset(
1020 new bool(true));
1021
1022 // Check that the UpdateCanStart returns true.
1023 UpdateState update_state = GetDefaultUpdateState(TimeDelta::FromMinutes(10));
1024 update_state.p2p_downloading_disabled = true;
1025 UpdateDownloadParams result;
1026 ExpectPolicyStatus(EvalStatus::kSucceeded, &Policy::UpdateCanStart, &result,
1027 update_state);
1028 EXPECT_TRUE(result.update_can_start);
1029 EXPECT_FALSE(result.p2p_downloading_allowed);
1030 EXPECT_TRUE(result.p2p_sharing_allowed);
1031}
1032
1033TEST_F(UmChromeOSPolicyTest,
1034 UpdateCanStartAllowedP2PSharingBlockedDueToOmaha) {
1035 // The UpdateCanStart policy returns true; device policy permits HTTP, but
1036 // policy blocks P2P sharing because Omaha forbids it. P2P downloading is
1037 // still permitted.
1038
1039 SetUpdateCheckAllowed(false);
1040
1041 // Override specific device policy attributes.
1042 fake_state_.device_policy_provider()->var_http_downloads_enabled()->reset(
1043 new bool(true));
1044 fake_state_.device_policy_provider()->var_au_p2p_enabled()->reset(
1045 new bool(true));
1046
1047 // Check that the UpdateCanStart returns true.
1048 UpdateState update_state = GetDefaultUpdateState(TimeDelta::FromMinutes(10));
1049 update_state.p2p_sharing_disabled = true;
1050 UpdateDownloadParams result;
1051 ExpectPolicyStatus(EvalStatus::kSucceeded, &Policy::UpdateCanStart, &result,
1052 update_state);
1053 EXPECT_TRUE(result.update_can_start);
1054 EXPECT_TRUE(result.p2p_downloading_allowed);
1055 EXPECT_FALSE(result.p2p_sharing_allowed);
1056}
1057
1058TEST_F(UmChromeOSPolicyTest,
1059 UpdateCanStartAllowedP2PDownloadingBlockedDueToNumAttempts) {
Gilad Arnold349ac832014-10-06 14:20:28 -07001060 // The UpdateCanStart policy returns true; device policy permits HTTP but
Gilad Arnoldb2f99192014-10-07 13:01:52 -07001061 // blocks P2P download, because the max number of P2P downloads have been
1062 // attempted. P2P sharing is still permitted.
Gilad Arnold349ac832014-10-06 14:20:28 -07001063
1064 SetUpdateCheckAllowed(false);
1065
1066 // Override specific device policy attributes.
1067 fake_state_.device_policy_provider()->var_http_downloads_enabled()->reset(
1068 new bool(true));
1069 fake_state_.device_policy_provider()->var_au_p2p_enabled()->reset(
1070 new bool(true));
1071
1072 // Check that the UpdateCanStart returns true.
1073 UpdateState update_state = GetDefaultUpdateState(TimeDelta::FromMinutes(10));
1074 update_state.p2p_num_attempts = ChromeOSPolicy::kMaxP2PAttempts;
1075 UpdateDownloadParams result;
1076 ExpectPolicyStatus(EvalStatus::kSucceeded, &Policy::UpdateCanStart, &result,
1077 update_state);
1078 EXPECT_TRUE(result.update_can_start);
Gilad Arnoldb2f99192014-10-07 13:01:52 -07001079 EXPECT_FALSE(result.p2p_downloading_allowed);
1080 EXPECT_TRUE(result.p2p_sharing_allowed);
Gilad Arnold349ac832014-10-06 14:20:28 -07001081}
1082
1083TEST_F(UmChromeOSPolicyTest,
Gilad Arnold78ecbfc2014-10-22 14:38:25 -07001084 UpdateCanStartAllowedP2PDownloadingBlockedDueToAttemptsPeriod) {
Gilad Arnold349ac832014-10-06 14:20:28 -07001085 // The UpdateCanStart policy returns true; device policy permits HTTP but
Gilad Arnoldb2f99192014-10-07 13:01:52 -07001086 // blocks P2P download, because the max period for attempt to download via P2P
1087 // has elapsed. P2P sharing is still permitted.
Gilad Arnold349ac832014-10-06 14:20:28 -07001088
1089 SetUpdateCheckAllowed(false);
1090
1091 // Override specific device policy attributes.
1092 fake_state_.device_policy_provider()->var_http_downloads_enabled()->reset(
1093 new bool(true));
1094 fake_state_.device_policy_provider()->var_au_p2p_enabled()->reset(
1095 new bool(true));
1096
1097 // Check that the UpdateCanStart returns true.
1098 UpdateState update_state = GetDefaultUpdateState(TimeDelta::FromMinutes(10));
1099 update_state.p2p_num_attempts = 1;
1100 update_state.p2p_first_attempted =
1101 fake_clock_.GetWallclockTime() -
Alex Deymof329b932014-10-30 01:37:48 -07001102 TimeDelta::FromSeconds(
1103 ChromeOSPolicy::kMaxP2PAttemptsPeriodInSeconds + 1);
Gilad Arnold349ac832014-10-06 14:20:28 -07001104 UpdateDownloadParams result;
1105 ExpectPolicyStatus(EvalStatus::kSucceeded, &Policy::UpdateCanStart, &result,
1106 update_state);
1107 EXPECT_TRUE(result.update_can_start);
Gilad Arnoldb2f99192014-10-07 13:01:52 -07001108 EXPECT_FALSE(result.p2p_downloading_allowed);
1109 EXPECT_TRUE(result.p2p_sharing_allowed);
Gilad Arnold349ac832014-10-06 14:20:28 -07001110}
1111
Gilad Arnoldb3b05442014-05-30 14:25:05 -07001112TEST_F(UmChromeOSPolicyTest,
1113 UpdateCanStartAllowedWithHttpUrlForUnofficialBuild) {
Gilad Arnoldf62a4b82014-05-01 07:41:07 -07001114 // The UpdateCanStart policy returns true; device policy forbids both HTTP and
1115 // P2P updates, but marking this an unofficial build overrules the HTTP
1116 // setting.
1117
1118 SetUpdateCheckAllowed(false);
1119
1120 // Override specific device policy attributes.
Gilad Arnoldb3b05442014-05-30 14:25:05 -07001121 fake_state_.device_policy_provider()->var_http_downloads_enabled()->reset(
1122 new bool(false));
Gilad Arnoldf62a4b82014-05-01 07:41:07 -07001123 fake_state_.system_provider()->var_is_official_build()->
1124 reset(new bool(false));
1125
1126 // Check that the UpdateCanStart returns true.
1127 UpdateState update_state = GetDefaultUpdateState(TimeDelta::FromMinutes(10));
Gilad Arnold42f253b2014-06-25 12:39:17 -07001128 UpdateDownloadParams result;
Gilad Arnoldf62a4b82014-05-01 07:41:07 -07001129 ExpectPolicyStatus(EvalStatus::kSucceeded, &Policy::UpdateCanStart, &result,
Gilad Arnolddc4bb262014-07-23 10:45:19 -07001130 update_state);
Gilad Arnoldf62a4b82014-05-01 07:41:07 -07001131 EXPECT_TRUE(result.update_can_start);
Gilad Arnoldb3b05442014-05-30 14:25:05 -07001132 EXPECT_EQ(0, result.download_url_idx);
Gilad Arnold14a9e702014-10-08 08:09:09 -07001133 EXPECT_TRUE(result.download_url_allowed);
Gilad Arnolddc4bb262014-07-23 10:45:19 -07001134 EXPECT_EQ(0, result.download_url_num_errors);
1135 EXPECT_FALSE(result.do_increment_failures);
Gilad Arnoldb3b05442014-05-30 14:25:05 -07001136}
1137
1138TEST_F(UmChromeOSPolicyTest, UpdateCanStartAllowedWithHttpsUrl) {
1139 // The UpdateCanStart policy returns true; device policy forbids both HTTP and
1140 // P2P updates, but an HTTPS URL is provided and selected for download.
1141
1142 SetUpdateCheckAllowed(false);
1143
1144 // Override specific device policy attributes.
1145 fake_state_.device_policy_provider()->var_http_downloads_enabled()->reset(
1146 new bool(false));
1147
1148 // Add an HTTPS URL.
1149 UpdateState update_state = GetDefaultUpdateState(TimeDelta::FromMinutes(10));
Gilad Arnolddc4bb262014-07-23 10:45:19 -07001150 update_state.download_urls.emplace_back("https://secure/url/");
Gilad Arnoldb3b05442014-05-30 14:25:05 -07001151
1152 // Check that the UpdateCanStart returns true.
Gilad Arnold42f253b2014-06-25 12:39:17 -07001153 UpdateDownloadParams result;
Gilad Arnoldb3b05442014-05-30 14:25:05 -07001154 ExpectPolicyStatus(EvalStatus::kSucceeded, &Policy::UpdateCanStart, &result,
Gilad Arnolddc4bb262014-07-23 10:45:19 -07001155 update_state);
Gilad Arnoldb3b05442014-05-30 14:25:05 -07001156 EXPECT_TRUE(result.update_can_start);
Gilad Arnoldb3b05442014-05-30 14:25:05 -07001157 EXPECT_EQ(1, 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(0, result.download_url_num_errors);
1160 EXPECT_FALSE(result.do_increment_failures);
1161}
1162
1163TEST_F(UmChromeOSPolicyTest, UpdateCanStartAllowedMaxErrorsNotExceeded) {
1164 // The UpdateCanStart policy returns true; the first URL has download errors
1165 // but does not exceed the maximum allowed number of failures, so it is stilli
1166 // usable.
1167
1168 SetUpdateCheckAllowed(false);
1169
1170 // Add a second URL; update with this URL attempted and failed enough times to
1171 // disqualify the current (first) URL.
1172 UpdateState update_state = GetDefaultUpdateState(TimeDelta::FromMinutes(10));
1173 update_state.num_checks = 5;
1174 update_state.download_urls.emplace_back("http://another/fake/url/");
1175 Time t = fake_clock_.GetWallclockTime() - TimeDelta::FromSeconds(12);
1176 for (int i = 0; i < 5; i++) {
1177 update_state.download_errors.emplace_back(
1178 0, ErrorCode::kDownloadTransferError, t);
1179 t += TimeDelta::FromSeconds(1);
1180 }
1181
1182 // Check that the UpdateCanStart returns true.
1183 UpdateDownloadParams result;
1184 ExpectPolicyStatus(EvalStatus::kSucceeded, &Policy::UpdateCanStart, &result,
1185 update_state);
1186 EXPECT_TRUE(result.update_can_start);
Gilad Arnolddc4bb262014-07-23 10:45:19 -07001187 EXPECT_EQ(0, result.download_url_idx);
Gilad Arnold14a9e702014-10-08 08:09:09 -07001188 EXPECT_TRUE(result.download_url_allowed);
Gilad Arnolddc4bb262014-07-23 10:45:19 -07001189 EXPECT_EQ(5, result.download_url_num_errors);
1190 EXPECT_FALSE(result.do_increment_failures);
Gilad Arnoldb3b05442014-05-30 14:25:05 -07001191}
1192
1193TEST_F(UmChromeOSPolicyTest, UpdateCanStartAllowedWithSecondUrlMaxExceeded) {
1194 // The UpdateCanStart policy returns true; the first URL exceeded the maximum
1195 // allowed number of failures, but a second URL is available.
1196
1197 SetUpdateCheckAllowed(false);
1198
1199 // Add a second URL; update with this URL attempted and failed enough times to
Gilad Arnolddc4bb262014-07-23 10:45:19 -07001200 // disqualify the current (first) URL.
Gilad Arnoldb3b05442014-05-30 14:25:05 -07001201 UpdateState update_state = GetDefaultUpdateState(TimeDelta::FromMinutes(10));
1202 update_state.num_checks = 10;
Gilad Arnolddc4bb262014-07-23 10:45:19 -07001203 update_state.download_urls.emplace_back("http://another/fake/url/");
1204 Time t = fake_clock_.GetWallclockTime() - TimeDelta::FromSeconds(12);
1205 for (int i = 0; i < 11; i++) {
1206 update_state.download_errors.emplace_back(
1207 0, ErrorCode::kDownloadTransferError, t);
1208 t += TimeDelta::FromSeconds(1);
1209 }
Gilad Arnoldb3b05442014-05-30 14:25:05 -07001210
1211 // Check that the UpdateCanStart returns true.
Gilad Arnold42f253b2014-06-25 12:39:17 -07001212 UpdateDownloadParams result;
Gilad Arnoldb3b05442014-05-30 14:25:05 -07001213 ExpectPolicyStatus(EvalStatus::kSucceeded, &Policy::UpdateCanStart, &result,
Gilad Arnolddc4bb262014-07-23 10:45:19 -07001214 update_state);
Gilad Arnoldb3b05442014-05-30 14:25:05 -07001215 EXPECT_TRUE(result.update_can_start);
Gilad Arnoldb3b05442014-05-30 14:25:05 -07001216 EXPECT_EQ(1, result.download_url_idx);
Gilad Arnold14a9e702014-10-08 08:09:09 -07001217 EXPECT_TRUE(result.download_url_allowed);
Gilad Arnolddc4bb262014-07-23 10:45:19 -07001218 EXPECT_EQ(0, result.download_url_num_errors);
1219 EXPECT_FALSE(result.do_increment_failures);
Gilad Arnoldb3b05442014-05-30 14:25:05 -07001220}
1221
1222TEST_F(UmChromeOSPolicyTest, UpdateCanStartAllowedWithSecondUrlHardError) {
1223 // The UpdateCanStart policy returns true; the first URL fails with a hard
1224 // error, but a second URL is available.
1225
1226 SetUpdateCheckAllowed(false);
1227
1228 // Add a second URL; update with this URL attempted and failed in a way that
1229 // causes it to switch directly to the next URL.
1230 UpdateState update_state = GetDefaultUpdateState(TimeDelta::FromMinutes(10));
1231 update_state.num_checks = 10;
Gilad Arnolddc4bb262014-07-23 10:45:19 -07001232 update_state.download_urls.emplace_back("http://another/fake/url/");
1233 update_state.download_errors.emplace_back(
1234 0, ErrorCode::kPayloadHashMismatchError,
1235 fake_clock_.GetWallclockTime() - TimeDelta::FromSeconds(1));
Gilad Arnoldb3b05442014-05-30 14:25:05 -07001236
1237 // Check that the UpdateCanStart returns true.
Gilad Arnold42f253b2014-06-25 12:39:17 -07001238 UpdateDownloadParams result;
Gilad Arnoldb3b05442014-05-30 14:25:05 -07001239 ExpectPolicyStatus(EvalStatus::kSucceeded, &Policy::UpdateCanStart, &result,
Gilad Arnolddc4bb262014-07-23 10:45:19 -07001240 update_state);
Gilad Arnoldb3b05442014-05-30 14:25:05 -07001241 EXPECT_TRUE(result.update_can_start);
Gilad Arnoldb3b05442014-05-30 14:25:05 -07001242 EXPECT_EQ(1, result.download_url_idx);
Gilad Arnold14a9e702014-10-08 08:09:09 -07001243 EXPECT_TRUE(result.download_url_allowed);
Gilad Arnolddc4bb262014-07-23 10:45:19 -07001244 EXPECT_EQ(0, result.download_url_num_errors);
1245 EXPECT_FALSE(result.do_increment_failures);
Gilad Arnoldb3b05442014-05-30 14:25:05 -07001246}
1247
1248TEST_F(UmChromeOSPolicyTest, UpdateCanStartAllowedUrlWrapsAround) {
1249 // The UpdateCanStart policy returns true; URL search properly wraps around
1250 // the last one on the list.
1251
1252 SetUpdateCheckAllowed(false);
1253
1254 // Add a second URL; update with this URL attempted and failed in a way that
Gilad Arnolddc4bb262014-07-23 10:45:19 -07001255 // causes it to switch directly to the next URL. We must disable backoff in
1256 // order for it not to interfere.
Gilad Arnoldb3b05442014-05-30 14:25:05 -07001257 UpdateState update_state = GetDefaultUpdateState(TimeDelta::FromMinutes(10));
Gilad Arnolddc4bb262014-07-23 10:45:19 -07001258 update_state.num_checks = 1;
1259 update_state.is_backoff_disabled = true;
1260 update_state.download_urls.emplace_back("http://another/fake/url/");
1261 update_state.download_errors.emplace_back(
1262 1, ErrorCode::kPayloadHashMismatchError,
1263 fake_clock_.GetWallclockTime() - TimeDelta::FromSeconds(1));
Gilad Arnoldb3b05442014-05-30 14:25:05 -07001264
1265 // Check that the UpdateCanStart returns true.
Gilad Arnold42f253b2014-06-25 12:39:17 -07001266 UpdateDownloadParams result;
Gilad Arnoldb3b05442014-05-30 14:25:05 -07001267 ExpectPolicyStatus(EvalStatus::kSucceeded, &Policy::UpdateCanStart, &result,
Gilad Arnolddc4bb262014-07-23 10:45:19 -07001268 update_state);
Gilad Arnoldb3b05442014-05-30 14:25:05 -07001269 EXPECT_TRUE(result.update_can_start);
Gilad Arnoldb3b05442014-05-30 14:25:05 -07001270 EXPECT_EQ(0, result.download_url_idx);
Gilad Arnold14a9e702014-10-08 08:09:09 -07001271 EXPECT_TRUE(result.download_url_allowed);
Gilad Arnolddc4bb262014-07-23 10:45:19 -07001272 EXPECT_EQ(0, result.download_url_num_errors);
1273 EXPECT_TRUE(result.do_increment_failures);
Gilad Arnoldb3b05442014-05-30 14:25:05 -07001274}
1275
1276TEST_F(UmChromeOSPolicyTest, UpdateCanStartNotAllowedNoUsableUrls) {
1277 // The UpdateCanStart policy returns false; there's a single HTTP URL but its
1278 // use is forbidden by policy.
Gilad Arnolddc4bb262014-07-23 10:45:19 -07001279 //
1280 // Note: In the case where no usable URLs are found, the policy should not
1281 // increment the number of failed attempts! Doing so would result in a
1282 // non-idempotent semantics, and does not fall within the intended purpose of
1283 // the backoff mechanism anyway.
Gilad Arnoldb3b05442014-05-30 14:25:05 -07001284
1285 SetUpdateCheckAllowed(false);
1286
1287 // Override specific device policy attributes.
1288 fake_state_.device_policy_provider()->var_http_downloads_enabled()->reset(
1289 new bool(false));
1290
1291 // Check that the UpdateCanStart returns false.
1292 UpdateState update_state = GetDefaultUpdateState(TimeDelta::FromMinutes(10));
Gilad Arnold42f253b2014-06-25 12:39:17 -07001293 UpdateDownloadParams result;
Gilad Arnolddc4bb262014-07-23 10:45:19 -07001294 ExpectPolicyStatus(EvalStatus::kSucceeded, &Policy::UpdateCanStart, &result,
1295 update_state);
1296 EXPECT_FALSE(result.update_can_start);
1297 EXPECT_EQ(UpdateCannotStartReason::kCannotDownload,
1298 result.cannot_start_reason);
1299 EXPECT_FALSE(result.do_increment_failures);
Gilad Arnoldb3b05442014-05-30 14:25:05 -07001300}
1301
1302TEST_F(UmChromeOSPolicyTest, UpdateCanStartAllowedNoUsableUrlsButP2PEnabled) {
1303 // The UpdateCanStart policy returns true; there's a single HTTP URL but its
1304 // use is forbidden by policy, however P2P is enabled. The result indicates
1305 // that no URL can be used.
Gilad Arnolddc4bb262014-07-23 10:45:19 -07001306 //
1307 // Note: The number of failed attempts should not increase in this case (see
1308 // above test).
Gilad Arnoldb3b05442014-05-30 14:25:05 -07001309
1310 SetUpdateCheckAllowed(false);
1311
1312 // Override specific device policy attributes.
1313 fake_state_.device_policy_provider()->var_au_p2p_enabled()->reset(
1314 new bool(true));
1315 fake_state_.device_policy_provider()->var_http_downloads_enabled()->reset(
1316 new bool(false));
1317
1318 // Check that the UpdateCanStart returns true.
1319 UpdateState update_state = GetDefaultUpdateState(TimeDelta::FromMinutes(10));
Gilad Arnold42f253b2014-06-25 12:39:17 -07001320 UpdateDownloadParams result;
Gilad Arnoldb3b05442014-05-30 14:25:05 -07001321 ExpectPolicyStatus(EvalStatus::kSucceeded, &Policy::UpdateCanStart, &result,
Gilad Arnolddc4bb262014-07-23 10:45:19 -07001322 update_state);
Gilad Arnoldb3b05442014-05-30 14:25:05 -07001323 EXPECT_TRUE(result.update_can_start);
Gilad Arnoldb2f99192014-10-07 13:01:52 -07001324 EXPECT_TRUE(result.p2p_downloading_allowed);
1325 EXPECT_TRUE(result.p2p_sharing_allowed);
Gilad Arnoldb3b05442014-05-30 14:25:05 -07001326 EXPECT_GT(0, result.download_url_idx);
Gilad Arnold14a9e702014-10-08 08:09:09 -07001327 EXPECT_TRUE(result.download_url_allowed);
Gilad Arnolddc4bb262014-07-23 10:45:19 -07001328 EXPECT_EQ(0, result.download_url_num_errors);
1329 EXPECT_FALSE(result.do_increment_failures);
Gilad Arnoldf62a4b82014-05-01 07:41:07 -07001330}
1331
Gilad Arnoldef8d0872014-10-03 14:14:06 -07001332TEST_F(UmChromeOSPolicyTest,
1333 UpdateCanStartAllowedNoUsableUrlsButEnterpriseEnrolled) {
1334 // The UpdateCanStart policy returns true; there's a single HTTP URL but its
1335 // use is forbidden by policy, and P2P is unset on the policy, however the
1336 // device is enterprise-enrolled so P2P is allowed. The result indicates that
1337 // no URL can be used.
1338 //
1339 // Note: The number of failed attempts should not increase in this case (see
1340 // above test).
1341
1342 SetUpdateCheckAllowed(false);
1343
1344 // Override specific device policy attributes.
1345 fake_state_.device_policy_provider()->var_au_p2p_enabled()->reset(nullptr);
1346 fake_state_.device_policy_provider()->var_owner()->reset(nullptr);
1347 fake_state_.device_policy_provider()->var_http_downloads_enabled()->reset(
1348 new bool(false));
1349
1350 // Check that the UpdateCanStart returns true.
1351 UpdateState update_state = GetDefaultUpdateState(TimeDelta::FromMinutes(10));
1352 UpdateDownloadParams result;
1353 ExpectPolicyStatus(EvalStatus::kSucceeded, &Policy::UpdateCanStart, &result,
1354 update_state);
1355 EXPECT_TRUE(result.update_can_start);
Gilad Arnoldb2f99192014-10-07 13:01:52 -07001356 EXPECT_TRUE(result.p2p_downloading_allowed);
1357 EXPECT_TRUE(result.p2p_sharing_allowed);
Gilad Arnoldef8d0872014-10-03 14:14:06 -07001358 EXPECT_GT(0, result.download_url_idx);
Gilad Arnold14a9e702014-10-08 08:09:09 -07001359 EXPECT_TRUE(result.download_url_allowed);
Gilad Arnoldef8d0872014-10-03 14:14:06 -07001360 EXPECT_EQ(0, result.download_url_num_errors);
1361 EXPECT_FALSE(result.do_increment_failures);
1362}
1363
Gilad Arnold684219d2014-07-07 14:54:57 -07001364TEST_F(UmChromeOSPolicyTest, UpdateDownloadAllowedEthernetDefault) {
Gilad Arnold0adbc942014-05-12 10:35:43 -07001365 // Ethernet is always allowed.
1366
1367 fake_state_.shill_provider()->var_conn_type()->
1368 reset(new ConnectionType(ConnectionType::kEthernet));
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, UpdateDownloadAllowedWifiDefault) {
Gilad Arnold0adbc942014-05-12 10:35:43 -07001377 // Wifi is allowed if not tethered.
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 UpdateCurrentConnectionNotAllowedWifiTetheredDefault) {
1390 // Tethered wifi is not allowed by default.
1391
1392 fake_state_.shill_provider()->var_conn_type()->
1393 reset(new ConnectionType(ConnectionType::kWifi));
1394 fake_state_.shill_provider()->var_conn_tethering()->
1395 reset(new ConnectionTethering(ConnectionTethering::kConfirmed));
1396
1397 bool result;
Gilad Arnold28d6be62014-06-30 14:04:04 -07001398 ExpectPolicyStatus(EvalStatus::kAskMeAgainLater,
Gilad Arnold684219d2014-07-07 14:54:57 -07001399 &Policy::UpdateDownloadAllowed, &result);
Gilad Arnold0adbc942014-05-12 10:35:43 -07001400}
1401
Alex Deymo63784a52014-05-28 10:46:14 -07001402TEST_F(UmChromeOSPolicyTest,
Gilad Arnold684219d2014-07-07 14:54:57 -07001403 UpdateDownloadAllowedWifiTetheredPolicyOverride) {
Gilad Arnold0adbc942014-05-12 10:35:43 -07001404 // Tethered wifi can be allowed by policy.
1405
1406 fake_state_.shill_provider()->var_conn_type()->
1407 reset(new ConnectionType(ConnectionType::kWifi));
1408 fake_state_.shill_provider()->var_conn_tethering()->
1409 reset(new ConnectionTethering(ConnectionTethering::kConfirmed));
1410 set<ConnectionType> allowed_connections;
1411 allowed_connections.insert(ConnectionType::kCellular);
1412 fake_state_.device_policy_provider()->
1413 var_allowed_connection_types_for_update()->
1414 reset(new set<ConnectionType>(allowed_connections));
1415
1416 bool result;
1417 ExpectPolicyStatus(EvalStatus::kSucceeded,
Gilad Arnold684219d2014-07-07 14:54:57 -07001418 &Policy::UpdateDownloadAllowed, &result);
Gilad Arnold0adbc942014-05-12 10:35:43 -07001419 EXPECT_TRUE(result);
1420}
1421
Gilad Arnold684219d2014-07-07 14:54:57 -07001422TEST_F(UmChromeOSPolicyTest, UpdateDownloadAllowedWimaxDefault) {
Gilad Arnold0adbc942014-05-12 10:35:43 -07001423 // Wimax is always allowed.
1424
1425 fake_state_.shill_provider()->var_conn_type()->
1426 reset(new ConnectionType(ConnectionType::kWifi));
1427
1428 bool result;
1429 ExpectPolicyStatus(EvalStatus::kSucceeded,
Gilad Arnold684219d2014-07-07 14:54:57 -07001430 &Policy::UpdateDownloadAllowed, &result);
Gilad Arnold0adbc942014-05-12 10:35:43 -07001431 EXPECT_TRUE(result);
1432}
1433
Alex Deymo63784a52014-05-28 10:46:14 -07001434TEST_F(UmChromeOSPolicyTest,
Gilad Arnold0adbc942014-05-12 10:35:43 -07001435 UpdateCurrentConnectionNotAllowedBluetoothDefault) {
1436 // Bluetooth is never allowed.
1437
1438 fake_state_.shill_provider()->var_conn_type()->
1439 reset(new ConnectionType(ConnectionType::kBluetooth));
1440
1441 bool result;
Gilad Arnold28d6be62014-06-30 14:04:04 -07001442 ExpectPolicyStatus(EvalStatus::kAskMeAgainLater,
Gilad Arnold684219d2014-07-07 14:54:57 -07001443 &Policy::UpdateDownloadAllowed, &result);
Gilad Arnold0adbc942014-05-12 10:35:43 -07001444}
1445
Alex Deymo63784a52014-05-28 10:46:14 -07001446TEST_F(UmChromeOSPolicyTest,
Gilad Arnold0adbc942014-05-12 10:35:43 -07001447 UpdateCurrentConnectionNotAllowedBluetoothPolicyCannotOverride) {
1448 // Bluetooth cannot be allowed even by policy.
1449
1450 fake_state_.shill_provider()->var_conn_type()->
1451 reset(new ConnectionType(ConnectionType::kBluetooth));
1452 set<ConnectionType> allowed_connections;
1453 allowed_connections.insert(ConnectionType::kBluetooth);
1454 fake_state_.device_policy_provider()->
1455 var_allowed_connection_types_for_update()->
1456 reset(new set<ConnectionType>(allowed_connections));
1457
1458 bool result;
Gilad Arnold28d6be62014-06-30 14:04:04 -07001459 ExpectPolicyStatus(EvalStatus::kAskMeAgainLater,
Gilad Arnold684219d2014-07-07 14:54:57 -07001460 &Policy::UpdateDownloadAllowed, &result);
Gilad Arnold0adbc942014-05-12 10:35:43 -07001461}
1462
Alex Deymo63784a52014-05-28 10:46:14 -07001463TEST_F(UmChromeOSPolicyTest, UpdateCurrentConnectionNotAllowedCellularDefault) {
Gilad Arnold0adbc942014-05-12 10:35:43 -07001464 // Cellular is not allowed by default.
1465
1466 fake_state_.shill_provider()->var_conn_type()->
1467 reset(new ConnectionType(ConnectionType::kCellular));
1468
1469 bool result;
Gilad Arnold28d6be62014-06-30 14:04:04 -07001470 ExpectPolicyStatus(EvalStatus::kAskMeAgainLater,
Gilad Arnold684219d2014-07-07 14:54:57 -07001471 &Policy::UpdateDownloadAllowed, &result);
Gilad Arnold0adbc942014-05-12 10:35:43 -07001472}
1473
Alex Deymo63784a52014-05-28 10:46:14 -07001474TEST_F(UmChromeOSPolicyTest,
Gilad Arnold684219d2014-07-07 14:54:57 -07001475 UpdateDownloadAllowedCellularPolicyOverride) {
Gilad Arnold0adbc942014-05-12 10:35:43 -07001476 // Update over cellular can be enabled by policy.
1477
1478 fake_state_.shill_provider()->var_conn_type()->
1479 reset(new ConnectionType(ConnectionType::kCellular));
1480 set<ConnectionType> allowed_connections;
1481 allowed_connections.insert(ConnectionType::kCellular);
1482 fake_state_.device_policy_provider()->
1483 var_allowed_connection_types_for_update()->
1484 reset(new set<ConnectionType>(allowed_connections));
1485
1486 bool result;
1487 ExpectPolicyStatus(EvalStatus::kSucceeded,
Gilad Arnold684219d2014-07-07 14:54:57 -07001488 &Policy::UpdateDownloadAllowed, &result);
Gilad Arnold0adbc942014-05-12 10:35:43 -07001489 EXPECT_TRUE(result);
1490}
1491
Alex Deymo63784a52014-05-28 10:46:14 -07001492TEST_F(UmChromeOSPolicyTest,
Gilad Arnold684219d2014-07-07 14:54:57 -07001493 UpdateDownloadAllowedCellularUserOverride) {
Gilad Arnold0adbc942014-05-12 10:35:43 -07001494 // Update over cellular can be enabled by user settings, but only if policy
1495 // is present and does not determine allowed connections.
1496
1497 fake_state_.shill_provider()->var_conn_type()->
1498 reset(new ConnectionType(ConnectionType::kCellular));
1499 set<ConnectionType> allowed_connections;
1500 allowed_connections.insert(ConnectionType::kCellular);
1501 fake_state_.updater_provider()->var_cellular_enabled()->
1502 reset(new bool(true));
1503
1504 bool result;
1505 ExpectPolicyStatus(EvalStatus::kSucceeded,
Gilad Arnold684219d2014-07-07 14:54:57 -07001506 &Policy::UpdateDownloadAllowed, &result);
Gilad Arnold0adbc942014-05-12 10:35:43 -07001507 EXPECT_TRUE(result);
1508}
1509
Gilad Arnold14a9e702014-10-08 08:09:09 -07001510TEST_F(UmChromeOSPolicyTest,
1511 UpdateCanStartAllowedScatteringSupressedDueToP2P) {
1512 // The UpdateCanStart policy returns true; scattering should have applied, but
1513 // P2P download is allowed. Scattering values are nonetheless returned, and so
1514 // are download URL values, albeit the latter are not allowed to be used.
1515
1516 SetUpdateCheckAllowed(false);
1517 fake_state_.device_policy_provider()->var_scatter_factor()->reset(
1518 new TimeDelta(TimeDelta::FromMinutes(2)));
1519 fake_state_.updater_provider()->var_p2p_enabled()->reset(new bool(true));
1520
1521 UpdateState update_state = GetDefaultUpdateState(TimeDelta::FromSeconds(1));
1522 update_state.scatter_wait_period = TimeDelta::FromSeconds(35);
1523
1524 UpdateDownloadParams result;
1525 ExpectPolicyStatus(EvalStatus::kSucceeded, &Policy::UpdateCanStart,
1526 &result, update_state);
1527 EXPECT_TRUE(result.update_can_start);
1528 EXPECT_EQ(0, result.download_url_idx);
1529 EXPECT_FALSE(result.download_url_allowed);
1530 EXPECT_EQ(0, result.download_url_num_errors);
1531 EXPECT_TRUE(result.p2p_downloading_allowed);
1532 EXPECT_TRUE(result.p2p_sharing_allowed);
1533 EXPECT_FALSE(result.do_increment_failures);
1534 EXPECT_EQ(TimeDelta::FromSeconds(35), result.scatter_wait_period);
1535 EXPECT_EQ(0, result.scatter_check_threshold);
1536}
1537
1538TEST_F(UmChromeOSPolicyTest,
1539 UpdateCanStartAllowedBackoffSupressedDueToP2P) {
1540 // The UpdateCanStart policy returns true; backoff should have applied, but
1541 // P2P download is allowed. Backoff values are nonetheless returned, and so
1542 // are download URL values, albeit the latter are not allowed to be used.
1543
1544 SetUpdateCheckAllowed(false);
1545
1546 const Time curr_time = fake_clock_.GetWallclockTime();
1547 UpdateState update_state = GetDefaultUpdateState(TimeDelta::FromSeconds(10));
1548 update_state.download_errors_max = 1;
1549 update_state.download_errors.emplace_back(
1550 0, ErrorCode::kDownloadTransferError,
1551 curr_time - TimeDelta::FromSeconds(8));
1552 update_state.download_errors.emplace_back(
1553 0, ErrorCode::kDownloadTransferError,
1554 curr_time - TimeDelta::FromSeconds(2));
1555 fake_state_.updater_provider()->var_p2p_enabled()->reset(new bool(true));
1556
1557 UpdateDownloadParams result;
1558 ExpectPolicyStatus(EvalStatus::kSucceeded, &Policy::UpdateCanStart, &result,
1559 update_state);
1560 EXPECT_TRUE(result.update_can_start);
1561 EXPECT_EQ(0, result.download_url_idx);
1562 EXPECT_FALSE(result.download_url_allowed);
1563 EXPECT_EQ(0, result.download_url_num_errors);
1564 EXPECT_TRUE(result.p2p_downloading_allowed);
1565 EXPECT_TRUE(result.p2p_sharing_allowed);
1566 EXPECT_TRUE(result.do_increment_failures);
1567 EXPECT_LT(curr_time, result.backoff_expiry);
1568}
1569
Gilad Arnold78ecbfc2014-10-22 14:38:25 -07001570TEST_F(UmChromeOSPolicyTest, P2PEnabledNotAllowed) {
1571 bool result;
1572 ExpectPolicyStatus(EvalStatus::kSucceeded, &Policy::P2PEnabled, &result);
1573 EXPECT_FALSE(result);
1574}
1575
1576TEST_F(UmChromeOSPolicyTest, P2PEnabledAllowedByDevicePolicy) {
1577 fake_state_.device_policy_provider()->var_au_p2p_enabled()->reset(
1578 new bool(true));
1579
1580 bool result;
1581 ExpectPolicyStatus(EvalStatus::kSucceeded, &Policy::P2PEnabled, &result);
1582 EXPECT_TRUE(result);
1583}
1584
1585TEST_F(UmChromeOSPolicyTest, P2PEnabledAllowedByUpdater) {
1586 fake_state_.updater_provider()->var_p2p_enabled()->reset(new bool(true));
1587
1588 bool result;
1589 ExpectPolicyStatus(EvalStatus::kSucceeded, &Policy::P2PEnabled, &result);
1590 EXPECT_TRUE(result);
1591}
1592
1593TEST_F(UmChromeOSPolicyTest, P2PEnabledAllowedDeviceEnterpriseEnrolled) {
1594 fake_state_.device_policy_provider()->var_au_p2p_enabled()->reset(nullptr);
1595 fake_state_.device_policy_provider()->var_owner()->reset(nullptr);
1596
1597 bool result;
1598 ExpectPolicyStatus(EvalStatus::kSucceeded, &Policy::P2PEnabled, &result);
1599 EXPECT_TRUE(result);
1600}
1601
1602TEST_F(UmChromeOSPolicyTest, P2PEnabledChangedBlocks) {
1603 bool result;
1604 ExpectPolicyStatus(EvalStatus::kAskMeAgainLater, &Policy::P2PEnabledChanged,
1605 &result, false);
1606}
1607
Adolfo Victoria0dbf1f92018-07-19 14:18:11 -07001608TEST_F(UmChromeOSPolicyTest,
1609 UpdateCanBeAppliedForcedUpdatesDisablesTimeRestrictions) {
1610 Time curr_time = fake_clock_.GetWallclockTime();
1611 fake_state_.updater_provider()->var_forced_update_requested()->reset(
1612 new UpdateRequestStatus(UpdateRequestStatus::kInteractive));
1613 // Should return kAskMeAgainLater when updated are not forced.
1614 TestDisallowedTimeIntervals(
1615 {WeeklyTimeInterval(
1616 WeeklyTime::FromTime(curr_time),
1617 WeeklyTime::FromTime(curr_time + TimeDelta::FromMinutes(1)))},
1618 EvalStatus::kSucceeded,
1619 /* kiosk = */ true);
1620}
1621
1622TEST_F(UmChromeOSPolicyTest, UpdateCanBeAppliedFailsInDisallowedTime) {
1623 Time curr_time = fake_clock_.GetWallclockTime();
1624 TestDisallowedTimeIntervals(
1625 {WeeklyTimeInterval(
1626 WeeklyTime::FromTime(curr_time),
1627 WeeklyTime::FromTime(curr_time + TimeDelta::FromMinutes(1)))},
1628 EvalStatus::kAskMeAgainLater,
1629 /* kiosk = */ true);
1630}
1631
1632TEST_F(UmChromeOSPolicyTest, UpdateCanBeAppliedOutsideDisallowedTime) {
1633 Time curr_time = fake_clock_.GetWallclockTime();
1634 TestDisallowedTimeIntervals(
1635 {WeeklyTimeInterval(
1636 WeeklyTime::FromTime(curr_time - TimeDelta::FromHours(3)),
1637 WeeklyTime::FromTime(curr_time))},
1638 EvalStatus::kSucceeded,
1639 /* kiosk = */ true);
1640}
1641
1642TEST_F(UmChromeOSPolicyTest, UpdateCanBeAppliedPassesOnNonKiosk) {
1643 Time curr_time = fake_clock_.GetWallclockTime();
1644 TestDisallowedTimeIntervals(
1645 {WeeklyTimeInterval(
1646 WeeklyTime::FromTime(curr_time),
1647 WeeklyTime::FromTime(curr_time + TimeDelta::FromMinutes(1)))},
1648 EvalStatus::kSucceeded,
1649 /* kiosk = */ false);
1650}
1651
Alex Deymo63784a52014-05-28 10:46:14 -07001652} // namespace chromeos_update_manager