summaryrefslogtreecommitdiffstats
path: root/chromium/components/dom_distiller/core/dom_distiller_database_unittest.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/components/dom_distiller/core/dom_distiller_database_unittest.cc')
-rw-r--r--chromium/components/dom_distiller/core/dom_distiller_database_unittest.cc397
1 files changed, 0 insertions, 397 deletions
diff --git a/chromium/components/dom_distiller/core/dom_distiller_database_unittest.cc b/chromium/components/dom_distiller/core/dom_distiller_database_unittest.cc
deleted file mode 100644
index 54c9043d440..00000000000
--- a/chromium/components/dom_distiller/core/dom_distiller_database_unittest.cc
+++ /dev/null
@@ -1,397 +0,0 @@
-// Copyright 2013 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/dom_distiller/core/dom_distiller_database.h"
-
-#include <map>
-
-#include "base/bind.h"
-#include "base/file_util.h"
-#include "base/files/scoped_temp_dir.h"
-#include "base/run_loop.h"
-#include "base/threading/thread.h"
-#include "components/dom_distiller/core/article_entry.h"
-#include "testing/gmock/include/gmock/gmock.h"
-#include "testing/gtest/include/gtest/gtest.h"
-
-using base::MessageLoop;
-using base::ScopedTempDir;
-using testing::Invoke;
-using testing::Return;
-using testing::_;
-
-namespace dom_distiller {
-
-namespace {
-
-typedef std::map<std::string, ArticleEntry> EntryMap;
-
-class MockDB : public DomDistillerDatabase::Database {
- public:
- MOCK_METHOD1(Init, bool(const base::FilePath&));
- MOCK_METHOD2(Save, bool(const EntryVector&, const EntryVector&));
- MOCK_METHOD1(Load, bool(EntryVector*));
-
- MockDB() {
- ON_CALL(*this, Init(_)).WillByDefault(Return(true));
- ON_CALL(*this, Save(_, _)).WillByDefault(Return(true));
- ON_CALL(*this, Load(_)).WillByDefault(Return(true));
- }
-
- bool LoadEntries(EntryVector* entries);
-};
-
-class MockDatabaseCaller {
- public:
- MOCK_METHOD1(InitCallback, void(bool));
- MOCK_METHOD1(SaveCallback, void(bool));
- void LoadCallback(bool success, scoped_ptr<EntryVector> entries) {
- LoadCallback1(success, entries.get());
- }
- MOCK_METHOD2(LoadCallback1, void(bool, EntryVector*));
-};
-
-} // namespace
-
-EntryMap GetSmallModel() {
- EntryMap model;
-
- model["key0"].set_entry_id("key0");
- model["key0"].add_pages()->set_url("http://foo.com/1");
- model["key0"].add_pages()->set_url("http://foo.com/2");
- model["key0"].add_pages()->set_url("http://foo.com/3");
-
- model["key1"].set_entry_id("key1");
- model["key1"].add_pages()->set_url("http://bar.com/all");
-
- model["key2"].set_entry_id("key2");
- model["key2"].add_pages()->set_url("http://baz.com/1");
-
- return model;
-}
-
-void ExpectEntryPointersEquals(EntryMap expected, const EntryVector& actual) {
- EXPECT_EQ(expected.size(), actual.size());
- for (size_t i = 0; i < actual.size(); i++) {
- EntryMap::iterator expected_it =
- expected.find(std::string(actual[i].entry_id()));
- EXPECT_TRUE(expected_it != expected.end());
- std::string serialized_expected = expected_it->second.SerializeAsString();
- std::string serialized_actual = actual[i].SerializeAsString();
- EXPECT_EQ(serialized_expected, serialized_actual);
- expected.erase(expected_it);
- }
-}
-
-class DomDistillerDatabaseTest : public testing::Test {
- public:
- virtual void SetUp() {
- main_loop_.reset(new MessageLoop());
- db_.reset(new DomDistillerDatabase(main_loop_->message_loop_proxy()));
- }
-
- virtual void TearDown() {
- db_.reset();
- base::RunLoop().RunUntilIdle();
- main_loop_.reset();
- }
-
- scoped_ptr<DomDistillerDatabase> db_;
- scoped_ptr<MessageLoop> main_loop_;
-};
-
-// Test that DomDistillerDatabase calls Init on the underlying database and that
-// the caller's InitCallback is called with the correct value.
-TEST_F(DomDistillerDatabaseTest, TestDBInitSuccess) {
- base::FilePath path(FILE_PATH_LITERAL("/fake/path"));
-
- MockDB* mock_db = new MockDB();
- EXPECT_CALL(*mock_db, Init(path)).WillOnce(Return(true));
-
- MockDatabaseCaller caller;
- EXPECT_CALL(caller, InitCallback(true));
-
- db_->InitWithDatabase(
- scoped_ptr<DomDistillerDatabase::Database>(mock_db),
- base::FilePath(path),
- base::Bind(&MockDatabaseCaller::InitCallback, base::Unretained(&caller)));
-
- base::RunLoop().RunUntilIdle();
-}
-
-TEST_F(DomDistillerDatabaseTest, TestDBInitFailure) {
- base::FilePath path(FILE_PATH_LITERAL("/fake/path"));
-
- MockDB* mock_db = new MockDB();
- EXPECT_CALL(*mock_db, Init(path)).WillOnce(Return(false));
-
- MockDatabaseCaller caller;
- EXPECT_CALL(caller, InitCallback(false));
-
- db_->InitWithDatabase(
- scoped_ptr<DomDistillerDatabase::Database>(mock_db),
- base::FilePath(path),
- base::Bind(&MockDatabaseCaller::InitCallback, base::Unretained(&caller)));
-
- base::RunLoop().RunUntilIdle();
-}
-
-ACTION_P(AppendLoadEntries, model) {
- EntryVector* output = arg0;
- for (EntryMap::const_iterator it = model.begin(); it != model.end(); ++it) {
- output->push_back(it->second);
- }
- return true;
-}
-
-ACTION_P(VerifyLoadEntries, expected) {
- EntryVector* actual = arg1;
- ExpectEntryPointersEquals(expected, *actual);
-}
-
-// Test that DomDistillerDatabase calls Load on the underlying database and that
-// the caller's LoadCallback is called with the correct success value. Also
-// confirms that on success, the expected entries are passed to the caller's
-// LoadCallback.
-TEST_F(DomDistillerDatabaseTest, TestDBLoadSuccess) {
- base::FilePath path(FILE_PATH_LITERAL("/fake/path"));
-
- MockDB* mock_db = new MockDB();
- MockDatabaseCaller caller;
- EntryMap model = GetSmallModel();
-
- EXPECT_CALL(*mock_db, Init(_));
- EXPECT_CALL(caller, InitCallback(_));
- db_->InitWithDatabase(
- scoped_ptr<DomDistillerDatabase::Database>(mock_db),
- base::FilePath(path),
- base::Bind(&MockDatabaseCaller::InitCallback, base::Unretained(&caller)));
-
- EXPECT_CALL(*mock_db, Load(_)).WillOnce(AppendLoadEntries(model));
- EXPECT_CALL(caller, LoadCallback1(true, _))
- .WillOnce(VerifyLoadEntries(testing::ByRef(model)));
- db_->LoadEntries(
- base::Bind(&MockDatabaseCaller::LoadCallback, base::Unretained(&caller)));
-
- base::RunLoop().RunUntilIdle();
-}
-
-TEST_F(DomDistillerDatabaseTest, TestDBLoadFailure) {
- base::FilePath path(FILE_PATH_LITERAL("/fake/path"));
-
- MockDB* mock_db = new MockDB();
- MockDatabaseCaller caller;
-
- EXPECT_CALL(*mock_db, Init(_));
- EXPECT_CALL(caller, InitCallback(_));
- db_->InitWithDatabase(
- scoped_ptr<DomDistillerDatabase::Database>(mock_db),
- base::FilePath(path),
- base::Bind(&MockDatabaseCaller::InitCallback, base::Unretained(&caller)));
-
- EXPECT_CALL(*mock_db, Load(_)).WillOnce(Return(false));
- EXPECT_CALL(caller, LoadCallback1(false, _));
- db_->LoadEntries(
- base::Bind(&MockDatabaseCaller::LoadCallback, base::Unretained(&caller)));
-
- base::RunLoop().RunUntilIdle();
-}
-
-ACTION_P(VerifyUpdateEntries, expected) {
- const EntryVector& actual = arg0;
- ExpectEntryPointersEquals(expected, actual);
- return true;
-}
-
-// Test that DomDistillerDatabase calls Save on the underlying database with the
-// correct entries to save and that the caller's SaveCallback is called with the
-// correct success value.
-TEST_F(DomDistillerDatabaseTest, TestDBSaveSuccess) {
- base::FilePath path(FILE_PATH_LITERAL("/fake/path"));
-
- MockDB* mock_db = new MockDB();
- MockDatabaseCaller caller;
- EntryMap model = GetSmallModel();
-
- EXPECT_CALL(*mock_db, Init(_));
- EXPECT_CALL(caller, InitCallback(_));
- db_->InitWithDatabase(
- scoped_ptr<DomDistillerDatabase::Database>(mock_db),
- base::FilePath(path),
- base::Bind(&MockDatabaseCaller::InitCallback, base::Unretained(&caller)));
-
- scoped_ptr<EntryVector> entries(new EntryVector());
- for (EntryMap::iterator it = model.begin(); it != model.end(); ++it) {
- entries->push_back(it->second);
- }
- scoped_ptr<EntryVector> entries_to_remove(new EntryVector());
-
- EXPECT_CALL(*mock_db, Save(_, _)).WillOnce(VerifyUpdateEntries(model));
- EXPECT_CALL(caller, SaveCallback(true));
- db_->UpdateEntries(
- entries.Pass(),
- entries_to_remove.Pass(),
- base::Bind(&MockDatabaseCaller::SaveCallback, base::Unretained(&caller)));
-
- base::RunLoop().RunUntilIdle();
-}
-
-TEST_F(DomDistillerDatabaseTest, TestDBSaveFailure) {
- base::FilePath path(FILE_PATH_LITERAL("/fake/path"));
-
- MockDB* mock_db = new MockDB();
- MockDatabaseCaller caller;
- scoped_ptr<EntryVector> entries(new EntryVector());
- scoped_ptr<EntryVector> entries_to_remove(new EntryVector());
-
- EXPECT_CALL(*mock_db, Init(_));
- EXPECT_CALL(caller, InitCallback(_));
- db_->InitWithDatabase(
- scoped_ptr<DomDistillerDatabase::Database>(mock_db),
- base::FilePath(path),
- base::Bind(&MockDatabaseCaller::InitCallback, base::Unretained(&caller)));
-
- EXPECT_CALL(*mock_db, Save(_, _)).WillOnce(Return(false));
- EXPECT_CALL(caller, SaveCallback(false));
- db_->UpdateEntries(
- entries.Pass(),
- entries_to_remove.Pass(),
- base::Bind(&MockDatabaseCaller::SaveCallback, base::Unretained(&caller)));
-
- base::RunLoop().RunUntilIdle();
-}
-
-ACTION_P(VerifyRemoveEntries, expected) {
- const EntryVector& actual = arg1;
- ExpectEntryPointersEquals(expected, actual);
- return true;
-}
-
-// Test that DomDistillerDatabase calls Save on the underlying database with the
-// correct entries to delete and that the caller's SaveCallback is called with
-// the correct success value.
-TEST_F(DomDistillerDatabaseTest, TestDBRemoveSuccess) {
- base::FilePath path(FILE_PATH_LITERAL("/fake/path"));
-
- MockDB* mock_db = new MockDB();
- MockDatabaseCaller caller;
- EntryMap model = GetSmallModel();
-
- EXPECT_CALL(*mock_db, Init(_));
- EXPECT_CALL(caller, InitCallback(_));
- db_->InitWithDatabase(
- scoped_ptr<DomDistillerDatabase::Database>(mock_db),
- base::FilePath(path),
- base::Bind(&MockDatabaseCaller::InitCallback, base::Unretained(&caller)));
-
- scoped_ptr<EntryVector> entries(new EntryVector());
- scoped_ptr<EntryVector> entries_to_remove(new EntryVector());
- for (EntryMap::iterator it = model.begin(); it != model.end(); ++it) {
- entries_to_remove->push_back(it->second);
- }
-
- EXPECT_CALL(*mock_db, Save(_, _)).WillOnce(VerifyRemoveEntries(model));
- EXPECT_CALL(caller, SaveCallback(true));
- db_->UpdateEntries(
- entries.Pass(),
- entries_to_remove.Pass(),
- base::Bind(&MockDatabaseCaller::SaveCallback, base::Unretained(&caller)));
-
- base::RunLoop().RunUntilIdle();
-}
-
-TEST_F(DomDistillerDatabaseTest, TestDBRemoveFailure) {
- base::FilePath path(FILE_PATH_LITERAL("/fake/path"));
-
- MockDB* mock_db = new MockDB();
- MockDatabaseCaller caller;
- scoped_ptr<EntryVector> entries(new EntryVector());
- scoped_ptr<EntryVector> entries_to_remove(new EntryVector());
-
- EXPECT_CALL(*mock_db, Init(_));
- EXPECT_CALL(caller, InitCallback(_));
- db_->InitWithDatabase(
- scoped_ptr<DomDistillerDatabase::Database>(mock_db),
- base::FilePath(path),
- base::Bind(&MockDatabaseCaller::InitCallback, base::Unretained(&caller)));
-
- EXPECT_CALL(*mock_db, Save(_, _)).WillOnce(Return(false));
- EXPECT_CALL(caller, SaveCallback(false));
- db_->UpdateEntries(
- entries.Pass(),
- entries_to_remove.Pass(),
- base::Bind(&MockDatabaseCaller::SaveCallback, base::Unretained(&caller)));
-
- base::RunLoop().RunUntilIdle();
-}
-
-
-// This tests that normal usage of the real database does not cause any
-// threading violations.
-TEST(DomDistillerDatabaseThreadingTest, TestDBDestruction) {
- base::MessageLoop main_loop;
-
- ScopedTempDir temp_dir;
- ASSERT_TRUE(temp_dir.CreateUniqueTempDir());
-
- base::Thread db_thread("dbthread");
- ASSERT_TRUE(db_thread.Start());
-
- scoped_ptr<DomDistillerDatabase> db(
- new DomDistillerDatabase(db_thread.message_loop_proxy()));
-
- MockDatabaseCaller caller;
- EXPECT_CALL(caller, InitCallback(_));
- db->Init(
- temp_dir.path(),
- base::Bind(&MockDatabaseCaller::InitCallback, base::Unretained(&caller)));
-
- db.reset();
-
- base::RunLoop run_loop;
- db_thread.message_loop_proxy()->PostTaskAndReply(
- FROM_HERE, base::Bind(base::DoNothing), run_loop.QuitClosure());
- run_loop.Run();
-}
-
-// Test that the LevelDB properly saves entries and that load returns the saved
-// entries. If |close_after_save| is true, the database will be closed after
-// saving and then re-opened to ensure that the data is properly persisted.
-void TestLevelDBSaveAndLoad(bool close_after_save) {
- ScopedTempDir temp_dir;
- ASSERT_TRUE(temp_dir.CreateUniqueTempDir());
-
- EntryMap model = GetSmallModel();
- EntryVector save_entries;
- EntryVector load_entries;
- EntryVector remove_entries;
-
- for (EntryMap::iterator it = model.begin(); it != model.end(); ++it) {
- save_entries.push_back(it->second);
- }
-
- scoped_ptr<DomDistillerDatabase::LevelDB> db(
- new DomDistillerDatabase::LevelDB());
- EXPECT_TRUE(db->Init(temp_dir.path()));
- EXPECT_TRUE(db->Save(save_entries, remove_entries));
-
- if (close_after_save) {
- db.reset(new DomDistillerDatabase::LevelDB());
- EXPECT_TRUE(db->Init(temp_dir.path()));
- }
-
- EXPECT_TRUE(db->Load(&load_entries));
-
- ExpectEntryPointersEquals(model, load_entries);
-}
-
-TEST(DomDistillerDatabaseLevelDBTest, TestDBSaveAndLoad) {
- TestLevelDBSaveAndLoad(false);
-}
-
-TEST(DomDistillerDatabaseLevelDBTest, TestDBCloseAndReopen) {
- TestLevelDBSaveAndLoad(true);
-}
-
-} // namespace dom_distiller