OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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/chromeos/drive/change_list_processor.h" | 5 #include "chrome/browser/chromeos/drive/change_list_processor.h" |
6 | 6 |
7 #include "base/files/scoped_temp_dir.h" | 7 #include "base/files/scoped_temp_dir.h" |
8 #include "base/message_loop/message_loop_proxy.h" | 8 #include "base/message_loop/message_loop_proxy.h" |
9 #include "base/values.h" | 9 #include "base/values.h" |
10 #include "chrome/browser/chromeos/drive/drive.pb.h" | 10 #include "chrome/browser/chromeos/drive/drive.pb.h" |
11 #include "chrome/browser/chromeos/drive/fake_free_disk_space_getter.h" | 11 #include "chrome/browser/chromeos/drive/fake_free_disk_space_getter.h" |
12 #include "chrome/browser/chromeos/drive/file_cache.h" | 12 #include "chrome/browser/chromeos/drive/file_cache.h" |
| 13 #include "chrome/browser/chromeos/drive/file_change.h" |
13 #include "chrome/browser/chromeos/drive/file_system_util.h" | 14 #include "chrome/browser/chromeos/drive/file_system_util.h" |
14 #include "chrome/browser/chromeos/drive/resource_metadata.h" | 15 #include "chrome/browser/chromeos/drive/resource_metadata.h" |
15 #include "chrome/browser/chromeos/drive/test_util.h" | 16 #include "chrome/browser/chromeos/drive/test_util.h" |
16 #include "content/public/test/test_browser_thread_bundle.h" | 17 #include "content/public/test/test_browser_thread_bundle.h" |
17 #include "google_apis/drive/drive_api_parser.h" | 18 #include "google_apis/drive/drive_api_parser.h" |
18 #include "google_apis/drive/gdata_wapi_parser.h" | 19 #include "google_apis/drive/gdata_wapi_parser.h" |
19 #include "google_apis/drive/test_util.h" | 20 #include "google_apis/drive/test_util.h" |
20 #include "testing/gtest/include/gtest/gtest.h" | 21 #include "testing/gtest/include/gtest/gtest.h" |
21 | 22 |
22 namespace drive { | 23 namespace drive { |
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
125 | 126 |
126 ChangeListProcessor processor(metadata_.get()); | 127 ChangeListProcessor processor(metadata_.get()); |
127 return processor.Apply(about_resource.Pass(), | 128 return processor.Apply(about_resource.Pass(), |
128 changes.Pass(), | 129 changes.Pass(), |
129 false /* is_delta_update */); | 130 false /* is_delta_update */); |
130 } | 131 } |
131 | 132 |
132 // Applies the |changes| to |metadata_| as a delta update. Delta changelists | 133 // Applies the |changes| to |metadata_| as a delta update. Delta changelists |
133 // should contain their changestamp in themselves. | 134 // should contain their changestamp in themselves. |
134 FileError ApplyChangeList(ScopedVector<ChangeList> changes, | 135 FileError ApplyChangeList(ScopedVector<ChangeList> changes, |
135 std::set<base::FilePath>* changed_dirs) { | 136 FileChange* changed_files) { |
136 scoped_ptr<google_apis::AboutResource> about_resource( | 137 scoped_ptr<google_apis::AboutResource> about_resource( |
137 new google_apis::AboutResource); | 138 new google_apis::AboutResource); |
138 about_resource->set_largest_change_id(kBaseResourceListChangestamp); | 139 about_resource->set_largest_change_id(kBaseResourceListChangestamp); |
139 about_resource->set_root_folder_id(kRootId); | 140 about_resource->set_root_folder_id(kRootId); |
140 | 141 |
141 ChangeListProcessor processor(metadata_.get()); | 142 ChangeListProcessor processor(metadata_.get()); |
142 FileError error = processor.Apply(about_resource.Pass(), | 143 FileError error = processor.Apply(about_resource.Pass(), |
143 changes.Pass(), | 144 changes.Pass(), |
144 true /* is_delta_update */); | 145 true /* is_delta_update */); |
145 *changed_dirs = processor.changed_dirs(); | 146 *changed_files = processor.changed_files(); |
146 return error; | 147 return error; |
147 } | 148 } |
148 | 149 |
149 // Gets the resource entry for the path from |metadata_| synchronously. | 150 // Gets the resource entry for the path from |metadata_| synchronously. |
150 // Returns null if the entry does not exist. | 151 // Returns null if the entry does not exist. |
151 scoped_ptr<ResourceEntry> GetResourceEntry(const std::string& path) { | 152 scoped_ptr<ResourceEntry> GetResourceEntry(const std::string& path) { |
152 scoped_ptr<ResourceEntry> entry(new ResourceEntry); | 153 scoped_ptr<ResourceEntry> entry(new ResourceEntry); |
153 FileError error = metadata_->GetResourceEntryByPath( | 154 FileError error = metadata_->GetResourceEntryByPath( |
154 base::FilePath::FromUTF8Unsafe(path), entry.get()); | 155 base::FilePath::FromUTF8Unsafe(path), entry.get()); |
155 if (error != FILE_ERROR_OK) | 156 if (error != FILE_ERROR_OK) |
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
228 new_file.set_resource_id("document:file_added_in_new_dir_id"); | 229 new_file.set_resource_id("document:file_added_in_new_dir_id"); |
229 new_file.set_title("File in new dir.txt"); | 230 new_file.set_title("File in new dir.txt"); |
230 change_lists[0]->mutable_entries()->push_back(new_file); | 231 change_lists[0]->mutable_entries()->push_back(new_file); |
231 change_lists[0]->mutable_parent_resource_ids()->push_back( | 232 change_lists[0]->mutable_parent_resource_ids()->push_back( |
232 new_folder.resource_id()); | 233 new_folder.resource_id()); |
233 | 234 |
234 change_lists[0]->set_largest_changestamp(16730); | 235 change_lists[0]->set_largest_changestamp(16730); |
235 | 236 |
236 // Apply the changelist and check the effect. | 237 // Apply the changelist and check the effect. |
237 EXPECT_EQ(FILE_ERROR_OK, ApplyFullResourceList(CreateBaseChangeList())); | 238 EXPECT_EQ(FILE_ERROR_OK, ApplyFullResourceList(CreateBaseChangeList())); |
238 std::set<base::FilePath> changed_dirs; | 239 |
239 EXPECT_EQ(FILE_ERROR_OK, ApplyChangeList(change_lists.Pass(), &changed_dirs)); | 240 FileChange changed_files; |
| 241 EXPECT_EQ(FILE_ERROR_OK, |
| 242 ApplyChangeList(change_lists.Pass(), &changed_files)); |
240 | 243 |
241 int64 changestamp = 0; | 244 int64 changestamp = 0; |
242 EXPECT_EQ(FILE_ERROR_OK, metadata_->GetLargestChangestamp(&changestamp)); | 245 EXPECT_EQ(FILE_ERROR_OK, metadata_->GetLargestChangestamp(&changestamp)); |
243 EXPECT_EQ(16730, changestamp); | 246 EXPECT_EQ(16730, changestamp); |
244 EXPECT_TRUE(GetResourceEntry("drive/root/New Directory")); | 247 EXPECT_TRUE(GetResourceEntry("drive/root/New Directory")); |
245 EXPECT_TRUE(GetResourceEntry( | 248 EXPECT_TRUE(GetResourceEntry( |
246 "drive/root/New Directory/File in new dir.txt")); | 249 "drive/root/New Directory/File in new dir.txt")); |
247 | 250 |
248 EXPECT_EQ(2U, changed_dirs.size()); | 251 EXPECT_EQ(2U, changed_files.size()); |
249 EXPECT_TRUE(changed_dirs.count( | 252 EXPECT_TRUE(changed_files.count(base::FilePath::FromUTF8Unsafe( |
250 base::FilePath::FromUTF8Unsafe("drive/root"))); | 253 "drive/root/New Directory/File in new dir.txt"))); |
251 EXPECT_TRUE(changed_dirs.count( | 254 EXPECT_TRUE(changed_files.count( |
252 base::FilePath::FromUTF8Unsafe("drive/root/New Directory"))); | 255 base::FilePath::FromUTF8Unsafe("drive/root/New Directory"))); |
253 } | 256 } |
254 | 257 |
255 TEST_F(ChangeListProcessorTest, DeltaDirMovedFromRootToDirectory) { | 258 TEST_F(ChangeListProcessorTest, DeltaDirMovedFromRootToDirectory) { |
256 ScopedVector<ChangeList> change_lists; | 259 ScopedVector<ChangeList> change_lists; |
257 change_lists.push_back(new ChangeList); | 260 change_lists.push_back(new ChangeList); |
258 | 261 |
259 ResourceEntry entry; | 262 ResourceEntry entry; |
260 entry.set_resource_id("folder:1_folder_resource_id"); | 263 entry.set_resource_id("folder:1_folder_resource_id"); |
261 entry.set_title("Directory 1"); | 264 entry.set_title("Directory 1"); |
262 entry.mutable_file_info()->set_is_directory(true); | 265 entry.mutable_file_info()->set_is_directory(true); |
263 change_lists[0]->mutable_entries()->push_back(entry); | 266 change_lists[0]->mutable_entries()->push_back(entry); |
264 change_lists[0]->mutable_parent_resource_ids()->push_back( | 267 change_lists[0]->mutable_parent_resource_ids()->push_back( |
265 "folder:sub_dir_folder_2_self_link"); | 268 "folder:sub_dir_folder_2_self_link"); |
266 | 269 |
267 change_lists[0]->set_largest_changestamp(16809); | 270 change_lists[0]->set_largest_changestamp(16809); |
268 | 271 |
269 // Apply the changelist and check the effect. | 272 // Apply the changelist and check the effect. |
270 EXPECT_EQ(FILE_ERROR_OK, ApplyFullResourceList(CreateBaseChangeList())); | 273 EXPECT_EQ(FILE_ERROR_OK, ApplyFullResourceList(CreateBaseChangeList())); |
271 std::set<base::FilePath> changed_dirs; | 274 |
272 EXPECT_EQ(FILE_ERROR_OK, ApplyChangeList(change_lists.Pass(), &changed_dirs)); | 275 FileChange changed_files; |
| 276 EXPECT_EQ(FILE_ERROR_OK, |
| 277 ApplyChangeList(change_lists.Pass(), &changed_files)); |
273 | 278 |
274 int64 changestamp = 0; | 279 int64 changestamp = 0; |
275 EXPECT_EQ(FILE_ERROR_OK, metadata_->GetLargestChangestamp(&changestamp)); | 280 EXPECT_EQ(FILE_ERROR_OK, metadata_->GetLargestChangestamp(&changestamp)); |
276 EXPECT_EQ(16809, changestamp); | 281 EXPECT_EQ(16809, changestamp); |
277 EXPECT_FALSE(GetResourceEntry("drive/root/Directory 1")); | 282 EXPECT_FALSE(GetResourceEntry("drive/root/Directory 1")); |
278 EXPECT_TRUE(GetResourceEntry( | 283 EXPECT_TRUE(GetResourceEntry( |
279 "drive/root/Directory 2 excludeDir-test/Directory 1")); | 284 "drive/root/Directory 2 excludeDir-test/Directory 1")); |
280 | 285 |
281 EXPECT_EQ(4U, changed_dirs.size()); | 286 EXPECT_EQ(2U, changed_files.size()); |
282 EXPECT_TRUE(changed_dirs.count( | 287 EXPECT_TRUE(changed_files.CountDirectory( |
283 base::FilePath::FromUTF8Unsafe("drive/root"))); | 288 base::FilePath::FromUTF8Unsafe("drive/root"))); |
284 EXPECT_TRUE(changed_dirs.count( | 289 EXPECT_TRUE(changed_files.count( |
285 base::FilePath::FromUTF8Unsafe("drive/root/Directory 1"))); | 290 base::FilePath::FromUTF8Unsafe("drive/root/Directory 1"))); |
286 EXPECT_TRUE(changed_dirs.count( | 291 EXPECT_TRUE(changed_files.CountDirectory(base::FilePath::FromUTF8Unsafe( |
287 base::FilePath::FromUTF8Unsafe( | 292 "drive/root/Directory 2 excludeDir-test"))); |
288 "drive/root/Directory 2 excludeDir-test"))); | 293 EXPECT_TRUE(changed_files.count(base::FilePath::FromUTF8Unsafe( |
289 EXPECT_TRUE(changed_dirs.count( | 294 "drive/root/Directory 2 excludeDir-test/Directory 1"))); |
290 base::FilePath::FromUTF8Unsafe( | |
291 "drive/root/Directory 2 excludeDir-test/Directory 1"))); | |
292 } | 295 } |
293 | 296 |
294 TEST_F(ChangeListProcessorTest, DeltaFileMovedFromDirectoryToRoot) { | 297 TEST_F(ChangeListProcessorTest, DeltaFileMovedFromDirectoryToRoot) { |
295 ScopedVector<ChangeList> change_lists; | 298 ScopedVector<ChangeList> change_lists; |
296 change_lists.push_back(new ChangeList); | 299 change_lists.push_back(new ChangeList); |
297 | 300 |
298 ResourceEntry entry; | 301 ResourceEntry entry; |
299 entry.set_resource_id("file:subdirectory_file_1_id"); | 302 entry.set_resource_id("file:subdirectory_file_1_id"); |
300 entry.set_title("SubDirectory File 1.txt"); | 303 entry.set_title("SubDirectory File 1.txt"); |
301 change_lists[0]->mutable_entries()->push_back(entry); | 304 change_lists[0]->mutable_entries()->push_back(entry); |
302 change_lists[0]->mutable_parent_resource_ids()->push_back(kRootId); | 305 change_lists[0]->mutable_parent_resource_ids()->push_back(kRootId); |
303 | 306 |
304 change_lists[0]->set_largest_changestamp(16815); | 307 change_lists[0]->set_largest_changestamp(16815); |
305 | 308 |
306 // Apply the changelist and check the effect. | 309 // Apply the changelist and check the effect. |
307 EXPECT_EQ(FILE_ERROR_OK, ApplyFullResourceList(CreateBaseChangeList())); | 310 EXPECT_EQ(FILE_ERROR_OK, ApplyFullResourceList(CreateBaseChangeList())); |
308 std::set<base::FilePath> changed_dirs; | 311 FileChange changed_files; |
309 EXPECT_EQ(FILE_ERROR_OK, ApplyChangeList(change_lists.Pass(), &changed_dirs)); | 312 EXPECT_EQ(FILE_ERROR_OK, |
| 313 ApplyChangeList(change_lists.Pass(), &changed_files)); |
310 | 314 |
311 int64 changestamp = 0; | 315 int64 changestamp = 0; |
312 EXPECT_EQ(FILE_ERROR_OK, metadata_->GetLargestChangestamp(&changestamp)); | 316 EXPECT_EQ(FILE_ERROR_OK, metadata_->GetLargestChangestamp(&changestamp)); |
313 EXPECT_EQ(16815, changestamp); | 317 EXPECT_EQ(16815, changestamp); |
314 EXPECT_FALSE(GetResourceEntry( | 318 EXPECT_FALSE(GetResourceEntry( |
315 "drive/root/Directory 1/SubDirectory File 1.txt")); | 319 "drive/root/Directory 1/SubDirectory File 1.txt")); |
316 EXPECT_TRUE(GetResourceEntry("drive/root/SubDirectory File 1.txt")); | 320 EXPECT_TRUE(GetResourceEntry("drive/root/SubDirectory File 1.txt")); |
317 | 321 |
318 EXPECT_EQ(2U, changed_dirs.size()); | 322 EXPECT_EQ(2U, changed_files.size()); |
319 EXPECT_TRUE(changed_dirs.count( | 323 EXPECT_TRUE(changed_files.count( |
320 base::FilePath::FromUTF8Unsafe("drive/root"))); | 324 base::FilePath::FromUTF8Unsafe("drive/root/SubDirectory File 1.txt"))); |
321 EXPECT_TRUE(changed_dirs.count( | 325 EXPECT_TRUE(changed_files.count(base::FilePath::FromUTF8Unsafe( |
322 base::FilePath::FromUTF8Unsafe("drive/root/Directory 1"))); | 326 "drive/root/Directory 1/SubDirectory File 1.txt"))); |
323 } | 327 } |
324 | 328 |
325 TEST_F(ChangeListProcessorTest, DeltaFileRenamedInDirectory) { | 329 TEST_F(ChangeListProcessorTest, DeltaFileRenamedInDirectory) { |
326 ScopedVector<ChangeList> change_lists; | 330 ScopedVector<ChangeList> change_lists; |
327 change_lists.push_back(new ChangeList); | 331 change_lists.push_back(new ChangeList); |
328 | 332 |
329 ResourceEntry entry; | 333 ResourceEntry entry; |
330 entry.set_resource_id("file:subdirectory_file_1_id"); | 334 entry.set_resource_id("file:subdirectory_file_1_id"); |
331 entry.set_title("New SubDirectory File 1.txt"); | 335 entry.set_title("New SubDirectory File 1.txt"); |
332 change_lists[0]->mutable_entries()->push_back(entry); | 336 change_lists[0]->mutable_entries()->push_back(entry); |
333 change_lists[0]->mutable_parent_resource_ids()->push_back( | 337 change_lists[0]->mutable_parent_resource_ids()->push_back( |
334 "folder:1_folder_resource_id"); | 338 "folder:1_folder_resource_id"); |
335 | 339 |
336 change_lists[0]->set_largest_changestamp(16767); | 340 change_lists[0]->set_largest_changestamp(16767); |
337 | 341 |
338 // Apply the changelist and check the effect. | 342 // Apply the changelist and check the effect. |
339 EXPECT_EQ(FILE_ERROR_OK, ApplyFullResourceList(CreateBaseChangeList())); | 343 EXPECT_EQ(FILE_ERROR_OK, ApplyFullResourceList(CreateBaseChangeList())); |
340 std::set<base::FilePath> changed_dirs; | 344 FileChange changed_files; |
341 EXPECT_EQ(FILE_ERROR_OK, ApplyChangeList(change_lists.Pass(), &changed_dirs)); | 345 EXPECT_EQ(FILE_ERROR_OK, |
| 346 ApplyChangeList(change_lists.Pass(), &changed_files)); |
342 | 347 |
343 int64 changestamp = 0; | 348 int64 changestamp = 0; |
344 EXPECT_EQ(FILE_ERROR_OK, metadata_->GetLargestChangestamp(&changestamp)); | 349 EXPECT_EQ(FILE_ERROR_OK, metadata_->GetLargestChangestamp(&changestamp)); |
345 EXPECT_EQ(16767, changestamp); | 350 EXPECT_EQ(16767, changestamp); |
346 EXPECT_FALSE(GetResourceEntry( | 351 EXPECT_FALSE(GetResourceEntry( |
347 "drive/root/Directory 1/SubDirectory File 1.txt")); | 352 "drive/root/Directory 1/SubDirectory File 1.txt")); |
348 EXPECT_TRUE(GetResourceEntry( | 353 EXPECT_TRUE(GetResourceEntry( |
349 "drive/root/Directory 1/New SubDirectory File 1.txt")); | 354 "drive/root/Directory 1/New SubDirectory File 1.txt")); |
350 | 355 |
351 EXPECT_EQ(1U, changed_dirs.size()); | 356 EXPECT_EQ(2U, changed_files.size()); |
352 EXPECT_TRUE(changed_dirs.count( | 357 EXPECT_TRUE(changed_files.count(base::FilePath::FromUTF8Unsafe( |
353 base::FilePath::FromUTF8Unsafe("drive/root/Directory 1"))); | 358 "drive/root/Directory 1/SubDirectory File 1.txt"))); |
| 359 EXPECT_TRUE(changed_files.count(base::FilePath::FromUTF8Unsafe( |
| 360 "drive/root/Directory 1/New SubDirectory File 1.txt"))); |
354 } | 361 } |
355 | 362 |
356 TEST_F(ChangeListProcessorTest, DeltaAddAndDeleteFileInRoot) { | 363 TEST_F(ChangeListProcessorTest, DeltaAddAndDeleteFileInRoot) { |
357 // Create ChangeList to add a file. | 364 // Create ChangeList to add a file. |
358 ScopedVector<ChangeList> change_lists; | 365 ScopedVector<ChangeList> change_lists; |
359 change_lists.push_back(new ChangeList); | 366 change_lists.push_back(new ChangeList); |
360 | 367 |
361 ResourceEntry entry; | 368 ResourceEntry entry; |
362 entry.set_resource_id("document:added_in_root_id"); | 369 entry.set_resource_id("document:added_in_root_id"); |
363 entry.set_title("Added file.txt"); | 370 entry.set_title("Added file.txt"); |
364 change_lists[0]->mutable_entries()->push_back(entry); | 371 change_lists[0]->mutable_entries()->push_back(entry); |
365 change_lists[0]->mutable_parent_resource_ids()->push_back(kRootId); | 372 change_lists[0]->mutable_parent_resource_ids()->push_back(kRootId); |
366 | 373 |
367 change_lists[0]->set_largest_changestamp(16683); | 374 change_lists[0]->set_largest_changestamp(16683); |
368 | 375 |
369 // Apply. | 376 // Apply. |
370 EXPECT_EQ(FILE_ERROR_OK, ApplyFullResourceList(CreateBaseChangeList())); | 377 EXPECT_EQ(FILE_ERROR_OK, ApplyFullResourceList(CreateBaseChangeList())); |
371 std::set<base::FilePath> changed_dirs; | 378 FileChange changed_files; |
372 EXPECT_EQ(FILE_ERROR_OK, ApplyChangeList(change_lists.Pass(), &changed_dirs)); | 379 EXPECT_EQ(FILE_ERROR_OK, |
| 380 ApplyChangeList(change_lists.Pass(), &changed_files)); |
| 381 |
373 int64 changestamp = 0; | 382 int64 changestamp = 0; |
374 EXPECT_EQ(FILE_ERROR_OK, metadata_->GetLargestChangestamp(&changestamp)); | 383 EXPECT_EQ(FILE_ERROR_OK, metadata_->GetLargestChangestamp(&changestamp)); |
375 EXPECT_EQ(16683, changestamp); | 384 EXPECT_EQ(16683, changestamp); |
376 EXPECT_TRUE(GetResourceEntry("drive/root/Added file.txt")); | 385 EXPECT_TRUE(GetResourceEntry("drive/root/Added file.txt")); |
377 EXPECT_EQ(1U, changed_dirs.size()); | 386 EXPECT_EQ(1U, changed_files.size()); |
378 EXPECT_TRUE(changed_dirs.count( | 387 EXPECT_TRUE(changed_files.count( |
379 base::FilePath::FromUTF8Unsafe("drive/root"))); | 388 base::FilePath::FromUTF8Unsafe("drive/root/Added file.txt"))); |
380 | 389 |
381 // Create ChangeList to delete the file. | 390 // Create ChangeList to delete the file. |
382 change_lists.push_back(new ChangeList); | 391 change_lists.push_back(new ChangeList); |
383 | 392 |
384 entry.set_deleted(true); | 393 entry.set_deleted(true); |
385 change_lists[0]->mutable_entries()->push_back(entry); | 394 change_lists[0]->mutable_entries()->push_back(entry); |
386 change_lists[0]->mutable_parent_resource_ids()->push_back(kRootId); | 395 change_lists[0]->mutable_parent_resource_ids()->push_back(kRootId); |
387 | 396 |
388 change_lists[0]->set_largest_changestamp(16687); | 397 change_lists[0]->set_largest_changestamp(16687); |
389 | 398 |
390 // Apply. | 399 // Apply. |
391 EXPECT_EQ(FILE_ERROR_OK, ApplyChangeList(change_lists.Pass(), &changed_dirs)); | 400 EXPECT_EQ(FILE_ERROR_OK, |
| 401 ApplyChangeList(change_lists.Pass(), &changed_files)); |
392 EXPECT_EQ(FILE_ERROR_OK, metadata_->GetLargestChangestamp(&changestamp)); | 402 EXPECT_EQ(FILE_ERROR_OK, metadata_->GetLargestChangestamp(&changestamp)); |
393 EXPECT_EQ(16687, changestamp); | 403 EXPECT_EQ(16687, changestamp); |
394 EXPECT_FALSE(GetResourceEntry("drive/root/Added file.txt")); | 404 EXPECT_FALSE(GetResourceEntry("drive/root/Added file.txt")); |
395 EXPECT_EQ(1U, changed_dirs.size()); | 405 EXPECT_EQ(1U, changed_files.size()); |
396 EXPECT_TRUE(changed_dirs.count( | 406 EXPECT_TRUE(changed_files.count( |
397 base::FilePath::FromUTF8Unsafe("drive/root"))); | 407 base::FilePath::FromUTF8Unsafe("drive/root/Added file.txt"))); |
398 } | 408 } |
399 | 409 |
400 | 410 |
401 TEST_F(ChangeListProcessorTest, DeltaAddAndDeleteFileFromExistingDirectory) { | 411 TEST_F(ChangeListProcessorTest, DeltaAddAndDeleteFileFromExistingDirectory) { |
402 // Create ChangeList to add a file. | 412 // Create ChangeList to add a file. |
403 ScopedVector<ChangeList> change_lists; | 413 ScopedVector<ChangeList> change_lists; |
404 change_lists.push_back(new ChangeList); | 414 change_lists.push_back(new ChangeList); |
405 | 415 |
406 ResourceEntry entry; | 416 ResourceEntry entry; |
407 entry.set_resource_id("document:added_in_root_id"); | 417 entry.set_resource_id("document:added_in_root_id"); |
408 entry.set_title("Added file.txt"); | 418 entry.set_title("Added file.txt"); |
409 change_lists[0]->mutable_entries()->push_back(entry); | 419 change_lists[0]->mutable_entries()->push_back(entry); |
410 change_lists[0]->mutable_parent_resource_ids()->push_back( | 420 change_lists[0]->mutable_parent_resource_ids()->push_back( |
411 "folder:1_folder_resource_id"); | 421 "folder:1_folder_resource_id"); |
412 | 422 |
413 change_lists[0]->set_largest_changestamp(16730); | 423 change_lists[0]->set_largest_changestamp(16730); |
414 | 424 |
415 // Apply. | 425 // Apply. |
416 EXPECT_EQ(FILE_ERROR_OK, ApplyFullResourceList(CreateBaseChangeList())); | 426 EXPECT_EQ(FILE_ERROR_OK, ApplyFullResourceList(CreateBaseChangeList())); |
417 std::set<base::FilePath> changed_dirs; | 427 FileChange changed_files; |
418 EXPECT_EQ(FILE_ERROR_OK, ApplyChangeList(change_lists.Pass(), &changed_dirs)); | 428 EXPECT_EQ(FILE_ERROR_OK, |
| 429 ApplyChangeList(change_lists.Pass(), &changed_files)); |
419 int64 changestamp = 0; | 430 int64 changestamp = 0; |
420 EXPECT_EQ(FILE_ERROR_OK, metadata_->GetLargestChangestamp(&changestamp)); | 431 EXPECT_EQ(FILE_ERROR_OK, metadata_->GetLargestChangestamp(&changestamp)); |
421 EXPECT_EQ(16730, changestamp); | 432 EXPECT_EQ(16730, changestamp); |
422 EXPECT_TRUE(GetResourceEntry("drive/root/Directory 1/Added file.txt")); | 433 EXPECT_TRUE(GetResourceEntry("drive/root/Directory 1/Added file.txt")); |
423 | 434 |
424 EXPECT_EQ(1U, changed_dirs.size()); | 435 EXPECT_EQ(1U, changed_files.size()); |
425 EXPECT_TRUE(changed_dirs.count( | 436 EXPECT_TRUE(changed_files.count( |
426 base::FilePath::FromUTF8Unsafe("drive/root/Directory 1"))); | 437 base::FilePath::FromUTF8Unsafe("drive/root/Directory 1/Added file.txt"))); |
427 | 438 |
428 // Create ChangeList to delete the file. | 439 // Create ChangeList to delete the file. |
429 change_lists.push_back(new ChangeList); | 440 change_lists.push_back(new ChangeList); |
430 | 441 |
431 entry.set_deleted(true); | 442 entry.set_deleted(true); |
432 change_lists[0]->mutable_entries()->push_back(entry); | 443 change_lists[0]->mutable_entries()->push_back(entry); |
433 change_lists[0]->mutable_parent_resource_ids()->push_back( | 444 change_lists[0]->mutable_parent_resource_ids()->push_back( |
434 "folder:1_folder_resource_id"); | 445 "folder:1_folder_resource_id"); |
435 | 446 |
436 change_lists[0]->set_largest_changestamp(16770); | 447 change_lists[0]->set_largest_changestamp(16770); |
437 | 448 |
438 // Apply. | 449 // Apply. |
439 EXPECT_EQ(FILE_ERROR_OK, ApplyChangeList(change_lists.Pass(), &changed_dirs)); | 450 EXPECT_EQ(FILE_ERROR_OK, |
| 451 ApplyChangeList(change_lists.Pass(), &changed_files)); |
440 EXPECT_EQ(FILE_ERROR_OK, metadata_->GetLargestChangestamp(&changestamp)); | 452 EXPECT_EQ(FILE_ERROR_OK, metadata_->GetLargestChangestamp(&changestamp)); |
441 EXPECT_EQ(16770, changestamp); | 453 EXPECT_EQ(16770, changestamp); |
442 EXPECT_FALSE(GetResourceEntry("drive/root/Directory 1/Added file.txt")); | 454 EXPECT_FALSE(GetResourceEntry("drive/root/Directory 1/Added file.txt")); |
443 | 455 |
444 EXPECT_EQ(1U, changed_dirs.size()); | 456 EXPECT_EQ(1U, changed_files.size()); |
445 EXPECT_TRUE(changed_dirs.count( | 457 EXPECT_TRUE(changed_files.count( |
446 base::FilePath::FromUTF8Unsafe("drive/root/Directory 1"))); | 458 base::FilePath::FromUTF8Unsafe("drive/root/Directory 1/Added file.txt"))); |
447 } | 459 } |
448 | 460 |
449 TEST_F(ChangeListProcessorTest, DeltaAddFileToNewButDeletedDirectory) { | 461 TEST_F(ChangeListProcessorTest, DeltaAddFileToNewButDeletedDirectory) { |
450 // Create a change which contains the following updates: | 462 // Create a change which contains the following updates: |
451 // 1) A new PDF file is added to a new directory | 463 // 1) A new PDF file is added to a new directory |
452 // 2) but the new directory is marked "deleted" (i.e. moved to Trash) | 464 // 2) but the new directory is marked "deleted" (i.e. moved to Trash) |
453 // Hence, the PDF file should be just ignored. | 465 // Hence, the PDF file should be just ignored. |
454 ScopedVector<ChangeList> change_lists; | 466 ScopedVector<ChangeList> change_lists; |
455 change_lists.push_back(new ChangeList); | 467 change_lists.push_back(new ChangeList); |
456 | 468 |
(...skipping 10 matching lines...) Expand all Loading... |
467 directory.set_title("New Directory"); | 479 directory.set_title("New Directory"); |
468 directory.mutable_file_info()->set_is_directory(true); | 480 directory.mutable_file_info()->set_is_directory(true); |
469 directory.set_deleted(true); | 481 directory.set_deleted(true); |
470 change_lists[0]->mutable_entries()->push_back(directory); | 482 change_lists[0]->mutable_entries()->push_back(directory); |
471 change_lists[0]->mutable_parent_resource_ids()->push_back(kRootId); | 483 change_lists[0]->mutable_parent_resource_ids()->push_back(kRootId); |
472 | 484 |
473 change_lists[0]->set_largest_changestamp(16730); | 485 change_lists[0]->set_largest_changestamp(16730); |
474 | 486 |
475 // Apply the changelist and check the effect. | 487 // Apply the changelist and check the effect. |
476 EXPECT_EQ(FILE_ERROR_OK, ApplyFullResourceList(CreateBaseChangeList())); | 488 EXPECT_EQ(FILE_ERROR_OK, ApplyFullResourceList(CreateBaseChangeList())); |
477 std::set<base::FilePath> changed_dirs; | 489 FileChange changed_files; |
478 EXPECT_EQ(FILE_ERROR_OK, ApplyChangeList(change_lists.Pass(), &changed_dirs)); | 490 EXPECT_EQ(FILE_ERROR_OK, |
| 491 ApplyChangeList(change_lists.Pass(), &changed_files)); |
479 | 492 |
480 int64 changestamp = 0; | 493 int64 changestamp = 0; |
481 EXPECT_EQ(FILE_ERROR_OK, metadata_->GetLargestChangestamp(&changestamp)); | 494 EXPECT_EQ(FILE_ERROR_OK, metadata_->GetLargestChangestamp(&changestamp)); |
482 EXPECT_EQ(16730, changestamp); | 495 EXPECT_EQ(16730, changestamp); |
483 EXPECT_FALSE(GetResourceEntry("drive/root/New Directory/new_pdf_file.pdf")); | 496 EXPECT_FALSE(GetResourceEntry("drive/root/New Directory/new_pdf_file.pdf")); |
484 | 497 |
485 EXPECT_TRUE(changed_dirs.empty()); | 498 EXPECT_TRUE(changed_files.empty()); |
486 } | 499 } |
487 | 500 |
488 TEST_F(ChangeListProcessorTest, RefreshDirectory) { | 501 TEST_F(ChangeListProcessorTest, RefreshDirectory) { |
489 // Prepare metadata. | 502 // Prepare metadata. |
490 EXPECT_EQ(FILE_ERROR_OK, ApplyFullResourceList(CreateBaseChangeList())); | 503 EXPECT_EQ(FILE_ERROR_OK, ApplyFullResourceList(CreateBaseChangeList())); |
491 | 504 |
492 // Create change list. | 505 // Create change list. |
493 scoped_ptr<ChangeList> change_list(new ChangeList); | 506 scoped_ptr<ChangeList> change_list(new ChangeList); |
494 | 507 |
495 // Add a new file to the change list. | 508 // Add a new file to the change list. |
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
571 change_lists.push_back(new ChangeList); | 584 change_lists.push_back(new ChangeList); |
572 | 585 |
573 // Add a new file with non-existing parent resource id to the change lists. | 586 // Add a new file with non-existing parent resource id to the change lists. |
574 ResourceEntry new_file; | 587 ResourceEntry new_file; |
575 new_file.set_title("new_file"); | 588 new_file.set_title("new_file"); |
576 new_file.set_resource_id("new_file_id"); | 589 new_file.set_resource_id("new_file_id"); |
577 change_lists[0]->mutable_entries()->push_back(new_file); | 590 change_lists[0]->mutable_entries()->push_back(new_file); |
578 change_lists[0]->mutable_parent_resource_ids()->push_back("nonexisting"); | 591 change_lists[0]->mutable_parent_resource_ids()->push_back("nonexisting"); |
579 change_lists[0]->set_largest_changestamp(kBaseResourceListChangestamp + 1); | 592 change_lists[0]->set_largest_changestamp(kBaseResourceListChangestamp + 1); |
580 | 593 |
581 std::set<base::FilePath> changed_dirs; | 594 FileChange changed_files; |
582 EXPECT_EQ(FILE_ERROR_OK, ApplyChangeList(change_lists.Pass(), &changed_dirs)); | 595 EXPECT_EQ(FILE_ERROR_OK, |
| 596 ApplyChangeList(change_lists.Pass(), &changed_files)); |
583 | 597 |
584 // "new_file" should be added under drive/other. | 598 // "new_file" should be added under drive/other. |
585 ResourceEntry entry; | 599 ResourceEntry entry; |
586 EXPECT_EQ(FILE_ERROR_OK, metadata_->GetResourceEntryByPath( | 600 EXPECT_EQ(FILE_ERROR_OK, metadata_->GetResourceEntryByPath( |
587 util::GetDriveGrandRootPath().AppendASCII("other/new_file"), &entry)); | 601 util::GetDriveGrandRootPath().AppendASCII("other/new_file"), &entry)); |
588 } | 602 } |
589 | 603 |
590 TEST_F(ChangeListProcessorTest, ModificationDate) { | 604 TEST_F(ChangeListProcessorTest, ModificationDate) { |
591 // Prepare metadata. | 605 // Prepare metadata. |
592 EXPECT_EQ(FILE_ERROR_OK, ApplyFullResourceList(CreateBaseChangeList())); | 606 EXPECT_EQ(FILE_ERROR_OK, ApplyFullResourceList(CreateBaseChangeList())); |
(...skipping 22 matching lines...) Expand all Loading... |
615 new_file_local.set_resource_id(new_file_remote.resource_id()); | 629 new_file_local.set_resource_id(new_file_remote.resource_id()); |
616 new_file_local.set_parent_local_id(root.local_id()); | 630 new_file_local.set_parent_local_id(root.local_id()); |
617 new_file_local.set_title("new_file_local"); | 631 new_file_local.set_title("new_file_local"); |
618 new_file_local.set_metadata_edit_state(ResourceEntry::DIRTY); | 632 new_file_local.set_metadata_edit_state(ResourceEntry::DIRTY); |
619 new_file_local.set_modification_date( | 633 new_file_local.set_modification_date( |
620 (now + base::TimeDelta::FromSeconds(1)).ToInternalValue()); | 634 (now + base::TimeDelta::FromSeconds(1)).ToInternalValue()); |
621 std::string local_id; | 635 std::string local_id; |
622 EXPECT_EQ(FILE_ERROR_OK, metadata_->AddEntry(new_file_local, &local_id)); | 636 EXPECT_EQ(FILE_ERROR_OK, metadata_->AddEntry(new_file_local, &local_id)); |
623 | 637 |
624 // Apply the change. | 638 // Apply the change. |
625 std::set<base::FilePath> changed_dirs; | 639 FileChange changed_files; |
626 EXPECT_EQ(FILE_ERROR_OK, ApplyChangeList(change_lists.Pass(), &changed_dirs)); | 640 EXPECT_EQ(FILE_ERROR_OK, |
| 641 ApplyChangeList(change_lists.Pass(), &changed_files)); |
627 | 642 |
628 // The change is rejected due to the old modification date. | 643 // The change is rejected due to the old modification date. |
629 ResourceEntry entry; | 644 ResourceEntry entry; |
630 EXPECT_EQ(FILE_ERROR_OK, metadata_->GetResourceEntryById(local_id, &entry)); | 645 EXPECT_EQ(FILE_ERROR_OK, metadata_->GetResourceEntryById(local_id, &entry)); |
631 EXPECT_EQ(new_file_local.title(), entry.title()); | 646 EXPECT_EQ(new_file_local.title(), entry.title()); |
632 } | 647 } |
633 | 648 |
634 } // namespace internal | 649 } // namespace internal |
635 } // namespace drive | 650 } // namespace drive |
OLD | NEW |