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

Unified Diff: components/offline_pages/background/request_queue_store_unittest.cc

Issue 2489443002: Move all components/offline_pages/ files into component/offline_pages/core (Closed)
Patch Set: rebase Created 4 years 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/background/request_queue_store_unittest.cc
diff --git a/components/offline_pages/background/request_queue_store_unittest.cc b/components/offline_pages/background/request_queue_store_unittest.cc
deleted file mode 100644
index 8b376e00c44f123579e50eadb34514eda4aaf12f..0000000000000000000000000000000000000000
--- a/components/offline_pages/background/request_queue_store_unittest.cc
+++ /dev/null
@@ -1,503 +0,0 @@
-// Copyright 2016 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "components/offline_pages/background/request_queue_store.h"
-
-#include <memory>
-
-#include "base/bind.h"
-#include "base/files/file_path.h"
-#include "base/files/scoped_temp_dir.h"
-#include "base/test/test_simple_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
-#include "components/offline_pages/background/request_queue.h"
-#include "components/offline_pages/background/request_queue_in_memory_store.h"
-#include "components/offline_pages/background/request_queue_store_sql.h"
-#include "components/offline_pages/background/save_page_request.h"
-#include "testing/gtest/include/gtest/gtest.h"
-
-namespace offline_pages {
-
-using UpdateStatus = RequestQueueStore::UpdateStatus;
-
-namespace {
-const int64_t kRequestId = 42;
-const int64_t kRequestId2 = 44;
-const int64_t kRequestId3 = 47;
-const GURL kUrl("http://example.com");
-const GURL kUrl2("http://another-example.com");
-const ClientId kClientId("bookmark", "1234");
-const ClientId kClientId2("async", "5678");
-const bool kUserRequested = true;
-
-enum class LastResult {
- RESULT_NONE,
- RESULT_FALSE,
- RESULT_TRUE,
-};
-
-} // namespace
-
-// Class that serves as a base for testing different implementations of the
-// |RequestQueueStore|. Specific implementations extend the templatized version
-// of this class and provide appropriate store factory.
-class RequestQueueStoreTestBase : public testing::Test {
- public:
- RequestQueueStoreTestBase();
-
- // Test overrides.
- void TearDown() override;
-
- void PumpLoop();
- void ClearResults();
- void InitializeStore(RequestQueueStore* store);
-
- void InitializeCallback(bool success);
- // Callback used for get requests.
- void GetRequestsDone(bool result,
- std::vector<std::unique_ptr<SavePageRequest>> requests);
- // Callback used for add/update request.
- void AddOrUpdateDone(UpdateStatus result);
- void AddRequestDone(ItemActionStatus status);
- void UpdateRequestDone(std::unique_ptr<UpdateRequestsResult> result);
- // Callback used for reset.
- void ResetDone(bool result);
-
- LastResult last_result() const { return last_result_; }
- UpdateStatus last_update_status() const { return last_update_status_; }
- const std::vector<std::unique_ptr<SavePageRequest>>& last_requests() const {
- return last_requests_;
- }
- ItemActionStatus last_add_status() const { return last_add_status_; }
-
- UpdateRequestsResult* last_update_result() const {
- return last_update_result_.get();
- }
-
- protected:
- base::ScopedTempDir temp_directory_;
-
- private:
- LastResult last_result_;
- UpdateStatus last_update_status_;
- ItemActionStatus last_add_status_;
- std::unique_ptr<UpdateRequestsResult> last_update_result_;
- std::vector<std::unique_ptr<SavePageRequest>> last_requests_;
-
- scoped_refptr<base::TestSimpleTaskRunner> task_runner_;
- base::ThreadTaskRunnerHandle task_runner_handle_;
-};
-
-RequestQueueStoreTestBase::RequestQueueStoreTestBase()
- : last_result_(LastResult::RESULT_NONE),
- last_update_status_(UpdateStatus::FAILED),
- last_add_status_(ItemActionStatus::NOT_FOUND),
- task_runner_(new base::TestSimpleTaskRunner),
- task_runner_handle_(task_runner_) {
- EXPECT_TRUE(temp_directory_.CreateUniqueTempDir());
-}
-
-void RequestQueueStoreTestBase::TearDown() {
- // Wait for all the pieces of the store to delete itself properly.
- PumpLoop();
-}
-
-void RequestQueueStoreTestBase::PumpLoop() {
- task_runner_->RunUntilIdle();
-}
-
-void RequestQueueStoreTestBase::ClearResults() {
- last_result_ = LastResult::RESULT_NONE;
- last_update_status_ = UpdateStatus::FAILED;
- last_add_status_ = ItemActionStatus::NOT_FOUND;
- last_requests_.clear();
- last_update_result_.reset(nullptr);
-}
-
-void RequestQueueStoreTestBase::InitializeStore(RequestQueueStore* store) {
- store->Initialize(base::Bind(&RequestQueueStoreTestBase::InitializeCallback,
- base::Unretained(this)));
- PumpLoop();
- ASSERT_EQ(LastResult::RESULT_TRUE, this->last_result());
- ClearResults();
-}
-
-void RequestQueueStoreTestBase::InitializeCallback(bool success) {
- last_result_ = success ? LastResult::RESULT_TRUE : LastResult::RESULT_FALSE;
-}
-
-void RequestQueueStoreTestBase::GetRequestsDone(
- bool result,
- std::vector<std::unique_ptr<SavePageRequest>> requests) {
- last_result_ = result ? LastResult::RESULT_TRUE : LastResult::RESULT_FALSE;
- last_requests_ = std::move(requests);
-}
-
-void RequestQueueStoreTestBase::AddOrUpdateDone(UpdateStatus status) {
- last_update_status_ = status;
-}
-
-void RequestQueueStoreTestBase::AddRequestDone(ItemActionStatus status) {
- last_add_status_ = status;
-}
-
-void RequestQueueStoreTestBase::UpdateRequestDone(
- std::unique_ptr<UpdateRequestsResult> result) {
- last_update_result_ = std::move(result);
-}
-
-void RequestQueueStoreTestBase::ResetDone(bool result) {
- last_result_ = result ? LastResult::RESULT_TRUE : LastResult::RESULT_FALSE;
-}
-
-// Defines interface for the store factory.
-class RequestQueueStoreFactory {
- public:
- virtual RequestQueueStore* BuildStore(const base::FilePath& path) = 0;
-};
-
-// Implements a store factory for in memory store.
-class RequestQueueInMemoryStoreFactory : public RequestQueueStoreFactory {
- public:
- RequestQueueStore* BuildStore(const base::FilePath& path) override {
- RequestQueueStore* store = new RequestQueueInMemoryStore();
- return store;
- }
-};
-
-// Implements a store factory for SQLite based implementation of the store.
-class RequestQueueStoreSQLFactory : public RequestQueueStoreFactory {
- public:
- RequestQueueStore* BuildStore(const base::FilePath& path) override {
- RequestQueueStore* store =
- new RequestQueueStoreSQL(base::ThreadTaskRunnerHandle::Get(), path);
- return store;
- }
-};
-
-// Defines a store test fixture templatized by the store factory.
-template <typename T>
-class RequestQueueStoreTest : public RequestQueueStoreTestBase {
- public:
- std::unique_ptr<RequestQueueStore> BuildStore();
-
- protected:
- T factory_;
-};
-
-template <typename T>
-std::unique_ptr<RequestQueueStore> RequestQueueStoreTest<T>::BuildStore() {
- std::unique_ptr<RequestQueueStore> store(
- factory_.BuildStore(temp_directory_.GetPath()));
- return store;
-}
-
-// |StoreTypes| lists all factories, based on which the tests will be created.
-typedef testing::Types<RequestQueueInMemoryStoreFactory,
- RequestQueueStoreSQLFactory>
- StoreTypes;
-
-// This portion causes test fixtures to be defined.
-// Notice that in the store we are using "this->" to refer to the methods
-// defined on the |RequestQuieueStoreBaseTest| class. That's by design.
-TYPED_TEST_CASE(RequestQueueStoreTest, StoreTypes);
-
-TYPED_TEST(RequestQueueStoreTest, GetRequestsEmpty) {
- std::unique_ptr<RequestQueueStore> store(this->BuildStore());
- this->InitializeStore(store.get());
-
- store->GetRequests(base::Bind(&RequestQueueStoreTestBase::GetRequestsDone,
- base::Unretained(this)));
- ASSERT_EQ(LastResult::RESULT_NONE, this->last_result());
- this->PumpLoop();
- ASSERT_EQ(LastResult::RESULT_TRUE, this->last_result());
- ASSERT_TRUE(this->last_requests().empty());
-}
-
-TYPED_TEST(RequestQueueStoreTest, GetRequestsByIds) {
- std::unique_ptr<RequestQueueStore> store(this->BuildStore());
- this->InitializeStore(store.get());
-
- base::Time creation_time = base::Time::Now();
- SavePageRequest request1(kRequestId, kUrl, kClientId, creation_time,
- kUserRequested);
- store->AddRequest(request1,
- base::Bind(&RequestQueueStoreTestBase::AddRequestDone,
- base::Unretained(this)));
- SavePageRequest request2(kRequestId2, kUrl2, kClientId2, creation_time,
- kUserRequested);
- store->AddRequest(request2,
- base::Bind(&RequestQueueStoreTestBase::AddRequestDone,
- base::Unretained(this)));
- this->PumpLoop();
- this->ClearResults();
-
- std::vector<int64_t> request_ids{kRequestId, kRequestId2};
- store->GetRequestsByIds(
- request_ids, base::Bind(&RequestQueueStoreTestBase::UpdateRequestDone,
- base::Unretained(this)));
-
- ASSERT_FALSE(this->last_update_result());
- this->PumpLoop();
- ASSERT_TRUE(this->last_update_result());
- EXPECT_EQ(2UL, this->last_update_result()->item_statuses.size());
- EXPECT_EQ(kRequestId, this->last_update_result()->item_statuses[0].first);
- EXPECT_EQ(ItemActionStatus::SUCCESS,
- this->last_update_result()->item_statuses[0].second);
- EXPECT_EQ(kRequestId2, this->last_update_result()->item_statuses[1].first);
- EXPECT_EQ(ItemActionStatus::SUCCESS,
- this->last_update_result()->item_statuses[1].second);
- EXPECT_EQ(2UL, this->last_update_result()->updated_items.size());
- EXPECT_EQ(request1, this->last_update_result()->updated_items.at(0));
- EXPECT_EQ(request2, this->last_update_result()->updated_items.at(1));
- this->ClearResults();
-
- request_ids.clear();
- request_ids.push_back(kRequestId);
- request_ids.push_back(kRequestId3);
- request_ids.push_back(kRequestId);
-
- store->GetRequestsByIds(
- request_ids, base::Bind(&RequestQueueStoreTestBase::UpdateRequestDone,
- base::Unretained(this)));
-
- ASSERT_FALSE(this->last_update_result());
- this->PumpLoop();
- ASSERT_TRUE(this->last_update_result());
- EXPECT_EQ(2UL, this->last_update_result()->item_statuses.size());
- EXPECT_EQ(kRequestId, this->last_update_result()->item_statuses[0].first);
- EXPECT_EQ(ItemActionStatus::SUCCESS,
- this->last_update_result()->item_statuses[0].second);
- EXPECT_EQ(kRequestId3, this->last_update_result()->item_statuses[1].first);
- EXPECT_EQ(ItemActionStatus::NOT_FOUND,
- this->last_update_result()->item_statuses[1].second);
- EXPECT_EQ(1UL, this->last_update_result()->updated_items.size());
- EXPECT_EQ(request1, this->last_update_result()->updated_items.at(0));
-}
-
-TYPED_TEST(RequestQueueStoreTest, AddRequest) {
- std::unique_ptr<RequestQueueStore> store(this->BuildStore());
- this->InitializeStore(store.get());
-
- base::Time creation_time = base::Time::Now();
- SavePageRequest request(
- kRequestId, kUrl, kClientId, creation_time, kUserRequested);
-
- store->AddRequest(request,
- base::Bind(&RequestQueueStoreTestBase::AddRequestDone,
- base::Unretained(this)));
- ASSERT_EQ(ItemActionStatus::NOT_FOUND, this->last_add_status());
- this->PumpLoop();
- ASSERT_EQ(ItemActionStatus::SUCCESS, this->last_add_status());
-
- // Verifying get reqeust results after a request was added.
- this->ClearResults();
- store->GetRequests(base::Bind(&RequestQueueStoreTestBase::GetRequestsDone,
- base::Unretained(this)));
- ASSERT_EQ(LastResult::RESULT_NONE, this->last_result());
- this->PumpLoop();
- ASSERT_EQ(LastResult::RESULT_TRUE, this->last_result());
- ASSERT_EQ(1ul, this->last_requests().size());
- ASSERT_EQ(request, *(this->last_requests()[0].get()));
-
- // Verify it is not possible to add the same request twice.
- this->ClearResults();
- store->AddRequest(request,
- base::Bind(&RequestQueueStoreTestBase::AddRequestDone,
- base::Unretained(this)));
- ASSERT_EQ(ItemActionStatus::NOT_FOUND, this->last_add_status());
- this->PumpLoop();
- ASSERT_EQ(ItemActionStatus::ALREADY_EXISTS, this->last_add_status());
-
- // Check that there is still only one item in the store.
- this->ClearResults();
- store->GetRequests(base::Bind(&RequestQueueStoreTestBase::GetRequestsDone,
- base::Unretained(this)));
- ASSERT_EQ(LastResult::RESULT_NONE, this->last_result());
- this->PumpLoop();
- ASSERT_EQ(LastResult::RESULT_TRUE, this->last_result());
- ASSERT_EQ(1ul, this->last_requests().size());
-}
-
-TYPED_TEST(RequestQueueStoreTest, UpdateRequest) {
- std::unique_ptr<RequestQueueStore> store(this->BuildStore());
- this->InitializeStore(store.get());
-
- base::Time creation_time = base::Time::Now();
- SavePageRequest original_request(
- kRequestId, kUrl, kClientId, creation_time, kUserRequested);
- store->AddRequest(original_request,
- base::Bind(&RequestQueueStoreTestBase::AddRequestDone,
- base::Unretained(this)));
- this->PumpLoop();
- this->ClearResults();
-
- base::Time new_creation_time =
- creation_time + base::TimeDelta::FromMinutes(1);
- base::Time activation_time = creation_time + base::TimeDelta::FromHours(6);
- // Try updating an existing request.
- SavePageRequest updated_request(kRequestId, kUrl, kClientId,
- new_creation_time, activation_time,
- kUserRequested);
- // Try to update a non-existing request.
- SavePageRequest updated_request2(kRequestId2, kUrl, kClientId,
- new_creation_time, activation_time,
- kUserRequested);
- std::vector<SavePageRequest> requests_to_update{updated_request,
- updated_request2};
- store->UpdateRequests(
- requests_to_update,
- base::Bind(&RequestQueueStoreTestBase::UpdateRequestDone,
- base::Unretained(this)));
- ASSERT_FALSE(this->last_update_result());
- this->PumpLoop();
- ASSERT_TRUE(this->last_update_result());
- EXPECT_EQ(2UL, this->last_update_result()->item_statuses.size());
- EXPECT_EQ(kRequestId, this->last_update_result()->item_statuses[0].first);
- EXPECT_EQ(ItemActionStatus::SUCCESS,
- this->last_update_result()->item_statuses[0].second);
- EXPECT_EQ(kRequestId2, this->last_update_result()->item_statuses[1].first);
- EXPECT_EQ(ItemActionStatus::NOT_FOUND,
- this->last_update_result()->item_statuses[1].second);
- EXPECT_EQ(1UL, this->last_update_result()->updated_items.size());
- EXPECT_EQ(updated_request,
- *(this->last_update_result()->updated_items.begin()));
-
- // Verifying get reqeust results after a request was updated.
- this->ClearResults();
- store->GetRequests(base::Bind(&RequestQueueStoreTestBase::GetRequestsDone,
- base::Unretained(this)));
- ASSERT_EQ(LastResult::RESULT_NONE, this->last_result());
- this->PumpLoop();
- ASSERT_EQ(LastResult::RESULT_TRUE, this->last_result());
- ASSERT_EQ(1ul, this->last_requests().size());
- ASSERT_EQ(updated_request, *(this->last_requests()[0].get()));
-}
-
-TYPED_TEST(RequestQueueStoreTest, RemoveRequests) {
- std::unique_ptr<RequestQueueStore> store(this->BuildStore());
- this->InitializeStore(store.get());
-
- base::Time creation_time = base::Time::Now();
- SavePageRequest request1(kRequestId, kUrl, kClientId, creation_time,
- kUserRequested);
- store->AddRequest(request1,
- base::Bind(&RequestQueueStoreTestBase::AddRequestDone,
- base::Unretained(this)));
- SavePageRequest request2(kRequestId2, kUrl2, kClientId2, creation_time,
- kUserRequested);
- store->AddRequest(request2,
- base::Bind(&RequestQueueStoreTestBase::AddRequestDone,
- base::Unretained(this)));
- this->PumpLoop();
- this->ClearResults();
-
- std::vector<int64_t> request_ids{kRequestId, kRequestId2};
- store->RemoveRequests(
- request_ids, base::Bind(&RequestQueueStoreTestBase::UpdateRequestDone,
- base::Unretained(this)));
-
- ASSERT_FALSE(this->last_update_result());
- this->PumpLoop();
- ASSERT_TRUE(this->last_update_result());
- EXPECT_EQ(2UL, this->last_update_result()->item_statuses.size());
- EXPECT_EQ(kRequestId, this->last_update_result()->item_statuses[0].first);
- EXPECT_EQ(ItemActionStatus::SUCCESS,
- this->last_update_result()->item_statuses[0].second);
- EXPECT_EQ(kRequestId2, this->last_update_result()->item_statuses[1].first);
- EXPECT_EQ(ItemActionStatus::SUCCESS,
- this->last_update_result()->item_statuses[1].second);
- EXPECT_EQ(2UL, this->last_update_result()->updated_items.size());
- EXPECT_EQ(request1, this->last_update_result()->updated_items.at(0));
- EXPECT_EQ(request2, this->last_update_result()->updated_items.at(1));
- this->ClearResults();
-
- store->GetRequests(base::Bind(&RequestQueueStoreTestBase::GetRequestsDone,
- base::Unretained(this)));
- this->PumpLoop();
- ASSERT_EQ(LastResult::RESULT_TRUE, this->last_result());
- ASSERT_TRUE(this->last_requests().empty());
- this->ClearResults();
-
- // Try to remove a request that is not in the queue.
- store->RemoveRequests(
- request_ids, base::Bind(&RequestQueueStoreTestBase::UpdateRequestDone,
- base::Unretained(this)));
- ASSERT_FALSE(this->last_update_result());
- this->PumpLoop();
- ASSERT_TRUE(this->last_update_result());
- // When requests are missing, we expect the results to say so, but since they
- // are missing, no requests should have been returned.
- EXPECT_EQ(2UL, this->last_update_result()->item_statuses.size());
- EXPECT_EQ(kRequestId, this->last_update_result()->item_statuses[0].first);
- EXPECT_EQ(ItemActionStatus::NOT_FOUND,
- this->last_update_result()->item_statuses[0].second);
- EXPECT_EQ(kRequestId2, this->last_update_result()->item_statuses[1].first);
- EXPECT_EQ(ItemActionStatus::NOT_FOUND,
- this->last_update_result()->item_statuses[1].second);
- EXPECT_EQ(0UL, this->last_update_result()->updated_items.size());
-}
-
-TYPED_TEST(RequestQueueStoreTest, ResetStore) {
- std::unique_ptr<RequestQueueStore> store(this->BuildStore());
- this->InitializeStore(store.get());
-
- base::Time creation_time = base::Time::Now();
- SavePageRequest original_request(
- kRequestId, kUrl, kClientId, creation_time, kUserRequested);
- store->AddRequest(original_request,
- base::Bind(&RequestQueueStoreTestBase::AddRequestDone,
- base::Unretained(this)));
- this->PumpLoop();
- this->ClearResults();
-
- store->Reset(base::Bind(&RequestQueueStoreTestBase::ResetDone,
- base::Unretained(this)));
- ASSERT_EQ(LastResult::RESULT_NONE, this->last_result());
- this->PumpLoop();
- ASSERT_EQ(LastResult::RESULT_TRUE, this->last_result());
- this->ClearResults();
-
- this->InitializeStore(store.get());
- store->GetRequests(base::Bind(&RequestQueueStoreTestBase::GetRequestsDone,
- base::Unretained(this)));
- this->PumpLoop();
- ASSERT_EQ(LastResult::RESULT_TRUE, this->last_result());
- ASSERT_TRUE(this->last_requests().empty());
-}
-
-class RequestQueueStoreSQLTest
- : public RequestQueueStoreTest<RequestQueueStoreSQLFactory> {};
-
-// Makes sure that persistent DB is actually persisting requests across store
-// restarts.
-TEST_F(RequestQueueStoreSQLTest, SaveCloseReopenRead) {
- std::unique_ptr<RequestQueueStore> store(BuildStore());
- this->InitializeStore(store.get());
-
- base::Time creation_time = base::Time::Now();
- SavePageRequest original_request(
- kRequestId, kUrl, kClientId, creation_time, kUserRequested);
- store->AddRequest(original_request,
- base::Bind(&RequestQueueStoreTestBase::AddRequestDone,
- base::Unretained(this)));
- PumpLoop();
- ClearResults();
-
- // Resets the store, using the same temp directory. The contents should be
- // intact. First reset is done separately to release DB lock.
- store.reset();
- store = BuildStore();
- this->InitializeStore(store.get());
-
- store->GetRequests(base::Bind(&RequestQueueStoreTestBase::GetRequestsDone,
- base::Unretained(this)));
- ASSERT_EQ(LastResult::RESULT_NONE, this->last_result());
- this->PumpLoop();
- ASSERT_EQ(LastResult::RESULT_TRUE, this->last_result());
- ASSERT_EQ(1ul, this->last_requests().size());
- ASSERT_TRUE(original_request == *(this->last_requests().at(0).get()));
-}
-
-} // offline_pages

Powered by Google App Engine
This is Rietveld 408576698