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

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

Issue 1961153003: Add pause/resume functionality to precache (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: test fix Created 4 years, 7 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/precache_session_table.h » ('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 72cb27027c83590d8efbf00dc5c6c4709d445cc9..1b71b78496fa2f39a39add38a25f83222d63167c 100644
--- a/components/precache/core/precache_fetcher_unittest.cc
+++ b/components/precache/core/precache_fetcher_unittest.cc
@@ -24,6 +24,7 @@
#include "base/threading/thread_task_runner_handle.h"
#include "components/precache/core/precache_switches.h"
#include "components/precache/core/proto/precache.pb.h"
+#include "components/precache/core/proto/unfinished_work.pb.h"
#include "net/base/load_flags.h"
#include "net/http/http_response_headers.h"
#include "net/http/http_status_code.h"
@@ -94,16 +95,17 @@ class TestURLFetcherCallback {
class TestPrecacheDelegate : public PrecacheFetcher::PrecacheDelegate {
public:
- TestPrecacheDelegate() : was_on_done_called_(false) {}
+ TestPrecacheDelegate()
+ : on_done_was_called_(false) {}
- void OnDone() override { was_on_done_called_ = true; }
+ void OnDone() override { on_done_was_called_ = true; }
bool was_on_done_called() const {
- return was_on_done_called_;
+ return on_done_was_called_;
}
private:
- bool was_on_done_called_;
+ bool on_done_was_called_;
};
class MockURLFetcherFactory : public net::URLFetcherFactory {
@@ -348,11 +350,13 @@ class PrecacheFetcherTest : public testing::Test {
TEST_F(PrecacheFetcherTest, FullPrecache) {
SetDefaultFlags();
- std::vector<std::string> starting_hosts;
- starting_hosts.push_back("manifest-fetch-failure.com");
- starting_hosts.push_back("bad-manifest.com");
- starting_hosts.push_back("good-manifest.com");
- starting_hosts.push_back("not-in-top-3.com");
+ std::unique_ptr<PrecacheUnfinishedWork> unfinished_work(
+ new PrecacheUnfinishedWork());
+ unfinished_work->set_start_time(base::Time::UnixEpoch().ToInternalValue());
+ unfinished_work->add_top_host()->set_hostname("manifest-fetch-failure.com");
+ unfinished_work->add_top_host()->set_hostname("bad-manifest.com");
+ unfinished_work->add_top_host()->set_hostname("good-manifest.com");
+ unfinished_work->add_top_host()->set_hostname("not-in-top-3.com");
PrecacheConfigurationSettings config;
config.set_top_sites_count(3);
@@ -387,8 +391,9 @@ TEST_F(PrecacheFetcherTest, FullPrecache) {
base::HistogramTester histogram;
{
- PrecacheFetcher precache_fetcher(starting_hosts, request_context_.get(),
+ PrecacheFetcher precache_fetcher(request_context_.get(),
GURL(), std::string(),
+ std::move(unfinished_work),
&precache_delegate_);
precache_fetcher.Start();
@@ -416,11 +421,105 @@ TEST_F(PrecacheFetcherTest, FullPrecache) {
histogram.ExpectTotalCount("Precache.Fetch.TimeToComplete", 1);
}
+TEST_F(PrecacheFetcherTest, PrecachePauseResume) {
+ SetDefaultFlags();
+
+ PrecacheConfigurationSettings config;
+ config.set_top_sites_count(3);
+
+ std::unique_ptr<PrecacheUnfinishedWork> initial_work(
+ new PrecacheUnfinishedWork());
+ initial_work->add_manifest()->set_url(
+ "http://manifest-url-prefix.com/manifest1.com");
+ initial_work->add_manifest()->set_url(
+ "http://manifest-url-prefix.com/manifest2.com");
+ initial_work->add_resource()->set_url(kGoodResourceURL);
+ 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),
+ &precache_delegate_);
+
+ loop_.RunUntilIdle();
+ std::unique_ptr<PrecacheUnfinishedWork> unfinished_work =
+ first_fetcher.CancelPrecaching();
+
+ std::multiset<GURL> expected_requested_urls;
+ EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls());
+
+ factory_.SetFakeResponse(GURL(kConfigURL), config.SerializeAsString(),
+ net::HTTP_OK, net::URLRequestStatus::SUCCESS);
+ factory_.SetFakeResponse(GURL(kBadManifestURL), "bad protobuf", net::HTTP_OK,
+ net::URLRequestStatus::SUCCESS);
+ factory_.SetFakeResponse(GURL("http://manifest-url-prefix.com/manifest1.com"),
+ "bad protobuf", net::HTTP_OK,
+ net::URLRequestStatus::SUCCESS);
+ factory_.SetFakeResponse(GURL("http://manifest-url-prefix.com/manifest2.com"),
+ "bad protobuf", net::HTTP_OK,
+ net::URLRequestStatus::SUCCESS);
+ factory_.SetFakeResponse(GURL(kGoodResourceURL), "good", net::HTTP_OK,
+ 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),
+ &precache_delegate_);
+ second_fetcher.Start();
+ loop_.RunUntilIdle();
+ expected_requested_urls.insert(GURL(kConfigURL));
+ expected_requested_urls.insert(
+ GURL("http://manifest-url-prefix.com/manifest1.com"));
+ expected_requested_urls.insert(
+ GURL("http://manifest-url-prefix.com/manifest2.com"));
+ expected_requested_urls.insert(GURL(kGoodResourceURL));
+ EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls());
+ EXPECT_TRUE(precache_delegate_.was_on_done_called());
+}
+
+TEST_F(PrecacheFetcherTest, ResumeWithConfigOnly) {
+ SetDefaultFlags();
+ std::unique_ptr<PrecacheUnfinishedWork> unfinished_work(
+ new PrecacheUnfinishedWork());
+ unfinished_work->mutable_config_settings()->add_forced_site(
+ "good-manifest.com");
+ unfinished_work->set_start_time(base::Time::Now().ToInternalValue());
+ PrecacheManifest good_manifest;
+ good_manifest.add_resource()->set_url(kGoodResourceURL);
+
+ factory_.SetFakeResponse(GURL(kGoodManifestURL),
+ good_manifest.SerializeAsString(), net::HTTP_OK,
+ net::URLRequestStatus::SUCCESS);
+ 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_);
+ precache_fetcher.Start();
+
+ loop_.RunUntilIdle();
+ }
+
+ std::multiset<GURL> expected_requested_urls;
+ expected_requested_urls.insert(GURL(kGoodManifestURL));
+ expected_requested_urls.insert(GURL(kGoodResourceURL));
+
+ EXPECT_EQ(expected_requested_urls, url_callback_.requested_urls());
+ EXPECT_TRUE(precache_delegate_.was_on_done_called());
+
+}
+
+
TEST_F(PrecacheFetcherTest, CustomURLs) {
SetDefaultFlags();
- std::vector<std::string> starting_hosts;
- starting_hosts.push_back("good-manifest.com");
+ std::unique_ptr<PrecacheUnfinishedWork> unfinished_work(
+ new PrecacheUnfinishedWork());
+ unfinished_work->add_top_host()->set_hostname("good-manifest.com");
PrecacheConfigurationSettings config;
@@ -436,8 +535,9 @@ TEST_F(PrecacheFetcherTest, CustomURLs) {
net::URLRequestStatus::SUCCESS);
PrecacheFetcher precache_fetcher(
- starting_hosts, request_context_.get(), GURL(kCustomConfigURL),
- kCustomManifestURLPrefix, &precache_delegate_);
+ request_context_.get(), GURL(kCustomConfigURL),
+ kCustomManifestURLPrefix, std::move(unfinished_work),
+ &precache_delegate_);
precache_fetcher.Start();
loop_.RunUntilIdle();
@@ -455,7 +555,9 @@ TEST_F(PrecacheFetcherTest, CustomURLs) {
TEST_F(PrecacheFetcherTest, ConfigFetchFailure) {
SetDefaultFlags();
- std::vector<std::string> starting_hosts(1, "good-manifest.com");
+ std::unique_ptr<PrecacheUnfinishedWork> unfinished_work(
+ new PrecacheUnfinishedWork());
+ unfinished_work->add_top_host()->set_hostname("good-manifest.com");
factory_.SetFakeResponse(GURL(kConfigURL), "",
net::HTTP_INTERNAL_SERVER_ERROR,
@@ -463,8 +565,10 @@ TEST_F(PrecacheFetcherTest, ConfigFetchFailure) {
factory_.SetFakeResponse(GURL(kGoodManifestURL), "", net::HTTP_OK,
net::URLRequestStatus::SUCCESS);
- PrecacheFetcher precache_fetcher(starting_hosts, request_context_.get(),
- GURL(), std::string(), &precache_delegate_);
+ PrecacheFetcher precache_fetcher(request_context_.get(),
+ GURL(), std::string(),
+ std::move(unfinished_work),
+ &precache_delegate_);
precache_fetcher.Start();
loop_.RunUntilIdle();
@@ -480,15 +584,19 @@ TEST_F(PrecacheFetcherTest, ConfigFetchFailure) {
TEST_F(PrecacheFetcherTest, BadConfig) {
SetDefaultFlags();
- std::vector<std::string> starting_hosts(1, "good-manifest.com");
+ std::unique_ptr<PrecacheUnfinishedWork> unfinished_work(
+ new PrecacheUnfinishedWork());
+ unfinished_work->add_top_host()->set_hostname("good-manifest.com");
factory_.SetFakeResponse(GURL(kConfigURL), "bad protobuf", net::HTTP_OK,
net::URLRequestStatus::SUCCESS);
factory_.SetFakeResponse(GURL(kGoodManifestURL), "", net::HTTP_OK,
net::URLRequestStatus::SUCCESS);
- PrecacheFetcher precache_fetcher(starting_hosts, request_context_.get(),
- GURL(), std::string(), &precache_delegate_);
+ PrecacheFetcher precache_fetcher(request_context_.get(),
+ GURL(), std::string(),
+ std::move(unfinished_work),
+ &precache_delegate_);
precache_fetcher.Start();
loop_.RunUntilIdle();
@@ -504,7 +612,9 @@ TEST_F(PrecacheFetcherTest, BadConfig) {
TEST_F(PrecacheFetcherTest, Cancel) {
SetDefaultFlags();
- std::vector<std::string> starting_hosts(1, "starting-url.com");
+ std::unique_ptr<PrecacheUnfinishedWork> unfinished_work(
+ new PrecacheUnfinishedWork());
+ unfinished_work->add_top_host()->set_hostname("starting-url.com");
PrecacheConfigurationSettings config;
config.set_top_sites_count(1);
@@ -515,13 +625,15 @@ TEST_F(PrecacheFetcherTest, Cancel) {
base::HistogramTester histogram;
{
- PrecacheFetcher precache_fetcher(starting_hosts, request_context_.get(),
+ PrecacheFetcher precache_fetcher(request_context_.get(),
GURL(), std::string(),
+ std::move(unfinished_work),
&precache_delegate_);
precache_fetcher.Start();
- // Destroy the PrecacheFetcher, to cancel precaching and record metrics.
- // This should not cause OnDone to be called on the precache delegate.
+ // Destroy the PrecacheFetcher, to cancel precaching. No metrics
+ // should be recorded because this should not cause OnDone to be
+ // called on the precache delegate.
}
loop_.RunUntilIdle();
@@ -532,9 +644,7 @@ TEST_F(PrecacheFetcherTest, Cancel) {
EXPECT_FALSE(precache_delegate_.was_on_done_called());
- histogram.ExpectUniqueSample("Precache.Fetch.PercentCompleted", 0, 1);
- histogram.ExpectUniqueSample("Precache.Fetch.ResponseBytes.Total", 0, 1);
- histogram.ExpectTotalCount("Precache.Fetch.TimeToComplete", 1);
+ histogram.ExpectTotalCount("Precache.Fetch.TimeToComplete", 0);
}
#if defined(PRECACHE_CONFIG_SETTINGS_URL)
@@ -542,7 +652,9 @@ TEST_F(PrecacheFetcherTest, Cancel) {
// If the default precache configuration settings URL is defined, then test that
// it works with the PrecacheFetcher.
TEST_F(PrecacheFetcherTest, PrecacheUsingDefaultConfigSettingsURL) {
- std::vector<std::string> starting_hosts(1, "starting-url.com");
+ std::unique_ptr<PrecacheUnfinishedWork> unfinished_work(
+ new PrecacheUnfinishedWork());
+ unfinished_work->add_top_host()->set_hostname("starting-url.com");
PrecacheConfigurationSettings config;
config.set_top_sites_count(0);
@@ -551,8 +663,10 @@ TEST_F(PrecacheFetcherTest, PrecacheUsingDefaultConfigSettingsURL) {
config.SerializeAsString(), net::HTTP_OK,
net::URLRequestStatus::SUCCESS);
- PrecacheFetcher precache_fetcher(starting_hosts, request_context_.get(),
- GURL(), std::string(), &precache_delegate_);
+ PrecacheFetcher precache_fetcher(request_context_.get(),
+ GURL(), std::string(),
+ std::move(unfinished_work),
+ &precache_delegate_);
precache_fetcher.Start();
loop_.RunUntilIdle();
@@ -574,7 +688,9 @@ TEST_F(PrecacheFetcherTest, PrecacheUsingDefaultManifestURLPrefix) {
base::CommandLine::ForCurrentProcess()->AppendSwitchASCII(
switches::kPrecacheConfigSettingsURL, kConfigURL);
- std::vector<std::string> starting_hosts(1, "starting-url.com");
+ std::unique_ptr<PrecacheUnfinishedWork> unfinished_work(
+ new PrecacheUnfinishedWork());
+ unfinished_work->add_top_host()->set_hostname("starting-url.com");
PrecacheConfigurationSettings config;
config.set_top_sites_count(1);
@@ -586,8 +702,10 @@ TEST_F(PrecacheFetcherTest, PrecacheUsingDefaultManifestURLPrefix) {
factory_.SetFakeResponse(manifest_url, PrecacheManifest().SerializeAsString(),
net::HTTP_OK, net::URLRequestStatus::SUCCESS);
- PrecacheFetcher precache_fetcher(starting_hosts, request_context_.get(),
- GURL(), std::string(), &precache_delegate_);
+ PrecacheFetcher precache_fetcher(request_context_.get(),
+ GURL(), std::string(),
+ std::move(unfinished_work),
+ &precache_delegate_);
precache_fetcher.Start();
loop_.RunUntilIdle();
@@ -605,8 +723,10 @@ TEST_F(PrecacheFetcherTest, PrecacheUsingDefaultManifestURLPrefix) {
TEST_F(PrecacheFetcherTest, TopResourcesCount) {
SetDefaultFlags();
- std::vector<std::string> starting_hosts;
- starting_hosts.push_back("good-manifest.com");
+ std::unique_ptr<PrecacheUnfinishedWork> unfinished_work(
+ new PrecacheUnfinishedWork());
+ unfinished_work->set_start_time(base::Time::UnixEpoch().ToInternalValue());
+ unfinished_work->add_top_host()->set_hostname("good-manifest.com");
PrecacheConfigurationSettings config;
config.set_top_resources_count(3);
@@ -629,8 +749,9 @@ TEST_F(PrecacheFetcherTest, TopResourcesCount) {
base::HistogramTester histogram;
{
- PrecacheFetcher precache_fetcher(starting_hosts, request_context_.get(),
+ PrecacheFetcher precache_fetcher(request_context_.get(),
GURL(), std::string(),
+ std::move(unfinished_work),
&precache_delegate_);
precache_fetcher.Start();
@@ -675,6 +796,11 @@ TEST_F(PrecacheFetcherTest, TopResourcesCount) {
TEST_F(PrecacheFetcherTest, MaxBytesTotal) {
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());
+
const size_t kNumResources = 15; // > kMaxParallelFetches.
const size_t kMaxBytesTotal = 1000;
const size_t kBytesPerResource = kMaxBytesTotal / 3;
@@ -701,14 +827,13 @@ TEST_F(PrecacheFetcherTest, MaxBytesTotal) {
base::HistogramTester histogram;
{
- PrecacheFetcher precache_fetcher({"good-manifest.com"},
- request_context_.get(), GURL(),
- std::string(), &precache_delegate_);
+ PrecacheFetcher precache_fetcher(request_context_.get(), GURL(),
+ std::string(),
+ std::move(unfinished_work),
+ &precache_delegate_);
precache_fetcher.Start();
loop_.RunUntilIdle();
-
- // Destroy the PrecacheFetcher after it has finished, to record metrics.
}
// We don't know which will make it and which won't due to the parallelism in
« no previous file with comments | « components/precache/core/precache_fetcher.cc ('k') | components/precache/core/precache_session_table.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698