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 87709366203da6135474df0c79c49d9669f194b5..8dfaee3f8fa38e9e337708f9b2dfaef793945dd8 100644 |
--- a/components/network_time/network_time_tracker_unittest.cc |
+++ b/components/network_time/network_time_tracker_unittest.cc |
@@ -10,6 +10,7 @@ |
#include "base/compiler_specific.h" |
#include "base/memory/ptr_util.h" |
+#include "base/run_loop.h" |
#include "base/strings/stringprintf.h" |
#include "base/test/histogram_tester.h" |
#include "base/test/simple_test_clock.h" |
@@ -482,6 +483,91 @@ TEST_F(NetworkTimeTrackerTest, UpdateFromNetwork) { |
histograms.ExpectBucketCount(kFetchValidHistogram, true, 1); |
} |
+TEST_F(NetworkTimeTrackerTest, StartTimeFetch) { |
+ test_server_->RegisterRequestHandler(base::Bind(&GoodTimeResponseHandler)); |
+ EXPECT_TRUE(test_server_->Start()); |
+ tracker_->SetTimeServerURLForTesting(test_server_->GetURL("/")); |
+ |
+ base::Time out_network_time; |
+ EXPECT_EQ(NetworkTimeTracker::NETWORK_TIME_NO_SYNC_ATTEMPT, |
+ tracker_->GetNetworkTime(&out_network_time, nullptr)); |
+ |
+ base::RunLoop run_loop; |
+ EXPECT_TRUE(tracker_->StartTimeFetch(run_loop.QuitClosure())); |
+ tracker_->WaitForFetchForTesting(123123123); |
+ run_loop.Run(); |
+ |
+ EXPECT_EQ(NetworkTimeTracker::NETWORK_TIME_AVAILABLE, |
+ tracker_->GetNetworkTime(&out_network_time, nullptr)); |
+ EXPECT_EQ(base::Time::UnixEpoch() + |
+ base::TimeDelta::FromMilliseconds(1461621971825), |
+ out_network_time); |
+ // Should see no backoff in the success case. |
+ EXPECT_EQ(base::TimeDelta::FromMinutes(60), |
+ tracker_->GetTimerDelayForTesting()); |
+} |
+ |
+// Tests that when StartTimeFetch() is called with a query already in |
+// progress, it calls the callback when that query completes. |
+TEST_F(NetworkTimeTrackerTest, StartTimeFetchWithQueryInProgress) { |
+ test_server_->RegisterRequestHandler(base::Bind(&GoodTimeResponseHandler)); |
+ EXPECT_TRUE(test_server_->Start()); |
+ tracker_->SetTimeServerURLForTesting(test_server_->GetURL("/")); |
+ |
+ base::Time out_network_time; |
+ EXPECT_EQ(NetworkTimeTracker::NETWORK_TIME_NO_SYNC_ATTEMPT, |
+ tracker_->GetNetworkTime(&out_network_time, nullptr)); |
+ |
+ EXPECT_TRUE(tracker_->QueryTimeServiceForTesting()); |
+ |
+ base::RunLoop run_loop; |
+ EXPECT_TRUE(tracker_->StartTimeFetch(run_loop.QuitClosure())); |
+ tracker_->WaitForFetchForTesting(123123123); |
+ run_loop.Run(); |
+ |
+ EXPECT_EQ(NetworkTimeTracker::NETWORK_TIME_AVAILABLE, |
+ tracker_->GetNetworkTime(&out_network_time, nullptr)); |
+ EXPECT_EQ(base::Time::UnixEpoch() + |
+ base::TimeDelta::FromMilliseconds(1461621971825), |
+ out_network_time); |
+ // Should see no backoff in the success case. |
+ EXPECT_EQ(base::TimeDelta::FromMinutes(60), |
+ tracker_->GetTimerDelayForTesting()); |
+} |
+ |
+// Tests that StartTimeFetch() returns false if called while network |
+// time is available. |
+TEST_F(NetworkTimeTrackerTest, StartTimeFetchWhileSynced) { |
+ test_server_->RegisterRequestHandler(base::Bind(&GoodTimeResponseHandler)); |
+ EXPECT_TRUE(test_server_->Start()); |
+ tracker_->SetTimeServerURLForTesting(test_server_->GetURL("/")); |
+ |
+ base::Time in_network_time = clock_->Now(); |
+ UpdateNetworkTime(in_network_time, resolution_, latency_, |
+ tick_clock_->NowTicks()); |
+ |
+ // No query should be started so long as NetworkTimeTracker is synced. |
+ base::RunLoop run_loop; |
+ EXPECT_FALSE(tracker_->StartTimeFetch(run_loop.QuitClosure())); |
+} |
+ |
+// Tests that StartTimeFetch() returns false if the field trial |
+// is not configured to allow on-demand time fetches. |
+TEST_F(NetworkTimeTrackerTest, StartTimeFetchWithoutVariationsParam) { |
+ field_trial_test_->SetNetworkQueriesWithVariationsService( |
+ true, 0.0, FieldTrialTest::DISABLE_FETCHES_ON_DEMAND); |
+ test_server_->RegisterRequestHandler(base::Bind(&GoodTimeResponseHandler)); |
+ EXPECT_TRUE(test_server_->Start()); |
+ tracker_->SetTimeServerURLForTesting(test_server_->GetURL("/")); |
+ |
+ base::Time out_network_time; |
+ EXPECT_EQ(NetworkTimeTracker::NETWORK_TIME_NO_SYNC_ATTEMPT, |
+ tracker_->GetNetworkTime(&out_network_time, nullptr)); |
+ |
+ base::RunLoop run_loop; |
+ EXPECT_FALSE(tracker_->StartTimeFetch(run_loop.QuitClosure())); |
+} |
+ |
TEST_F(NetworkTimeTrackerTest, NoNetworkQueryWhileSynced) { |
test_server_->RegisterRequestHandler(base::Bind(&GoodTimeResponseHandler)); |
EXPECT_TRUE(test_server_->Start()); |