From 7c115b06ebcee8110f8af900cbb5b703463a88dc Mon Sep 17 00:00:00 2001 From: aee <117306596+aee-google@users.noreply.github.com> Date: Wed, 28 Feb 2024 15:13:24 -0800 Subject: [PATCH] Fix file tests for cobalt. (#2252) b/316404107 --- base/BUILD.gn | 25 +++--- base/files/file.h | 1 + base/files/file_enumerator_starboard.cc | 8 +- base/files/file_enumerator_unittest.cc | 14 ++- base/files/file_path_unittest.cc | 2 +- base/files/file_starboard.cc | 27 ++++-- base/files/file_unittest.cc | 8 +- base/files/file_util.cc | 6 +- base/files/file_util.h | 1 - base/files/file_util_starboard.cc | 19 ++++ base/files/file_util_unittest.cc | 111 ++++++++++++++++++++---- 11 files changed, 175 insertions(+), 47 deletions(-) diff --git a/base/BUILD.gn b/base/BUILD.gn index 39e23e2e607b..03a979fcbacb 100644 --- a/base/BUILD.gn +++ b/base/BUILD.gn @@ -962,6 +962,7 @@ component("base") { "debug/debugger_starboard.cc", "debug/stack_trace_starboard.cc", "files/file_enumerator_starboard.cc", + "files/file_path_watcher_stub.cc", "files/file_starboard.cc", "files/file_util_starboard.cc", "files/memory_mapped_file_starboard.cc", @@ -972,6 +973,7 @@ component("base") { "message_loop/message_pump_io_starboard.h", "message_loop/message_pump_ui_starboard.cc", "message_loop/message_pump_ui_starboard.h", + "process/launch_starboard.cc", "process/memory_starboard.cc", "process/process_starboard.cc", "profiler/module_cache_starboard.cc", @@ -1742,12 +1744,6 @@ component("base") { ] } - if (use_cobalt_customizations) { - sources += [ - "process/launch_starboard.cc", - ] - } - if (!use_cobalt_customizations && is_posix && !is_android) { sources += [ "debug/stack_trace_posix.cc" ] } @@ -3231,16 +3227,15 @@ test("base_unittests") { "environment_unittest.cc", "feature_list_unittest.cc", - # "files/file_enumerator_unittest.cc", + "files/file_enumerator_unittest.cc", "files/file_error_or_unittest.cc", - # "files/file_path_unittest.cc", + "files/file_path_unittest.cc", - # "files/file_path_watcher_unittest.cc", - "files/file_proxy_unittest.cc", - - # "files/file_unittest.cc", - # "files/file_util_unittest.cc", + "files/file_path_watcher_unittest.cc", + # "files/file_proxy_unittest.cc", + "files/file_unittest.cc", + "files/file_util_unittest.cc", "files/important_file_writer_cleaner_unittest.cc", "files/important_file_writer_unittest.cc", "files/memory_mapped_file_unittest.cc", @@ -4123,6 +4118,10 @@ test("base_unittests") { sources += [ "files/file_locking_unittest.cc" ] } + if (use_cobalt_customizations) { + sources -= [ "files/file_path_watcher_unittest.cc" ] + } + if (is_android) { deps += [ "//testing/android/native_test:native_test_native_code" ] sources += [ diff --git a/base/files/file.h b/base/files/file.h index dc6092dbd95f..5f8be9170db3 100644 --- a/base/files/file.h +++ b/base/files/file.h @@ -420,6 +420,7 @@ class BASE_EXPORT File { bool async_ = false; #if defined(STARBOARD) + bool delete_on_close_; std::string file_name_; bool append_ = false; #endif diff --git a/base/files/file_enumerator_starboard.cc b/base/files/file_enumerator_starboard.cc index 36fe3c668342..9b0c3472943d 100644 --- a/base/files/file_enumerator_starboard.cc +++ b/base/files/file_enumerator_starboard.cc @@ -111,8 +111,10 @@ FileEnumerator::~FileEnumerator() = default; std::vector FileEnumerator::ReadDirectory( const FilePath& source) { internal::AssertBlockingAllowed(); - SbDirectory dir = SbDirectoryOpen(source.value().c_str(), NULL); + SbFileError error; + SbDirectory dir = SbDirectoryOpen(source.value().c_str(), &error); if (!SbDirectoryIsValid(dir)) { + error_ = static_cast(error); return std::vector(); } @@ -189,7 +191,8 @@ FilePath FileEnumerator::Next() { } if ((file_info.sb_info_.is_directory && (file_type_ & DIRECTORIES)) || - (!file_info.sb_info_.is_directory && (file_type_ & FILES))) { + (!file_info.sb_info_.is_directory && (file_type_ & FILES)) || + (file_type_ & NAMES_ONLY)) { directory_entries_.push_back(file_info); } } @@ -200,6 +203,7 @@ FilePath FileEnumerator::Next() { } FileEnumerator::FileInfo FileEnumerator::GetInfo() const { + DCHECK(!(file_type_ & FileType::NAMES_ONLY)); return directory_entries_[current_directory_entry_]; } diff --git a/base/files/file_enumerator_unittest.cc b/base/files/file_enumerator_unittest.cc index a30443db811b..05407f36acce 100644 --- a/base/files/file_enumerator_unittest.cc +++ b/base/files/file_enumerator_unittest.cc @@ -184,6 +184,8 @@ TEST(FileEnumerator, SingleFileInFolderForDirSearch) { } } +// Starboard does not support patterns. +#if !defined(STARBOARD) TEST(FileEnumerator, SingleFileInFolderWithFiltering) { ScopedTempDir temp_dir; ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); @@ -202,7 +204,10 @@ TEST(FileEnumerator, SingleFileInFolderWithFiltering) { EXPECT_THAT(files, IsEmpty()); } } +#endif // !defined(STARBOARD) +// Starboard does not support patterns. +#if !defined(STARBOARD) TEST(FileEnumerator, TwoFilesInFolder) { ScopedTempDir temp_dir; ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); @@ -231,6 +236,7 @@ TEST(FileEnumerator, TwoFilesInFolder) { EXPECT_THAT(files, UnorderedElementsAre(foo_txt, bar_txt)); } } +#endif // !defined(STARBOARD) TEST(FileEnumerator, SingleFolderInFolderForFileSearch) { ScopedTempDir temp_dir; @@ -264,6 +270,8 @@ TEST(FileEnumerator, SingleFolderInFolderForDirSearch) { } } +// Starboard does not support patterns. +#if !defined(STARBOARD) TEST(FileEnumerator, TwoFoldersInFolder) { ScopedTempDir temp_dir; ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); @@ -285,6 +293,7 @@ TEST(FileEnumerator, TwoFoldersInFolder) { EXPECT_THAT(files, ElementsAre(subdir_foo)); } } +#endif // !defined(STARBOARD) TEST(FileEnumerator, FolderAndFileInFolder) { ScopedTempDir temp_dir; @@ -354,6 +363,8 @@ TEST(FileEnumerator, FileInSubfolder) { } } +// Starboard does not support patterns. +#if !defined(STARBOARD) TEST(FileEnumerator, FilesInSubfoldersWithFiltering) { ScopedTempDir temp_dir; ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); @@ -391,6 +402,7 @@ TEST(FileEnumerator, FilesInSubfoldersWithFiltering) { FileEnumerator::FolderSearchPolicy::ALL); EXPECT_THAT(files, UnorderedElementsAre(subdir_foo, foo_foo, bar_foo)); } +#endif // !defined(STARBOARD) TEST(FileEnumerator, InvalidDirectory) { ScopedTempDir temp_dir; @@ -415,7 +427,7 @@ TEST(FileEnumerator, InvalidDirectory) { #endif } -#if BUILDFLAG(IS_POSIX) +#if BUILDFLAG(IS_POSIX) && !defined(STARBOARD) TEST(FileEnumerator, SymLinkLoops) { ScopedTempDir temp_dir; ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); diff --git a/base/files/file_path_unittest.cc b/base/files/file_path_unittest.cc index 9673a48bc302..14e228590538 100644 --- a/base/files/file_path_unittest.cc +++ b/base/files/file_path_unittest.cc @@ -335,7 +335,7 @@ TEST_F(FilePathTest, Append) { // handle the case when AppendASCII is passed UTF8 #if BUILDFLAG(IS_WIN) std::string ascii = WideToUTF8(leaf); -#elif BUILDFLAG(IS_POSIX) || BUILDFLAG(IS_FUCHSIA) +#elif BUILDFLAG(IS_POSIX) || BUILDFLAG(IS_FUCHSIA) || defined(STARBOARD) std::string ascii = leaf; #endif observed_str = root.AppendASCII(ascii); diff --git a/base/files/file_starboard.cc b/base/files/file_starboard.cc index 158b761fb286..e89330948846 100644 --- a/base/files/file_starboard.cc +++ b/base/files/file_starboard.cc @@ -16,9 +16,12 @@ #include "base/files/file_starboard.h" +#include + #include "base/files/file.h" #include "base/files/file_path.h" #include "base/logging.h" +#include "base/strings/stringprintf.h" #include "base/threading/thread_restrictions.h" #include "starboard/common/metrics/stats_tracker.h" #include "starboard/common/log.h" @@ -63,6 +66,9 @@ void File::Close() { SCOPED_FILE_TRACE("Close"); internal::AssertBlockingAllowed(); file_.reset(); + if (delete_on_close_) { + SbFileDelete(file_name_.c_str()); + } } int64_t File::Seek(Whence whence, int64_t offset) { @@ -267,8 +273,18 @@ bool File::GetInfo(Info* info) { } File::Error File::GetLastFileError() { - SB_NOTIMPLEMENTED(); - return File::FILE_ERROR_MAX; + int err = errno; + switch (err) { + case ENOENT: + return static_cast(kSbFileErrorNotFound); + case EACCES: + return static_cast(kSbFileErrorAccessDenied); + case EEXIST: + return static_cast(kSbFileErrorExists); + default: + NOTREACHED() << base::StringPrintf("Unhandled errno: %d", err); + } + return FILE_ERROR_FAILED; } // Static. @@ -338,8 +354,6 @@ void File::DoInitialize(const FilePath& path, uint32_t flags) { error_details_ = FILE_ERROR_FAILED; } - DCHECK(flags & FLAG_WRITE || flags & FLAG_READ || flags & FLAG_APPEND); - if (flags & FLAG_READ) { open_flags |= kSbFileRead; } @@ -361,10 +375,7 @@ void File::DoInitialize(const FilePath& path, uint32_t flags) { } } - if (flags & FLAG_DELETE_ON_CLOSE) { - NOTREACHED() << "Not supported on Starboard platforms right now."; - } - + delete_on_close_ = (flags & FLAG_DELETE_ON_CLOSE) == FLAG_DELETE_ON_CLOSE; async_ = ((flags & FLAG_ASYNC) == FLAG_ASYNC); } diff --git a/base/files/file_unittest.cc b/base/files/file_unittest.cc index 2aa523b26f96..7d590d38fa58 100644 --- a/base/files/file_unittest.cc +++ b/base/files/file_unittest.cc @@ -435,7 +435,7 @@ TEST(FileTest, DISABLED_TouchGetInfo) { EXPECT_FALSE(info.is_symbolic_link); // ext2/ext3 and HPS/HPS+ seem to have a timestamp granularity of 1s. -#if BUILDFLAG(IS_POSIX) +#if BUILDFLAG(IS_POSIX) && !defined(STARBOARD) EXPECT_EQ(info.last_accessed.ToTimeVal().tv_sec, new_last_accessed.ToTimeVal().tv_sec); EXPECT_EQ(info.last_modified.ToTimeVal().tv_sec, @@ -540,6 +540,7 @@ TEST(FileTest, Seek) { EXPECT_EQ(kOffset, file.Seek(base::File::FROM_END, -kOffset)); } +#if !defined(STARBOARD) TEST(FileTest, Duplicate) { base::ScopedTempDir temp_dir; ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); @@ -566,7 +567,9 @@ TEST(FileTest, Duplicate) { ASSERT_EQ(kDataLen, file2.Read(0, &buf[0], kDataLen)); ASSERT_EQ(std::string(kData, kDataLen), std::string(&buf[0], kDataLen)); } +#endif +#if !defined(STARBOARD) TEST(FileTest, DuplicateDeleteOnClose) { base::ScopedTempDir temp_dir; ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); @@ -582,6 +585,7 @@ TEST(FileTest, DuplicateDeleteOnClose) { file2.Close(); ASSERT_FALSE(base::PathExists(file_path)); } +#endif #if BUILDFLAG(ENABLE_BASE_TRACING) TEST(FileTest, TracedValueSupport) { @@ -857,4 +861,4 @@ TEST(FileDeathTest, InvalidFlags) { }, "FLAG_WIN_NO_EXECUTE"); } -#endif // BUILDFLAG(IS_WIN) \ No newline at end of file +#endif // BUILDFLAG(IS_WIN) diff --git a/base/files/file_util.cc b/base/files/file_util.cc index f6309bd0547f..e997d6267b99 100644 --- a/base/files/file_util.cc +++ b/base/files/file_util.cc @@ -367,7 +367,11 @@ absl::optional> ReadFileToBytes(const FilePath& path) { return absl::nullopt; } #else - std::vector bytes; + std::string contents; + if (!ReadFileToString(path, &contents)) { + return absl::nullopt; + } + std::vector bytes(contents.begin(), contents.end()); #endif return bytes; } diff --git a/base/files/file_util.h b/base/files/file_util.h index 8e118032758f..6889c2a09c0b 100644 --- a/base/files/file_util.h +++ b/base/files/file_util.h @@ -10,7 +10,6 @@ #include #include -#include #include #include diff --git a/base/files/file_util_starboard.cc b/base/files/file_util_starboard.cc index 98850a4726e6..141931c04017 100644 --- a/base/files/file_util_starboard.cc +++ b/base/files/file_util_starboard.cc @@ -261,6 +261,11 @@ bool PathExists(const FilePath &path) { return SbFileExists(path.value().c_str()); } +bool PathIsReadable(const FilePath &path) { + internal::AssertBlockingAllowed(); + return SbFileCanOpen(path.value().c_str(), kSbFileOpenAlways | kSbFileRead); +} + bool PathIsWritable(const FilePath &path) { internal::AssertBlockingAllowed(); return SbFileCanOpen(path.value().c_str(), kSbFileOpenAlways | kSbFileWrite); @@ -380,6 +385,16 @@ bool CreateDirectoryAndGetError(const FilePath &full_path, File::Error* error) { return true; } +bool NormalizeFilePath(const FilePath& path, FilePath* normalized_path) { + internal::AssertBlockingAllowed(); + // Only absolute paths are supported in Starboard. + if (!path.IsAbsolute()) { + return false; + } + *normalized_path = path; + return true; +} + bool IsLink(const FilePath &file_path) { internal::AssertBlockingAllowed(); SbFileInfo info; @@ -455,6 +470,10 @@ bool AppendToFile(const FilePath &filename, const char *data, int size) { return file.WriteAtCurrentPos(data, size) == size; } +bool AppendToFile(const FilePath& filename, StringPiece data) { + return AppendToFile(filename, data.data(), data.size()); +} + bool HasFileBeenModifiedSince(const FileEnumerator::FileInfo &file_info, const base::Time &cutoff_time) { return file_info.GetLastModifiedTime() >= cutoff_time; diff --git a/base/files/file_util_unittest.cc b/base/files/file_util_unittest.cc index 42dd27e90ced..a9a19a5ad33f 100644 --- a/base/files/file_util_unittest.cc +++ b/base/files/file_util_unittest.cc @@ -219,7 +219,7 @@ class ReparsePoint { #endif -#if BUILDFLAG(IS_MAC) +#if BUILDFLAG(IS_MAC) && !defined(STARBOARD) // Provide a simple way to change the permissions bits on |path| in tests. // ASSERT failures will return, but not stop the test. Caller should wrap // calls to this function in ASSERT_NO_FATAL_FAILURE(). @@ -235,10 +235,10 @@ void ChangePosixFilePermissions(const FilePath& path, mode &= ~mode_bits_to_clear; ASSERT_TRUE(SetPosixFilePermissions(path, mode)); } -#endif // BUILDFLAG(IS_MAC) +#endif // BUILDFLAG(IS_MAC) && !defined(STARBOARD) // Fuchsia doesn't support file permissions. -#if !BUILDFLAG(IS_FUCHSIA) +#if !BUILDFLAG(IS_FUCHSIA) && !defined(STARBOARD) // Sets the source file to read-only. void SetReadOnly(const FilePath& path, bool read_only) { #if BUILDFLAG(IS_WIN) @@ -282,7 +282,7 @@ bool IsReadOnly(const FilePath& path) { #endif // BUILDFLAG(IS_WIN) } -#endif // BUILDFLAG(IS_FUCHSIA) +#endif // BUILDFLAG(IS_FUCHSIA) && !defined(STARBOARD) const wchar_t bogus_content[] = L"I'm cannon fodder."; @@ -334,6 +334,17 @@ class FindResultCollector { // Simple function to dump some text into a new file. void CreateTextFile(const FilePath& filename, const std::wstring& contents) { +#if defined(STARBOARD) + const std::string contents_ascii = UTF16ToASCII(WideToUTF16(contents)); + SbFileError file_error = kSbFileOk; + SbFile file = + SbFileOpen(filename.value().c_str(), kSbFileCreateAlways | kSbFileWrite, + nullptr, &file_error); + SB_CHECK((file_error == kSbFileOk)); + SB_CHECK(SbFileWriteAll(file, contents_ascii.data(), contents_ascii.size()) == + contents_ascii.size()); + SB_CHECK(SbFileClose(file)); +#else // !defined(STARBOARD) std::wofstream file; #if BUILDFLAG(IS_WIN) file.open(filename.value().c_str()); @@ -343,10 +354,22 @@ void CreateTextFile(const FilePath& filename, ASSERT_TRUE(file.is_open()); file << contents; file.close(); +#endif // defined(STARBOARD) } // Simple function to take out some text from a file. std::wstring ReadTextFile(const FilePath& filename) { +#if defined(STARBOARD) + const int size_in_bytes = 64 * sizeof(wchar_t); + char contents[size_in_bytes]{0}; + SbFileError file_error = kSbFileOk; + SbFile file = SbFileOpen(filename.value().c_str(), + kSbFileOpenOnly | kSbFileRead, nullptr, &file_error); + SB_CHECK(file_error == kSbFileOk); + SB_CHECK(SbFileReadAll(file, contents, size_in_bytes) != -1); + SB_CHECK(SbFileClose(file)); + return UTF16ToWide(ASCIIToUTF16(contents)); +#else // !defined(STARBOARD) wchar_t contents[64]; std::wifstream file; #if BUILDFLAG(IS_WIN) @@ -358,8 +381,10 @@ std::wstring ReadTextFile(const FilePath& filename) { file.getline(contents, std::size(contents)); file.close(); return std::wstring(contents); +#endif // defined(STARBOARD) } +#if !defined(STARBOARD) // Sets |is_inheritable| to indicate whether or not |stream| is set up to be // inerhited into child processes (i.e., HANDLE_FLAG_INHERIT is set on the // underlying handle on Windows, or FD_CLOEXEC is not set on the underlying file @@ -383,8 +408,9 @@ void GetIsInheritable(FILE* stream, bool* is_inheritable) { #error Not implemented #endif } +#endif // !defined(STARBOARD) -#if BUILDFLAG(IS_POSIX) +#if BUILDFLAG(IS_POSIX) && !defined(STARBOARD) class ScopedWorkingDirectory { public: explicit ScopedWorkingDirectory(const FilePath& new_working_dir) { @@ -434,7 +460,7 @@ TEST_F(FileUtilTest, MakeAbsoluteFilePathNoResolveSymbolicLinks) { MakeAbsoluteFilePathNoResolveSymbolicLinks(FilePath("relative_file_path")) .has_value()); } -#endif // BUILDFLAG(IS_POSIX) +#endif // BUILDFLAG(IS_POSIX) && !defined(STARBOARD) TEST_F(FileUtilTest, FileAndDirectorySize) { // Create three files of 20, 30 and 3 chars (utf8). ComputeDirectorySize @@ -464,6 +490,8 @@ TEST_F(FileUtilTest, FileAndDirectorySize) { EXPECT_EQ(size_f1 + size_f2 + 3, computed_size); } +// Starboard only supports absolute file paths. +#if !defined(STARBOARD) TEST_F(FileUtilTest, NormalizeFilePathBasic) { // Create a directory under the test dir. Because we create it, // we know it is not a link. @@ -491,6 +519,7 @@ TEST_F(FileUtilTest, NormalizeFilePathBasic) { ASSERT_TRUE(normalized_file_a_path.DirName() .IsParent(normalized_file_b_path.DirName())); } +#endif // !defined(STARBOARD) #if BUILDFLAG(IS_WIN) @@ -1018,7 +1047,7 @@ INSTANTIATE_TEST_SUITE_P(EnforcementDisabled, #endif // BUILDFLAG(IS_WIN) -#if BUILDFLAG(IS_POSIX) +#if BUILDFLAG(IS_POSIX) && !defined(STARBOARD) TEST_F(FileUtilTest, CreateAndReadSymlinks) { FilePath link_from = temp_dir_.GetPath().Append(FPL("from_file")); @@ -1651,9 +1680,9 @@ TEST_F(FileUtilTest, CopyFileExecutablePermission) { EXPECT_EQ(0777, mode); } -#endif // BUILDFLAG(IS_POSIX) +#endif // BUILDFLAG(IS_POSIX) && !defined(STARBOARD) -#if !BUILDFLAG(IS_FUCHSIA) +#if !BUILDFLAG(IS_FUCHSIA) && !defined(STARBOARD) TEST_F(FileUtilTest, CopyFileACL) { // While FileUtilTest.CopyFile asserts the content is correctly copied over, @@ -1707,7 +1736,7 @@ TEST_F(FileUtilTest, CopyDirectoryACL) { ASSERT_FALSE(IsReadOnly(src_subdir)); } -#endif // !BUILDFLAG(IS_FUCHSIA) +#endif // !BUILDFLAG(IS_FUCHSIA) && !defined(STARBOARD) TEST_F(FileUtilTest, DeleteNonExistent) { FilePath non_existent = @@ -1912,6 +1941,7 @@ TEST_F(FileUtilTest, DeleteDirRecursiveWithOpenFile) { File::FLAG_CREATE | File::FLAG_READ | File::FLAG_WRITE); ASSERT_TRUE(PathExists(file_name3)); +#if !defined(STARBOARD) #if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) // On Windows, holding the file open in sufficient to make it un-deletable. // The POSIX code is verifiable on Linux by creating an "immutable" file but @@ -1926,13 +1956,15 @@ TEST_F(FileUtilTest, DeleteDirRecursiveWithOpenFile) { ioctl(file1.GetPlatformFile(), FS_IOC_SETFLAGS, &flags); ioctl(file3.GetPlatformFile(), FS_IOC_SETFLAGS, &flags); } -#endif +#endif // BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) +#endif // !defined(STARBOARD) // Delete recursively and check that at least the second file got deleted. // This ensures that un-deletable files don't impact those that can be. DeletePathRecursively(test_subdir); EXPECT_FALSE(PathExists(file_name2)); +#if !defined(STARBOARD) #if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) // Make sure that the test can clean up after itself. if (file_attrs_supported) { @@ -1940,9 +1972,11 @@ TEST_F(FileUtilTest, DeleteDirRecursiveWithOpenFile) { ioctl(file1.GetPlatformFile(), FS_IOC_SETFLAGS, &flags); ioctl(file3.GetPlatformFile(), FS_IOC_SETFLAGS, &flags); } -#endif +#endif // BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) +#endif // !defined(STARBOARD) } +#if !defined(STARBOARD) #if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) // This test will validate that files which would block when read result in a // failure on a call to ReadFileToStringNonBlocking. To accomplish this we will @@ -1977,7 +2011,10 @@ TEST_F(FileUtilTest, TestNonBlockingFileReadLinux) { EXPECT_EQ(result[0], 'a'); } #endif // BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) +#endif // !defined(STARBOARD) +// Starboard does not support moving. +#if !defined(STARBOARD) TEST_F(FileUtilTest, MoveFileNew) { // Create a file FilePath file_name_from = @@ -2110,7 +2147,10 @@ TEST_F(FileUtilTest, MoveExist) { EXPECT_TRUE(PathExists(dir_name_to)); EXPECT_TRUE(PathExists(file_name_to)); } +#endif // !defined(STARBOARD) +// Starboard does not support |CopyDirectory()|. +#if !defined(STARBOARD) TEST_F(FileUtilTest, CopyDirectoryRecursivelyNew) { // Create a directory. FilePath dir_name_from = @@ -2639,6 +2679,7 @@ TEST_F(FileUtilTest, CopyDirectoryExclFileOverFifo) { // Check that copying fails. EXPECT_FALSE(CopyDirectoryExcl(dir_name_from, dir_name_to, false)); } +#endif // !defined(STARBOARD) #endif // BUILDFLAG(IS_POSIX) TEST_F(FileUtilTest, CopyFile) { @@ -2699,6 +2740,8 @@ TEST_F(FileUtilTest, CopyFile) { EXPECT_TRUE(IsDirectoryEmpty(dest_dir)); } +// Starboard does not support DIR_TEST_DATA pointing to //base/test/data. +#if !defined(STARBOARD) // file_util winds up using autoreleased objects on the Mac, so this needs // to be a PlatformTest. typedef PlatformTest ReadOnlyFileUtilTest; @@ -2793,6 +2836,7 @@ TEST_F(ReadOnlyFileUtilTest, TextContentsEqual) { EXPECT_FALSE(TextContentsEqual(original_file, empty1_file)); EXPECT_TRUE(TextContentsEqual(blank_line_file, blank_line_crlf_file)); } +#endif // !defined(STARBOARD) // We don't need equivalent functionality outside of Windows. #if BUILDFLAG(IS_WIN) @@ -2856,6 +2900,8 @@ TEST_F(FileUtilTest, GetTempDirTest) { } #endif // BUILDFLAG(IS_WIN) +// Starboard does not support |OpenFile()|. +#if !defined(STARBOARD) // Test that files opened by OpenFile are not set up for inheritance into child // procs. TEST_F(FileUtilTest, OpenFileNoInheritance) { @@ -2882,6 +2928,7 @@ TEST_F(FileUtilTest, OpenFileNoInheritance) { ASSERT_TRUE(DeleteFile(file_path)); } } +#endif // !defined(STARBOARD) TEST_F(FileUtilTest, CreateAndOpenTemporaryFileInDir) { // Create a temporary file. @@ -2915,6 +2962,8 @@ TEST_F(FileUtilTest, CreateTemporaryFileTest) { EXPECT_TRUE(DeleteFile(i)); } +// Starboard does not support |CreateAndOpenTemporaryStream()|. +#if !defined(STARBOARD) TEST_F(FileUtilTest, CreateAndOpenTemporaryStreamTest) { FilePath names[3]; ScopedFILE fps[3]; @@ -2938,6 +2987,7 @@ TEST_F(FileUtilTest, CreateAndOpenTemporaryStreamTest) { EXPECT_TRUE(DeleteFile(names[i])); } } +#endif // !defined(STARBOARD) TEST_F(FileUtilTest, GetUniquePathTest) { // Create a unique temp directory and use it to generate a unique file path. @@ -2981,6 +3031,7 @@ TEST_F(FileUtilTest, GetUniquePathTest) { } } +#if !defined(STARBOARD) TEST_F(FileUtilTest, FileToFILE) { File file; FILE* stream = FileToFILE(std::move(file), "w"); @@ -3008,6 +3059,7 @@ TEST_F(FileUtilTest, FILEToFile) { ASSERT_EQ(fflush(stream.get()), 0); EXPECT_EQ(file.GetLength(), 5L); } +#endif // !defined(STARBOARD) #if BUILDFLAG(IS_WIN) TEST_F(FileUtilTest, GetSecureSystemTemp) { @@ -3054,6 +3106,7 @@ TEST_F(FileUtilTest, CreateNewTemporaryDirInDirTest) { } #if BUILDFLAG(IS_POSIX) || BUILDFLAG(IS_FUCHSIA) +#if !defined(STARBOARD) TEST_F(FileUtilTest, GetShmemTempDirTest) { FilePath dir; EXPECT_TRUE(GetShmemTempDir(false, &dir)); @@ -3128,6 +3181,7 @@ TEST_F(FileUtilTest, AllocateFileRegionTest_DontTruncate) { ASSERT_TRUE(AllocateFileRegion(&file, 0, kTruncatedFileLength)); EXPECT_EQ(file.GetLength(), kTestFileLength); } +#endif // !defined(STARBOARD) #endif TEST_F(FileUtilTest, GetHomeDirTest) { @@ -3147,7 +3201,7 @@ TEST_F(FileUtilTest, CreateDirectoryTest) { #if BUILDFLAG(IS_WIN) FilePath test_path = test_root.Append(FILE_PATH_LITERAL("dir\\tree\\likely\\doesnt\\exist\\")); -#elif BUILDFLAG(IS_POSIX) || BUILDFLAG(IS_FUCHSIA) +#elif BUILDFLAG(IS_POSIX) || BUILDFLAG(IS_FUCHSIA) || defined(STARBOARD) FilePath test_path = test_root.Append(FILE_PATH_LITERAL("dir/tree/likely/doesnt/exist/")); #endif @@ -3305,6 +3359,8 @@ TEST_F(FileUtilTest, FileEnumeratorTest) { EXPECT_TRUE(c4.HasFile(file2_abs)); EXPECT_EQ(4, c4.size()); +// Starboard does not support patterns. +#if !defined(STARBOARD) // Enumerate with a pattern. FileEnumerator f5(temp_dir_.GetPath(), true, FILES_AND_DIRECTORIES, FPL("dir*")); @@ -3315,6 +3371,7 @@ TEST_F(FileUtilTest, FileEnumeratorTest) { EXPECT_TRUE(c5.HasFile(dir2inner)); EXPECT_TRUE(c5.HasFile(dir2innerfile)); EXPECT_EQ(5, c5.size()); +#endif // !defined(STARBOARD) #if BUILDFLAG(IS_WIN) { @@ -3547,7 +3604,7 @@ TEST_F(FileUtilTest, ReadFileToStringWithUnknownFileSize) { #endif // !BUILDFLAG(IS_WIN) #if !BUILDFLAG(IS_WIN) && !BUILDFLAG(IS_NACL) && !BUILDFLAG(IS_FUCHSIA) && \ - !BUILDFLAG(IS_IOS) + !BUILDFLAG(IS_IOS) && !defined(STARBOARD) #define ChildMain WriteToPipeChildMain #define ChildMainString "WriteToPipeChildMain" @@ -3694,7 +3751,7 @@ TEST_F(FileUtilTest, ReadFileToStringWithNamedPipe) { ASSERT_EQ(0, unlink(pipe_path.value().c_str())); } #endif // !BUILDFLAG(IS_WIN) && !BUILDFLAG(IS_NACL) && !BUILDFLAG(IS_FUCHSIA) - // && !BUILDFLAG(IS_IOS) + // && !BUILDFLAG(IS_IOS) && !defined(STARBOARD) #if BUILDFLAG(IS_WIN) #define ChildMain WriteToPipeChildMain @@ -3915,6 +3972,7 @@ TEST_F(FileUtilTest, ReadFileToStringWithLargeFile) { EXPECT_EQ(std::string(kLargeFileSize - 1, 'c'), actual_data); } +#if !defined(STARBOARD) TEST_F(FileUtilTest, ReadStreamToString) { ScopedFILE stream( OpenFile(temp_dir_.GetPath().Append(FPL("hello.txt")), "wb+")); @@ -3928,8 +3986,9 @@ TEST_F(FileUtilTest, ReadStreamToString) { EXPECT_TRUE(ReadStreamToString(stream.get(), &contents)); EXPECT_EQ(contents, std::string("there")); } +#endif // !defined(STARBOARD) -#if BUILDFLAG(IS_POSIX) +#if BUILDFLAG(IS_POSIX) && !defined(STARBOARD) TEST_F(FileUtilTest, ReadStreamToString_ZeroLengthFile) { Thread write_thread("write thread"); ASSERT_TRUE(write_thread.Start()); @@ -3960,8 +4019,9 @@ TEST_F(FileUtilTest, ReadStreamToString_ZeroLengthFile) { EXPECT_EQ(contents, random_data); } } -#endif +#endif // BUILDFLAG(IS_POSIX) && !defined(STARBOARD) +#if !defined(STARBOARD) TEST_F(FileUtilTest, ReadStreamToStringWithMaxSize) { ScopedFILE stream( OpenFile(temp_dir_.GetPath().Append(FPL("hello.txt")), "wb+")); @@ -3974,12 +4034,15 @@ TEST_F(FileUtilTest, ReadStreamToStringWithMaxSize) { std::string contents; EXPECT_FALSE(ReadStreamToStringWithMaxSize(stream.get(), 2, &contents)); } +#endif // !defined(STARBOARD) TEST_F(FileUtilTest, ReadStreamToStringNullStream) { std::string contents; EXPECT_FALSE(ReadStreamToString(nullptr, &contents)); } +// Starboard does not support |base::File::SetTimes()|. +#if !defined(STARBOARD) TEST_F(FileUtilTest, TouchFile) { FilePath data_dir = temp_dir_.GetPath().Append(FILE_PATH_LITERAL("FilePathTest")); @@ -4017,6 +4080,7 @@ TEST_F(FileUtilTest, TouchFile) { EXPECT_EQ(modification_time.ToInternalValue(), file_info.last_modified.ToInternalValue()); } +#endif // !defined(STARBOARD) TEST_F(FileUtilTest, WriteFileSpanVariant) { FilePath empty_file = @@ -4080,6 +4144,7 @@ TEST_F(FileUtilTest, IsDirectoryEmpty) { EXPECT_FALSE(IsDirectoryEmpty(empty_dir)); } +#if !defined(STARBOARD) #if BUILDFLAG(IS_POSIX) || BUILDFLAG(IS_FUCHSIA) TEST_F(FileUtilTest, SetNonBlocking) { @@ -4106,7 +4171,8 @@ TEST_F(FileUtilTest, SetCloseOnExec) { EXPECT_TRUE(SetCloseOnExec(fd.get())); } -#endif +#endif // BUILDFLAG(IS_POSIX) || BUILDFLAG(IS_FUCHSIA) +#endif // !defined(STARBOARD) #if BUILDFLAG(IS_MAC) @@ -4487,6 +4553,7 @@ TEST_F(FileUtilTest, GetUniquePathNumberTooManyFiles) { EXPECT_EQ(GetUniquePathNumber(some_file), -1); } +#if !defined(STARBOARD) TEST_F(FileUtilTest, PreReadFile_ExistingFile_NoSize) { FilePath text_file = temp_dir_.GetPath().Append(FPL("text_file")); CreateTextFile(text_file, bogus_content); @@ -4557,7 +4624,10 @@ TEST_F(FileUtilTest, PreReadFile_Executable) { const FilePath test_exe = exe_data_dir.Append(FPL("signed.exe")); EXPECT_TRUE(PreReadFile(test_exe, /*is_executable=*/true)); } +#endif // !defined(STARBOARD) +// Starboard does not support |OpenFile()|. +#if !defined(STARBOARD) // Test that temp files obtained racily are all unique (no interference between // threads). Mimics file operations in DoLaunchChildTestProcess() to rule out // thread-safety issues @ https://crbug.com/826408#c17. @@ -4620,7 +4690,9 @@ TEST(FileUtilMultiThreadedTest, MultiThreadedTempFiles) { for (auto& thread : threads) thread->Stop(); } +#endif // !defined(STARBOARD) +#if !defined(STARBOARD) #if BUILDFLAG(IS_POSIX) || BUILDFLAG(IS_FUCHSIA) TEST(ScopedFD, ScopedFDDoesClose) { @@ -4661,7 +4733,9 @@ TEST(ScopedFD, ScopedFDCrashesOnCloseFailure) { } #endif // BUILDFLAG(IS_POSIX) || BUILDFLAG(IS_FUCHSIA) +#endif // !defined(STARBOARD) +#if !defined(STARBOARD) #if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_ANDROID) TEST_F(FileUtilTest, CopyFileContentsWithSendfile) { // This test validates that sendfile(2) can be used to copy a file contents @@ -4825,6 +4899,7 @@ TEST_F(FileUtilTest, CopyFileContentsWithSendfileSeqFile) { #endif // BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) || // BUILDFLAG(IS_ANDROID) +#endif // !defined(STARBOARD) } // namespace