Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(138)

Side by Side Diff: ppapi/tests/test_file_ref.cc

Issue 113363004: PPAPI: Add new PPB_FileRef.MakeDirectory to support exclusive operation (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase Created 6 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « ppapi/tests/test_file_io.cc ('k') | ppapi/thunk/interfaces_ppb_public_dev_channel.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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 "ppapi/tests/test_file_ref.h" 5 #include "ppapi/tests/test_file_ref.h"
6 6
7 #include <stdio.h> 7 #include <stdio.h>
8 8
9 #include <sstream> 9 #include <sstream>
10 #include <vector> 10 #include <vector>
(...skipping 280 matching lines...) Expand 10 before | Expand all | Expand 10 after
291 291
292 std::string TestFileRef::TestMakeDirectory() { 292 std::string TestFileRef::TestMakeDirectory() {
293 TestCompletionCallback callback(instance_->pp_instance(), callback_type()); 293 TestCompletionCallback callback(instance_->pp_instance(), callback_type());
294 294
295 // Open. 295 // Open.
296 pp::FileSystem file_system(instance_, PP_FILESYSTEMTYPE_LOCALTEMPORARY); 296 pp::FileSystem file_system(instance_, PP_FILESYSTEMTYPE_LOCALTEMPORARY);
297 callback.WaitForResult(file_system.Open(1024, callback.GetCallback())); 297 callback.WaitForResult(file_system.Open(1024, callback.GetCallback()));
298 CHECK_CALLBACK_BEHAVIOR(callback); 298 CHECK_CALLBACK_BEHAVIOR(callback);
299 ASSERT_EQ(PP_OK, callback.result()); 299 ASSERT_EQ(PP_OK, callback.result());
300 300
301 // MakeDirectory. 301 // Make a directory.
302 pp::FileRef dir_ref(file_system, "/test_dir_make_directory"); 302 pp::FileRef dir_ref(file_system, "/dir_make_dir");
303 callback.WaitForResult(dir_ref.MakeDirectory(callback.GetCallback())); 303 callback.WaitForResult(
304 dir_ref.MakeDirectory(PP_MAKEDIRECTORYFLAG_NONE, callback.GetCallback()));
304 CHECK_CALLBACK_BEHAVIOR(callback); 305 CHECK_CALLBACK_BEHAVIOR(callback);
305 ASSERT_EQ(PP_OK, callback.result()); 306 ASSERT_EQ(PP_OK, callback.result());
306 307
307 // MakeDirectory aborted. 308 // Make a directory on the existing path without exclusive flag.
309 callback.WaitForResult(
310 dir_ref.MakeDirectory(PP_MAKEDIRECTORYFLAG_NONE, callback.GetCallback()));
311 CHECK_CALLBACK_BEHAVIOR(callback);
312 ASSERT_EQ(PP_OK, callback.result());
313
314 // Making a directory should be aborted.
308 int32_t rv = PP_ERROR_FAILED; 315 int32_t rv = PP_ERROR_FAILED;
309 { 316 {
310 rv = pp::FileRef(file_system, "/test_dir_make_abort") 317 rv = pp::FileRef(file_system, "/dir_make_dir_abort")
311 .MakeDirectory(callback.GetCallback()); 318 .MakeDirectory(PP_MAKEDIRECTORYFLAG_NONE, callback.GetCallback());
312 } 319 }
313 callback.WaitForAbortResult(rv); 320 callback.WaitForAbortResult(rv);
314 CHECK_CALLBACK_BEHAVIOR(callback); 321 CHECK_CALLBACK_BEHAVIOR(callback);
315 322
316 // MakeDirectoryIncludingAncestors. 323 // Make nested directories.
317 dir_ref = pp::FileRef(file_system, "/dir_make_dir_1/dir_make_dir_2"); 324 dir_ref = pp::FileRef(file_system, "/dir_make_nested_dir_1/dir");
318 callback.WaitForResult( 325 callback.WaitForResult(
319 dir_ref.MakeDirectoryIncludingAncestors(callback.GetCallback())); 326 dir_ref.MakeDirectory(PP_MAKEDIRECTORYFLAG_WITH_ANCESTORS,
327 callback.GetCallback()));
320 CHECK_CALLBACK_BEHAVIOR(callback); 328 CHECK_CALLBACK_BEHAVIOR(callback);
321 ASSERT_EQ(PP_OK, callback.result()); 329 ASSERT_EQ(PP_OK, callback.result());
322 330
323 // MakeDirectoryIncludingAncestors aborted. 331 dir_ref = pp::FileRef(file_system, "/dir_make_nested_dir_2/dir");
324 { 332 callback.WaitForResult(
325 rv = pp::FileRef(file_system, "/dir_make_abort_1/dir_make_abort_2") 333 dir_ref.MakeDirectory(PP_MAKEDIRECTORYFLAG_NONE, callback.GetCallback()));
326 .MakeDirectoryIncludingAncestors(callback.GetCallback());
327 }
328 callback.WaitForAbortResult(rv);
329 CHECK_CALLBACK_BEHAVIOR(callback); 334 CHECK_CALLBACK_BEHAVIOR(callback);
335 ASSERT_EQ(PP_ERROR_FILENOTFOUND, callback.result());
330 336
331 // MakeDirectory with nested path should fail. 337 // Ensure there is no directory on the path to test exclusive cases.
332 dir_ref = pp::FileRef(file_system, "/dir_make_dir_3/dir_make_dir_4"); 338 dir_ref = pp::FileRef(file_system, "/dir_make_dir_exclusive");
333 callback.WaitForResult(dir_ref.MakeDirectory(callback.GetCallback())); 339 rv = DeleteDirectoryRecursively(&dir_ref);
340 ASSERT_TRUE(rv == PP_OK || rv == PP_ERROR_FILENOTFOUND);
341
342 // Make a directory exclusively.
343 callback.WaitForResult(
344 dir_ref.MakeDirectory(PP_MAKEDIRECTORYFLAG_EXCLUSIVE,
345 callback.GetCallback()));
334 CHECK_CALLBACK_BEHAVIOR(callback); 346 CHECK_CALLBACK_BEHAVIOR(callback);
335 ASSERT_NE(PP_OK, callback.result()); 347 ASSERT_EQ(PP_OK, callback.result());
348
349 callback.WaitForResult(
350 dir_ref.MakeDirectory(PP_MAKEDIRECTORYFLAG_EXCLUSIVE,
351 callback.GetCallback()));
352 CHECK_CALLBACK_BEHAVIOR(callback);
353 ASSERT_EQ(PP_ERROR_FILEEXISTS, callback.result());
336 354
337 PASS(); 355 PASS();
338 } 356 }
339 357
340 std::string TestFileRef::TestQueryAndTouchFile() { 358 std::string TestFileRef::TestQueryAndTouchFile() {
341 TestCompletionCallback callback(instance_->pp_instance(), callback_type()); 359 TestCompletionCallback callback(instance_->pp_instance(), callback_type());
342 pp::FileSystem file_system(instance_, PP_FILESYSTEMTYPE_LOCALTEMPORARY); 360 pp::FileSystem file_system(instance_, PP_FILESYSTEMTYPE_LOCALTEMPORARY);
343 callback.WaitForResult(file_system.Open(1024, callback.GetCallback())); 361 callback.WaitForResult(file_system.Open(1024, callback.GetCallback()));
344 CHECK_CALLBACK_BEHAVIOR(callback); 362 CHECK_CALLBACK_BEHAVIOR(callback);
345 ASSERT_EQ(PP_OK, callback.result()); 363 ASSERT_EQ(PP_OK, callback.result());
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
425 callback.WaitForResult( 443 callback.WaitForResult(
426 file_io.Open(file_ref, PP_FILEOPENFLAG_CREATE, callback.GetCallback())); 444 file_io.Open(file_ref, PP_FILEOPENFLAG_CREATE, callback.GetCallback()));
427 CHECK_CALLBACK_BEHAVIOR(callback); 445 CHECK_CALLBACK_BEHAVIOR(callback);
428 ASSERT_EQ(PP_OK, callback.result()); 446 ASSERT_EQ(PP_OK, callback.result());
429 447
430 callback.WaitForResult(file_ref.Delete(callback.GetCallback())); 448 callback.WaitForResult(file_ref.Delete(callback.GetCallback()));
431 CHECK_CALLBACK_BEHAVIOR(callback); 449 CHECK_CALLBACK_BEHAVIOR(callback);
432 ASSERT_EQ(PP_OK, callback.result()); 450 ASSERT_EQ(PP_OK, callback.result());
433 451
434 pp::FileRef dir_ref(file_system, "/dir_delete"); 452 pp::FileRef dir_ref(file_system, "/dir_delete");
435 callback.WaitForResult(dir_ref.MakeDirectory(callback.GetCallback())); 453 callback.WaitForResult(dir_ref.MakeDirectory(
454 PP_MAKEDIRECTORYFLAG_NONE, callback.GetCallback()));
436 CHECK_CALLBACK_BEHAVIOR(callback); 455 CHECK_CALLBACK_BEHAVIOR(callback);
437 ASSERT_EQ(PP_OK, callback.result()); 456 ASSERT_EQ(PP_OK, callback.result());
438 457
439 callback.WaitForResult(dir_ref.Delete(callback.GetCallback())); 458 callback.WaitForResult(dir_ref.Delete(callback.GetCallback()));
440 CHECK_CALLBACK_BEHAVIOR(callback); 459 CHECK_CALLBACK_BEHAVIOR(callback);
441 ASSERT_EQ(PP_OK, callback.result()); 460 ASSERT_EQ(PP_OK, callback.result());
442 461
443 pp::FileRef nested_dir_ref(file_system, "/dir_delete_1/dir_delete_2"); 462 pp::FileRef nested_dir_ref(file_system, "/dir_delete_1/dir_delete_2");
444 callback.WaitForResult( 463 callback.WaitForResult(
445 nested_dir_ref.MakeDirectoryIncludingAncestors(callback.GetCallback())); 464 nested_dir_ref.MakeDirectory(PP_MAKEDIRECTORYFLAG_WITH_ANCESTORS,
465 callback.GetCallback()));
446 CHECK_CALLBACK_BEHAVIOR(callback); 466 CHECK_CALLBACK_BEHAVIOR(callback);
447 ASSERT_EQ(PP_OK, callback.result()); 467 ASSERT_EQ(PP_OK, callback.result());
448 468
449 // Attempt to delete the parent directory (should fail; it's non-empty). 469 // Attempt to delete the parent directory (should fail; it's non-empty).
450 pp::FileRef parent_dir_ref = nested_dir_ref.GetParent(); 470 pp::FileRef parent_dir_ref = nested_dir_ref.GetParent();
451 callback.WaitForResult(parent_dir_ref.Delete(callback.GetCallback())); 471 callback.WaitForResult(parent_dir_ref.Delete(callback.GetCallback()));
452 CHECK_CALLBACK_BEHAVIOR(callback); 472 CHECK_CALLBACK_BEHAVIOR(callback);
453 ASSERT_EQ(PP_ERROR_FAILED, callback.result()); 473 ASSERT_EQ(PP_ERROR_FAILED, callback.result());
454 474
455 pp::FileRef nonexistent_file_ref(file_system, "/nonexistent_file_delete"); 475 pp::FileRef nonexistent_file_ref(file_system, "/nonexistent_file_delete");
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
489 CHECK_CALLBACK_BEHAVIOR(callback); 509 CHECK_CALLBACK_BEHAVIOR(callback);
490 ASSERT_EQ(PP_OK, callback.result()); 510 ASSERT_EQ(PP_OK, callback.result());
491 511
492 pp::FileRef target_file_ref(file_system, "/target_file_rename"); 512 pp::FileRef target_file_ref(file_system, "/target_file_rename");
493 callback.WaitForResult( 513 callback.WaitForResult(
494 file_ref.Rename(target_file_ref, callback.GetCallback())); 514 file_ref.Rename(target_file_ref, callback.GetCallback()));
495 CHECK_CALLBACK_BEHAVIOR(callback); 515 CHECK_CALLBACK_BEHAVIOR(callback);
496 ASSERT_EQ(PP_OK, callback.result()); 516 ASSERT_EQ(PP_OK, callback.result());
497 517
498 pp::FileRef dir_ref(file_system, "/dir_rename"); 518 pp::FileRef dir_ref(file_system, "/dir_rename");
499 callback.WaitForResult(dir_ref.MakeDirectory(callback.GetCallback())); 519 callback.WaitForResult(dir_ref.MakeDirectory(
520 PP_MAKEDIRECTORYFLAG_NONE, callback.GetCallback()));
500 CHECK_CALLBACK_BEHAVIOR(callback); 521 CHECK_CALLBACK_BEHAVIOR(callback);
501 ASSERT_EQ(PP_OK, callback.result()); 522 ASSERT_EQ(PP_OK, callback.result());
502 523
503 pp::FileRef target_dir_ref(file_system, "/target_dir_rename"); 524 pp::FileRef target_dir_ref(file_system, "/target_dir_rename");
504 callback.WaitForResult( 525 callback.WaitForResult(
505 dir_ref.Rename(target_dir_ref, callback.GetCallback())); 526 dir_ref.Rename(target_dir_ref, callback.GetCallback()));
506 CHECK_CALLBACK_BEHAVIOR(callback); 527 CHECK_CALLBACK_BEHAVIOR(callback);
507 ASSERT_EQ(PP_OK, callback.result()); 528 ASSERT_EQ(PP_OK, callback.result());
508 529
509 pp::FileRef nested_dir_ref(file_system, "/dir_rename_1/dir_rename_2"); 530 pp::FileRef nested_dir_ref(file_system, "/dir_rename_1/dir_rename_2");
510 callback.WaitForResult( 531 callback.WaitForResult(
511 nested_dir_ref.MakeDirectoryIncludingAncestors(callback.GetCallback())); 532 nested_dir_ref.MakeDirectory(PP_MAKEDIRECTORYFLAG_WITH_ANCESTORS,
533 callback.GetCallback()));
512 CHECK_CALLBACK_BEHAVIOR(callback); 534 CHECK_CALLBACK_BEHAVIOR(callback);
513 ASSERT_EQ(PP_OK, callback.result()); 535 ASSERT_EQ(PP_OK, callback.result());
514 536
515 // Try to rename nested directory to the parent name. Should fail. 537 // Try to rename nested directory to the parent name. Should fail.
516 pp::FileRef target_nested_dir_ref(file_system, "/dir_rename_1"); 538 pp::FileRef target_nested_dir_ref(file_system, "/dir_rename_1");
517 callback.WaitForResult( 539 callback.WaitForResult(
518 nested_dir_ref.Rename(target_nested_dir_ref, callback.GetCallback())); 540 nested_dir_ref.Rename(target_nested_dir_ref, callback.GetCallback()));
519 CHECK_CALLBACK_BEHAVIOR(callback); 541 CHECK_CALLBACK_BEHAVIOR(callback);
520 ASSERT_EQ(PP_ERROR_FAILED, callback.result()); 542 ASSERT_EQ(PP_ERROR_FAILED, callback.result());
521 543
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
608 std::string TestFileRef::TestFileNameEscaping() { 630 std::string TestFileRef::TestFileNameEscaping() {
609 TestCompletionCallback callback(instance_->pp_instance(), callback_type()); 631 TestCompletionCallback callback(instance_->pp_instance(), callback_type());
610 pp::FileSystem file_system(instance_, PP_FILESYSTEMTYPE_LOCALTEMPORARY); 632 pp::FileSystem file_system(instance_, PP_FILESYSTEMTYPE_LOCALTEMPORARY);
611 callback.WaitForResult(file_system.Open(1024, callback.GetCallback())); 633 callback.WaitForResult(file_system.Open(1024, callback.GetCallback()));
612 CHECK_CALLBACK_BEHAVIOR(callback); 634 CHECK_CALLBACK_BEHAVIOR(callback);
613 ASSERT_EQ(PP_OK, callback.result()); 635 ASSERT_EQ(PP_OK, callback.result());
614 636
615 std::string test_dir_path = "/dir_for_escaping_test"; 637 std::string test_dir_path = "/dir_for_escaping_test";
616 // Create a directory in which to test. 638 // Create a directory in which to test.
617 pp::FileRef test_dir_ref(file_system, test_dir_path.c_str()); 639 pp::FileRef test_dir_ref(file_system, test_dir_path.c_str());
618 callback.WaitForResult(test_dir_ref.MakeDirectory(callback.GetCallback())); 640 callback.WaitForResult(test_dir_ref.MakeDirectory(
641 PP_MAKEDIRECTORYFLAG_NONE, callback.GetCallback()));
619 CHECK_CALLBACK_BEHAVIOR(callback); 642 CHECK_CALLBACK_BEHAVIOR(callback);
620 ASSERT_EQ(PP_OK, callback.result()); 643 ASSERT_EQ(PP_OK, callback.result());
621 644
622 // Create the file with the terrible name. 645 // Create the file with the terrible name.
623 std::string full_file_path = test_dir_path + "/" + kTerribleName; 646 std::string full_file_path = test_dir_path + "/" + kTerribleName;
624 pp::FileRef file_ref(file_system, full_file_path.c_str()); 647 pp::FileRef file_ref(file_system, full_file_path.c_str());
625 pp::FileIO file_io(instance_); 648 pp::FileIO file_io(instance_);
626 callback.WaitForResult( 649 callback.WaitForResult(
627 file_io.Open(file_ref, PP_FILEOPENFLAG_CREATE, callback.GetCallback())); 650 file_io.Open(file_ref, PP_FILEOPENFLAG_CREATE, callback.GetCallback()));
628 CHECK_CALLBACK_BEHAVIOR(callback); 651 CHECK_CALLBACK_BEHAVIOR(callback);
(...skipping 27 matching lines...) Expand all
656 679
657 // Setup testing directories and files. 680 // Setup testing directories and files.
658 const char* test_dir_name = "/test_get_next_file"; 681 const char* test_dir_name = "/test_get_next_file";
659 const char* file_prefix = "file_"; 682 const char* file_prefix = "file_";
660 const char* dir_prefix = "dir_"; 683 const char* dir_prefix = "dir_";
661 684
662 pp::FileRef test_dir(file_system, test_dir_name); 685 pp::FileRef test_dir(file_system, test_dir_name);
663 int32_t rv = DeleteDirectoryRecursively(&test_dir); 686 int32_t rv = DeleteDirectoryRecursively(&test_dir);
664 ASSERT_TRUE(rv == PP_OK || rv == PP_ERROR_FILENOTFOUND); 687 ASSERT_TRUE(rv == PP_OK || rv == PP_ERROR_FILENOTFOUND);
665 688
666 callback.WaitForResult(test_dir.MakeDirectory(callback.GetCallback())); 689 callback.WaitForResult(test_dir.MakeDirectory(
690 PP_MAKEDIRECTORYFLAG_NONE, callback.GetCallback()));
667 CHECK_CALLBACK_BEHAVIOR(callback); 691 CHECK_CALLBACK_BEHAVIOR(callback);
668 ASSERT_EQ(PP_OK, callback.result()); 692 ASSERT_EQ(PP_OK, callback.result());
669 693
670 static const int kNumFiles = 3; 694 static const int kNumFiles = 3;
671 std::set<std::string> expected_file_names; 695 std::set<std::string> expected_file_names;
672 for (int i = 1; i <= kNumFiles; ++i) { 696 for (int i = 1; i <= kNumFiles; ++i) {
673 std::ostringstream buffer; 697 std::ostringstream buffer;
674 buffer << test_dir_name << '/' << file_prefix << i; 698 buffer << test_dir_name << '/' << file_prefix << i;
675 pp::FileRef file_ref(file_system, buffer.str().c_str()); 699 pp::FileRef file_ref(file_system, buffer.str().c_str());
676 700
677 pp::FileIO file_io(instance_); 701 pp::FileIO file_io(instance_);
678 callback.WaitForResult( 702 callback.WaitForResult(
679 file_io.Open(file_ref, PP_FILEOPENFLAG_CREATE, callback.GetCallback())); 703 file_io.Open(file_ref, PP_FILEOPENFLAG_CREATE, callback.GetCallback()));
680 CHECK_CALLBACK_BEHAVIOR(callback); 704 CHECK_CALLBACK_BEHAVIOR(callback);
681 ASSERT_EQ(PP_OK, callback.result()); 705 ASSERT_EQ(PP_OK, callback.result());
682 706
683 expected_file_names.insert(buffer.str()); 707 expected_file_names.insert(buffer.str());
684 } 708 }
685 709
686 static const int kNumDirectories = 3; 710 static const int kNumDirectories = 3;
687 std::set<std::string> expected_dir_names; 711 std::set<std::string> expected_dir_names;
688 for (int i = 1; i <= kNumDirectories; ++i) { 712 for (int i = 1; i <= kNumDirectories; ++i) {
689 std::ostringstream buffer; 713 std::ostringstream buffer;
690 buffer << test_dir_name << '/' << dir_prefix << i; 714 buffer << test_dir_name << '/' << dir_prefix << i;
691 pp::FileRef file_ref(file_system, buffer.str().c_str()); 715 pp::FileRef file_ref(file_system, buffer.str().c_str());
692 716
693 callback.WaitForResult(file_ref.MakeDirectory(callback.GetCallback())); 717 callback.WaitForResult(file_ref.MakeDirectory(
718 PP_MAKEDIRECTORYFLAG_NONE, callback.GetCallback()));
694 CHECK_CALLBACK_BEHAVIOR(callback); 719 CHECK_CALLBACK_BEHAVIOR(callback);
695 ASSERT_EQ(PP_OK, callback.result()); 720 ASSERT_EQ(PP_OK, callback.result());
696 721
697 expected_dir_names.insert(buffer.str()); 722 expected_dir_names.insert(buffer.str());
698 } 723 }
699 724
700 // Test that |ReadDirectoryEntries()| is able to fetch all 725 // Test that |ReadDirectoryEntries()| is able to fetch all
701 // directories and files that we created. 726 // directories and files that we created.
702 { 727 {
703 TestCompletionCallbackWithOutput<DirEntries> output_callback( 728 TestCompletionCallbackWithOutput<DirEntries> output_callback(
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
741 { 766 {
742 rv = pp::FileRef(file_system, test_dir_name) 767 rv = pp::FileRef(file_system, test_dir_name)
743 .ReadDirectoryEntries(output_callback.GetCallback()); 768 .ReadDirectoryEntries(output_callback.GetCallback());
744 } 769 }
745 output_callback.WaitForAbortResult(rv); 770 output_callback.WaitForAbortResult(rv);
746 CHECK_CALLBACK_BEHAVIOR(output_callback); 771 CHECK_CALLBACK_BEHAVIOR(output_callback);
747 772
748 773
749 PASS(); 774 PASS();
750 } 775 }
OLDNEW
« no previous file with comments | « ppapi/tests/test_file_io.cc ('k') | ppapi/thunk/interfaces_ppb_public_dev_channel.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698