| 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 |