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

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

Issue 2053163002: [Offline pages] Adding persistent request queue based on SQLite (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fixing code comments 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
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
index 7b94549cbfc5d90f1f066709c44c23d624eef99a..f5606698b2d8fdc4be5b505d7dca7f1ea3e6a544 100644
--- a/components/offline_pages/background/request_queue_store_unittest.cc
+++ b/components/offline_pages/background/request_queue_store_unittest.cc
@@ -7,9 +7,12 @@
#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_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"
@@ -22,6 +25,12 @@ const int64_t kRequestId = 42;
const GURL kUrl("http://example.com");
const ClientId kClientId("bookmark", "1234");
+enum class LastResult {
+ kNone,
+ kFalse,
+ kTrue,
+};
+
bool operator==(const SavePageRequest& lhs, const SavePageRequest& rhs) {
return lhs.request_id() == rhs.request_id() && lhs.url() == rhs.url() &&
lhs.client_id() == rhs.client_id() &&
@@ -33,23 +42,18 @@ bool operator==(const SavePageRequest& lhs, const SavePageRequest& rhs) {
} // namespace
-class RequestQueueInMemoryStoreTest : public testing::Test {
+// 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:
- enum class LastResult {
- RESULT_NONE,
- RESULT_FALSE,
- RESULT_TRUE,
- };
-
- RequestQueueInMemoryStoreTest();
+ RequestQueueStoreTestBase();
// Test overrides.
- void SetUp() override;
-
- RequestQueueStore* store() { return store_.get(); }
+ void TearDown() override;
void PumpLoop();
- void ResetResults();
+ void ClearResults();
// Callback used for get requests.
void GetRequestsDone(bool result,
@@ -62,181 +66,249 @@ class RequestQueueInMemoryStoreTest : public testing::Test {
void ResetDone(bool result);
LastResult last_result() const { return last_result_; }
-
UpdateStatus last_update_status() const { return last_update_status_; }
-
int last_remove_count() const { return last_remove_count_; }
-
const std::vector<SavePageRequest>& last_requests() const {
return last_requests_;
}
+ protected:
+ base::ScopedTempDir temp_directory_;
+
private:
- std::unique_ptr<RequestQueueInMemoryStore> store_;
LastResult last_result_;
UpdateStatus last_update_status_;
int last_remove_count_;
std::vector<SavePageRequest> last_requests_;
+
scoped_refptr<base::TestSimpleTaskRunner> task_runner_;
base::ThreadTaskRunnerHandle task_runner_handle_;
};
-RequestQueueInMemoryStoreTest::RequestQueueInMemoryStoreTest()
- : last_result_(LastResult::RESULT_NONE),
+RequestQueueStoreTestBase::RequestQueueStoreTestBase()
+ : last_result_(LastResult::kNone),
last_update_status_(UpdateStatus::FAILED),
last_remove_count_(0),
task_runner_(new base::TestSimpleTaskRunner),
- task_runner_handle_(task_runner_) {}
+ task_runner_handle_(task_runner_) {
+ EXPECT_TRUE(temp_directory_.CreateUniqueTempDir());
+}
-void RequestQueueInMemoryStoreTest::SetUp() {
- store_.reset(new RequestQueueInMemoryStore());
+void RequestQueueStoreTestBase::TearDown() {
+ // Wait for all the pieces of the store to delete itself properly.
+ PumpLoop();
}
-void RequestQueueInMemoryStoreTest::PumpLoop() {
+void RequestQueueStoreTestBase::PumpLoop() {
task_runner_->RunUntilIdle();
}
-void RequestQueueInMemoryStoreTest::ResetResults() {
- last_result_ = LastResult::RESULT_NONE;
+void RequestQueueStoreTestBase::ClearResults() {
+ last_result_ = LastResult::kNone;
last_update_status_ = UpdateStatus::FAILED;
last_remove_count_ = 0;
last_requests_.clear();
}
-void RequestQueueInMemoryStoreTest::GetRequestsDone(
+void RequestQueueStoreTestBase::GetRequestsDone(
bool result,
const std::vector<SavePageRequest>& requests) {
- last_result_ = result ? LastResult::RESULT_TRUE : LastResult::RESULT_FALSE;
+ last_result_ = result ? LastResult::kTrue : LastResult::kFalse;
last_requests_ = requests;
}
-void RequestQueueInMemoryStoreTest::AddOrUpdateDone(UpdateStatus status) {
+void RequestQueueStoreTestBase::AddOrUpdateDone(UpdateStatus status) {
last_update_status_ = status;
}
-void RequestQueueInMemoryStoreTest::RemoveDone(bool result, int count) {
- last_result_ = result ? LastResult::RESULT_TRUE : LastResult::RESULT_FALSE;
+void RequestQueueStoreTestBase::RemoveDone(bool result, int count) {
+ last_result_ = result ? LastResult::kTrue : LastResult::kFalse;
last_remove_count_ = count;
}
-void RequestQueueInMemoryStoreTest::ResetDone(bool result) {
- last_result_ = result ? LastResult::RESULT_TRUE : LastResult::RESULT_FALSE;
+void RequestQueueStoreTestBase::ResetDone(bool result) {
+ last_result_ = result ? LastResult::kTrue : LastResult::kFalse;
}
-TEST_F(RequestQueueInMemoryStoreTest, GetRequestsEmpty) {
- store()->GetRequests(base::Bind(
- &RequestQueueInMemoryStoreTest::GetRequestsDone, base::Unretained(this)));
- ASSERT_EQ(LastResult::RESULT_NONE, last_result());
- PumpLoop();
- ASSERT_EQ(LastResult::RESULT_TRUE, last_result());
- ASSERT_TRUE(last_requests().empty());
+// 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_.path()));
+ return store;
}
-TEST_F(RequestQueueInMemoryStoreTest, AddRequest) {
+// |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());
+ store->GetRequests(base::Bind(&RequestQueueStoreTestBase::GetRequestsDone,
+ base::Unretained(this)));
+ ASSERT_EQ(LastResult::kNone, this->last_result());
+ this->PumpLoop();
+ ASSERT_EQ(LastResult::kTrue, this->last_result());
+ ASSERT_TRUE(this->last_requests().empty());
+}
+
+TYPED_TEST(RequestQueueStoreTest, AddRequest) {
+ std::unique_ptr<RequestQueueStore> store(this->BuildStore());
base::Time creation_time = base::Time::Now();
SavePageRequest request(kRequestId, kUrl, kClientId, creation_time);
- store()->AddOrUpdateRequest(
- request, base::Bind(&RequestQueueInMemoryStoreTest::AddOrUpdateDone,
+ store->AddOrUpdateRequest(
+ request, base::Bind(&RequestQueueStoreTestBase::AddOrUpdateDone,
base::Unretained(this)));
- ASSERT_EQ(UpdateStatus::FAILED, last_update_status());
- PumpLoop();
- ASSERT_EQ(UpdateStatus::ADDED, last_update_status());
+ ASSERT_EQ(UpdateStatus::FAILED, this->last_update_status());
+ this->PumpLoop();
+ ASSERT_EQ(UpdateStatus::UPDATED, this->last_update_status());
// Verifying get reqeust results after a request was added.
- ResetResults();
- store()->GetRequests(base::Bind(
- &RequestQueueInMemoryStoreTest::GetRequestsDone, base::Unretained(this)));
- ASSERT_EQ(LastResult::RESULT_NONE, last_result());
- PumpLoop();
- ASSERT_EQ(LastResult::RESULT_TRUE, last_result());
- ASSERT_EQ(1ul, last_requests().size());
- ASSERT_TRUE(request == last_requests()[0]);
+ this->ClearResults();
+ store->GetRequests(base::Bind(&RequestQueueStoreTestBase::GetRequestsDone,
+ base::Unretained(this)));
+ ASSERT_EQ(LastResult::kNone, this->last_result());
+ this->PumpLoop();
+ ASSERT_EQ(LastResult::kTrue, this->last_result());
+ ASSERT_EQ(1ul, this->last_requests().size());
+ ASSERT_TRUE(request == this->last_requests()[0]);
}
-TEST_F(RequestQueueInMemoryStoreTest, UpdateRequest) {
+TYPED_TEST(RequestQueueStoreTest, UpdateRequest) {
+ std::unique_ptr<RequestQueueStore> store(this->BuildStore());
base::Time creation_time = base::Time::Now();
SavePageRequest original_request(kRequestId, kUrl, kClientId, creation_time);
- store()->AddOrUpdateRequest(
- original_request,
- base::Bind(&RequestQueueInMemoryStoreTest::AddOrUpdateDone,
- base::Unretained(this)));
- PumpLoop();
- ResetResults();
+ store->AddOrUpdateRequest(
+ original_request, base::Bind(&RequestQueueStoreTestBase::AddOrUpdateDone,
+ 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);
SavePageRequest updated_request(kRequestId, kUrl, kClientId,
new_creation_time, activation_time);
- store()->AddOrUpdateRequest(
- updated_request,
- base::Bind(&RequestQueueInMemoryStoreTest::AddOrUpdateDone,
- base::Unretained(this)));
- ASSERT_EQ(UpdateStatus::FAILED, last_update_status());
- PumpLoop();
- ASSERT_EQ(UpdateStatus::UPDATED, last_update_status());
+ store->AddOrUpdateRequest(
+ updated_request, base::Bind(&RequestQueueStoreTestBase::AddOrUpdateDone,
+ base::Unretained(this)));
+ ASSERT_EQ(UpdateStatus::FAILED, this->last_update_status());
+ this->PumpLoop();
+ ASSERT_EQ(UpdateStatus::UPDATED, this->last_update_status());
// Verifying get reqeust results after a request was updated.
- ResetResults();
- store()->GetRequests(base::Bind(
- &RequestQueueInMemoryStoreTest::GetRequestsDone, base::Unretained(this)));
- ASSERT_EQ(LastResult::RESULT_NONE, last_result());
- PumpLoop();
- ASSERT_EQ(LastResult::RESULT_TRUE, last_result());
- ASSERT_EQ(1ul, last_requests().size());
- ASSERT_TRUE(updated_request == last_requests()[0]);
+ this->ClearResults();
+ store->GetRequests(base::Bind(&RequestQueueStoreTestBase::GetRequestsDone,
+ base::Unretained(this)));
+ ASSERT_EQ(LastResult::kNone, this->last_result());
+ this->PumpLoop();
+ ASSERT_EQ(LastResult::kTrue, this->last_result());
+ ASSERT_EQ(1ul, this->last_requests().size());
+ ASSERT_TRUE(updated_request == this->last_requests()[0]);
}
-TEST_F(RequestQueueInMemoryStoreTest, RemoveRequest) {
+TYPED_TEST(RequestQueueStoreTest, RemoveRequest) {
+ std::unique_ptr<RequestQueueStore> store(this->BuildStore());
base::Time creation_time = base::Time::Now();
SavePageRequest original_request(kRequestId, kUrl, kClientId, creation_time);
- store()->AddOrUpdateRequest(
- original_request,
- base::Bind(&RequestQueueInMemoryStoreTest::AddOrUpdateDone,
- base::Unretained(this)));
- PumpLoop();
- ResetResults();
+ store->AddOrUpdateRequest(
+ original_request, base::Bind(&RequestQueueStoreTestBase::AddOrUpdateDone,
+ base::Unretained(this)));
+ this->PumpLoop();
+ this->ClearResults();
std::vector<int64_t> request_ids{kRequestId};
- store()->RemoveRequests(request_ids,
- base::Bind(&RequestQueueInMemoryStoreTest::RemoveDone,
- base::Unretained(this)));
- ASSERT_EQ(LastResult::RESULT_NONE, last_result());
- ASSERT_EQ(0, last_remove_count());
- PumpLoop();
- ASSERT_EQ(LastResult::RESULT_TRUE, last_result());
- ASSERT_EQ(1, last_remove_count());
- ASSERT_EQ(0ul, last_requests().size());
- ResetResults();
+ store->RemoveRequests(request_ids,
+ base::Bind(&RequestQueueStoreTestBase::RemoveDone,
+ base::Unretained(this)));
+ ASSERT_EQ(LastResult::kNone, this->last_result());
+ ASSERT_EQ(0, this->last_remove_count());
+ this->PumpLoop();
+ ASSERT_EQ(LastResult::kTrue, this->last_result());
+ ASSERT_EQ(1, this->last_remove_count());
+ this->ClearResults();
+
+ store->GetRequests(base::Bind(&RequestQueueStoreTestBase::GetRequestsDone,
+ base::Unretained(this)));
+ this->PumpLoop();
+ ASSERT_EQ(LastResult::kTrue, this->last_result());
+ ASSERT_TRUE(this->last_requests().empty());
+ this->ClearResults();
// Removing a request that is missing fails.
- store()->RemoveRequests(request_ids,
- base::Bind(&RequestQueueInMemoryStoreTest::RemoveDone,
- base::Unretained(this)));
- ASSERT_EQ(LastResult::RESULT_NONE, last_result());
- ASSERT_EQ(0, last_remove_count());
- PumpLoop();
- ASSERT_EQ(LastResult::RESULT_FALSE, last_result());
- ASSERT_EQ(0, last_remove_count());
+ store->RemoveRequests(request_ids,
+ base::Bind(&RequestQueueStoreTestBase::RemoveDone,
+ base::Unretained(this)));
+ ASSERT_EQ(LastResult::kNone, this->last_result());
+ ASSERT_EQ(0, this->last_remove_count());
+ this->PumpLoop();
+ ASSERT_EQ(LastResult::kTrue, this->last_result());
+ ASSERT_EQ(0, this->last_remove_count());
}
-TEST_F(RequestQueueInMemoryStoreTest, ResetStore) {
+TYPED_TEST(RequestQueueStoreTest, ResetStore) {
+ std::unique_ptr<RequestQueueStore> store(this->BuildStore());
base::Time creation_time = base::Time::Now();
SavePageRequest original_request(kRequestId, kUrl, kClientId, creation_time);
- store()->AddOrUpdateRequest(
- original_request,
- base::Bind(&RequestQueueInMemoryStoreTest::AddOrUpdateDone,
- base::Unretained(this)));
- PumpLoop();
- ResetResults();
+ store->AddOrUpdateRequest(
+ original_request, base::Bind(&RequestQueueStoreTestBase::AddOrUpdateDone,
+ base::Unretained(this)));
+ this->PumpLoop();
+ this->ClearResults();
- store()->Reset(base::Bind(&RequestQueueInMemoryStoreTest::ResetDone,
- base::Unretained(this)));
- ASSERT_EQ(LastResult::RESULT_NONE, last_result());
- PumpLoop();
- ASSERT_EQ(LastResult::RESULT_TRUE, last_result());
- ASSERT_EQ(0ul, last_requests().size());
+ store->Reset(base::Bind(&RequestQueueStoreTestBase::ResetDone,
+ base::Unretained(this)));
+ ASSERT_EQ(LastResult::kNone, this->last_result());
+ this->PumpLoop();
+ ASSERT_EQ(LastResult::kTrue, this->last_result());
+ this->ClearResults();
+
+ store->GetRequests(base::Bind(&RequestQueueStoreTestBase::GetRequestsDone,
+ base::Unretained(this)));
+ this->PumpLoop();
+ ASSERT_EQ(LastResult::kTrue, this->last_result());
+ ASSERT_TRUE(this->last_requests().empty());
}
} // offline_pages

Powered by Google App Engine
This is Rietveld 408576698