PolicyManager: Add a variable to tell when the Updater was started.
This patch adds a new const variable stating when was the updater
started in wallclock time. This value is required to schedule an
update check shortly after the update_engine starts, but use a
higher interval after the first update check.
BUG=chromium:358269
TEST=Added unittest.
Change-Id: Ife04c280207b5ccbf3a4a7828593cf01d1551a00
Reviewed-on: https://chromium-review.googlesource.com/197200
Reviewed-by: Alex Deymo <deymo@chromium.org>
Tested-by: Alex Deymo <deymo@chromium.org>
Commit-Queue: Alex Deymo <deymo@chromium.org>
diff --git a/policy_manager/fake_updater_provider.h b/policy_manager/fake_updater_provider.h
index 17060ce..0413eb5 100644
--- a/policy_manager/fake_updater_provider.h
+++ b/policy_manager/fake_updater_provider.h
@@ -5,6 +5,8 @@
#ifndef CHROMEOS_PLATFORM_UPDATE_ENGINE_POLICY_MANAGER_FAKE_UPDATER_PROVIDER_H_
#define CHROMEOS_PLATFORM_UPDATE_ENGINE_POLICY_MANAGER_FAKE_UPDATER_PROVIDER_H_
+#include <string>
+
#include "update_engine/policy_manager/fake_variable.h"
#include "update_engine/policy_manager/updater_provider.h"
@@ -15,6 +17,10 @@
public:
FakeUpdaterProvider() {}
+ virtual FakeVariable<base::Time>* var_updater_started_time() override {
+ return &var_updater_started_time_;
+ }
+
virtual FakeVariable<base::Time>* var_last_checked_time() override {
return &var_last_checked_time_;
}
@@ -56,6 +62,8 @@
}
private:
+ FakeVariable<base::Time> var_updater_started_time_{
+ "updater_started_time", kVariableModePoll};
FakeVariable<base::Time> var_last_checked_time_{
"last_checked_time", kVariableModePoll};
FakeVariable<base::Time> var_update_completed_time_{
diff --git a/policy_manager/real_updater_provider.cc b/policy_manager/real_updater_provider.cc
index dbfae87..9bdb45a 100644
--- a/policy_manager/real_updater_provider.cc
+++ b/policy_manager/real_updater_provider.cc
@@ -8,8 +8,8 @@
#include <string>
-#include <base/time/time.h>
#include <base/strings/stringprintf.h>
+#include <base/time/time.h>
#include <chromeos/dbus/service_constants.h>
#include "update_engine/clock_interface.h"
@@ -314,6 +314,8 @@
RealUpdaterProvider::RealUpdaterProvider(SystemState* system_state)
: system_state_(system_state),
+ var_updater_started_time_("updater_started_time",
+ system_state->clock()->GetWallclockTime()),
var_last_checked_time_(
new LastCheckedTimeVariable("last_checked_time", system_state_)),
var_update_completed_time_(
diff --git a/policy_manager/real_updater_provider.h b/policy_manager/real_updater_provider.h
index e4b308e..619d5ab 100644
--- a/policy_manager/real_updater_provider.h
+++ b/policy_manager/real_updater_provider.h
@@ -7,6 +7,7 @@
#include <base/memory/scoped_ptr.h>
+#include "update_engine/policy_manager/generic_variables.h"
#include "update_engine/policy_manager/updater_provider.h"
#include "update_engine/system_state.h"
@@ -26,6 +27,10 @@
// Initializes the provider and returns whether it succeeded.
bool Init() { return true; }
+ virtual Variable<base::Time>* var_updater_started_time() override {
+ return &var_updater_started_time_;
+ }
+
virtual Variable<base::Time>* var_last_checked_time() override {
return var_last_checked_time_.get();
}
@@ -70,7 +75,8 @@
// A pointer to the update engine's system state aggregator.
chromeos_update_engine::SystemState* system_state_;
- // Pointers to all variable implementations.
+ // Variable implementations.
+ ConstCopyVariable<base::Time> var_updater_started_time_;
scoped_ptr<Variable<base::Time>> var_last_checked_time_;
scoped_ptr<Variable<base::Time>> var_update_completed_time_;
scoped_ptr<Variable<double>> var_progress_;
diff --git a/policy_manager/real_updater_provider_unittest.cc b/policy_manager/real_updater_provider_unittest.cc
index 1f8f86f..e779456 100644
--- a/policy_manager/real_updater_provider_unittest.cc
+++ b/policy_manager/real_updater_provider_unittest.cc
@@ -63,7 +63,7 @@
class PmRealUpdaterProviderTest : public ::testing::Test {
protected:
virtual void SetUp() {
- fake_sys_state_.set_clock(&fake_clock_);
+ fake_clock_ = fake_sys_state_.fake_clock();
provider_.reset(new RealUpdaterProvider(&fake_sys_state_));
PMTEST_ASSERT_NOT_NULL(provider_.get());
// Check that provider initializes corrrectly.
@@ -101,16 +101,25 @@
EXPECT_CALL(*fake_sys_state_.mock_update_attempter(),
GetBootTimeAtUpdate(_))
.WillOnce(DoAll(SetArgPointee<0>(kUpdateBootTime), Return(true)));
- fake_clock_.SetBootTime(kCurrBootTime);
- fake_clock_.SetWallclockTime(kCurrWallclockTime);
+ fake_clock_->SetBootTime(kCurrBootTime);
+ fake_clock_->SetWallclockTime(kCurrWallclockTime);
return kCurrWallclockTime - kDurationSinceUpdate;
}
FakeSystemState fake_sys_state_;
- FakeClock fake_clock_;
+ FakeClock* fake_clock_; // Short for fake_sys_state_.fake_clock()
scoped_ptr<RealUpdaterProvider> provider_;
};
+TEST_F(PmRealUpdaterProviderTest, UpdaterStartedTimeIsWallclockTime) {
+ fake_clock_->SetWallclockTime(Time::FromDoubleT(123.456));
+ fake_clock_->SetMonotonicTime(Time::FromDoubleT(456.123));
+ // Run SetUp again to re-setup the provider under test to use these values.
+ SetUp();
+ PmTestUtils::ExpectVariableHasValue(Time::FromDoubleT(123.456),
+ provider_->var_updater_started_time());
+}
+
TEST_F(PmRealUpdaterProviderTest, GetLastCheckedTimeOkay) {
EXPECT_CALL(*fake_sys_state_.mock_update_attempter(),
GetStatus(_, _, _, _, _))
diff --git a/policy_manager/updater_provider.h b/policy_manager/updater_provider.h
index 85074f6..f9a4bff 100644
--- a/policy_manager/updater_provider.h
+++ b/policy_manager/updater_provider.h
@@ -31,6 +31,10 @@
public:
virtual ~UpdaterProvider() {}
+ // A variable returning the timestamp when the update engine was started in
+ // wallclock time.
+ virtual Variable<base::Time>* var_updater_started_time() = 0;
+
// A variable returning the last update check time.
virtual Variable<base::Time>* var_last_checked_time() = 0;