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

Unified Diff: components/offline_pages/core/prefetch/prefetch_dispatcher_impl_unittest.cc

Issue 2920083002: Prefetching: Introduce store commands abstractions to be used by tasks. (Closed)
Patch Set: Added TODO for NWake Created 3 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
Index: components/offline_pages/core/prefetch/prefetch_dispatcher_impl_unittest.cc
diff --git a/components/offline_pages/core/prefetch/prefetch_dispatcher_impl_unittest.cc b/components/offline_pages/core/prefetch/prefetch_dispatcher_impl_unittest.cc
index 846f697919381afa39cbdd7671150446390f39b1..52fbe8e8a3e30e8306023b6f2f0cafefa29c2cc1 100644
--- a/components/offline_pages/core/prefetch/prefetch_dispatcher_impl_unittest.cc
+++ b/components/offline_pages/core/prefetch/prefetch_dispatcher_impl_unittest.cc
@@ -12,9 +12,10 @@
#include "components/offline_pages/core/client_namespace_constants.h"
#include "components/offline_pages/core/offline_event_logger.h"
#include "components/offline_pages/core/offline_page_feature.h"
-#include "components/offline_pages/core/prefetch/prefetch_in_memory_store.h"
#include "components/offline_pages/core/prefetch/prefetch_service.h"
+#include "components/offline_pages/core/prefetch/store/prefetch_store_command_factory.h"
#include "testing/gtest/include/gtest/gtest.h"
+#include "url/gurl.h"
namespace offline_pages {
@@ -31,8 +32,72 @@ class TestScopedBackgroundTask
bool needs_reschedule_called = false;
};
+namespace {
+class TestPrefetchStoreCommandFactory;
+
+class TestAddUrlsStoreCommand : public AddUrlsStoreCommand {
+ public:
+ TestAddUrlsStoreCommand(TestPrefetchStoreCommandFactory* factory)
+ : factory_(factory){};
+ ~TestAddUrlsStoreCommand() override{};
+ void Execute(const std::string& name_space,
+ const std::vector<PrefetchURL>& prefetch_urls,
+ UrlsAddedCallback callback) override;
+
+ private:
+ TestPrefetchStoreCommandFactory* factory_;
+};
+
+class TestCleanupZombiesStoreCommand : public CleanupZombiesStoreCommand {
+ public:
+ TestCleanupZombiesStoreCommand(TestPrefetchStoreCommandFactory* factory)
+ : factory_(factory){};
+ ~TestCleanupZombiesStoreCommand() override{};
+ void Execute(const std::string& name_space,
+ const std::vector<GURL>& urls_to_keep,
+ base::OnceCallback<void()> callback) override;
+
+ private:
+ TestPrefetchStoreCommandFactory* factory_;
+};
+
+class TestPrefetchStoreCommandFactory : public PrefetchStoreCommandFactory {
+ public:
+ std::unique_ptr<AddUrlsStoreCommand> createAddUrls() override {
+ return base::MakeUnique<TestAddUrlsStoreCommand>(this);
+ }
+
+ std::unique_ptr<CleanupZombiesStoreCommand> createCleanupZombies() override {
+ return base::MakeUnique<TestCleanupZombiesStoreCommand>(this);
+ }
+
+ int add_url_execute_calls_ = 0;
+ bool add_url_succeeds = true;
+ int zombies_execute_calls_ = 0;
+};
+
+void TestAddUrlsStoreCommand::Execute(
+ const std::string& name_space,
+ const std::vector<PrefetchURL>& prefetch_urls,
+ UrlsAddedCallback callback) {
+ ++factory_->add_url_execute_calls_;
+ std::move(callback).Run(factory_->add_url_succeeds);
+}
+
+void TestCleanupZombiesStoreCommand::Execute(
+ const std::string& name_space,
+ const std::vector<GURL>& urls_to_keep,
+ base::OnceCallback<void()> callback) {
+ ++factory_->zombies_execute_calls_;
+ std::move(callback).Run();
+}
+
+} // namespace
+
class PrefetchDispatcherTest : public testing::Test, public PrefetchService {
public:
+ const std::string TEST_NAMESPACE = "TestPrefetchClientNamespace";
+
PrefetchDispatcherTest();
// Test implementation.
@@ -44,7 +109,7 @@ class PrefetchDispatcherTest : public testing::Test, public PrefetchService {
OfflineMetricsCollector* GetOfflineMetricsCollector() override;
PrefetchDispatcher* GetPrefetchDispatcher() override;
PrefetchGCMHandler* GetPrefetchGCMHandler() override;
- PrefetchStore* GetPrefetchStore() override;
+ PrefetchStoreCommandFactory* GetPrefetchStoreCommandFactory() override;
SuggestedArticlesObserver* GetSuggestedArticlesObserver() override;
// KeyedService implementation.
@@ -57,13 +122,14 @@ class PrefetchDispatcherTest : public testing::Test, public PrefetchService {
TaskQueue* dispatcher_task_queue() { return &dispatcher_impl_->task_queue_; }
+ protected:
+ std::unique_ptr<TestPrefetchStoreCommandFactory> test_command_factory_;
+ std::vector<PrefetchURL> test_urls_;
+
private:
+ std::unique_ptr<PrefetchDispatcherImpl> dispatcher_impl_;
OfflineEventLogger logger_;
base::test::ScopedFeatureList feature_list_;
-
- std::unique_ptr<PrefetchInMemoryStore> in_memory_store_;
- std::unique_ptr<PrefetchDispatcherImpl> dispatcher_impl_;
-
scoped_refptr<base::TestSimpleTaskRunner> task_runner_;
base::ThreadTaskRunnerHandle task_runner_handle_;
};
@@ -77,9 +143,13 @@ PrefetchDispatcherTest::PrefetchDispatcherTest()
void PrefetchDispatcherTest::SetUp() {
ASSERT_EQ(base::ThreadTaskRunnerHandle::Get(), task_runner_);
ASSERT_FALSE(task_runner_->HasPendingTask());
- in_memory_store_ = base::MakeUnique<PrefetchInMemoryStore>();
+ test_command_factory_ = base::MakeUnique<TestPrefetchStoreCommandFactory>();
dispatcher_impl_ = base::MakeUnique<PrefetchDispatcherImpl>();
dispatcher_impl_->SetService(this);
+
+ ASSERT_TRUE(test_urls_.empty());
+ test_urls_.push_back({"1", GURL("http://testurl.com/foo")});
+ test_urls_.push_back({"2", GURL("https://testurl.com/bar")});
}
void PrefetchDispatcherTest::TearDown() {
@@ -104,8 +174,9 @@ PrefetchGCMHandler* PrefetchDispatcherTest::GetPrefetchGCMHandler() {
return nullptr;
}
-PrefetchStore* PrefetchDispatcherTest::GetPrefetchStore() {
- return in_memory_store_.get();
+PrefetchStoreCommandFactory*
+PrefetchDispatcherTest::GetPrefetchStoreCommandFactory() {
+ return test_command_factory_.get();
}
SuggestedArticlesObserver*
@@ -119,7 +190,7 @@ void PrefetchDispatcherTest::PumpLoop() {
}
TEST_F(PrefetchDispatcherTest, DispatcherDoesNotCrash) {
- GetPrefetchDispatcher()->AddCandidatePrefetchURLs(std::vector<PrefetchURL>());
+ GetPrefetchDispatcher()->AddCandidatePrefetchURLs(TEST_NAMESPACE, test_urls_);
GetPrefetchDispatcher()->RemoveAllUnprocessedPrefetchURLs(
kSuggestedArticlesNamespace);
GetPrefetchDispatcher()->RemovePrefetchURLsByClientId(
@@ -127,12 +198,26 @@ TEST_F(PrefetchDispatcherTest, DispatcherDoesNotCrash) {
}
TEST_F(PrefetchDispatcherTest, AddCandidatePrefetchURLsTask) {
- GetPrefetchDispatcher()->AddCandidatePrefetchURLs(std::vector<PrefetchURL>());
+ GetPrefetchDispatcher()->AddCandidatePrefetchURLs(TEST_NAMESPACE, test_urls_);
+ EXPECT_TRUE(dispatcher_task_queue()->HasPendingTasks());
+ EXPECT_TRUE(dispatcher_task_queue()->HasRunningTask());
+ PumpLoop();
+ EXPECT_FALSE(dispatcher_task_queue()->HasPendingTasks());
+ EXPECT_FALSE(dispatcher_task_queue()->HasRunningTask());
+ EXPECT_EQ(1, test_command_factory_->add_url_execute_calls_);
+ EXPECT_EQ(1, test_command_factory_->zombies_execute_calls_);
+}
+
+TEST_F(PrefetchDispatcherTest, AddCandidatePrefetchURLsTaskFailsAdding) {
+ test_command_factory_->add_url_succeeds = false;
+ GetPrefetchDispatcher()->AddCandidatePrefetchURLs(TEST_NAMESPACE, test_urls_);
EXPECT_TRUE(dispatcher_task_queue()->HasPendingTasks());
EXPECT_TRUE(dispatcher_task_queue()->HasRunningTask());
PumpLoop();
EXPECT_FALSE(dispatcher_task_queue()->HasPendingTasks());
EXPECT_FALSE(dispatcher_task_queue()->HasRunningTask());
+ EXPECT_EQ(1, test_command_factory_->add_url_execute_calls_);
+ EXPECT_EQ(0, test_command_factory_->zombies_execute_calls_);
}
TEST_F(PrefetchDispatcherTest, DispatcherDoesNothingIfFeatureNotEnabled) {
@@ -140,10 +225,9 @@ TEST_F(PrefetchDispatcherTest, DispatcherDoesNothingIfFeatureNotEnabled) {
disabled_feature_list.InitAndDisableFeature(kPrefetchingOfflinePagesFeature);
// Don't add a task for new prefetch URLs.
- ClientId client_id("namespace", "id");
- PrefetchURL prefetch_url(client_id, GURL("https://www.chromium.org"));
+ PrefetchURL prefetch_url("id", GURL("https://www.chromium.org"));
GetPrefetchDispatcher()->AddCandidatePrefetchURLs(
- std::vector<PrefetchURL>(1, prefetch_url));
+ TEST_NAMESPACE, std::vector<PrefetchURL>(1, prefetch_url));
EXPECT_FALSE(dispatcher_task_queue()->HasRunningTask());
// Do nothing with a new background task.

Powered by Google App Engine
This is Rietveld 408576698