Add 'timeMs' field to /privet/info local API
Added the local device time field to the Info response. The timestamp
is a time in milliseconds since Epoch (similar to how the time is
used with the cloud server).
BUG: 26160070
Change-Id: I3059f2880dc2aa4c1990bbe662e8c1057b1aadc1
Reviewed-on: https://weave-review.googlesource.com/1922
Reviewed-by: Vitaly Buka <vitalybuka@google.com>
diff --git a/src/privet/privet_handler.cc b/src/privet/privet_handler.cc
index b71ea15..d172312 100644
--- a/src/privet/privet_handler.cc
+++ b/src/privet/privet_handler.cc
@@ -70,6 +70,7 @@
const char kInfoWifiHostedSsidKey[] = "hostedSsid";
const char kInfoUptimeKey[] = "uptime";
+const char kInfoTimeMsKey[] = "timeMs";
const char kPairingKey[] = "pairing";
const char kPairingSessionIdKey[] = "sessionId";
@@ -340,11 +341,14 @@
PrivetHandler::PrivetHandler(CloudDelegate* cloud,
DeviceDelegate* device,
SecurityDelegate* security,
- WifiDelegate* wifi)
- : cloud_(cloud), device_(device), security_(security), wifi_(wifi) {
+ WifiDelegate* wifi,
+ base::Clock* clock)
+ : cloud_(cloud), device_(device), security_(security), wifi_(wifi),
+ clock_(clock ? clock : &default_clock_) {
CHECK(cloud_);
CHECK(device_);
CHECK(security_);
+ CHECK(clock_);
cloud_observer_.Add(cloud_);
AddHandler("/privet/info", &PrivetHandler::HandleInfo, AuthScope::kNone);
@@ -466,7 +470,7 @@
time += base::TimeDelta::FromSeconds(kAccessTokenExpirationSeconds);
time +=
base::TimeDelta::FromSeconds(kAccessTokenExpirationThresholdSeconds);
- if (time < base::Time::Now()) {
+ if (time < clock_->Now()) {
Error::AddToPrintf(&error, FROM_HERE, errors::kDomain,
errors::kAuthorizationExpired, "Token expired: %s",
token.c_str());
@@ -544,6 +548,7 @@
output.Set(kGcdKey, CreateGcdSection(*cloud_).release());
output.SetInteger(kInfoUptimeKey, device_->GetUptime().InSeconds());
+ output.SetString(kInfoTimeMsKey, std::to_string(clock_->Now().ToJavaTime()));
callback.Run(http::kOk, output);
}
diff --git a/src/privet/privet_handler.h b/src/privet/privet_handler.h
index fc024d1..5241233 100644
--- a/src/privet/privet_handler.h
+++ b/src/privet/privet_handler.h
@@ -12,6 +12,7 @@
#include <base/macros.h>
#include <base/memory/weak_ptr.h>
#include <base/scoped_observer.h>
+#include <base/time/default_clock.h>
#include "src/privet/cloud_delegate.h"
@@ -42,7 +43,8 @@
PrivetHandler(CloudDelegate* cloud,
DeviceDelegate* device,
SecurityDelegate* pairing,
- WifiDelegate* wifi);
+ WifiDelegate* wifi,
+ base::Clock* clock = nullptr);
~PrivetHandler() override;
void OnTraitDefsChanged() override;
@@ -134,6 +136,8 @@
DeviceDelegate* device_{nullptr};
SecurityDelegate* security_{nullptr};
WifiDelegate* wifi_{nullptr};
+ base::DefaultClock default_clock_;
+ base::Clock* clock_{nullptr};
struct HandlerParameters {
ApiHandler handler;
diff --git a/src/privet/privet_handler_unittest.cc b/src/privet/privet_handler_unittest.cc
index 09146e8..da64ab9 100644
--- a/src/privet/privet_handler_unittest.cc
+++ b/src/privet/privet_handler_unittest.cc
@@ -19,6 +19,7 @@
#include "src/privet/constants.h"
#include "src/privet/mock_delegates.h"
+#include "src/test/mock_clock.h"
using testing::_;
using testing::DoAll;
@@ -92,8 +93,12 @@
protected:
void SetUp() override {
+ EXPECT_CALL(clock_, Now())
+ .WillRepeatedly(Return(base::Time::FromTimeT(1410000000)));
+
auth_header_ = "Privet anonymous";
- handler_.reset(new PrivetHandler(&cloud_, &device_, &security_, &wifi_));
+ handler_.reset(new PrivetHandler(&cloud_, &device_, &security_, &wifi_,
+ &clock_));
}
const base::DictionaryValue& HandleRequest(
@@ -124,7 +129,8 @@
int GetResponseCount() const { return response_count_; }
void SetNoWifiAndGcd() {
- handler_.reset(new PrivetHandler(&cloud_, &device_, &security_, nullptr));
+ handler_.reset(new PrivetHandler(&cloud_, &device_, &security_, nullptr,
+ &clock_));
EXPECT_CALL(cloud_, GetCloudId()).WillRepeatedly(Return(""));
EXPECT_CALL(cloud_, GetConnectionState())
.WillRepeatedly(ReturnRef(gcd_disabled_state_));
@@ -136,6 +142,7 @@
.WillRepeatedly(DoAll(Invoke(set_error), Return(false)));
}
+ test::MockClock clock_;
testing::StrictMock<MockCloudDelegate> cloud_;
testing::StrictMock<MockDeviceDelegate> device_;
testing::StrictMock<MockSecurityDelegate> security_;
@@ -240,7 +247,8 @@
'id': '',
'status': 'disabled'
},
- 'uptime': 3600
+ 'uptime': 3600,
+ 'timeMs': '1410000000000'
})";
EXPECT_JSON_EQ(kExpected, HandleRequest("/privet/info", "{}"));
}
@@ -301,7 +309,8 @@
'id': 'TestCloudId',
'status': 'online'
},
- 'uptime': 3600
+ 'uptime': 3600,
+ 'timeMs': '1410000000000'
})";
EXPECT_JSON_EQ(kExpected, HandleRequest("/privet/info", "{}"));
}