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 <map> | 7 #include <map> |
8 #include <memory> | 8 #include <memory> |
9 #include <string> | 9 #include <string> |
10 #include <utility> | 10 #include <utility> |
(...skipping 223 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
234 TestingPrefServiceSimple pref_service_; | 234 TestingPrefServiceSimple pref_service_; |
235 std::unique_ptr<base::FieldTrialList> field_trial_list_; | 235 std::unique_ptr<base::FieldTrialList> field_trial_list_; |
236 std::unique_ptr<NetworkTimeTracker> tracker_; | 236 std::unique_ptr<NetworkTimeTracker> tracker_; |
237 std::unique_ptr<net::EmbeddedTestServer> test_server_; | 237 std::unique_ptr<net::EmbeddedTestServer> test_server_; |
238 std::unique_ptr<base::test::ScopedFeatureList> scoped_feature_list_; | 238 std::unique_ptr<base::test::ScopedFeatureList> scoped_feature_list_; |
239 }; | 239 }; |
240 | 240 |
241 TEST_F(NetworkTimeTrackerTest, Uninitialized) { | 241 TEST_F(NetworkTimeTrackerTest, Uninitialized) { |
242 base::Time network_time; | 242 base::Time network_time; |
243 base::TimeDelta uncertainty; | 243 base::TimeDelta uncertainty; |
244 EXPECT_EQ(NetworkTimeTracker::NETWORK_TIME_NO_SYNC, | 244 EXPECT_EQ(NetworkTimeTracker::NETWORK_TIME_NO_SYNC_ATTEMPT, |
245 tracker_->GetNetworkTime(&network_time, &uncertainty)); | 245 tracker_->GetNetworkTime(&network_time, &uncertainty)); |
246 } | 246 } |
247 | 247 |
248 TEST_F(NetworkTimeTrackerTest, LongPostingDelay) { | 248 TEST_F(NetworkTimeTrackerTest, LongPostingDelay) { |
249 // The request arrives at the server, which records the time. Advance the | 249 // The request arrives at the server, which records the time. Advance the |
250 // clock to simulate the latency of sending the reply, which we'll say for | 250 // clock to simulate the latency of sending the reply, which we'll say for |
251 // convenience is half the total latency. | 251 // convenience is half the total latency. |
252 base::Time in_network_time = clock_->Now(); | 252 base::Time in_network_time = clock_->Now(); |
253 AdvanceBoth(latency_ / 2); | 253 AdvanceBoth(latency_ / 2); |
254 | 254 |
(...skipping 210 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
465 double local, network; | 465 double local, network; |
466 const base::DictionaryValue* saved_prefs = | 466 const base::DictionaryValue* saved_prefs = |
467 pref_service_.GetDictionary(prefs::kNetworkTimeMapping); | 467 pref_service_.GetDictionary(prefs::kNetworkTimeMapping); |
468 saved_prefs->GetDouble("local", &local); | 468 saved_prefs->GetDouble("local", &local); |
469 saved_prefs->GetDouble("network", &network); | 469 saved_prefs->GetDouble("network", &network); |
470 base::DictionaryValue prefs; | 470 base::DictionaryValue prefs; |
471 prefs.SetDouble("local", local); | 471 prefs.SetDouble("local", local); |
472 prefs.SetDouble("network", network); | 472 prefs.SetDouble("network", network); |
473 pref_service_.Set(prefs::kNetworkTimeMapping, prefs); | 473 pref_service_.Set(prefs::kNetworkTimeMapping, prefs); |
474 Reset(); | 474 Reset(); |
475 EXPECT_EQ(NetworkTimeTracker::NETWORK_TIME_NO_SYNC, | 475 EXPECT_EQ(NetworkTimeTracker::NETWORK_TIME_NO_SYNC_ATTEMPT, |
476 tracker_->GetNetworkTime(&out_network_time, nullptr)); | 476 tracker_->GetNetworkTime(&out_network_time, nullptr)); |
477 } | 477 } |
478 | 478 |
479 TEST_F(NetworkTimeTrackerTest, SerializeWithLongDelay) { | 479 TEST_F(NetworkTimeTrackerTest, SerializeWithLongDelay) { |
480 // Test that if the serialized data are more than a week old, they are | 480 // Test that if the serialized data are more than a week old, they are |
481 // discarded. | 481 // discarded. |
482 base::Time in_network_time = clock_->Now() - base::TimeDelta::FromDays(90); | 482 base::Time in_network_time = clock_->Now() - base::TimeDelta::FromDays(90); |
483 UpdateNetworkTime(in_network_time - latency_ / 2, resolution_, latency_, | 483 UpdateNetworkTime(in_network_time - latency_ / 2, resolution_, latency_, |
484 tick_clock_->NowTicks()); | 484 tick_clock_->NowTicks()); |
485 base::Time out_network_time; | 485 base::Time out_network_time; |
486 EXPECT_EQ(NetworkTimeTracker::NETWORK_TIME_AVAILABLE, | 486 EXPECT_EQ(NetworkTimeTracker::NETWORK_TIME_AVAILABLE, |
487 tracker_->GetNetworkTime(&out_network_time, nullptr)); | 487 tracker_->GetNetworkTime(&out_network_time, nullptr)); |
488 AdvanceBoth(base::TimeDelta::FromDays(8)); | 488 AdvanceBoth(base::TimeDelta::FromDays(8)); |
489 Reset(); | 489 Reset(); |
490 EXPECT_EQ(NetworkTimeTracker::NETWORK_TIME_NO_SYNC, | 490 EXPECT_EQ(NetworkTimeTracker::NETWORK_TIME_NO_SYNC_ATTEMPT, |
491 tracker_->GetNetworkTime(&out_network_time, nullptr)); | 491 tracker_->GetNetworkTime(&out_network_time, nullptr)); |
492 } | 492 } |
493 | 493 |
494 TEST_F(NetworkTimeTrackerTest, SerializeWithTickClockAdvance) { | 494 TEST_F(NetworkTimeTrackerTest, SerializeWithTickClockAdvance) { |
495 // Test that serialized data are discarded if the wall clock and tick clock | 495 // Test that serialized data are discarded if the wall clock and tick clock |
496 // have not advanced consistently since data were serialized. | 496 // have not advanced consistently since data were serialized. |
497 base::Time in_network_time = clock_->Now() - base::TimeDelta::FromDays(90); | 497 base::Time in_network_time = clock_->Now() - base::TimeDelta::FromDays(90); |
498 UpdateNetworkTime(in_network_time - latency_ / 2, resolution_, latency_, | 498 UpdateNetworkTime(in_network_time - latency_ / 2, resolution_, latency_, |
499 tick_clock_->NowTicks()); | 499 tick_clock_->NowTicks()); |
500 base::Time out_network_time; | 500 base::Time out_network_time; |
(...skipping 20 matching lines...) Expand all Loading... |
521 EXPECT_EQ(NetworkTimeTracker::NETWORK_TIME_SYNC_LOST, | 521 EXPECT_EQ(NetworkTimeTracker::NETWORK_TIME_SYNC_LOST, |
522 tracker_->GetNetworkTime(&out_network_time, nullptr)); | 522 tracker_->GetNetworkTime(&out_network_time, nullptr)); |
523 } | 523 } |
524 | 524 |
525 TEST_F(NetworkTimeTrackerTest, UpdateFromNetwork) { | 525 TEST_F(NetworkTimeTrackerTest, UpdateFromNetwork) { |
526 base::HistogramTester histograms; | 526 base::HistogramTester histograms; |
527 histograms.ExpectTotalCount(kFetchFailedHistogram, 0); | 527 histograms.ExpectTotalCount(kFetchFailedHistogram, 0); |
528 histograms.ExpectTotalCount(kFetchValidHistogram, 0); | 528 histograms.ExpectTotalCount(kFetchValidHistogram, 0); |
529 | 529 |
530 base::Time out_network_time; | 530 base::Time out_network_time; |
531 EXPECT_EQ(NetworkTimeTracker::NETWORK_TIME_NO_SYNC, | 531 EXPECT_EQ(NetworkTimeTracker::NETWORK_TIME_NO_SYNC_ATTEMPT, |
532 tracker_->GetNetworkTime(&out_network_time, nullptr)); | 532 tracker_->GetNetworkTime(&out_network_time, nullptr)); |
533 // First query should happen soon. | 533 // First query should happen soon. |
534 EXPECT_EQ(base::TimeDelta::FromMinutes(0), | 534 EXPECT_EQ(base::TimeDelta::FromMinutes(0), |
535 tracker_->GetTimerDelayForTesting()); | 535 tracker_->GetTimerDelayForTesting()); |
536 | 536 |
537 test_server_->RegisterRequestHandler( | 537 test_server_->RegisterRequestHandler( |
538 base::Bind(&NetworkTimeTrackerTest::GoodTimeResponseHandler)); | 538 base::Bind(&NetworkTimeTrackerTest::GoodTimeResponseHandler)); |
539 EXPECT_TRUE(test_server_->Start()); | 539 EXPECT_TRUE(test_server_->Start()); |
540 tracker_->SetTimeServerURLForTesting(test_server_->GetURL("/")); | 540 tracker_->SetTimeServerURLForTesting(test_server_->GetURL("/")); |
541 EXPECT_TRUE(tracker_->QueryTimeServiceForTesting()); | 541 EXPECT_TRUE(tracker_->QueryTimeServiceForTesting()); |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
598 histograms.ExpectTotalCount(kFetchValidHistogram, 0); | 598 histograms.ExpectTotalCount(kFetchValidHistogram, 0); |
599 | 599 |
600 test_server_->RegisterRequestHandler( | 600 test_server_->RegisterRequestHandler( |
601 base::Bind(&NetworkTimeTrackerTest::BadSignatureResponseHandler)); | 601 base::Bind(&NetworkTimeTrackerTest::BadSignatureResponseHandler)); |
602 EXPECT_TRUE(test_server_->Start()); | 602 EXPECT_TRUE(test_server_->Start()); |
603 tracker_->SetTimeServerURLForTesting(test_server_->GetURL("/")); | 603 tracker_->SetTimeServerURLForTesting(test_server_->GetURL("/")); |
604 EXPECT_TRUE(tracker_->QueryTimeServiceForTesting()); | 604 EXPECT_TRUE(tracker_->QueryTimeServiceForTesting()); |
605 tracker_->WaitForFetchForTesting(123123123); | 605 tracker_->WaitForFetchForTesting(123123123); |
606 | 606 |
607 base::Time out_network_time; | 607 base::Time out_network_time; |
608 EXPECT_EQ(NetworkTimeTracker::NETWORK_TIME_NO_SYNC, | 608 EXPECT_EQ(NetworkTimeTracker::NETWORK_TIME_NO_SUCCESSFUL_SYNC, |
609 tracker_->GetNetworkTime(&out_network_time, nullptr)); | 609 tracker_->GetNetworkTime(&out_network_time, nullptr)); |
610 EXPECT_EQ(base::TimeDelta::FromMinutes(120), | 610 EXPECT_EQ(base::TimeDelta::FromMinutes(120), |
611 tracker_->GetTimerDelayForTesting()); | 611 tracker_->GetTimerDelayForTesting()); |
612 | 612 |
613 histograms.ExpectTotalCount(kFetchFailedHistogram, 0); | 613 histograms.ExpectTotalCount(kFetchFailedHistogram, 0); |
614 histograms.ExpectTotalCount(kFetchValidHistogram, 1); | 614 histograms.ExpectTotalCount(kFetchValidHistogram, 1); |
615 histograms.ExpectBucketCount(kFetchValidHistogram, false, 1); | 615 histograms.ExpectBucketCount(kFetchValidHistogram, false, 1); |
616 } | 616 } |
617 | 617 |
618 static const uint8_t kDevKeyPubBytes[] = { | 618 static const uint8_t kDevKeyPubBytes[] = { |
(...skipping 14 matching lines...) Expand all Loading... |
633 test_server_->RegisterRequestHandler( | 633 test_server_->RegisterRequestHandler( |
634 base::Bind(&NetworkTimeTrackerTest::BadDataResponseHandler)); | 634 base::Bind(&NetworkTimeTrackerTest::BadDataResponseHandler)); |
635 EXPECT_TRUE(test_server_->Start()); | 635 EXPECT_TRUE(test_server_->Start()); |
636 base::StringPiece key = {reinterpret_cast<const char*>(kDevKeyPubBytes), | 636 base::StringPiece key = {reinterpret_cast<const char*>(kDevKeyPubBytes), |
637 sizeof(kDevKeyPubBytes)}; | 637 sizeof(kDevKeyPubBytes)}; |
638 tracker_->SetPublicKeyForTesting(key); | 638 tracker_->SetPublicKeyForTesting(key); |
639 tracker_->SetTimeServerURLForTesting(test_server_->GetURL("/")); | 639 tracker_->SetTimeServerURLForTesting(test_server_->GetURL("/")); |
640 EXPECT_TRUE(tracker_->QueryTimeServiceForTesting()); | 640 EXPECT_TRUE(tracker_->QueryTimeServiceForTesting()); |
641 tracker_->WaitForFetchForTesting(123123123); | 641 tracker_->WaitForFetchForTesting(123123123); |
642 base::Time out_network_time; | 642 base::Time out_network_time; |
643 EXPECT_EQ(NetworkTimeTracker::NETWORK_TIME_NO_SYNC, | 643 EXPECT_EQ(NetworkTimeTracker::NETWORK_TIME_NO_SUCCESSFUL_SYNC, |
644 tracker_->GetNetworkTime(&out_network_time, nullptr)); | 644 tracker_->GetNetworkTime(&out_network_time, nullptr)); |
645 EXPECT_EQ(base::TimeDelta::FromMinutes(120), | 645 EXPECT_EQ(base::TimeDelta::FromMinutes(120), |
646 tracker_->GetTimerDelayForTesting()); | 646 tracker_->GetTimerDelayForTesting()); |
647 | 647 |
648 histograms.ExpectTotalCount(kFetchFailedHistogram, 0); | 648 histograms.ExpectTotalCount(kFetchFailedHistogram, 0); |
649 histograms.ExpectTotalCount(kFetchValidHistogram, 1); | 649 histograms.ExpectTotalCount(kFetchValidHistogram, 1); |
650 histograms.ExpectBucketCount(kFetchValidHistogram, false, 1); | 650 histograms.ExpectBucketCount(kFetchValidHistogram, false, 1); |
651 } | 651 } |
652 | 652 |
653 TEST_F(NetworkTimeTrackerTest, UpdateFromNetworkServerError) { | 653 TEST_F(NetworkTimeTrackerTest, UpdateFromNetworkServerError) { |
654 base::HistogramTester histograms; | 654 base::HistogramTester histograms; |
655 histograms.ExpectTotalCount(kFetchFailedHistogram, 0); | 655 histograms.ExpectTotalCount(kFetchFailedHistogram, 0); |
656 histograms.ExpectTotalCount(kFetchValidHistogram, 0); | 656 histograms.ExpectTotalCount(kFetchValidHistogram, 0); |
657 | 657 |
658 test_server_->RegisterRequestHandler( | 658 test_server_->RegisterRequestHandler( |
659 base::Bind(&NetworkTimeTrackerTest::ServerErrorResponseHandler)); | 659 base::Bind(&NetworkTimeTrackerTest::ServerErrorResponseHandler)); |
660 EXPECT_TRUE(test_server_->Start()); | 660 EXPECT_TRUE(test_server_->Start()); |
661 tracker_->SetTimeServerURLForTesting(test_server_->GetURL("/")); | 661 tracker_->SetTimeServerURLForTesting(test_server_->GetURL("/")); |
662 EXPECT_TRUE(tracker_->QueryTimeServiceForTesting()); | 662 EXPECT_TRUE(tracker_->QueryTimeServiceForTesting()); |
663 tracker_->WaitForFetchForTesting(123123123); | 663 tracker_->WaitForFetchForTesting(123123123); |
664 | 664 |
665 base::Time out_network_time; | 665 base::Time out_network_time; |
666 EXPECT_EQ(NetworkTimeTracker::NETWORK_TIME_NO_SYNC, | 666 EXPECT_EQ(NetworkTimeTracker::NETWORK_TIME_NO_SUCCESSFUL_SYNC, |
667 tracker_->GetNetworkTime(&out_network_time, nullptr)); | 667 tracker_->GetNetworkTime(&out_network_time, nullptr)); |
668 // Should see backoff in the error case. | 668 // Should see backoff in the error case. |
669 EXPECT_EQ(base::TimeDelta::FromMinutes(120), | 669 EXPECT_EQ(base::TimeDelta::FromMinutes(120), |
670 tracker_->GetTimerDelayForTesting()); | 670 tracker_->GetTimerDelayForTesting()); |
671 | 671 |
672 histograms.ExpectTotalCount(kFetchFailedHistogram, 1); | 672 histograms.ExpectTotalCount(kFetchFailedHistogram, 1); |
673 // There was no network error, so the histogram is recorded as | 673 // There was no network error, so the histogram is recorded as |
674 // net::OK, indicating that the connection succeeded but there was a | 674 // net::OK, indicating that the connection succeeded but there was a |
675 // non-200 HTTP status code. | 675 // non-200 HTTP status code. |
676 histograms.ExpectBucketCount(kFetchFailedHistogram, net::OK, 1); | 676 histograms.ExpectBucketCount(kFetchFailedHistogram, net::OK, 1); |
677 histograms.ExpectTotalCount(kFetchValidHistogram, 0); | 677 histograms.ExpectTotalCount(kFetchValidHistogram, 0); |
678 } | 678 } |
679 | 679 |
680 TEST_F(NetworkTimeTrackerTest, UpdateFromNetworkNetworkError) { | 680 TEST_F(NetworkTimeTrackerTest, UpdateFromNetworkNetworkError) { |
681 base::HistogramTester histograms; | 681 base::HistogramTester histograms; |
682 histograms.ExpectTotalCount(kFetchFailedHistogram, 0); | 682 histograms.ExpectTotalCount(kFetchFailedHistogram, 0); |
683 histograms.ExpectTotalCount(kFetchValidHistogram, 0); | 683 histograms.ExpectTotalCount(kFetchValidHistogram, 0); |
684 | 684 |
685 test_server_->RegisterRequestHandler( | 685 test_server_->RegisterRequestHandler( |
686 base::Bind(&NetworkTimeTrackerTest::NetworkErrorResponseHandler)); | 686 base::Bind(&NetworkTimeTrackerTest::NetworkErrorResponseHandler)); |
687 EXPECT_TRUE(test_server_->Start()); | 687 EXPECT_TRUE(test_server_->Start()); |
688 tracker_->SetTimeServerURLForTesting(test_server_->GetURL("/")); | 688 tracker_->SetTimeServerURLForTesting(test_server_->GetURL("/")); |
689 EXPECT_TRUE(tracker_->QueryTimeServiceForTesting()); | 689 EXPECT_TRUE(tracker_->QueryTimeServiceForTesting()); |
690 tracker_->WaitForFetchForTesting(123123123); | 690 tracker_->WaitForFetchForTesting(123123123); |
691 | 691 |
692 base::Time out_network_time; | 692 base::Time out_network_time; |
693 EXPECT_EQ(NetworkTimeTracker::NETWORK_TIME_NO_SYNC, | 693 EXPECT_EQ(NetworkTimeTracker::NETWORK_TIME_NO_SUCCESSFUL_SYNC, |
694 tracker_->GetNetworkTime(&out_network_time, nullptr)); | 694 tracker_->GetNetworkTime(&out_network_time, nullptr)); |
695 // Should see backoff in the error case. | 695 // Should see backoff in the error case. |
696 EXPECT_EQ(base::TimeDelta::FromMinutes(120), | 696 EXPECT_EQ(base::TimeDelta::FromMinutes(120), |
697 tracker_->GetTimerDelayForTesting()); | 697 tracker_->GetTimerDelayForTesting()); |
698 | 698 |
699 histograms.ExpectTotalCount(kFetchFailedHistogram, 1); | 699 histograms.ExpectTotalCount(kFetchFailedHistogram, 1); |
700 histograms.ExpectBucketCount(kFetchFailedHistogram, -net::ERR_EMPTY_RESPONSE, | 700 histograms.ExpectBucketCount(kFetchFailedHistogram, -net::ERR_EMPTY_RESPONSE, |
701 1); | 701 1); |
702 histograms.ExpectTotalCount(kFetchValidHistogram, 0); | 702 histograms.ExpectTotalCount(kFetchValidHistogram, 0); |
703 } | 703 } |
704 | 704 |
705 TEST_F(NetworkTimeTrackerTest, UpdateFromNetworkLargeResponse) { | 705 TEST_F(NetworkTimeTrackerTest, UpdateFromNetworkLargeResponse) { |
706 base::HistogramTester histograms; | 706 base::HistogramTester histograms; |
707 histograms.ExpectTotalCount(kFetchFailedHistogram, 0); | 707 histograms.ExpectTotalCount(kFetchFailedHistogram, 0); |
708 histograms.ExpectTotalCount(kFetchValidHistogram, 0); | 708 histograms.ExpectTotalCount(kFetchValidHistogram, 0); |
709 | 709 |
710 test_server_->RegisterRequestHandler( | 710 test_server_->RegisterRequestHandler( |
711 base::Bind(&NetworkTimeTrackerTest::GoodTimeResponseHandler)); | 711 base::Bind(&NetworkTimeTrackerTest::GoodTimeResponseHandler)); |
712 EXPECT_TRUE(test_server_->Start()); | 712 EXPECT_TRUE(test_server_->Start()); |
713 tracker_->SetTimeServerURLForTesting(test_server_->GetURL("/")); | 713 tracker_->SetTimeServerURLForTesting(test_server_->GetURL("/")); |
714 | 714 |
715 base::Time out_network_time; | 715 base::Time out_network_time; |
716 | 716 |
717 tracker_->SetMaxResponseSizeForTesting(3); | 717 tracker_->SetMaxResponseSizeForTesting(3); |
718 EXPECT_TRUE(tracker_->QueryTimeServiceForTesting()); | 718 EXPECT_TRUE(tracker_->QueryTimeServiceForTesting()); |
719 tracker_->WaitForFetchForTesting(123123123); | 719 tracker_->WaitForFetchForTesting(123123123); |
720 EXPECT_EQ(NetworkTimeTracker::NETWORK_TIME_NO_SYNC, | 720 EXPECT_EQ(NetworkTimeTracker::NETWORK_TIME_NO_SUCCESSFUL_SYNC, |
721 tracker_->GetNetworkTime(&out_network_time, nullptr)); | 721 tracker_->GetNetworkTime(&out_network_time, nullptr)); |
722 | 722 |
723 histograms.ExpectTotalCount(kFetchFailedHistogram, 1); | 723 histograms.ExpectTotalCount(kFetchFailedHistogram, 1); |
724 histograms.ExpectTotalCount(kFetchValidHistogram, 0); | 724 histograms.ExpectTotalCount(kFetchValidHistogram, 0); |
725 | 725 |
726 tracker_->SetMaxResponseSizeForTesting(1024); | 726 tracker_->SetMaxResponseSizeForTesting(1024); |
727 EXPECT_TRUE(tracker_->QueryTimeServiceForTesting()); | 727 EXPECT_TRUE(tracker_->QueryTimeServiceForTesting()); |
728 tracker_->WaitForFetchForTesting(123123123); | 728 tracker_->WaitForFetchForTesting(123123123); |
729 EXPECT_EQ(NetworkTimeTracker::NETWORK_TIME_AVAILABLE, | 729 EXPECT_EQ(NetworkTimeTracker::NETWORK_TIME_AVAILABLE, |
730 tracker_->GetNetworkTime(&out_network_time, nullptr)); | 730 tracker_->GetNetworkTime(&out_network_time, nullptr)); |
731 | 731 |
732 histograms.ExpectTotalCount(kFetchFailedHistogram, 1); | 732 histograms.ExpectTotalCount(kFetchFailedHistogram, 1); |
733 histograms.ExpectTotalCount(kFetchValidHistogram, 1); | 733 histograms.ExpectTotalCount(kFetchValidHistogram, 1); |
734 histograms.ExpectBucketCount(kFetchValidHistogram, true, 1); | 734 histograms.ExpectBucketCount(kFetchValidHistogram, true, 1); |
735 } | 735 } |
736 | 736 |
| 737 TEST_F(NetworkTimeTrackerTest, UpdateFromNetworkFirstSyncPending) { |
| 738 base::HistogramTester histograms; |
| 739 histograms.ExpectTotalCount(kFetchFailedHistogram, 0); |
| 740 histograms.ExpectTotalCount(kFetchValidHistogram, 0); |
| 741 |
| 742 test_server_->RegisterRequestHandler( |
| 743 base::Bind(&NetworkTimeTrackerTest::BadDataResponseHandler)); |
| 744 EXPECT_TRUE(test_server_->Start()); |
| 745 base::StringPiece key = {reinterpret_cast<const char*>(kDevKeyPubBytes), |
| 746 sizeof(kDevKeyPubBytes)}; |
| 747 tracker_->SetPublicKeyForTesting(key); |
| 748 tracker_->SetTimeServerURLForTesting(test_server_->GetURL("/")); |
| 749 EXPECT_TRUE(tracker_->QueryTimeServiceForTesting()); |
| 750 |
| 751 // Do not wait for the fetch to complete; ask for the network time |
| 752 // immediately while the request is still pending. |
| 753 base::Time out_network_time; |
| 754 EXPECT_EQ(NetworkTimeTracker::NETWORK_TIME_FIRST_SYNC_PENDING, |
| 755 tracker_->GetNetworkTime(&out_network_time, nullptr)); |
| 756 histograms.ExpectTotalCount(kFetchFailedHistogram, 0); |
| 757 histograms.ExpectTotalCount(kFetchValidHistogram, 0); |
| 758 |
| 759 tracker_->WaitForFetchForTesting(123123123); |
| 760 } |
| 761 |
| 762 TEST_F(NetworkTimeTrackerTest, UpdateFromNetworkSubseqeuntSyncPending) { |
| 763 base::HistogramTester histograms; |
| 764 histograms.ExpectTotalCount(kFetchFailedHistogram, 0); |
| 765 histograms.ExpectTotalCount(kFetchValidHistogram, 0); |
| 766 |
| 767 test_server_->RegisterRequestHandler( |
| 768 base::Bind(&NetworkTimeTrackerTest::BadDataResponseHandler)); |
| 769 EXPECT_TRUE(test_server_->Start()); |
| 770 base::StringPiece key = {reinterpret_cast<const char*>(kDevKeyPubBytes), |
| 771 sizeof(kDevKeyPubBytes)}; |
| 772 tracker_->SetPublicKeyForTesting(key); |
| 773 tracker_->SetTimeServerURLForTesting(test_server_->GetURL("/")); |
| 774 EXPECT_TRUE(tracker_->QueryTimeServiceForTesting()); |
| 775 tracker_->WaitForFetchForTesting(123123123); |
| 776 |
| 777 base::Time out_network_time; |
| 778 EXPECT_EQ(NetworkTimeTracker::NETWORK_TIME_NO_SUCCESSFUL_SYNC, |
| 779 tracker_->GetNetworkTime(&out_network_time, nullptr)); |
| 780 |
| 781 // After one sync attempt failed, kick off another one, and ask for |
| 782 // the network time while it is still pending. |
| 783 EXPECT_TRUE(tracker_->QueryTimeServiceForTesting()); |
| 784 EXPECT_EQ(NetworkTimeTracker::NETWORK_TIME_SUBSEQUENT_SYNC_PENDING, |
| 785 tracker_->GetNetworkTime(&out_network_time, nullptr)); |
| 786 histograms.ExpectTotalCount(kFetchFailedHistogram, 0); |
| 787 histograms.ExpectTotalCount(kFetchValidHistogram, 1); |
| 788 histograms.ExpectBucketCount(kFetchValidHistogram, false, 1); |
| 789 |
| 790 tracker_->WaitForFetchForTesting(123123123); |
| 791 } |
| 792 |
737 } // namespace network_time | 793 } // namespace network_time |
OLD | NEW |