Commit 56850d01 authored by tzik@chromium.org's avatar tzik@chromium.org

[SyncFS] Simplify MetadataDatabaseTest

BUG=240165

Review URL: https://chromiumcodereview.appspot.com/23173004

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@217796 0039d316-1c4b-4281-b951-d872f2087c98
parent aeac52c2
...@@ -26,6 +26,14 @@ const int64 kInitialChangeID = 1234; ...@@ -26,6 +26,14 @@ const int64 kInitialChangeID = 1234;
const int64 kSyncRootTrackerID = 100; const int64 kSyncRootTrackerID = 100;
const char kSyncRootFolderID[] = "sync_root_folder_id"; const char kSyncRootFolderID[] = "sync_root_folder_id";
struct TrackedFile {
FileMetadata metadata;
FileTracker tracker;
bool should_be_absent;
TrackedFile() : should_be_absent(false) {}
};
void ExpectEquivalent(const ServiceMetadata* left, void ExpectEquivalent(const ServiceMetadata* left,
const ServiceMetadata* right) { const ServiceMetadata* right) {
if (!left) { if (!left) {
...@@ -209,6 +217,38 @@ class MetadataDatabaseTest : public testing::Test { ...@@ -209,6 +217,38 @@ class MetadataDatabaseTest : public testing::Test {
message_loop_.RunUntilIdle(); message_loop_.RunUntilIdle();
} }
void SetUpDatabaseByTrackedFiles(const TrackedFile** tracked_files,
int size) {
scoped_ptr<leveldb::DB> db = InitializeLevelDB();
ASSERT_TRUE(db);
for (int i = 0; i < size; ++i) {
const TrackedFile* file = tracked_files[i];
if (file->should_be_absent)
continue;
EXPECT_TRUE(PutFileToDB(db.get(), file->metadata).ok());
EXPECT_TRUE(PutTrackerToDB(db.get(), file->tracker).ok());
}
}
void VerifyTrackedFile(const TrackedFile& file) {
if (!file.should_be_absent) {
VerifyFile(file.metadata);
VerifyTracker(file.tracker);
return;
}
EXPECT_FALSE(metadata_database()->FindFileByFileID(
file.metadata.file_id(), NULL));
EXPECT_FALSE(metadata_database()->FindTrackerByTrackerID(
file.tracker.tracker_id(), NULL));
}
void VerifyTrackedFiles(const TrackedFile** tracked_files, int size) {
for (int i = 0; i < size; ++i)
VerifyTrackedFile(*tracked_files[i]);
}
MetadataDatabase* metadata_database() { return metadata_database_.get(); } MetadataDatabase* metadata_database() { return metadata_database_.get(); }
leveldb::DB* db() { leveldb::DB* db() {
...@@ -302,6 +342,29 @@ class MetadataDatabaseTest : public testing::Test { ...@@ -302,6 +342,29 @@ class MetadataDatabaseTest : public testing::Test {
return tracker; return tracker;
} }
TrackedFile CreateTrackedSyncRoot() {
TrackedFile sync_root;
sync_root.metadata = CreateSyncRootMetadata();
sync_root.tracker = CreateSyncRootTracker(sync_root.metadata);
return sync_root;
}
TrackedFile CreateTrackedFile(const TrackedFile& parent,
const std::string& title) {
TrackedFile file;
file.metadata = CreateFileMetadata(parent.metadata, title);
file.tracker = CreateTracker(parent.tracker, file.metadata);
return file;
}
TrackedFile CreateTrackedFolder(const TrackedFile& parent,
const std::string& title) {
TrackedFile folder;
folder.metadata = CreateFolderMetadata(parent.metadata, title);
folder.tracker = CreateTracker(parent.tracker, folder.metadata);
return folder;
}
scoped_ptr<google_apis::ChangeResource> CreateChangeResourceFromMetadata( scoped_ptr<google_apis::ChangeResource> CreateChangeResourceFromMetadata(
const FileMetadata& file) { const FileMetadata& file) {
scoped_ptr<google_apis::ChangeResource> change( scoped_ptr<google_apis::ChangeResource> change(
...@@ -518,153 +581,81 @@ TEST_F(MetadataDatabaseTest, InitializationTest_Empty) { ...@@ -518,153 +581,81 @@ TEST_F(MetadataDatabaseTest, InitializationTest_Empty) {
} }
TEST_F(MetadataDatabaseTest, InitializationTest_SimpleTree) { TEST_F(MetadataDatabaseTest, InitializationTest_SimpleTree) {
FileMetadata sync_root(CreateSyncRootMetadata()); TrackedFile sync_root(CreateTrackedSyncRoot());
FileTracker sync_root_tracker(CreateSyncRootTracker(sync_root)); TrackedFile app_root(CreateTrackedFolder(sync_root, "app_id"));
app_root.tracker.set_app_id(app_root.metadata.details().title());
FileMetadata app_root( app_root.tracker.set_tracker_kind(TRACKER_KIND_APP_ROOT);
CreateFolderMetadata(sync_root, "app_id" /* title */));
FileTracker app_root_tracker( TrackedFile file(CreateTrackedFile(app_root, "file"));
CreateTracker(sync_root_tracker, app_root)); TrackedFile folder(CreateTrackedFolder(app_root, "folder"));
app_root_tracker.set_app_id(app_root.details().title()); TrackedFile file_in_folder(CreateTrackedFile(folder, "file_in_folder"));
app_root_tracker.set_tracker_kind(TRACKER_KIND_APP_ROOT); TrackedFile orphaned_file(CreateTrackedFile(sync_root, "orphaned_file"));
orphaned_file.metadata.mutable_details()->clear_parent_folder_ids();
FileMetadata file(CreateFileMetadata(app_root, "file")); orphaned_file.tracker.set_parent_tracker_id(0);
FileTracker file_tracker(CreateTracker(app_root_tracker, file));
const TrackedFile* tracked_files[] = {
FileMetadata folder(CreateFolderMetadata(app_root, "folder")); &sync_root, &app_root, &file, &folder, &file_in_folder, &orphaned_file
FileTracker folder_tracker(CreateTracker(app_root_tracker, folder)); };
FileMetadata file_in_folder( SetUpDatabaseByTrackedFiles(tracked_files, arraysize(tracked_files));
CreateFileMetadata(folder, "file_in_folder"));
FileTracker file_in_folder_tracker(
CreateTracker(folder_tracker, file_in_folder));
FileMetadata orphaned_file(
CreateFileMetadata(sync_root, "orphaned_file"));
orphaned_file.mutable_details()->clear_parent_folder_ids();
FileTracker orphaned_file_tracker(
CreateTracker(sync_root_tracker, orphaned_file));
orphaned_file_tracker.set_parent_tracker_id(0);
{
scoped_ptr<leveldb::DB> db = InitializeLevelDB();
ASSERT_TRUE(db);
EXPECT_TRUE(PutFileToDB(db.get(), sync_root).ok());
EXPECT_TRUE(PutTrackerToDB(db.get(), sync_root_tracker).ok());
EXPECT_TRUE(PutFileToDB(db.get(), app_root).ok());
EXPECT_TRUE(PutTrackerToDB(db.get(), app_root_tracker).ok());
EXPECT_TRUE(PutFileToDB(db.get(), file).ok());
EXPECT_TRUE(PutTrackerToDB(db.get(), file_tracker).ok());
EXPECT_TRUE(PutFileToDB(db.get(), folder).ok());
EXPECT_TRUE(PutTrackerToDB(db.get(), folder_tracker).ok());
EXPECT_TRUE(PutFileToDB(db.get(), file_in_folder).ok());
EXPECT_TRUE(PutTrackerToDB(db.get(), file_in_folder_tracker).ok());
EXPECT_TRUE(PutFileToDB(db.get(), orphaned_file).ok());
EXPECT_TRUE(PutTrackerToDB(db.get(), orphaned_file_tracker).ok());
}
EXPECT_EQ(SYNC_STATUS_OK, InitializeMetadataDatabase()); EXPECT_EQ(SYNC_STATUS_OK, InitializeMetadataDatabase());
VerifyFile(sync_root); orphaned_file.should_be_absent = true;
VerifyTracker(sync_root_tracker); VerifyTrackedFiles(tracked_files, arraysize(tracked_files));
VerifyFile(app_root);
VerifyTracker(app_root_tracker);
VerifyFile(file);
VerifyTracker(file_tracker);
VerifyFile(folder);
VerifyTracker(folder_tracker);
VerifyFile(file_in_folder);
VerifyTracker(file_in_folder_tracker);
EXPECT_FALSE(metadata_database()->FindFileByFileID(
orphaned_file.file_id(), NULL));
EXPECT_FALSE(metadata_database()->FindTrackerByTrackerID(
orphaned_file_tracker.tracker_id(), NULL));
} }
TEST_F(MetadataDatabaseTest, AppManagementTest) { TEST_F(MetadataDatabaseTest, AppManagementTest) {
FileMetadata sync_root(CreateSyncRootMetadata()); TrackedFile sync_root(CreateTrackedSyncRoot());
FileTracker sync_root_tracker(CreateSyncRootTracker(sync_root)); TrackedFile app_root(CreateTrackedFolder(sync_root, "app_id"));
app_root.tracker.set_app_id(app_root.metadata.details().title());
FileMetadata app_root(CreateFolderMetadata(sync_root, "app_id")); app_root.tracker.set_tracker_kind(TRACKER_KIND_APP_ROOT);
FileTracker app_root_tracker(
CreateTracker(sync_root_tracker, app_root)); TrackedFile file(CreateTrackedFile(app_root, "file"));
app_root_tracker.set_app_id(app_root.details().title()); TrackedFile folder(CreateTrackedFolder(sync_root, "folder"));
app_root_tracker.set_tracker_kind(TRACKER_KIND_APP_ROOT); folder.tracker.set_active(false);
FileMetadata file(CreateFileMetadata(app_root, "file")); const TrackedFile* tracked_files[] = {
FileTracker file_tracker(CreateTracker(app_root_tracker, file)); &sync_root, &app_root, &file, &folder,
};
FileMetadata folder(CreateFolderMetadata(sync_root, "folder")); SetUpDatabaseByTrackedFiles(tracked_files, arraysize(tracked_files));
FileTracker folder_tracker(CreateTracker(sync_root_tracker, folder));
folder_tracker.set_active(false);
{
scoped_ptr<leveldb::DB> db = InitializeLevelDB();
ASSERT_TRUE(db);
EXPECT_TRUE(PutFileToDB(db.get(), sync_root).ok());
EXPECT_TRUE(PutTrackerToDB(db.get(), sync_root_tracker).ok());
EXPECT_TRUE(PutFileToDB(db.get(), app_root).ok());
EXPECT_TRUE(PutTrackerToDB(db.get(), app_root_tracker).ok());
EXPECT_TRUE(PutFileToDB(db.get(), file).ok());
EXPECT_TRUE(PutTrackerToDB(db.get(), file_tracker).ok());
EXPECT_TRUE(PutFileToDB(db.get(), folder).ok());
EXPECT_TRUE(PutTrackerToDB(db.get(), folder_tracker).ok());
}
EXPECT_EQ(SYNC_STATUS_OK, InitializeMetadataDatabase()); EXPECT_EQ(SYNC_STATUS_OK, InitializeMetadataDatabase());
VerifyFile(sync_root); VerifyTrackedFiles(tracked_files, arraysize(tracked_files));
VerifyTracker(sync_root_tracker);
VerifyFile(app_root); folder.tracker.set_app_id("foo");
VerifyTracker(app_root_tracker);
VerifyFile(file);
VerifyTracker(file_tracker);
VerifyFile(folder);
VerifyTracker(folder_tracker);
folder_tracker.set_app_id("foo");
EXPECT_EQ(SYNC_STATUS_OK, RegisterApp( EXPECT_EQ(SYNC_STATUS_OK, RegisterApp(
folder_tracker.app_id(), folder.file_id())); folder.tracker.app_id(), folder.metadata.file_id()));
folder_tracker.set_tracker_kind(TRACKER_KIND_APP_ROOT); folder.tracker.set_tracker_kind(TRACKER_KIND_APP_ROOT);
folder_tracker.set_active(true); folder.tracker.set_active(true);
folder_tracker.set_dirty(true); folder.tracker.set_dirty(true);
folder_tracker.set_needs_folder_listing(true); folder.tracker.set_needs_folder_listing(true);
VerifyFile(folder); VerifyTrackedFile(folder);
VerifyTracker(folder_tracker);
VerifyReloadConsistency(); VerifyReloadConsistency();
EXPECT_EQ(SYNC_STATUS_OK, DisableApp(folder_tracker.app_id())); EXPECT_EQ(SYNC_STATUS_OK, DisableApp(folder.tracker.app_id()));
folder_tracker.set_tracker_kind(TRACKER_KIND_DISABLED_APP_ROOT); folder.tracker.set_tracker_kind(TRACKER_KIND_DISABLED_APP_ROOT);
VerifyFile(folder); VerifyTrackedFile(folder);
VerifyTracker(folder_tracker);
VerifyReloadConsistency(); VerifyReloadConsistency();
EXPECT_EQ(SYNC_STATUS_OK, EnableApp(folder_tracker.app_id())); EXPECT_EQ(SYNC_STATUS_OK, EnableApp(folder.tracker.app_id()));
folder_tracker.set_tracker_kind(TRACKER_KIND_APP_ROOT); folder.tracker.set_tracker_kind(TRACKER_KIND_APP_ROOT);
VerifyFile(folder); VerifyTrackedFile(folder);
VerifyTracker(folder_tracker);
VerifyReloadConsistency(); VerifyReloadConsistency();
EXPECT_EQ(SYNC_STATUS_OK, UnregisterApp(folder_tracker.app_id())); EXPECT_EQ(SYNC_STATUS_OK, UnregisterApp(folder.tracker.app_id()));
folder_tracker.set_app_id(std::string()); folder.tracker.set_app_id(std::string());
folder_tracker.set_tracker_kind(TRACKER_KIND_REGULAR); folder.tracker.set_tracker_kind(TRACKER_KIND_REGULAR);
folder_tracker.set_active(false); folder.tracker.set_active(false);
VerifyFile(folder); VerifyTrackedFile(folder);
VerifyTracker(folder_tracker);
VerifyReloadConsistency(); VerifyReloadConsistency();
EXPECT_EQ(SYNC_STATUS_OK, UnregisterApp(app_root_tracker.app_id())); EXPECT_EQ(SYNC_STATUS_OK, UnregisterApp(app_root.tracker.app_id()));
app_root_tracker.set_app_id(std::string()); app_root.tracker.set_app_id(std::string());
app_root_tracker.set_tracker_kind(TRACKER_KIND_REGULAR); app_root.tracker.set_tracker_kind(TRACKER_KIND_REGULAR);
app_root_tracker.set_active(false); app_root.tracker.set_active(false);
app_root_tracker.set_dirty(true); app_root.tracker.set_dirty(true);
VerifyFile(app_root); file.should_be_absent = true;
VerifyTracker(app_root_tracker); VerifyTrackedFile(app_root);
EXPECT_FALSE(metadata_database()->FindFileByFileID(file.file_id(), NULL)); VerifyTrackedFile(file);
EXPECT_FALSE(metadata_database()->FindTrackerByTrackerID(
file_tracker.tracker_id(), NULL));
VerifyReloadConsistency(); VerifyReloadConsistency();
} }
...@@ -718,116 +709,61 @@ TEST_F(MetadataDatabaseTest, BuildPathTest) { ...@@ -718,116 +709,61 @@ TEST_F(MetadataDatabaseTest, BuildPathTest) {
} }
TEST_F(MetadataDatabaseTest, UpdateByChangeListTest) { TEST_F(MetadataDatabaseTest, UpdateByChangeListTest) {
FileMetadata sync_root(CreateSyncRootMetadata()); TrackedFile sync_root(CreateTrackedSyncRoot());
FileTracker sync_root_tracker(CreateSyncRootTracker(sync_root)); TrackedFile app_root(CreateTrackedFolder(sync_root, "app_id"));
TrackedFile disabled_app_root(CreateTrackedFolder(sync_root, "disabled_app"));
FileMetadata app_root(CreateFolderMetadata(sync_root, "app_id")); TrackedFile file(CreateTrackedFile(app_root, "file"));
FileTracker app_root_tracker( TrackedFile renamed_file(CreateTrackedFile(app_root, "to be renamed"));
CreateTracker(sync_root_tracker, app_root)); TrackedFile folder(CreateTrackedFolder(app_root, "folder"));
TrackedFile reorganized_file(
FileMetadata disabled_app_root( CreateTrackedFile(app_root, "to be reorganized"));
CreateFolderMetadata(sync_root, "disabled_app")); TrackedFile updated_file(
FileTracker disabled_app_root_tracker( CreateTrackedFile(app_root, "to be updated"));
CreateTracker(sync_root_tracker, disabled_app_root)); TrackedFile noop_file(CreateTrackedFile(app_root, "has noop change"));
TrackedFile new_file(CreateTrackedFile(app_root, "to be added later"));
FileMetadata file(CreateFileMetadata(app_root, "file")); new_file.should_be_absent = true;
FileTracker file_tracker(CreateTracker(app_root_tracker, file));
const TrackedFile* tracked_files[] = {
FileMetadata renamed_file(CreateFileMetadata(app_root, "to be renamed")); &sync_root, &app_root, &disabled_app_root,
FileTracker renamed_file_tracker( &file, &renamed_file, &folder, &reorganized_file, &updated_file, &noop_file,
CreateTracker(app_root_tracker, renamed_file)); &new_file,
};
FileMetadata folder(CreateFolderMetadata(app_root, "folder"));
FileTracker folder_tracker(CreateTracker(app_root_tracker, folder)); SetUpDatabaseByTrackedFiles(tracked_files, arraysize(tracked_files));
FileMetadata reorganized_file(
CreateFileMetadata(app_root, "to be reorganized"));
FileTracker reorganized_file_tracker(
CreateTracker(app_root_tracker, reorganized_file));
FileMetadata updated_file(CreateFileMetadata(app_root, "to be updated"));
FileTracker updated_file_tracker(
CreateTracker(app_root_tracker, updated_file));
FileMetadata noop_file(CreateFileMetadata(app_root, "have noop change"));
FileTracker noop_file_tracker(
CreateTracker(app_root_tracker, noop_file));
FileMetadata new_file(CreateFileMetadata(app_root, "to be added later"));
{
scoped_ptr<leveldb::DB> db = InitializeLevelDB();
ASSERT_TRUE(db);
EXPECT_TRUE(PutFileToDB(db.get(), sync_root).ok());
EXPECT_TRUE(PutTrackerToDB(db.get(), sync_root_tracker).ok());
EXPECT_TRUE(PutFileToDB(db.get(), app_root).ok());
EXPECT_TRUE(PutTrackerToDB(db.get(), app_root_tracker).ok());
EXPECT_TRUE(PutFileToDB(db.get(), disabled_app_root).ok());
EXPECT_TRUE(PutTrackerToDB(db.get(), disabled_app_root_tracker).ok());
EXPECT_TRUE(PutFileToDB(db.get(), file).ok());
EXPECT_TRUE(PutTrackerToDB(db.get(), file_tracker).ok());
EXPECT_TRUE(PutFileToDB(db.get(), renamed_file).ok());
EXPECT_TRUE(PutTrackerToDB(db.get(), renamed_file_tracker).ok());
EXPECT_TRUE(PutFileToDB(db.get(), folder).ok());
EXPECT_TRUE(PutTrackerToDB(db.get(), folder_tracker).ok());
EXPECT_TRUE(PutFileToDB(db.get(), reorganized_file).ok());
EXPECT_TRUE(PutTrackerToDB(db.get(), reorganized_file_tracker).ok());
EXPECT_TRUE(PutFileToDB(db.get(), updated_file).ok());
EXPECT_TRUE(PutTrackerToDB(db.get(), updated_file_tracker).ok());
EXPECT_TRUE(PutFileToDB(db.get(), noop_file).ok());
EXPECT_TRUE(PutTrackerToDB(db.get(), noop_file_tracker).ok());
}
EXPECT_EQ(SYNC_STATUS_OK, InitializeMetadataDatabase()); EXPECT_EQ(SYNC_STATUS_OK, InitializeMetadataDatabase());
ApplyRenameChangeToMetadata("renamed", &renamed_file); ApplyRenameChangeToMetadata("renamed", &renamed_file.metadata);
ApplyReorganizeChangeToMetadata(folder.file_id(), &reorganized_file); ApplyReorganizeChangeToMetadata(folder.metadata.file_id(),
ApplyContentChangeToMetadata(&updated_file); &reorganized_file.metadata);
ApplyContentChangeToMetadata(&updated_file.metadata);
ScopedVector<google_apis::ChangeResource> changes; ScopedVector<google_apis::ChangeResource> changes;
PushToChangeList(CreateChangeResourceFromMetadata(renamed_file), &changes); PushToChangeList(
PushToChangeList(CreateChangeResourceFromMetadata( CreateChangeResourceFromMetadata(renamed_file.metadata), &changes);
reorganized_file), &changes); PushToChangeList(
PushToChangeList(CreateChangeResourceFromMetadata(updated_file), &changes); CreateChangeResourceFromMetadata(reorganized_file.metadata), &changes);
PushToChangeList(CreateChangeResourceFromMetadata(noop_file), &changes); PushToChangeList(
PushToChangeList(CreateChangeResourceFromMetadata(new_file), &changes); CreateChangeResourceFromMetadata(updated_file.metadata), &changes);
PushToChangeList(
renamed_file_tracker.set_dirty(true); CreateChangeResourceFromMetadata(noop_file.metadata), &changes);
reorganized_file_tracker.set_dirty(true); PushToChangeList(
updated_file_tracker.set_dirty(true); CreateChangeResourceFromMetadata(new_file.metadata), &changes);
noop_file_tracker.set_dirty(true);
EXPECT_EQ(SYNC_STATUS_OK, UpdateByChangeList(changes.Pass())); EXPECT_EQ(SYNC_STATUS_OK, UpdateByChangeList(changes.Pass()));
FileTracker new_file_tracker(CreateTracker(app_root_tracker, new_file)); renamed_file.tracker.set_dirty(true);
new_file_tracker.set_tracker_id(GetTrackerIDByFileID(new_file.file_id())); reorganized_file.tracker.set_dirty(true);
new_file_tracker.clear_synced_details(); updated_file.tracker.set_dirty(true);
new_file_tracker.set_active(false); noop_file.tracker.set_dirty(true);
new_file_tracker.set_dirty(true); new_file.tracker.clear_synced_details();
EXPECT_NE(0, new_file_tracker.tracker_id()); new_file.tracker.set_active(false);
new_file.tracker.set_dirty(true);
VerifyFile(sync_root); new_file.tracker.set_tracker_id(
VerifyTracker(sync_root_tracker); GetTrackerIDByFileID(new_file.metadata.file_id()));
VerifyFile(app_root); EXPECT_NE(0, new_file.tracker.tracker_id());
VerifyTracker(app_root_tracker);
VerifyFile(disabled_app_root); new_file.should_be_absent = false;
VerifyTracker(disabled_app_root_tracker);
VerifyFile(file);
VerifyTracker(file_tracker);
VerifyFile(renamed_file);
VerifyTracker(renamed_file_tracker);
VerifyFile(folder);
VerifyTracker(folder_tracker);
VerifyFile(reorganized_file);
VerifyTracker(reorganized_file_tracker);
VerifyFile(updated_file);
VerifyTracker(updated_file_tracker);
VerifyFile(noop_file);
VerifyTracker(noop_file_tracker);
VerifyFile(new_file);
VerifyTracker(new_file_tracker);
VerifyTrackedFiles(tracked_files, arraysize(tracked_files));
VerifyReloadConsistency(); VerifyReloadConsistency();
} }
......
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