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

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: Cleaned up PrecacheFetcher constructor 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
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..9b42551851550a54cde107a778b139b5d6cb15e4 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,12 @@ 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->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 +390,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 +420,106 @@ 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> empty_unfinished_work(
+ new PrecacheUnfinishedWork);
+
+ PrecacheFetcher first_fetcher(request_context_.get(),
+ GURL(), std::string(),
+ std::move(empty_unfinished_work),
+ &precache_delegate_);
+ base::Time then = base::Time::Now() - base::TimeDelta::FromHours(1);
+ std::list<GURL> manifests, resources;
+ manifests.push_back(GURL("http://manifest-url-prefix.com/manifest1.com"));
+ manifests.push_back(GURL("http://manifest-url-prefix.com/manifest2.com"));
+ resources.push_back(GURL(kGoodResourceURL));
+ first_fetcher.AssignWorkForTest(
+ manifests, resources, 271828, 314159, 5, then);
+ 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();
+
+ // Destroy the PrecacheFetcher after it has finished, to record metrics.
+ }
+
+ 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,8 +625,9 @@ 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();
@@ -542,7 +653,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 +664,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 +689,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 +703,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 +724,9 @@ 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->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,10 @@ 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");
+
const size_t kNumResources = 15; // > kMaxParallelFetches.
const size_t kMaxBytesTotal = 1000;
const size_t kBytesPerResource = kMaxBytesTotal / 3;
@@ -701,9 +826,10 @@ 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();

Powered by Google App Engine
This is Rietveld 408576698