Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(416)

Side by Side Diff: components/precache/core/precache_fetcher_unittest.cc

Issue 2710673004: precache: Allow experiment bitsets of any size. (Closed)
Patch Set: Update comments, make test bitset asymmetric, and make proto field deprecation more obvious. Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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/precache/core/precache_fetcher.h" 5 #include "components/precache/core/precache_fetcher.h"
6 6
7 #include <stdint.h> 7 #include <stdint.h>
8 8
9 #include <cstring> 9 #include <cstring>
10 #include <memory> 10 #include <memory>
(...skipping 558 matching lines...) Expand 10 before | Expand all | Expand 10 after
569 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls()); 569 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls());
570 570
571 EXPECT_TRUE(precache_delegate_.was_on_done_called()); 571 EXPECT_TRUE(precache_delegate_.was_on_done_called());
572 572
573 histogram.ExpectUniqueSample("Precache.Fetch.PercentCompleted", 100, 1); 573 histogram.ExpectUniqueSample("Precache.Fetch.PercentCompleted", 100, 1);
574 histogram.ExpectUniqueSample("Precache.Fetch.ResponseBytes.Total", 574 histogram.ExpectUniqueSample("Precache.Fetch.ResponseBytes.Total",
575 url_callback_.total_response_bytes(), 1); 575 url_callback_.total_response_bytes(), 1);
576 histogram.ExpectTotalCount("Precache.Fetch.TimeToComplete", 1); 576 histogram.ExpectTotalCount("Precache.Fetch.TimeToComplete", 1);
577 } 577 }
578 578
579 TEST_F(PrecacheFetcherTest, PrecacheResourceSelection) { 579 class PrecacheFetcherResourceSelectionTest
580 : public PrecacheFetcherTest,
581 public testing::WithParamInterface<PrecacheResourceSelection> {
582 public:
583 // These bitsets are asymmetric and multibyte, in order to test the orderings.
584
585 // Set bits for kGoodResourceURL, kGoodResourceURLC and kGoodResourceURLD.
586 static PrecacheResourceSelection DeprecatedBitset() {
587 PrecacheResourceSelection ret;
588 ret.set_deprecated_bitset(0b110000000001);
589 return ret;
590 }
591
592 // Set bits for kGoodResourceURL, kGoodResourceURLC and kGoodResourceURLD.
593 static PrecacheResourceSelection Bitset() {
594 PrecacheResourceSelection ret;
595 ret.set_bitset("\x01\x0c");
596 return ret;
597 }
598 };
599
600 TEST_P(PrecacheFetcherResourceSelectionTest, Basic) {
580 SetDefaultFlags(); 601 SetDefaultFlags();
581 602
582 std::unique_ptr<PrecacheUnfinishedWork> unfinished_work( 603 std::unique_ptr<PrecacheUnfinishedWork> unfinished_work(
583 new PrecacheUnfinishedWork()); 604 new PrecacheUnfinishedWork());
584 unfinished_work->add_top_host()->set_hostname("good-manifest.com"); 605 unfinished_work->add_top_host()->set_hostname("good-manifest.com");
585 unfinished_work->set_start_time(base::Time::UnixEpoch().ToInternalValue()); 606 unfinished_work->set_start_time(base::Time::UnixEpoch().ToInternalValue());
586 607
587 PrecacheConfigurationSettings config; 608 PrecacheConfigurationSettings config;
588 609
589 PrecacheManifest good_manifest; 610 PrecacheManifest good_manifest;
590 PrecacheResourceSelection resource_selection; 611 PrecacheResourceSelection resource_selection;
591 good_manifest.add_resource()->set_url(kGoodResourceURL); 612 good_manifest.add_resource()->set_url(kGoodResourceURL);
592 good_manifest.add_resource()->set_url(kGoodResourceURLA); 613 good_manifest.add_resource()->set_url(kGoodResourceURLA);
593 good_manifest.add_resource()->set_url(kGoodResourceURLB); 614 for (int i = 0; i < 8; ++i)
615 good_manifest.add_resource()->set_url(kGoodResourceURLB);
594 good_manifest.add_resource()->set_url(kGoodResourceURLC); 616 good_manifest.add_resource()->set_url(kGoodResourceURLC);
595 good_manifest.add_resource()->set_url(kGoodResourceURLD); 617 good_manifest.add_resource()->set_url(kGoodResourceURLD);
596 618
597 // Set bits for kGoodResourceURL, kGoodResourceURLB and kGoodResourceURLD.
598 resource_selection.set_bitset(0b10101);
599 (*good_manifest.mutable_experiments() 619 (*good_manifest.mutable_experiments()
600 ->mutable_resources_by_experiment_group())[kExperimentID] = 620 ->mutable_resources_by_experiment_group())[kExperimentID] = GetParam();
601 resource_selection;
602 621
603 factory_.SetFakeResponse(GURL(kConfigURL), config.SerializeAsString(), 622 factory_.SetFakeResponse(GURL(kConfigURL), config.SerializeAsString(),
604 net::HTTP_OK, net::URLRequestStatus::SUCCESS); 623 net::HTTP_OK, net::URLRequestStatus::SUCCESS);
605 factory_.SetFakeResponse(GURL(kGoodManifestURL), 624 factory_.SetFakeResponse(GURL(kGoodManifestURL),
606 good_manifest.SerializeAsString(), net::HTTP_OK, 625 good_manifest.SerializeAsString(), net::HTTP_OK,
607 net::URLRequestStatus::SUCCESS); 626 net::URLRequestStatus::SUCCESS);
608 factory_.SetFakeResponse(GURL(kGoodResourceURL), "good", net::HTTP_OK, 627 factory_.SetFakeResponse(GURL(kGoodResourceURL), "good", net::HTTP_OK,
609 net::URLRequestStatus::SUCCESS); 628 net::URLRequestStatus::SUCCESS);
610 factory_.SetFakeResponse(GURL(kGoodResourceURLB), "good URL B", net::HTTP_OK, 629 factory_.SetFakeResponse(GURL(kGoodResourceURLC), "good URL B", net::HTTP_OK,
611 net::URLRequestStatus::SUCCESS); 630 net::URLRequestStatus::SUCCESS);
612 factory_.SetFakeResponse(GURL(kGoodResourceURLD), "good URL D", net::HTTP_OK, 631 factory_.SetFakeResponse(GURL(kGoodResourceURLD), "good URL D", net::HTTP_OK,
613 net::URLRequestStatus::SUCCESS); 632 net::URLRequestStatus::SUCCESS);
614 633
615 base::HistogramTester histogram; 634 base::HistogramTester histogram;
616 635
617 { 636 {
618 PrecacheFetcher precache_fetcher( 637 PrecacheFetcher precache_fetcher(
619 request_context_.get(), GURL(), std::string(), 638 request_context_.get(), GURL(), std::string(),
620 std::move(unfinished_work), kExperimentID, 639 std::move(unfinished_work), kExperimentID,
621 precache_database_.GetWeakPtr(), task_runner(), &precache_delegate_); 640 precache_database_.GetWeakPtr(), task_runner(), &precache_delegate_);
622 precache_fetcher.Start(); 641 precache_fetcher.Start();
623 642
624 base::RunLoop().RunUntilIdle(); 643 base::RunLoop().RunUntilIdle();
625 644
626 // Destroy the PrecacheFetcher after it has finished, to record metrics. 645 // Destroy the PrecacheFetcher after it has finished, to record metrics.
627 } 646 }
628 647
629 std::vector<GURL> expected_requested_urls; 648 std::vector<GURL> expected_requested_urls;
630 expected_requested_urls.emplace_back(kConfigURL); 649 expected_requested_urls.emplace_back(kConfigURL);
631 expected_requested_urls.emplace_back(kGoodManifestURL); 650 expected_requested_urls.emplace_back(kGoodManifestURL);
632 expected_requested_urls.emplace_back(kGoodResourceURL); 651 expected_requested_urls.emplace_back(kGoodResourceURL);
633 expected_requested_urls.emplace_back(kGoodResourceURLB); 652 expected_requested_urls.emplace_back(kGoodResourceURLC);
634 expected_requested_urls.emplace_back(kGoodResourceURLD); 653 expected_requested_urls.emplace_back(kGoodResourceURLD);
635 654
636 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls()); 655 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls());
637 656
638 EXPECT_TRUE(precache_delegate_.was_on_done_called()); 657 EXPECT_TRUE(precache_delegate_.was_on_done_called());
639 658
640 histogram.ExpectUniqueSample("Precache.Fetch.PercentCompleted", 100, 1); 659 histogram.ExpectUniqueSample("Precache.Fetch.PercentCompleted", 100, 1);
641 histogram.ExpectUniqueSample("Precache.Fetch.ResponseBytes.Total", 660 histogram.ExpectUniqueSample("Precache.Fetch.ResponseBytes.Total",
642 url_callback_.total_response_bytes(), 1); 661 url_callback_.total_response_bytes(), 1);
643 histogram.ExpectTotalCount("Precache.Fetch.TimeToComplete", 1); 662 histogram.ExpectTotalCount("Precache.Fetch.TimeToComplete", 1);
644 } 663 }
645 664
646 TEST_F(PrecacheFetcherTest, PrecacheResourceSelectionMissingBitset) { 665 TEST_P(PrecacheFetcherResourceSelectionTest, MissingBitset) {
647 SetDefaultFlags(); 666 SetDefaultFlags();
648 667
649 std::unique_ptr<PrecacheUnfinishedWork> unfinished_work( 668 std::unique_ptr<PrecacheUnfinishedWork> unfinished_work(
650 new PrecacheUnfinishedWork()); 669 new PrecacheUnfinishedWork());
651 unfinished_work->add_top_host()->set_hostname("good-manifest.com"); 670 unfinished_work->add_top_host()->set_hostname("good-manifest.com");
652 unfinished_work->set_start_time(base::Time::UnixEpoch().ToInternalValue()); 671 unfinished_work->set_start_time(base::Time::UnixEpoch().ToInternalValue());
653 672
654 PrecacheConfigurationSettings config; 673 PrecacheConfigurationSettings config;
655 674
656 PrecacheManifest good_manifest; 675 PrecacheManifest good_manifest;
657 PrecacheResourceSelection resource_selection; 676 PrecacheResourceSelection resource_selection;
658 good_manifest.add_resource()->set_url(kGoodResourceURL); 677 good_manifest.add_resource()->set_url(kGoodResourceURL);
659 good_manifest.add_resource()->set_url(kGoodResourceURLA); 678 good_manifest.add_resource()->set_url(kGoodResourceURLA);
660 good_manifest.add_resource()->set_url(kGoodResourceURLB); 679 good_manifest.add_resource()->set_url(kGoodResourceURLB);
661 good_manifest.add_resource()->set_url(kGoodResourceURLC); 680 good_manifest.add_resource()->set_url(kGoodResourceURLC);
662 good_manifest.add_resource()->set_url(kGoodResourceURLD); 681 good_manifest.add_resource()->set_url(kGoodResourceURLD);
663 682
664 // Set bits for a different experiment group. 683 // Set bits for a different experiment group.
665 resource_selection.set_bitset(0b1);
666 (*good_manifest.mutable_experiments() 684 (*good_manifest.mutable_experiments()
667 ->mutable_resources_by_experiment_group())[kExperimentID + 1] = 685 ->mutable_resources_by_experiment_group())[kExperimentID + 1] =
668 resource_selection; 686 GetParam();
669 687
670 // Resource selection bitset for the experiment group will be missing and all 688 // Resource selection bitset for the experiment group will be missing and all
671 // resources will be fetched. 689 // resources will be fetched.
672 factory_.SetFakeResponse(GURL(kConfigURL), config.SerializeAsString(), 690 factory_.SetFakeResponse(GURL(kConfigURL), config.SerializeAsString(),
673 net::HTTP_OK, net::URLRequestStatus::SUCCESS); 691 net::HTTP_OK, net::URLRequestStatus::SUCCESS);
674 factory_.SetFakeResponse(GURL(kGoodManifestURL), 692 factory_.SetFakeResponse(GURL(kGoodManifestURL),
675 good_manifest.SerializeAsString(), net::HTTP_OK, 693 good_manifest.SerializeAsString(), net::HTTP_OK,
676 net::URLRequestStatus::SUCCESS); 694 net::URLRequestStatus::SUCCESS);
677 factory_.SetFakeResponse(GURL(kGoodResourceURL), "good", net::HTTP_OK, 695 factory_.SetFakeResponse(GURL(kGoodResourceURL), "good", net::HTTP_OK,
678 net::URLRequestStatus::SUCCESS); 696 net::URLRequestStatus::SUCCESS);
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
711 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls()); 729 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls());
712 730
713 EXPECT_TRUE(precache_delegate_.was_on_done_called()); 731 EXPECT_TRUE(precache_delegate_.was_on_done_called());
714 732
715 histogram.ExpectUniqueSample("Precache.Fetch.PercentCompleted", 100, 1); 733 histogram.ExpectUniqueSample("Precache.Fetch.PercentCompleted", 100, 1);
716 histogram.ExpectUniqueSample("Precache.Fetch.ResponseBytes.Total", 734 histogram.ExpectUniqueSample("Precache.Fetch.ResponseBytes.Total",
717 url_callback_.total_response_bytes(), 1); 735 url_callback_.total_response_bytes(), 1);
718 histogram.ExpectTotalCount("Precache.Fetch.TimeToComplete", 1); 736 histogram.ExpectTotalCount("Precache.Fetch.TimeToComplete", 1);
719 } 737 }
720 738
739 INSTANTIATE_TEST_CASE_P(
740 PrecacheFetcherResourceSelectionTest,
741 PrecacheFetcherResourceSelectionTest,
742 testing::Values(PrecacheFetcherResourceSelectionTest::DeprecatedBitset(),
743 PrecacheFetcherResourceSelectionTest::Bitset()));
744
721 TEST_F(PrecacheFetcherTest, PrecachePauseResume) { 745 TEST_F(PrecacheFetcherTest, PrecachePauseResume) {
722 SetDefaultFlags(); 746 SetDefaultFlags();
723 747
724 PrecacheConfigurationSettings config; 748 PrecacheConfigurationSettings config;
725 config.set_top_sites_count(3); 749 config.set_top_sites_count(3);
726 750
727 std::unique_ptr<PrecacheUnfinishedWork> initial_work( 751 std::unique_ptr<PrecacheUnfinishedWork> initial_work(
728 new PrecacheUnfinishedWork()); 752 new PrecacheUnfinishedWork());
729 initial_work->add_top_host()->set_hostname("manifest1.com"); 753 initial_work->add_top_host()->set_hostname("manifest1.com");
730 initial_work->add_top_host()->set_hostname("manifest2.com"); 754 initial_work->add_top_host()->set_hostname("manifest2.com");
(...skipping 1206 matching lines...) Expand 10 before | Expand all | Expand 10 after
1937 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls()); 1961 EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls());
1938 1962
1939 EXPECT_TRUE(precache_delegate_.was_on_done_called()); 1963 EXPECT_TRUE(precache_delegate_.was_on_done_called());
1940 1964
1941 histogram.ExpectTotalCount("Precache.Fetch.PercentCompleted", 2); 1965 histogram.ExpectTotalCount("Precache.Fetch.PercentCompleted", 2);
1942 histogram.ExpectTotalCount("Precache.Fetch.ResponseBytes.Total", 2); 1966 histogram.ExpectTotalCount("Precache.Fetch.ResponseBytes.Total", 2);
1943 histogram.ExpectTotalCount("Precache.Fetch.TimeToComplete", 2); 1967 histogram.ExpectTotalCount("Precache.Fetch.TimeToComplete", 2);
1944 } 1968 }
1945 1969
1946 } // namespace precache 1970 } // namespace precache
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698