Commit 749e71fe authored by peria@chromium.org's avatar peria@chromium.org

[SyncFS] Ensure to pass DB in some utilities


BUG=None
TEST=./unit_tests --gtest_filter="DriveMetadata*:DriveBackend*:Metadata*"

Review URL: https://codereview.chromium.org/446893003

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@288025 0039d316-1c4b-4281-b951-d872f2087c98
parent e4738ba5
...@@ -22,14 +22,13 @@ namespace sync_file_system { ...@@ -22,14 +22,13 @@ namespace sync_file_system {
namespace drive_backend { namespace drive_backend {
void PutVersionToDB(int64 version, LevelDBWrapper* db) { void PutVersionToDB(int64 version, LevelDBWrapper* db) {
if (db) DCHECK(db);
db->Put(kDatabaseVersionKey, base::Int64ToString(version)); db->Put(kDatabaseVersionKey, base::Int64ToString(version));
} }
void PutServiceMetadataToDB(const ServiceMetadata& service_metadata, void PutServiceMetadataToDB(const ServiceMetadata& service_metadata,
LevelDBWrapper* db) { LevelDBWrapper* db) {
if (!db) DCHECK(db);
return;
std::string value; std::string value;
bool success = service_metadata.SerializeToString(&value); bool success = service_metadata.SerializeToString(&value);
...@@ -38,8 +37,7 @@ void PutServiceMetadataToDB(const ServiceMetadata& service_metadata, ...@@ -38,8 +37,7 @@ void PutServiceMetadataToDB(const ServiceMetadata& service_metadata,
} }
void PutFileMetadataToDB(const FileMetadata& file, LevelDBWrapper* db) { void PutFileMetadataToDB(const FileMetadata& file, LevelDBWrapper* db) {
if (!db) DCHECK(db);
return;
std::string value; std::string value;
bool success = file.SerializeToString(&value); bool success = file.SerializeToString(&value);
...@@ -48,8 +46,7 @@ void PutFileMetadataToDB(const FileMetadata& file, LevelDBWrapper* db) { ...@@ -48,8 +46,7 @@ void PutFileMetadataToDB(const FileMetadata& file, LevelDBWrapper* db) {
} }
void PutFileTrackerToDB(const FileTracker& tracker, LevelDBWrapper* db) { void PutFileTrackerToDB(const FileTracker& tracker, LevelDBWrapper* db) {
if (!db) DCHECK(db);
return;
std::string value; std::string value;
bool success = tracker.SerializeToString(&value); bool success = tracker.SerializeToString(&value);
...@@ -60,12 +57,12 @@ void PutFileTrackerToDB(const FileTracker& tracker, LevelDBWrapper* db) { ...@@ -60,12 +57,12 @@ void PutFileTrackerToDB(const FileTracker& tracker, LevelDBWrapper* db) {
void PutFileMetadataDeletionToDB(const std::string& file_id, void PutFileMetadataDeletionToDB(const std::string& file_id,
LevelDBWrapper* db) { LevelDBWrapper* db) {
if (db) DCHECK(db);
db->Delete(kFileMetadataKeyPrefix + file_id); db->Delete(kFileMetadataKeyPrefix + file_id);
} }
void PutFileTrackerDeletionToDB(int64 tracker_id, LevelDBWrapper* db) { void PutFileTrackerDeletionToDB(int64 tracker_id, LevelDBWrapper* db) {
if (db) DCHECK(db);
db->Delete(kFileTrackerKeyPrefix + base::Int64ToString(tracker_id)); db->Delete(kFileTrackerKeyPrefix + base::Int64ToString(tracker_id));
} }
......
...@@ -219,8 +219,9 @@ MetadataDatabaseIndex::Create(LevelDBWrapper* db) { ...@@ -219,8 +219,9 @@ MetadataDatabaseIndex::Create(LevelDBWrapper* db) {
// static // static
scoped_ptr<MetadataDatabaseIndex> scoped_ptr<MetadataDatabaseIndex>
MetadataDatabaseIndex::CreateForTesting(DatabaseContents* contents) { MetadataDatabaseIndex::CreateForTesting(DatabaseContents* contents,
scoped_ptr<MetadataDatabaseIndex> index(new MetadataDatabaseIndex(NULL)); LevelDBWrapper* db) {
scoped_ptr<MetadataDatabaseIndex> index(new MetadataDatabaseIndex(db));
index->Initialize(make_scoped_ptr(new ServiceMetadata), contents); index->Initialize(make_scoped_ptr(new ServiceMetadata), contents);
return index.Pass(); return index.Pass();
} }
......
...@@ -62,7 +62,7 @@ class MetadataDatabaseIndex : public MetadataDatabaseIndexInterface { ...@@ -62,7 +62,7 @@ class MetadataDatabaseIndex : public MetadataDatabaseIndexInterface {
static scoped_ptr<MetadataDatabaseIndex> Create(LevelDBWrapper* db); static scoped_ptr<MetadataDatabaseIndex> Create(LevelDBWrapper* db);
static scoped_ptr<MetadataDatabaseIndex> CreateForTesting( static scoped_ptr<MetadataDatabaseIndex> CreateForTesting(
DatabaseContents* contents); DatabaseContents* contents, LevelDBWrapper* db);
// MetadataDatabaseIndexInterface overrides. // MetadataDatabaseIndexInterface overrides.
virtual bool GetFileMetadata( virtual bool GetFileMetadata(
......
...@@ -6,9 +6,13 @@ ...@@ -6,9 +6,13 @@
#include "chrome/browser/sync_file_system/drive_backend/drive_backend_constants.h" #include "chrome/browser/sync_file_system/drive_backend/drive_backend_constants.h"
#include "chrome/browser/sync_file_system/drive_backend/drive_backend_test_util.h" #include "chrome/browser/sync_file_system/drive_backend/drive_backend_test_util.h"
#include "chrome/browser/sync_file_system/drive_backend/leveldb_wrapper.h"
#include "chrome/browser/sync_file_system/drive_backend/metadata_database.h" #include "chrome/browser/sync_file_system/drive_backend/metadata_database.h"
#include "chrome/browser/sync_file_system/drive_backend/metadata_database.pb.h" #include "chrome/browser/sync_file_system/drive_backend/metadata_database.pb.h"
#include "testing/gtest/include/gtest/gtest.h" #include "testing/gtest/include/gtest/gtest.h"
#include "third_party/leveldatabase/src/helpers/memenv/memenv.h"
#include "third_party/leveldatabase/src/include/leveldb/db.h"
#include "third_party/leveldatabase/src/include/leveldb/env.h"
namespace sync_file_system { namespace sync_file_system {
namespace drive_backend { namespace drive_backend {
...@@ -60,78 +64,99 @@ scoped_ptr<DatabaseContents> CreateTestDatabaseContents() { ...@@ -60,78 +64,99 @@ scoped_ptr<DatabaseContents> CreateTestDatabaseContents() {
} // namespace } // namespace
TEST(MetadataDatabaseIndexTest, GetEntryTest) { class MetadataDatabaseIndexTest : public testing::Test {
scoped_ptr<MetadataDatabaseIndex> index = public:
MetadataDatabaseIndex::CreateForTesting( virtual void SetUp() OVERRIDE {
CreateTestDatabaseContents().get()); in_memory_env_.reset(leveldb::NewMemEnv(leveldb::Env::Default()));
InitializeLevelDB();
contents_ = CreateTestDatabaseContents();
index_ = MetadataDatabaseIndex::CreateForTesting(contents_.get(),
db_.get());
}
MetadataDatabaseIndex* index() { return index_.get(); }
private:
void InitializeLevelDB() {
leveldb::DB* db = NULL;
leveldb::Options options;
options.create_if_missing = true;
options.max_open_files = 0; // Use minimum.
options.env = in_memory_env_.get();
leveldb::Status status = leveldb::DB::Open(options, "", &db);
ASSERT_TRUE(status.ok());
db_.reset(new LevelDBWrapper(make_scoped_ptr(db)));
}
scoped_ptr<DatabaseContents> contents_;
scoped_ptr<MetadataDatabaseIndex> index_;
scoped_ptr<leveldb::Env> in_memory_env_;
scoped_ptr<LevelDBWrapper> db_;
};
TEST_F(MetadataDatabaseIndexTest, GetEntryTest) {
FileTracker tracker; FileTracker tracker;
EXPECT_FALSE(index->GetFileTracker(kInvalidTrackerID, NULL)); EXPECT_FALSE(index()->GetFileTracker(kInvalidTrackerID, NULL));
ASSERT_TRUE(index->GetFileTracker(kFileTrackerID, &tracker)); ASSERT_TRUE(index()->GetFileTracker(kFileTrackerID, &tracker));
EXPECT_EQ(kFileTrackerID, tracker.tracker_id()); EXPECT_EQ(kFileTrackerID, tracker.tracker_id());
EXPECT_EQ("file_id", tracker.file_id()); EXPECT_EQ("file_id", tracker.file_id());
FileMetadata metadata; FileMetadata metadata;
EXPECT_FALSE(index->GetFileMetadata(std::string(), NULL)); EXPECT_FALSE(index()->GetFileMetadata(std::string(), NULL));
ASSERT_TRUE(index->GetFileMetadata("file_id", &metadata)); ASSERT_TRUE(index()->GetFileMetadata("file_id", &metadata));
EXPECT_EQ("file_id", metadata.file_id()); EXPECT_EQ("file_id", metadata.file_id());
} }
TEST(MetadataDatabaseIndexTest, IndexLookUpTest) { TEST_F(MetadataDatabaseIndexTest, IndexLookUpTest) {
scoped_ptr<MetadataDatabaseIndex> index = TrackerIDSet trackers = index()->GetFileTrackerIDsByFileID("file_id");
MetadataDatabaseIndex::CreateForTesting(
CreateTestDatabaseContents().get());
TrackerIDSet trackers = index->GetFileTrackerIDsByFileID("file_id");
EXPECT_EQ(1u, trackers.size()); EXPECT_EQ(1u, trackers.size());
EXPECT_TRUE(trackers.has_active()); EXPECT_TRUE(trackers.has_active());
EXPECT_EQ(kFileTrackerID, trackers.active_tracker()); EXPECT_EQ(kFileTrackerID, trackers.active_tracker());
int64 app_root_tracker_id = index->GetAppRootTracker("app_id"); int64 app_root_tracker_id = index()->GetAppRootTracker("app_id");
EXPECT_EQ(kAppRootTrackerID, app_root_tracker_id); EXPECT_EQ(kAppRootTrackerID, app_root_tracker_id);
trackers = index->GetFileTrackerIDsByParentAndTitle( trackers = index()->GetFileTrackerIDsByParentAndTitle(
app_root_tracker_id, "file"); app_root_tracker_id, "file");
EXPECT_EQ(1u, trackers.size()); EXPECT_EQ(1u, trackers.size());
EXPECT_TRUE(trackers.has_active()); EXPECT_TRUE(trackers.has_active());
EXPECT_EQ(kFileTrackerID, trackers.active_tracker()); EXPECT_EQ(kFileTrackerID, trackers.active_tracker());
EXPECT_TRUE(index->PickMultiTrackerFileID().empty()); EXPECT_TRUE(index()->PickMultiTrackerFileID().empty());
EXPECT_EQ(kInvalidTrackerID, EXPECT_EQ(kInvalidTrackerID,
index->PickMultiBackingFilePath().parent_id); index()->PickMultiBackingFilePath().parent_id);
EXPECT_EQ(kPlaceholderTrackerID, index->PickDirtyTracker()); EXPECT_EQ(kPlaceholderTrackerID, index()->PickDirtyTracker());
} }
TEST(MetadataDatabaseIndexTest, UpdateTest) { TEST_F(MetadataDatabaseIndexTest, UpdateTest) {
scoped_ptr<MetadataDatabaseIndex> index = index()->DemoteDirtyTracker(kPlaceholderTrackerID);
MetadataDatabaseIndex::CreateForTesting( EXPECT_EQ(kInvalidTrackerID, index()->PickDirtyTracker());
CreateTestDatabaseContents().get()); index()->PromoteDemotedDirtyTrackers();
EXPECT_EQ(kPlaceholderTrackerID, index()->PickDirtyTracker());
index->DemoteDirtyTracker(kPlaceholderTrackerID);
EXPECT_EQ(kInvalidTrackerID, index->PickDirtyTracker());
index->PromoteDemotedDirtyTrackers();
EXPECT_EQ(kPlaceholderTrackerID, index->PickDirtyTracker());
FileMetadata metadata; FileMetadata metadata;
ASSERT_TRUE(index->GetFileMetadata("file_id", &metadata)); ASSERT_TRUE(index()->GetFileMetadata("file_id", &metadata));
FileTracker app_root_tracker; FileTracker app_root_tracker;
ASSERT_TRUE(index->GetFileTracker(kAppRootTrackerID, &app_root_tracker)); ASSERT_TRUE(index()->GetFileTracker(kAppRootTrackerID, &app_root_tracker));
int64 new_tracker_id = 100; int64 new_tracker_id = 100;
scoped_ptr<FileTracker> new_tracker = scoped_ptr<FileTracker> new_tracker =
test_util::CreateTracker(metadata, new_tracker_id, &app_root_tracker); test_util::CreateTracker(metadata, new_tracker_id, &app_root_tracker);
new_tracker->set_active(false); new_tracker->set_active(false);
index->StoreFileTracker(new_tracker.Pass()); index()->StoreFileTracker(new_tracker.Pass());
EXPECT_EQ("file_id", index->PickMultiTrackerFileID()); EXPECT_EQ("file_id", index()->PickMultiTrackerFileID());
EXPECT_EQ(ParentIDAndTitle(kAppRootTrackerID, std::string("file")), EXPECT_EQ(ParentIDAndTitle(kAppRootTrackerID, std::string("file")),
index->PickMultiBackingFilePath()); index()->PickMultiBackingFilePath());
index->RemoveFileMetadata("file_id"); index()->RemoveFileMetadata("file_id");
index->RemoveFileTracker(kFileTrackerID); index()->RemoveFileTracker(kFileTrackerID);
EXPECT_FALSE(index->GetFileMetadata("file_id", NULL)); EXPECT_FALSE(index()->GetFileMetadata("file_id", NULL));
EXPECT_FALSE(index->GetFileTracker(kFileTrackerID, NULL)); EXPECT_FALSE(index()->GetFileTracker(kFileTrackerID, NULL));
} }
} // namespace drive_backend } // namespace drive_backend
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment