Chromium Code Reviews| 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), |
|
meacer
2016/10/26 00:38:15
Just curious, what's the significance of 04/25/201
estark
2016/10/26 05:03:47
Not sure! My best guess is that it was arbitrarily
|
| + 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()); |