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 |