| 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_change_tracker.h" | 5 #include "chrome/browser/sync_file_system/local/local_file_change_tracker.h" |
| 6 | 6 |
| 7 #include <deque> | 7 #include <deque> |
| 8 #include <set> | 8 #include <set> |
| 9 | 9 |
| 10 #include "base/basictypes.h" | 10 #include "base/basictypes.h" |
| (...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 108 base::MessageLoopForIO message_loop_; | 108 base::MessageLoopForIO message_loop_; |
| 109 CannedSyncableFileSystem file_system_; | 109 CannedSyncableFileSystem file_system_; |
| 110 | 110 |
| 111 private: | 111 private: |
| 112 scoped_refptr<LocalFileSyncContext> sync_context_; | 112 scoped_refptr<LocalFileSyncContext> sync_context_; |
| 113 | 113 |
| 114 DISALLOW_COPY_AND_ASSIGN(LocalFileChangeTrackerTest); | 114 DISALLOW_COPY_AND_ASSIGN(LocalFileChangeTrackerTest); |
| 115 }; | 115 }; |
| 116 | 116 |
| 117 TEST_F(LocalFileChangeTrackerTest, GetChanges) { | 117 TEST_F(LocalFileChangeTrackerTest, GetChanges) { |
| 118 EXPECT_EQ(base::PLATFORM_FILE_OK, file_system_.OpenFileSystem()); | 118 EXPECT_EQ(base::File::FILE_OK, file_system_.OpenFileSystem()); |
| 119 | 119 |
| 120 // Test URLs (no parent/child relationships, as we test such cases | 120 // Test URLs (no parent/child relationships, as we test such cases |
| 121 // mainly in LocalFileSyncStatusTest). | 121 // mainly in LocalFileSyncStatusTest). |
| 122 const char kPath0[] = "test/dir a/dir"; | 122 const char kPath0[] = "test/dir a/dir"; |
| 123 const char kPath1[] = "test/dir b"; | 123 const char kPath1[] = "test/dir b"; |
| 124 const char kPath2[] = "test/foo.txt"; | 124 const char kPath2[] = "test/foo.txt"; |
| 125 const char kPath3[] = "test/bar"; | 125 const char kPath3[] = "test/bar"; |
| 126 const char kPath4[] = "temporary/dir a"; | 126 const char kPath4[] = "temporary/dir a"; |
| 127 const char kPath5[] = "temporary/foo"; | 127 const char kPath5[] = "temporary/foo"; |
| 128 | 128 |
| (...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 223 sync_file_system::SYNC_FILE_TYPE_FILE)); | 223 sync_file_system::SYNC_FILE_TYPE_FILE)); |
| 224 VerifyAndClearChange(URL(kPath4), | 224 VerifyAndClearChange(URL(kPath4), |
| 225 FileChange(FileChange::FILE_CHANGE_ADD_OR_UPDATE, | 225 FileChange(FileChange::FILE_CHANGE_ADD_OR_UPDATE, |
| 226 sync_file_system::SYNC_FILE_TYPE_FILE)); | 226 sync_file_system::SYNC_FILE_TYPE_FILE)); |
| 227 VerifyAndClearChange(URL(kPath5), | 227 VerifyAndClearChange(URL(kPath5), |
| 228 FileChange(FileChange::FILE_CHANGE_DELETE, | 228 FileChange(FileChange::FILE_CHANGE_DELETE, |
| 229 sync_file_system::SYNC_FILE_TYPE_FILE)); | 229 sync_file_system::SYNC_FILE_TYPE_FILE)); |
| 230 } | 230 } |
| 231 | 231 |
| 232 TEST_F(LocalFileChangeTrackerTest, RestoreCreateAndModifyChanges) { | 232 TEST_F(LocalFileChangeTrackerTest, RestoreCreateAndModifyChanges) { |
| 233 EXPECT_EQ(base::PLATFORM_FILE_OK, file_system_.OpenFileSystem()); | 233 EXPECT_EQ(base::File::FILE_OK, file_system_.OpenFileSystem()); |
| 234 | 234 |
| 235 FileSystemURLSet urls; | 235 FileSystemURLSet urls; |
| 236 | 236 |
| 237 const char kPath0[] = "file a"; | 237 const char kPath0[] = "file a"; |
| 238 const char kPath1[] = "dir a"; | 238 const char kPath1[] = "dir a"; |
| 239 const char kPath2[] = "dir a/dir"; | 239 const char kPath2[] = "dir a/dir"; |
| 240 const char kPath3[] = "dir a/file a"; | 240 const char kPath3[] = "dir a/file a"; |
| 241 const char kPath4[] = "dir a/file b"; | 241 const char kPath4[] = "dir a/file b"; |
| 242 | 242 |
| 243 file_system_.GetChangedURLsInTracker(&urls); | 243 file_system_.GetChangedURLsInTracker(&urls); |
| 244 ASSERT_EQ(0U, urls.size()); | 244 ASSERT_EQ(0U, urls.size()); |
| 245 | 245 |
| 246 const std::string kData("Lorem ipsum."); | 246 const std::string kData("Lorem ipsum."); |
| 247 MockBlobURLRequestContext url_request_context(file_system_context()); | 247 MockBlobURLRequestContext url_request_context(file_system_context()); |
| 248 ScopedTextBlob blob(url_request_context, "blob_id:test", kData); | 248 ScopedTextBlob blob(url_request_context, "blob_id:test", kData); |
| 249 | 249 |
| 250 // Create files and nested directories. | 250 // Create files and nested directories. |
| 251 EXPECT_EQ(base::PLATFORM_FILE_OK, | 251 EXPECT_EQ(base::File::FILE_OK, |
| 252 file_system_.CreateFile(URL(kPath0))); // Creates a file. | 252 file_system_.CreateFile(URL(kPath0))); // Creates a file. |
| 253 EXPECT_EQ(base::PLATFORM_FILE_OK, | 253 EXPECT_EQ(base::File::FILE_OK, |
| 254 file_system_.CreateDirectory(URL(kPath1))); // Creates a dir. | 254 file_system_.CreateDirectory(URL(kPath1))); // Creates a dir. |
| 255 EXPECT_EQ(base::PLATFORM_FILE_OK, | 255 EXPECT_EQ(base::File::FILE_OK, |
| 256 file_system_.CreateDirectory(URL(kPath2))); // Creates another dir. | 256 file_system_.CreateDirectory(URL(kPath2))); // Creates another dir. |
| 257 EXPECT_EQ(base::PLATFORM_FILE_OK, | 257 EXPECT_EQ(base::File::FILE_OK, |
| 258 file_system_.CreateFile(URL(kPath3))); // Creates a file. | 258 file_system_.CreateFile(URL(kPath3))); // Creates a file. |
| 259 EXPECT_EQ(base::PLATFORM_FILE_OK, | 259 EXPECT_EQ(base::File::FILE_OK, |
| 260 file_system_.TruncateFile(URL(kPath3), 1)); // Modifies the file. | 260 file_system_.TruncateFile(URL(kPath3), 1)); // Modifies the file. |
| 261 EXPECT_EQ(base::PLATFORM_FILE_OK, | 261 EXPECT_EQ(base::File::FILE_OK, |
| 262 file_system_.CreateFile(URL(kPath4))); // Creates another file. | 262 file_system_.CreateFile(URL(kPath4))); // Creates another file. |
| 263 EXPECT_EQ(static_cast<int64>(kData.size()), // Modifies the file. | 263 EXPECT_EQ(static_cast<int64>(kData.size()), // Modifies the file. |
| 264 file_system_.Write(&url_request_context, | 264 file_system_.Write(&url_request_context, |
| 265 URL(kPath4), blob.GetBlobDataHandle())); | 265 URL(kPath4), blob.GetBlobDataHandle())); |
| 266 | 266 |
| 267 // Verify the changes. | 267 // Verify the changes. |
| 268 file_system_.GetChangedURLsInTracker(&urls); | 268 file_system_.GetChangedURLsInTracker(&urls); |
| 269 EXPECT_EQ(5U, urls.size()); | 269 EXPECT_EQ(5U, urls.size()); |
| 270 | 270 |
| 271 // Reset the changes in in-memory tracker. | 271 // Reset the changes in in-memory tracker. |
| (...skipping 20 matching lines...) Expand all Loading... |
| 292 sync_file_system::SYNC_FILE_TYPE_DIRECTORY)); | 292 sync_file_system::SYNC_FILE_TYPE_DIRECTORY)); |
| 293 VerifyAndClearChange(URL(kPath3), | 293 VerifyAndClearChange(URL(kPath3), |
| 294 FileChange(FileChange::FILE_CHANGE_ADD_OR_UPDATE, | 294 FileChange(FileChange::FILE_CHANGE_ADD_OR_UPDATE, |
| 295 sync_file_system::SYNC_FILE_TYPE_FILE)); | 295 sync_file_system::SYNC_FILE_TYPE_FILE)); |
| 296 VerifyAndClearChange(URL(kPath4), | 296 VerifyAndClearChange(URL(kPath4), |
| 297 FileChange(FileChange::FILE_CHANGE_ADD_OR_UPDATE, | 297 FileChange(FileChange::FILE_CHANGE_ADD_OR_UPDATE, |
| 298 sync_file_system::SYNC_FILE_TYPE_FILE)); | 298 sync_file_system::SYNC_FILE_TYPE_FILE)); |
| 299 } | 299 } |
| 300 | 300 |
| 301 TEST_F(LocalFileChangeTrackerTest, RestoreRemoveChanges) { | 301 TEST_F(LocalFileChangeTrackerTest, RestoreRemoveChanges) { |
| 302 EXPECT_EQ(base::PLATFORM_FILE_OK, file_system_.OpenFileSystem()); | 302 EXPECT_EQ(base::File::FILE_OK, file_system_.OpenFileSystem()); |
| 303 | 303 |
| 304 FileSystemURLSet urls; | 304 FileSystemURLSet urls; |
| 305 | 305 |
| 306 const char kPath0[] = "file"; | 306 const char kPath0[] = "file"; |
| 307 const char kPath1[] = "dir a"; | 307 const char kPath1[] = "dir a"; |
| 308 const char kPath2[] = "dir b"; | 308 const char kPath2[] = "dir b"; |
| 309 const char kPath3[] = "dir b/file"; | 309 const char kPath3[] = "dir b/file"; |
| 310 const char kPath4[] = "dir b/dir c"; | 310 const char kPath4[] = "dir b/dir c"; |
| 311 const char kPath5[] = "dir b/dir c/file"; | 311 const char kPath5[] = "dir b/dir c/file"; |
| 312 | 312 |
| 313 file_system_.GetChangedURLsInTracker(&urls); | 313 file_system_.GetChangedURLsInTracker(&urls); |
| 314 ASSERT_EQ(0U, urls.size()); | 314 ASSERT_EQ(0U, urls.size()); |
| 315 | 315 |
| 316 // Creates and removes a same file. | 316 // Creates and removes a same file. |
| 317 EXPECT_EQ(base::PLATFORM_FILE_OK, | 317 EXPECT_EQ(base::File::FILE_OK, |
| 318 file_system_.CreateFile(URL(kPath0))); | 318 file_system_.CreateFile(URL(kPath0))); |
| 319 EXPECT_EQ(base::PLATFORM_FILE_OK, | 319 EXPECT_EQ(base::File::FILE_OK, |
| 320 file_system_.Remove(URL(kPath0), false /* recursive */)); | 320 file_system_.Remove(URL(kPath0), false /* recursive */)); |
| 321 | 321 |
| 322 // Creates and removes a same directory. | 322 // Creates and removes a same directory. |
| 323 EXPECT_EQ(base::PLATFORM_FILE_OK, | 323 EXPECT_EQ(base::File::FILE_OK, |
| 324 file_system_.CreateDirectory(URL(kPath1))); | 324 file_system_.CreateDirectory(URL(kPath1))); |
| 325 EXPECT_EQ(base::PLATFORM_FILE_OK, | 325 EXPECT_EQ(base::File::FILE_OK, |
| 326 file_system_.Remove(URL(kPath1), false /* recursive */)); | 326 file_system_.Remove(URL(kPath1), false /* recursive */)); |
| 327 | 327 |
| 328 // Creates files and nested directories, then removes the parent directory. | 328 // Creates files and nested directories, then removes the parent directory. |
| 329 EXPECT_EQ(base::PLATFORM_FILE_OK, | 329 EXPECT_EQ(base::File::FILE_OK, |
| 330 file_system_.CreateDirectory(URL(kPath2))); | 330 file_system_.CreateDirectory(URL(kPath2))); |
| 331 EXPECT_EQ(base::PLATFORM_FILE_OK, | 331 EXPECT_EQ(base::File::FILE_OK, |
| 332 file_system_.CreateFile(URL(kPath3))); | 332 file_system_.CreateFile(URL(kPath3))); |
| 333 EXPECT_EQ(base::PLATFORM_FILE_OK, | 333 EXPECT_EQ(base::File::FILE_OK, |
| 334 file_system_.CreateDirectory(URL(kPath4))); | 334 file_system_.CreateDirectory(URL(kPath4))); |
| 335 EXPECT_EQ(base::PLATFORM_FILE_OK, | 335 EXPECT_EQ(base::File::FILE_OK, |
| 336 file_system_.CreateFile(URL(kPath5))); | 336 file_system_.CreateFile(URL(kPath5))); |
| 337 EXPECT_EQ(base::PLATFORM_FILE_OK, | 337 EXPECT_EQ(base::File::FILE_OK, |
| 338 file_system_.Remove(URL(kPath2), true /* recursive */)); | 338 file_system_.Remove(URL(kPath2), true /* recursive */)); |
| 339 | 339 |
| 340 file_system_.GetChangedURLsInTracker(&urls); | 340 file_system_.GetChangedURLsInTracker(&urls); |
| 341 EXPECT_EQ(3U, urls.size()); | 341 EXPECT_EQ(3U, urls.size()); |
| 342 | 342 |
| 343 DropChangesInTracker(); | 343 DropChangesInTracker(); |
| 344 | 344 |
| 345 // Make sure we have no in-memory changes in the tracker. | 345 // Make sure we have no in-memory changes in the tracker. |
| 346 file_system_.GetChangedURLsInTracker(&urls); | 346 file_system_.GetChangedURLsInTracker(&urls); |
| 347 ASSERT_EQ(0U, urls.size()); | 347 ASSERT_EQ(0U, urls.size()); |
| (...skipping 20 matching lines...) Expand all Loading... |
| 368 sync_file_system::SYNC_FILE_TYPE_UNKNOWN)); | 368 sync_file_system::SYNC_FILE_TYPE_UNKNOWN)); |
| 369 VerifyAndClearChange(URL(kPath4), | 369 VerifyAndClearChange(URL(kPath4), |
| 370 FileChange(FileChange::FILE_CHANGE_DELETE, | 370 FileChange(FileChange::FILE_CHANGE_DELETE, |
| 371 sync_file_system::SYNC_FILE_TYPE_UNKNOWN)); | 371 sync_file_system::SYNC_FILE_TYPE_UNKNOWN)); |
| 372 VerifyAndClearChange(URL(kPath5), | 372 VerifyAndClearChange(URL(kPath5), |
| 373 FileChange(FileChange::FILE_CHANGE_DELETE, | 373 FileChange(FileChange::FILE_CHANGE_DELETE, |
| 374 sync_file_system::SYNC_FILE_TYPE_UNKNOWN)); | 374 sync_file_system::SYNC_FILE_TYPE_UNKNOWN)); |
| 375 } | 375 } |
| 376 | 376 |
| 377 TEST_F(LocalFileChangeTrackerTest, RestoreCopyChanges) { | 377 TEST_F(LocalFileChangeTrackerTest, RestoreCopyChanges) { |
| 378 EXPECT_EQ(base::PLATFORM_FILE_OK, file_system_.OpenFileSystem()); | 378 EXPECT_EQ(base::File::FILE_OK, file_system_.OpenFileSystem()); |
| 379 | 379 |
| 380 FileSystemURLSet urls; | 380 FileSystemURLSet urls; |
| 381 | 381 |
| 382 const char kPath0[] = "file a"; | 382 const char kPath0[] = "file a"; |
| 383 const char kPath1[] = "dir a"; | 383 const char kPath1[] = "dir a"; |
| 384 const char kPath2[] = "dir a/dir"; | 384 const char kPath2[] = "dir a/dir"; |
| 385 const char kPath3[] = "dir a/file a"; | 385 const char kPath3[] = "dir a/file a"; |
| 386 const char kPath4[] = "dir a/file b"; | 386 const char kPath4[] = "dir a/file b"; |
| 387 | 387 |
| 388 const char kPath0Copy[] = "file b"; // To be copied from kPath0 | 388 const char kPath0Copy[] = "file b"; // To be copied from kPath0 |
| 389 const char kPath1Copy[] = "dir b"; // To be copied from kPath1 | 389 const char kPath1Copy[] = "dir b"; // To be copied from kPath1 |
| 390 const char kPath2Copy[] = "dir b/dir"; // To be copied from kPath2 | 390 const char kPath2Copy[] = "dir b/dir"; // To be copied from kPath2 |
| 391 const char kPath3Copy[] = "dir b/file a"; // To be copied from kPath3 | 391 const char kPath3Copy[] = "dir b/file a"; // To be copied from kPath3 |
| 392 const char kPath4Copy[] = "dir b/file b"; // To be copied from kPath4 | 392 const char kPath4Copy[] = "dir b/file b"; // To be copied from kPath4 |
| 393 | 393 |
| 394 file_system_.GetChangedURLsInTracker(&urls); | 394 file_system_.GetChangedURLsInTracker(&urls); |
| 395 ASSERT_EQ(0U, urls.size()); | 395 ASSERT_EQ(0U, urls.size()); |
| 396 | 396 |
| 397 const std::string kData("Lorem ipsum."); | 397 const std::string kData("Lorem ipsum."); |
| 398 MockBlobURLRequestContext url_request_context(file_system_context()); | 398 MockBlobURLRequestContext url_request_context(file_system_context()); |
| 399 ScopedTextBlob blob(url_request_context, "blob_id:test", kData); | 399 ScopedTextBlob blob(url_request_context, "blob_id:test", kData); |
| 400 | 400 |
| 401 // Create files and nested directories. | 401 // Create files and nested directories. |
| 402 EXPECT_EQ(base::PLATFORM_FILE_OK, | 402 EXPECT_EQ(base::File::FILE_OK, |
| 403 file_system_.CreateFile(URL(kPath0))); // Creates a file. | 403 file_system_.CreateFile(URL(kPath0))); // Creates a file. |
| 404 EXPECT_EQ(base::PLATFORM_FILE_OK, | 404 EXPECT_EQ(base::File::FILE_OK, |
| 405 file_system_.CreateDirectory(URL(kPath1))); // Creates a dir. | 405 file_system_.CreateDirectory(URL(kPath1))); // Creates a dir. |
| 406 EXPECT_EQ(base::PLATFORM_FILE_OK, | 406 EXPECT_EQ(base::File::FILE_OK, |
| 407 file_system_.CreateDirectory(URL(kPath2))); // Creates another dir. | 407 file_system_.CreateDirectory(URL(kPath2))); // Creates another dir. |
| 408 EXPECT_EQ(base::PLATFORM_FILE_OK, | 408 EXPECT_EQ(base::File::FILE_OK, |
| 409 file_system_.CreateFile(URL(kPath3))); // Creates a file. | 409 file_system_.CreateFile(URL(kPath3))); // Creates a file. |
| 410 EXPECT_EQ(base::PLATFORM_FILE_OK, | 410 EXPECT_EQ(base::File::FILE_OK, |
| 411 file_system_.TruncateFile(URL(kPath3), 1)); // Modifies the file. | 411 file_system_.TruncateFile(URL(kPath3), 1)); // Modifies the file. |
| 412 EXPECT_EQ(base::PLATFORM_FILE_OK, | 412 EXPECT_EQ(base::File::FILE_OK, |
| 413 file_system_.CreateFile(URL(kPath4))); // Creates another file. | 413 file_system_.CreateFile(URL(kPath4))); // Creates another file. |
| 414 EXPECT_EQ(static_cast<int64>(kData.size()), | 414 EXPECT_EQ(static_cast<int64>(kData.size()), |
| 415 file_system_.Write(&url_request_context, // Modifies the file. | 415 file_system_.Write(&url_request_context, // Modifies the file. |
| 416 URL(kPath4), blob.GetBlobDataHandle())); | 416 URL(kPath4), blob.GetBlobDataHandle())); |
| 417 | 417 |
| 418 // Verify we have 5 changes for preparation. | 418 // Verify we have 5 changes for preparation. |
| 419 file_system_.GetChangedURLsInTracker(&urls); | 419 file_system_.GetChangedURLsInTracker(&urls); |
| 420 EXPECT_EQ(5U, urls.size()); | 420 EXPECT_EQ(5U, urls.size()); |
| 421 change_tracker()->ClearChangesForURL(URL(kPath0)); | 421 change_tracker()->ClearChangesForURL(URL(kPath0)); |
| 422 change_tracker()->ClearChangesForURL(URL(kPath1)); | 422 change_tracker()->ClearChangesForURL(URL(kPath1)); |
| 423 change_tracker()->ClearChangesForURL(URL(kPath2)); | 423 change_tracker()->ClearChangesForURL(URL(kPath2)); |
| 424 change_tracker()->ClearChangesForURL(URL(kPath3)); | 424 change_tracker()->ClearChangesForURL(URL(kPath3)); |
| 425 change_tracker()->ClearChangesForURL(URL(kPath4)); | 425 change_tracker()->ClearChangesForURL(URL(kPath4)); |
| 426 | 426 |
| 427 // Make sure we have no changes. | 427 // Make sure we have no changes. |
| 428 file_system_.GetChangedURLsInTracker(&urls); | 428 file_system_.GetChangedURLsInTracker(&urls); |
| 429 EXPECT_TRUE(urls.empty()); | 429 EXPECT_TRUE(urls.empty()); |
| 430 | 430 |
| 431 // Copy the file and the parent directory. | 431 // Copy the file and the parent directory. |
| 432 EXPECT_EQ(base::PLATFORM_FILE_OK, | 432 EXPECT_EQ(base::File::FILE_OK, |
| 433 file_system_.Copy(URL(kPath0), URL(kPath0Copy))); // Copy the file. | 433 file_system_.Copy(URL(kPath0), URL(kPath0Copy))); // Copy the file. |
| 434 EXPECT_EQ(base::PLATFORM_FILE_OK, | 434 EXPECT_EQ(base::File::FILE_OK, |
| 435 file_system_.Copy(URL(kPath1), URL(kPath1Copy))); // Copy the dir. | 435 file_system_.Copy(URL(kPath1), URL(kPath1Copy))); // Copy the dir. |
| 436 | 436 |
| 437 file_system_.GetChangedURLsInTracker(&urls); | 437 file_system_.GetChangedURLsInTracker(&urls); |
| 438 EXPECT_EQ(5U, urls.size()); | 438 EXPECT_EQ(5U, urls.size()); |
| 439 DropChangesInTracker(); | 439 DropChangesInTracker(); |
| 440 | 440 |
| 441 // Make sure we have no in-memory changes in the tracker. | 441 // Make sure we have no in-memory changes in the tracker. |
| 442 file_system_.GetChangedURLsInTracker(&urls); | 442 file_system_.GetChangedURLsInTracker(&urls); |
| 443 ASSERT_EQ(0U, urls.size()); | 443 ASSERT_EQ(0U, urls.size()); |
| 444 | 444 |
| (...skipping 14 matching lines...) Expand all Loading... |
| 459 sync_file_system::SYNC_FILE_TYPE_DIRECTORY)); | 459 sync_file_system::SYNC_FILE_TYPE_DIRECTORY)); |
| 460 VerifyAndClearChange(URL(kPath3Copy), | 460 VerifyAndClearChange(URL(kPath3Copy), |
| 461 FileChange(FileChange::FILE_CHANGE_ADD_OR_UPDATE, | 461 FileChange(FileChange::FILE_CHANGE_ADD_OR_UPDATE, |
| 462 sync_file_system::SYNC_FILE_TYPE_FILE)); | 462 sync_file_system::SYNC_FILE_TYPE_FILE)); |
| 463 VerifyAndClearChange(URL(kPath4Copy), | 463 VerifyAndClearChange(URL(kPath4Copy), |
| 464 FileChange(FileChange::FILE_CHANGE_ADD_OR_UPDATE, | 464 FileChange(FileChange::FILE_CHANGE_ADD_OR_UPDATE, |
| 465 sync_file_system::SYNC_FILE_TYPE_FILE)); | 465 sync_file_system::SYNC_FILE_TYPE_FILE)); |
| 466 } | 466 } |
| 467 | 467 |
| 468 TEST_F(LocalFileChangeTrackerTest, RestoreMoveChanges) { | 468 TEST_F(LocalFileChangeTrackerTest, RestoreMoveChanges) { |
| 469 EXPECT_EQ(base::PLATFORM_FILE_OK, file_system_.OpenFileSystem()); | 469 EXPECT_EQ(base::File::FILE_OK, file_system_.OpenFileSystem()); |
| 470 | 470 |
| 471 FileSystemURLSet urls; | 471 FileSystemURLSet urls; |
| 472 | 472 |
| 473 const char kPath0[] = "file a"; | 473 const char kPath0[] = "file a"; |
| 474 const char kPath1[] = "dir a"; | 474 const char kPath1[] = "dir a"; |
| 475 const char kPath2[] = "dir a/file"; | 475 const char kPath2[] = "dir a/file"; |
| 476 const char kPath3[] = "dir a/dir"; | 476 const char kPath3[] = "dir a/dir"; |
| 477 const char kPath4[] = "dir a/dir/file"; | 477 const char kPath4[] = "dir a/dir/file"; |
| 478 | 478 |
| 479 const char kPath5[] = "file b"; // To be moved from kPath0. | 479 const char kPath5[] = "file b"; // To be moved from kPath0. |
| 480 const char kPath6[] = "dir b"; // To be moved from kPath1. | 480 const char kPath6[] = "dir b"; // To be moved from kPath1. |
| 481 const char kPath7[] = "dir b/file"; // To be moved from kPath2. | 481 const char kPath7[] = "dir b/file"; // To be moved from kPath2. |
| 482 const char kPath8[] = "dir b/dir"; // To be moved from kPath3. | 482 const char kPath8[] = "dir b/dir"; // To be moved from kPath3. |
| 483 const char kPath9[] = "dir b/dir/file"; // To be moved from kPath4. | 483 const char kPath9[] = "dir b/dir/file"; // To be moved from kPath4. |
| 484 | 484 |
| 485 file_system_.GetChangedURLsInTracker(&urls); | 485 file_system_.GetChangedURLsInTracker(&urls); |
| 486 ASSERT_EQ(0U, urls.size()); | 486 ASSERT_EQ(0U, urls.size()); |
| 487 | 487 |
| 488 // Create files and nested directories. | 488 // Create files and nested directories. |
| 489 EXPECT_EQ(base::PLATFORM_FILE_OK, | 489 EXPECT_EQ(base::File::FILE_OK, |
| 490 file_system_.CreateFile(URL(kPath0))); | 490 file_system_.CreateFile(URL(kPath0))); |
| 491 EXPECT_EQ(base::PLATFORM_FILE_OK, | 491 EXPECT_EQ(base::File::FILE_OK, |
| 492 file_system_.CreateDirectory(URL(kPath1))); | 492 file_system_.CreateDirectory(URL(kPath1))); |
| 493 EXPECT_EQ(base::PLATFORM_FILE_OK, | 493 EXPECT_EQ(base::File::FILE_OK, |
| 494 file_system_.CreateFile(URL(kPath2))); | 494 file_system_.CreateFile(URL(kPath2))); |
| 495 EXPECT_EQ(base::PLATFORM_FILE_OK, | 495 EXPECT_EQ(base::File::FILE_OK, |
| 496 file_system_.CreateDirectory(URL(kPath3))); | 496 file_system_.CreateDirectory(URL(kPath3))); |
| 497 EXPECT_EQ(base::PLATFORM_FILE_OK, | 497 EXPECT_EQ(base::File::FILE_OK, |
| 498 file_system_.CreateFile(URL(kPath4))); | 498 file_system_.CreateFile(URL(kPath4))); |
| 499 | 499 |
| 500 // Verify we have 5 changes for preparation. | 500 // Verify we have 5 changes for preparation. |
| 501 file_system_.GetChangedURLsInTracker(&urls); | 501 file_system_.GetChangedURLsInTracker(&urls); |
| 502 EXPECT_EQ(5U, urls.size()); | 502 EXPECT_EQ(5U, urls.size()); |
| 503 change_tracker()->ClearChangesForURL(URL(kPath0)); | 503 change_tracker()->ClearChangesForURL(URL(kPath0)); |
| 504 change_tracker()->ClearChangesForURL(URL(kPath1)); | 504 change_tracker()->ClearChangesForURL(URL(kPath1)); |
| 505 change_tracker()->ClearChangesForURL(URL(kPath2)); | 505 change_tracker()->ClearChangesForURL(URL(kPath2)); |
| 506 change_tracker()->ClearChangesForURL(URL(kPath3)); | 506 change_tracker()->ClearChangesForURL(URL(kPath3)); |
| 507 change_tracker()->ClearChangesForURL(URL(kPath4)); | 507 change_tracker()->ClearChangesForURL(URL(kPath4)); |
| 508 | 508 |
| 509 // Make sure we have no changes. | 509 // Make sure we have no changes. |
| 510 file_system_.GetChangedURLsInTracker(&urls); | 510 file_system_.GetChangedURLsInTracker(&urls); |
| 511 EXPECT_TRUE(urls.empty()); | 511 EXPECT_TRUE(urls.empty()); |
| 512 | 512 |
| 513 // Move the file and the parent directory. | 513 // Move the file and the parent directory. |
| 514 EXPECT_EQ(base::PLATFORM_FILE_OK, | 514 EXPECT_EQ(base::File::FILE_OK, |
| 515 file_system_.Move(URL(kPath0), URL(kPath5))); | 515 file_system_.Move(URL(kPath0), URL(kPath5))); |
| 516 EXPECT_EQ(base::PLATFORM_FILE_OK, | 516 EXPECT_EQ(base::File::FILE_OK, |
| 517 file_system_.Move(URL(kPath1), URL(kPath6))); | 517 file_system_.Move(URL(kPath1), URL(kPath6))); |
| 518 | 518 |
| 519 file_system_.GetChangedURLsInTracker(&urls); | 519 file_system_.GetChangedURLsInTracker(&urls); |
| 520 EXPECT_EQ(10U, urls.size()); | 520 EXPECT_EQ(10U, urls.size()); |
| 521 | 521 |
| 522 DropChangesInTracker(); | 522 DropChangesInTracker(); |
| 523 | 523 |
| 524 // Make sure we have no in-memory changes in the tracker. | 524 // Make sure we have no in-memory changes in the tracker. |
| 525 file_system_.GetChangedURLsInTracker(&urls); | 525 file_system_.GetChangedURLsInTracker(&urls); |
| 526 ASSERT_EQ(0U, urls.size()); | 526 ASSERT_EQ(0U, urls.size()); |
| (...skipping 26 matching lines...) Expand all Loading... |
| 553 sync_file_system::SYNC_FILE_TYPE_FILE)); | 553 sync_file_system::SYNC_FILE_TYPE_FILE)); |
| 554 VerifyAndClearChange(URL(kPath8), | 554 VerifyAndClearChange(URL(kPath8), |
| 555 FileChange(FileChange::FILE_CHANGE_ADD_OR_UPDATE, | 555 FileChange(FileChange::FILE_CHANGE_ADD_OR_UPDATE, |
| 556 sync_file_system::SYNC_FILE_TYPE_DIRECTORY)); | 556 sync_file_system::SYNC_FILE_TYPE_DIRECTORY)); |
| 557 VerifyAndClearChange(URL(kPath9), | 557 VerifyAndClearChange(URL(kPath9), |
| 558 FileChange(FileChange::FILE_CHANGE_ADD_OR_UPDATE, | 558 FileChange(FileChange::FILE_CHANGE_ADD_OR_UPDATE, |
| 559 sync_file_system::SYNC_FILE_TYPE_FILE)); | 559 sync_file_system::SYNC_FILE_TYPE_FILE)); |
| 560 } | 560 } |
| 561 | 561 |
| 562 TEST_F(LocalFileChangeTrackerTest, NextChangedURLsWithRecursiveCopy) { | 562 TEST_F(LocalFileChangeTrackerTest, NextChangedURLsWithRecursiveCopy) { |
| 563 EXPECT_EQ(base::PLATFORM_FILE_OK, file_system_.OpenFileSystem()); | 563 EXPECT_EQ(base::File::FILE_OK, file_system_.OpenFileSystem()); |
| 564 | 564 |
| 565 FileSystemURLSet urls; | 565 FileSystemURLSet urls; |
| 566 | 566 |
| 567 const char kPath0[] = "dir a"; | 567 const char kPath0[] = "dir a"; |
| 568 const char kPath1[] = "dir a/file"; | 568 const char kPath1[] = "dir a/file"; |
| 569 const char kPath2[] = "dir a/dir"; | 569 const char kPath2[] = "dir a/dir"; |
| 570 | 570 |
| 571 const char kPath0Copy[] = "dir b"; | 571 const char kPath0Copy[] = "dir b"; |
| 572 const char kPath1Copy[] = "dir b/file"; | 572 const char kPath1Copy[] = "dir b/file"; |
| 573 const char kPath2Copy[] = "dir b/dir"; | 573 const char kPath2Copy[] = "dir b/dir"; |
| 574 | 574 |
| 575 // Creates kPath0,1,2 and then copies them all. | 575 // Creates kPath0,1,2 and then copies them all. |
| 576 EXPECT_EQ(base::PLATFORM_FILE_OK, | 576 EXPECT_EQ(base::File::FILE_OK, |
| 577 file_system_.CreateDirectory(URL(kPath0))); | 577 file_system_.CreateDirectory(URL(kPath0))); |
| 578 EXPECT_EQ(base::PLATFORM_FILE_OK, | 578 EXPECT_EQ(base::File::FILE_OK, |
| 579 file_system_.CreateFile(URL(kPath1))); | 579 file_system_.CreateFile(URL(kPath1))); |
| 580 EXPECT_EQ(base::PLATFORM_FILE_OK, | 580 EXPECT_EQ(base::File::FILE_OK, |
| 581 file_system_.CreateDirectory(URL(kPath2))); | 581 file_system_.CreateDirectory(URL(kPath2))); |
| 582 EXPECT_EQ(base::PLATFORM_FILE_OK, | 582 EXPECT_EQ(base::File::FILE_OK, |
| 583 file_system_.Copy(URL(kPath0), URL(kPath0Copy))); | 583 file_system_.Copy(URL(kPath0), URL(kPath0Copy))); |
| 584 | 584 |
| 585 std::deque<FileSystemURL> urls_to_process; | 585 std::deque<FileSystemURL> urls_to_process; |
| 586 change_tracker()->GetNextChangedURLs(&urls_to_process, 0); | 586 change_tracker()->GetNextChangedURLs(&urls_to_process, 0); |
| 587 ASSERT_EQ(6U, urls_to_process.size()); | 587 ASSERT_EQ(6U, urls_to_process.size()); |
| 588 | 588 |
| 589 // Creation must have occured first. | 589 // Creation must have occured first. |
| 590 EXPECT_EQ(URL(kPath0), urls_to_process[0]); | 590 EXPECT_EQ(URL(kPath0), urls_to_process[0]); |
| 591 EXPECT_EQ(URL(kPath1), urls_to_process[1]); | 591 EXPECT_EQ(URL(kPath1), urls_to_process[1]); |
| 592 EXPECT_EQ(URL(kPath2), urls_to_process[2]); | 592 EXPECT_EQ(URL(kPath2), urls_to_process[2]); |
| 593 | 593 |
| 594 // Then recursive copy took place. The exact order cannot be determined | 594 // Then recursive copy took place. The exact order cannot be determined |
| 595 // but the parent directory must have been created first. | 595 // but the parent directory must have been created first. |
| 596 EXPECT_EQ(URL(kPath0Copy), urls_to_process[3]); | 596 EXPECT_EQ(URL(kPath0Copy), urls_to_process[3]); |
| 597 EXPECT_TRUE(URL(kPath1Copy) == urls_to_process[4] || | 597 EXPECT_TRUE(URL(kPath1Copy) == urls_to_process[4] || |
| 598 URL(kPath2Copy) == urls_to_process[4]); | 598 URL(kPath2Copy) == urls_to_process[4]); |
| 599 EXPECT_TRUE(URL(kPath1Copy) == urls_to_process[5] || | 599 EXPECT_TRUE(URL(kPath1Copy) == urls_to_process[5] || |
| 600 URL(kPath2Copy) == urls_to_process[5]); | 600 URL(kPath2Copy) == urls_to_process[5]); |
| 601 } | 601 } |
| 602 | 602 |
| 603 TEST_F(LocalFileChangeTrackerTest, NextChangedURLsWithRecursiveRemove) { | 603 TEST_F(LocalFileChangeTrackerTest, NextChangedURLsWithRecursiveRemove) { |
| 604 EXPECT_EQ(base::PLATFORM_FILE_OK, file_system_.OpenFileSystem()); | 604 EXPECT_EQ(base::File::FILE_OK, file_system_.OpenFileSystem()); |
| 605 | 605 |
| 606 const char kPath0[] = "dir a"; | 606 const char kPath0[] = "dir a"; |
| 607 const char kPath1[] = "dir a/file1"; | 607 const char kPath1[] = "dir a/file1"; |
| 608 const char kPath2[] = "dir a/file2"; | 608 const char kPath2[] = "dir a/file2"; |
| 609 | 609 |
| 610 // Creates kPath0,1,2 and then removes them all. | 610 // Creates kPath0,1,2 and then removes them all. |
| 611 EXPECT_EQ(base::PLATFORM_FILE_OK, | 611 EXPECT_EQ(base::File::FILE_OK, |
| 612 file_system_.CreateDirectory(URL(kPath0))); | 612 file_system_.CreateDirectory(URL(kPath0))); |
| 613 EXPECT_EQ(base::PLATFORM_FILE_OK, | 613 EXPECT_EQ(base::File::FILE_OK, |
| 614 file_system_.CreateFile(URL(kPath1))); | 614 file_system_.CreateFile(URL(kPath1))); |
| 615 EXPECT_EQ(base::PLATFORM_FILE_OK, | 615 EXPECT_EQ(base::File::FILE_OK, |
| 616 file_system_.CreateFile(URL(kPath2))); | 616 file_system_.CreateFile(URL(kPath2))); |
| 617 EXPECT_EQ(base::PLATFORM_FILE_OK, | 617 EXPECT_EQ(base::File::FILE_OK, |
| 618 file_system_.Remove(URL(kPath0), true /* recursive */)); | 618 file_system_.Remove(URL(kPath0), true /* recursive */)); |
| 619 | 619 |
| 620 FileSystemURLSet urls; | 620 FileSystemURLSet urls; |
| 621 GetAllChangedURLs(&urls); | 621 GetAllChangedURLs(&urls); |
| 622 | 622 |
| 623 // This is actually not really desirable, but since the directory | 623 // This is actually not really desirable, but since the directory |
| 624 // creation and deletion have been offset now we only have two | 624 // creation and deletion have been offset now we only have two |
| 625 // file deletion changes. | 625 // file deletion changes. |
| 626 // | 626 // |
| 627 // NOTE: This will cause 2 local sync for deleting nonexistent files | 627 // NOTE: This will cause 2 local sync for deleting nonexistent files |
| 628 // on the remote side. | 628 // on the remote side. |
| 629 // | 629 // |
| 630 // TODO(kinuko): For micro optimization we could probably restore the ADD | 630 // TODO(kinuko): For micro optimization we could probably restore the ADD |
| 631 // change type (other than ADD_OR_UPDATE) and offset file ADD+DELETE | 631 // change type (other than ADD_OR_UPDATE) and offset file ADD+DELETE |
| 632 // changes too. | 632 // changes too. |
| 633 ASSERT_EQ(2U, urls.size()); | 633 ASSERT_EQ(2U, urls.size()); |
| 634 | 634 |
| 635 // The exact order of recursive removal cannot be determined. | 635 // The exact order of recursive removal cannot be determined. |
| 636 EXPECT_TRUE(ContainsKey(urls, URL(kPath1))); | 636 EXPECT_TRUE(ContainsKey(urls, URL(kPath1))); |
| 637 EXPECT_TRUE(ContainsKey(urls, URL(kPath2))); | 637 EXPECT_TRUE(ContainsKey(urls, URL(kPath2))); |
| 638 } | 638 } |
| 639 | 639 |
| 640 TEST_F(LocalFileChangeTrackerTest, ResetForFileSystem) { | 640 TEST_F(LocalFileChangeTrackerTest, ResetForFileSystem) { |
| 641 EXPECT_EQ(base::PLATFORM_FILE_OK, file_system_.OpenFileSystem()); | 641 EXPECT_EQ(base::File::FILE_OK, file_system_.OpenFileSystem()); |
| 642 | 642 |
| 643 const char kPath0[] = "dir a"; | 643 const char kPath0[] = "dir a"; |
| 644 const char kPath1[] = "dir a/file"; | 644 const char kPath1[] = "dir a/file"; |
| 645 const char kPath2[] = "dir a/subdir"; | 645 const char kPath2[] = "dir a/subdir"; |
| 646 const char kPath3[] = "dir b"; | 646 const char kPath3[] = "dir b"; |
| 647 | 647 |
| 648 EXPECT_EQ(base::PLATFORM_FILE_OK, | 648 EXPECT_EQ(base::File::FILE_OK, |
| 649 file_system_.CreateDirectory(URL(kPath0))); | 649 file_system_.CreateDirectory(URL(kPath0))); |
| 650 EXPECT_EQ(base::PLATFORM_FILE_OK, | 650 EXPECT_EQ(base::File::FILE_OK, |
| 651 file_system_.CreateFile(URL(kPath1))); | 651 file_system_.CreateFile(URL(kPath1))); |
| 652 EXPECT_EQ(base::PLATFORM_FILE_OK, | 652 EXPECT_EQ(base::File::FILE_OK, |
| 653 file_system_.CreateDirectory(URL(kPath2))); | 653 file_system_.CreateDirectory(URL(kPath2))); |
| 654 EXPECT_EQ(base::PLATFORM_FILE_OK, | 654 EXPECT_EQ(base::File::FILE_OK, |
| 655 file_system_.CreateDirectory(URL(kPath3))); | 655 file_system_.CreateDirectory(URL(kPath3))); |
| 656 | 656 |
| 657 FileSystemURLSet urls; | 657 FileSystemURLSet urls; |
| 658 GetAllChangedURLs(&urls); | 658 GetAllChangedURLs(&urls); |
| 659 EXPECT_EQ(4u, urls.size()); | 659 EXPECT_EQ(4u, urls.size()); |
| 660 EXPECT_TRUE(ContainsKey(urls, URL(kPath0))); | 660 EXPECT_TRUE(ContainsKey(urls, URL(kPath0))); |
| 661 EXPECT_TRUE(ContainsKey(urls, URL(kPath1))); | 661 EXPECT_TRUE(ContainsKey(urls, URL(kPath1))); |
| 662 EXPECT_TRUE(ContainsKey(urls, URL(kPath2))); | 662 EXPECT_TRUE(ContainsKey(urls, URL(kPath2))); |
| 663 EXPECT_TRUE(ContainsKey(urls, URL(kPath3))); | 663 EXPECT_TRUE(ContainsKey(urls, URL(kPath3))); |
| 664 | 664 |
| 665 // Reset all changes for the file system. | 665 // Reset all changes for the file system. |
| 666 change_tracker()->ResetForFileSystem( | 666 change_tracker()->ResetForFileSystem( |
| 667 file_system_.origin(), file_system_.type()); | 667 file_system_.origin(), file_system_.type()); |
| 668 | 668 |
| 669 GetAllChangedURLs(&urls); | 669 GetAllChangedURLs(&urls); |
| 670 EXPECT_TRUE(urls.empty()); | 670 EXPECT_TRUE(urls.empty()); |
| 671 | 671 |
| 672 // Make sure they're gone from the database too. | 672 // Make sure they're gone from the database too. |
| 673 DropChangesInTracker(); | 673 DropChangesInTracker(); |
| 674 RestoreChangesFromTrackerDB(); | 674 RestoreChangesFromTrackerDB(); |
| 675 | 675 |
| 676 GetAllChangedURLs(&urls); | 676 GetAllChangedURLs(&urls); |
| 677 EXPECT_TRUE(urls.empty()); | 677 EXPECT_TRUE(urls.empty()); |
| 678 } | 678 } |
| 679 | 679 |
| 680 } // namespace sync_file_system | 680 } // namespace sync_file_system |
| OLD | NEW |