Home | History | Annotate | Download | only in update_manager
      1 //
      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 //
     16 
     17 #include "update_engine/update_manager/chromeos_policy.h"
     18 
     19 #include <memory>
     20 #include <set>
     21 
     22 #include "update_engine/update_manager/next_update_check_policy_impl.h"
     23 #include "update_engine/update_manager/policy_test_utils.h"
     24 
     25 using base::Time;
     26 using base::TimeDelta;
     27 using chromeos_update_engine::ConnectionTethering;
     28 using chromeos_update_engine::ConnectionType;
     29 using chromeos_update_engine::ErrorCode;
     30 using std::set;
     31 using std::string;
     32 
     33 namespace chromeos_update_manager {
     34 
     35 class UmChromeOSPolicyTest : public UmPolicyTestBase {
     36  protected:
     37   UmChromeOSPolicyTest() : UmPolicyTestBase() {
     38     policy_ = std::make_unique<ChromeOSPolicy>();
     39   }
     40 
     41   void SetUp() override {
     42     UmPolicyTestBase::SetUp();
     43     SetUpDefaultDevicePolicy();
     44   }
     45 
     46   void SetUpDefaultState() override {
     47     UmPolicyTestBase::SetUpDefaultState();
     48 
     49     // OOBE is enabled by default.
     50     fake_state_.config_provider()->var_is_oobe_enabled()->reset(
     51         new bool(true));
     52 
     53     // For the purpose of the tests, this is an official build and OOBE was
     54     // completed.
     55     fake_state_.system_provider()->var_is_official_build()->reset(
     56         new bool(true));
     57     fake_state_.system_provider()->var_is_oobe_complete()->reset(
     58         new bool(true));
     59     // NOLINTNEXTLINE(readability/casting)
     60     fake_state_.system_provider()->var_num_slots()->reset(new unsigned int(2));
     61 
     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));
     67   }
     68 
     69   // Sets up a default device policy that does not impose any restrictions
     70   // (HTTP) nor enables any features (P2P).
     71   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(
     81         new bool(true));
     82     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 
     88   // Configures the policy to return a desired value from UpdateCheckAllowed by
     89   // faking the current wall clock time as needed. Restores the default state.
     90   // This is used when testing policies that depend on this one.
     91   //
     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) {
     95     Time next_update_check;
     96     CallMethodWithContext(&NextUpdateCheckTimePolicyImpl::NextUpdateCheckTime,
     97                           &next_update_check,
     98                           ChromeOSPolicy::kNextUpdateCheckPolicyConstants);
     99     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   }
    108 };
    109 
    110 TEST_F(UmChromeOSPolicyTest, UpdateCheckAllowedWaitsForTheTimeout) {
    111   // 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 
    118   fake_state_.updater_provider()->var_last_checked_time()->reset(
    119       new Time(last_checked_time));
    120   CallMethodWithContext(&NextUpdateCheckTimePolicyImpl::NextUpdateCheckTime,
    121                         &next_update_check,
    122                         ChromeOSPolicy::kNextUpdateCheckPolicyConstants);
    123 
    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);
    142   EXPECT_TRUE(result.updates_enabled);
    143   EXPECT_FALSE(result.is_interactive);
    144 }
    145 
    146 TEST_F(UmChromeOSPolicyTest, UpdateCheckAllowedWaitsForOOBE) {
    147   // Update checks are deferred until OOBE is completed.
    148 
    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));
    156   CallMethodWithContext(&NextUpdateCheckTimePolicyImpl::NextUpdateCheckTime,
    157                         &next_update_check,
    158                         ChromeOSPolicy::kNextUpdateCheckPolicyConstants);
    159 
    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);
    181   EXPECT_FALSE(result.is_interactive);
    182 }
    183 
    184 TEST_F(UmChromeOSPolicyTest, UpdateCheckAllowedWithAttributes) {
    185   // Update check is allowed, response includes attributes for use in the
    186   // request.
    187   SetUpdateCheckAllowed(true);
    188 
    189   // Override specific device policy attributes.
    190   fake_state_.device_policy_provider()->var_target_version_prefix()->
    191       reset(new string("1.2"));
    192   fake_state_.device_policy_provider()->var_release_channel_delegated()->
    193       reset(new bool(false));
    194   fake_state_.device_policy_provider()->var_release_channel()->
    195       reset(new string("foo-channel"));
    196 
    197   UpdateCheckParams result;
    198   ExpectPolicyStatus(EvalStatus::kSucceeded,
    199                      &Policy::UpdateCheckAllowed, &result);
    200   EXPECT_TRUE(result.updates_enabled);
    201   EXPECT_EQ("1.2", result.target_version_prefix);
    202   EXPECT_EQ("foo-channel", result.target_channel);
    203   EXPECT_FALSE(result.is_interactive);
    204 }
    205 
    206 TEST_F(UmChromeOSPolicyTest,
    207        UpdateCheckAllowedUpdatesDisabledForUnofficialBuilds) {
    208   // UpdateCheckAllowed should return kAskMeAgainLater if this is an unofficial
    209   // build; we don't want periodic update checks on developer images.
    210 
    211   fake_state_.system_provider()->var_is_official_build()->reset(
    212       new bool(false));
    213 
    214   UpdateCheckParams result;
    215   ExpectPolicyStatus(EvalStatus::kAskMeAgainLater,
    216                      &Policy::UpdateCheckAllowed, &result);
    217 }
    218 
    219 TEST_F(UmChromeOSPolicyTest,
    220        UpdateCheckAllowedUpdatesDisabledWhenNotEnoughSlotsAbUpdates) {
    221   // UpdateCheckAllowed should return false (kSucceeded) if the image booted
    222   // without enough slots to do A/B updates.
    223 
    224   // NOLINTNEXTLINE(readability/casting)
    225   fake_state_.system_provider()->var_num_slots()->reset(new unsigned int(1));
    226 
    227   UpdateCheckParams result;
    228   ExpectPolicyStatus(EvalStatus::kSucceeded,
    229                      &Policy::UpdateCheckAllowed, &result);
    230   EXPECT_FALSE(result.updates_enabled);
    231 }
    232 
    233 TEST_F(UmChromeOSPolicyTest, UpdateCheckAllowedUpdatesDisabledByPolicy) {
    234   // UpdateCheckAllowed should return kAskMeAgainLater because a device policy
    235   // is loaded and prohibits updates.
    236 
    237   SetUpdateCheckAllowed(false);
    238   fake_state_.device_policy_provider()->var_update_disabled()->reset(
    239       new bool(true));
    240 
    241   UpdateCheckParams result;
    242   ExpectPolicyStatus(EvalStatus::kAskMeAgainLater,
    243                      &Policy::UpdateCheckAllowed, &result);
    244 }
    245 
    246 TEST_F(UmChromeOSPolicyTest,
    247        UpdateCheckAllowedForcedUpdateRequestedInteractive) {
    248   // UpdateCheckAllowed should return true because a forced update request was
    249   // signaled for an interactive update.
    250 
    251   SetUpdateCheckAllowed(true);
    252   fake_state_.updater_provider()->var_forced_update_requested()->reset(
    253       new UpdateRequestStatus(UpdateRequestStatus::kInteractive));
    254 
    255   UpdateCheckParams result;
    256   ExpectPolicyStatus(EvalStatus::kSucceeded,
    257                      &Policy::UpdateCheckAllowed, &result);
    258   EXPECT_TRUE(result.updates_enabled);
    259   EXPECT_TRUE(result.is_interactive);
    260 }
    261 
    262 TEST_F(UmChromeOSPolicyTest, UpdateCheckAllowedForcedUpdateRequestedPeriodic) {
    263   // UpdateCheckAllowed should return true because a forced update request was
    264   // signaled for a periodic check.
    265 
    266   SetUpdateCheckAllowed(true);
    267   fake_state_.updater_provider()->var_forced_update_requested()->reset(
    268       new UpdateRequestStatus(UpdateRequestStatus::kPeriodic));
    269 
    270   UpdateCheckParams result;
    271   ExpectPolicyStatus(EvalStatus::kSucceeded,
    272                      &Policy::UpdateCheckAllowed, &result);
    273   EXPECT_TRUE(result.updates_enabled);
    274   EXPECT_FALSE(result.is_interactive);
    275 }
    276 
    277 TEST_F(UmChromeOSPolicyTest, UpdateCheckAllowedKioskPin) {
    278   // Update check is allowed.
    279   SetUpdateCheckAllowed(true);
    280 
    281   // A typical setup for kiosk pin policy: AU disabled, allow kiosk to pin
    282   // and there is a kiosk required platform version.
    283   fake_state_.device_policy_provider()->var_update_disabled()->reset(
    284       new bool(true));
    285   fake_state_.device_policy_provider()
    286       ->var_allow_kiosk_app_control_chrome_version()
    287       ->reset(new bool(true));
    288   fake_state_.system_provider()->var_kiosk_required_platform_version()->reset(
    289       new string("1234.0.0"));
    290 
    291   UpdateCheckParams result;
    292   ExpectPolicyStatus(EvalStatus::kSucceeded,
    293                      &Policy::UpdateCheckAllowed, &result);
    294   EXPECT_TRUE(result.updates_enabled);
    295   EXPECT_EQ("1234.0.0", result.target_version_prefix);
    296   EXPECT_FALSE(result.is_interactive);
    297 }
    298 
    299 TEST_F(UmChromeOSPolicyTest, UpdateCheckAllowedDisabledWhenNoKioskPin) {
    300   // Update check is allowed.
    301   SetUpdateCheckAllowed(true);
    302 
    303   // Disable AU policy is set but kiosk pin policy is set to false. Update is
    304   // disabled in such case.
    305   fake_state_.device_policy_provider()->var_update_disabled()->reset(
    306       new bool(true));
    307   fake_state_.device_policy_provider()
    308       ->var_allow_kiosk_app_control_chrome_version()
    309       ->reset(new bool(false));
    310 
    311   UpdateCheckParams result;
    312   ExpectPolicyStatus(EvalStatus::kAskMeAgainLater,
    313                      &Policy::UpdateCheckAllowed, &result);
    314 }
    315 
    316 TEST_F(UmChromeOSPolicyTest, UpdateCheckAllowedKioskPinWithNoRequiredVersion) {
    317   // Update check is allowed.
    318   SetUpdateCheckAllowed(true);
    319 
    320   // AU disabled, allow kiosk to pin but there is no kiosk required platform
    321   // version (i.e. app does not provide the info). Update to latest in such
    322   // case.
    323   fake_state_.device_policy_provider()->var_update_disabled()->reset(
    324       new bool(true));
    325   fake_state_.device_policy_provider()
    326       ->var_allow_kiosk_app_control_chrome_version()
    327       ->reset(new bool(true));
    328   fake_state_.system_provider()->var_kiosk_required_platform_version()->reset(
    329       new string());
    330 
    331   UpdateCheckParams result;
    332   ExpectPolicyStatus(EvalStatus::kSucceeded,
    333                      &Policy::UpdateCheckAllowed, &result);
    334   EXPECT_TRUE(result.updates_enabled);
    335   EXPECT_TRUE(result.target_version_prefix.empty());
    336   EXPECT_FALSE(result.is_interactive);
    337 }
    338 
    339 TEST_F(UmChromeOSPolicyTest,
    340        UpdateCheckAllowedKioskPinWithFailedGetRequiredVersionCall) {
    341   // AU disabled, allow kiosk to pin but D-Bus call to get required platform
    342   // version failed. Defer update check in this case.
    343   fake_state_.device_policy_provider()->var_update_disabled()->reset(
    344       new bool(true));
    345   fake_state_.device_policy_provider()
    346       ->var_allow_kiosk_app_control_chrome_version()
    347       ->reset(new bool(true));
    348   fake_state_.system_provider()->var_kiosk_required_platform_version()->reset(
    349       nullptr);
    350 
    351   UpdateCheckParams result;
    352   ExpectPolicyStatus(EvalStatus::kAskMeAgainLater,
    353                      &Policy::UpdateCheckAllowed, &result);
    354 }
    355 
    356 TEST_F(UmChromeOSPolicyTest, UpdateCanStartFailsCheckAllowedError) {
    357   // The UpdateCanStart policy fails, not being able to query
    358   // UpdateCheckAllowed.
    359 
    360   // Configure the UpdateCheckAllowed policy to fail.
    361   fake_state_.updater_provider()->var_updater_started_time()->reset(nullptr);
    362 
    363   // Check that the UpdateCanStart fails.
    364   UpdateState update_state = GetDefaultUpdateState(TimeDelta::FromMinutes(10));
    365   UpdateDownloadParams result;
    366   ExpectPolicyStatus(EvalStatus::kFailed,
    367                      &Policy::UpdateCanStart, &result, update_state);
    368 }
    369 
    370 TEST_F(UmChromeOSPolicyTest, UpdateCanStartNotAllowedCheckDue) {
    371   // The UpdateCanStart policy returns false because we are due for another
    372   // update check. Ensure that download related values are still returned.
    373 
    374   SetUpdateCheckAllowed(true);
    375 
    376   // Check that the UpdateCanStart returns false.
    377   UpdateState update_state = GetDefaultUpdateState(TimeDelta::FromMinutes(10));
    378   UpdateDownloadParams result;
    379   ExpectPolicyStatus(EvalStatus::kSucceeded,
    380                      &Policy::UpdateCanStart, &result, update_state);
    381   EXPECT_FALSE(result.update_can_start);
    382   EXPECT_EQ(UpdateCannotStartReason::kCheckDue, result.cannot_start_reason);
    383   EXPECT_EQ(0, result.download_url_idx);
    384   EXPECT_EQ(0, result.download_url_num_errors);
    385 }
    386 
    387 TEST_F(UmChromeOSPolicyTest, UpdateCanStartAllowedNoDevicePolicy) {
    388   // The UpdateCanStart policy returns true; no device policy is loaded.
    389 
    390   SetUpdateCheckAllowed(false);
    391   fake_state_.device_policy_provider()->var_device_policy_is_loaded()->reset(
    392       new bool(false));
    393 
    394   // Check that the UpdateCanStart returns true with no further attributes.
    395   UpdateState update_state = GetDefaultUpdateState(TimeDelta::FromMinutes(10));
    396   UpdateDownloadParams result;
    397   ExpectPolicyStatus(EvalStatus::kSucceeded,
    398                      &Policy::UpdateCanStart, &result, update_state);
    399   EXPECT_TRUE(result.update_can_start);
    400   EXPECT_FALSE(result.p2p_downloading_allowed);
    401   EXPECT_FALSE(result.p2p_sharing_allowed);
    402   EXPECT_EQ(0, result.download_url_idx);
    403   EXPECT_TRUE(result.download_url_allowed);
    404   EXPECT_EQ(0, result.download_url_num_errors);
    405   EXPECT_FALSE(result.do_increment_failures);
    406 }
    407 
    408 TEST_F(UmChromeOSPolicyTest, UpdateCanStartAllowedBlankPolicy) {
    409   // The UpdateCanStart policy returns true; device policy is loaded but imposes
    410   // no restrictions on updating.
    411 
    412   SetUpdateCheckAllowed(false);
    413 
    414   // Check that the UpdateCanStart returns true.
    415   UpdateState update_state = GetDefaultUpdateState(TimeDelta::FromMinutes(10));
    416   UpdateDownloadParams result;
    417   ExpectPolicyStatus(EvalStatus::kSucceeded,
    418                      &Policy::UpdateCanStart, &result, update_state);
    419   EXPECT_TRUE(result.update_can_start);
    420   EXPECT_FALSE(result.p2p_downloading_allowed);
    421   EXPECT_FALSE(result.p2p_sharing_allowed);
    422   EXPECT_EQ(0, result.download_url_idx);
    423   EXPECT_TRUE(result.download_url_allowed);
    424   EXPECT_EQ(0, result.download_url_num_errors);
    425   EXPECT_FALSE(result.do_increment_failures);
    426 }
    427 
    428 TEST_F(UmChromeOSPolicyTest,
    429        UpdateCanStartNotAllowedBackoffNewWaitPeriodApplies) {
    430   // The UpdateCanStart policy returns false; failures are reported and a new
    431   // backoff period is enacted.
    432 
    433   SetUpdateCheckAllowed(false);
    434 
    435   const Time curr_time = fake_clock_.GetWallclockTime();
    436   UpdateState update_state = GetDefaultUpdateState(TimeDelta::FromSeconds(10));
    437   update_state.download_errors_max = 1;
    438   update_state.download_errors.emplace_back(
    439       0, ErrorCode::kDownloadTransferError,
    440       curr_time - TimeDelta::FromSeconds(8));
    441   update_state.download_errors.emplace_back(
    442       0, ErrorCode::kDownloadTransferError,
    443       curr_time - TimeDelta::FromSeconds(2));
    444 
    445   // Check that UpdateCanStart returns false and a new backoff expiry is
    446   // generated.
    447   UpdateDownloadParams result;
    448   ExpectPolicyStatus(EvalStatus::kSucceeded, &Policy::UpdateCanStart, &result,
    449                      update_state);
    450   EXPECT_FALSE(result.update_can_start);
    451   EXPECT_EQ(UpdateCannotStartReason::kBackoff, result.cannot_start_reason);
    452   EXPECT_TRUE(result.do_increment_failures);
    453   EXPECT_LT(curr_time, result.backoff_expiry);
    454 }
    455 
    456 TEST_F(UmChromeOSPolicyTest,
    457        UpdateCanStartNotAllowedBackoffPrevWaitPeriodStillApplies) {
    458   // The UpdateCanStart policy returns false; a previously enacted backoff
    459   // period still applies.
    460 
    461   SetUpdateCheckAllowed(false);
    462 
    463   const Time curr_time = fake_clock_.GetWallclockTime();
    464   UpdateState update_state = GetDefaultUpdateState(TimeDelta::FromSeconds(10));
    465   update_state.download_errors_max = 1;
    466   update_state.download_errors.emplace_back(
    467       0, ErrorCode::kDownloadTransferError,
    468       curr_time - TimeDelta::FromSeconds(8));
    469   update_state.download_errors.emplace_back(
    470       0, ErrorCode::kDownloadTransferError,
    471       curr_time - TimeDelta::FromSeconds(2));
    472   update_state.failures_last_updated = curr_time;
    473   update_state.backoff_expiry = curr_time + TimeDelta::FromMinutes(3);
    474 
    475   // Check that UpdateCanStart returns false and a new backoff expiry is
    476   // generated.
    477   UpdateDownloadParams result;
    478   ExpectPolicyStatus(EvalStatus::kAskMeAgainLater, &Policy::UpdateCanStart,
    479                      &result, update_state);
    480   EXPECT_FALSE(result.update_can_start);
    481   EXPECT_EQ(UpdateCannotStartReason::kBackoff, result.cannot_start_reason);
    482   EXPECT_FALSE(result.do_increment_failures);
    483   EXPECT_LT(curr_time, result.backoff_expiry);
    484 }
    485 
    486 TEST_F(UmChromeOSPolicyTest, UpdateCanStartAllowedBackoffSatisfied) {
    487   // The UpdateCanStart policy returns true; a previously enacted backoff period
    488   // has elapsed, we're good to go.
    489 
    490   SetUpdateCheckAllowed(false);
    491 
    492   const Time curr_time = fake_clock_.GetWallclockTime();
    493   UpdateState update_state = GetDefaultUpdateState(TimeDelta::FromSeconds(10));
    494   update_state.download_errors_max = 1;
    495   update_state.download_errors.emplace_back(
    496       0, ErrorCode::kDownloadTransferError,
    497       curr_time - TimeDelta::FromSeconds(8));
    498   update_state.download_errors.emplace_back(
    499       0, ErrorCode::kDownloadTransferError,
    500       curr_time - TimeDelta::FromSeconds(2));
    501   update_state.failures_last_updated = curr_time - TimeDelta::FromSeconds(1);
    502   update_state.backoff_expiry = curr_time - TimeDelta::FromSeconds(1);
    503 
    504   // Check that UpdateCanStart returns false and a new backoff expiry is
    505   // generated.
    506   UpdateDownloadParams result;
    507   ExpectPolicyStatus(EvalStatus::kSucceeded, &Policy::UpdateCanStart,
    508                      &result, update_state);
    509   EXPECT_TRUE(result.update_can_start);
    510   EXPECT_EQ(UpdateCannotStartReason::kUndefined, result.cannot_start_reason);
    511   EXPECT_EQ(0, result.download_url_idx);
    512   EXPECT_TRUE(result.download_url_allowed);
    513   EXPECT_EQ(0, result.download_url_num_errors);
    514   EXPECT_FALSE(result.do_increment_failures);
    515   EXPECT_EQ(Time(), result.backoff_expiry);
    516 }
    517 
    518 TEST_F(UmChromeOSPolicyTest, UpdateCanStartAllowedBackoffDisabled) {
    519   // The UpdateCanStart policy returns false; failures are reported but backoff
    520   // is disabled.
    521 
    522   SetUpdateCheckAllowed(false);
    523 
    524   const Time curr_time = fake_clock_.GetWallclockTime();
    525   UpdateState update_state = GetDefaultUpdateState(TimeDelta::FromSeconds(10));
    526   update_state.download_errors_max = 1;
    527   update_state.download_errors.emplace_back(
    528       0, ErrorCode::kDownloadTransferError,
    529       curr_time - TimeDelta::FromSeconds(8));
    530   update_state.download_errors.emplace_back(
    531       0, ErrorCode::kDownloadTransferError,
    532       curr_time - TimeDelta::FromSeconds(2));
    533   update_state.is_backoff_disabled = true;
    534 
    535   // Check that UpdateCanStart returns false and a new backoff expiry is
    536   // generated.
    537   UpdateDownloadParams result;
    538   ExpectPolicyStatus(EvalStatus::kSucceeded, &Policy::UpdateCanStart, &result,
    539                      update_state);
    540   EXPECT_TRUE(result.update_can_start);
    541   EXPECT_EQ(UpdateCannotStartReason::kUndefined, result.cannot_start_reason);
    542   EXPECT_EQ(0, result.download_url_idx);
    543   EXPECT_TRUE(result.download_url_allowed);
    544   EXPECT_EQ(0, result.download_url_num_errors);
    545   EXPECT_TRUE(result.do_increment_failures);
    546   EXPECT_EQ(Time(), result.backoff_expiry);
    547 }
    548 
    549 TEST_F(UmChromeOSPolicyTest, UpdateCanStartAllowedNoBackoffInteractive) {
    550   // The UpdateCanStart policy returns false; failures are reported but this is
    551   // an interactive update check.
    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.is_interactive = true;
    565 
    566   // Check that UpdateCanStart returns false and a new backoff expiry is
    567   // generated.
    568   UpdateDownloadParams result;
    569   ExpectPolicyStatus(EvalStatus::kSucceeded, &Policy::UpdateCanStart, &result,
    570                      update_state);
    571   EXPECT_TRUE(result.update_can_start);
    572   EXPECT_EQ(UpdateCannotStartReason::kUndefined, result.cannot_start_reason);
    573   EXPECT_EQ(0, result.download_url_idx);
    574   EXPECT_TRUE(result.download_url_allowed);
    575   EXPECT_EQ(0, result.download_url_num_errors);
    576   EXPECT_TRUE(result.do_increment_failures);
    577   EXPECT_EQ(Time(), result.backoff_expiry);
    578 }
    579 
    580 TEST_F(UmChromeOSPolicyTest, UpdateCanStartAllowedNoBackoffDelta) {
    581   // The UpdateCanStart policy returns false; failures are reported but this is
    582   // a delta payload.
    583 
    584   SetUpdateCheckAllowed(false);
    585 
    586   const Time curr_time = fake_clock_.GetWallclockTime();
    587   UpdateState update_state = GetDefaultUpdateState(TimeDelta::FromSeconds(10));
    588   update_state.download_errors_max = 1;
    589   update_state.download_errors.emplace_back(
    590       0, ErrorCode::kDownloadTransferError,
    591       curr_time - TimeDelta::FromSeconds(8));
    592   update_state.download_errors.emplace_back(
    593       0, ErrorCode::kDownloadTransferError,
    594       curr_time - TimeDelta::FromSeconds(2));
    595   update_state.is_delta_payload = true;
    596 
    597   // Check that UpdateCanStart returns false and a new backoff expiry is
    598   // generated.
    599   UpdateDownloadParams result;
    600   ExpectPolicyStatus(EvalStatus::kSucceeded, &Policy::UpdateCanStart, &result,
    601                      update_state);
    602   EXPECT_TRUE(result.update_can_start);
    603   EXPECT_EQ(UpdateCannotStartReason::kUndefined, result.cannot_start_reason);
    604   EXPECT_EQ(0, result.download_url_idx);
    605   EXPECT_TRUE(result.download_url_allowed);
    606   EXPECT_EQ(0, result.download_url_num_errors);
    607   EXPECT_TRUE(result.do_increment_failures);
    608   EXPECT_EQ(Time(), result.backoff_expiry);
    609 }
    610 
    611 TEST_F(UmChromeOSPolicyTest, UpdateCanStartAllowedNoBackoffUnofficialBuild) {
    612   // The UpdateCanStart policy returns false; failures are reported but this is
    613   // an unofficial build.
    614 
    615   SetUpdateCheckAllowed(false);
    616 
    617   const Time curr_time = fake_clock_.GetWallclockTime();
    618   UpdateState update_state = GetDefaultUpdateState(TimeDelta::FromSeconds(10));
    619   update_state.download_errors_max = 1;
    620   update_state.download_errors.emplace_back(
    621       0, ErrorCode::kDownloadTransferError,
    622       curr_time - TimeDelta::FromSeconds(8));
    623   update_state.download_errors.emplace_back(
    624       0, ErrorCode::kDownloadTransferError,
    625       curr_time - TimeDelta::FromSeconds(2));
    626 
    627   fake_state_.system_provider()->var_is_official_build()->
    628       reset(new bool(false));
    629 
    630   // Check that UpdateCanStart returns false and a new backoff expiry is
    631   // generated.
    632   UpdateDownloadParams result;
    633   ExpectPolicyStatus(EvalStatus::kSucceeded, &Policy::UpdateCanStart, &result,
    634                      update_state);
    635   EXPECT_TRUE(result.update_can_start);
    636   EXPECT_EQ(UpdateCannotStartReason::kUndefined, result.cannot_start_reason);
    637   EXPECT_EQ(0, result.download_url_idx);
    638   EXPECT_TRUE(result.download_url_allowed);
    639   EXPECT_EQ(0, result.download_url_num_errors);
    640   EXPECT_TRUE(result.do_increment_failures);
    641   EXPECT_EQ(Time(), result.backoff_expiry);
    642 }
    643 
    644 TEST_F(UmChromeOSPolicyTest, UpdateCanStartFailsScatteringFailed) {
    645   // The UpdateCanStart policy fails because the UpdateScattering policy it
    646   // depends on fails (unset variable).
    647 
    648   SetUpdateCheckAllowed(false);
    649 
    650   // Override the default seed variable with a null value so that the policy
    651   // request would fail.
    652   // TODO(garnold) This failure may or may not fail a number
    653   // sub-policies/decisions, like scattering and backoff. We'll need a more
    654   // deliberate setup to ensure that we're failing what we want to be failing.
    655   fake_state_.random_provider()->var_seed()->reset(nullptr);
    656 
    657   // Check that the UpdateCanStart fails.
    658   UpdateState update_state = GetDefaultUpdateState(TimeDelta::FromSeconds(1));
    659   UpdateDownloadParams result;
    660   ExpectPolicyStatus(EvalStatus::kFailed,
    661                      &Policy::UpdateCanStart, &result, update_state);
    662 }
    663 
    664 TEST_F(UmChromeOSPolicyTest,
    665        UpdateCanStartNotAllowedScatteringNewWaitPeriodApplies) {
    666   // The UpdateCanStart policy returns false; device policy is loaded and
    667   // scattering applies due to an unsatisfied wait period, which was newly
    668   // generated.
    669 
    670   SetUpdateCheckAllowed(false);
    671   fake_state_.device_policy_provider()->var_scatter_factor()->reset(
    672       new TimeDelta(TimeDelta::FromMinutes(2)));
    673 
    674 
    675   UpdateState update_state = GetDefaultUpdateState(TimeDelta::FromSeconds(1));
    676 
    677   // Check that the UpdateCanStart returns false and a new wait period
    678   // generated.
    679   UpdateDownloadParams result;
    680   ExpectPolicyStatus(EvalStatus::kSucceeded, &Policy::UpdateCanStart, &result,
    681                      update_state);
    682   EXPECT_FALSE(result.update_can_start);
    683   EXPECT_EQ(UpdateCannotStartReason::kScattering, result.cannot_start_reason);
    684   EXPECT_LT(TimeDelta(), result.scatter_wait_period);
    685   EXPECT_EQ(0, result.scatter_check_threshold);
    686 }
    687 
    688 TEST_F(UmChromeOSPolicyTest,
    689        UpdateCanStartNotAllowedScatteringPrevWaitPeriodStillApplies) {
    690   // The UpdateCanStart policy returns false w/ kAskMeAgainLater; device policy
    691   // is loaded and a previously generated scattering period still applies, none
    692   // of the scattering values has changed.
    693 
    694   SetUpdateCheckAllowed(false);
    695   fake_state_.device_policy_provider()->var_scatter_factor()->reset(
    696       new TimeDelta(TimeDelta::FromMinutes(2)));
    697 
    698   UpdateState update_state = GetDefaultUpdateState(TimeDelta::FromSeconds(1));
    699   update_state.scatter_wait_period = TimeDelta::FromSeconds(35);
    700 
    701   // Check that the UpdateCanStart returns false and a new wait period
    702   // generated.
    703   UpdateDownloadParams result;
    704   ExpectPolicyStatus(EvalStatus::kAskMeAgainLater, &Policy::UpdateCanStart,
    705                      &result, update_state);
    706   EXPECT_FALSE(result.update_can_start);
    707   EXPECT_EQ(UpdateCannotStartReason::kScattering, result.cannot_start_reason);
    708   EXPECT_EQ(TimeDelta::FromSeconds(35), result.scatter_wait_period);
    709   EXPECT_EQ(0, result.scatter_check_threshold);
    710 }
    711 
    712 TEST_F(UmChromeOSPolicyTest,
    713        UpdateCanStartNotAllowedScatteringNewCountThresholdApplies) {
    714   // The UpdateCanStart policy returns false; device policy is loaded and
    715   // scattering applies due to an unsatisfied update check count threshold.
    716   //
    717   // This ensures a non-zero check threshold, which may or may not be combined
    718   // with a non-zero wait period (for which we cannot reliably control).
    719 
    720   SetUpdateCheckAllowed(false);
    721   fake_state_.device_policy_provider()->var_scatter_factor()->reset(
    722       new TimeDelta(TimeDelta::FromSeconds(1)));
    723 
    724   UpdateState update_state = GetDefaultUpdateState(TimeDelta::FromSeconds(1));
    725   update_state.scatter_check_threshold_min = 2;
    726   update_state.scatter_check_threshold_max = 5;
    727 
    728   // Check that the UpdateCanStart returns false.
    729   UpdateDownloadParams result;
    730   ExpectPolicyStatus(EvalStatus::kSucceeded, &Policy::UpdateCanStart, &result,
    731                      update_state);
    732   EXPECT_FALSE(result.update_can_start);
    733   EXPECT_EQ(UpdateCannotStartReason::kScattering, result.cannot_start_reason);
    734   EXPECT_LE(2, result.scatter_check_threshold);
    735   EXPECT_GE(5, result.scatter_check_threshold);
    736 }
    737 
    738 TEST_F(UmChromeOSPolicyTest,
    739        UpdateCanStartNotAllowedScatteringPrevCountThresholdStillApplies) {
    740   // The UpdateCanStart policy returns false; device policy is loaded and
    741   // scattering due to a previously generated count threshold still applies.
    742 
    743   SetUpdateCheckAllowed(false);
    744   fake_state_.device_policy_provider()->var_scatter_factor()->reset(
    745       new TimeDelta(TimeDelta::FromSeconds(1)));
    746 
    747   UpdateState update_state = GetDefaultUpdateState(TimeDelta::FromSeconds(1));
    748   update_state.scatter_check_threshold = 3;
    749   update_state.scatter_check_threshold_min = 2;
    750   update_state.scatter_check_threshold_max = 5;
    751 
    752   // Check that the UpdateCanStart returns false.
    753   UpdateDownloadParams result;
    754   ExpectPolicyStatus(EvalStatus::kSucceeded, &Policy::UpdateCanStart, &result,
    755                      update_state);
    756   EXPECT_FALSE(result.update_can_start);
    757   EXPECT_EQ(UpdateCannotStartReason::kScattering, result.cannot_start_reason);
    758   EXPECT_EQ(3, result.scatter_check_threshold);
    759 }
    760 
    761 TEST_F(UmChromeOSPolicyTest, UpdateCanStartAllowedScatteringSatisfied) {
    762   // The UpdateCanStart policy returns true; device policy is loaded and
    763   // scattering is enabled, but both wait period and check threshold are
    764   // satisfied.
    765 
    766   SetUpdateCheckAllowed(false);
    767   fake_state_.device_policy_provider()->var_scatter_factor()->reset(
    768       new TimeDelta(TimeDelta::FromSeconds(120)));
    769 
    770   UpdateState update_state = GetDefaultUpdateState(TimeDelta::FromSeconds(75));
    771   update_state.num_checks = 4;
    772   update_state.scatter_wait_period = TimeDelta::FromSeconds(60);
    773   update_state.scatter_check_threshold = 3;
    774   update_state.scatter_check_threshold_min = 2;
    775   update_state.scatter_check_threshold_max = 5;
    776 
    777   // Check that the UpdateCanStart returns true.
    778   UpdateDownloadParams result;
    779   ExpectPolicyStatus(EvalStatus::kSucceeded, &Policy::UpdateCanStart, &result,
    780                      update_state);
    781   EXPECT_TRUE(result.update_can_start);
    782   EXPECT_EQ(TimeDelta(), result.scatter_wait_period);
    783   EXPECT_EQ(0, result.scatter_check_threshold);
    784   EXPECT_EQ(0, result.download_url_idx);
    785   EXPECT_TRUE(result.download_url_allowed);
    786   EXPECT_EQ(0, result.download_url_num_errors);
    787   EXPECT_FALSE(result.do_increment_failures);
    788 }
    789 
    790 TEST_F(UmChromeOSPolicyTest,
    791        UpdateCanStartAllowedInteractivePreventsScattering) {
    792   // The UpdateCanStart policy returns true; device policy is loaded and
    793   // scattering would have applied, except that the update check is interactive
    794   // and so it is suppressed.
    795 
    796   SetUpdateCheckAllowed(false);
    797   fake_state_.device_policy_provider()->var_scatter_factor()->reset(
    798       new TimeDelta(TimeDelta::FromSeconds(1)));
    799 
    800   UpdateState update_state = GetDefaultUpdateState(TimeDelta::FromSeconds(1));
    801   update_state.is_interactive = true;
    802   update_state.scatter_check_threshold = 0;
    803   update_state.scatter_check_threshold_min = 2;
    804   update_state.scatter_check_threshold_max = 5;
    805 
    806   // Check that the UpdateCanStart returns true.
    807   UpdateDownloadParams result;
    808   ExpectPolicyStatus(EvalStatus::kSucceeded, &Policy::UpdateCanStart, &result,
    809                      update_state);
    810   EXPECT_TRUE(result.update_can_start);
    811   EXPECT_EQ(TimeDelta(), result.scatter_wait_period);
    812   EXPECT_EQ(0, result.scatter_check_threshold);
    813   EXPECT_EQ(0, result.download_url_idx);
    814   EXPECT_TRUE(result.download_url_allowed);
    815   EXPECT_EQ(0, result.download_url_num_errors);
    816   EXPECT_FALSE(result.do_increment_failures);
    817 }
    818 
    819 TEST_F(UmChromeOSPolicyTest,
    820        UpdateCanStartAllowedOobePreventsScattering) {
    821   // The UpdateCanStart policy returns true; device policy is loaded and
    822   // scattering would have applied, except that OOBE was not completed and so it
    823   // is suppressed.
    824 
    825   SetUpdateCheckAllowed(false);
    826   fake_state_.device_policy_provider()->var_scatter_factor()->reset(
    827       new TimeDelta(TimeDelta::FromSeconds(1)));
    828   fake_state_.system_provider()->var_is_oobe_complete()->reset(new bool(false));
    829 
    830   UpdateState update_state = GetDefaultUpdateState(TimeDelta::FromSeconds(1));
    831   update_state.is_interactive = true;
    832   update_state.scatter_check_threshold = 0;
    833   update_state.scatter_check_threshold_min = 2;
    834   update_state.scatter_check_threshold_max = 5;
    835 
    836   // Check that the UpdateCanStart returns true.
    837   UpdateDownloadParams result;
    838   ExpectPolicyStatus(EvalStatus::kSucceeded, &Policy::UpdateCanStart, &result,
    839                      update_state);
    840   EXPECT_TRUE(result.update_can_start);
    841   EXPECT_EQ(TimeDelta(), result.scatter_wait_period);
    842   EXPECT_EQ(0, result.scatter_check_threshold);
    843   EXPECT_EQ(0, result.download_url_idx);
    844   EXPECT_TRUE(result.download_url_allowed);
    845   EXPECT_EQ(0, result.download_url_num_errors);
    846   EXPECT_FALSE(result.do_increment_failures);
    847 }
    848 
    849 TEST_F(UmChromeOSPolicyTest, UpdateCanStartAllowedWithAttributes) {
    850   // The UpdateCanStart policy returns true; device policy permits both HTTP and
    851   // P2P updates, as well as a non-empty target channel string.
    852 
    853   SetUpdateCheckAllowed(false);
    854 
    855   // Override specific device policy attributes.
    856   fake_state_.device_policy_provider()->var_http_downloads_enabled()->reset(
    857       new bool(true));
    858   fake_state_.device_policy_provider()->var_au_p2p_enabled()->reset(
    859       new bool(true));
    860 
    861   // Check that the UpdateCanStart returns true.
    862   UpdateState update_state = GetDefaultUpdateState(TimeDelta::FromMinutes(10));
    863   UpdateDownloadParams result;
    864   ExpectPolicyStatus(EvalStatus::kSucceeded, &Policy::UpdateCanStart, &result,
    865                      update_state);
    866   EXPECT_TRUE(result.update_can_start);
    867   EXPECT_TRUE(result.p2p_downloading_allowed);
    868   EXPECT_TRUE(result.p2p_sharing_allowed);
    869   EXPECT_EQ(0, result.download_url_idx);
    870   EXPECT_TRUE(result.download_url_allowed);
    871   EXPECT_EQ(0, result.download_url_num_errors);
    872   EXPECT_FALSE(result.do_increment_failures);
    873 }
    874 
    875 TEST_F(UmChromeOSPolicyTest, UpdateCanStartAllowedWithP2PFromUpdater) {
    876   // The UpdateCanStart policy returns true; device policy forbids both HTTP and
    877   // P2P updates, but the updater is configured to allow P2P and overrules the
    878   // setting.
    879 
    880   SetUpdateCheckAllowed(false);
    881 
    882   // Override specific device policy attributes.
    883   fake_state_.updater_provider()->var_p2p_enabled()->reset(new bool(true));
    884 
    885   // Check that the UpdateCanStart returns true.
    886   UpdateState update_state = GetDefaultUpdateState(TimeDelta::FromMinutes(10));
    887   UpdateDownloadParams result;
    888   ExpectPolicyStatus(EvalStatus::kSucceeded, &Policy::UpdateCanStart, &result,
    889                      update_state);
    890   EXPECT_TRUE(result.update_can_start);
    891   EXPECT_TRUE(result.p2p_downloading_allowed);
    892   EXPECT_TRUE(result.p2p_sharing_allowed);
    893   EXPECT_EQ(0, result.download_url_idx);
    894   EXPECT_TRUE(result.download_url_allowed);
    895   EXPECT_EQ(0, result.download_url_num_errors);
    896   EXPECT_FALSE(result.do_increment_failures);
    897 }
    898 
    899 TEST_F(UmChromeOSPolicyTest,
    900        UpdateCanStartAllowedP2PDownloadingBlockedDueToOmaha) {
    901   // The UpdateCanStart policy returns true; device policy permits HTTP, but
    902   // policy blocks P2P downloading because Omaha forbids it.  P2P sharing is
    903   // still permitted.
    904 
    905   SetUpdateCheckAllowed(false);
    906 
    907   // Override specific device policy attributes.
    908   fake_state_.device_policy_provider()->var_http_downloads_enabled()->reset(
    909       new bool(true));
    910   fake_state_.device_policy_provider()->var_au_p2p_enabled()->reset(
    911       new bool(true));
    912 
    913   // Check that the UpdateCanStart returns true.
    914   UpdateState update_state = GetDefaultUpdateState(TimeDelta::FromMinutes(10));
    915   update_state.p2p_downloading_disabled = true;
    916   UpdateDownloadParams result;
    917   ExpectPolicyStatus(EvalStatus::kSucceeded, &Policy::UpdateCanStart, &result,
    918                      update_state);
    919   EXPECT_TRUE(result.update_can_start);
    920   EXPECT_FALSE(result.p2p_downloading_allowed);
    921   EXPECT_TRUE(result.p2p_sharing_allowed);
    922 }
    923 
    924 TEST_F(UmChromeOSPolicyTest,
    925        UpdateCanStartAllowedP2PSharingBlockedDueToOmaha) {
    926   // The UpdateCanStart policy returns true; device policy permits HTTP, but
    927   // policy blocks P2P sharing because Omaha forbids it.  P2P downloading is
    928   // still permitted.
    929 
    930   SetUpdateCheckAllowed(false);
    931 
    932   // Override specific device policy attributes.
    933   fake_state_.device_policy_provider()->var_http_downloads_enabled()->reset(
    934       new bool(true));
    935   fake_state_.device_policy_provider()->var_au_p2p_enabled()->reset(
    936       new bool(true));
    937 
    938   // Check that the UpdateCanStart returns true.
    939   UpdateState update_state = GetDefaultUpdateState(TimeDelta::FromMinutes(10));
    940   update_state.p2p_sharing_disabled = true;
    941   UpdateDownloadParams result;
    942   ExpectPolicyStatus(EvalStatus::kSucceeded, &Policy::UpdateCanStart, &result,
    943                      update_state);
    944   EXPECT_TRUE(result.update_can_start);
    945   EXPECT_TRUE(result.p2p_downloading_allowed);
    946   EXPECT_FALSE(result.p2p_sharing_allowed);
    947 }
    948 
    949 TEST_F(UmChromeOSPolicyTest,
    950        UpdateCanStartAllowedP2PDownloadingBlockedDueToNumAttempts) {
    951   // The UpdateCanStart policy returns true; device policy permits HTTP but
    952   // blocks P2P download, because the max number of P2P downloads have been
    953   // attempted. P2P sharing is still permitted.
    954 
    955   SetUpdateCheckAllowed(false);
    956 
    957   // Override specific device policy attributes.
    958   fake_state_.device_policy_provider()->var_http_downloads_enabled()->reset(
    959       new bool(true));
    960   fake_state_.device_policy_provider()->var_au_p2p_enabled()->reset(
    961       new bool(true));
    962 
    963   // Check that the UpdateCanStart returns true.
    964   UpdateState update_state = GetDefaultUpdateState(TimeDelta::FromMinutes(10));
    965   update_state.p2p_num_attempts = ChromeOSPolicy::kMaxP2PAttempts;
    966   UpdateDownloadParams result;
    967   ExpectPolicyStatus(EvalStatus::kSucceeded, &Policy::UpdateCanStart, &result,
    968                      update_state);
    969   EXPECT_TRUE(result.update_can_start);
    970   EXPECT_FALSE(result.p2p_downloading_allowed);
    971   EXPECT_TRUE(result.p2p_sharing_allowed);
    972 }
    973 
    974 TEST_F(UmChromeOSPolicyTest,
    975        UpdateCanStartAllowedP2PDownloadingBlockedDueToAttemptsPeriod) {
    976   // The UpdateCanStart policy returns true; device policy permits HTTP but
    977   // blocks P2P download, because the max period for attempt to download via P2P
    978   // has elapsed. P2P sharing is still permitted.
    979 
    980   SetUpdateCheckAllowed(false);
    981 
    982   // Override specific device policy attributes.
    983   fake_state_.device_policy_provider()->var_http_downloads_enabled()->reset(
    984       new bool(true));
    985   fake_state_.device_policy_provider()->var_au_p2p_enabled()->reset(
    986       new bool(true));
    987 
    988   // Check that the UpdateCanStart returns true.
    989   UpdateState update_state = GetDefaultUpdateState(TimeDelta::FromMinutes(10));
    990   update_state.p2p_num_attempts = 1;
    991   update_state.p2p_first_attempted =
    992       fake_clock_.GetWallclockTime() -
    993       TimeDelta::FromSeconds(
    994           ChromeOSPolicy::kMaxP2PAttemptsPeriodInSeconds + 1);
    995   UpdateDownloadParams result;
    996   ExpectPolicyStatus(EvalStatus::kSucceeded, &Policy::UpdateCanStart, &result,
    997                      update_state);
    998   EXPECT_TRUE(result.update_can_start);
    999   EXPECT_FALSE(result.p2p_downloading_allowed);
   1000   EXPECT_TRUE(result.p2p_sharing_allowed);
   1001 }
   1002 
   1003 TEST_F(UmChromeOSPolicyTest,
   1004        UpdateCanStartAllowedWithHttpUrlForUnofficialBuild) {
   1005   // The UpdateCanStart policy returns true; device policy forbids both HTTP and
   1006   // P2P updates, but marking this an unofficial build overrules the HTTP
   1007   // setting.
   1008 
   1009   SetUpdateCheckAllowed(false);
   1010 
   1011   // Override specific device policy attributes.
   1012   fake_state_.device_policy_provider()->var_http_downloads_enabled()->reset(
   1013       new bool(false));
   1014   fake_state_.system_provider()->var_is_official_build()->
   1015       reset(new bool(false));
   1016 
   1017   // Check that the UpdateCanStart returns true.
   1018   UpdateState update_state = GetDefaultUpdateState(TimeDelta::FromMinutes(10));
   1019   UpdateDownloadParams result;
   1020   ExpectPolicyStatus(EvalStatus::kSucceeded, &Policy::UpdateCanStart, &result,
   1021                      update_state);
   1022   EXPECT_TRUE(result.update_can_start);
   1023   EXPECT_EQ(0, result.download_url_idx);
   1024   EXPECT_TRUE(result.download_url_allowed);
   1025   EXPECT_EQ(0, result.download_url_num_errors);
   1026   EXPECT_FALSE(result.do_increment_failures);
   1027 }
   1028 
   1029 TEST_F(UmChromeOSPolicyTest, UpdateCanStartAllowedWithHttpsUrl) {
   1030   // The UpdateCanStart policy returns true; device policy forbids both HTTP and
   1031   // P2P updates, but an HTTPS URL is provided and selected for download.
   1032 
   1033   SetUpdateCheckAllowed(false);
   1034 
   1035   // Override specific device policy attributes.
   1036   fake_state_.device_policy_provider()->var_http_downloads_enabled()->reset(
   1037       new bool(false));
   1038 
   1039   // Add an HTTPS URL.
   1040   UpdateState update_state = GetDefaultUpdateState(TimeDelta::FromMinutes(10));
   1041   update_state.download_urls.emplace_back("https://secure/url/");
   1042 
   1043   // Check that the UpdateCanStart returns true.
   1044   UpdateDownloadParams result;
   1045   ExpectPolicyStatus(EvalStatus::kSucceeded, &Policy::UpdateCanStart, &result,
   1046                      update_state);
   1047   EXPECT_TRUE(result.update_can_start);
   1048   EXPECT_EQ(1, result.download_url_idx);
   1049   EXPECT_TRUE(result.download_url_allowed);
   1050   EXPECT_EQ(0, result.download_url_num_errors);
   1051   EXPECT_FALSE(result.do_increment_failures);
   1052 }
   1053 
   1054 TEST_F(UmChromeOSPolicyTest, UpdateCanStartAllowedMaxErrorsNotExceeded) {
   1055   // The UpdateCanStart policy returns true; the first URL has download errors
   1056   // but does not exceed the maximum allowed number of failures, so it is stilli
   1057   // usable.
   1058 
   1059   SetUpdateCheckAllowed(false);
   1060 
   1061   // Add a second URL; update with this URL attempted and failed enough times to
   1062   // disqualify the current (first) URL.
   1063   UpdateState update_state = GetDefaultUpdateState(TimeDelta::FromMinutes(10));
   1064   update_state.num_checks = 5;
   1065   update_state.download_urls.emplace_back("http://another/fake/url/");
   1066   Time t = fake_clock_.GetWallclockTime() - TimeDelta::FromSeconds(12);
   1067   for (int i = 0; i < 5; i++) {
   1068     update_state.download_errors.emplace_back(
   1069         0, ErrorCode::kDownloadTransferError, t);
   1070     t += TimeDelta::FromSeconds(1);
   1071   }
   1072 
   1073   // Check that the UpdateCanStart returns true.
   1074   UpdateDownloadParams result;
   1075   ExpectPolicyStatus(EvalStatus::kSucceeded, &Policy::UpdateCanStart, &result,
   1076                      update_state);
   1077   EXPECT_TRUE(result.update_can_start);
   1078   EXPECT_EQ(0, result.download_url_idx);
   1079   EXPECT_TRUE(result.download_url_allowed);
   1080   EXPECT_EQ(5, result.download_url_num_errors);
   1081   EXPECT_FALSE(result.do_increment_failures);
   1082 }
   1083 
   1084 TEST_F(UmChromeOSPolicyTest, UpdateCanStartAllowedWithSecondUrlMaxExceeded) {
   1085   // The UpdateCanStart policy returns true; the first URL exceeded the maximum
   1086   // allowed number of failures, but a second URL is available.
   1087 
   1088   SetUpdateCheckAllowed(false);
   1089 
   1090   // Add a second URL; update with this URL attempted and failed enough times to
   1091   // disqualify the current (first) URL.
   1092   UpdateState update_state = GetDefaultUpdateState(TimeDelta::FromMinutes(10));
   1093   update_state.num_checks = 10;
   1094   update_state.download_urls.emplace_back("http://another/fake/url/");
   1095   Time t = fake_clock_.GetWallclockTime() - TimeDelta::FromSeconds(12);
   1096   for (int i = 0; i < 11; i++) {
   1097     update_state.download_errors.emplace_back(
   1098         0, ErrorCode::kDownloadTransferError, t);
   1099     t += TimeDelta::FromSeconds(1);
   1100   }
   1101 
   1102   // Check that the UpdateCanStart returns true.
   1103   UpdateDownloadParams result;
   1104   ExpectPolicyStatus(EvalStatus::kSucceeded, &Policy::UpdateCanStart, &result,
   1105                      update_state);
   1106   EXPECT_TRUE(result.update_can_start);
   1107   EXPECT_EQ(1, result.download_url_idx);
   1108   EXPECT_TRUE(result.download_url_allowed);
   1109   EXPECT_EQ(0, result.download_url_num_errors);
   1110   EXPECT_FALSE(result.do_increment_failures);
   1111 }
   1112 
   1113 TEST_F(UmChromeOSPolicyTest, UpdateCanStartAllowedWithSecondUrlHardError) {
   1114   // The UpdateCanStart policy returns true; the first URL fails with a hard
   1115   // error, but a second URL is available.
   1116 
   1117   SetUpdateCheckAllowed(false);
   1118 
   1119   // Add a second URL; update with this URL attempted and failed in a way that
   1120   // causes it to switch directly to the next URL.
   1121   UpdateState update_state = GetDefaultUpdateState(TimeDelta::FromMinutes(10));
   1122   update_state.num_checks = 10;
   1123   update_state.download_urls.emplace_back("http://another/fake/url/");
   1124   update_state.download_errors.emplace_back(
   1125       0, ErrorCode::kPayloadHashMismatchError,
   1126       fake_clock_.GetWallclockTime() - TimeDelta::FromSeconds(1));
   1127 
   1128   // Check that the UpdateCanStart returns true.
   1129   UpdateDownloadParams result;
   1130   ExpectPolicyStatus(EvalStatus::kSucceeded, &Policy::UpdateCanStart, &result,
   1131                      update_state);
   1132   EXPECT_TRUE(result.update_can_start);
   1133   EXPECT_EQ(1, result.download_url_idx);
   1134   EXPECT_TRUE(result.download_url_allowed);
   1135   EXPECT_EQ(0, result.download_url_num_errors);
   1136   EXPECT_FALSE(result.do_increment_failures);
   1137 }
   1138 
   1139 TEST_F(UmChromeOSPolicyTest, UpdateCanStartAllowedUrlWrapsAround) {
   1140   // The UpdateCanStart policy returns true; URL search properly wraps around
   1141   // the last one on the list.
   1142 
   1143   SetUpdateCheckAllowed(false);
   1144 
   1145   // Add a second URL; update with this URL attempted and failed in a way that
   1146   // causes it to switch directly to the next URL. We must disable backoff in
   1147   // order for it not to interfere.
   1148   UpdateState update_state = GetDefaultUpdateState(TimeDelta::FromMinutes(10));
   1149   update_state.num_checks = 1;
   1150   update_state.is_backoff_disabled = true;
   1151   update_state.download_urls.emplace_back("http://another/fake/url/");
   1152   update_state.download_errors.emplace_back(
   1153       1, ErrorCode::kPayloadHashMismatchError,
   1154       fake_clock_.GetWallclockTime() - TimeDelta::FromSeconds(1));
   1155 
   1156   // Check that the UpdateCanStart returns true.
   1157   UpdateDownloadParams result;
   1158   ExpectPolicyStatus(EvalStatus::kSucceeded, &Policy::UpdateCanStart, &result,
   1159                      update_state);
   1160   EXPECT_TRUE(result.update_can_start);
   1161   EXPECT_EQ(0, result.download_url_idx);
   1162   EXPECT_TRUE(result.download_url_allowed);
   1163   EXPECT_EQ(0, result.download_url_num_errors);
   1164   EXPECT_TRUE(result.do_increment_failures);
   1165 }
   1166 
   1167 TEST_F(UmChromeOSPolicyTest, UpdateCanStartNotAllowedNoUsableUrls) {
   1168   // The UpdateCanStart policy returns false; there's a single HTTP URL but its
   1169   // use is forbidden by policy.
   1170   //
   1171   // Note: In the case where no usable URLs are found, the policy should not
   1172   // increment the number of failed attempts! Doing so would result in a
   1173   // non-idempotent semantics, and does not fall within the intended purpose of
   1174   // the backoff mechanism anyway.
   1175 
   1176   SetUpdateCheckAllowed(false);
   1177 
   1178   // Override specific device policy attributes.
   1179   fake_state_.device_policy_provider()->var_http_downloads_enabled()->reset(
   1180       new bool(false));
   1181 
   1182   // Check that the UpdateCanStart returns false.
   1183   UpdateState update_state = GetDefaultUpdateState(TimeDelta::FromMinutes(10));
   1184   UpdateDownloadParams result;
   1185   ExpectPolicyStatus(EvalStatus::kSucceeded, &Policy::UpdateCanStart, &result,
   1186                      update_state);
   1187   EXPECT_FALSE(result.update_can_start);
   1188   EXPECT_EQ(UpdateCannotStartReason::kCannotDownload,
   1189             result.cannot_start_reason);
   1190   EXPECT_FALSE(result.do_increment_failures);
   1191 }
   1192 
   1193 TEST_F(UmChromeOSPolicyTest, UpdateCanStartAllowedNoUsableUrlsButP2PEnabled) {
   1194   // The UpdateCanStart policy returns true; there's a single HTTP URL but its
   1195   // use is forbidden by policy, however P2P is enabled. The result indicates
   1196   // that no URL can be used.
   1197   //
   1198   // Note: The number of failed attempts should not increase in this case (see
   1199   // above test).
   1200 
   1201   SetUpdateCheckAllowed(false);
   1202 
   1203   // Override specific device policy attributes.
   1204   fake_state_.device_policy_provider()->var_au_p2p_enabled()->reset(
   1205       new bool(true));
   1206   fake_state_.device_policy_provider()->var_http_downloads_enabled()->reset(
   1207       new bool(false));
   1208 
   1209   // Check that the UpdateCanStart returns true.
   1210   UpdateState update_state = GetDefaultUpdateState(TimeDelta::FromMinutes(10));
   1211   UpdateDownloadParams result;
   1212   ExpectPolicyStatus(EvalStatus::kSucceeded, &Policy::UpdateCanStart, &result,
   1213                      update_state);
   1214   EXPECT_TRUE(result.update_can_start);
   1215   EXPECT_TRUE(result.p2p_downloading_allowed);
   1216   EXPECT_TRUE(result.p2p_sharing_allowed);
   1217   EXPECT_GT(0, result.download_url_idx);
   1218   EXPECT_TRUE(result.download_url_allowed);
   1219   EXPECT_EQ(0, result.download_url_num_errors);
   1220   EXPECT_FALSE(result.do_increment_failures);
   1221 }
   1222 
   1223 TEST_F(UmChromeOSPolicyTest,
   1224        UpdateCanStartAllowedNoUsableUrlsButEnterpriseEnrolled) {
   1225   // The UpdateCanStart policy returns true; there's a single HTTP URL but its
   1226   // use is forbidden by policy, and P2P is unset on the policy, however the
   1227   // device is enterprise-enrolled so P2P is allowed. The result indicates that
   1228   // no URL can be used.
   1229   //
   1230   // Note: The number of failed attempts should not increase in this case (see
   1231   // above test).
   1232 
   1233   SetUpdateCheckAllowed(false);
   1234 
   1235   // Override specific device policy attributes.
   1236   fake_state_.device_policy_provider()->var_au_p2p_enabled()->reset(nullptr);
   1237   fake_state_.device_policy_provider()->var_owner()->reset(nullptr);
   1238   fake_state_.device_policy_provider()->var_http_downloads_enabled()->reset(
   1239       new bool(false));
   1240 
   1241   // Check that the UpdateCanStart returns true.
   1242   UpdateState update_state = GetDefaultUpdateState(TimeDelta::FromMinutes(10));
   1243   UpdateDownloadParams result;
   1244   ExpectPolicyStatus(EvalStatus::kSucceeded, &Policy::UpdateCanStart, &result,
   1245                      update_state);
   1246   EXPECT_TRUE(result.update_can_start);
   1247   EXPECT_TRUE(result.p2p_downloading_allowed);
   1248   EXPECT_TRUE(result.p2p_sharing_allowed);
   1249   EXPECT_GT(0, result.download_url_idx);
   1250   EXPECT_TRUE(result.download_url_allowed);
   1251   EXPECT_EQ(0, result.download_url_num_errors);
   1252   EXPECT_FALSE(result.do_increment_failures);
   1253 }
   1254 
   1255 TEST_F(UmChromeOSPolicyTest, UpdateDownloadAllowedEthernetDefault) {
   1256   // Ethernet is always allowed.
   1257 
   1258   fake_state_.shill_provider()->var_conn_type()->
   1259       reset(new ConnectionType(ConnectionType::kEthernet));
   1260 
   1261   bool result;
   1262   ExpectPolicyStatus(EvalStatus::kSucceeded,
   1263                      &Policy::UpdateDownloadAllowed, &result);
   1264   EXPECT_TRUE(result);
   1265 }
   1266 
   1267 TEST_F(UmChromeOSPolicyTest, UpdateDownloadAllowedWifiDefault) {
   1268   // Wifi is allowed if not tethered.
   1269 
   1270   fake_state_.shill_provider()->var_conn_type()->
   1271       reset(new ConnectionType(ConnectionType::kWifi));
   1272 
   1273   bool result;
   1274   ExpectPolicyStatus(EvalStatus::kSucceeded,
   1275                      &Policy::UpdateDownloadAllowed, &result);
   1276   EXPECT_TRUE(result);
   1277 }
   1278 
   1279 TEST_F(UmChromeOSPolicyTest,
   1280        UpdateCurrentConnectionNotAllowedWifiTetheredDefault) {
   1281   // Tethered wifi is not allowed by default.
   1282 
   1283   fake_state_.shill_provider()->var_conn_type()->
   1284       reset(new ConnectionType(ConnectionType::kWifi));
   1285   fake_state_.shill_provider()->var_conn_tethering()->
   1286       reset(new ConnectionTethering(ConnectionTethering::kConfirmed));
   1287 
   1288   bool result;
   1289   ExpectPolicyStatus(EvalStatus::kAskMeAgainLater,
   1290                      &Policy::UpdateDownloadAllowed, &result);
   1291 }
   1292 
   1293 TEST_F(UmChromeOSPolicyTest,
   1294        UpdateDownloadAllowedWifiTetheredPolicyOverride) {
   1295   // Tethered wifi can be allowed by policy.
   1296 
   1297   fake_state_.shill_provider()->var_conn_type()->
   1298       reset(new ConnectionType(ConnectionType::kWifi));
   1299   fake_state_.shill_provider()->var_conn_tethering()->
   1300       reset(new ConnectionTethering(ConnectionTethering::kConfirmed));
   1301   set<ConnectionType> allowed_connections;
   1302   allowed_connections.insert(ConnectionType::kCellular);
   1303   fake_state_.device_policy_provider()->
   1304       var_allowed_connection_types_for_update()->
   1305       reset(new set<ConnectionType>(allowed_connections));
   1306 
   1307   bool result;
   1308   ExpectPolicyStatus(EvalStatus::kSucceeded,
   1309                      &Policy::UpdateDownloadAllowed, &result);
   1310   EXPECT_TRUE(result);
   1311 }
   1312 
   1313 TEST_F(UmChromeOSPolicyTest, UpdateDownloadAllowedWimaxDefault) {
   1314   // Wimax is always allowed.
   1315 
   1316   fake_state_.shill_provider()->var_conn_type()->
   1317       reset(new ConnectionType(ConnectionType::kWifi));
   1318 
   1319   bool result;
   1320   ExpectPolicyStatus(EvalStatus::kSucceeded,
   1321                      &Policy::UpdateDownloadAllowed, &result);
   1322   EXPECT_TRUE(result);
   1323 }
   1324 
   1325 TEST_F(UmChromeOSPolicyTest,
   1326        UpdateCurrentConnectionNotAllowedBluetoothDefault) {
   1327   // Bluetooth is never allowed.
   1328 
   1329   fake_state_.shill_provider()->var_conn_type()->
   1330       reset(new ConnectionType(ConnectionType::kBluetooth));
   1331 
   1332   bool result;
   1333   ExpectPolicyStatus(EvalStatus::kAskMeAgainLater,
   1334                      &Policy::UpdateDownloadAllowed, &result);
   1335 }
   1336 
   1337 TEST_F(UmChromeOSPolicyTest,
   1338        UpdateCurrentConnectionNotAllowedBluetoothPolicyCannotOverride) {
   1339   // Bluetooth cannot be allowed even by policy.
   1340 
   1341   fake_state_.shill_provider()->var_conn_type()->
   1342       reset(new ConnectionType(ConnectionType::kBluetooth));
   1343   set<ConnectionType> allowed_connections;
   1344   allowed_connections.insert(ConnectionType::kBluetooth);
   1345   fake_state_.device_policy_provider()->
   1346       var_allowed_connection_types_for_update()->
   1347       reset(new set<ConnectionType>(allowed_connections));
   1348 
   1349   bool result;
   1350   ExpectPolicyStatus(EvalStatus::kAskMeAgainLater,
   1351                      &Policy::UpdateDownloadAllowed, &result);
   1352 }
   1353 
   1354 TEST_F(UmChromeOSPolicyTest, UpdateCurrentConnectionNotAllowedCellularDefault) {
   1355   // Cellular is not allowed by default.
   1356 
   1357   fake_state_.shill_provider()->var_conn_type()->
   1358       reset(new ConnectionType(ConnectionType::kCellular));
   1359 
   1360   bool result;
   1361   ExpectPolicyStatus(EvalStatus::kAskMeAgainLater,
   1362                      &Policy::UpdateDownloadAllowed, &result);
   1363 }
   1364 
   1365 TEST_F(UmChromeOSPolicyTest,
   1366        UpdateDownloadAllowedCellularPolicyOverride) {
   1367   // Update over cellular can be enabled by policy.
   1368 
   1369   fake_state_.shill_provider()->var_conn_type()->
   1370       reset(new ConnectionType(ConnectionType::kCellular));
   1371   set<ConnectionType> allowed_connections;
   1372   allowed_connections.insert(ConnectionType::kCellular);
   1373   fake_state_.device_policy_provider()->
   1374       var_allowed_connection_types_for_update()->
   1375       reset(new set<ConnectionType>(allowed_connections));
   1376 
   1377   bool result;
   1378   ExpectPolicyStatus(EvalStatus::kSucceeded,
   1379                      &Policy::UpdateDownloadAllowed, &result);
   1380   EXPECT_TRUE(result);
   1381 }
   1382 
   1383 TEST_F(UmChromeOSPolicyTest,
   1384        UpdateDownloadAllowedCellularUserOverride) {
   1385   // Update over cellular can be enabled by user settings, but only if policy
   1386   // is present and does not determine allowed connections.
   1387 
   1388   fake_state_.shill_provider()->var_conn_type()->
   1389       reset(new ConnectionType(ConnectionType::kCellular));
   1390   set<ConnectionType> allowed_connections;
   1391   allowed_connections.insert(ConnectionType::kCellular);
   1392   fake_state_.updater_provider()->var_cellular_enabled()->
   1393       reset(new bool(true));
   1394 
   1395   bool result;
   1396   ExpectPolicyStatus(EvalStatus::kSucceeded,
   1397                      &Policy::UpdateDownloadAllowed, &result);
   1398   EXPECT_TRUE(result);
   1399 }
   1400 
   1401 TEST_F(UmChromeOSPolicyTest,
   1402        UpdateCanStartAllowedScatteringSupressedDueToP2P) {
   1403   // The UpdateCanStart policy returns true; scattering should have applied, but
   1404   // P2P download is allowed. Scattering values are nonetheless returned, and so
   1405   // are download URL values, albeit the latter are not allowed to be used.
   1406 
   1407   SetUpdateCheckAllowed(false);
   1408   fake_state_.device_policy_provider()->var_scatter_factor()->reset(
   1409       new TimeDelta(TimeDelta::FromMinutes(2)));
   1410   fake_state_.updater_provider()->var_p2p_enabled()->reset(new bool(true));
   1411 
   1412   UpdateState update_state = GetDefaultUpdateState(TimeDelta::FromSeconds(1));
   1413   update_state.scatter_wait_period = TimeDelta::FromSeconds(35);
   1414 
   1415   UpdateDownloadParams result;
   1416   ExpectPolicyStatus(EvalStatus::kSucceeded, &Policy::UpdateCanStart,
   1417                      &result, update_state);
   1418   EXPECT_TRUE(result.update_can_start);
   1419   EXPECT_EQ(0, result.download_url_idx);
   1420   EXPECT_FALSE(result.download_url_allowed);
   1421   EXPECT_EQ(0, result.download_url_num_errors);
   1422   EXPECT_TRUE(result.p2p_downloading_allowed);
   1423   EXPECT_TRUE(result.p2p_sharing_allowed);
   1424   EXPECT_FALSE(result.do_increment_failures);
   1425   EXPECT_EQ(TimeDelta::FromSeconds(35), result.scatter_wait_period);
   1426   EXPECT_EQ(0, result.scatter_check_threshold);
   1427 }
   1428 
   1429 TEST_F(UmChromeOSPolicyTest,
   1430        UpdateCanStartAllowedBackoffSupressedDueToP2P) {
   1431   // The UpdateCanStart policy returns true; backoff should have applied, but
   1432   // P2P download is allowed. Backoff values are nonetheless returned, and so
   1433   // are download URL values, albeit the latter are not allowed to be used.
   1434 
   1435   SetUpdateCheckAllowed(false);
   1436 
   1437   const Time curr_time = fake_clock_.GetWallclockTime();
   1438   UpdateState update_state = GetDefaultUpdateState(TimeDelta::FromSeconds(10));
   1439   update_state.download_errors_max = 1;
   1440   update_state.download_errors.emplace_back(
   1441       0, ErrorCode::kDownloadTransferError,
   1442       curr_time - TimeDelta::FromSeconds(8));
   1443   update_state.download_errors.emplace_back(
   1444       0, ErrorCode::kDownloadTransferError,
   1445       curr_time - TimeDelta::FromSeconds(2));
   1446   fake_state_.updater_provider()->var_p2p_enabled()->reset(new bool(true));
   1447 
   1448   UpdateDownloadParams result;
   1449   ExpectPolicyStatus(EvalStatus::kSucceeded, &Policy::UpdateCanStart, &result,
   1450                      update_state);
   1451   EXPECT_TRUE(result.update_can_start);
   1452   EXPECT_EQ(0, result.download_url_idx);
   1453   EXPECT_FALSE(result.download_url_allowed);
   1454   EXPECT_EQ(0, result.download_url_num_errors);
   1455   EXPECT_TRUE(result.p2p_downloading_allowed);
   1456   EXPECT_TRUE(result.p2p_sharing_allowed);
   1457   EXPECT_TRUE(result.do_increment_failures);
   1458   EXPECT_LT(curr_time, result.backoff_expiry);
   1459 }
   1460 
   1461 TEST_F(UmChromeOSPolicyTest, P2PEnabledNotAllowed) {
   1462   bool result;
   1463   ExpectPolicyStatus(EvalStatus::kSucceeded, &Policy::P2PEnabled, &result);
   1464   EXPECT_FALSE(result);
   1465 }
   1466 
   1467 TEST_F(UmChromeOSPolicyTest, P2PEnabledAllowedByDevicePolicy) {
   1468   fake_state_.device_policy_provider()->var_au_p2p_enabled()->reset(
   1469       new bool(true));
   1470 
   1471   bool result;
   1472   ExpectPolicyStatus(EvalStatus::kSucceeded, &Policy::P2PEnabled, &result);
   1473   EXPECT_TRUE(result);
   1474 }
   1475 
   1476 TEST_F(UmChromeOSPolicyTest, P2PEnabledAllowedByUpdater) {
   1477   fake_state_.updater_provider()->var_p2p_enabled()->reset(new bool(true));
   1478 
   1479   bool result;
   1480   ExpectPolicyStatus(EvalStatus::kSucceeded, &Policy::P2PEnabled, &result);
   1481   EXPECT_TRUE(result);
   1482 }
   1483 
   1484 TEST_F(UmChromeOSPolicyTest, P2PEnabledAllowedDeviceEnterpriseEnrolled) {
   1485   fake_state_.device_policy_provider()->var_au_p2p_enabled()->reset(nullptr);
   1486   fake_state_.device_policy_provider()->var_owner()->reset(nullptr);
   1487 
   1488   bool result;
   1489   ExpectPolicyStatus(EvalStatus::kSucceeded, &Policy::P2PEnabled, &result);
   1490   EXPECT_TRUE(result);
   1491 }
   1492 
   1493 TEST_F(UmChromeOSPolicyTest, P2PEnabledChangedBlocks) {
   1494   bool result;
   1495   ExpectPolicyStatus(EvalStatus::kAskMeAgainLater, &Policy::P2PEnabledChanged,
   1496                      &result, false);
   1497 }
   1498 
   1499 }  // namespace chromeos_update_manager
   1500