blob: ab0ee20bfce1d349b79cff7cccf0439c909a462f [file] [log] [blame]
Gilad Arnoldae47a9a2014-03-26 12:16:47 -07001// Copyright (c) 2014 The Chromium OS Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
Alex Deymo63784a52014-05-28 10:46:14 -07005#include "update_engine/update_manager/real_updater_provider.h"
Gilad Arnoldae47a9a2014-03-26 12:16:47 -07006
Ben Chan02f7c1d2014-10-18 15:18:02 -07007#include <memory>
Gilad Arnoldae47a9a2014-03-26 12:16:47 -07008#include <string>
9
Gilad Arnoldae47a9a2014-03-26 12:16:47 -070010#include <base/time/time.h>
11#include <chromeos/dbus/service_constants.h>
12#include <gtest/gtest.h>
13
14#include "update_engine/fake_clock.h"
Gilad Arnold5bb4c902014-04-10 12:32:13 -070015#include "update_engine/fake_system_state.h"
Gilad Arnoldae47a9a2014-03-26 12:16:47 -070016#include "update_engine/omaha_request_params.h"
Gilad Arnoldae47a9a2014-03-26 12:16:47 -070017#include "update_engine/prefs_mock.h"
18#include "update_engine/update_attempter_mock.h"
Alex Deymo63784a52014-05-28 10:46:14 -070019#include "update_engine/update_manager/umtest_utils.h"
Gilad Arnoldae47a9a2014-03-26 12:16:47 -070020
21using base::Time;
22using base::TimeDelta;
23using chromeos_update_engine::FakeClock;
Gilad Arnold5bb4c902014-04-10 12:32:13 -070024using chromeos_update_engine::FakeSystemState;
Gilad Arnoldae47a9a2014-03-26 12:16:47 -070025using chromeos_update_engine::OmahaRequestParams;
26using chromeos_update_engine::PrefsMock;
27using chromeos_update_engine::UpdateAttempterMock;
28using std::string;
Ben Chan02f7c1d2014-10-18 15:18:02 -070029using std::unique_ptr;
Gilad Arnoldae47a9a2014-03-26 12:16:47 -070030using testing::Return;
31using testing::SetArgPointee;
32using testing::StrEq;
33using testing::_;
34
35namespace {
36
37// Generates a fixed timestamp for use in faking the current time.
38Time FixedTime() {
39 Time::Exploded now_exp;
40 now_exp.year = 2014;
41 now_exp.month = 3;
42 now_exp.day_of_week = 2;
43 now_exp.day_of_month = 18;
44 now_exp.hour = 8;
45 now_exp.minute = 5;
46 now_exp.second = 33;
47 now_exp.millisecond = 675;
48 return Time::FromLocalExploded(now_exp);
49}
50
51// Rounds down a timestamp to the nearest second. This is useful when faking
52// times that are converted to time_t (no sub-second resolution).
53Time RoundedToSecond(Time time) {
54 Time::Exploded exp;
55 time.LocalExplode(&exp);
56 exp.millisecond = 0;
57 return Time::FromLocalExploded(exp);
58}
59
60} // namespace
61
Alex Deymo63784a52014-05-28 10:46:14 -070062namespace chromeos_update_manager {
Gilad Arnoldae47a9a2014-03-26 12:16:47 -070063
Alex Deymo63784a52014-05-28 10:46:14 -070064class UmRealUpdaterProviderTest : public ::testing::Test {
Gilad Arnoldae47a9a2014-03-26 12:16:47 -070065 protected:
66 virtual void SetUp() {
Alex Deymoc7ab6162014-04-25 18:32:50 -070067 fake_clock_ = fake_sys_state_.fake_clock();
Gilad Arnold5bb4c902014-04-10 12:32:13 -070068 provider_.reset(new RealUpdaterProvider(&fake_sys_state_));
Alex Vakulenko88b591f2014-08-28 16:48:57 -070069 ASSERT_NE(nullptr, provider_.get());
Alex Vakulenko072359c2014-07-18 11:41:07 -070070 // Check that provider initializes correctly.
Gilad Arnoldae47a9a2014-03-26 12:16:47 -070071 ASSERT_TRUE(provider_->Init());
72 }
73
Gilad Arnoldae47a9a2014-03-26 12:16:47 -070074 // Sets up mock expectations for testing a variable that reads a Boolean pref
75 // |key|. |key_exists| determines whether the key is present. If it is, then
76 // |get_boolean_success| determines whether reading it is successful, and if
77 // so |output| is the value being read.
78 void SetupReadBooleanPref(const char* key, bool key_exists,
79 bool get_boolean_success, bool output) {
Gilad Arnold5bb4c902014-04-10 12:32:13 -070080 PrefsMock* const mock_prefs = fake_sys_state_.mock_prefs();
Gilad Arnoldae47a9a2014-03-26 12:16:47 -070081 EXPECT_CALL(*mock_prefs, Exists(StrEq(key))).WillOnce(Return(key_exists));
82 if (key_exists) {
83 auto& get_boolean = EXPECT_CALL(
Gilad Arnold5bb4c902014-04-10 12:32:13 -070084 *fake_sys_state_.mock_prefs(), GetBoolean(StrEq(key), _));
Gilad Arnoldae47a9a2014-03-26 12:16:47 -070085 if (get_boolean_success)
86 get_boolean.WillOnce(DoAll(SetArgPointee<1>(output), Return(true)));
87 else
88 get_boolean.WillOnce(Return(false));
89 }
90 }
91
92 // Sets up mock expectations for testing the update completed time reporting.
93 // |valid| determines whether the returned time is valid. Returns the expected
94 // update completed time value.
95 Time SetupUpdateCompletedTime(bool valid) {
96 const TimeDelta kDurationSinceUpdate = TimeDelta::FromMinutes(7);
97 const Time kUpdateBootTime = Time() + kDurationSinceUpdate * 2;
98 const Time kCurrBootTime = (valid ?
99 kUpdateBootTime + kDurationSinceUpdate :
100 kUpdateBootTime - kDurationSinceUpdate);
101 const Time kCurrWallclockTime = FixedTime();
Gilad Arnold5bb4c902014-04-10 12:32:13 -0700102 EXPECT_CALL(*fake_sys_state_.mock_update_attempter(),
Gilad Arnold1f847232014-04-07 12:07:49 -0700103 GetBootTimeAtUpdate(_))
Gilad Arnoldae47a9a2014-03-26 12:16:47 -0700104 .WillOnce(DoAll(SetArgPointee<0>(kUpdateBootTime), Return(true)));
Alex Deymoc7ab6162014-04-25 18:32:50 -0700105 fake_clock_->SetBootTime(kCurrBootTime);
106 fake_clock_->SetWallclockTime(kCurrWallclockTime);
Gilad Arnoldae47a9a2014-03-26 12:16:47 -0700107 return kCurrWallclockTime - kDurationSinceUpdate;
108 }
109
Gilad Arnold5bb4c902014-04-10 12:32:13 -0700110 FakeSystemState fake_sys_state_;
Alex Deymoc7ab6162014-04-25 18:32:50 -0700111 FakeClock* fake_clock_; // Short for fake_sys_state_.fake_clock()
Ben Chan02f7c1d2014-10-18 15:18:02 -0700112 unique_ptr<RealUpdaterProvider> provider_;
Gilad Arnoldae47a9a2014-03-26 12:16:47 -0700113};
114
Alex Deymo63784a52014-05-28 10:46:14 -0700115TEST_F(UmRealUpdaterProviderTest, UpdaterStartedTimeIsWallclockTime) {
Alex Deymoc7ab6162014-04-25 18:32:50 -0700116 fake_clock_->SetWallclockTime(Time::FromDoubleT(123.456));
117 fake_clock_->SetMonotonicTime(Time::FromDoubleT(456.123));
118 // Run SetUp again to re-setup the provider under test to use these values.
119 SetUp();
Alex Deymo63784a52014-05-28 10:46:14 -0700120 UmTestUtils::ExpectVariableHasValue(Time::FromDoubleT(123.456),
Alex Deymoc7ab6162014-04-25 18:32:50 -0700121 provider_->var_updater_started_time());
122}
123
Alex Deymo63784a52014-05-28 10:46:14 -0700124TEST_F(UmRealUpdaterProviderTest, GetLastCheckedTimeOkay) {
Gilad Arnold5bb4c902014-04-10 12:32:13 -0700125 EXPECT_CALL(*fake_sys_state_.mock_update_attempter(),
Gilad Arnold1f847232014-04-07 12:07:49 -0700126 GetStatus(_, _, _, _, _))
Gilad Arnoldae47a9a2014-03-26 12:16:47 -0700127 .WillOnce(DoAll(SetArgPointee<0>(FixedTime().ToTimeT()), Return(true)));
Alex Deymo63784a52014-05-28 10:46:14 -0700128 UmTestUtils::ExpectVariableHasValue(RoundedToSecond(FixedTime()),
Gilad Arnold67ed78d2014-04-23 13:17:46 -0700129 provider_->var_last_checked_time());
Gilad Arnoldae47a9a2014-03-26 12:16:47 -0700130}
131
Alex Deymo63784a52014-05-28 10:46:14 -0700132TEST_F(UmRealUpdaterProviderTest, GetLastCheckedTimeFailNoValue) {
Gilad Arnold5bb4c902014-04-10 12:32:13 -0700133 EXPECT_CALL(*fake_sys_state_.mock_update_attempter(),
Gilad Arnold1f847232014-04-07 12:07:49 -0700134 GetStatus(_, _, _, _, _))
Gilad Arnoldae47a9a2014-03-26 12:16:47 -0700135 .WillOnce(Return(false));
Alex Deymo63784a52014-05-28 10:46:14 -0700136 UmTestUtils::ExpectVariableNotSet(provider_->var_last_checked_time());
Gilad Arnoldae47a9a2014-03-26 12:16:47 -0700137}
138
Alex Deymo63784a52014-05-28 10:46:14 -0700139TEST_F(UmRealUpdaterProviderTest, GetProgressOkayMin) {
Gilad Arnold5bb4c902014-04-10 12:32:13 -0700140 EXPECT_CALL(*fake_sys_state_.mock_update_attempter(),
Gilad Arnold1f847232014-04-07 12:07:49 -0700141 GetStatus(_, _, _, _, _))
Gilad Arnoldae47a9a2014-03-26 12:16:47 -0700142 .WillOnce(DoAll(SetArgPointee<1>(0.0), Return(true)));
Alex Deymo63784a52014-05-28 10:46:14 -0700143 UmTestUtils::ExpectVariableHasValue(0.0, provider_->var_progress());
Gilad Arnoldae47a9a2014-03-26 12:16:47 -0700144}
145
Alex Deymo63784a52014-05-28 10:46:14 -0700146TEST_F(UmRealUpdaterProviderTest, GetProgressOkayMid) {
Gilad Arnold5bb4c902014-04-10 12:32:13 -0700147 EXPECT_CALL(*fake_sys_state_.mock_update_attempter(),
Gilad Arnold1f847232014-04-07 12:07:49 -0700148 GetStatus(_, _, _, _, _))
Gilad Arnoldae47a9a2014-03-26 12:16:47 -0700149 .WillOnce(DoAll(SetArgPointee<1>(0.3), Return(true)));
Alex Deymo63784a52014-05-28 10:46:14 -0700150 UmTestUtils::ExpectVariableHasValue(0.3, provider_->var_progress());
Gilad Arnoldae47a9a2014-03-26 12:16:47 -0700151}
152
Alex Deymo63784a52014-05-28 10:46:14 -0700153TEST_F(UmRealUpdaterProviderTest, GetProgressOkayMax) {
Gilad Arnold5bb4c902014-04-10 12:32:13 -0700154 EXPECT_CALL(*fake_sys_state_.mock_update_attempter(),
Gilad Arnold1f847232014-04-07 12:07:49 -0700155 GetStatus(_, _, _, _, _))
Gilad Arnoldae47a9a2014-03-26 12:16:47 -0700156 .WillOnce(DoAll(SetArgPointee<1>(1.0), Return(true)));
Alex Deymo63784a52014-05-28 10:46:14 -0700157 UmTestUtils::ExpectVariableHasValue(1.0, provider_->var_progress());
Gilad Arnoldae47a9a2014-03-26 12:16:47 -0700158}
159
Alex Deymo63784a52014-05-28 10:46:14 -0700160TEST_F(UmRealUpdaterProviderTest, GetProgressFailNoValue) {
Gilad Arnold5bb4c902014-04-10 12:32:13 -0700161 EXPECT_CALL(*fake_sys_state_.mock_update_attempter(),
Gilad Arnold1f847232014-04-07 12:07:49 -0700162 GetStatus(_, _, _, _, _))
Gilad Arnoldae47a9a2014-03-26 12:16:47 -0700163 .WillOnce(Return(false));
Alex Deymo63784a52014-05-28 10:46:14 -0700164 UmTestUtils::ExpectVariableNotSet(provider_->var_progress());
Gilad Arnoldae47a9a2014-03-26 12:16:47 -0700165}
166
Alex Deymo63784a52014-05-28 10:46:14 -0700167TEST_F(UmRealUpdaterProviderTest, GetProgressFailTooSmall) {
Gilad Arnold5bb4c902014-04-10 12:32:13 -0700168 EXPECT_CALL(*fake_sys_state_.mock_update_attempter(),
Gilad Arnold1f847232014-04-07 12:07:49 -0700169 GetStatus(_, _, _, _, _))
Gilad Arnoldae47a9a2014-03-26 12:16:47 -0700170 .WillOnce(DoAll(SetArgPointee<1>(-2.0), Return(true)));
Alex Deymo63784a52014-05-28 10:46:14 -0700171 UmTestUtils::ExpectVariableNotSet(provider_->var_progress());
Gilad Arnoldae47a9a2014-03-26 12:16:47 -0700172}
173
Alex Deymo63784a52014-05-28 10:46:14 -0700174TEST_F(UmRealUpdaterProviderTest, GetProgressFailTooBig) {
Gilad Arnold5bb4c902014-04-10 12:32:13 -0700175 EXPECT_CALL(*fake_sys_state_.mock_update_attempter(),
Gilad Arnold1f847232014-04-07 12:07:49 -0700176 GetStatus(_, _, _, _, _))
Gilad Arnoldae47a9a2014-03-26 12:16:47 -0700177 .WillOnce(DoAll(SetArgPointee<1>(2.0), Return(true)));
Alex Deymo63784a52014-05-28 10:46:14 -0700178 UmTestUtils::ExpectVariableNotSet(provider_->var_progress());
Gilad Arnoldae47a9a2014-03-26 12:16:47 -0700179}
180
Alex Deymo63784a52014-05-28 10:46:14 -0700181TEST_F(UmRealUpdaterProviderTest, GetStageOkayIdle) {
Gilad Arnold5bb4c902014-04-10 12:32:13 -0700182 EXPECT_CALL(*fake_sys_state_.mock_update_attempter(),
Gilad Arnold1f847232014-04-07 12:07:49 -0700183 GetStatus(_, _, _, _, _))
Gilad Arnoldae47a9a2014-03-26 12:16:47 -0700184 .WillOnce(DoAll(SetArgPointee<2>(update_engine::kUpdateStatusIdle),
185 Return(true)));
Alex Deymo63784a52014-05-28 10:46:14 -0700186 UmTestUtils::ExpectVariableHasValue(Stage::kIdle, provider_->var_stage());
Gilad Arnoldae47a9a2014-03-26 12:16:47 -0700187}
188
Alex Deymo63784a52014-05-28 10:46:14 -0700189TEST_F(UmRealUpdaterProviderTest, GetStageOkayCheckingForUpdate) {
Gilad Arnold5bb4c902014-04-10 12:32:13 -0700190 EXPECT_CALL(*fake_sys_state_.mock_update_attempter(),
Gilad Arnold1f847232014-04-07 12:07:49 -0700191 GetStatus(_, _, _, _, _))
Gilad Arnoldae47a9a2014-03-26 12:16:47 -0700192 .WillOnce(DoAll(
193 SetArgPointee<2>(update_engine::kUpdateStatusCheckingForUpdate),
194 Return(true)));
Alex Deymo63784a52014-05-28 10:46:14 -0700195 UmTestUtils::ExpectVariableHasValue(Stage::kCheckingForUpdate,
Gilad Arnold67ed78d2014-04-23 13:17:46 -0700196 provider_->var_stage());
Gilad Arnoldae47a9a2014-03-26 12:16:47 -0700197}
198
Alex Deymo63784a52014-05-28 10:46:14 -0700199TEST_F(UmRealUpdaterProviderTest, GetStageOkayUpdateAvailable) {
Gilad Arnold5bb4c902014-04-10 12:32:13 -0700200 EXPECT_CALL(*fake_sys_state_.mock_update_attempter(),
Gilad Arnold1f847232014-04-07 12:07:49 -0700201 GetStatus(_, _, _, _, _))
Gilad Arnoldae47a9a2014-03-26 12:16:47 -0700202 .WillOnce(DoAll(
203 SetArgPointee<2>(update_engine::kUpdateStatusUpdateAvailable),
204 Return(true)));
Alex Deymo63784a52014-05-28 10:46:14 -0700205 UmTestUtils::ExpectVariableHasValue(Stage::kUpdateAvailable,
Gilad Arnold67ed78d2014-04-23 13:17:46 -0700206 provider_->var_stage());
Gilad Arnoldae47a9a2014-03-26 12:16:47 -0700207}
208
Alex Deymo63784a52014-05-28 10:46:14 -0700209TEST_F(UmRealUpdaterProviderTest, GetStageOkayDownloading) {
Gilad Arnold5bb4c902014-04-10 12:32:13 -0700210 EXPECT_CALL(*fake_sys_state_.mock_update_attempter(),
Gilad Arnold1f847232014-04-07 12:07:49 -0700211 GetStatus(_, _, _, _, _))
Gilad Arnoldae47a9a2014-03-26 12:16:47 -0700212 .WillOnce(DoAll(SetArgPointee<2>(update_engine::kUpdateStatusDownloading),
213 Return(true)));
Alex Deymo63784a52014-05-28 10:46:14 -0700214 UmTestUtils::ExpectVariableHasValue(Stage::kDownloading,
Gilad Arnold67ed78d2014-04-23 13:17:46 -0700215 provider_->var_stage());
Gilad Arnoldae47a9a2014-03-26 12:16:47 -0700216}
217
Alex Deymo63784a52014-05-28 10:46:14 -0700218TEST_F(UmRealUpdaterProviderTest, GetStageOkayVerifying) {
Gilad Arnold5bb4c902014-04-10 12:32:13 -0700219 EXPECT_CALL(*fake_sys_state_.mock_update_attempter(),
Gilad Arnold1f847232014-04-07 12:07:49 -0700220 GetStatus(_, _, _, _, _))
Gilad Arnoldae47a9a2014-03-26 12:16:47 -0700221 .WillOnce(DoAll(SetArgPointee<2>(update_engine::kUpdateStatusVerifying),
222 Return(true)));
Alex Deymo63784a52014-05-28 10:46:14 -0700223 UmTestUtils::ExpectVariableHasValue(Stage::kVerifying,
Gilad Arnold67ed78d2014-04-23 13:17:46 -0700224 provider_->var_stage());
Gilad Arnoldae47a9a2014-03-26 12:16:47 -0700225}
226
Alex Deymo63784a52014-05-28 10:46:14 -0700227TEST_F(UmRealUpdaterProviderTest, GetStageOkayFinalizing) {
Gilad Arnold5bb4c902014-04-10 12:32:13 -0700228 EXPECT_CALL(*fake_sys_state_.mock_update_attempter(),
Gilad Arnold1f847232014-04-07 12:07:49 -0700229 GetStatus(_, _, _, _, _))
Gilad Arnoldae47a9a2014-03-26 12:16:47 -0700230 .WillOnce(DoAll(SetArgPointee<2>(update_engine::kUpdateStatusFinalizing),
231 Return(true)));
Alex Deymo63784a52014-05-28 10:46:14 -0700232 UmTestUtils::ExpectVariableHasValue(Stage::kFinalizing,
Gilad Arnold67ed78d2014-04-23 13:17:46 -0700233 provider_->var_stage());
Gilad Arnoldae47a9a2014-03-26 12:16:47 -0700234}
235
Alex Deymo63784a52014-05-28 10:46:14 -0700236TEST_F(UmRealUpdaterProviderTest, GetStageOkayUpdatedNeedReboot) {
Gilad Arnold5bb4c902014-04-10 12:32:13 -0700237 EXPECT_CALL(*fake_sys_state_.mock_update_attempter(),
Gilad Arnold1f847232014-04-07 12:07:49 -0700238 GetStatus(_, _, _, _, _))
Gilad Arnoldae47a9a2014-03-26 12:16:47 -0700239 .WillOnce(DoAll(
240 SetArgPointee<2>(update_engine::kUpdateStatusUpdatedNeedReboot),
241 Return(true)));
Alex Deymo63784a52014-05-28 10:46:14 -0700242 UmTestUtils::ExpectVariableHasValue(Stage::kUpdatedNeedReboot,
Gilad Arnold67ed78d2014-04-23 13:17:46 -0700243 provider_->var_stage());
Gilad Arnoldae47a9a2014-03-26 12:16:47 -0700244}
245
Alex Deymo63784a52014-05-28 10:46:14 -0700246TEST_F(UmRealUpdaterProviderTest, GetStageOkayReportingErrorEvent) {
Gilad Arnold5bb4c902014-04-10 12:32:13 -0700247 EXPECT_CALL(*fake_sys_state_.mock_update_attempter(),
Gilad Arnold1f847232014-04-07 12:07:49 -0700248 GetStatus(_, _, _, _, _))
Gilad Arnoldae47a9a2014-03-26 12:16:47 -0700249 .WillOnce(DoAll(
250 SetArgPointee<2>(update_engine::kUpdateStatusReportingErrorEvent),
251 Return(true)));
Alex Deymo63784a52014-05-28 10:46:14 -0700252 UmTestUtils::ExpectVariableHasValue(Stage::kReportingErrorEvent,
Gilad Arnold67ed78d2014-04-23 13:17:46 -0700253 provider_->var_stage());
Gilad Arnoldae47a9a2014-03-26 12:16:47 -0700254}
255
Alex Deymo63784a52014-05-28 10:46:14 -0700256TEST_F(UmRealUpdaterProviderTest, GetStageOkayAttemptingRollback) {
Gilad Arnold5bb4c902014-04-10 12:32:13 -0700257 EXPECT_CALL(*fake_sys_state_.mock_update_attempter(),
Gilad Arnold1f847232014-04-07 12:07:49 -0700258 GetStatus(_, _, _, _, _))
Gilad Arnoldae47a9a2014-03-26 12:16:47 -0700259 .WillOnce(DoAll(
260 SetArgPointee<2>(update_engine::kUpdateStatusAttemptingRollback),
261 Return(true)));
Alex Deymo63784a52014-05-28 10:46:14 -0700262 UmTestUtils::ExpectVariableHasValue(Stage::kAttemptingRollback,
Gilad Arnold67ed78d2014-04-23 13:17:46 -0700263 provider_->var_stage());
Gilad Arnoldae47a9a2014-03-26 12:16:47 -0700264}
265
Alex Deymo63784a52014-05-28 10:46:14 -0700266TEST_F(UmRealUpdaterProviderTest, GetStageFailNoValue) {
Gilad Arnold5bb4c902014-04-10 12:32:13 -0700267 EXPECT_CALL(*fake_sys_state_.mock_update_attempter(),
Gilad Arnold1f847232014-04-07 12:07:49 -0700268 GetStatus(_, _, _, _, _))
Gilad Arnoldae47a9a2014-03-26 12:16:47 -0700269 .WillOnce(Return(false));
Alex Deymo63784a52014-05-28 10:46:14 -0700270 UmTestUtils::ExpectVariableNotSet(provider_->var_stage());
Gilad Arnoldae47a9a2014-03-26 12:16:47 -0700271}
272
Alex Deymo63784a52014-05-28 10:46:14 -0700273TEST_F(UmRealUpdaterProviderTest, GetStageFailUnknown) {
Gilad Arnold5bb4c902014-04-10 12:32:13 -0700274 EXPECT_CALL(*fake_sys_state_.mock_update_attempter(),
Gilad Arnold1f847232014-04-07 12:07:49 -0700275 GetStatus(_, _, _, _, _))
Gilad Arnoldae47a9a2014-03-26 12:16:47 -0700276 .WillOnce(DoAll(SetArgPointee<2>("FooUpdateEngineState"),
277 Return(true)));
Alex Deymo63784a52014-05-28 10:46:14 -0700278 UmTestUtils::ExpectVariableNotSet(provider_->var_stage());
Gilad Arnoldae47a9a2014-03-26 12:16:47 -0700279}
280
Alex Deymo63784a52014-05-28 10:46:14 -0700281TEST_F(UmRealUpdaterProviderTest, GetStageFailEmpty) {
Gilad Arnold5bb4c902014-04-10 12:32:13 -0700282 EXPECT_CALL(*fake_sys_state_.mock_update_attempter(),
Gilad Arnold1f847232014-04-07 12:07:49 -0700283 GetStatus(_, _, _, _, _))
Gilad Arnoldae47a9a2014-03-26 12:16:47 -0700284 .WillOnce(DoAll(SetArgPointee<2>(""), Return(true)));
Alex Deymo63784a52014-05-28 10:46:14 -0700285 UmTestUtils::ExpectVariableNotSet(provider_->var_stage());
Gilad Arnoldae47a9a2014-03-26 12:16:47 -0700286}
287
Alex Deymo63784a52014-05-28 10:46:14 -0700288TEST_F(UmRealUpdaterProviderTest, GetNewVersionOkay) {
Gilad Arnold5bb4c902014-04-10 12:32:13 -0700289 EXPECT_CALL(*fake_sys_state_.mock_update_attempter(),
Gilad Arnold1f847232014-04-07 12:07:49 -0700290 GetStatus(_, _, _, _, _))
Gilad Arnoldae47a9a2014-03-26 12:16:47 -0700291 .WillOnce(DoAll(SetArgPointee<3>("1.2.0"), Return(true)));
Alex Deymo63784a52014-05-28 10:46:14 -0700292 UmTestUtils::ExpectVariableHasValue(string("1.2.0"),
Gilad Arnold67ed78d2014-04-23 13:17:46 -0700293 provider_->var_new_version());
Gilad Arnoldae47a9a2014-03-26 12:16:47 -0700294}
295
Alex Deymo63784a52014-05-28 10:46:14 -0700296TEST_F(UmRealUpdaterProviderTest, GetNewVersionFailNoValue) {
Gilad Arnold5bb4c902014-04-10 12:32:13 -0700297 EXPECT_CALL(*fake_sys_state_.mock_update_attempter(),
Gilad Arnold1f847232014-04-07 12:07:49 -0700298 GetStatus(_, _, _, _, _))
Gilad Arnoldae47a9a2014-03-26 12:16:47 -0700299 .WillOnce(Return(false));
Alex Deymo63784a52014-05-28 10:46:14 -0700300 UmTestUtils::ExpectVariableNotSet(provider_->var_new_version());
Gilad Arnoldae47a9a2014-03-26 12:16:47 -0700301}
302
Alex Deymo63784a52014-05-28 10:46:14 -0700303TEST_F(UmRealUpdaterProviderTest, GetPayloadSizeOkayZero) {
Gilad Arnold5bb4c902014-04-10 12:32:13 -0700304 EXPECT_CALL(*fake_sys_state_.mock_update_attempter(),
Gilad Arnold1f847232014-04-07 12:07:49 -0700305 GetStatus(_, _, _, _, _))
Gilad Arnoldae47a9a2014-03-26 12:16:47 -0700306 .WillOnce(DoAll(SetArgPointee<4>(static_cast<int64_t>(0)), Return(true)));
Alex Deymo63784a52014-05-28 10:46:14 -0700307 UmTestUtils::ExpectVariableHasValue(static_cast<int64_t>(0),
Gilad Arnold67ed78d2014-04-23 13:17:46 -0700308 provider_->var_payload_size());
Gilad Arnoldae47a9a2014-03-26 12:16:47 -0700309}
310
Alex Deymo63784a52014-05-28 10:46:14 -0700311TEST_F(UmRealUpdaterProviderTest, GetPayloadSizeOkayArbitrary) {
Gilad Arnold5bb4c902014-04-10 12:32:13 -0700312 EXPECT_CALL(*fake_sys_state_.mock_update_attempter(),
Gilad Arnold1f847232014-04-07 12:07:49 -0700313 GetStatus(_, _, _, _, _))
Gilad Arnoldae47a9a2014-03-26 12:16:47 -0700314 .WillOnce(DoAll(SetArgPointee<4>(static_cast<int64_t>(567890)),
315 Return(true)));
Alex Deymo63784a52014-05-28 10:46:14 -0700316 UmTestUtils::ExpectVariableHasValue(static_cast<int64_t>(567890),
Gilad Arnold67ed78d2014-04-23 13:17:46 -0700317 provider_->var_payload_size());
Gilad Arnoldae47a9a2014-03-26 12:16:47 -0700318}
319
Alex Deymo63784a52014-05-28 10:46:14 -0700320TEST_F(UmRealUpdaterProviderTest, GetPayloadSizeOkayTwoGigabytes) {
Gilad Arnold5bb4c902014-04-10 12:32:13 -0700321 EXPECT_CALL(*fake_sys_state_.mock_update_attempter(),
Gilad Arnold1f847232014-04-07 12:07:49 -0700322 GetStatus(_, _, _, _, _))
Gilad Arnoldae47a9a2014-03-26 12:16:47 -0700323 .WillOnce(DoAll(SetArgPointee<4>(static_cast<int64_t>(1) << 31),
324 Return(true)));
Alex Deymo63784a52014-05-28 10:46:14 -0700325 UmTestUtils::ExpectVariableHasValue(static_cast<int64_t>(1) << 31,
Gilad Arnold67ed78d2014-04-23 13:17:46 -0700326 provider_->var_payload_size());
Gilad Arnoldae47a9a2014-03-26 12:16:47 -0700327}
328
Alex Deymo63784a52014-05-28 10:46:14 -0700329TEST_F(UmRealUpdaterProviderTest, GetPayloadSizeFailNoValue) {
Gilad Arnold5bb4c902014-04-10 12:32:13 -0700330 EXPECT_CALL(*fake_sys_state_.mock_update_attempter(),
Gilad Arnold1f847232014-04-07 12:07:49 -0700331 GetStatus(_, _, _, _, _))
Gilad Arnoldae47a9a2014-03-26 12:16:47 -0700332 .WillOnce(Return(false));
Alex Deymo63784a52014-05-28 10:46:14 -0700333 UmTestUtils::ExpectVariableNotSet(provider_->var_payload_size());
Gilad Arnoldae47a9a2014-03-26 12:16:47 -0700334}
335
Alex Deymo63784a52014-05-28 10:46:14 -0700336TEST_F(UmRealUpdaterProviderTest, GetPayloadSizeFailNegative) {
Gilad Arnold5bb4c902014-04-10 12:32:13 -0700337 EXPECT_CALL(*fake_sys_state_.mock_update_attempter(),
Gilad Arnold1f847232014-04-07 12:07:49 -0700338 GetStatus(_, _, _, _, _))
Gilad Arnoldae47a9a2014-03-26 12:16:47 -0700339 .WillOnce(DoAll(SetArgPointee<4>(static_cast<int64_t>(-1024)),
340 Return(true)));
Alex Deymo63784a52014-05-28 10:46:14 -0700341 UmTestUtils::ExpectVariableNotSet(provider_->var_payload_size());
Gilad Arnoldae47a9a2014-03-26 12:16:47 -0700342}
343
Alex Deymo63784a52014-05-28 10:46:14 -0700344TEST_F(UmRealUpdaterProviderTest, GetCurrChannelOkay) {
Gilad Arnoldae47a9a2014-03-26 12:16:47 -0700345 const string kChannelName("foo-channel");
Gilad Arnold5bb4c902014-04-10 12:32:13 -0700346 OmahaRequestParams request_params(&fake_sys_state_);
Gilad Arnoldae47a9a2014-03-26 12:16:47 -0700347 request_params.Init("", "", false);
348 request_params.set_current_channel(kChannelName);
Gilad Arnold5bb4c902014-04-10 12:32:13 -0700349 fake_sys_state_.set_request_params(&request_params);
Alex Deymo63784a52014-05-28 10:46:14 -0700350 UmTestUtils::ExpectVariableHasValue(kChannelName,
Gilad Arnold67ed78d2014-04-23 13:17:46 -0700351 provider_->var_curr_channel());
Gilad Arnoldae47a9a2014-03-26 12:16:47 -0700352}
353
Alex Deymo63784a52014-05-28 10:46:14 -0700354TEST_F(UmRealUpdaterProviderTest, GetCurrChannelFailEmpty) {
Gilad Arnold5bb4c902014-04-10 12:32:13 -0700355 OmahaRequestParams request_params(&fake_sys_state_);
Gilad Arnoldae47a9a2014-03-26 12:16:47 -0700356 request_params.Init("", "", false);
357 request_params.set_current_channel("");
Gilad Arnold5bb4c902014-04-10 12:32:13 -0700358 fake_sys_state_.set_request_params(&request_params);
Alex Deymo63784a52014-05-28 10:46:14 -0700359 UmTestUtils::ExpectVariableNotSet(provider_->var_curr_channel());
Gilad Arnoldae47a9a2014-03-26 12:16:47 -0700360}
361
Alex Deymo63784a52014-05-28 10:46:14 -0700362TEST_F(UmRealUpdaterProviderTest, GetNewChannelOkay) {
Gilad Arnoldae47a9a2014-03-26 12:16:47 -0700363 const string kChannelName("foo-channel");
Gilad Arnold5bb4c902014-04-10 12:32:13 -0700364 OmahaRequestParams request_params(&fake_sys_state_);
Gilad Arnoldae47a9a2014-03-26 12:16:47 -0700365 request_params.Init("", "", false);
366 request_params.set_target_channel(kChannelName);
Gilad Arnold5bb4c902014-04-10 12:32:13 -0700367 fake_sys_state_.set_request_params(&request_params);
Alex Deymo63784a52014-05-28 10:46:14 -0700368 UmTestUtils::ExpectVariableHasValue(kChannelName,
Gilad Arnold67ed78d2014-04-23 13:17:46 -0700369 provider_->var_new_channel());
Gilad Arnoldae47a9a2014-03-26 12:16:47 -0700370}
371
Alex Deymo63784a52014-05-28 10:46:14 -0700372TEST_F(UmRealUpdaterProviderTest, GetNewChannelFailEmpty) {
Gilad Arnold5bb4c902014-04-10 12:32:13 -0700373 OmahaRequestParams request_params(&fake_sys_state_);
Gilad Arnoldae47a9a2014-03-26 12:16:47 -0700374 request_params.Init("", "", false);
375 request_params.set_target_channel("");
Gilad Arnold5bb4c902014-04-10 12:32:13 -0700376 fake_sys_state_.set_request_params(&request_params);
Alex Deymo63784a52014-05-28 10:46:14 -0700377 UmTestUtils::ExpectVariableNotSet(provider_->var_new_channel());
Gilad Arnoldae47a9a2014-03-26 12:16:47 -0700378}
379
Alex Deymo63784a52014-05-28 10:46:14 -0700380TEST_F(UmRealUpdaterProviderTest, GetP2PEnabledOkayPrefDoesntExist) {
Gilad Arnoldae47a9a2014-03-26 12:16:47 -0700381 SetupReadBooleanPref(chromeos_update_engine::kPrefsP2PEnabled,
382 false, false, false);
Alex Deymo63784a52014-05-28 10:46:14 -0700383 UmTestUtils::ExpectVariableHasValue(false, provider_->var_p2p_enabled());
Gilad Arnoldae47a9a2014-03-26 12:16:47 -0700384}
385
Alex Deymo63784a52014-05-28 10:46:14 -0700386TEST_F(UmRealUpdaterProviderTest, GetP2PEnabledOkayPrefReadsFalse) {
Gilad Arnoldae47a9a2014-03-26 12:16:47 -0700387 SetupReadBooleanPref(chromeos_update_engine::kPrefsP2PEnabled,
388 true, true, false);
Alex Deymo63784a52014-05-28 10:46:14 -0700389 UmTestUtils::ExpectVariableHasValue(false, provider_->var_p2p_enabled());
Gilad Arnoldae47a9a2014-03-26 12:16:47 -0700390}
391
Alex Deymo63784a52014-05-28 10:46:14 -0700392TEST_F(UmRealUpdaterProviderTest, GetP2PEnabledOkayPrefReadsTrue) {
Gilad Arnoldae47a9a2014-03-26 12:16:47 -0700393 SetupReadBooleanPref(chromeos_update_engine::kPrefsP2PEnabled,
394 true, true, true);
Alex Deymo63784a52014-05-28 10:46:14 -0700395 UmTestUtils::ExpectVariableHasValue(true, provider_->var_p2p_enabled());
Gilad Arnoldae47a9a2014-03-26 12:16:47 -0700396}
397
Alex Deymo63784a52014-05-28 10:46:14 -0700398TEST_F(UmRealUpdaterProviderTest, GetP2PEnabledFailCannotReadPref) {
Gilad Arnoldae47a9a2014-03-26 12:16:47 -0700399 SetupReadBooleanPref(chromeos_update_engine::kPrefsP2PEnabled,
400 true, false, false);
Alex Deymo63784a52014-05-28 10:46:14 -0700401 UmTestUtils::ExpectVariableNotSet(provider_->var_p2p_enabled());
Gilad Arnoldae47a9a2014-03-26 12:16:47 -0700402}
403
Alex Deymo63784a52014-05-28 10:46:14 -0700404TEST_F(UmRealUpdaterProviderTest, GetCellularEnabledOkayPrefDoesntExist) {
Gilad Arnoldae47a9a2014-03-26 12:16:47 -0700405 SetupReadBooleanPref(
406 chromeos_update_engine::kPrefsUpdateOverCellularPermission,
407 false, false, false);
Alex Deymo63784a52014-05-28 10:46:14 -0700408 UmTestUtils::ExpectVariableHasValue(false, provider_->var_cellular_enabled());
Gilad Arnoldae47a9a2014-03-26 12:16:47 -0700409}
410
Alex Deymo63784a52014-05-28 10:46:14 -0700411TEST_F(UmRealUpdaterProviderTest, GetCellularEnabledOkayPrefReadsFalse) {
Gilad Arnoldae47a9a2014-03-26 12:16:47 -0700412 SetupReadBooleanPref(
413 chromeos_update_engine::kPrefsUpdateOverCellularPermission,
414 true, true, false);
Alex Deymo63784a52014-05-28 10:46:14 -0700415 UmTestUtils::ExpectVariableHasValue(false, provider_->var_cellular_enabled());
Gilad Arnoldae47a9a2014-03-26 12:16:47 -0700416}
417
Alex Deymo63784a52014-05-28 10:46:14 -0700418TEST_F(UmRealUpdaterProviderTest, GetCellularEnabledOkayPrefReadsTrue) {
Gilad Arnoldae47a9a2014-03-26 12:16:47 -0700419 SetupReadBooleanPref(
420 chromeos_update_engine::kPrefsUpdateOverCellularPermission,
421 true, true, true);
Alex Deymo63784a52014-05-28 10:46:14 -0700422 UmTestUtils::ExpectVariableHasValue(true, provider_->var_cellular_enabled());
Gilad Arnoldae47a9a2014-03-26 12:16:47 -0700423}
424
Alex Deymo63784a52014-05-28 10:46:14 -0700425TEST_F(UmRealUpdaterProviderTest, GetCellularEnabledFailCannotReadPref) {
Gilad Arnoldae47a9a2014-03-26 12:16:47 -0700426 SetupReadBooleanPref(
427 chromeos_update_engine::kPrefsUpdateOverCellularPermission,
428 true, false, false);
Alex Deymo63784a52014-05-28 10:46:14 -0700429 UmTestUtils::ExpectVariableNotSet(provider_->var_cellular_enabled());
Gilad Arnoldae47a9a2014-03-26 12:16:47 -0700430}
431
Alex Deymo63784a52014-05-28 10:46:14 -0700432TEST_F(UmRealUpdaterProviderTest, GetUpdateCompletedTimeOkay) {
Gilad Arnoldae47a9a2014-03-26 12:16:47 -0700433 Time expected = SetupUpdateCompletedTime(true);
Alex Deymo63784a52014-05-28 10:46:14 -0700434 UmTestUtils::ExpectVariableHasValue(expected,
Gilad Arnold67ed78d2014-04-23 13:17:46 -0700435 provider_->var_update_completed_time());
Gilad Arnoldae47a9a2014-03-26 12:16:47 -0700436}
437
Alex Deymo63784a52014-05-28 10:46:14 -0700438TEST_F(UmRealUpdaterProviderTest, GetUpdateCompletedTimeFailNoValue) {
Gilad Arnold5bb4c902014-04-10 12:32:13 -0700439 EXPECT_CALL(*fake_sys_state_.mock_update_attempter(), GetBootTimeAtUpdate(_))
Gilad Arnoldae47a9a2014-03-26 12:16:47 -0700440 .WillOnce(Return(false));
Alex Deymo63784a52014-05-28 10:46:14 -0700441 UmTestUtils::ExpectVariableNotSet(provider_->var_update_completed_time());
Gilad Arnoldae47a9a2014-03-26 12:16:47 -0700442}
443
Alex Deymo63784a52014-05-28 10:46:14 -0700444TEST_F(UmRealUpdaterProviderTest, GetUpdateCompletedTimeFailInvalidValue) {
Gilad Arnoldae47a9a2014-03-26 12:16:47 -0700445 SetupUpdateCompletedTime(false);
Alex Deymo63784a52014-05-28 10:46:14 -0700446 UmTestUtils::ExpectVariableNotSet(provider_->var_update_completed_time());
Gilad Arnoldae47a9a2014-03-26 12:16:47 -0700447}
448
Alex Deymo63784a52014-05-28 10:46:14 -0700449TEST_F(UmRealUpdaterProviderTest, GetConsecutiveFailedUpdateChecks) {
Gilad Arnolda6dab942014-04-25 11:46:03 -0700450 const unsigned int kNumFailedChecks = 3;
451 EXPECT_CALL(*fake_sys_state_.mock_update_attempter(),
452 consecutive_failed_update_checks())
453 .WillRepeatedly(Return(kNumFailedChecks));
Alex Deymo63784a52014-05-28 10:46:14 -0700454 UmTestUtils::ExpectVariableHasValue(
Gilad Arnolda6dab942014-04-25 11:46:03 -0700455 kNumFailedChecks, provider_->var_consecutive_failed_update_checks());
456}
457
Gilad Arnolda0258a52014-07-10 16:21:19 -0700458TEST_F(UmRealUpdaterProviderTest, GetServerDictatedPollInterval) {
459 const unsigned int kPollInterval = 2 * 60 * 60; // Two hours.
460 EXPECT_CALL(*fake_sys_state_.mock_update_attempter(),
461 server_dictated_poll_interval())
462 .WillRepeatedly(Return(kPollInterval));
463 UmTestUtils::ExpectVariableHasValue(
464 kPollInterval, provider_->var_server_dictated_poll_interval());
465}
466
Alex Deymo63784a52014-05-28 10:46:14 -0700467} // namespace chromeos_update_manager