OLD | NEW |
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 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_file_sync_service.h" | 5 #include "chrome/browser/sync_file_system/drive_file_sync_service.h" |
6 | 6 |
7 #include "base/message_loop.h" | 7 #include "base/message_loop.h" |
8 #include "chrome/browser/sync_file_system/drive/fake_api_util.h" | 8 #include "chrome/browser/sync_file_system/drive/fake_api_util.h" |
9 #include "chrome/browser/sync_file_system/drive_metadata_store.h" | 9 #include "chrome/browser/sync_file_system/drive_metadata_store.h" |
10 #include "chrome/browser/sync_file_system/sync_file_system.pb.h" | 10 #include "chrome/browser/sync_file_system/sync_file_system.pb.h" |
(...skipping 15 matching lines...) Expand all Loading... |
26 } | 26 } |
27 | 27 |
28 void ExpectEqStatus(bool* done, | 28 void ExpectEqStatus(bool* done, |
29 SyncStatusCode expected, | 29 SyncStatusCode expected, |
30 SyncStatusCode actual) { | 30 SyncStatusCode actual) { |
31 EXPECT_FALSE(*done); | 31 EXPECT_FALSE(*done); |
32 *done = true; | 32 *done = true; |
33 EXPECT_EQ(expected, actual); | 33 EXPECT_EQ(expected, actual); |
34 } | 34 } |
35 | 35 |
| 36 void ExpectOkStatus(SyncStatusCode status) { |
| 37 EXPECT_EQ(SYNC_STATUS_OK, status); |
| 38 } |
| 39 |
36 } // namespace | 40 } // namespace |
37 | 41 |
38 class DriveFileSyncServiceTest : public testing::Test { | 42 class DriveFileSyncServiceTest : public testing::Test { |
39 public: | 43 public: |
40 DriveFileSyncServiceTest() | 44 DriveFileSyncServiceTest() |
41 : ui_thread_(content::BrowserThread::UI, &message_loop_), | 45 : ui_thread_(content::BrowserThread::UI, &message_loop_), |
42 file_thread_(content::BrowserThread::FILE, &message_loop_), | 46 file_thread_(content::BrowserThread::FILE, &message_loop_), |
43 fake_api_util_(NULL), | 47 fake_api_util_(NULL), |
44 metadata_store_(NULL), | 48 metadata_store_(NULL), |
45 sync_service_(NULL) {} | 49 sync_service_(NULL) {} |
(...skipping 11 matching lines...) Expand all Loading... |
57 metadata_store_->Initialize(base::Bind(&DidInitialize, &done)); | 61 metadata_store_->Initialize(base::Bind(&DidInitialize, &done)); |
58 message_loop_.RunUntilIdle(); | 62 message_loop_.RunUntilIdle(); |
59 metadata_store_->SetSyncRootDirectory(kSyncRootResourceId); | 63 metadata_store_->SetSyncRootDirectory(kSyncRootResourceId); |
60 EXPECT_TRUE(done); | 64 EXPECT_TRUE(done); |
61 | 65 |
62 sync_service_ = DriveFileSyncService::CreateForTesting( | 66 sync_service_ = DriveFileSyncService::CreateForTesting( |
63 &profile_, | 67 &profile_, |
64 base_dir_, | 68 base_dir_, |
65 scoped_ptr<drive::APIUtilInterface>(fake_api_util_), | 69 scoped_ptr<drive::APIUtilInterface>(fake_api_util_), |
66 scoped_ptr<DriveMetadataStore>(metadata_store_)).Pass(); | 70 scoped_ptr<DriveMetadataStore>(metadata_store_)).Pass(); |
| 71 message_loop_.RunUntilIdle(); |
67 } | 72 } |
68 | 73 |
69 virtual void TearDown() OVERRIDE { | 74 virtual void TearDown() OVERRIDE { |
70 metadata_store_ = NULL; | 75 metadata_store_ = NULL; |
71 fake_api_util_ = NULL; | 76 fake_api_util_ = NULL; |
72 sync_service_.reset(); | 77 sync_service_.reset(); |
73 message_loop_.RunUntilIdle(); | 78 message_loop_.RunUntilIdle(); |
74 | 79 |
75 base_dir_ = base::FilePath(); | 80 base_dir_ = base::FilePath(); |
76 ASSERT_TRUE(RevokeSyncableFileSystem(kServiceName)); | 81 ASSERT_TRUE(RevokeSyncableFileSystem(kServiceName)); |
77 } | 82 } |
78 | 83 |
79 virtual ~DriveFileSyncServiceTest() { | 84 virtual ~DriveFileSyncServiceTest() { |
80 } | 85 } |
81 | 86 |
82 protected: | 87 protected: |
83 base::MessageLoop* message_loop() { return &message_loop_; } | 88 base::MessageLoop* message_loop() { return &message_loop_; } |
84 drive::FakeAPIUtil* fake_api_util() { return fake_api_util_; } | 89 drive::FakeAPIUtil* fake_api_util() { return fake_api_util_; } |
85 DriveMetadataStore* metadata_store() { return metadata_store_; } | 90 DriveMetadataStore* metadata_store() { return metadata_store_; } |
86 DriveFileSyncService* sync_service() { return sync_service_.get(); } | 91 DriveFileSyncService* sync_service() { return sync_service_.get(); } |
| 92 std::map<GURL, std::string>* pending_batch_sync_origins() { |
| 93 return &(sync_service()->pending_batch_sync_origins_); |
| 94 } |
| 95 |
| 96 bool VerifyOriginStatusCount(size_t expected_pending, |
| 97 size_t expected_enabled, |
| 98 size_t expected_disabled) { |
| 99 size_t actual_pending = pending_batch_sync_origins()->size(); |
| 100 size_t actual_enabled = metadata_store()->incremental_sync_origins().size(); |
| 101 size_t actual_disabled = metadata_store()->disabled_origins().size(); |
| 102 |
| 103 // Prints which counts don't match up if any. |
| 104 EXPECT_EQ(expected_pending, actual_pending); |
| 105 EXPECT_EQ(expected_enabled, actual_enabled); |
| 106 EXPECT_EQ(expected_disabled, actual_disabled); |
| 107 |
| 108 // If any count doesn't match, the original line number can be printed by |
| 109 // simply adding ASSERT_TRUE on the call to this function. |
| 110 if (expected_pending == actual_pending && |
| 111 expected_enabled == actual_enabled && |
| 112 expected_disabled == actual_disabled) |
| 113 return true; |
| 114 |
| 115 return false; |
| 116 } |
87 | 117 |
88 private: | 118 private: |
89 base::ScopedTempDir scoped_base_dir_; | 119 base::ScopedTempDir scoped_base_dir_; |
90 base::MessageLoop message_loop_; | 120 base::MessageLoop message_loop_; |
91 content::TestBrowserThread ui_thread_; | 121 content::TestBrowserThread ui_thread_; |
92 content::TestBrowserThread file_thread_; | 122 content::TestBrowserThread file_thread_; |
93 | 123 |
94 TestingProfile profile_; | 124 TestingProfile profile_; |
95 base::FilePath base_dir_; | 125 base::FilePath base_dir_; |
96 | 126 |
97 drive::FakeAPIUtil* fake_api_util_; // Owned by |sync_service_|. | 127 drive::FakeAPIUtil* fake_api_util_; // Owned by |sync_service_|. |
98 DriveMetadataStore* metadata_store_; // Owned by |sync_service_|. | 128 DriveMetadataStore* metadata_store_; // Owned by |sync_service_|. |
99 | 129 |
100 scoped_ptr<DriveFileSyncService> sync_service_; | 130 scoped_ptr<DriveFileSyncService> sync_service_; |
101 | 131 |
102 DISALLOW_COPY_AND_ASSIGN(DriveFileSyncServiceTest); | 132 DISALLOW_COPY_AND_ASSIGN(DriveFileSyncServiceTest); |
103 }; | 133 }; |
104 | 134 |
105 TEST_F(DriveFileSyncServiceTest, DeleteOriginDirectory) { | 135 TEST_F(DriveFileSyncServiceTest, UninstallOrigin) { |
106 // Add fake app origin directory using fake drive_sync_client. | 136 // Add fake app origin directory using fake drive_sync_client. |
107 std::string origin_dir_resource_id = "uninstalledappresourceid"; | 137 std::string origin_dir_resource_id = "uninstalledappresourceid"; |
108 fake_api_util()->PushRemoteChange("parent_id", | 138 fake_api_util()->PushRemoteChange("parent_id", |
109 "parent_title", | 139 "parent_title", |
110 "uninstall_me_folder", | 140 "uninstall_me_folder", |
111 origin_dir_resource_id, | 141 origin_dir_resource_id, |
112 "resource_md5", | 142 "resource_md5", |
113 SYNC_FILE_TYPE_FILE, | 143 SYNC_FILE_TYPE_FILE, |
114 false); | 144 false); |
115 | 145 |
116 // Add meta_data entry so GURL->resourse_id mapping is there. | 146 // Add meta_data entry so GURL->resourse_id mapping is there. |
117 const GURL origin_gurl("chrome-extension://uninstallme"); | 147 const GURL origin_gurl("chrome-extension://uninstallme"); |
118 metadata_store()->AddIncrementalSyncOrigin(origin_gurl, | 148 metadata_store()->AddIncrementalSyncOrigin(origin_gurl, |
119 origin_dir_resource_id); | 149 origin_dir_resource_id); |
120 | 150 |
121 // Delete the origin directory. | 151 // Delete the origin directory. |
122 bool done = false; | 152 bool done = false; |
123 sync_service()->UninstallOrigin( | 153 sync_service()->UninstallOrigin( |
124 origin_gurl, | 154 origin_gurl, |
125 base::Bind(&ExpectEqStatus, &done, SYNC_STATUS_OK)); | 155 base::Bind(&ExpectEqStatus, &done, SYNC_STATUS_OK)); |
126 message_loop()->RunUntilIdle(); | 156 message_loop()->RunUntilIdle(); |
127 EXPECT_TRUE(done); | 157 EXPECT_TRUE(done); |
128 | 158 |
129 // Assert the App's origin folder was marked as deleted. | 159 // Assert the App's origin folder was marked as deleted. |
130 EXPECT_TRUE(fake_api_util()->remote_resources().find(origin_dir_resource_id) | 160 EXPECT_TRUE(fake_api_util()->remote_resources().find( |
131 ->second.deleted); | 161 origin_dir_resource_id)->second.deleted); |
| 162 } |
| 163 |
| 164 TEST_F(DriveFileSyncServiceTest, DisableOriginForTrackingChangesPendingOrigin) { |
| 165 // Disable a pending origin after DriveFileSystemService has already started. |
| 166 const GURL origin("chrome-extension://app"); |
| 167 std::string origin_resource_id = "app_resource_id"; |
| 168 pending_batch_sync_origins()->insert(std::make_pair(origin, |
| 169 origin_resource_id)); |
| 170 ASSERT_TRUE(VerifyOriginStatusCount(1u, 0u, 0u)); |
| 171 |
| 172 // Pending origins that are disabled are dropped and do not go to disabled. |
| 173 sync_service()->DisableOriginForTrackingChanges(origin, |
| 174 base::Bind(&ExpectOkStatus)); |
| 175 message_loop()->RunUntilIdle(); |
| 176 ASSERT_TRUE(VerifyOriginStatusCount(0u, 0u, 0u)); |
| 177 } |
| 178 |
| 179 TEST_F(DriveFileSyncServiceTest, |
| 180 DisableOriginForTrackingChangesIncrementalOrigin) { |
| 181 // Disable a pending origin after DriveFileSystemService has already started. |
| 182 const GURL origin("chrome-extension://app"); |
| 183 std::string origin_resource_id = "app_resource_id"; |
| 184 metadata_store()->AddIncrementalSyncOrigin(origin, origin_resource_id); |
| 185 ASSERT_TRUE(VerifyOriginStatusCount(0u, 1u, 0u)); |
| 186 |
| 187 sync_service()->DisableOriginForTrackingChanges(origin, |
| 188 base::Bind(&ExpectOkStatus)); |
| 189 message_loop()->RunUntilIdle(); |
| 190 ASSERT_TRUE(VerifyOriginStatusCount(0u, 0u, 1u)); |
| 191 } |
| 192 |
| 193 TEST_F(DriveFileSyncServiceTest, EnableOriginForTrackingChanges) { |
| 194 const GURL origin("chrome-extension://app"); |
| 195 std::string origin_resource_id = "app_resource_id"; |
| 196 metadata_store()->AddIncrementalSyncOrigin(origin, origin_resource_id); |
| 197 metadata_store()->DisableOrigin(origin, base::Bind(&ExpectOkStatus)); |
| 198 ASSERT_TRUE(VerifyOriginStatusCount(0u, 0u, 1u)); |
| 199 |
| 200 // Re-enable the previously disabled origin. It initially goes to pending |
| 201 // status and then to enabled (incremental) again when NotifyTasksDone() in |
| 202 // DriveFileSyncTaskManager invokes MaybeStartFetchChanges() and pending |
| 203 // origins > 0. |
| 204 sync_service()->EnableOriginForTrackingChanges(origin, |
| 205 base::Bind(&ExpectOkStatus)); |
| 206 message_loop()->RunUntilIdle(); |
| 207 ASSERT_TRUE(VerifyOriginStatusCount(0u, 1u, 0u)); |
132 } | 208 } |
133 | 209 |
134 } // namespace sync_file_system | 210 } // namespace sync_file_system |
OLD | NEW |