diff options
author | teravest@chromium.org <teravest@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-06-10 15:28:09 +0000 |
---|---|---|
committer | teravest@chromium.org <teravest@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-06-10 15:28:09 +0000 |
commit | 42a3b3e14e5f306a58040c9fea37a1c69714a171 (patch) | |
tree | d63877f3fea81892a301e3aafa3f24f4b8df9986 /base/platform_file_unittest.cc | |
parent | 60c68992c85af124b4affd1ad058094fc99d041f (diff) | |
download | chromium_src-42a3b3e14e5f306a58040c9fea37a1c69714a171.zip chromium_src-42a3b3e14e5f306a58040c9fea37a1c69714a171.tar.gz chromium_src-42a3b3e14e5f306a58040c9fea37a1c69714a171.tar.bz2 |
Add an "append flag" to base::PlatformFile.
PLATFORM_FILE_APPEND is exclusive with PLATFORM_FILE_WRITE. This is because on Windows, if we were to apply both flags, the behavior would not be consistent with O_APPEND.
On Posix, PLATFORM_FILE_APPEND provides O_APPEND, and either O_WRONLY or O_RDWR, depending on other flags.
On Windows, PLATFORM_FILE_APPEND provides FILE_APPEND_DATA, and fails to create the plaform file if PLATFORM_FILE_WRITE is also passed.
BUG=242383
Review URL: https://chromiumcodereview.appspot.com/15861011
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@205217 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'base/platform_file_unittest.cc')
-rw-r--r-- | base/platform_file_unittest.cc | 131 |
1 files changed, 97 insertions, 34 deletions
diff --git a/base/platform_file_unittest.cc b/base/platform_file_unittest.cc index 7483876..1106f98 100644 --- a/base/platform_file_unittest.cc +++ b/base/platform_file_unittest.cc @@ -35,8 +35,10 @@ TEST(PlatformFile, CreatePlatformFile) { // Open a file that doesn't exist. base::PlatformFileError error_code = base::PLATFORM_FILE_OK; base::PlatformFile file = base::CreatePlatformFile( - file_path, base::PLATFORM_FILE_OPEN | base::PLATFORM_FILE_READ, - NULL, &error_code); + file_path, + base::PLATFORM_FILE_OPEN | base::PLATFORM_FILE_READ, + NULL, + &error_code); EXPECT_EQ(base::kInvalidPlatformFileValue, file); EXPECT_EQ(base::PLATFORM_FILE_ERROR_NOT_FOUND, error_code); @@ -44,8 +46,10 @@ TEST(PlatformFile, CreatePlatformFile) { bool created = false; error_code = base::PLATFORM_FILE_OK; file = base::CreatePlatformFile( - file_path, base::PLATFORM_FILE_OPEN_ALWAYS | base::PLATFORM_FILE_READ, - &created, &error_code); + file_path, + base::PLATFORM_FILE_OPEN_ALWAYS | base::PLATFORM_FILE_READ, + &created, + &error_code); EXPECT_NE(base::kInvalidPlatformFileValue, file); EXPECT_TRUE(created); EXPECT_EQ(base::PLATFORM_FILE_OK, error_code); @@ -54,8 +58,10 @@ TEST(PlatformFile, CreatePlatformFile) { // Open an existing file. created = false; file = base::CreatePlatformFile( - file_path, base::PLATFORM_FILE_OPEN | base::PLATFORM_FILE_READ, - &created, &error_code); + file_path, + base::PLATFORM_FILE_OPEN | base::PLATFORM_FILE_READ, + &created, + &error_code); EXPECT_NE(base::kInvalidPlatformFileValue, file); EXPECT_FALSE(created); EXPECT_EQ(base::PLATFORM_FILE_OK, error_code); @@ -63,8 +69,10 @@ TEST(PlatformFile, CreatePlatformFile) { // Create a file that exists. file = base::CreatePlatformFile( - file_path, base::PLATFORM_FILE_CREATE | base::PLATFORM_FILE_READ, - &created, &error_code); + file_path, + base::PLATFORM_FILE_CREATE | base::PLATFORM_FILE_READ, + &created, + &error_code); EXPECT_EQ(base::kInvalidPlatformFileValue, file); EXPECT_FALSE(created); EXPECT_EQ(base::PLATFORM_FILE_ERROR_EXISTS, error_code); @@ -72,8 +80,10 @@ TEST(PlatformFile, CreatePlatformFile) { // Create or overwrite a file. error_code = base::PLATFORM_FILE_OK; file = base::CreatePlatformFile( - file_path, base::PLATFORM_FILE_CREATE_ALWAYS | base::PLATFORM_FILE_READ, - &created, &error_code); + file_path, + base::PLATFORM_FILE_CREATE_ALWAYS | base::PLATFORM_FILE_READ, + &created, + &error_code); EXPECT_NE(base::kInvalidPlatformFileValue, file); EXPECT_TRUE(created); EXPECT_EQ(base::PLATFORM_FILE_OK, error_code); @@ -84,10 +94,10 @@ TEST(PlatformFile, CreatePlatformFile) { file_path = temp_dir.path().AppendASCII("create_file_2"); file = base::CreatePlatformFile( file_path, - base::PLATFORM_FILE_OPEN_ALWAYS | - base::PLATFORM_FILE_DELETE_ON_CLOSE | - base::PLATFORM_FILE_READ, - &created, &error_code); + base::PLATFORM_FILE_OPEN_ALWAYS | base::PLATFORM_FILE_DELETE_ON_CLOSE | + base::PLATFORM_FILE_READ, + &created, + &error_code); EXPECT_NE(base::kInvalidPlatformFileValue, file); EXPECT_TRUE(created); EXPECT_EQ(base::PLATFORM_FILE_OK, error_code); @@ -106,10 +116,10 @@ TEST(PlatformFile, DeleteOpenFile) { base::PlatformFileError error_code = base::PLATFORM_FILE_OK; base::PlatformFile file = base::CreatePlatformFile( file_path, - base::PLATFORM_FILE_OPEN_ALWAYS | - base::PLATFORM_FILE_READ | - base::PLATFORM_FILE_SHARE_DELETE, - &created, &error_code); + base::PLATFORM_FILE_OPEN_ALWAYS | base::PLATFORM_FILE_READ | + base::PLATFORM_FILE_SHARE_DELETE, + &created, + &error_code); EXPECT_NE(base::kInvalidPlatformFileValue, file); EXPECT_TRUE(created); EXPECT_EQ(base::PLATFORM_FILE_OK, error_code); @@ -118,10 +128,10 @@ TEST(PlatformFile, DeleteOpenFile) { created = false; base::PlatformFile same_file = base::CreatePlatformFile( file_path, - base::PLATFORM_FILE_OPEN | - base::PLATFORM_FILE_DELETE_ON_CLOSE | - base::PLATFORM_FILE_READ, - &created, &error_code); + base::PLATFORM_FILE_OPEN | base::PLATFORM_FILE_DELETE_ON_CLOSE | + base::PLATFORM_FILE_READ, + &created, + &error_code); EXPECT_NE(base::kInvalidPlatformFileValue, file); EXPECT_FALSE(created); EXPECT_EQ(base::PLATFORM_FILE_OK, error_code); @@ -138,10 +148,10 @@ TEST(PlatformFile, ReadWritePlatformFile) { FilePath file_path = temp_dir.path().AppendASCII("read_write_file"); base::PlatformFile file = base::CreatePlatformFile( file_path, - base::PLATFORM_FILE_CREATE | - base::PLATFORM_FILE_READ | - base::PLATFORM_FILE_WRITE, - NULL, NULL); + base::PLATFORM_FILE_CREATE | base::PLATFORM_FILE_READ | + base::PLATFORM_FILE_WRITE, + NULL, + NULL); EXPECT_NE(base::kInvalidPlatformFileValue, file); char data_to_write[] = "test"; @@ -211,16 +221,69 @@ TEST(PlatformFile, ReadWritePlatformFile) { base::ClosePlatformFile(file); } +TEST(PlatformFile, AppendPlatformFile) { + base::ScopedTempDir temp_dir; + ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); + FilePath file_path = temp_dir.path().AppendASCII("append_file"); + base::PlatformFile file = base::CreatePlatformFile( + file_path, + base::PLATFORM_FILE_CREATE | base::PLATFORM_FILE_APPEND, + NULL, + NULL); + EXPECT_NE(base::kInvalidPlatformFileValue, file); + + char data_to_write[] = "test"; + const int kTestDataSize = 4; + + // Write 0 bytes to the file. + int bytes_written = WriteFully(file, 0, data_to_write, 0); + EXPECT_EQ(0, bytes_written); + + // Write "test" to the file. + bytes_written = WriteFully(file, 0, data_to_write, kTestDataSize); + EXPECT_EQ(kTestDataSize, bytes_written); + + base::ClosePlatformFile(file); + file = base::CreatePlatformFile( + file_path, + base::PLATFORM_FILE_OPEN | base::PLATFORM_FILE_READ | + base::PLATFORM_FILE_APPEND, + NULL, + NULL); + EXPECT_NE(base::kInvalidPlatformFileValue, file); + + char append_data_to_write[] = "78"; + const int kAppendDataSize = 2; + + // Append "78" to the file. + bytes_written = WriteFully(file, 0, append_data_to_write, kAppendDataSize); + EXPECT_EQ(kAppendDataSize, bytes_written); + + // Read the entire file. + char data_read_1[32]; + int bytes_read = ReadFully(file, 0, data_read_1, + kTestDataSize + kAppendDataSize); + EXPECT_EQ(kTestDataSize + kAppendDataSize, bytes_read); + for (int i = 0; i < kTestDataSize; i++) + EXPECT_EQ(data_to_write[i], data_read_1[i]); + for (int i = 0; i < kAppendDataSize; i++) + EXPECT_EQ(append_data_to_write[i], data_read_1[kTestDataSize + i]); + + // Close the file handle to allow the temp directory to be deleted. + base::ClosePlatformFile(file); +} + + TEST(PlatformFile, TruncatePlatformFile) { base::ScopedTempDir temp_dir; ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); FilePath file_path = temp_dir.path().AppendASCII("truncate_file"); base::PlatformFile file = base::CreatePlatformFile( file_path, - base::PLATFORM_FILE_CREATE | - base::PLATFORM_FILE_READ | - base::PLATFORM_FILE_WRITE, - NULL, NULL); + base::PLATFORM_FILE_CREATE | base::PLATFORM_FILE_READ | + base::PLATFORM_FILE_WRITE, + NULL, + NULL); EXPECT_NE(base::kInvalidPlatformFileValue, file); // Write "test" to the file. @@ -271,10 +334,10 @@ TEST(PlatformFile, DISABLED_TouchGetInfoPlatformFile) { ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); base::PlatformFile file = base::CreatePlatformFile( temp_dir.path().AppendASCII("touch_get_info_file"), - base::PLATFORM_FILE_CREATE | - base::PLATFORM_FILE_WRITE | - base::PLATFORM_FILE_WRITE_ATTRIBUTES, - NULL, NULL); + base::PLATFORM_FILE_CREATE | base::PLATFORM_FILE_WRITE | + base::PLATFORM_FILE_WRITE_ATTRIBUTES, + NULL, + NULL); EXPECT_NE(base::kInvalidPlatformFileValue, file); // Get info for a newly created file. |