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 691ebfe3af1941a1497074ed1540b8ce449c5e58..5406a0a18011ae4f2bb18146b242446c254c59ed 100644 |
| --- a/components/network_time/network_time_tracker_unittest.cc |
| +++ b/components/network_time/network_time_tracker_unittest.cc |
| @@ -5,19 +5,32 @@ |
| #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 { |
| +struct NetworkTimeTrackerPeer { |
|
estark
2016/03/28 17:35:10
I haven't seen this pattern before. FRIEND_TEST_AL
mab
2016/03/28 19:56:26
No, no, I just wasn't aware of the standard patter
|
| + void QueryTimeService() { tracker_->QueryTimeService(); } |
| + |
| + bool TimerIsRunning() { return tracker_->query_timer_.IsRunning(); } |
| + |
| + NetworkTimeTracker* tracker_; |
| +}; |
| + |
| class NetworkTimeTrackerTest : public testing::Test { |
| public: |
| ~NetworkTimeTrackerTest() override {} |
| void SetUp() override { |
| + url_fetcher_factory_.reset(new net::TestURLFetcherFactory()); |
| NetworkTimeTracker::RegisterPrefs(pref_service_.registry()); |
| clock_ = new base::SimpleTestClock(); |
| @@ -28,8 +41,9 @@ 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()))); |
| + peer_.tracker_ = tracker_.get(); |
| // Can not be smaller than 15, it's the NowFromSystemTime() resolution. |
| resolution_ = base::TimeDelta::FromMilliseconds(17); |
| @@ -48,8 +62,9 @@ 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()))); |
| + peer_.tracker_ = tracker_.get(); |
| } |
| // Updates the notifier's time with the specified parameters. |
| @@ -69,6 +84,7 @@ class NetworkTimeTrackerTest : public testing::Test { |
| } |
| protected: |
| + base::MessageLoop message_loop_; |
| base::TimeDelta resolution_; |
| base::TimeDelta latency_; |
| base::TimeDelta adjustment_; |
| @@ -76,6 +92,8 @@ class NetworkTimeTrackerTest : public testing::Test { |
| base::SimpleTestTickClock* tick_clock_; |
| TestingPrefServiceSimple pref_service_; |
| scoped_ptr<NetworkTimeTracker> tracker_; |
| + scoped_ptr<net::TestURLFetcherFactory> url_fetcher_factory_; |
| + NetworkTimeTrackerPeer peer_; |
| }; |
| TEST_F(NetworkTimeTrackerTest, Uninitialized) { |
| @@ -291,4 +309,77 @@ TEST_F(NetworkTimeTrackerTest, SerializeWithWallClockAdvance) { |
| EXPECT_FALSE(tracker_->GetNetworkTime(&out_network_time, NULL)); |
| } |
| +TEST_F(NetworkTimeTrackerTest, UpdateFromNetwork) { |
| + base::Time out_network_time; |
| + EXPECT_EQ(nullptr, url_fetcher_factory_->GetFetcherByID(0)); |
| + EXPECT_FALSE(tracker_->GetNetworkTime(&out_network_time, NULL)); |
|
estark
2016/03/28 17:35:10
nullptr instead of NULL
mab
2016/03/28 19:56:26
Done.
|
| + |
| + peer_.QueryTimeService(); |
| + net::TestURLFetcher* fetcher = url_fetcher_factory_->GetFetcherByID(0); |
| + EXPECT_NE(nullptr, fetcher); |
|
estark
2016/03/28 17:35:10
ASSERT_NE (if this fails, the test should be abort
mab
2016/03/28 19:56:26
Done.
|
| + 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, NULL)); |
| + EXPECT_EQ(base::Time::UnixEpoch() + |
| + base::TimeDelta::FromMilliseconds(1458939575214), |
| + out_network_time); |
| + EXPECT_TRUE(peer_.TimerIsRunning()); |
| +} |
| + |
| +TEST_F(NetworkTimeTrackerTest, NoNetworkQueryWhileSynced) { |
| + base::Time in_network_time = clock_->Now(); |
| + UpdateNetworkTime(in_network_time, resolution_, latency_, |
| + tick_clock_->NowTicks()); |
| + |
| + peer_.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, NULL)); |
| + |
| + peer_.QueryTimeService(); |
| + net::TestURLFetcher* fetcher = url_fetcher_factory_->GetFetcherByID(0); |
| + EXPECT_NE(nullptr, fetcher); |
|
estark
2016/03/28 17:35:10
ASSERT_NE
mab
2016/03/28 19:56:26
Done.
|
| + 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, NULL)); |
| + EXPECT_TRUE(peer_.TimerIsRunning()); |
| +} |
| + |
| } // namespace network_time |