Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "components/network_time/network_time_tracker.h" | 5 #include "components/network_time/network_time_tracker.h" |
| 6 | 6 |
| 7 #include <memory> | 7 #include <memory> |
| 8 #include <string> | 8 #include <string> |
| 9 #include <utility> | 9 #include <utility> |
| 10 | 10 |
| 11 #include "base/compiler_specific.h" | 11 #include "base/compiler_specific.h" |
| 12 #include "base/memory/ptr_util.h" | 12 #include "base/memory/ptr_util.h" |
| 13 #include "base/run_loop.h" | |
| 13 #include "base/strings/stringprintf.h" | 14 #include "base/strings/stringprintf.h" |
| 14 #include "base/test/histogram_tester.h" | 15 #include "base/test/histogram_tester.h" |
| 15 #include "base/test/simple_test_clock.h" | 16 #include "base/test/simple_test_clock.h" |
| 16 #include "base/test/simple_test_tick_clock.h" | 17 #include "base/test/simple_test_tick_clock.h" |
| 17 #include "components/client_update_protocol/ecdsa.h" | 18 #include "components/client_update_protocol/ecdsa.h" |
| 18 #include "components/network_time/network_time_pref_names.h" | 19 #include "components/network_time/network_time_pref_names.h" |
| 19 #include "components/network_time/network_time_test_utils.h" | 20 #include "components/network_time/network_time_test_utils.h" |
| 20 #include "components/prefs/testing_pref_service.h" | 21 #include "components/prefs/testing_pref_service.h" |
| 21 #include "net/http/http_response_headers.h" | 22 #include "net/http/http_response_headers.h" |
| 22 #include "net/test/embedded_test_server/embedded_test_server.h" | 23 #include "net/test/embedded_test_server/embedded_test_server.h" |
| (...skipping 452 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 475 out_network_time); | 476 out_network_time); |
| 476 // Should see no backoff in the success case. | 477 // Should see no backoff in the success case. |
| 477 EXPECT_EQ(base::TimeDelta::FromMinutes(60), | 478 EXPECT_EQ(base::TimeDelta::FromMinutes(60), |
| 478 tracker_->GetTimerDelayForTesting()); | 479 tracker_->GetTimerDelayForTesting()); |
| 479 | 480 |
| 480 histograms.ExpectTotalCount(kFetchFailedHistogram, 0); | 481 histograms.ExpectTotalCount(kFetchFailedHistogram, 0); |
| 481 histograms.ExpectTotalCount(kFetchValidHistogram, 1); | 482 histograms.ExpectTotalCount(kFetchValidHistogram, 1); |
| 482 histograms.ExpectBucketCount(kFetchValidHistogram, true, 1); | 483 histograms.ExpectBucketCount(kFetchValidHistogram, true, 1); |
| 483 } | 484 } |
| 484 | 485 |
| 486 TEST_F(NetworkTimeTrackerTest, StartTimeFetch) { | |
| 487 test_server_->RegisterRequestHandler(base::Bind(&GoodTimeResponseHandler)); | |
| 488 EXPECT_TRUE(test_server_->Start()); | |
| 489 tracker_->SetTimeServerURLForTesting(test_server_->GetURL("/")); | |
| 490 | |
| 491 base::Time out_network_time; | |
| 492 EXPECT_EQ(NetworkTimeTracker::NETWORK_TIME_NO_SYNC_ATTEMPT, | |
| 493 tracker_->GetNetworkTime(&out_network_time, nullptr)); | |
| 494 | |
| 495 base::RunLoop run_loop; | |
| 496 EXPECT_TRUE(tracker_->StartTimeFetch(run_loop.QuitClosure())); | |
| 497 tracker_->WaitForFetchForTesting(123123123); | |
| 498 run_loop.Run(); | |
| 499 | |
| 500 EXPECT_EQ(NetworkTimeTracker::NETWORK_TIME_AVAILABLE, | |
| 501 tracker_->GetNetworkTime(&out_network_time, nullptr)); | |
| 502 EXPECT_EQ(base::Time::UnixEpoch() + | |
| 503 base::TimeDelta::FromMilliseconds(1461621971825), | |
| 504 out_network_time); | |
| 505 // Should see no backoff in the success case. | |
| 506 EXPECT_EQ(base::TimeDelta::FromMinutes(60), | |
| 507 tracker_->GetTimerDelayForTesting()); | |
| 508 } | |
| 509 | |
| 510 // Tests that when StartTimeFetch() is called with a query already in | |
| 511 // progress, it calls the callback when that query completes. | |
| 512 TEST_F(NetworkTimeTrackerTest, StartTimeFetchWithQueryInProgress) { | |
| 513 test_server_->RegisterRequestHandler(base::Bind(&GoodTimeResponseHandler)); | |
| 514 EXPECT_TRUE(test_server_->Start()); | |
| 515 tracker_->SetTimeServerURLForTesting(test_server_->GetURL("/")); | |
| 516 | |
| 517 base::Time out_network_time; | |
| 518 EXPECT_EQ(NetworkTimeTracker::NETWORK_TIME_NO_SYNC_ATTEMPT, | |
| 519 tracker_->GetNetworkTime(&out_network_time, nullptr)); | |
| 520 | |
| 521 EXPECT_TRUE(tracker_->QueryTimeServiceForTesting()); | |
| 522 | |
| 523 base::RunLoop run_loop; | |
| 524 EXPECT_TRUE(tracker_->StartTimeFetch(run_loop.QuitClosure())); | |
| 525 tracker_->WaitForFetchForTesting(123123123); | |
| 526 run_loop.Run(); | |
| 527 | |
| 528 EXPECT_EQ(NetworkTimeTracker::NETWORK_TIME_AVAILABLE, | |
| 529 tracker_->GetNetworkTime(&out_network_time, nullptr)); | |
| 530 EXPECT_EQ(base::Time::UnixEpoch() + | |
| 531 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
| |
| 532 out_network_time); | |
| 533 // Should see no backoff in the success case. | |
| 534 EXPECT_EQ(base::TimeDelta::FromMinutes(60), | |
| 535 tracker_->GetTimerDelayForTesting()); | |
| 536 } | |
| 537 | |
| 538 // Tests that StartTimeFetch() returns false if called while network | |
| 539 // time is available. | |
| 540 TEST_F(NetworkTimeTrackerTest, StartTimeFetchWhileSynced) { | |
| 541 test_server_->RegisterRequestHandler(base::Bind(&GoodTimeResponseHandler)); | |
| 542 EXPECT_TRUE(test_server_->Start()); | |
| 543 tracker_->SetTimeServerURLForTesting(test_server_->GetURL("/")); | |
| 544 | |
| 545 base::Time in_network_time = clock_->Now(); | |
| 546 UpdateNetworkTime(in_network_time, resolution_, latency_, | |
| 547 tick_clock_->NowTicks()); | |
| 548 | |
| 549 // No query should be started so long as NetworkTimeTracker is synced. | |
| 550 base::RunLoop run_loop; | |
| 551 EXPECT_FALSE(tracker_->StartTimeFetch(run_loop.QuitClosure())); | |
| 552 } | |
| 553 | |
| 554 // Tests that StartTimeFetch() returns false if the field trial | |
| 555 // is not configured to allow on-demand time fetches. | |
| 556 TEST_F(NetworkTimeTrackerTest, StartTimeFetchWithoutVariationsParam) { | |
| 557 field_trial_test_->SetNetworkQueriesWithVariationsService( | |
| 558 true, 0.0, FieldTrialTest::DISABLE_FETCHES_ON_DEMAND); | |
| 559 test_server_->RegisterRequestHandler(base::Bind(&GoodTimeResponseHandler)); | |
| 560 EXPECT_TRUE(test_server_->Start()); | |
| 561 tracker_->SetTimeServerURLForTesting(test_server_->GetURL("/")); | |
| 562 | |
| 563 base::Time out_network_time; | |
| 564 EXPECT_EQ(NetworkTimeTracker::NETWORK_TIME_NO_SYNC_ATTEMPT, | |
| 565 tracker_->GetNetworkTime(&out_network_time, nullptr)); | |
| 566 | |
| 567 base::RunLoop run_loop; | |
| 568 EXPECT_FALSE(tracker_->StartTimeFetch(run_loop.QuitClosure())); | |
| 569 } | |
| 570 | |
| 485 TEST_F(NetworkTimeTrackerTest, NoNetworkQueryWhileSynced) { | 571 TEST_F(NetworkTimeTrackerTest, NoNetworkQueryWhileSynced) { |
| 486 test_server_->RegisterRequestHandler(base::Bind(&GoodTimeResponseHandler)); | 572 test_server_->RegisterRequestHandler(base::Bind(&GoodTimeResponseHandler)); |
| 487 EXPECT_TRUE(test_server_->Start()); | 573 EXPECT_TRUE(test_server_->Start()); |
| 488 tracker_->SetTimeServerURLForTesting(test_server_->GetURL("/")); | 574 tracker_->SetTimeServerURLForTesting(test_server_->GetURL("/")); |
| 489 | 575 |
| 490 field_trial_test_->SetNetworkQueriesWithVariationsService( | 576 field_trial_test_->SetNetworkQueriesWithVariationsService( |
| 491 true, 0.0, FieldTrialTest::ENABLE_FETCHES_ON_DEMAND); | 577 true, 0.0, FieldTrialTest::ENABLE_FETCHES_ON_DEMAND); |
| 492 base::Time in_network_time = clock_->Now(); | 578 base::Time in_network_time = clock_->Now(); |
| 493 UpdateNetworkTime(in_network_time, resolution_, latency_, | 579 UpdateNetworkTime(in_network_time, resolution_, latency_, |
| 494 tick_clock_->NowTicks()); | 580 tick_clock_->NowTicks()); |
| (...skipping 218 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 713 EXPECT_EQ(NetworkTimeTracker::NETWORK_TIME_SUBSEQUENT_SYNC_PENDING, | 799 EXPECT_EQ(NetworkTimeTracker::NETWORK_TIME_SUBSEQUENT_SYNC_PENDING, |
| 714 tracker_->GetNetworkTime(&out_network_time, nullptr)); | 800 tracker_->GetNetworkTime(&out_network_time, nullptr)); |
| 715 histograms.ExpectTotalCount(kFetchFailedHistogram, 0); | 801 histograms.ExpectTotalCount(kFetchFailedHistogram, 0); |
| 716 histograms.ExpectTotalCount(kFetchValidHistogram, 1); | 802 histograms.ExpectTotalCount(kFetchValidHistogram, 1); |
| 717 histograms.ExpectBucketCount(kFetchValidHistogram, false, 1); | 803 histograms.ExpectBucketCount(kFetchValidHistogram, false, 1); |
| 718 | 804 |
| 719 tracker_->WaitForFetchForTesting(123123123); | 805 tracker_->WaitForFetchForTesting(123123123); |
| 720 } | 806 } |
| 721 | 807 |
| 722 } // namespace network_time | 808 } // namespace network_time |
| OLD | NEW |