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

Unified Diff: components/precache/core/precache_fetcher_unittest.cc

Issue 2037523002: Select precache resources based on field trial experiment group (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Addressed comments, added more test Created 4 years, 6 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « components/precache/core/precache_fetcher.cc ('k') | components/precache/core/proto/precache.proto » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: components/precache/core/precache_fetcher_unittest.cc
diff --git a/components/precache/core/precache_fetcher_unittest.cc b/components/precache/core/precache_fetcher_unittest.cc
index 1b71b78496fa2f39a39add38a25f83222d63167c..ccb1c7548a3ead4fa726aacfcca49080b2a0f730 100644
--- a/components/precache/core/precache_fetcher_unittest.cc
+++ b/components/precache/core/precache_fetcher_unittest.cc
@@ -59,8 +59,13 @@ const char kCustomGoodManifestURL[] =
"http://custom-manifest-url-prefix.com/good-manifest.com";
const char kResourceFetchFailureURL[] = "http://resource-fetch-failure.com";
const char kGoodResourceURL[] = "http://good-resource.com";
+const char kGoodResourceURLA[] = "http://good-resource.com/a";
+const char kGoodResourceURLB[] = "http://good-resource.com/b";
+const char kGoodResourceURLC[] = "http://good-resource.com/c";
+const char kGoodResourceURLD[] = "http://good-resource.com/d";
const char kForcedStartingURLManifestURL[] =
"http://manifest-url-prefix.com/forced-starting-url.com";
+const uint32_t kExperimentID = 123;
class TestURLFetcherCallback {
public:
@@ -391,10 +396,9 @@ TEST_F(PrecacheFetcherTest, FullPrecache) {
base::HistogramTester histogram;
{
- PrecacheFetcher precache_fetcher(request_context_.get(),
- GURL(), std::string(),
- std::move(unfinished_work),
- &precache_delegate_);
+ PrecacheFetcher precache_fetcher(request_context_.get(), GURL(),
+ std::string(), std::move(unfinished_work),
+ kExperimentID, &precache_delegate_);
precache_fetcher.Start();
loop_.RunUntilIdle();
@@ -421,6 +425,146 @@ TEST_F(PrecacheFetcherTest, FullPrecache) {
histogram.ExpectTotalCount("Precache.Fetch.TimeToComplete", 1);
}
+TEST_F(PrecacheFetcherTest, PrecacheResourceSelection) {
+ SetDefaultFlags();
+
+ std::unique_ptr<PrecacheUnfinishedWork> unfinished_work(
+ new PrecacheUnfinishedWork());
+ unfinished_work->add_top_host()->set_hostname("good-manifest.com");
+ unfinished_work->set_start_time(base::Time::UnixEpoch().ToInternalValue());
+
+ PrecacheConfigurationSettings config;
+
+ PrecacheManifest good_manifest;
+ PrecacheResourceSelection resource_selection;
+ good_manifest.add_resource()->set_url(kGoodResourceURL);
+ good_manifest.add_resource()->set_url(kGoodResourceURLA);
+ good_manifest.add_resource()->set_url(kGoodResourceURLB);
+ good_manifest.add_resource()->set_url(kGoodResourceURLC);
+ good_manifest.add_resource()->set_url(kGoodResourceURLD);
+
+ // Set bits for kGoodResourceURL, kGoodResourceURLB and kGoodResourceURLD.
+ resource_selection.set_bitset(0b10101);
+ (*good_manifest.mutable_experiments()
+ ->mutable_resources_by_experiment_group())[kExperimentID] =
+ resource_selection;
+
+ factory_.SetFakeResponse(GURL(kConfigURL), config.SerializeAsString(),
+ net::HTTP_OK, net::URLRequestStatus::SUCCESS);
+ factory_.SetFakeResponse(GURL(kGoodManifestURL),
+ good_manifest.SerializeAsString(), net::HTTP_OK,
+ net::URLRequestStatus::SUCCESS);
+ factory_.SetFakeResponse(GURL(kGoodResourceURL), "good", net::HTTP_OK,
+ net::URLRequestStatus::SUCCESS);
+ factory_.SetFakeResponse(GURL(kGoodResourceURLB), "good URL B", net::HTTP_OK,
+ net::URLRequestStatus::SUCCESS);
+ factory_.SetFakeResponse(GURL(kGoodResourceURLD), "good URL D", net::HTTP_OK,
+ net::URLRequestStatus::SUCCESS);
+
+ base::HistogramTester histogram;
+
+ {
+ PrecacheFetcher precache_fetcher(request_context_.get(), GURL(),
+ std::string(), std::move(unfinished_work),
+ kExperimentID, &precache_delegate_);
+ precache_fetcher.Start();
+
+ loop_.RunUntilIdle();
+
+ // Destroy the PrecacheFetcher after it has finished, to record metrics.
+ }
+
+ std::multiset<GURL> expected_requested_urls;
+ expected_requested_urls.insert(GURL(kConfigURL));
+ expected_requested_urls.insert(GURL(kGoodManifestURL));
+ expected_requested_urls.insert(GURL(kGoodResourceURL));
+ expected_requested_urls.insert(GURL(kGoodResourceURLB));
+ expected_requested_urls.insert(GURL(kGoodResourceURLD));
+
+ EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls());
+
+ EXPECT_TRUE(precache_delegate_.was_on_done_called());
+
+ histogram.ExpectUniqueSample("Precache.Fetch.PercentCompleted", 100, 1);
+ histogram.ExpectUniqueSample("Precache.Fetch.ResponseBytes.Total",
+ url_callback_.total_response_bytes(), 1);
+ histogram.ExpectTotalCount("Precache.Fetch.TimeToComplete", 1);
+}
+
+TEST_F(PrecacheFetcherTest, PrecacheResourceSelectionMissingBitset) {
+ SetDefaultFlags();
+
+ std::unique_ptr<PrecacheUnfinishedWork> unfinished_work(
+ new PrecacheUnfinishedWork());
+ unfinished_work->add_top_host()->set_hostname("good-manifest.com");
+ unfinished_work->set_start_time(base::Time::UnixEpoch().ToInternalValue());
+
+ PrecacheConfigurationSettings config;
+
+ PrecacheManifest good_manifest;
+ PrecacheResourceSelection resource_selection;
+ good_manifest.add_resource()->set_url(kGoodResourceURL);
+ good_manifest.add_resource()->set_url(kGoodResourceURLA);
+ good_manifest.add_resource()->set_url(kGoodResourceURLB);
+ good_manifest.add_resource()->set_url(kGoodResourceURLC);
+ good_manifest.add_resource()->set_url(kGoodResourceURLD);
+
+ // Set bits for a different experiment group.
+ resource_selection.set_bitset(0b1);
+ (*good_manifest.mutable_experiments()
+ ->mutable_resources_by_experiment_group())[kExperimentID + 1] =
+ resource_selection;
+
+ // Resource selection bitset for the experiment group will be missing and all
+ // resources will be fetched.
+ factory_.SetFakeResponse(GURL(kConfigURL), config.SerializeAsString(),
+ net::HTTP_OK, net::URLRequestStatus::SUCCESS);
+ factory_.SetFakeResponse(GURL(kGoodManifestURL),
+ good_manifest.SerializeAsString(), net::HTTP_OK,
+ net::URLRequestStatus::SUCCESS);
+ factory_.SetFakeResponse(GURL(kGoodResourceURL), "good", net::HTTP_OK,
+ net::URLRequestStatus::SUCCESS);
+ factory_.SetFakeResponse(GURL(kGoodResourceURLA), "good URL A", net::HTTP_OK,
+ net::URLRequestStatus::SUCCESS);
+ factory_.SetFakeResponse(GURL(kGoodResourceURLB), "good URL B", net::HTTP_OK,
+ net::URLRequestStatus::SUCCESS);
+ factory_.SetFakeResponse(GURL(kGoodResourceURLC), "good URL C", net::HTTP_OK,
+ net::URLRequestStatus::SUCCESS);
+ factory_.SetFakeResponse(GURL(kGoodResourceURLD), "good URL D", net::HTTP_OK,
+ net::URLRequestStatus::SUCCESS);
+
+ base::HistogramTester histogram;
+
+ {
+ PrecacheFetcher precache_fetcher(request_context_.get(), GURL(),
+ std::string(), std::move(unfinished_work),
+ kExperimentID, &precache_delegate_);
+ precache_fetcher.Start();
+
+ loop_.RunUntilIdle();
+
+ // Destroy the PrecacheFetcher after it has finished, to record metrics.
+ }
+
+ std::multiset<GURL> expected_requested_urls;
+ expected_requested_urls.insert(GURL(kConfigURL));
+ expected_requested_urls.insert(GURL(kGoodManifestURL));
+ expected_requested_urls.insert(GURL(kGoodResourceURL));
+ expected_requested_urls.insert(GURL(kGoodResourceURLA));
+ expected_requested_urls.insert(GURL(kGoodResourceURLB));
+ expected_requested_urls.insert(GURL(kGoodResourceURLC));
+ expected_requested_urls.insert(GURL(kGoodResourceURLD));
+
+ EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls());
+
+ EXPECT_TRUE(precache_delegate_.was_on_done_called());
+
+ histogram.ExpectUniqueSample("Precache.Fetch.PercentCompleted", 100, 1);
+ histogram.ExpectUniqueSample("Precache.Fetch.ResponseBytes.Total",
+ url_callback_.total_response_bytes(), 1);
+ histogram.ExpectTotalCount("Precache.Fetch.TimeToComplete", 1);
+}
+
TEST_F(PrecacheFetcherTest, PrecachePauseResume) {
SetDefaultFlags();
@@ -437,9 +581,8 @@ TEST_F(PrecacheFetcherTest, PrecachePauseResume) {
initial_work->set_start_time(
(base::Time::Now() - base::TimeDelta::FromHours(1)).ToInternalValue());
- PrecacheFetcher first_fetcher(request_context_.get(),
- GURL(), std::string(),
- std::move(initial_work),
+ PrecacheFetcher first_fetcher(request_context_.get(), GURL(), std::string(),
+ std::move(initial_work), kExperimentID,
&precache_delegate_);
loop_.RunUntilIdle();
@@ -463,9 +606,8 @@ TEST_F(PrecacheFetcherTest, PrecachePauseResume) {
net::URLRequestStatus::SUCCESS);
// Starting hosts should not be fetched.
unfinished_work->add_top_host()->set_hostname("bad-manifest.com");
- PrecacheFetcher second_fetcher(request_context_.get(),
- GURL(), std::string(),
- std::move(unfinished_work),
+ PrecacheFetcher second_fetcher(request_context_.get(), GURL(), std::string(),
+ std::move(unfinished_work), kExperimentID,
&precache_delegate_);
second_fetcher.Start();
loop_.RunUntilIdle();
@@ -495,10 +637,9 @@ TEST_F(PrecacheFetcherTest, ResumeWithConfigOnly) {
factory_.SetFakeResponse(GURL(kGoodResourceURL), "good", net::HTTP_OK,
net::URLRequestStatus::SUCCESS);
{
- PrecacheFetcher precache_fetcher(request_context_.get(),
- GURL(), std::string(),
- std::move(unfinished_work),
- &precache_delegate_);
+ PrecacheFetcher precache_fetcher(request_context_.get(), GURL(),
+ std::string(), std::move(unfinished_work),
+ kExperimentID, &precache_delegate_);
precache_fetcher.Start();
loop_.RunUntilIdle();
@@ -535,9 +676,8 @@ TEST_F(PrecacheFetcherTest, CustomURLs) {
net::URLRequestStatus::SUCCESS);
PrecacheFetcher precache_fetcher(
- request_context_.get(), GURL(kCustomConfigURL),
- kCustomManifestURLPrefix, std::move(unfinished_work),
- &precache_delegate_);
+ request_context_.get(), GURL(kCustomConfigURL), kCustomManifestURLPrefix,
+ std::move(unfinished_work), kExperimentID, &precache_delegate_);
precache_fetcher.Start();
loop_.RunUntilIdle();
@@ -565,10 +705,9 @@ TEST_F(PrecacheFetcherTest, ConfigFetchFailure) {
factory_.SetFakeResponse(GURL(kGoodManifestURL), "", net::HTTP_OK,
net::URLRequestStatus::SUCCESS);
- PrecacheFetcher precache_fetcher(request_context_.get(),
- GURL(), std::string(),
- std::move(unfinished_work),
- &precache_delegate_);
+ PrecacheFetcher precache_fetcher(request_context_.get(), GURL(),
+ std::string(), std::move(unfinished_work),
+ kExperimentID, &precache_delegate_);
precache_fetcher.Start();
loop_.RunUntilIdle();
@@ -593,10 +732,9 @@ TEST_F(PrecacheFetcherTest, BadConfig) {
factory_.SetFakeResponse(GURL(kGoodManifestURL), "", net::HTTP_OK,
net::URLRequestStatus::SUCCESS);
- PrecacheFetcher precache_fetcher(request_context_.get(),
- GURL(), std::string(),
- std::move(unfinished_work),
- &precache_delegate_);
+ PrecacheFetcher precache_fetcher(request_context_.get(), GURL(),
+ std::string(), std::move(unfinished_work),
+ kExperimentID, &precache_delegate_);
precache_fetcher.Start();
loop_.RunUntilIdle();
@@ -625,10 +763,9 @@ TEST_F(PrecacheFetcherTest, Cancel) {
base::HistogramTester histogram;
{
- PrecacheFetcher precache_fetcher(request_context_.get(),
- GURL(), std::string(),
- std::move(unfinished_work),
- &precache_delegate_);
+ PrecacheFetcher precache_fetcher(request_context_.get(), GURL(),
+ std::string(), std::move(unfinished_work),
+ kExperimentID, &precache_delegate_);
precache_fetcher.Start();
// Destroy the PrecacheFetcher, to cancel precaching. No metrics
@@ -663,10 +800,9 @@ TEST_F(PrecacheFetcherTest, PrecacheUsingDefaultConfigSettingsURL) {
config.SerializeAsString(), net::HTTP_OK,
net::URLRequestStatus::SUCCESS);
- PrecacheFetcher precache_fetcher(request_context_.get(),
- GURL(), std::string(),
- std::move(unfinished_work),
- &precache_delegate_);
+ PrecacheFetcher precache_fetcher(request_context_.get(), GURL(),
+ std::string(), std::move(unfinished_work),
+ kExperimentID, &precache_delegate_);
precache_fetcher.Start();
loop_.RunUntilIdle();
@@ -702,10 +838,9 @@ TEST_F(PrecacheFetcherTest, PrecacheUsingDefaultManifestURLPrefix) {
factory_.SetFakeResponse(manifest_url, PrecacheManifest().SerializeAsString(),
net::HTTP_OK, net::URLRequestStatus::SUCCESS);
- PrecacheFetcher precache_fetcher(request_context_.get(),
- GURL(), std::string(),
- std::move(unfinished_work),
- &precache_delegate_);
+ PrecacheFetcher precache_fetcher(request_context_.get(), GURL(),
+ std::string(), std::move(unfinished_work),
+ kExperimentID, &precache_delegate_);
precache_fetcher.Start();
loop_.RunUntilIdle();
@@ -749,10 +884,9 @@ TEST_F(PrecacheFetcherTest, TopResourcesCount) {
base::HistogramTester histogram;
{
- PrecacheFetcher precache_fetcher(request_context_.get(),
- GURL(), std::string(),
- std::move(unfinished_work),
- &precache_delegate_);
+ PrecacheFetcher precache_fetcher(request_context_.get(), GURL(),
+ std::string(), std::move(unfinished_work),
+ kExperimentID, &precache_delegate_);
precache_fetcher.Start();
loop_.RunUntilIdle();
@@ -828,9 +962,8 @@ TEST_F(PrecacheFetcherTest, MaxBytesTotal) {
{
PrecacheFetcher precache_fetcher(request_context_.get(), GURL(),
- std::string(),
- std::move(unfinished_work),
- &precache_delegate_);
+ std::string(), std::move(unfinished_work),
+ kExperimentID, &precache_delegate_);
precache_fetcher.Start();
loop_.RunUntilIdle();
« no previous file with comments | « components/precache/core/precache_fetcher.cc ('k') | components/precache/core/proto/precache.proto » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698