Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 #include <vector> | 8 #include <vector> |
| 9 | 9 |
| 10 #include "ppapi/c/pp_errors.h" | 10 #include "ppapi/c/pp_errors.h" |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 42 return method_name + " returned '" + returned_result + "'; '" + | 42 return method_name + " returned '" + returned_result + "'; '" + |
| 43 expected_result + "' expected."; | 43 expected_result + "' expected."; |
| 44 } | 44 } |
| 45 | 45 |
| 46 } // namespace | 46 } // namespace |
| 47 | 47 |
| 48 bool TestFileRef::Init() { | 48 bool TestFileRef::Init() { |
| 49 return CheckTestingInterface() && EnsureRunningOverHTTP(); | 49 return CheckTestingInterface() && EnsureRunningOverHTTP(); |
| 50 } | 50 } |
| 51 | 51 |
| 52 std::string TestFileRef::MakeExternalFileRef(pp::FileRef *file_ref_ext) { | |
|
yzshen1
2013/03/26 23:32:42
'*' is at wrong position.
| |
| 53 pp::URLRequestInfo request(instance_); | |
| 54 request.SetURL("test_url_loader_data/hello.txt"); | |
| 55 request.SetStreamToFile(true); | |
| 56 | |
| 57 TestCompletionCallback callback(instance_->pp_instance(), force_async_); | |
| 58 | |
| 59 pp::URLLoader loader(instance_); | |
| 60 int32_t rv = loader.Open(request, callback.GetCallback()); | |
| 61 if (force_async_ && rv != PP_OK_COMPLETIONPENDING) | |
| 62 return ReportError("URLLoader::Open force_async", rv); | |
| 63 if (rv == PP_OK_COMPLETIONPENDING) | |
| 64 rv = callback.WaitForResult(); | |
| 65 if (rv != PP_OK) | |
| 66 return "URLLoader::Open() failed."; | |
| 67 | |
| 68 pp::URLResponseInfo response_info(loader.GetResponseInfo()); | |
| 69 if (response_info.is_null()) | |
| 70 return "URLLoader::GetResponseInfo returned null"; | |
| 71 int32_t status_code = response_info.GetStatusCode(); | |
| 72 if (status_code != 200) | |
| 73 return "Unexpected HTTP status code"; | |
| 74 | |
| 75 *file_ref_ext = pp::FileRef(response_info.GetBodyAsFileRef()); | |
| 76 if (file_ref_ext->GetFileSystemType() != PP_FILESYSTEMTYPE_EXTERNAL) | |
| 77 return "file_ref_ext expected to be external."; | |
| 78 return ""; | |
| 79 } | |
| 80 | |
| 52 void TestFileRef::RunTests(const std::string& filter) { | 81 void TestFileRef::RunTests(const std::string& filter) { |
| 53 RUN_TEST_FORCEASYNC_AND_NOT(Create, filter); | 82 RUN_TEST_FORCEASYNC_AND_NOT(Create, filter); |
| 54 RUN_TEST_FORCEASYNC_AND_NOT(GetFileSystemType, filter); | 83 RUN_TEST_FORCEASYNC_AND_NOT(GetFileSystemType, filter); |
| 55 RUN_TEST_FORCEASYNC_AND_NOT(GetName, filter); | 84 RUN_TEST_FORCEASYNC_AND_NOT(GetName, filter); |
| 56 RUN_TEST_FORCEASYNC_AND_NOT(GetPath, filter); | 85 RUN_TEST_FORCEASYNC_AND_NOT(GetPath, filter); |
| 57 RUN_TEST_FORCEASYNC_AND_NOT(GetParent, filter); | 86 RUN_TEST_FORCEASYNC_AND_NOT(GetParent, filter); |
| 58 RUN_TEST_FORCEASYNC_AND_NOT(MakeDirectory, filter); | 87 RUN_TEST_FORCEASYNC_AND_NOT(MakeDirectory, filter); |
| 59 RUN_TEST_FORCEASYNC_AND_NOT(QueryAndTouchFile, filter); | 88 RUN_TEST_FORCEASYNC_AND_NOT(QueryAndTouchFile, filter); |
| 60 RUN_TEST_FORCEASYNC_AND_NOT(DeleteFileAndDirectory, filter); | 89 RUN_TEST_FORCEASYNC_AND_NOT(DeleteFileAndDirectory, filter); |
| 61 RUN_TEST_FORCEASYNC_AND_NOT(RenameFileAndDirectory, filter); | 90 RUN_TEST_FORCEASYNC_AND_NOT(RenameFileAndDirectory, filter); |
| 91 RUN_TEST_FORCEASYNC_AND_NOT(Query, filter); | |
| 62 #ifndef PPAPI_OS_NACL // NaCl can't run this test yet. | 92 #ifndef PPAPI_OS_NACL // NaCl can't run this test yet. |
| 63 RUN_TEST_FORCEASYNC_AND_NOT(FileNameEscaping, filter); | 93 RUN_TEST_FORCEASYNC_AND_NOT(FileNameEscaping, filter); |
| 64 #endif | 94 #endif |
| 65 } | 95 } |
| 66 | 96 |
| 67 std::string TestFileRef::TestCreate() { | 97 std::string TestFileRef::TestCreate() { |
| 68 std::vector<std::string> invalid_paths; | 98 std::vector<std::string> invalid_paths; |
| 69 invalid_paths.push_back("invalid_path"); // no '/' at the first character | 99 invalid_paths.push_back("invalid_path"); // no '/' at the first character |
| 70 invalid_paths.push_back(""); // empty path | 100 invalid_paths.push_back(""); // empty path |
| 71 // The following are directory traversal checks | 101 // The following are directory traversal checks |
| (...skipping 29 matching lines...) Expand all Loading... | |
| 101 instance_, PP_FILESYSTEMTYPE_LOCALTEMPORARY); | 131 instance_, PP_FILESYSTEMTYPE_LOCALTEMPORARY); |
| 102 | 132 |
| 103 pp::FileRef file_ref_pers(file_system_pers, kPersFilePath); | 133 pp::FileRef file_ref_pers(file_system_pers, kPersFilePath); |
| 104 if (file_ref_pers.GetFileSystemType() != PP_FILESYSTEMTYPE_LOCALPERSISTENT) | 134 if (file_ref_pers.GetFileSystemType() != PP_FILESYSTEMTYPE_LOCALPERSISTENT) |
| 105 return "file_ref_pers expected to be persistent."; | 135 return "file_ref_pers expected to be persistent."; |
| 106 | 136 |
| 107 pp::FileRef file_ref_temp(file_system_temp, kTempFilePath); | 137 pp::FileRef file_ref_temp(file_system_temp, kTempFilePath); |
| 108 if (file_ref_temp.GetFileSystemType() != PP_FILESYSTEMTYPE_LOCALTEMPORARY) | 138 if (file_ref_temp.GetFileSystemType() != PP_FILESYSTEMTYPE_LOCALTEMPORARY) |
| 109 return "file_ref_temp expected to be temporary."; | 139 return "file_ref_temp expected to be temporary."; |
| 110 | 140 |
| 111 pp::URLRequestInfo request(instance_); | 141 pp::FileRef file_ref_ext; |
| 112 request.SetURL("test_url_loader_data/hello.txt"); | 142 std::string result = MakeExternalFileRef(&file_ref_ext); |
| 113 request.SetStreamToFile(true); | 143 if (result != "") |
|
yzshen1
2013/03/26 23:32:42
nit: please use !result.empty()
| |
| 114 | 144 return result; |
| 115 TestCompletionCallback callback(instance_->pp_instance(), force_async_); | |
| 116 | |
| 117 pp::URLLoader loader(instance_); | |
| 118 int32_t rv = loader.Open(request, callback.GetCallback()); | |
| 119 if (force_async_ && rv != PP_OK_COMPLETIONPENDING) | |
| 120 return ReportError("URLLoader::Open force_async", rv); | |
| 121 if (rv == PP_OK_COMPLETIONPENDING) | |
| 122 rv = callback.WaitForResult(); | |
| 123 if (rv != PP_OK) | |
| 124 return "URLLoader::Open() failed."; | |
| 125 | |
| 126 pp::URLResponseInfo response_info(loader.GetResponseInfo()); | |
| 127 if (response_info.is_null()) | |
| 128 return "URLLoader::GetResponseInfo returned null"; | |
| 129 int32_t status_code = response_info.GetStatusCode(); | |
| 130 if (status_code != 200) | |
| 131 return "Unexpected HTTP status code"; | |
| 132 | |
| 133 pp::FileRef file_ref_ext(response_info.GetBodyAsFileRef()); | |
| 134 if (file_ref_ext.GetFileSystemType() != PP_FILESYSTEMTYPE_EXTERNAL) | |
| 135 return "file_ref_ext expected to be external."; | |
| 136 | |
| 137 PASS(); | 145 PASS(); |
| 138 } | 146 } |
| 139 | 147 |
| 140 std::string TestFileRef::TestGetName() { | 148 std::string TestFileRef::TestGetName() { |
| 141 pp::FileSystem file_system_pers( | 149 pp::FileSystem file_system_pers( |
| 142 instance_, PP_FILESYSTEMTYPE_LOCALPERSISTENT); | 150 instance_, PP_FILESYSTEMTYPE_LOCALPERSISTENT); |
| 143 pp::FileSystem file_system_temp( | 151 pp::FileSystem file_system_temp( |
| 144 instance_, PP_FILESYSTEMTYPE_LOCALTEMPORARY); | 152 instance_, PP_FILESYSTEMTYPE_LOCALTEMPORARY); |
| 145 | 153 |
| 146 pp::FileRef file_ref_pers(file_system_pers, kPersFilePath); | 154 pp::FileRef file_ref_pers(file_system_pers, kPersFilePath); |
| (...skipping 528 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 675 rv = callback.WaitForResult(); | 683 rv = callback.WaitForResult(); |
| 676 if (rv != PP_ERROR_ABORTED) | 684 if (rv != PP_ERROR_ABORTED) |
| 677 return "FileSystem::Rename not aborted."; | 685 return "FileSystem::Rename not aborted."; |
| 678 } else if (rv != PP_OK) { | 686 } else if (rv != PP_OK) { |
| 679 return ReportError("FileSystem::Rename", rv); | 687 return ReportError("FileSystem::Rename", rv); |
| 680 } | 688 } |
| 681 | 689 |
| 682 PASS(); | 690 PASS(); |
| 683 } | 691 } |
| 684 | 692 |
| 693 std::string TestFileRef::TestQuery() { | |
| 694 TestCompletionCallback callback(instance_->pp_instance(), callback_type()); | |
| 695 | |
| 696 pp::FileSystem file_system(instance_, PP_FILESYSTEMTYPE_LOCALTEMPORARY); | |
| 697 callback.WaitForResult(file_system.Open(1024, callback.GetCallback())); | |
| 698 CHECK_CALLBACK_BEHAVIOR(callback); | |
| 699 ASSERT_EQ(PP_OK, callback.result()); | |
| 700 | |
| 701 pp::FileRef file_ref(file_system, "/file"); | |
| 702 pp::FileIO file_io(instance_); | |
| 703 callback.WaitForResult(file_io.Open(file_ref, PP_FILEOPENFLAG_CREATE, | |
| 704 callback.GetCallback())); | |
| 705 CHECK_CALLBACK_BEHAVIOR(callback); | |
| 706 ASSERT_EQ(PP_OK, callback.result()); | |
| 707 | |
| 708 // We touch the file so we can easily check access and modified time. | |
| 709 callback.WaitForResult(file_io.Touch(0, 0, callback.GetCallback())); | |
| 710 CHECK_CALLBACK_BEHAVIOR(callback); | |
| 711 ASSERT_EQ(PP_OK, callback.result()); | |
| 712 | |
| 713 TestCompletionCallbackWithOutput<PP_FileInfo> out_callback( | |
| 714 instance_->pp_instance(), callback_type()); | |
| 715 out_callback.WaitForResult(file_ref.Query( | |
| 716 out_callback.GetCallbackWithOutput())); | |
| 717 CHECK_CALLBACK_BEHAVIOR(out_callback); | |
| 718 ASSERT_EQ(PP_OK, out_callback.result()); | |
| 719 | |
| 720 PP_FileInfo info = out_callback.output(); | |
| 721 ASSERT_EQ(0, info.size); | |
| 722 ASSERT_EQ(PP_FILETYPE_REGULAR, info.type); | |
| 723 ASSERT_EQ(PP_FILESYSTEMTYPE_LOCALTEMPORARY, info.system_type); | |
| 724 ASSERT_DOUBLE_EQ(0.0, info.last_access_time); | |
| 725 ASSERT_DOUBLE_EQ(0.0, info.last_modified_time); | |
| 726 | |
| 727 // Query a file ref on an external filesystem. | |
| 728 pp::FileRef file_ref_ext; | |
| 729 std::string result = MakeExternalFileRef(&file_ref_ext); | |
| 730 if (result != "") | |
|
yzshen1
2013/03/26 23:32:42
ditto.
| |
| 731 return result; | |
| 732 out_callback.WaitForResult(file_ref_ext.Query( | |
| 733 out_callback.GetCallbackWithOutput())); | |
| 734 CHECK_CALLBACK_BEHAVIOR(out_callback); | |
| 735 if (out_callback.result() != PP_OK) | |
| 736 return ReportError("Query() result", out_callback.result()); | |
| 737 ASSERT_EQ(PP_OK, out_callback.result()); | |
| 738 | |
| 739 info = out_callback.output(); | |
| 740 ASSERT_EQ(PP_FILETYPE_REGULAR, info.type); | |
| 741 ASSERT_EQ(PP_FILESYSTEMTYPE_EXTERNAL, info.system_type); | |
| 742 | |
| 743 // We can't touch the file, so just sanity check the times. | |
| 744 ASSERT_TRUE(info.creation_time >= 0.0); | |
| 745 ASSERT_TRUE(info.last_modified_time >= 0.0); | |
| 746 ASSERT_TRUE(info.last_access_time >= 0.0); | |
| 747 | |
| 748 // Query a file ref for a file that doesn't exist. | |
| 749 pp::FileRef missing_file_ref(file_system, "/missing_file"); | |
| 750 out_callback.WaitForResult(missing_file_ref.Query( | |
| 751 out_callback.GetCallbackWithOutput())); | |
| 752 CHECK_CALLBACK_BEHAVIOR(out_callback); | |
| 753 ASSERT_EQ(PP_ERROR_FILENOTFOUND, out_callback.result()); | |
| 754 | |
| 755 PASS(); | |
| 756 } | |
| 757 | |
| 685 #ifndef PPAPI_OS_NACL | 758 #ifndef PPAPI_OS_NACL |
| 686 std::string TestFileRef::TestFileNameEscaping() { | 759 std::string TestFileRef::TestFileNameEscaping() { |
| 687 TestCompletionCallback callback(instance_->pp_instance(), force_async_); | 760 TestCompletionCallback callback(instance_->pp_instance(), force_async_); |
| 688 pp::FileSystem file_system(instance_, PP_FILESYSTEMTYPE_LOCALTEMPORARY); | 761 pp::FileSystem file_system(instance_, PP_FILESYSTEMTYPE_LOCALTEMPORARY); |
| 689 int32_t rv = file_system.Open(1024, callback.GetCallback()); | 762 int32_t rv = file_system.Open(1024, callback.GetCallback()); |
| 690 if (force_async_ && rv != PP_OK_COMPLETIONPENDING) | 763 if (force_async_ && rv != PP_OK_COMPLETIONPENDING) |
| 691 return ReportError("FileSystem::Open force_async", rv); | 764 return ReportError("FileSystem::Open force_async", rv); |
| 692 if (rv == PP_OK_COMPLETIONPENDING) | 765 if (rv == PP_OK_COMPLETIONPENDING) |
| 693 rv = callback.WaitForResult(); | 766 rv = callback.WaitForResult(); |
| 694 if (rv != PP_OK) | 767 if (rv != PP_OK) |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 734 return "Entry was not found."; | 807 return "Entry was not found."; |
| 735 if (entries.size() != 1) | 808 if (entries.size() != 1) |
| 736 return "Directory had too many entries."; | 809 return "Directory had too many entries."; |
| 737 if (entries.front().file_ref().GetName().AsString() != kTerribleName) | 810 if (entries.front().file_ref().GetName().AsString() != kTerribleName) |
| 738 return "Entry name did not match."; | 811 return "Entry name did not match."; |
| 739 } | 812 } |
| 740 | 813 |
| 741 PASS(); | 814 PASS(); |
| 742 } | 815 } |
| 743 #endif | 816 #endif |
| OLD | NEW |