update_engine: Add minutes variable to real time provider.
Make it so that the user can also get the current
minutes in local time from the real time provider.
BUG=chromium:852860
TEST=Real time provider unittests
Change-Id: I8118e28c5ab7f000434947fdee9aeae441535ba6
Reviewed-on: https://chromium-review.googlesource.com/1101468
Commit-Ready: Adolfo Higueros <adokar@google.com>
Tested-by: Adolfo Higueros <adokar@google.com>
Reviewed-by: Amin Hassani <ahassani@chromium.org>
diff --git a/update_manager/fake_time_provider.h b/update_manager/fake_time_provider.h
index 2aea2e7..bd370d2 100644
--- a/update_manager/fake_time_provider.h
+++ b/update_manager/fake_time_provider.h
@@ -29,10 +29,12 @@
FakeVariable<base::Time>* var_curr_date() override { return &var_curr_date_; }
FakeVariable<int>* var_curr_hour() override { return &var_curr_hour_; }
+ FakeVariable<int>* var_curr_minute() override { return &var_curr_minute_; }
private:
FakeVariable<base::Time> var_curr_date_{"curr_date", kVariableModePoll};
FakeVariable<int> var_curr_hour_{"curr_hour", kVariableModePoll};
+ FakeVariable<int> var_curr_minute_{"curr_minute", kVariableModePoll};
DISALLOW_COPY_AND_ASSIGN(FakeTimeProvider);
};
diff --git a/update_manager/real_time_provider.cc b/update_manager/real_time_provider.cc
index ca3acad..92f985f 100644
--- a/update_manager/real_time_provider.cc
+++ b/update_manager/real_time_provider.cc
@@ -74,9 +74,28 @@
DISALLOW_COPY_AND_ASSIGN(CurrHourVariable);
};
+class CurrMinuteVariable : public Variable<int> {
+ public:
+ CurrMinuteVariable(const string& name, ClockInterface* clock)
+ : Variable<int>(name, TimeDelta::FromSeconds(15)), clock_(clock) {}
+
+ protected:
+ virtual const int* GetValue(TimeDelta /* timeout */, string* /* errmsg */) {
+ Time::Exploded exploded;
+ clock_->GetWallclockTime().LocalExplode(&exploded);
+ return new int(exploded.minute);
+ }
+
+ private:
+ ClockInterface* clock_;
+
+ DISALLOW_COPY_AND_ASSIGN(CurrMinuteVariable);
+};
+
bool RealTimeProvider::Init() {
var_curr_date_.reset(new CurrDateVariable("curr_date", clock_));
var_curr_hour_.reset(new CurrHourVariable("curr_hour", clock_));
+ var_curr_minute_.reset(new CurrMinuteVariable("curr_minute", clock_));
return true;
}
diff --git a/update_manager/real_time_provider.h b/update_manager/real_time_provider.h
index e7cae94..989cefb 100644
--- a/update_manager/real_time_provider.h
+++ b/update_manager/real_time_provider.h
@@ -43,12 +43,15 @@
return var_curr_hour_.get();
}
+ Variable<int>* var_curr_minute() override { return var_curr_minute_.get(); }
+
private:
// A clock abstraction (fakeable).
chromeos_update_engine::ClockInterface* const clock_;
std::unique_ptr<Variable<base::Time>> var_curr_date_;
std::unique_ptr<Variable<int>> var_curr_hour_;
+ std::unique_ptr<Variable<int>> var_curr_minute_;
DISALLOW_COPY_AND_ASSIGN(RealTimeProvider);
};
diff --git a/update_manager/real_time_provider_unittest.cc b/update_manager/real_time_provider_unittest.cc
index 0e1ef34..093b158 100644
--- a/update_manager/real_time_provider_unittest.cc
+++ b/update_manager/real_time_provider_unittest.cc
@@ -81,4 +81,13 @@
provider_->var_curr_hour());
}
+TEST_F(UmRealTimeProviderTest, CurrMinuteValid) {
+ const Time now = CurrTime();
+ Time::Exploded expected;
+ now.LocalExplode(&expected);
+ fake_clock_.SetWallclockTime(now);
+ UmTestUtils::ExpectVariableHasValue(expected.minute,
+ provider_->var_curr_minute());
+}
+
} // namespace chromeos_update_manager
diff --git a/update_manager/time_provider.h b/update_manager/time_provider.h
index 663ec2c..94f4a8f 100644
--- a/update_manager/time_provider.h
+++ b/update_manager/time_provider.h
@@ -36,6 +36,9 @@
// consistent with base::Time.
virtual Variable<int>* var_curr_hour() = 0;
+ // Returns the current minutes (0 to 60) in local time.
+ virtual Variable<int>* var_curr_minute() = 0;
+
protected:
TimeProvider() {}