Index: components/network_time/network_time_tracker_unittest.cc |
diff --git a/components/network_time/network_time_tracker_unittest.cc b/components/network_time/network_time_tracker_unittest.cc |
index 691ebfe3af1941a1497074ed1540b8ce449c5e58..04159373dc7591e91183d3dafc05835f831239e3 100644 |
--- a/components/network_time/network_time_tracker_unittest.cc |
+++ b/components/network_time/network_time_tracker_unittest.cc |
@@ -5,10 +5,14 @@ |
#include "components/network_time/network_time_tracker.h" |
#include "base/compiler_specific.h" |
+#include "base/message_loop/message_loop.h" |
#include "base/test/simple_test_clock.h" |
#include "base/test/simple_test_tick_clock.h" |
#include "components/network_time/network_time_pref_names.h" |
#include "components/prefs/testing_pref_service.h" |
+#include "net/http/http_response_headers.h" |
+#include "net/url_request/test_url_fetcher_factory.h" |
+#include "net/url_request/url_request_test_util.h" |
#include "testing/gtest/include/gtest/gtest.h" |
namespace network_time { |
@@ -18,6 +22,7 @@ class NetworkTimeTrackerTest : public testing::Test { |
~NetworkTimeTrackerTest() override {} |
void SetUp() override { |
+ url_fetcher_factory_.reset(new net::TestURLFetcherFactory()); |
NetworkTimeTracker::RegisterPrefs(pref_service_.registry()); |
clock_ = new base::SimpleTestClock(); |
@@ -28,8 +33,8 @@ class NetworkTimeTrackerTest : public testing::Test { |
tracker_.reset(new NetworkTimeTracker( |
scoped_ptr<base::Clock>(clock_), |
- scoped_ptr<base::TickClock>(tick_clock_), |
- &pref_service_)); |
+ scoped_ptr<base::TickClock>(tick_clock_), &pref_service_, |
+ new net::TestURLRequestContextGetter(message_loop_.task_runner()))); |
// Can not be smaller than 15, it's the NowFromSystemTime() resolution. |
resolution_ = base::TimeDelta::FromMilliseconds(17); |
@@ -48,8 +53,8 @@ class NetworkTimeTrackerTest : public testing::Test { |
tick_clock_= new_tick_clock; |
tracker_.reset(new NetworkTimeTracker( |
scoped_ptr<base::Clock>(clock_), |
- scoped_ptr<base::TickClock>(tick_clock_), |
- &pref_service_)); |
+ scoped_ptr<base::TickClock>(tick_clock_), &pref_service_, |
+ new net::TestURLRequestContextGetter(message_loop_.task_runner()))); |
} |
// Updates the notifier's time with the specified parameters. |
@@ -69,6 +74,7 @@ class NetworkTimeTrackerTest : public testing::Test { |
} |
protected: |
+ base::MessageLoop message_loop_; |
base::TimeDelta resolution_; |
base::TimeDelta latency_; |
base::TimeDelta adjustment_; |
@@ -76,6 +82,7 @@ class NetworkTimeTrackerTest : public testing::Test { |
base::SimpleTestTickClock* tick_clock_; |
TestingPrefServiceSimple pref_service_; |
scoped_ptr<NetworkTimeTracker> tracker_; |
+ scoped_ptr<net::TestURLFetcherFactory> url_fetcher_factory_; |
}; |
TEST_F(NetworkTimeTrackerTest, Uninitialized) { |
@@ -131,7 +138,7 @@ TEST_F(NetworkTimeTrackerTest, ClockIsWack) { |
tick_clock_->NowTicks()); |
base::Time out_network_time; |
- EXPECT_TRUE(tracker_->GetNetworkTime(&out_network_time, NULL)); |
+ EXPECT_TRUE(tracker_->GetNetworkTime(&out_network_time, nullptr)); |
EXPECT_EQ(in_network_time, out_network_time); |
} |
@@ -185,7 +192,7 @@ TEST_F(NetworkTimeTrackerTest, SpringForward) { |
tick_clock_->Advance(base::TimeDelta::FromSeconds(1)); |
clock_->Advance(base::TimeDelta::FromDays(1)); |
base::Time out_network_time; |
- EXPECT_FALSE(tracker_->GetNetworkTime(&out_network_time, NULL)); |
+ EXPECT_FALSE(tracker_->GetNetworkTime(&out_network_time, nullptr)); |
} |
TEST_F(NetworkTimeTrackerTest, FallBack) { |
@@ -195,7 +202,7 @@ TEST_F(NetworkTimeTrackerTest, FallBack) { |
tick_clock_->Advance(base::TimeDelta::FromSeconds(1)); |
clock_->Advance(base::TimeDelta::FromDays(-1)); |
base::Time out_network_time; |
- EXPECT_FALSE(tracker_->GetNetworkTime(&out_network_time, NULL)); |
+ EXPECT_FALSE(tracker_->GetNetworkTime(&out_network_time, nullptr)); |
} |
TEST_F(NetworkTimeTrackerTest, SuspendAndResume) { |
@@ -205,7 +212,7 @@ TEST_F(NetworkTimeTrackerTest, SuspendAndResume) { |
tick_clock_->NowTicks()); |
clock_->Advance(base::TimeDelta::FromHours(1)); |
base::Time out_network_time; |
- EXPECT_FALSE(tracker_->GetNetworkTime(&out_network_time, NULL)); |
+ EXPECT_FALSE(tracker_->GetNetworkTime(&out_network_time, nullptr)); |
} |
TEST_F(NetworkTimeTrackerTest, Serialize) { |
@@ -237,7 +244,7 @@ TEST_F(NetworkTimeTrackerTest, DeserializeOldFormat) { |
tick_clock_->NowTicks()); |
base::Time out_network_time; |
- EXPECT_TRUE(tracker_->GetNetworkTime(&out_network_time, NULL)); |
+ EXPECT_TRUE(tracker_->GetNetworkTime(&out_network_time, nullptr)); |
double local, network; |
const base::DictionaryValue* saved_prefs = |
pref_service_.GetDictionary(prefs::kNetworkTimeMapping); |
@@ -248,7 +255,7 @@ TEST_F(NetworkTimeTrackerTest, DeserializeOldFormat) { |
prefs.SetDouble("network", network); |
pref_service_.Set(prefs::kNetworkTimeMapping, prefs); |
Reset(); |
- EXPECT_FALSE(tracker_->GetNetworkTime(&out_network_time, NULL)); |
+ EXPECT_FALSE(tracker_->GetNetworkTime(&out_network_time, nullptr)); |
} |
TEST_F(NetworkTimeTrackerTest, SerializeWithLongDelay) { |
@@ -258,10 +265,10 @@ TEST_F(NetworkTimeTrackerTest, SerializeWithLongDelay) { |
UpdateNetworkTime(in_network_time - latency_ / 2, resolution_, latency_, |
tick_clock_->NowTicks()); |
base::Time out_network_time; |
- EXPECT_TRUE(tracker_->GetNetworkTime(&out_network_time, NULL)); |
+ EXPECT_TRUE(tracker_->GetNetworkTime(&out_network_time, nullptr)); |
AdvanceBoth(base::TimeDelta::FromDays(8)); |
Reset(); |
- EXPECT_FALSE(tracker_->GetNetworkTime(&out_network_time, NULL)); |
+ EXPECT_FALSE(tracker_->GetNetworkTime(&out_network_time, nullptr)); |
} |
TEST_F(NetworkTimeTrackerTest, SerializeWithTickClockAdvance) { |
@@ -271,10 +278,10 @@ TEST_F(NetworkTimeTrackerTest, SerializeWithTickClockAdvance) { |
UpdateNetworkTime(in_network_time - latency_ / 2, resolution_, latency_, |
tick_clock_->NowTicks()); |
base::Time out_network_time; |
- EXPECT_TRUE(tracker_->GetNetworkTime(&out_network_time, NULL)); |
+ EXPECT_TRUE(tracker_->GetNetworkTime(&out_network_time, nullptr)); |
tick_clock_->Advance(base::TimeDelta::FromDays(1)); |
Reset(); |
- EXPECT_FALSE(tracker_->GetNetworkTime(&out_network_time, NULL)); |
+ EXPECT_FALSE(tracker_->GetNetworkTime(&out_network_time, nullptr)); |
} |
TEST_F(NetworkTimeTrackerTest, SerializeWithWallClockAdvance) { |
@@ -285,10 +292,83 @@ TEST_F(NetworkTimeTrackerTest, SerializeWithWallClockAdvance) { |
tick_clock_->NowTicks()); |
base::Time out_network_time; |
- EXPECT_TRUE(tracker_->GetNetworkTime(&out_network_time, NULL)); |
+ EXPECT_TRUE(tracker_->GetNetworkTime(&out_network_time, nullptr)); |
clock_->Advance(base::TimeDelta::FromDays(1)); |
Reset(); |
- EXPECT_FALSE(tracker_->GetNetworkTime(&out_network_time, NULL)); |
+ EXPECT_FALSE(tracker_->GetNetworkTime(&out_network_time, nullptr)); |
+} |
+ |
+TEST_F(NetworkTimeTrackerTest, UpdateFromNetwork) { |
+ base::Time out_network_time; |
+ EXPECT_EQ(nullptr, url_fetcher_factory_->GetFetcherByID(0)); |
+ EXPECT_FALSE(tracker_->GetNetworkTime(&out_network_time, nullptr)); |
+ |
+ tracker_->QueryTimeService(); |
+ net::TestURLFetcher* fetcher = url_fetcher_factory_->GetFetcherByID(0); |
+ ASSERT_NE(nullptr, fetcher); |
+ EXPECT_EQ("", fetcher->upload_data()); |
+ |
+ fetcher->set_response_code(200); |
+ fetcher->SetResponseString( |
+ "{\"current_time_millis\":1458939575214,\"server_nonce\":8." |
+ "18927404567873E115}"); |
+ fetcher->set_response_headers(new net::HttpResponseHeaders( |
+ "x-cup-server-proof: " |
+ "304402206f29b656ee23aafc7b6df4cfaa3bf711018cca2cbdbcb366932ae4433286f1f6" |
+ "022061ddbd4a6ea0d5d36b9f3a6c2a37b5ba4b5f42065f93cda5ed5e5fb60419bb81:" |
+ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\n" |
+ "ETag: " |
+ "W/" |
+ "\"304402206f29b656ee23aafc7b6df4cfaa3bf711018cca2cbdbcb366932ae4433286f1" |
+ "f6022061ddbd4a6ea0d5d36b9f3a6c2a37b5ba4b5f42065f93cda5ed5e5fb60419bb81:" |
+ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\"\n")); |
+ fetcher->delegate()->OnURLFetchComplete(fetcher); |
+ |
+ EXPECT_TRUE(tracker_->GetNetworkTime(&out_network_time, nullptr)); |
+ EXPECT_EQ(base::Time::UnixEpoch() + |
+ base::TimeDelta::FromMilliseconds(1458939575214), |
+ out_network_time); |
+ EXPECT_TRUE(tracker_->query_timer_.IsRunning()); |
+} |
+ |
+TEST_F(NetworkTimeTrackerTest, NoNetworkQueryWhileSynced) { |
+ base::Time in_network_time = clock_->Now(); |
+ UpdateNetworkTime(in_network_time, resolution_, latency_, |
+ tick_clock_->NowTicks()); |
+ |
+ tracker_->QueryTimeService(); |
+ net::TestURLFetcher* fetcher = url_fetcher_factory_->GetFetcherByID(0); |
+ EXPECT_EQ(nullptr, fetcher); // No query should be started. |
+} |
+ |
+TEST_F(NetworkTimeTrackerTest, UpdateFromNetworkBadSignature) { |
+ base::Time out_network_time; |
+ EXPECT_EQ(nullptr, url_fetcher_factory_->GetFetcherByID(0)); |
+ EXPECT_FALSE(tracker_->GetNetworkTime(&out_network_time, nullptr)); |
+ |
+ tracker_->QueryTimeService(); |
+ net::TestURLFetcher* fetcher = url_fetcher_factory_->GetFetcherByID(0); |
+ ASSERT_NE(nullptr, fetcher); |
+ EXPECT_EQ("", fetcher->upload_data()); |
+ |
+ fetcher->set_response_code(200); |
+ fetcher->SetResponseString( |
+ "{\"current_time_millis\":1458939575214,\"server_nonce\":8." |
+ "18927404567873E115}"); |
+ fetcher->set_response_headers(new net::HttpResponseHeaders( |
+ "x-cup-server-proof: " |
+ "304402206f29b656ee23aafc7b6df4cfaa3bf711018cca2cbdbcb366932ae4433286f1f6" |
+ "022061ddbd4a6ea0d5d36b9f3a6c2a37b5ba4b5f42065f93cda5ed5e5fb60419bb81:" |
+ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\n" |
+ "ETag: " |
+ "W/" |
+ "\"304402206f29b656ee23aafc7b6df4cfaa3bf711018cca2cbdbcb366932ae4433286f1" |
+ "f6022061ddbd4a6ea0d5d36b9f3a6c2a37b5ba4b5f42065f93cda5ed5e5fb60419bb81:" |
+ "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\"\n")); |
+ fetcher->delegate()->OnURLFetchComplete(fetcher); |
+ |
+ EXPECT_FALSE(tracker_->GetNetworkTime(&out_network_time, nullptr)); |
+ EXPECT_TRUE(tracker_->query_timer_.IsRunning()); |
} |
} // namespace network_time |