OLD | NEW |
1 // Copyright (c) 2012 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/file_system.h" | 5 #include "chrome/browser/chromeos/drive/file_system.h" |
6 | 6 |
7 #include <string> | 7 #include <string> |
8 #include <vector> | 8 #include <vector> |
9 | 9 |
10 #include "base/bind.h" | 10 #include "base/bind.h" |
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
144 // Disable delaying so that the sync starts immediately. | 144 // Disable delaying so that the sync starts immediately. |
145 file_system_->sync_client_for_testing()->set_delay_for_testing( | 145 file_system_->sync_client_for_testing()->set_delay_for_testing( |
146 base::TimeDelta::FromSeconds(0)); | 146 base::TimeDelta::FromSeconds(0)); |
147 } | 147 } |
148 | 148 |
149 // Loads the full resource list via FakeDriveService. | 149 // Loads the full resource list via FakeDriveService. |
150 bool LoadFullResourceList() { | 150 bool LoadFullResourceList() { |
151 FileError error = FILE_ERROR_FAILED; | 151 FileError error = FILE_ERROR_FAILED; |
152 file_system_->change_list_loader_for_testing()->LoadIfNeeded( | 152 file_system_->change_list_loader_for_testing()->LoadIfNeeded( |
153 google_apis::test_util::CreateCopyResultCallback(&error)); | 153 google_apis::test_util::CreateCopyResultCallback(&error)); |
154 test_util::RunBlockingPoolTask(); | 154 content::RunAllBlockingPoolTasksUntilIdle(); |
155 return error == FILE_ERROR_OK; | 155 return error == FILE_ERROR_OK; |
156 } | 156 } |
157 | 157 |
158 // Gets resource entry by path synchronously. | 158 // Gets resource entry by path synchronously. |
159 scoped_ptr<ResourceEntry> GetResourceEntrySync( | 159 scoped_ptr<ResourceEntry> GetResourceEntrySync( |
160 const base::FilePath& file_path) { | 160 const base::FilePath& file_path) { |
161 FileError error = FILE_ERROR_FAILED; | 161 FileError error = FILE_ERROR_FAILED; |
162 scoped_ptr<ResourceEntry> entry; | 162 scoped_ptr<ResourceEntry> entry; |
163 file_system_->GetResourceEntry( | 163 file_system_->GetResourceEntry( |
164 file_path, | 164 file_path, |
165 google_apis::test_util::CreateCopyResultCallback(&error, &entry)); | 165 google_apis::test_util::CreateCopyResultCallback(&error, &entry)); |
166 test_util::RunBlockingPoolTask(); | 166 content::RunAllBlockingPoolTasksUntilIdle(); |
167 | 167 |
168 return entry.Pass(); | 168 return entry.Pass(); |
169 } | 169 } |
170 | 170 |
171 // Gets directory info by path synchronously. | 171 // Gets directory info by path synchronously. |
172 scoped_ptr<ResourceEntryVector> ReadDirectorySync( | 172 scoped_ptr<ResourceEntryVector> ReadDirectorySync( |
173 const base::FilePath& file_path) { | 173 const base::FilePath& file_path) { |
174 FileError error = FILE_ERROR_FAILED; | 174 FileError error = FILE_ERROR_FAILED; |
175 scoped_ptr<ResourceEntryVector> entries(new ResourceEntryVector); | 175 scoped_ptr<ResourceEntryVector> entries(new ResourceEntryVector); |
176 file_system_->ReadDirectory( | 176 file_system_->ReadDirectory( |
177 file_path, | 177 file_path, |
178 base::Bind(&AccumulateReadDirectoryResult, entries.get()), | 178 base::Bind(&AccumulateReadDirectoryResult, entries.get()), |
179 google_apis::test_util::CreateCopyResultCallback(&error)); | 179 google_apis::test_util::CreateCopyResultCallback(&error)); |
180 test_util::RunBlockingPoolTask(); | 180 content::RunAllBlockingPoolTasksUntilIdle(); |
181 if (error != FILE_ERROR_OK) | 181 if (error != FILE_ERROR_OK) |
182 entries.reset(); | 182 entries.reset(); |
183 return entries.Pass(); | 183 return entries.Pass(); |
184 } | 184 } |
185 | 185 |
186 // Used to implement ReadDirectorySync(). | 186 // Used to implement ReadDirectorySync(). |
187 static void AccumulateReadDirectoryResult( | 187 static void AccumulateReadDirectoryResult( |
188 ResourceEntryVector* out_entries, | 188 ResourceEntryVector* out_entries, |
189 scoped_ptr<ResourceEntryVector> entries) { | 189 scoped_ptr<ResourceEntryVector> entries) { |
190 ASSERT_TRUE(entries); | 190 ASSERT_TRUE(entries); |
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
322 base::FilePath src_file_path(FILE_PATH_LITERAL("drive/root/File 1.txt")); | 322 base::FilePath src_file_path(FILE_PATH_LITERAL("drive/root/File 1.txt")); |
323 base::FilePath dest_file_path(FILE_PATH_LITERAL("drive/root/Copied.txt")); | 323 base::FilePath dest_file_path(FILE_PATH_LITERAL("drive/root/Copied.txt")); |
324 EXPECT_TRUE(GetResourceEntrySync(src_file_path)); | 324 EXPECT_TRUE(GetResourceEntrySync(src_file_path)); |
325 EXPECT_FALSE(GetResourceEntrySync(dest_file_path)); | 325 EXPECT_FALSE(GetResourceEntrySync(dest_file_path)); |
326 | 326 |
327 FileError error = FILE_ERROR_FAILED; | 327 FileError error = FILE_ERROR_FAILED; |
328 file_system_->Copy(src_file_path, | 328 file_system_->Copy(src_file_path, |
329 dest_file_path, | 329 dest_file_path, |
330 false, // preserve_last_modified, | 330 false, // preserve_last_modified, |
331 google_apis::test_util::CreateCopyResultCallback(&error)); | 331 google_apis::test_util::CreateCopyResultCallback(&error)); |
332 test_util::RunBlockingPoolTask(); | 332 content::RunAllBlockingPoolTasksUntilIdle(); |
333 EXPECT_EQ(FILE_ERROR_OK, error); | 333 EXPECT_EQ(FILE_ERROR_OK, error); |
334 | 334 |
335 // Entry is added on the server. | 335 // Entry is added on the server. |
336 scoped_ptr<ResourceEntry> entry = GetResourceEntrySync(dest_file_path); | 336 scoped_ptr<ResourceEntry> entry = GetResourceEntrySync(dest_file_path); |
337 ASSERT_TRUE(entry); | 337 ASSERT_TRUE(entry); |
338 | 338 |
339 google_apis::GDataErrorCode status = google_apis::GDATA_OTHER_ERROR; | 339 google_apis::GDataErrorCode status = google_apis::GDATA_OTHER_ERROR; |
340 scoped_ptr<google_apis::FileResource> server_entry; | 340 scoped_ptr<google_apis::FileResource> server_entry; |
341 fake_drive_service_->GetFileResource( | 341 fake_drive_service_->GetFileResource( |
342 entry->resource_id(), | 342 entry->resource_id(), |
343 google_apis::test_util::CreateCopyResultCallback(&status, &server_entry)); | 343 google_apis::test_util::CreateCopyResultCallback(&status, &server_entry)); |
344 test_util::RunBlockingPoolTask(); | 344 content::RunAllBlockingPoolTasksUntilIdle(); |
345 EXPECT_EQ(google_apis::HTTP_SUCCESS, status); | 345 EXPECT_EQ(google_apis::HTTP_SUCCESS, status); |
346 ASSERT_TRUE(server_entry); | 346 ASSERT_TRUE(server_entry); |
347 EXPECT_EQ(entry->title(), server_entry->title()); | 347 EXPECT_EQ(entry->title(), server_entry->title()); |
348 EXPECT_FALSE(server_entry->IsDirectory()); | 348 EXPECT_FALSE(server_entry->IsDirectory()); |
349 } | 349 } |
350 | 350 |
351 TEST_F(FileSystemTest, Move) { | 351 TEST_F(FileSystemTest, Move) { |
352 base::FilePath src_file_path(FILE_PATH_LITERAL("drive/root/File 1.txt")); | 352 base::FilePath src_file_path(FILE_PATH_LITERAL("drive/root/File 1.txt")); |
353 base::FilePath dest_file_path( | 353 base::FilePath dest_file_path( |
354 FILE_PATH_LITERAL("drive/root/Directory 1/Moved.txt")); | 354 FILE_PATH_LITERAL("drive/root/Directory 1/Moved.txt")); |
355 EXPECT_TRUE(GetResourceEntrySync(src_file_path)); | 355 EXPECT_TRUE(GetResourceEntrySync(src_file_path)); |
356 EXPECT_FALSE(GetResourceEntrySync(dest_file_path)); | 356 EXPECT_FALSE(GetResourceEntrySync(dest_file_path)); |
357 scoped_ptr<ResourceEntry> parent = | 357 scoped_ptr<ResourceEntry> parent = |
358 GetResourceEntrySync(dest_file_path.DirName()); | 358 GetResourceEntrySync(dest_file_path.DirName()); |
359 ASSERT_TRUE(parent); | 359 ASSERT_TRUE(parent); |
360 | 360 |
361 FileError error = FILE_ERROR_FAILED; | 361 FileError error = FILE_ERROR_FAILED; |
362 file_system_->Move(src_file_path, | 362 file_system_->Move(src_file_path, |
363 dest_file_path, | 363 dest_file_path, |
364 google_apis::test_util::CreateCopyResultCallback(&error)); | 364 google_apis::test_util::CreateCopyResultCallback(&error)); |
365 test_util::RunBlockingPoolTask(); | 365 content::RunAllBlockingPoolTasksUntilIdle(); |
366 EXPECT_EQ(FILE_ERROR_OK, error); | 366 EXPECT_EQ(FILE_ERROR_OK, error); |
367 | 367 |
368 // Entry is moved on the server. | 368 // Entry is moved on the server. |
369 scoped_ptr<ResourceEntry> entry = GetResourceEntrySync(dest_file_path); | 369 scoped_ptr<ResourceEntry> entry = GetResourceEntrySync(dest_file_path); |
370 ASSERT_TRUE(entry); | 370 ASSERT_TRUE(entry); |
371 | 371 |
372 google_apis::GDataErrorCode status = google_apis::GDATA_OTHER_ERROR; | 372 google_apis::GDataErrorCode status = google_apis::GDATA_OTHER_ERROR; |
373 scoped_ptr<google_apis::FileResource> server_entry; | 373 scoped_ptr<google_apis::FileResource> server_entry; |
374 fake_drive_service_->GetFileResource( | 374 fake_drive_service_->GetFileResource( |
375 entry->resource_id(), | 375 entry->resource_id(), |
376 google_apis::test_util::CreateCopyResultCallback(&status, &server_entry)); | 376 google_apis::test_util::CreateCopyResultCallback(&status, &server_entry)); |
377 test_util::RunBlockingPoolTask(); | 377 content::RunAllBlockingPoolTasksUntilIdle(); |
378 EXPECT_EQ(google_apis::HTTP_SUCCESS, status); | 378 EXPECT_EQ(google_apis::HTTP_SUCCESS, status); |
379 ASSERT_TRUE(server_entry); | 379 ASSERT_TRUE(server_entry); |
380 EXPECT_EQ(entry->title(), server_entry->title()); | 380 EXPECT_EQ(entry->title(), server_entry->title()); |
381 | 381 |
382 ASSERT_FALSE(server_entry->parents().empty()); | 382 ASSERT_FALSE(server_entry->parents().empty()); |
383 EXPECT_EQ(parent->resource_id(), server_entry->parents()[0].file_id()); | 383 EXPECT_EQ(parent->resource_id(), server_entry->parents()[0].file_id()); |
384 } | 384 } |
385 | 385 |
386 TEST_F(FileSystemTest, Remove) { | 386 TEST_F(FileSystemTest, Remove) { |
387 base::FilePath file_path(FILE_PATH_LITERAL("drive/root/File 1.txt")); | 387 base::FilePath file_path(FILE_PATH_LITERAL("drive/root/File 1.txt")); |
388 scoped_ptr<ResourceEntry> entry = GetResourceEntrySync(file_path); | 388 scoped_ptr<ResourceEntry> entry = GetResourceEntrySync(file_path); |
389 ASSERT_TRUE(entry); | 389 ASSERT_TRUE(entry); |
390 | 390 |
391 FileError error = FILE_ERROR_FAILED; | 391 FileError error = FILE_ERROR_FAILED; |
392 file_system_->Remove( | 392 file_system_->Remove( |
393 file_path, | 393 file_path, |
394 false, // is_resursive | 394 false, // is_resursive |
395 google_apis::test_util::CreateCopyResultCallback(&error)); | 395 google_apis::test_util::CreateCopyResultCallback(&error)); |
396 test_util::RunBlockingPoolTask(); | 396 content::RunAllBlockingPoolTasksUntilIdle(); |
397 EXPECT_EQ(FILE_ERROR_OK, error); | 397 EXPECT_EQ(FILE_ERROR_OK, error); |
398 | 398 |
399 // Entry is removed on the server. | 399 // Entry is removed on the server. |
400 google_apis::GDataErrorCode status = google_apis::GDATA_OTHER_ERROR; | 400 google_apis::GDataErrorCode status = google_apis::GDATA_OTHER_ERROR; |
401 scoped_ptr<google_apis::FileResource> server_entry; | 401 scoped_ptr<google_apis::FileResource> server_entry; |
402 fake_drive_service_->GetFileResource( | 402 fake_drive_service_->GetFileResource( |
403 entry->resource_id(), | 403 entry->resource_id(), |
404 google_apis::test_util::CreateCopyResultCallback(&status, &server_entry)); | 404 google_apis::test_util::CreateCopyResultCallback(&status, &server_entry)); |
405 test_util::RunBlockingPoolTask(); | 405 content::RunAllBlockingPoolTasksUntilIdle(); |
406 EXPECT_EQ(google_apis::HTTP_SUCCESS, status); | 406 EXPECT_EQ(google_apis::HTTP_SUCCESS, status); |
407 ASSERT_TRUE(server_entry); | 407 ASSERT_TRUE(server_entry); |
408 EXPECT_TRUE(server_entry->labels().is_trashed()); | 408 EXPECT_TRUE(server_entry->labels().is_trashed()); |
409 } | 409 } |
410 | 410 |
411 TEST_F(FileSystemTest, CreateDirectory) { | 411 TEST_F(FileSystemTest, CreateDirectory) { |
412 base::FilePath directory_path(FILE_PATH_LITERAL("drive/root/New Directory")); | 412 base::FilePath directory_path(FILE_PATH_LITERAL("drive/root/New Directory")); |
413 EXPECT_FALSE(GetResourceEntrySync(directory_path)); | 413 EXPECT_FALSE(GetResourceEntrySync(directory_path)); |
414 | 414 |
415 FileError error = FILE_ERROR_FAILED; | 415 FileError error = FILE_ERROR_FAILED; |
416 file_system_->CreateDirectory( | 416 file_system_->CreateDirectory( |
417 directory_path, | 417 directory_path, |
418 true, // is_exclusive | 418 true, // is_exclusive |
419 false, // is_recursive | 419 false, // is_recursive |
420 google_apis::test_util::CreateCopyResultCallback(&error)); | 420 google_apis::test_util::CreateCopyResultCallback(&error)); |
421 test_util::RunBlockingPoolTask(); | 421 content::RunAllBlockingPoolTasksUntilIdle(); |
422 EXPECT_EQ(FILE_ERROR_OK, error); | 422 EXPECT_EQ(FILE_ERROR_OK, error); |
423 | 423 |
424 // Directory is created on the server. | 424 // Directory is created on the server. |
425 scoped_ptr<ResourceEntry> entry = GetResourceEntrySync(directory_path); | 425 scoped_ptr<ResourceEntry> entry = GetResourceEntrySync(directory_path); |
426 ASSERT_TRUE(entry); | 426 ASSERT_TRUE(entry); |
427 | 427 |
428 google_apis::GDataErrorCode status = google_apis::GDATA_OTHER_ERROR; | 428 google_apis::GDataErrorCode status = google_apis::GDATA_OTHER_ERROR; |
429 scoped_ptr<google_apis::FileResource> server_entry; | 429 scoped_ptr<google_apis::FileResource> server_entry; |
430 fake_drive_service_->GetFileResource( | 430 fake_drive_service_->GetFileResource( |
431 entry->resource_id(), | 431 entry->resource_id(), |
432 google_apis::test_util::CreateCopyResultCallback(&status, &server_entry)); | 432 google_apis::test_util::CreateCopyResultCallback(&status, &server_entry)); |
433 test_util::RunBlockingPoolTask(); | 433 content::RunAllBlockingPoolTasksUntilIdle(); |
434 EXPECT_EQ(google_apis::HTTP_SUCCESS, status); | 434 EXPECT_EQ(google_apis::HTTP_SUCCESS, status); |
435 ASSERT_TRUE(server_entry); | 435 ASSERT_TRUE(server_entry); |
436 EXPECT_EQ(entry->title(), server_entry->title()); | 436 EXPECT_EQ(entry->title(), server_entry->title()); |
437 EXPECT_TRUE(server_entry->IsDirectory()); | 437 EXPECT_TRUE(server_entry->IsDirectory()); |
438 } | 438 } |
439 | 439 |
440 TEST_F(FileSystemTest, CreateFile) { | 440 TEST_F(FileSystemTest, CreateFile) { |
441 base::FilePath file_path(FILE_PATH_LITERAL("drive/root/New File.txt")); | 441 base::FilePath file_path(FILE_PATH_LITERAL("drive/root/New File.txt")); |
442 EXPECT_FALSE(GetResourceEntrySync(file_path)); | 442 EXPECT_FALSE(GetResourceEntrySync(file_path)); |
443 | 443 |
444 FileError error = FILE_ERROR_FAILED; | 444 FileError error = FILE_ERROR_FAILED; |
445 file_system_->CreateFile( | 445 file_system_->CreateFile( |
446 file_path, | 446 file_path, |
447 true, // is_exclusive | 447 true, // is_exclusive |
448 "text/plain", | 448 "text/plain", |
449 google_apis::test_util::CreateCopyResultCallback(&error)); | 449 google_apis::test_util::CreateCopyResultCallback(&error)); |
450 test_util::RunBlockingPoolTask(); | 450 content::RunAllBlockingPoolTasksUntilIdle(); |
451 EXPECT_EQ(FILE_ERROR_OK, error); | 451 EXPECT_EQ(FILE_ERROR_OK, error); |
452 | 452 |
453 // File is created on the server. | 453 // File is created on the server. |
454 scoped_ptr<ResourceEntry> entry = GetResourceEntrySync(file_path); | 454 scoped_ptr<ResourceEntry> entry = GetResourceEntrySync(file_path); |
455 ASSERT_TRUE(entry); | 455 ASSERT_TRUE(entry); |
456 | 456 |
457 google_apis::GDataErrorCode status = google_apis::GDATA_OTHER_ERROR; | 457 google_apis::GDataErrorCode status = google_apis::GDATA_OTHER_ERROR; |
458 scoped_ptr<google_apis::FileResource> server_entry; | 458 scoped_ptr<google_apis::FileResource> server_entry; |
459 fake_drive_service_->GetFileResource( | 459 fake_drive_service_->GetFileResource( |
460 entry->resource_id(), | 460 entry->resource_id(), |
461 google_apis::test_util::CreateCopyResultCallback(&status, &server_entry)); | 461 google_apis::test_util::CreateCopyResultCallback(&status, &server_entry)); |
462 test_util::RunBlockingPoolTask(); | 462 content::RunAllBlockingPoolTasksUntilIdle(); |
463 EXPECT_EQ(google_apis::HTTP_SUCCESS, status); | 463 EXPECT_EQ(google_apis::HTTP_SUCCESS, status); |
464 ASSERT_TRUE(server_entry); | 464 ASSERT_TRUE(server_entry); |
465 EXPECT_EQ(entry->title(), server_entry->title()); | 465 EXPECT_EQ(entry->title(), server_entry->title()); |
466 EXPECT_FALSE(server_entry->IsDirectory()); | 466 EXPECT_FALSE(server_entry->IsDirectory()); |
467 } | 467 } |
468 | 468 |
469 TEST_F(FileSystemTest, TouchFile) { | 469 TEST_F(FileSystemTest, TouchFile) { |
470 base::FilePath file_path(FILE_PATH_LITERAL("drive/root/File 1.txt")); | 470 base::FilePath file_path(FILE_PATH_LITERAL("drive/root/File 1.txt")); |
471 scoped_ptr<ResourceEntry> entry = GetResourceEntrySync(file_path); | 471 scoped_ptr<ResourceEntry> entry = GetResourceEntrySync(file_path); |
472 ASSERT_TRUE(entry); | 472 ASSERT_TRUE(entry); |
473 | 473 |
474 base::Time last_accessed = | 474 base::Time last_accessed = |
475 base::Time::FromInternalValue(entry->file_info().last_accessed()) + | 475 base::Time::FromInternalValue(entry->file_info().last_accessed()) + |
476 base::TimeDelta::FromSeconds(1); | 476 base::TimeDelta::FromSeconds(1); |
477 base::Time last_modified = | 477 base::Time last_modified = |
478 base::Time::FromInternalValue(entry->file_info().last_modified()) + | 478 base::Time::FromInternalValue(entry->file_info().last_modified()) + |
479 base::TimeDelta::FromSeconds(1); | 479 base::TimeDelta::FromSeconds(1); |
480 | 480 |
481 FileError error = FILE_ERROR_FAILED; | 481 FileError error = FILE_ERROR_FAILED; |
482 file_system_->TouchFile( | 482 file_system_->TouchFile( |
483 file_path, | 483 file_path, |
484 last_accessed, | 484 last_accessed, |
485 last_modified, | 485 last_modified, |
486 google_apis::test_util::CreateCopyResultCallback(&error)); | 486 google_apis::test_util::CreateCopyResultCallback(&error)); |
487 test_util::RunBlockingPoolTask(); | 487 content::RunAllBlockingPoolTasksUntilIdle(); |
488 EXPECT_EQ(FILE_ERROR_OK, error); | 488 EXPECT_EQ(FILE_ERROR_OK, error); |
489 | 489 |
490 // File is touched on the server. | 490 // File is touched on the server. |
491 google_apis::GDataErrorCode status = google_apis::GDATA_OTHER_ERROR; | 491 google_apis::GDataErrorCode status = google_apis::GDATA_OTHER_ERROR; |
492 scoped_ptr<google_apis::FileResource> server_entry; | 492 scoped_ptr<google_apis::FileResource> server_entry; |
493 fake_drive_service_->GetFileResource( | 493 fake_drive_service_->GetFileResource( |
494 entry->resource_id(), | 494 entry->resource_id(), |
495 google_apis::test_util::CreateCopyResultCallback(&status, &server_entry)); | 495 google_apis::test_util::CreateCopyResultCallback(&status, &server_entry)); |
496 test_util::RunBlockingPoolTask(); | 496 content::RunAllBlockingPoolTasksUntilIdle(); |
497 EXPECT_EQ(google_apis::HTTP_SUCCESS, status); | 497 EXPECT_EQ(google_apis::HTTP_SUCCESS, status); |
498 ASSERT_TRUE(server_entry); | 498 ASSERT_TRUE(server_entry); |
499 EXPECT_EQ(last_accessed, server_entry->last_viewed_by_me_date()); | 499 EXPECT_EQ(last_accessed, server_entry->last_viewed_by_me_date()); |
500 EXPECT_EQ(last_modified, server_entry->modified_date()); | 500 EXPECT_EQ(last_modified, server_entry->modified_date()); |
501 } | 501 } |
502 | 502 |
503 TEST_F(FileSystemTest, TruncateFile) { | 503 TEST_F(FileSystemTest, TruncateFile) { |
504 base::FilePath file_path(FILE_PATH_LITERAL("drive/root/File 1.txt")); | 504 base::FilePath file_path(FILE_PATH_LITERAL("drive/root/File 1.txt")); |
505 scoped_ptr<ResourceEntry> entry = GetResourceEntrySync(file_path); | 505 scoped_ptr<ResourceEntry> entry = GetResourceEntrySync(file_path); |
506 ASSERT_TRUE(entry); | 506 ASSERT_TRUE(entry); |
507 | 507 |
508 const int64 kLength = entry->file_info().size() + 100; | 508 const int64 kLength = entry->file_info().size() + 100; |
509 | 509 |
510 FileError error = FILE_ERROR_FAILED; | 510 FileError error = FILE_ERROR_FAILED; |
511 file_system_->TruncateFile( | 511 file_system_->TruncateFile( |
512 file_path, | 512 file_path, |
513 kLength, | 513 kLength, |
514 google_apis::test_util::CreateCopyResultCallback(&error)); | 514 google_apis::test_util::CreateCopyResultCallback(&error)); |
515 test_util::RunBlockingPoolTask(); | 515 content::RunAllBlockingPoolTasksUntilIdle(); |
516 EXPECT_EQ(FILE_ERROR_OK, error); | 516 EXPECT_EQ(FILE_ERROR_OK, error); |
517 | 517 |
518 // File is touched on the server. | 518 // File is touched on the server. |
519 google_apis::GDataErrorCode status = google_apis::GDATA_OTHER_ERROR; | 519 google_apis::GDataErrorCode status = google_apis::GDATA_OTHER_ERROR; |
520 scoped_ptr<google_apis::FileResource> server_entry; | 520 scoped_ptr<google_apis::FileResource> server_entry; |
521 fake_drive_service_->GetFileResource( | 521 fake_drive_service_->GetFileResource( |
522 entry->resource_id(), | 522 entry->resource_id(), |
523 google_apis::test_util::CreateCopyResultCallback(&status, &server_entry)); | 523 google_apis::test_util::CreateCopyResultCallback(&status, &server_entry)); |
524 test_util::RunBlockingPoolTask(); | 524 content::RunAllBlockingPoolTasksUntilIdle(); |
525 EXPECT_EQ(google_apis::HTTP_SUCCESS, status); | 525 EXPECT_EQ(google_apis::HTTP_SUCCESS, status); |
526 ASSERT_TRUE(server_entry); | 526 ASSERT_TRUE(server_entry); |
527 EXPECT_EQ(kLength, server_entry->file_size()); | 527 EXPECT_EQ(kLength, server_entry->file_size()); |
528 } | 528 } |
529 | 529 |
530 TEST_F(FileSystemTest, DuplicatedAsyncInitialization) { | 530 TEST_F(FileSystemTest, DuplicatedAsyncInitialization) { |
531 base::RunLoop loop; | 531 base::RunLoop loop; |
532 | 532 |
533 int counter = 0; | 533 int counter = 0; |
534 const GetResourceEntryCallback& callback = base::Bind( | 534 const GetResourceEntryCallback& callback = base::Bind( |
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
660 // changestamp (i.e. the local metadata is up-to-date), so no request for | 660 // changestamp (i.e. the local metadata is up-to-date), so no request for |
661 // new resource list (i.e., call to GetResourceList) should happen. | 661 // new resource list (i.e., call to GetResourceList) should happen. |
662 EXPECT_EQ(0, fake_drive_service_->file_list_load_count()); | 662 EXPECT_EQ(0, fake_drive_service_->file_list_load_count()); |
663 | 663 |
664 // Since the file system has verified that it holds the latest snapshot, | 664 // Since the file system has verified that it holds the latest snapshot, |
665 // it should change its state to "loaded", which admits periodic refresh. | 665 // it should change its state to "loaded", which admits periodic refresh. |
666 // To test it, call CheckForUpdates and verify it does try to check updates. | 666 // To test it, call CheckForUpdates and verify it does try to check updates. |
667 const int about_resource_load_count_before = | 667 const int about_resource_load_count_before = |
668 fake_drive_service_->about_resource_load_count(); | 668 fake_drive_service_->about_resource_load_count(); |
669 file_system_->CheckForUpdates(); | 669 file_system_->CheckForUpdates(); |
670 test_util::RunBlockingPoolTask(); | 670 content::RunAllBlockingPoolTasksUntilIdle(); |
671 EXPECT_LT(about_resource_load_count_before, | 671 EXPECT_LT(about_resource_load_count_before, |
672 fake_drive_service_->about_resource_load_count()); | 672 fake_drive_service_->about_resource_load_count()); |
673 } | 673 } |
674 | 674 |
675 TEST_F(FileSystemTest, LoadFileSystemFromCacheWhileOffline) { | 675 TEST_F(FileSystemTest, LoadFileSystemFromCacheWhileOffline) { |
676 ASSERT_NO_FATAL_FAILURE(SetUpTestFileSystem(USE_OLD_TIMESTAMP)); | 676 ASSERT_NO_FATAL_FAILURE(SetUpTestFileSystem(USE_OLD_TIMESTAMP)); |
677 | 677 |
678 // Make GetResourceList fail for simulating offline situation. This will | 678 // Make GetResourceList fail for simulating offline situation. This will |
679 // leave the file system "loaded from cache, but not synced with server" | 679 // leave the file system "loaded from cache, but not synced with server" |
680 // state. | 680 // state. |
(...skipping 21 matching lines...) Expand all Loading... |
702 FILE_PATH_LITERAL("drive/root/Dir1/SubDir2/File3")))); | 702 FILE_PATH_LITERAL("drive/root/Dir1/SubDir2/File3")))); |
703 | 703 |
704 // Since the file system has at least succeeded to load cached snapshot, | 704 // Since the file system has at least succeeded to load cached snapshot, |
705 // the file system should be able to start periodic refresh. | 705 // the file system should be able to start periodic refresh. |
706 // To test it, call CheckForUpdates and verify it does try to check | 706 // To test it, call CheckForUpdates and verify it does try to check |
707 // updates, which will cause directory changes. | 707 // updates, which will cause directory changes. |
708 fake_drive_service_->set_offline(false); | 708 fake_drive_service_->set_offline(false); |
709 | 709 |
710 file_system_->CheckForUpdates(); | 710 file_system_->CheckForUpdates(); |
711 | 711 |
712 test_util::RunBlockingPoolTask(); | 712 content::RunAllBlockingPoolTasksUntilIdle(); |
713 EXPECT_EQ(1, fake_drive_service_->about_resource_load_count()); | 713 EXPECT_EQ(1, fake_drive_service_->about_resource_load_count()); |
714 EXPECT_EQ(1, fake_drive_service_->change_list_load_count()); | 714 EXPECT_EQ(1, fake_drive_service_->change_list_load_count()); |
715 | 715 |
716 ASSERT_LE(0u, mock_directory_observer_->changed_directories().size()); | 716 ASSERT_LE(0u, mock_directory_observer_->changed_directories().size()); |
717 ASSERT_LE(1u, mock_directory_observer_->changed_files().size()); | 717 ASSERT_LE(1u, mock_directory_observer_->changed_files().size()); |
718 } | 718 } |
719 | 719 |
720 TEST_F(FileSystemTest, ReadDirectoryWhileRefreshing) { | 720 TEST_F(FileSystemTest, ReadDirectoryWhileRefreshing) { |
721 // Use old timestamp so the fast fetch will be performed. | 721 // Use old timestamp so the fast fetch will be performed. |
722 ASSERT_NO_FATAL_FAILURE(SetUpTestFileSystem(USE_OLD_TIMESTAMP)); | 722 ASSERT_NO_FATAL_FAILURE(SetUpTestFileSystem(USE_OLD_TIMESTAMP)); |
(...skipping 23 matching lines...) Expand all Loading... |
746 // CreateDirectory ensures the resource list is loaded before it runs. | 746 // CreateDirectory ensures the resource list is loaded before it runs. |
747 | 747 |
748 base::FilePath existing_directory( | 748 base::FilePath existing_directory( |
749 FILE_PATH_LITERAL("drive/root/Directory 1")); | 749 FILE_PATH_LITERAL("drive/root/Directory 1")); |
750 FileError error = FILE_ERROR_FAILED; | 750 FileError error = FILE_ERROR_FAILED; |
751 file_system_->CreateDirectory( | 751 file_system_->CreateDirectory( |
752 existing_directory, | 752 existing_directory, |
753 true, // is_exclusive | 753 true, // is_exclusive |
754 false, // is_recursive | 754 false, // is_recursive |
755 google_apis::test_util::CreateCopyResultCallback(&error)); | 755 google_apis::test_util::CreateCopyResultCallback(&error)); |
756 test_util::RunBlockingPoolTask(); | 756 content::RunAllBlockingPoolTasksUntilIdle(); |
757 | 757 |
758 // It should fail because is_exclusive is set to true. | 758 // It should fail because is_exclusive is set to true. |
759 EXPECT_EQ(FILE_ERROR_EXISTS, error); | 759 EXPECT_EQ(FILE_ERROR_EXISTS, error); |
760 } | 760 } |
761 | 761 |
762 TEST_F(FileSystemTest, CreateDirectoryRecursively) { | 762 TEST_F(FileSystemTest, CreateDirectoryRecursively) { |
763 // Intentionally *not* calling LoadFullResourceList(), for testing that | 763 // Intentionally *not* calling LoadFullResourceList(), for testing that |
764 // CreateDirectory ensures the resource list is loaded before it runs. | 764 // CreateDirectory ensures the resource list is loaded before it runs. |
765 | 765 |
766 base::FilePath new_directory( | 766 base::FilePath new_directory( |
767 FILE_PATH_LITERAL("drive/root/Directory 1/a/b/c/d")); | 767 FILE_PATH_LITERAL("drive/root/Directory 1/a/b/c/d")); |
768 FileError error = FILE_ERROR_FAILED; | 768 FileError error = FILE_ERROR_FAILED; |
769 file_system_->CreateDirectory( | 769 file_system_->CreateDirectory( |
770 new_directory, | 770 new_directory, |
771 true, // is_exclusive | 771 true, // is_exclusive |
772 true, // is_recursive | 772 true, // is_recursive |
773 google_apis::test_util::CreateCopyResultCallback(&error)); | 773 google_apis::test_util::CreateCopyResultCallback(&error)); |
774 test_util::RunBlockingPoolTask(); | 774 content::RunAllBlockingPoolTasksUntilIdle(); |
775 | 775 |
776 EXPECT_EQ(FILE_ERROR_OK, error); | 776 EXPECT_EQ(FILE_ERROR_OK, error); |
777 | 777 |
778 scoped_ptr<ResourceEntry> entry(GetResourceEntrySync(new_directory)); | 778 scoped_ptr<ResourceEntry> entry(GetResourceEntrySync(new_directory)); |
779 ASSERT_TRUE(entry); | 779 ASSERT_TRUE(entry); |
780 EXPECT_TRUE(entry->file_info().is_directory()); | 780 EXPECT_TRUE(entry->file_info().is_directory()); |
781 } | 781 } |
782 | 782 |
783 TEST_F(FileSystemTest, PinAndUnpin) { | 783 TEST_F(FileSystemTest, PinAndUnpin) { |
784 ASSERT_TRUE(LoadFullResourceList()); | 784 ASSERT_TRUE(LoadFullResourceList()); |
785 | 785 |
786 base::FilePath file_path(FILE_PATH_LITERAL("drive/root/File 1.txt")); | 786 base::FilePath file_path(FILE_PATH_LITERAL("drive/root/File 1.txt")); |
787 | 787 |
788 // Get the file info. | 788 // Get the file info. |
789 scoped_ptr<ResourceEntry> entry(GetResourceEntrySync(file_path)); | 789 scoped_ptr<ResourceEntry> entry(GetResourceEntrySync(file_path)); |
790 ASSERT_TRUE(entry); | 790 ASSERT_TRUE(entry); |
791 | 791 |
792 // Pin the file. | 792 // Pin the file. |
793 FileError error = FILE_ERROR_FAILED; | 793 FileError error = FILE_ERROR_FAILED; |
794 file_system_->Pin(file_path, | 794 file_system_->Pin(file_path, |
795 google_apis::test_util::CreateCopyResultCallback(&error)); | 795 google_apis::test_util::CreateCopyResultCallback(&error)); |
796 test_util::RunBlockingPoolTask(); | 796 content::RunAllBlockingPoolTasksUntilIdle(); |
797 EXPECT_EQ(FILE_ERROR_OK, error); | 797 EXPECT_EQ(FILE_ERROR_OK, error); |
798 | 798 |
799 entry = GetResourceEntrySync(file_path); | 799 entry = GetResourceEntrySync(file_path); |
800 ASSERT_TRUE(entry); | 800 ASSERT_TRUE(entry); |
801 EXPECT_TRUE(entry->file_specific_info().cache_state().is_pinned()); | 801 EXPECT_TRUE(entry->file_specific_info().cache_state().is_pinned()); |
802 EXPECT_TRUE(entry->file_specific_info().cache_state().is_present()); | 802 EXPECT_TRUE(entry->file_specific_info().cache_state().is_present()); |
803 | 803 |
804 // Unpin the file. | 804 // Unpin the file. |
805 error = FILE_ERROR_FAILED; | 805 error = FILE_ERROR_FAILED; |
806 file_system_->Unpin(file_path, | 806 file_system_->Unpin(file_path, |
807 google_apis::test_util::CreateCopyResultCallback(&error)); | 807 google_apis::test_util::CreateCopyResultCallback(&error)); |
808 test_util::RunBlockingPoolTask(); | 808 content::RunAllBlockingPoolTasksUntilIdle(); |
809 EXPECT_EQ(FILE_ERROR_OK, error); | 809 EXPECT_EQ(FILE_ERROR_OK, error); |
810 | 810 |
811 entry = GetResourceEntrySync(file_path); | 811 entry = GetResourceEntrySync(file_path); |
812 ASSERT_TRUE(entry); | 812 ASSERT_TRUE(entry); |
813 EXPECT_FALSE(entry->file_specific_info().cache_state().is_pinned()); | 813 EXPECT_FALSE(entry->file_specific_info().cache_state().is_pinned()); |
814 | 814 |
815 // Pinned file gets synced and it results in entry state changes. | 815 // Pinned file gets synced and it results in entry state changes. |
816 ASSERT_EQ(0u, mock_directory_observer_->changed_directories().size()); | 816 ASSERT_EQ(0u, mock_directory_observer_->changed_directories().size()); |
817 ASSERT_EQ(1u, mock_directory_observer_->changed_files().size()); | 817 ASSERT_EQ(1u, mock_directory_observer_->changed_files().size()); |
818 EXPECT_EQ(1u, | 818 EXPECT_EQ(1u, |
(...skipping 14 matching lines...) Expand all Loading... |
833 FileError error_pin = FILE_ERROR_FAILED; | 833 FileError error_pin = FILE_ERROR_FAILED; |
834 file_system_->Pin( | 834 file_system_->Pin( |
835 file_path, | 835 file_path, |
836 google_apis::test_util::CreateCopyResultCallback(&error_pin)); | 836 google_apis::test_util::CreateCopyResultCallback(&error_pin)); |
837 | 837 |
838 FileError error_unpin = FILE_ERROR_FAILED; | 838 FileError error_unpin = FILE_ERROR_FAILED; |
839 file_system_->Unpin( | 839 file_system_->Unpin( |
840 file_path, | 840 file_path, |
841 google_apis::test_util::CreateCopyResultCallback(&error_unpin)); | 841 google_apis::test_util::CreateCopyResultCallback(&error_unpin)); |
842 | 842 |
843 test_util::RunBlockingPoolTask(); | 843 content::RunAllBlockingPoolTasksUntilIdle(); |
844 EXPECT_EQ(FILE_ERROR_OK, error_pin); | 844 EXPECT_EQ(FILE_ERROR_OK, error_pin); |
845 EXPECT_EQ(FILE_ERROR_OK, error_unpin); | 845 EXPECT_EQ(FILE_ERROR_OK, error_unpin); |
846 | 846 |
847 // No cache file available because the sync was cancelled by Unpin(). | 847 // No cache file available because the sync was cancelled by Unpin(). |
848 entry = GetResourceEntrySync(file_path); | 848 entry = GetResourceEntrySync(file_path); |
849 ASSERT_TRUE(entry); | 849 ASSERT_TRUE(entry); |
850 EXPECT_FALSE(entry->file_specific_info().cache_state().is_present()); | 850 EXPECT_FALSE(entry->file_specific_info().cache_state().is_present()); |
851 } | 851 } |
852 | 852 |
853 TEST_F(FileSystemTest, GetAvailableSpace) { | 853 TEST_F(FileSystemTest, GetAvailableSpace) { |
854 FileError error = FILE_ERROR_OK; | 854 FileError error = FILE_ERROR_OK; |
855 int64 bytes_total; | 855 int64 bytes_total; |
856 int64 bytes_used; | 856 int64 bytes_used; |
857 file_system_->GetAvailableSpace( | 857 file_system_->GetAvailableSpace( |
858 google_apis::test_util::CreateCopyResultCallback( | 858 google_apis::test_util::CreateCopyResultCallback( |
859 &error, &bytes_total, &bytes_used)); | 859 &error, &bytes_total, &bytes_used)); |
860 test_util::RunBlockingPoolTask(); | 860 content::RunAllBlockingPoolTasksUntilIdle(); |
861 EXPECT_EQ(6789012345LL, bytes_used); | 861 EXPECT_EQ(6789012345LL, bytes_used); |
862 EXPECT_EQ(9876543210LL, bytes_total); | 862 EXPECT_EQ(9876543210LL, bytes_total); |
863 } | 863 } |
864 | 864 |
865 TEST_F(FileSystemTest, MarkCacheFileAsMountedAndUnmounted) { | 865 TEST_F(FileSystemTest, MarkCacheFileAsMountedAndUnmounted) { |
866 ASSERT_TRUE(LoadFullResourceList()); | 866 ASSERT_TRUE(LoadFullResourceList()); |
867 | 867 |
868 base::FilePath file_in_root(FILE_PATH_LITERAL("drive/root/File 1.txt")); | 868 base::FilePath file_in_root(FILE_PATH_LITERAL("drive/root/File 1.txt")); |
869 | 869 |
870 // Make the file cached. | 870 // Make the file cached. |
871 FileError error = FILE_ERROR_FAILED; | 871 FileError error = FILE_ERROR_FAILED; |
872 base::FilePath file_path; | 872 base::FilePath file_path; |
873 scoped_ptr<ResourceEntry> entry; | 873 scoped_ptr<ResourceEntry> entry; |
874 file_system_->GetFile( | 874 file_system_->GetFile( |
875 file_in_root, | 875 file_in_root, |
876 google_apis::test_util::CreateCopyResultCallback( | 876 google_apis::test_util::CreateCopyResultCallback( |
877 &error, &file_path, &entry)); | 877 &error, &file_path, &entry)); |
878 test_util::RunBlockingPoolTask(); | 878 content::RunAllBlockingPoolTasksUntilIdle(); |
879 EXPECT_EQ(FILE_ERROR_OK, error); | 879 EXPECT_EQ(FILE_ERROR_OK, error); |
880 | 880 |
881 // Test for mounting. | 881 // Test for mounting. |
882 error = FILE_ERROR_FAILED; | 882 error = FILE_ERROR_FAILED; |
883 file_path.clear(); | 883 file_path.clear(); |
884 file_system_->MarkCacheFileAsMounted( | 884 file_system_->MarkCacheFileAsMounted( |
885 file_in_root, | 885 file_in_root, |
886 google_apis::test_util::CreateCopyResultCallback(&error, &file_path)); | 886 google_apis::test_util::CreateCopyResultCallback(&error, &file_path)); |
887 test_util::RunBlockingPoolTask(); | 887 content::RunAllBlockingPoolTasksUntilIdle(); |
888 EXPECT_EQ(FILE_ERROR_OK, error); | 888 EXPECT_EQ(FILE_ERROR_OK, error); |
889 | 889 |
890 // Cannot remove a cache entry while it's being mounted. | 890 // Cannot remove a cache entry while it's being mounted. |
891 EXPECT_EQ(FILE_ERROR_IN_USE, cache_->Remove(entry->local_id())); | 891 EXPECT_EQ(FILE_ERROR_IN_USE, cache_->Remove(entry->local_id())); |
892 | 892 |
893 // Test for unmounting. | 893 // Test for unmounting. |
894 error = FILE_ERROR_FAILED; | 894 error = FILE_ERROR_FAILED; |
895 file_system_->MarkCacheFileAsUnmounted( | 895 file_system_->MarkCacheFileAsUnmounted( |
896 file_path, | 896 file_path, |
897 google_apis::test_util::CreateCopyResultCallback(&error)); | 897 google_apis::test_util::CreateCopyResultCallback(&error)); |
898 test_util::RunBlockingPoolTask(); | 898 content::RunAllBlockingPoolTasksUntilIdle(); |
899 EXPECT_EQ(FILE_ERROR_OK, error); | 899 EXPECT_EQ(FILE_ERROR_OK, error); |
900 | 900 |
901 // Now able to remove the cache entry. | 901 // Now able to remove the cache entry. |
902 EXPECT_EQ(FILE_ERROR_OK, cache_->Remove(entry->local_id())); | 902 EXPECT_EQ(FILE_ERROR_OK, cache_->Remove(entry->local_id())); |
903 } | 903 } |
904 | 904 |
905 TEST_F(FileSystemTest, GetShareUrl) { | 905 TEST_F(FileSystemTest, GetShareUrl) { |
906 ASSERT_TRUE(LoadFullResourceList()); | 906 ASSERT_TRUE(LoadFullResourceList()); |
907 | 907 |
908 const base::FilePath kFileInRoot(FILE_PATH_LITERAL("drive/root/File 1.txt")); | 908 const base::FilePath kFileInRoot(FILE_PATH_LITERAL("drive/root/File 1.txt")); |
909 const GURL kEmbedOrigin("chrome-extension://test-id"); | 909 const GURL kEmbedOrigin("chrome-extension://test-id"); |
910 | 910 |
911 // Try to fetch the URL for the sharing dialog. | 911 // Try to fetch the URL for the sharing dialog. |
912 FileError error = FILE_ERROR_FAILED; | 912 FileError error = FILE_ERROR_FAILED; |
913 GURL share_url; | 913 GURL share_url; |
914 file_system_->GetShareUrl( | 914 file_system_->GetShareUrl( |
915 kFileInRoot, | 915 kFileInRoot, |
916 kEmbedOrigin, | 916 kEmbedOrigin, |
917 google_apis::test_util::CreateCopyResultCallback(&error, &share_url)); | 917 google_apis::test_util::CreateCopyResultCallback(&error, &share_url)); |
918 test_util::RunBlockingPoolTask(); | 918 content::RunAllBlockingPoolTasksUntilIdle(); |
919 | 919 |
920 // Verify the share url to the sharing dialog. | 920 // Verify the share url to the sharing dialog. |
921 EXPECT_EQ(FILE_ERROR_OK, error); | 921 EXPECT_EQ(FILE_ERROR_OK, error); |
922 EXPECT_TRUE(share_url.is_valid()); | 922 EXPECT_TRUE(share_url.is_valid()); |
923 } | 923 } |
924 | 924 |
925 } // namespace drive | 925 } // namespace drive |
OLD | NEW |