summaryrefslogtreecommitdiffstats
path: root/base/platform_file_unittest.cc
diff options
context:
space:
mode:
authorteravest@chromium.org <teravest@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-06-10 15:28:09 +0000
committerteravest@chromium.org <teravest@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-06-10 15:28:09 +0000
commit42a3b3e14e5f306a58040c9fea37a1c69714a171 (patch)
treed63877f3fea81892a301e3aafa3f24f4b8df9986 /base/platform_file_unittest.cc
parent60c68992c85af124b4affd1ad058094fc99d041f (diff)
downloadchromium_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.cc131
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.