Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/sync_file_system/drive_backend/metadata_database.h" | 5 #include "chrome/browser/sync_file_system/drive_backend/metadata_database.h" |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/files/scoped_temp_dir.h" | 8 #include "base/files/scoped_temp_dir.h" |
| 9 #include "base/message_loop/message_loop.h" | 9 #include "base/message_loop/message_loop.h" |
| 10 #include "base/message_loop/message_loop_proxy.h" | 10 #include "base/message_loop/message_loop_proxy.h" |
| 11 #include "base/strings/string_number_conversions.h" | 11 #include "base/strings/string_number_conversions.h" |
| 12 #include "chrome/browser/google_apis/drive_api_parser.h" | 12 #include "chrome/browser/google_apis/drive_api_parser.h" |
| 13 #include "chrome/browser/sync_file_system/drive_backend/metadata_database.pb.h" | 13 #include "chrome/browser/sync_file_system/drive_backend/metadata_database.pb.h" |
| 14 #include "testing/gtest/include/gtest/gtest.h" | 14 #include "testing/gtest/include/gtest/gtest.h" |
| 15 #include "third_party/leveldatabase/src/include/leveldb/db.h" | 15 #include "third_party/leveldatabase/src/include/leveldb/db.h" |
| 16 #include "third_party/leveldatabase/src/include/leveldb/write_batch.h" | 16 #include "third_party/leveldatabase/src/include/leveldb/write_batch.h" |
| 17 | 17 |
| 18 #define FPL(a) FILE_PATH_LITERAL(a) | 18 #define FPL(a) FILE_PATH_LITERAL(a) |
| 19 | 19 |
| 20 namespace sync_file_system { | 20 namespace sync_file_system { |
| 21 namespace drive_backend { | 21 namespace drive_backend { |
| 22 | 22 |
| 23 namespace { | 23 namespace { |
| 24 | 24 |
| 25 const int64 kInitialChangeID = 1234; | 25 const int64 kInitialChangeID = 1234; |
| 26 const int64 kSyncRootTrackerID = 100; | 26 const int64 kSyncRootTrackerID = 100; |
| 27 const char kSyncRootFolderID[] = "sync_root_folder_id"; | 27 const char kSyncRootFolderID[] = "sync_root_folder_id"; |
| 28 | 28 |
| 29 struct TrackedFile { | |
| 30 FileMetadata metadata; | |
| 31 FileTracker tracker; | |
| 32 bool should_be_absent; | |
| 33 | |
| 34 TrackedFile() : should_be_absent(false) {} | |
| 35 }; | |
| 36 | |
| 29 void ExpectEquivalent(const ServiceMetadata* left, | 37 void ExpectEquivalent(const ServiceMetadata* left, |
| 30 const ServiceMetadata* right) { | 38 const ServiceMetadata* right) { |
| 31 if (!left) { | 39 if (!left) { |
| 32 ASSERT_FALSE(right); | 40 ASSERT_FALSE(right); |
| 33 return; | 41 return; |
| 34 } | 42 } |
| 35 ASSERT_TRUE(right); | 43 ASSERT_TRUE(right); |
| 36 | 44 |
| 37 EXPECT_EQ(left->largest_change_id(), right->largest_change_id()); | 45 EXPECT_EQ(left->largest_change_id(), right->largest_change_id()); |
| 38 EXPECT_EQ(left->sync_root_tracker_id(), right->sync_root_tracker_id()); | 46 EXPECT_EQ(left->sync_root_tracker_id(), right->sync_root_tracker_id()); |
| (...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 202 &status, &metadata_database_)); | 210 &status, &metadata_database_)); |
| 203 message_loop_.RunUntilIdle(); | 211 message_loop_.RunUntilIdle(); |
| 204 return status; | 212 return status; |
| 205 } | 213 } |
| 206 | 214 |
| 207 void DropDatabase() { | 215 void DropDatabase() { |
| 208 metadata_database_.reset(); | 216 metadata_database_.reset(); |
| 209 message_loop_.RunUntilIdle(); | 217 message_loop_.RunUntilIdle(); |
| 210 } | 218 } |
| 211 | 219 |
| 220 void SetUpDatabaseByTrackedFiles(const TrackedFile** tracked_files, | |
| 221 int size) { | |
|
kinuko
2013/08/14 14:16:56
nit: indent
tzik
2013/08/15 04:31:00
Done.
| |
| 222 scoped_ptr<leveldb::DB> db = InitializeLevelDB(); | |
| 223 ASSERT_TRUE(db); | |
| 224 | |
| 225 for (int i = 0; i < size; ++i) { | |
| 226 const TrackedFile* file = tracked_files[i]; | |
| 227 if (file->should_be_absent) | |
| 228 continue; | |
| 229 EXPECT_TRUE(PutFileToDB(db.get(), file->metadata).ok()); | |
| 230 EXPECT_TRUE(PutTrackerToDB(db.get(), file->tracker).ok()); | |
| 231 } | |
| 232 } | |
| 233 | |
| 234 void VerifyTrackedFile(const TrackedFile& file) { | |
| 235 if (!file.should_be_absent) { | |
| 236 VerifyFile(file.metadata); | |
| 237 VerifyTracker(file.tracker); | |
| 238 return; | |
| 239 } | |
| 240 | |
| 241 EXPECT_FALSE(metadata_database()->FindFileByFileID( | |
| 242 file.metadata.file_id(), NULL)); | |
| 243 EXPECT_FALSE(metadata_database()->FindTrackerByTrackerID( | |
| 244 file.tracker.tracker_id(), NULL)); | |
| 245 } | |
| 246 | |
| 247 void VerifyTrackedFiles(const TrackedFile** tracked_files, int size) { | |
| 248 for (int i = 0; i < size; ++i) | |
| 249 VerifyTrackedFile(*tracked_files[i]); | |
| 250 } | |
| 251 | |
| 212 MetadataDatabase* metadata_database() { return metadata_database_.get(); } | 252 MetadataDatabase* metadata_database() { return metadata_database_.get(); } |
| 213 | 253 |
| 214 leveldb::DB* db() { | 254 leveldb::DB* db() { |
| 215 if (!metadata_database_) | 255 if (!metadata_database_) |
| 216 return NULL; | 256 return NULL; |
| 217 return metadata_database_->db_.get(); | 257 return metadata_database_->db_.get(); |
| 218 } | 258 } |
| 219 | 259 |
| 220 scoped_ptr<leveldb::DB> InitializeLevelDB() { | 260 scoped_ptr<leveldb::DB> InitializeLevelDB() { |
| 221 leveldb::DB* db = NULL; | 261 leveldb::DB* db = NULL; |
| (...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 295 tracker.set_file_id(file.file_id()); | 335 tracker.set_file_id(file.file_id()); |
| 296 tracker.set_app_id(parent_tracker.app_id()); | 336 tracker.set_app_id(parent_tracker.app_id()); |
| 297 tracker.set_tracker_kind(TRACKER_KIND_REGULAR); | 337 tracker.set_tracker_kind(TRACKER_KIND_REGULAR); |
| 298 tracker.set_dirty(false); | 338 tracker.set_dirty(false); |
| 299 tracker.set_active(true); | 339 tracker.set_active(true); |
| 300 tracker.set_needs_folder_listing(false); | 340 tracker.set_needs_folder_listing(false); |
| 301 *tracker.mutable_synced_details() = file.details(); | 341 *tracker.mutable_synced_details() = file.details(); |
| 302 return tracker; | 342 return tracker; |
| 303 } | 343 } |
| 304 | 344 |
| 345 TrackedFile CreateTrackedSyncRoot() { | |
| 346 TrackedFile sync_root; | |
| 347 sync_root.metadata = CreateSyncRootMetadata(); | |
| 348 sync_root.tracker = CreateSyncRootTracker(sync_root.metadata); | |
| 349 return sync_root; | |
| 350 } | |
| 351 | |
| 352 TrackedFile CreateTrackedFile(const TrackedFile& parent, | |
| 353 const std::string& title) { | |
| 354 TrackedFile file; | |
| 355 file.metadata = CreateFileMetadata(parent.metadata, title); | |
| 356 file.tracker = CreateTracker(parent.tracker, file.metadata); | |
| 357 return file; | |
| 358 } | |
| 359 | |
| 360 TrackedFile CreateTrackedFolder(const TrackedFile& parent, | |
| 361 const std::string& title) { | |
| 362 TrackedFile folder; | |
| 363 folder.metadata = CreateFolderMetadata(parent.metadata, title); | |
| 364 folder.tracker = CreateTracker(parent.tracker, folder.metadata); | |
| 365 return folder; | |
| 366 } | |
| 367 | |
| 305 scoped_ptr<google_apis::ChangeResource> CreateChangeResourceFromMetadata( | 368 scoped_ptr<google_apis::ChangeResource> CreateChangeResourceFromMetadata( |
| 306 const FileMetadata& file) { | 369 const FileMetadata& file) { |
| 307 scoped_ptr<google_apis::ChangeResource> change( | 370 scoped_ptr<google_apis::ChangeResource> change( |
| 308 new google_apis::ChangeResource); | 371 new google_apis::ChangeResource); |
| 309 change->set_change_id(file.details().change_id()); | 372 change->set_change_id(file.details().change_id()); |
| 310 change->set_file_id(file.file_id()); | 373 change->set_file_id(file.file_id()); |
| 311 change->set_deleted(file.details().deleted()); | 374 change->set_deleted(file.details().deleted()); |
| 312 if (change->is_deleted()) | 375 if (change->is_deleted()) |
| 313 return change.Pass(); | 376 return change.Pass(); |
| 314 | 377 |
| (...skipping 196 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 511 DISALLOW_COPY_AND_ASSIGN(MetadataDatabaseTest); | 574 DISALLOW_COPY_AND_ASSIGN(MetadataDatabaseTest); |
| 512 }; | 575 }; |
| 513 | 576 |
| 514 TEST_F(MetadataDatabaseTest, InitializationTest_Empty) { | 577 TEST_F(MetadataDatabaseTest, InitializationTest_Empty) { |
| 515 EXPECT_EQ(SYNC_STATUS_OK, InitializeMetadataDatabase()); | 578 EXPECT_EQ(SYNC_STATUS_OK, InitializeMetadataDatabase()); |
| 516 DropDatabase(); | 579 DropDatabase(); |
| 517 EXPECT_EQ(SYNC_STATUS_OK, InitializeMetadataDatabase()); | 580 EXPECT_EQ(SYNC_STATUS_OK, InitializeMetadataDatabase()); |
| 518 } | 581 } |
| 519 | 582 |
| 520 TEST_F(MetadataDatabaseTest, InitializationTest_SimpleTree) { | 583 TEST_F(MetadataDatabaseTest, InitializationTest_SimpleTree) { |
| 521 FileMetadata sync_root(CreateSyncRootMetadata()); | 584 TrackedFile sync_root(CreateTrackedSyncRoot()); |
| 522 FileTracker sync_root_tracker(CreateSyncRootTracker(sync_root)); | 585 TrackedFile app_root(CreateTrackedFolder(sync_root, "app_id")); |
| 586 app_root.tracker.set_app_id(app_root.metadata.details().title()); | |
| 587 app_root.tracker.set_tracker_kind(TRACKER_KIND_APP_ROOT); | |
| 523 | 588 |
| 524 FileMetadata app_root( | 589 TrackedFile file(CreateTrackedFile(app_root, "file")); |
| 525 CreateFolderMetadata(sync_root, "app_id" /* title */)); | 590 TrackedFile folder(CreateTrackedFolder(app_root, "folder")); |
| 526 FileTracker app_root_tracker( | 591 TrackedFile file_in_folder(CreateTrackedFile(folder, "file_in_folder")); |
| 527 CreateTracker(sync_root_tracker, app_root)); | 592 TrackedFile orphaned_file(CreateTrackedFile(sync_root, "orphaned_file")); |
| 528 app_root_tracker.set_app_id(app_root.details().title()); | 593 orphaned_file.metadata.mutable_details()->clear_parent_folder_ids(); |
| 529 app_root_tracker.set_tracker_kind(TRACKER_KIND_APP_ROOT); | 594 orphaned_file.tracker.set_parent_tracker_id(0); |
| 530 | 595 |
| 531 FileMetadata file(CreateFileMetadata(app_root, "file")); | 596 const TrackedFile* tracked_files[] = { |
| 532 FileTracker file_tracker(CreateTracker(app_root_tracker, file)); | 597 &sync_root, &app_root, &file, &folder, &file_in_folder, &orphaned_file |
| 598 }; | |
| 533 | 599 |
| 534 FileMetadata folder(CreateFolderMetadata(app_root, "folder")); | 600 SetUpDatabaseByTrackedFiles(tracked_files, arraysize(tracked_files)); |
| 535 FileTracker folder_tracker(CreateTracker(app_root_tracker, folder)); | |
| 536 | |
| 537 FileMetadata file_in_folder( | |
| 538 CreateFileMetadata(folder, "file_in_folder")); | |
| 539 FileTracker file_in_folder_tracker( | |
| 540 CreateTracker(folder_tracker, file_in_folder)); | |
| 541 | |
| 542 FileMetadata orphaned_file( | |
| 543 CreateFileMetadata(sync_root, "orphaned_file")); | |
| 544 orphaned_file.mutable_details()->clear_parent_folder_ids(); | |
| 545 FileTracker orphaned_file_tracker( | |
| 546 CreateTracker(sync_root_tracker, orphaned_file)); | |
| 547 orphaned_file_tracker.set_parent_tracker_id(0); | |
| 548 | |
| 549 { | |
| 550 scoped_ptr<leveldb::DB> db = InitializeLevelDB(); | |
| 551 ASSERT_TRUE(db); | |
| 552 | |
| 553 EXPECT_TRUE(PutFileToDB(db.get(), sync_root).ok()); | |
| 554 EXPECT_TRUE(PutTrackerToDB(db.get(), sync_root_tracker).ok()); | |
| 555 EXPECT_TRUE(PutFileToDB(db.get(), app_root).ok()); | |
| 556 EXPECT_TRUE(PutTrackerToDB(db.get(), app_root_tracker).ok()); | |
| 557 EXPECT_TRUE(PutFileToDB(db.get(), file).ok()); | |
| 558 EXPECT_TRUE(PutTrackerToDB(db.get(), file_tracker).ok()); | |
| 559 EXPECT_TRUE(PutFileToDB(db.get(), folder).ok()); | |
| 560 EXPECT_TRUE(PutTrackerToDB(db.get(), folder_tracker).ok()); | |
| 561 EXPECT_TRUE(PutFileToDB(db.get(), file_in_folder).ok()); | |
| 562 EXPECT_TRUE(PutTrackerToDB(db.get(), file_in_folder_tracker).ok()); | |
| 563 EXPECT_TRUE(PutFileToDB(db.get(), orphaned_file).ok()); | |
| 564 EXPECT_TRUE(PutTrackerToDB(db.get(), orphaned_file_tracker).ok()); | |
| 565 } | |
| 566 | |
| 567 EXPECT_EQ(SYNC_STATUS_OK, InitializeMetadataDatabase()); | 601 EXPECT_EQ(SYNC_STATUS_OK, InitializeMetadataDatabase()); |
| 568 | 602 |
| 569 VerifyFile(sync_root); | 603 orphaned_file.should_be_absent = true; |
| 570 VerifyTracker(sync_root_tracker); | 604 VerifyTrackedFiles(tracked_files, arraysize(tracked_files)); |
| 571 VerifyFile(app_root); | |
| 572 VerifyTracker(app_root_tracker); | |
| 573 VerifyFile(file); | |
| 574 VerifyTracker(file_tracker); | |
| 575 VerifyFile(folder); | |
| 576 VerifyTracker(folder_tracker); | |
| 577 VerifyFile(file_in_folder); | |
| 578 VerifyTracker(file_in_folder_tracker); | |
| 579 | |
| 580 EXPECT_FALSE(metadata_database()->FindFileByFileID( | |
| 581 orphaned_file.file_id(), NULL)); | |
| 582 EXPECT_FALSE(metadata_database()->FindTrackerByTrackerID( | |
| 583 orphaned_file_tracker.tracker_id(), NULL)); | |
| 584 } | 605 } |
| 585 | 606 |
| 586 TEST_F(MetadataDatabaseTest, AppManagementTest) { | 607 TEST_F(MetadataDatabaseTest, AppManagementTest) { |
| 587 FileMetadata sync_root(CreateSyncRootMetadata()); | 608 TrackedFile sync_root(CreateTrackedSyncRoot()); |
| 588 FileTracker sync_root_tracker(CreateSyncRootTracker(sync_root)); | 609 TrackedFile app_root(CreateTrackedFolder(sync_root, "app_id")); |
| 610 app_root.tracker.set_app_id(app_root.metadata.details().title()); | |
| 611 app_root.tracker.set_tracker_kind(TRACKER_KIND_APP_ROOT); | |
| 589 | 612 |
| 590 FileMetadata app_root(CreateFolderMetadata(sync_root, "app_id")); | 613 TrackedFile file(CreateTrackedFile(app_root, "file")); |
| 591 FileTracker app_root_tracker( | 614 TrackedFile folder(CreateTrackedFolder(sync_root, "folder")); |
| 592 CreateTracker(sync_root_tracker, app_root)); | 615 folder.tracker.set_active(false); |
| 593 app_root_tracker.set_app_id(app_root.details().title()); | |
| 594 app_root_tracker.set_tracker_kind(TRACKER_KIND_APP_ROOT); | |
| 595 | 616 |
| 596 FileMetadata file(CreateFileMetadata(app_root, "file")); | 617 const TrackedFile* tracked_files[] = { |
| 597 FileTracker file_tracker(CreateTracker(app_root_tracker, file)); | 618 &sync_root, &app_root, &file, &folder, |
| 619 }; | |
| 620 SetUpDatabaseByTrackedFiles(tracked_files, arraysize(tracked_files)); | |
| 621 EXPECT_EQ(SYNC_STATUS_OK, InitializeMetadataDatabase()); | |
| 622 VerifyTrackedFiles(tracked_files, arraysize(tracked_files)); | |
| 598 | 623 |
| 599 FileMetadata folder(CreateFolderMetadata(sync_root, "folder")); | 624 folder.tracker.set_app_id("foo"); |
| 600 FileTracker folder_tracker(CreateTracker(sync_root_tracker, folder)); | |
| 601 folder_tracker.set_active(false); | |
| 602 | |
| 603 { | |
| 604 scoped_ptr<leveldb::DB> db = InitializeLevelDB(); | |
| 605 ASSERT_TRUE(db); | |
| 606 | |
| 607 EXPECT_TRUE(PutFileToDB(db.get(), sync_root).ok()); | |
| 608 EXPECT_TRUE(PutTrackerToDB(db.get(), sync_root_tracker).ok()); | |
| 609 EXPECT_TRUE(PutFileToDB(db.get(), app_root).ok()); | |
| 610 EXPECT_TRUE(PutTrackerToDB(db.get(), app_root_tracker).ok()); | |
| 611 EXPECT_TRUE(PutFileToDB(db.get(), file).ok()); | |
| 612 EXPECT_TRUE(PutTrackerToDB(db.get(), file_tracker).ok()); | |
| 613 EXPECT_TRUE(PutFileToDB(db.get(), folder).ok()); | |
| 614 EXPECT_TRUE(PutTrackerToDB(db.get(), folder_tracker).ok()); | |
| 615 } | |
| 616 | |
| 617 EXPECT_EQ(SYNC_STATUS_OK, InitializeMetadataDatabase()); | |
| 618 VerifyFile(sync_root); | |
| 619 VerifyTracker(sync_root_tracker); | |
| 620 VerifyFile(app_root); | |
| 621 VerifyTracker(app_root_tracker); | |
| 622 VerifyFile(file); | |
| 623 VerifyTracker(file_tracker); | |
| 624 VerifyFile(folder); | |
| 625 VerifyTracker(folder_tracker); | |
| 626 | |
| 627 folder_tracker.set_app_id("foo"); | |
| 628 EXPECT_EQ(SYNC_STATUS_OK, RegisterApp( | 625 EXPECT_EQ(SYNC_STATUS_OK, RegisterApp( |
| 629 folder_tracker.app_id(), folder.file_id())); | 626 folder.tracker.app_id(), folder.metadata.file_id())); |
| 630 folder_tracker.set_tracker_kind(TRACKER_KIND_APP_ROOT); | 627 folder.tracker.set_tracker_kind(TRACKER_KIND_APP_ROOT); |
| 631 folder_tracker.set_active(true); | 628 folder.tracker.set_active(true); |
| 632 folder_tracker.set_dirty(true); | 629 folder.tracker.set_dirty(true); |
| 633 folder_tracker.set_needs_folder_listing(true); | 630 folder.tracker.set_needs_folder_listing(true); |
| 634 VerifyFile(folder); | 631 VerifyTrackedFile(folder); |
| 635 VerifyTracker(folder_tracker); | |
| 636 VerifyReloadConsistency(); | 632 VerifyReloadConsistency(); |
| 637 | 633 |
| 638 EXPECT_EQ(SYNC_STATUS_OK, DisableApp(folder_tracker.app_id())); | 634 EXPECT_EQ(SYNC_STATUS_OK, DisableApp(folder.tracker.app_id())); |
| 639 folder_tracker.set_tracker_kind(TRACKER_KIND_DISABLED_APP_ROOT); | 635 folder.tracker.set_tracker_kind(TRACKER_KIND_DISABLED_APP_ROOT); |
| 640 VerifyFile(folder); | 636 VerifyTrackedFile(folder); |
| 641 VerifyTracker(folder_tracker); | |
| 642 VerifyReloadConsistency(); | 637 VerifyReloadConsistency(); |
| 643 | 638 |
| 644 EXPECT_EQ(SYNC_STATUS_OK, EnableApp(folder_tracker.app_id())); | 639 EXPECT_EQ(SYNC_STATUS_OK, EnableApp(folder.tracker.app_id())); |
| 645 folder_tracker.set_tracker_kind(TRACKER_KIND_APP_ROOT); | 640 folder.tracker.set_tracker_kind(TRACKER_KIND_APP_ROOT); |
| 646 VerifyFile(folder); | 641 VerifyTrackedFile(folder); |
| 647 VerifyTracker(folder_tracker); | |
| 648 VerifyReloadConsistency(); | 642 VerifyReloadConsistency(); |
| 649 | 643 |
| 650 EXPECT_EQ(SYNC_STATUS_OK, UnregisterApp(folder_tracker.app_id())); | 644 EXPECT_EQ(SYNC_STATUS_OK, UnregisterApp(folder.tracker.app_id())); |
| 651 folder_tracker.set_app_id(std::string()); | 645 folder.tracker.set_app_id(std::string()); |
| 652 folder_tracker.set_tracker_kind(TRACKER_KIND_REGULAR); | 646 folder.tracker.set_tracker_kind(TRACKER_KIND_REGULAR); |
| 653 folder_tracker.set_active(false); | 647 folder.tracker.set_active(false); |
| 654 VerifyFile(folder); | 648 VerifyTrackedFile(folder); |
| 655 VerifyTracker(folder_tracker); | |
| 656 VerifyReloadConsistency(); | 649 VerifyReloadConsistency(); |
| 657 | 650 |
| 658 EXPECT_EQ(SYNC_STATUS_OK, UnregisterApp(app_root_tracker.app_id())); | 651 EXPECT_EQ(SYNC_STATUS_OK, UnregisterApp(app_root.tracker.app_id())); |
| 659 app_root_tracker.set_app_id(std::string()); | 652 app_root.tracker.set_app_id(std::string()); |
| 660 app_root_tracker.set_tracker_kind(TRACKER_KIND_REGULAR); | 653 app_root.tracker.set_tracker_kind(TRACKER_KIND_REGULAR); |
| 661 app_root_tracker.set_active(false); | 654 app_root.tracker.set_active(false); |
| 662 app_root_tracker.set_dirty(true); | 655 app_root.tracker.set_dirty(true); |
| 663 VerifyFile(app_root); | 656 file.should_be_absent = true; |
| 664 VerifyTracker(app_root_tracker); | 657 VerifyTrackedFile(app_root); |
| 665 EXPECT_FALSE(metadata_database()->FindFileByFileID(file.file_id(), NULL)); | 658 VerifyTrackedFile(file); |
| 666 EXPECT_FALSE(metadata_database()->FindTrackerByTrackerID( | |
| 667 file_tracker.tracker_id(), NULL)); | |
| 668 VerifyReloadConsistency(); | 659 VerifyReloadConsistency(); |
| 669 } | 660 } |
| 670 | 661 |
| 671 TEST_F(MetadataDatabaseTest, BuildPathTest) { | 662 TEST_F(MetadataDatabaseTest, BuildPathTest) { |
| 672 FileMetadata sync_root(CreateSyncRootMetadata()); | 663 FileMetadata sync_root(CreateSyncRootMetadata()); |
| 673 FileTracker sync_root_tracker(CreateSyncRootTracker(sync_root)); | 664 FileTracker sync_root_tracker(CreateSyncRootTracker(sync_root)); |
| 674 | 665 |
| 675 FileMetadata app_root(CreateFolderMetadata(sync_root, "app_id")); | 666 FileMetadata app_root(CreateFolderMetadata(sync_root, "app_id")); |
| 676 FileTracker app_root_tracker( | 667 FileTracker app_root_tracker( |
| 677 CreateTracker(sync_root_tracker, app_root)); | 668 CreateTracker(sync_root_tracker, app_root)); |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 711 EXPECT_TRUE(metadata_database()->BuildPathForTracker( | 702 EXPECT_TRUE(metadata_database()->BuildPathForTracker( |
| 712 app_root_tracker.tracker_id(), &path)); | 703 app_root_tracker.tracker_id(), &path)); |
| 713 EXPECT_EQ(base::FilePath(FPL("/")).NormalizePathSeparators(), path); | 704 EXPECT_EQ(base::FilePath(FPL("/")).NormalizePathSeparators(), path); |
| 714 EXPECT_TRUE(metadata_database()->BuildPathForTracker( | 705 EXPECT_TRUE(metadata_database()->BuildPathForTracker( |
| 715 file_tracker.tracker_id(), &path)); | 706 file_tracker.tracker_id(), &path)); |
| 716 EXPECT_EQ(base::FilePath(FPL("/folder/file")).NormalizePathSeparators(), | 707 EXPECT_EQ(base::FilePath(FPL("/folder/file")).NormalizePathSeparators(), |
| 717 path); | 708 path); |
| 718 } | 709 } |
| 719 | 710 |
| 720 TEST_F(MetadataDatabaseTest, UpdateByChangeListTest) { | 711 TEST_F(MetadataDatabaseTest, UpdateByChangeListTest) { |
| 721 FileMetadata sync_root(CreateSyncRootMetadata()); | 712 TrackedFile sync_root(CreateTrackedSyncRoot()); |
| 722 FileTracker sync_root_tracker(CreateSyncRootTracker(sync_root)); | 713 TrackedFile app_root(CreateTrackedFolder(sync_root, "app_id")); |
| 714 TrackedFile disabled_app_root(CreateTrackedFolder(sync_root, "disabled_app")); | |
| 715 TrackedFile file(CreateTrackedFile(app_root, "file")); | |
| 716 TrackedFile renamed_file(CreateTrackedFile(app_root, "to be renamed")); | |
| 717 TrackedFile folder(CreateTrackedFolder(app_root, "folder")); | |
| 718 TrackedFile reorganized_file( | |
| 719 CreateTrackedFile(app_root, "to be reorganized")); | |
| 720 TrackedFile updated_file( | |
| 721 CreateTrackedFile(app_root, "to be updated")); | |
| 722 TrackedFile noop_file(CreateTrackedFile(app_root, "has noop change")); | |
| 723 TrackedFile new_file(CreateTrackedFile(app_root, "to be added later")); | |
| 724 new_file.should_be_absent = true; | |
| 723 | 725 |
| 724 FileMetadata app_root(CreateFolderMetadata(sync_root, "app_id")); | 726 const TrackedFile* tracked_files[] = { |
| 725 FileTracker app_root_tracker( | 727 &sync_root, &app_root, &disabled_app_root, |
| 726 CreateTracker(sync_root_tracker, app_root)); | 728 &file, &renamed_file, &folder, &reorganized_file, &updated_file, &noop_file, |
| 729 &new_file, | |
| 730 }; | |
| 727 | 731 |
| 728 FileMetadata disabled_app_root( | 732 SetUpDatabaseByTrackedFiles(tracked_files, arraysize(tracked_files)); |
| 729 CreateFolderMetadata(sync_root, "disabled_app")); | |
| 730 FileTracker disabled_app_root_tracker( | |
| 731 CreateTracker(sync_root_tracker, disabled_app_root)); | |
| 732 | |
| 733 FileMetadata file(CreateFileMetadata(app_root, "file")); | |
| 734 FileTracker file_tracker(CreateTracker(app_root_tracker, file)); | |
| 735 | |
| 736 FileMetadata renamed_file(CreateFileMetadata(app_root, "to be renamed")); | |
| 737 FileTracker renamed_file_tracker( | |
| 738 CreateTracker(app_root_tracker, renamed_file)); | |
| 739 | |
| 740 FileMetadata folder(CreateFolderMetadata(app_root, "folder")); | |
| 741 FileTracker folder_tracker(CreateTracker(app_root_tracker, folder)); | |
| 742 | |
| 743 FileMetadata reorganized_file( | |
| 744 CreateFileMetadata(app_root, "to be reorganized")); | |
| 745 FileTracker reorganized_file_tracker( | |
| 746 CreateTracker(app_root_tracker, reorganized_file)); | |
| 747 | |
| 748 FileMetadata updated_file(CreateFileMetadata(app_root, "to be updated")); | |
| 749 FileTracker updated_file_tracker( | |
| 750 CreateTracker(app_root_tracker, updated_file)); | |
| 751 | |
| 752 FileMetadata noop_file(CreateFileMetadata(app_root, "have noop change")); | |
| 753 FileTracker noop_file_tracker( | |
| 754 CreateTracker(app_root_tracker, noop_file)); | |
| 755 | |
| 756 FileMetadata new_file(CreateFileMetadata(app_root, "to be added later")); | |
| 757 | |
| 758 { | |
| 759 scoped_ptr<leveldb::DB> db = InitializeLevelDB(); | |
| 760 ASSERT_TRUE(db); | |
| 761 | |
| 762 EXPECT_TRUE(PutFileToDB(db.get(), sync_root).ok()); | |
| 763 EXPECT_TRUE(PutTrackerToDB(db.get(), sync_root_tracker).ok()); | |
| 764 EXPECT_TRUE(PutFileToDB(db.get(), app_root).ok()); | |
| 765 EXPECT_TRUE(PutTrackerToDB(db.get(), app_root_tracker).ok()); | |
| 766 EXPECT_TRUE(PutFileToDB(db.get(), disabled_app_root).ok()); | |
| 767 EXPECT_TRUE(PutTrackerToDB(db.get(), disabled_app_root_tracker).ok()); | |
| 768 EXPECT_TRUE(PutFileToDB(db.get(), file).ok()); | |
| 769 EXPECT_TRUE(PutTrackerToDB(db.get(), file_tracker).ok()); | |
| 770 EXPECT_TRUE(PutFileToDB(db.get(), renamed_file).ok()); | |
| 771 EXPECT_TRUE(PutTrackerToDB(db.get(), renamed_file_tracker).ok()); | |
| 772 EXPECT_TRUE(PutFileToDB(db.get(), folder).ok()); | |
| 773 EXPECT_TRUE(PutTrackerToDB(db.get(), folder_tracker).ok()); | |
| 774 EXPECT_TRUE(PutFileToDB(db.get(), reorganized_file).ok()); | |
| 775 EXPECT_TRUE(PutTrackerToDB(db.get(), reorganized_file_tracker).ok()); | |
| 776 EXPECT_TRUE(PutFileToDB(db.get(), updated_file).ok()); | |
| 777 EXPECT_TRUE(PutTrackerToDB(db.get(), updated_file_tracker).ok()); | |
| 778 EXPECT_TRUE(PutFileToDB(db.get(), noop_file).ok()); | |
| 779 EXPECT_TRUE(PutTrackerToDB(db.get(), noop_file_tracker).ok()); | |
| 780 } | |
| 781 | |
| 782 EXPECT_EQ(SYNC_STATUS_OK, InitializeMetadataDatabase()); | 733 EXPECT_EQ(SYNC_STATUS_OK, InitializeMetadataDatabase()); |
| 783 | 734 |
| 784 ApplyRenameChangeToMetadata("renamed", &renamed_file); | 735 ApplyRenameChangeToMetadata("renamed", &renamed_file.metadata); |
| 785 ApplyReorganizeChangeToMetadata(folder.file_id(), &reorganized_file); | 736 ApplyReorganizeChangeToMetadata(folder.metadata.file_id(), |
| 786 ApplyContentChangeToMetadata(&updated_file); | 737 &reorganized_file.metadata); |
| 738 ApplyContentChangeToMetadata(&updated_file.metadata); | |
| 787 | 739 |
| 788 ScopedVector<google_apis::ChangeResource> changes; | 740 ScopedVector<google_apis::ChangeResource> changes; |
| 789 PushToChangeList(CreateChangeResourceFromMetadata(renamed_file), &changes); | 741 PushToChangeList( |
| 790 PushToChangeList(CreateChangeResourceFromMetadata( | 742 CreateChangeResourceFromMetadata(renamed_file.metadata), &changes); |
| 791 reorganized_file), &changes); | 743 PushToChangeList( |
| 792 PushToChangeList(CreateChangeResourceFromMetadata(updated_file), &changes); | 744 CreateChangeResourceFromMetadata(reorganized_file.metadata), &changes); |
| 793 PushToChangeList(CreateChangeResourceFromMetadata(noop_file), &changes); | 745 PushToChangeList( |
| 794 PushToChangeList(CreateChangeResourceFromMetadata(new_file), &changes); | 746 CreateChangeResourceFromMetadata(updated_file.metadata), &changes); |
| 795 | 747 PushToChangeList( |
| 796 renamed_file_tracker.set_dirty(true); | 748 CreateChangeResourceFromMetadata(noop_file.metadata), &changes); |
| 797 reorganized_file_tracker.set_dirty(true); | 749 PushToChangeList( |
| 798 updated_file_tracker.set_dirty(true); | 750 CreateChangeResourceFromMetadata(new_file.metadata), &changes); |
| 799 noop_file_tracker.set_dirty(true); | |
| 800 | |
| 801 EXPECT_EQ(SYNC_STATUS_OK, UpdateByChangeList(changes.Pass())); | 751 EXPECT_EQ(SYNC_STATUS_OK, UpdateByChangeList(changes.Pass())); |
| 802 | 752 |
| 803 FileTracker new_file_tracker(CreateTracker(app_root_tracker, new_file)); | 753 renamed_file.tracker.set_dirty(true); |
| 804 new_file_tracker.set_tracker_id(GetTrackerIDByFileID(new_file.file_id())); | 754 reorganized_file.tracker.set_dirty(true); |
| 805 new_file_tracker.clear_synced_details(); | 755 updated_file.tracker.set_dirty(true); |
| 806 new_file_tracker.set_active(false); | 756 noop_file.tracker.set_dirty(true); |
| 807 new_file_tracker.set_dirty(true); | 757 new_file.tracker.clear_synced_details(); |
| 808 EXPECT_NE(0, new_file_tracker.tracker_id()); | 758 new_file.tracker.set_active(false); |
| 759 new_file.tracker.set_dirty(true); | |
| 760 new_file.tracker.set_tracker_id( | |
| 761 GetTrackerIDByFileID(new_file.metadata.file_id())); | |
| 762 EXPECT_NE(0, new_file.tracker.tracker_id()); | |
| 809 | 763 |
| 810 VerifyFile(sync_root); | 764 new_file.should_be_absent = false; |
| 811 VerifyTracker(sync_root_tracker); | |
| 812 VerifyFile(app_root); | |
| 813 VerifyTracker(app_root_tracker); | |
| 814 VerifyFile(disabled_app_root); | |
| 815 VerifyTracker(disabled_app_root_tracker); | |
| 816 VerifyFile(file); | |
| 817 VerifyTracker(file_tracker); | |
| 818 VerifyFile(renamed_file); | |
| 819 VerifyTracker(renamed_file_tracker); | |
| 820 VerifyFile(folder); | |
| 821 VerifyTracker(folder_tracker); | |
| 822 VerifyFile(reorganized_file); | |
| 823 VerifyTracker(reorganized_file_tracker); | |
| 824 VerifyFile(updated_file); | |
| 825 VerifyTracker(updated_file_tracker); | |
| 826 VerifyFile(noop_file); | |
| 827 VerifyTracker(noop_file_tracker); | |
| 828 VerifyFile(new_file); | |
| 829 VerifyTracker(new_file_tracker); | |
| 830 | 765 |
| 766 VerifyTrackedFiles(tracked_files, arraysize(tracked_files)); | |
| 831 VerifyReloadConsistency(); | 767 VerifyReloadConsistency(); |
| 832 } | 768 } |
| 833 | 769 |
| 834 } // namespace drive_backend | 770 } // namespace drive_backend |
| 835 } // namespace sync_file_system | 771 } // namespace sync_file_system |
| OLD | NEW |