Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(567)

Side by Side Diff: chrome/browser/sync_file_system/drive_backend/metadata_database_unittest.cc

Issue 23173004: [SyncFS] Simplify MetadataDatabaseTest (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: test fix Created 7 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
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
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
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698