| 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/local/local_file_sync_context.h" | 5 #include "chrome/browser/sync_file_system/local/local_file_sync_context.h" |
| 6 | 6 |
| 7 #include <vector> | 7 #include <vector> |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/bind_helpers.h" | 10 #include "base/bind_helpers.h" |
| (...skipping 14 matching lines...) Expand all Loading... |
| 25 #include "third_party/leveldatabase/src/helpers/memenv/memenv.h" | 25 #include "third_party/leveldatabase/src/helpers/memenv/memenv.h" |
| 26 #include "third_party/leveldatabase/src/include/leveldb/env.h" | 26 #include "third_party/leveldatabase/src/include/leveldb/env.h" |
| 27 #include "webkit/browser/fileapi/file_system_context.h" | 27 #include "webkit/browser/fileapi/file_system_context.h" |
| 28 #include "webkit/browser/fileapi/file_system_operation_runner.h" | 28 #include "webkit/browser/fileapi/file_system_operation_runner.h" |
| 29 #include "webkit/browser/fileapi/isolated_context.h" | 29 #include "webkit/browser/fileapi/isolated_context.h" |
| 30 #include "webkit/common/blob/scoped_file.h" | 30 #include "webkit/common/blob/scoped_file.h" |
| 31 | 31 |
| 32 #define FPL FILE_PATH_LITERAL | 32 #define FPL FILE_PATH_LITERAL |
| 33 | 33 |
| 34 using content::BrowserThread; | 34 using content::BrowserThread; |
| 35 using fileapi::FileSystemContext; | 35 using storage::FileSystemContext; |
| 36 using fileapi::FileSystemURL; | 36 using storage::FileSystemURL; |
| 37 using fileapi::FileSystemURLSet; | 37 using storage::FileSystemURLSet; |
| 38 | 38 |
| 39 // This tests LocalFileSyncContext behavior in multi-thread / | 39 // This tests LocalFileSyncContext behavior in multi-thread / |
| 40 // multi-file-system-context environment. | 40 // multi-file-system-context environment. |
| 41 // Basic combined tests (single-thread / single-file-system-context) | 41 // Basic combined tests (single-thread / single-file-system-context) |
| 42 // that involve LocalFileSyncContext are also in | 42 // that involve LocalFileSyncContext are also in |
| 43 // syncable_file_system_unittests.cc. | 43 // syncable_file_system_unittests.cc. |
| 44 | 44 |
| 45 namespace sync_file_system { | 45 namespace sync_file_system { |
| 46 | 46 |
| 47 namespace { | 47 namespace { |
| (...skipping 26 matching lines...) Expand all Loading... |
| 74 | 74 |
| 75 virtual void TearDown() OVERRIDE { | 75 virtual void TearDown() OVERRIDE { |
| 76 RevokeSyncableFileSystem(); | 76 RevokeSyncableFileSystem(); |
| 77 } | 77 } |
| 78 | 78 |
| 79 void StartPrepareForSync(FileSystemContext* file_system_context, | 79 void StartPrepareForSync(FileSystemContext* file_system_context, |
| 80 const FileSystemURL& url, | 80 const FileSystemURL& url, |
| 81 LocalFileSyncContext::SyncMode sync_mode, | 81 LocalFileSyncContext::SyncMode sync_mode, |
| 82 SyncFileMetadata* metadata, | 82 SyncFileMetadata* metadata, |
| 83 FileChangeList* changes, | 83 FileChangeList* changes, |
| 84 webkit_blob::ScopedFile* snapshot) { | 84 storage::ScopedFile* snapshot) { |
| 85 ASSERT_TRUE(changes != NULL); | 85 ASSERT_TRUE(changes != NULL); |
| 86 ASSERT_FALSE(has_inflight_prepare_for_sync_); | 86 ASSERT_FALSE(has_inflight_prepare_for_sync_); |
| 87 status_ = SYNC_STATUS_UNKNOWN; | 87 status_ = SYNC_STATUS_UNKNOWN; |
| 88 has_inflight_prepare_for_sync_ = true; | 88 has_inflight_prepare_for_sync_ = true; |
| 89 sync_context_->PrepareForSync( | 89 sync_context_->PrepareForSync( |
| 90 file_system_context, | 90 file_system_context, |
| 91 url, | 91 url, |
| 92 sync_mode, | 92 sync_mode, |
| 93 base::Bind(&LocalFileSyncContextTest::DidPrepareForSync, | 93 base::Bind(&LocalFileSyncContextTest::DidPrepareForSync, |
| 94 base::Unretained(this), metadata, changes, snapshot)); | 94 base::Unretained(this), metadata, changes, snapshot)); |
| 95 } | 95 } |
| 96 | 96 |
| 97 SyncStatusCode PrepareForSync(FileSystemContext* file_system_context, | 97 SyncStatusCode PrepareForSync(FileSystemContext* file_system_context, |
| 98 const FileSystemURL& url, | 98 const FileSystemURL& url, |
| 99 LocalFileSyncContext::SyncMode sync_mode, | 99 LocalFileSyncContext::SyncMode sync_mode, |
| 100 SyncFileMetadata* metadata, | 100 SyncFileMetadata* metadata, |
| 101 FileChangeList* changes, | 101 FileChangeList* changes, |
| 102 webkit_blob::ScopedFile* snapshot) { | 102 storage::ScopedFile* snapshot) { |
| 103 StartPrepareForSync(file_system_context, url, sync_mode, | 103 StartPrepareForSync(file_system_context, url, sync_mode, |
| 104 metadata, changes, snapshot); | 104 metadata, changes, snapshot); |
| 105 base::MessageLoop::current()->Run(); | 105 base::MessageLoop::current()->Run(); |
| 106 return status_; | 106 return status_; |
| 107 } | 107 } |
| 108 | 108 |
| 109 base::Closure GetPrepareForSyncClosure( | 109 base::Closure GetPrepareForSyncClosure( |
| 110 FileSystemContext* file_system_context, | 110 FileSystemContext* file_system_context, |
| 111 const FileSystemURL& url, | 111 const FileSystemURL& url, |
| 112 LocalFileSyncContext::SyncMode sync_mode, | 112 LocalFileSyncContext::SyncMode sync_mode, |
| 113 SyncFileMetadata* metadata, | 113 SyncFileMetadata* metadata, |
| 114 FileChangeList* changes, | 114 FileChangeList* changes, |
| 115 webkit_blob::ScopedFile* snapshot) { | 115 storage::ScopedFile* snapshot) { |
| 116 return base::Bind(&LocalFileSyncContextTest::StartPrepareForSync, | 116 return base::Bind(&LocalFileSyncContextTest::StartPrepareForSync, |
| 117 base::Unretained(this), | 117 base::Unretained(this), |
| 118 base::Unretained(file_system_context), | 118 base::Unretained(file_system_context), |
| 119 url, sync_mode, metadata, changes, snapshot); | 119 url, sync_mode, metadata, changes, snapshot); |
| 120 } | 120 } |
| 121 | 121 |
| 122 void DidPrepareForSync(SyncFileMetadata* metadata_out, | 122 void DidPrepareForSync(SyncFileMetadata* metadata_out, |
| 123 FileChangeList* changes_out, | 123 FileChangeList* changes_out, |
| 124 webkit_blob::ScopedFile* snapshot_out, | 124 storage::ScopedFile* snapshot_out, |
| 125 SyncStatusCode status, | 125 SyncStatusCode status, |
| 126 const LocalFileSyncInfo& sync_file_info, | 126 const LocalFileSyncInfo& sync_file_info, |
| 127 webkit_blob::ScopedFile snapshot) { | 127 storage::ScopedFile snapshot) { |
| 128 ASSERT_TRUE(ui_task_runner_->RunsTasksOnCurrentThread()); | 128 ASSERT_TRUE(ui_task_runner_->RunsTasksOnCurrentThread()); |
| 129 has_inflight_prepare_for_sync_ = false; | 129 has_inflight_prepare_for_sync_ = false; |
| 130 status_ = status; | 130 status_ = status; |
| 131 *metadata_out = sync_file_info.metadata; | 131 *metadata_out = sync_file_info.metadata; |
| 132 *changes_out = sync_file_info.changes; | 132 *changes_out = sync_file_info.changes; |
| 133 if (snapshot_out) | 133 if (snapshot_out) |
| 134 *snapshot_out = snapshot.Pass(); | 134 *snapshot_out = snapshot.Pass(); |
| 135 base::MessageLoop::current()->Quit(); | 135 base::MessageLoop::current()->Quit(); |
| 136 } | 136 } |
| 137 | 137 |
| (...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 292 ASSERT_EQ(SYNC_STATUS_OK, | 292 ASSERT_EQ(SYNC_STATUS_OK, |
| 293 file_system.MaybeInitializeFileSystemContext( | 293 file_system.MaybeInitializeFileSystemContext( |
| 294 sync_context_.get())); | 294 sync_context_.get())); |
| 295 ASSERT_EQ(base::File::FILE_OK, file_system.OpenFileSystem()); | 295 ASSERT_EQ(base::File::FILE_OK, file_system.OpenFileSystem()); |
| 296 | 296 |
| 297 const FileSystemURL kFile(file_system.URL("file")); | 297 const FileSystemURL kFile(file_system.URL("file")); |
| 298 EXPECT_EQ(base::File::FILE_OK, file_system.CreateFile(kFile)); | 298 EXPECT_EQ(base::File::FILE_OK, file_system.CreateFile(kFile)); |
| 299 | 299 |
| 300 SyncFileMetadata metadata; | 300 SyncFileMetadata metadata; |
| 301 FileChangeList changes; | 301 FileChangeList changes; |
| 302 webkit_blob::ScopedFile snapshot; | 302 storage::ScopedFile snapshot; |
| 303 EXPECT_EQ(SYNC_STATUS_OK, | 303 EXPECT_EQ(SYNC_STATUS_OK, |
| 304 PrepareForSync(file_system.file_system_context(), kFile, | 304 PrepareForSync(file_system.file_system_context(), kFile, |
| 305 sync_mode, &metadata, &changes, &snapshot)); | 305 sync_mode, &metadata, &changes, &snapshot)); |
| 306 EXPECT_EQ(1U, changes.size()); | 306 EXPECT_EQ(1U, changes.size()); |
| 307 EXPECT_TRUE(changes.list().back().IsFile()); | 307 EXPECT_TRUE(changes.list().back().IsFile()); |
| 308 EXPECT_TRUE(changes.list().back().IsAddOrUpdate()); | 308 EXPECT_TRUE(changes.list().back().IsAddOrUpdate()); |
| 309 | 309 |
| 310 EXPECT_EQ(sync_mode == LocalFileSyncContext::SYNC_SNAPSHOT, | 310 EXPECT_EQ(sync_mode == LocalFileSyncContext::SYNC_SNAPSHOT, |
| 311 !snapshot.path().empty()); | 311 !snapshot.path().empty()); |
| 312 | 312 |
| (...skipping 292 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 605 sync_context_ = new LocalFileSyncContext( | 605 sync_context_ = new LocalFileSyncContext( |
| 606 dir_.path(), in_memory_env_.get(), | 606 dir_.path(), in_memory_env_.get(), |
| 607 ui_task_runner_.get(), io_task_runner_.get()); | 607 ui_task_runner_.get(), io_task_runner_.get()); |
| 608 ASSERT_EQ(SYNC_STATUS_OK, | 608 ASSERT_EQ(SYNC_STATUS_OK, |
| 609 file_system.MaybeInitializeFileSystemContext(sync_context_.get())); | 609 file_system.MaybeInitializeFileSystemContext(sync_context_.get())); |
| 610 ASSERT_EQ(base::File::FILE_OK, file_system.OpenFileSystem()); | 610 ASSERT_EQ(base::File::FILE_OK, file_system.OpenFileSystem()); |
| 611 | 611 |
| 612 // Record the initial usage (likely 0). | 612 // Record the initial usage (likely 0). |
| 613 int64 initial_usage = -1; | 613 int64 initial_usage = -1; |
| 614 int64 quota = -1; | 614 int64 quota = -1; |
| 615 EXPECT_EQ(quota::kQuotaStatusOk, | 615 EXPECT_EQ(storage::kQuotaStatusOk, |
| 616 file_system.GetUsageAndQuota(&initial_usage, "a)); | 616 file_system.GetUsageAndQuota(&initial_usage, "a)); |
| 617 | 617 |
| 618 // Create a file and directory in the file_system. | 618 // Create a file and directory in the file_system. |
| 619 const FileSystemURL kFile(file_system.URL("file")); | 619 const FileSystemURL kFile(file_system.URL("file")); |
| 620 const FileSystemURL kDir(file_system.URL("dir")); | 620 const FileSystemURL kDir(file_system.URL("dir")); |
| 621 const FileSystemURL kChild(file_system.URL("dir/child")); | 621 const FileSystemURL kChild(file_system.URL("dir/child")); |
| 622 | 622 |
| 623 EXPECT_EQ(base::File::FILE_OK, file_system.CreateFile(kFile)); | 623 EXPECT_EQ(base::File::FILE_OK, file_system.CreateFile(kFile)); |
| 624 EXPECT_EQ(base::File::FILE_OK, file_system.CreateDirectory(kDir)); | 624 EXPECT_EQ(base::File::FILE_OK, file_system.CreateDirectory(kDir)); |
| 625 EXPECT_EQ(base::File::FILE_OK, file_system.CreateFile(kChild)); | 625 EXPECT_EQ(base::File::FILE_OK, file_system.CreateFile(kChild)); |
| 626 | 626 |
| 627 // file_system's change tracker must have recorded the creation. | 627 // file_system's change tracker must have recorded the creation. |
| 628 FileSystemURLSet urls; | 628 FileSystemURLSet urls; |
| 629 file_system.GetChangedURLsInTracker(&urls); | 629 file_system.GetChangedURLsInTracker(&urls); |
| 630 ASSERT_EQ(3U, urls.size()); | 630 ASSERT_EQ(3U, urls.size()); |
| 631 ASSERT_TRUE(ContainsKey(urls, kFile)); | 631 ASSERT_TRUE(ContainsKey(urls, kFile)); |
| 632 ASSERT_TRUE(ContainsKey(urls, kDir)); | 632 ASSERT_TRUE(ContainsKey(urls, kDir)); |
| 633 ASSERT_TRUE(ContainsKey(urls, kChild)); | 633 ASSERT_TRUE(ContainsKey(urls, kChild)); |
| 634 for (FileSystemURLSet::iterator iter = urls.begin(); | 634 for (FileSystemURLSet::iterator iter = urls.begin(); |
| 635 iter != urls.end(); ++iter) { | 635 iter != urls.end(); ++iter) { |
| 636 file_system.ClearChangeForURLInTracker(*iter); | 636 file_system.ClearChangeForURLInTracker(*iter); |
| 637 } | 637 } |
| 638 | 638 |
| 639 // At this point the usage must be greater than the initial usage. | 639 // At this point the usage must be greater than the initial usage. |
| 640 int64 new_usage = -1; | 640 int64 new_usage = -1; |
| 641 EXPECT_EQ(quota::kQuotaStatusOk, | 641 EXPECT_EQ(storage::kQuotaStatusOk, |
| 642 file_system.GetUsageAndQuota(&new_usage, "a)); | 642 file_system.GetUsageAndQuota(&new_usage, "a)); |
| 643 EXPECT_GT(new_usage, initial_usage); | 643 EXPECT_GT(new_usage, initial_usage); |
| 644 | 644 |
| 645 // Now let's apply remote deletion changes. | 645 // Now let's apply remote deletion changes. |
| 646 FileChange change(FileChange::FILE_CHANGE_DELETE, | 646 FileChange change(FileChange::FILE_CHANGE_DELETE, |
| 647 SYNC_FILE_TYPE_FILE); | 647 SYNC_FILE_TYPE_FILE); |
| 648 EXPECT_EQ(SYNC_STATUS_OK, | 648 EXPECT_EQ(SYNC_STATUS_OK, |
| 649 ApplyRemoteChange(file_system.file_system_context(), | 649 ApplyRemoteChange(file_system.file_system_context(), |
| 650 change, base::FilePath(), kFile, | 650 change, base::FilePath(), kFile, |
| 651 SYNC_FILE_TYPE_FILE)); | 651 SYNC_FILE_TYPE_FILE)); |
| (...skipping 15 matching lines...) Expand all Loading... |
| 667 EXPECT_EQ(base::File::FILE_ERROR_NOT_FOUND, | 667 EXPECT_EQ(base::File::FILE_ERROR_NOT_FOUND, |
| 668 file_system.FileExists(kChild)); | 668 file_system.FileExists(kChild)); |
| 669 | 669 |
| 670 // The changes applied by ApplyRemoteChange should not be recorded in | 670 // The changes applied by ApplyRemoteChange should not be recorded in |
| 671 // the change tracker. | 671 // the change tracker. |
| 672 urls.clear(); | 672 urls.clear(); |
| 673 file_system.GetChangedURLsInTracker(&urls); | 673 file_system.GetChangedURLsInTracker(&urls); |
| 674 EXPECT_TRUE(urls.empty()); | 674 EXPECT_TRUE(urls.empty()); |
| 675 | 675 |
| 676 // The quota usage data must have reflected the deletion. | 676 // The quota usage data must have reflected the deletion. |
| 677 EXPECT_EQ(quota::kQuotaStatusOk, | 677 EXPECT_EQ(storage::kQuotaStatusOk, |
| 678 file_system.GetUsageAndQuota(&new_usage, "a)); | 678 file_system.GetUsageAndQuota(&new_usage, "a)); |
| 679 EXPECT_EQ(new_usage, initial_usage); | 679 EXPECT_EQ(new_usage, initial_usage); |
| 680 | 680 |
| 681 sync_context_->ShutdownOnUIThread(); | 681 sync_context_->ShutdownOnUIThread(); |
| 682 sync_context_ = NULL; | 682 sync_context_ = NULL; |
| 683 file_system.TearDown(); | 683 file_system.TearDown(); |
| 684 } | 684 } |
| 685 | 685 |
| 686 TEST_F(LocalFileSyncContextTest, ApplyRemoteChangeForDeletion_ForRoot) { | 686 TEST_F(LocalFileSyncContextTest, ApplyRemoteChangeForDeletion_ForRoot) { |
| 687 CannedSyncableFileSystem file_system(GURL(kOrigin1), | 687 CannedSyncableFileSystem file_system(GURL(kOrigin1), |
| 688 in_memory_env_.get(), | 688 in_memory_env_.get(), |
| 689 io_task_runner_.get(), | 689 io_task_runner_.get(), |
| 690 file_task_runner_.get()); | 690 file_task_runner_.get()); |
| 691 file_system.SetUp(CannedSyncableFileSystem::QUOTA_ENABLED); | 691 file_system.SetUp(CannedSyncableFileSystem::QUOTA_ENABLED); |
| 692 | 692 |
| 693 sync_context_ = new LocalFileSyncContext( | 693 sync_context_ = new LocalFileSyncContext( |
| 694 dir_.path(), in_memory_env_.get(), | 694 dir_.path(), in_memory_env_.get(), |
| 695 ui_task_runner_.get(), io_task_runner_.get()); | 695 ui_task_runner_.get(), io_task_runner_.get()); |
| 696 ASSERT_EQ(SYNC_STATUS_OK, | 696 ASSERT_EQ(SYNC_STATUS_OK, |
| 697 file_system.MaybeInitializeFileSystemContext(sync_context_.get())); | 697 file_system.MaybeInitializeFileSystemContext(sync_context_.get())); |
| 698 ASSERT_EQ(base::File::FILE_OK, file_system.OpenFileSystem()); | 698 ASSERT_EQ(base::File::FILE_OK, file_system.OpenFileSystem()); |
| 699 | 699 |
| 700 // Record the initial usage (likely 0). | 700 // Record the initial usage (likely 0). |
| 701 int64 initial_usage = -1; | 701 int64 initial_usage = -1; |
| 702 int64 quota = -1; | 702 int64 quota = -1; |
| 703 EXPECT_EQ(quota::kQuotaStatusOk, | 703 EXPECT_EQ(storage::kQuotaStatusOk, |
| 704 file_system.GetUsageAndQuota(&initial_usage, "a)); | 704 file_system.GetUsageAndQuota(&initial_usage, "a)); |
| 705 | 705 |
| 706 // Create a file and directory in the file_system. | 706 // Create a file and directory in the file_system. |
| 707 const FileSystemURL kFile(file_system.URL("file")); | 707 const FileSystemURL kFile(file_system.URL("file")); |
| 708 const FileSystemURL kDir(file_system.URL("dir")); | 708 const FileSystemURL kDir(file_system.URL("dir")); |
| 709 const FileSystemURL kChild(file_system.URL("dir/child")); | 709 const FileSystemURL kChild(file_system.URL("dir/child")); |
| 710 | 710 |
| 711 EXPECT_EQ(base::File::FILE_OK, file_system.CreateFile(kFile)); | 711 EXPECT_EQ(base::File::FILE_OK, file_system.CreateFile(kFile)); |
| 712 EXPECT_EQ(base::File::FILE_OK, file_system.CreateDirectory(kDir)); | 712 EXPECT_EQ(base::File::FILE_OK, file_system.CreateDirectory(kDir)); |
| 713 EXPECT_EQ(base::File::FILE_OK, file_system.CreateFile(kChild)); | 713 EXPECT_EQ(base::File::FILE_OK, file_system.CreateFile(kChild)); |
| 714 | 714 |
| 715 // At this point the usage must be greater than the initial usage. | 715 // At this point the usage must be greater than the initial usage. |
| 716 int64 new_usage = -1; | 716 int64 new_usage = -1; |
| 717 EXPECT_EQ(quota::kQuotaStatusOk, | 717 EXPECT_EQ(storage::kQuotaStatusOk, |
| 718 file_system.GetUsageAndQuota(&new_usage, "a)); | 718 file_system.GetUsageAndQuota(&new_usage, "a)); |
| 719 EXPECT_GT(new_usage, initial_usage); | 719 EXPECT_GT(new_usage, initial_usage); |
| 720 | 720 |
| 721 const FileSystemURL kRoot(file_system.URL("")); | 721 const FileSystemURL kRoot(file_system.URL("")); |
| 722 | 722 |
| 723 // Now let's apply remote deletion changes for the root. | 723 // Now let's apply remote deletion changes for the root. |
| 724 FileChange change(FileChange::FILE_CHANGE_DELETE, SYNC_FILE_TYPE_DIRECTORY); | 724 FileChange change(FileChange::FILE_CHANGE_DELETE, SYNC_FILE_TYPE_DIRECTORY); |
| 725 EXPECT_EQ(SYNC_STATUS_OK, | 725 EXPECT_EQ(SYNC_STATUS_OK, |
| 726 ApplyRemoteChange(file_system.file_system_context(), | 726 ApplyRemoteChange(file_system.file_system_context(), |
| 727 change, base::FilePath(), kRoot, | 727 change, base::FilePath(), kRoot, |
| 728 SYNC_FILE_TYPE_DIRECTORY)); | 728 SYNC_FILE_TYPE_DIRECTORY)); |
| 729 | 729 |
| 730 // Check the directory/files are deleted successfully. | 730 // Check the directory/files are deleted successfully. |
| 731 EXPECT_EQ(base::File::FILE_ERROR_NOT_FOUND, | 731 EXPECT_EQ(base::File::FILE_ERROR_NOT_FOUND, |
| 732 file_system.FileExists(kFile)); | 732 file_system.FileExists(kFile)); |
| 733 EXPECT_EQ(base::File::FILE_ERROR_NOT_FOUND, | 733 EXPECT_EQ(base::File::FILE_ERROR_NOT_FOUND, |
| 734 file_system.DirectoryExists(kDir)); | 734 file_system.DirectoryExists(kDir)); |
| 735 EXPECT_EQ(base::File::FILE_ERROR_NOT_FOUND, | 735 EXPECT_EQ(base::File::FILE_ERROR_NOT_FOUND, |
| 736 file_system.FileExists(kChild)); | 736 file_system.FileExists(kChild)); |
| 737 | 737 |
| 738 // All changes made for the previous creation must have been also reset. | 738 // All changes made for the previous creation must have been also reset. |
| 739 FileSystemURLSet urls; | 739 FileSystemURLSet urls; |
| 740 file_system.GetChangedURLsInTracker(&urls); | 740 file_system.GetChangedURLsInTracker(&urls); |
| 741 EXPECT_TRUE(urls.empty()); | 741 EXPECT_TRUE(urls.empty()); |
| 742 | 742 |
| 743 // The quota usage data must have reflected the deletion. | 743 // The quota usage data must have reflected the deletion. |
| 744 EXPECT_EQ(quota::kQuotaStatusOk, | 744 EXPECT_EQ(storage::kQuotaStatusOk, |
| 745 file_system.GetUsageAndQuota(&new_usage, "a)); | 745 file_system.GetUsageAndQuota(&new_usage, "a)); |
| 746 EXPECT_EQ(new_usage, initial_usage); | 746 EXPECT_EQ(new_usage, initial_usage); |
| 747 | 747 |
| 748 sync_context_->ShutdownOnUIThread(); | 748 sync_context_->ShutdownOnUIThread(); |
| 749 sync_context_ = NULL; | 749 sync_context_ = NULL; |
| 750 file_system.TearDown(); | 750 file_system.TearDown(); |
| 751 } | 751 } |
| 752 | 752 |
| 753 TEST_F(LocalFileSyncContextTest, ApplyRemoteChangeForAddOrUpdate) { | 753 TEST_F(LocalFileSyncContextTest, ApplyRemoteChangeForAddOrUpdate) { |
| 754 base::ScopedTempDir temp_dir; | 754 base::ScopedTempDir temp_dir; |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 800 ASSERT_EQ(static_cast<int>(arraysize(kTestFileData1) - 1), | 800 ASSERT_EQ(static_cast<int>(arraysize(kTestFileData1) - 1), |
| 801 base::WriteFile(kFilePath1, kTestFileData1, | 801 base::WriteFile(kFilePath1, kTestFileData1, |
| 802 arraysize(kTestFileData1) - 1)); | 802 arraysize(kTestFileData1) - 1)); |
| 803 ASSERT_EQ(static_cast<int>(arraysize(kTestFileData2) - 1), | 803 ASSERT_EQ(static_cast<int>(arraysize(kTestFileData2) - 1), |
| 804 base::WriteFile(kFilePath2, kTestFileData2, | 804 base::WriteFile(kFilePath2, kTestFileData2, |
| 805 arraysize(kTestFileData2) - 1)); | 805 arraysize(kTestFileData2) - 1)); |
| 806 | 806 |
| 807 // Record the usage. | 807 // Record the usage. |
| 808 int64 usage = -1, new_usage = -1; | 808 int64 usage = -1, new_usage = -1; |
| 809 int64 quota = -1; | 809 int64 quota = -1; |
| 810 EXPECT_EQ(quota::kQuotaStatusOk, | 810 EXPECT_EQ(storage::kQuotaStatusOk, |
| 811 file_system.GetUsageAndQuota(&usage, "a)); | 811 file_system.GetUsageAndQuota(&usage, "a)); |
| 812 | 812 |
| 813 // Here in the local filesystem we have: | 813 // Here in the local filesystem we have: |
| 814 // * kFile1 with kTestFileData0 | 814 // * kFile1 with kTestFileData0 |
| 815 // | 815 // |
| 816 // In the remote side let's assume we have: | 816 // In the remote side let's assume we have: |
| 817 // * kFile1 with kTestFileData1 | 817 // * kFile1 with kTestFileData1 |
| 818 // * kFile2 with kTestFileData2 | 818 // * kFile2 with kTestFileData2 |
| 819 // * kDir | 819 // * kDir |
| 820 // | 820 // |
| 821 // By calling ApplyChange's: | 821 // By calling ApplyChange's: |
| 822 // * kFile1 will be updated to have kTestFileData1 | 822 // * kFile1 will be updated to have kTestFileData1 |
| 823 // * kFile2 will be created | 823 // * kFile2 will be created |
| 824 // * kDir will be created | 824 // * kDir will be created |
| 825 | 825 |
| 826 // Apply the remote change to kFile1 (which will update the file). | 826 // Apply the remote change to kFile1 (which will update the file). |
| 827 FileChange change(FileChange::FILE_CHANGE_ADD_OR_UPDATE, | 827 FileChange change(FileChange::FILE_CHANGE_ADD_OR_UPDATE, |
| 828 SYNC_FILE_TYPE_FILE); | 828 SYNC_FILE_TYPE_FILE); |
| 829 EXPECT_EQ(SYNC_STATUS_OK, | 829 EXPECT_EQ(SYNC_STATUS_OK, |
| 830 ApplyRemoteChange(file_system.file_system_context(), | 830 ApplyRemoteChange(file_system.file_system_context(), |
| 831 change, kFilePath1, kFile1, | 831 change, kFilePath1, kFile1, |
| 832 SYNC_FILE_TYPE_FILE)); | 832 SYNC_FILE_TYPE_FILE)); |
| 833 | 833 |
| 834 // Check if the usage has been increased by (kTestFileData1 - kTestFileData0). | 834 // Check if the usage has been increased by (kTestFileData1 - kTestFileData0). |
| 835 const int updated_size = | 835 const int updated_size = |
| 836 arraysize(kTestFileData1) - arraysize(kTestFileData0); | 836 arraysize(kTestFileData1) - arraysize(kTestFileData0); |
| 837 EXPECT_EQ(quota::kQuotaStatusOk, | 837 EXPECT_EQ(storage::kQuotaStatusOk, |
| 838 file_system.GetUsageAndQuota(&new_usage, "a)); | 838 file_system.GetUsageAndQuota(&new_usage, "a)); |
| 839 EXPECT_EQ(updated_size, new_usage - usage); | 839 EXPECT_EQ(updated_size, new_usage - usage); |
| 840 | 840 |
| 841 // Apply remote changes to kFile2 and kDir (should create a file and | 841 // Apply remote changes to kFile2 and kDir (should create a file and |
| 842 // directory respectively). | 842 // directory respectively). |
| 843 // They are non-existent yet so their expected file type (the last | 843 // They are non-existent yet so their expected file type (the last |
| 844 // parameter of ApplyRemoteChange) are | 844 // parameter of ApplyRemoteChange) are |
| 845 // SYNC_FILE_TYPE_UNKNOWN. | 845 // SYNC_FILE_TYPE_UNKNOWN. |
| 846 change = FileChange(FileChange::FILE_CHANGE_ADD_OR_UPDATE, | 846 change = FileChange(FileChange::FILE_CHANGE_ADD_OR_UPDATE, |
| 847 SYNC_FILE_TYPE_FILE); | 847 SYNC_FILE_TYPE_FILE); |
| (...skipping 26 matching lines...) Expand all Loading... |
| 874 EXPECT_EQ(SYNC_STATUS_OK, | 874 EXPECT_EQ(SYNC_STATUS_OK, |
| 875 ApplyRemoteChange(file_system.file_system_context(), | 875 ApplyRemoteChange(file_system.file_system_context(), |
| 876 change, | 876 change, |
| 877 kFilePath1, | 877 kFilePath1, |
| 878 kDir, | 878 kDir, |
| 879 SYNC_FILE_TYPE_FILE)); | 879 SYNC_FILE_TYPE_FILE)); |
| 880 | 880 |
| 881 // Creating a file/directory must have increased the usage more than | 881 // Creating a file/directory must have increased the usage more than |
| 882 // the size of kTestFileData2. | 882 // the size of kTestFileData2. |
| 883 new_usage = usage; | 883 new_usage = usage; |
| 884 EXPECT_EQ(quota::kQuotaStatusOk, | 884 EXPECT_EQ(storage::kQuotaStatusOk, |
| 885 file_system.GetUsageAndQuota(&new_usage, "a)); | 885 file_system.GetUsageAndQuota(&new_usage, "a)); |
| 886 EXPECT_GT(new_usage, | 886 EXPECT_GT(new_usage, |
| 887 static_cast<int64>(usage + arraysize(kTestFileData2) - 1)); | 887 static_cast<int64>(usage + arraysize(kTestFileData2) - 1)); |
| 888 | 888 |
| 889 // The changes applied by ApplyRemoteChange should not be recorded in | 889 // The changes applied by ApplyRemoteChange should not be recorded in |
| 890 // the change tracker. | 890 // the change tracker. |
| 891 urls.clear(); | 891 urls.clear(); |
| 892 file_system.GetChangedURLsInTracker(&urls); | 892 file_system.GetChangedURLsInTracker(&urls); |
| 893 EXPECT_TRUE(urls.empty()); | 893 EXPECT_TRUE(urls.empty()); |
| 894 | 894 |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 950 | 950 |
| 951 // Make sure kDir and kFile are created by ApplyRemoteChange. | 951 // Make sure kDir and kFile are created by ApplyRemoteChange. |
| 952 EXPECT_EQ(base::File::FILE_OK, file_system.FileExists(kFile)); | 952 EXPECT_EQ(base::File::FILE_OK, file_system.FileExists(kFile)); |
| 953 EXPECT_EQ(base::File::FILE_OK, file_system.DirectoryExists(kDir)); | 953 EXPECT_EQ(base::File::FILE_OK, file_system.DirectoryExists(kDir)); |
| 954 | 954 |
| 955 sync_context_->ShutdownOnUIThread(); | 955 sync_context_->ShutdownOnUIThread(); |
| 956 file_system.TearDown(); | 956 file_system.TearDown(); |
| 957 } | 957 } |
| 958 | 958 |
| 959 } // namespace sync_file_system | 959 } // namespace sync_file_system |
| OLD | NEW |