Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "base/file_util.h" | 5 #include "base/file_util.h" |
| 6 #include "base/files/scoped_temp_dir.h" | 6 #include "base/files/scoped_temp_dir.h" |
| 7 #include "base/platform_file.h" | 7 #include "base/platform_file.h" |
| 8 #include "base/time.h" | 8 #include "base/time.h" |
| 9 #include "testing/gtest/include/gtest/gtest.h" | 9 #include "testing/gtest/include/gtest/gtest.h" |
| 10 | 10 |
| (...skipping 17 matching lines...) Expand all Loading... | |
| 28 } // namespace | 28 } // namespace |
| 29 | 29 |
| 30 TEST(PlatformFile, CreatePlatformFile) { | 30 TEST(PlatformFile, CreatePlatformFile) { |
| 31 base::ScopedTempDir temp_dir; | 31 base::ScopedTempDir temp_dir; |
| 32 ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); | 32 ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); |
| 33 FilePath file_path = temp_dir.path().AppendASCII("create_file_1"); | 33 FilePath file_path = temp_dir.path().AppendASCII("create_file_1"); |
| 34 | 34 |
| 35 // Open a file that doesn't exist. | 35 // Open a file that doesn't exist. |
| 36 base::PlatformFileError error_code = base::PLATFORM_FILE_OK; | 36 base::PlatformFileError error_code = base::PLATFORM_FILE_OK; |
| 37 base::PlatformFile file = base::CreatePlatformFile( | 37 base::PlatformFile file = base::CreatePlatformFile( |
| 38 file_path, base::PLATFORM_FILE_OPEN | base::PLATFORM_FILE_READ, | 38 file_path, |
| 39 NULL, &error_code); | 39 base::PLATFORM_FILE_OPEN | base::PLATFORM_FILE_READ, |
| 40 NULL, | |
| 41 &error_code); | |
| 40 EXPECT_EQ(base::kInvalidPlatformFileValue, file); | 42 EXPECT_EQ(base::kInvalidPlatformFileValue, file); |
| 41 EXPECT_EQ(base::PLATFORM_FILE_ERROR_NOT_FOUND, error_code); | 43 EXPECT_EQ(base::PLATFORM_FILE_ERROR_NOT_FOUND, error_code); |
| 42 | 44 |
| 43 // Open or create a file. | 45 // Open or create a file. |
| 44 bool created = false; | 46 bool created = false; |
| 45 error_code = base::PLATFORM_FILE_OK; | 47 error_code = base::PLATFORM_FILE_OK; |
| 46 file = base::CreatePlatformFile( | 48 file = base::CreatePlatformFile( |
| 47 file_path, base::PLATFORM_FILE_OPEN_ALWAYS | base::PLATFORM_FILE_READ, | 49 file_path, |
| 48 &created, &error_code); | 50 base::PLATFORM_FILE_OPEN_ALWAYS | base::PLATFORM_FILE_READ, |
| 51 &created, | |
| 52 &error_code); | |
| 49 EXPECT_NE(base::kInvalidPlatformFileValue, file); | 53 EXPECT_NE(base::kInvalidPlatformFileValue, file); |
| 50 EXPECT_TRUE(created); | 54 EXPECT_TRUE(created); |
| 51 EXPECT_EQ(base::PLATFORM_FILE_OK, error_code); | 55 EXPECT_EQ(base::PLATFORM_FILE_OK, error_code); |
| 52 base::ClosePlatformFile(file); | 56 base::ClosePlatformFile(file); |
| 53 | 57 |
| 54 // Open an existing file. | 58 // Open an existing file. |
| 55 created = false; | 59 created = false; |
| 56 file = base::CreatePlatformFile( | 60 file = base::CreatePlatformFile( |
| 57 file_path, base::PLATFORM_FILE_OPEN | base::PLATFORM_FILE_READ, | 61 file_path, |
| 58 &created, &error_code); | 62 base::PLATFORM_FILE_OPEN | base::PLATFORM_FILE_READ, |
| 63 &created, | |
| 64 &error_code); | |
| 59 EXPECT_NE(base::kInvalidPlatformFileValue, file); | 65 EXPECT_NE(base::kInvalidPlatformFileValue, file); |
| 60 EXPECT_FALSE(created); | 66 EXPECT_FALSE(created); |
| 61 EXPECT_EQ(base::PLATFORM_FILE_OK, error_code); | 67 EXPECT_EQ(base::PLATFORM_FILE_OK, error_code); |
| 62 base::ClosePlatformFile(file); | 68 base::ClosePlatformFile(file); |
| 63 | 69 |
| 64 // Create a file that exists. | 70 // Create a file that exists. |
| 65 file = base::CreatePlatformFile( | 71 file = base::CreatePlatformFile( |
| 66 file_path, base::PLATFORM_FILE_CREATE | base::PLATFORM_FILE_READ, | 72 file_path, |
| 67 &created, &error_code); | 73 base::PLATFORM_FILE_CREATE | base::PLATFORM_FILE_READ, |
| 74 &created, | |
| 75 &error_code); | |
| 68 EXPECT_EQ(base::kInvalidPlatformFileValue, file); | 76 EXPECT_EQ(base::kInvalidPlatformFileValue, file); |
| 69 EXPECT_FALSE(created); | 77 EXPECT_FALSE(created); |
| 70 EXPECT_EQ(base::PLATFORM_FILE_ERROR_EXISTS, error_code); | 78 EXPECT_EQ(base::PLATFORM_FILE_ERROR_EXISTS, error_code); |
| 71 | 79 |
| 72 // Create or overwrite a file. | 80 // Create or overwrite a file. |
| 73 error_code = base::PLATFORM_FILE_OK; | 81 error_code = base::PLATFORM_FILE_OK; |
| 74 file = base::CreatePlatformFile( | 82 file = base::CreatePlatformFile( |
| 75 file_path, base::PLATFORM_FILE_CREATE_ALWAYS | base::PLATFORM_FILE_READ, | 83 file_path, |
| 76 &created, &error_code); | 84 base::PLATFORM_FILE_CREATE_ALWAYS | base::PLATFORM_FILE_READ, |
| 85 &created, | |
| 86 &error_code); | |
| 77 EXPECT_NE(base::kInvalidPlatformFileValue, file); | 87 EXPECT_NE(base::kInvalidPlatformFileValue, file); |
| 78 EXPECT_TRUE(created); | 88 EXPECT_TRUE(created); |
| 79 EXPECT_EQ(base::PLATFORM_FILE_OK, error_code); | 89 EXPECT_EQ(base::PLATFORM_FILE_OK, error_code); |
| 80 base::ClosePlatformFile(file); | 90 base::ClosePlatformFile(file); |
| 81 | 91 |
| 82 // Create a delete-on-close file. | 92 // Create a delete-on-close file. |
| 83 created = false; | 93 created = false; |
| 84 file_path = temp_dir.path().AppendASCII("create_file_2"); | 94 file_path = temp_dir.path().AppendASCII("create_file_2"); |
| 85 file = base::CreatePlatformFile( | 95 file = base::CreatePlatformFile( |
| 86 file_path, | 96 file_path, |
| 87 base::PLATFORM_FILE_OPEN_ALWAYS | | 97 base::PLATFORM_FILE_OPEN_ALWAYS | base::PLATFORM_FILE_DELETE_ON_CLOSE | |
| 88 base::PLATFORM_FILE_DELETE_ON_CLOSE | | 98 base::PLATFORM_FILE_READ, |
| 89 base::PLATFORM_FILE_READ, | |
| 90 &created, &error_code); | 99 &created, &error_code); |
|
jar (doing other things)
2013/06/06 15:46:45
nit: separate lines
| |
| 91 EXPECT_NE(base::kInvalidPlatformFileValue, file); | 100 EXPECT_NE(base::kInvalidPlatformFileValue, file); |
| 92 EXPECT_TRUE(created); | 101 EXPECT_TRUE(created); |
| 93 EXPECT_EQ(base::PLATFORM_FILE_OK, error_code); | 102 EXPECT_EQ(base::PLATFORM_FILE_OK, error_code); |
| 94 | 103 |
| 95 EXPECT_TRUE(base::ClosePlatformFile(file)); | 104 EXPECT_TRUE(base::ClosePlatformFile(file)); |
| 96 EXPECT_FALSE(file_util::PathExists(file_path)); | 105 EXPECT_FALSE(file_util::PathExists(file_path)); |
| 97 } | 106 } |
| 98 | 107 |
| 99 TEST(PlatformFile, DeleteOpenFile) { | 108 TEST(PlatformFile, DeleteOpenFile) { |
| 100 base::ScopedTempDir temp_dir; | 109 base::ScopedTempDir temp_dir; |
| 101 ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); | 110 ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); |
| 102 FilePath file_path = temp_dir.path().AppendASCII("create_file_1"); | 111 FilePath file_path = temp_dir.path().AppendASCII("create_file_1"); |
| 103 | 112 |
| 104 // Create a file. | 113 // Create a file. |
| 105 bool created = false; | 114 bool created = false; |
| 106 base::PlatformFileError error_code = base::PLATFORM_FILE_OK; | 115 base::PlatformFileError error_code = base::PLATFORM_FILE_OK; |
| 107 base::PlatformFile file = base::CreatePlatformFile( | 116 base::PlatformFile file = base::CreatePlatformFile( |
| 108 file_path, | 117 file_path, |
| 109 base::PLATFORM_FILE_OPEN_ALWAYS | | 118 base::PLATFORM_FILE_OPEN_ALWAYS | base::PLATFORM_FILE_READ | |
| 110 base::PLATFORM_FILE_READ | | 119 base::PLATFORM_FILE_SHARE_DELETE, |
| 111 base::PLATFORM_FILE_SHARE_DELETE, | 120 &created, |
| 112 &created, &error_code); | 121 &error_code); |
| 113 EXPECT_NE(base::kInvalidPlatformFileValue, file); | 122 EXPECT_NE(base::kInvalidPlatformFileValue, file); |
| 114 EXPECT_TRUE(created); | 123 EXPECT_TRUE(created); |
| 115 EXPECT_EQ(base::PLATFORM_FILE_OK, error_code); | 124 EXPECT_EQ(base::PLATFORM_FILE_OK, error_code); |
| 116 | 125 |
| 117 // Open an existing file and mark it as delete on close. | 126 // Open an existing file and mark it as delete on close. |
| 118 created = false; | 127 created = false; |
| 119 base::PlatformFile same_file = base::CreatePlatformFile( | 128 base::PlatformFile same_file = base::CreatePlatformFile( |
| 120 file_path, | 129 file_path, |
| 121 base::PLATFORM_FILE_OPEN | | 130 base::PLATFORM_FILE_OPEN | base::PLATFORM_FILE_DELETE_ON_CLOSE | |
| 122 base::PLATFORM_FILE_DELETE_ON_CLOSE | | 131 base::PLATFORM_FILE_READ, |
| 123 base::PLATFORM_FILE_READ, | 132 &created, |
| 124 &created, &error_code); | 133 &error_code); |
| 125 EXPECT_NE(base::kInvalidPlatformFileValue, file); | 134 EXPECT_NE(base::kInvalidPlatformFileValue, file); |
| 126 EXPECT_FALSE(created); | 135 EXPECT_FALSE(created); |
| 127 EXPECT_EQ(base::PLATFORM_FILE_OK, error_code); | 136 EXPECT_EQ(base::PLATFORM_FILE_OK, error_code); |
| 128 | 137 |
| 129 // Close both handles and check that the file is gone. | 138 // Close both handles and check that the file is gone. |
| 130 base::ClosePlatformFile(file); | 139 base::ClosePlatformFile(file); |
| 131 base::ClosePlatformFile(same_file); | 140 base::ClosePlatformFile(same_file); |
| 132 EXPECT_FALSE(file_util::PathExists(file_path)); | 141 EXPECT_FALSE(file_util::PathExists(file_path)); |
| 133 } | 142 } |
| 134 | 143 |
| 135 TEST(PlatformFile, ReadWritePlatformFile) { | 144 TEST(PlatformFile, ReadWritePlatformFile) { |
| 136 base::ScopedTempDir temp_dir; | 145 base::ScopedTempDir temp_dir; |
| 137 ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); | 146 ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); |
| 138 FilePath file_path = temp_dir.path().AppendASCII("read_write_file"); | 147 FilePath file_path = temp_dir.path().AppendASCII("read_write_file"); |
| 139 base::PlatformFile file = base::CreatePlatformFile( | 148 base::PlatformFile file = base::CreatePlatformFile( |
| 140 file_path, | 149 file_path, |
| 141 base::PLATFORM_FILE_CREATE | | 150 base::PLATFORM_FILE_CREATE | base::PLATFORM_FILE_READ | |
| 142 base::PLATFORM_FILE_READ | | 151 base::PLATFORM_FILE_WRITE, |
| 143 base::PLATFORM_FILE_WRITE, | 152 NULL, |
| 144 NULL, NULL); | 153 NULL); |
| 145 EXPECT_NE(base::kInvalidPlatformFileValue, file); | 154 EXPECT_NE(base::kInvalidPlatformFileValue, file); |
| 146 | 155 |
| 147 char data_to_write[] = "test"; | 156 char data_to_write[] = "test"; |
| 148 const int kTestDataSize = 4; | 157 const int kTestDataSize = 4; |
| 149 | 158 |
| 150 // Write 0 bytes to the file. | 159 // Write 0 bytes to the file. |
| 151 int bytes_written = WriteFully(file, 0, data_to_write, 0); | 160 int bytes_written = WriteFully(file, 0, data_to_write, 0); |
| 152 EXPECT_EQ(0, bytes_written); | 161 EXPECT_EQ(0, bytes_written); |
| 153 | 162 |
| 154 // Write "test" to the file. | 163 // Write "test" to the file. |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 204 EXPECT_EQ(data_to_write[i], data_read_2[i]); | 213 EXPECT_EQ(data_to_write[i], data_read_2[i]); |
| 205 for (int i = kTestDataSize; i < kOffsetBeyondEndOfFile; i++) | 214 for (int i = kTestDataSize; i < kOffsetBeyondEndOfFile; i++) |
| 206 EXPECT_EQ(0, data_read_2[i]); | 215 EXPECT_EQ(0, data_read_2[i]); |
| 207 for (int i = kOffsetBeyondEndOfFile; i < file_size; i++) | 216 for (int i = kOffsetBeyondEndOfFile; i < file_size; i++) |
| 208 EXPECT_EQ(data_to_write[i - kOffsetBeyondEndOfFile], data_read_2[i]); | 217 EXPECT_EQ(data_to_write[i - kOffsetBeyondEndOfFile], data_read_2[i]); |
| 209 | 218 |
| 210 // Close the file handle to allow the temp directory to be deleted. | 219 // Close the file handle to allow the temp directory to be deleted. |
| 211 base::ClosePlatformFile(file); | 220 base::ClosePlatformFile(file); |
| 212 } | 221 } |
| 213 | 222 |
| 223 TEST(PlatformFile, AppendPlatformFile) { | |
| 224 base::ScopedTempDir temp_dir; | |
| 225 ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); | |
| 226 FilePath file_path = temp_dir.path().AppendASCII("append_file"); | |
| 227 base::PlatformFile file = base::CreatePlatformFile( | |
| 228 file_path, | |
| 229 base::PLATFORM_FILE_CREATE | base::PLATFORM_FILE_APPEND, | |
| 230 NULL, | |
| 231 NULL); | |
| 232 EXPECT_NE(base::kInvalidPlatformFileValue, file); | |
| 233 | |
| 234 char data_to_write[] = "test"; | |
| 235 const int kTestDataSize = 4; | |
| 236 | |
| 237 // Write 0 bytes to the file. | |
| 238 int bytes_written = WriteFully(file, 0, data_to_write, 0); | |
| 239 EXPECT_EQ(0, bytes_written); | |
| 240 | |
| 241 // Write "test" to the file. | |
| 242 bytes_written = WriteFully(file, 0, data_to_write, kTestDataSize); | |
| 243 EXPECT_EQ(kTestDataSize, bytes_written); | |
| 244 | |
| 245 base::ClosePlatformFile(file); | |
| 246 file = base::CreatePlatformFile( | |
| 247 file_path, | |
| 248 base::PLATFORM_FILE_OPEN | base::PLATFORM_FILE_READ | | |
| 249 base::PLATFORM_FILE_APPEND, | |
| 250 NULL, | |
| 251 NULL); | |
| 252 EXPECT_NE(base::kInvalidPlatformFileValue, file); | |
| 253 if (file == base::kInvalidPlatformFileValue) { | |
| 254 printf("errno: %d\n", errno); | |
| 255 } | |
| 256 | |
| 257 char append_data_to_write[] = "78"; | |
| 258 const int kAppendDataSize = 2; | |
| 259 | |
| 260 // Append "test" to the file. | |
| 261 bytes_written = WriteFully(file, 0, append_data_to_write, kAppendDataSize); | |
| 262 EXPECT_EQ(2, bytes_written); | |
| 263 | |
| 264 // Read the entire file. | |
| 265 char data_read_1[32]; | |
| 266 int bytes_read = ReadFully(file, 0, data_read_1, | |
| 267 kTestDataSize + kAppendDataSize); | |
| 268 EXPECT_EQ(6, bytes_read); | |
| 269 | |
| 270 // Close the file handle to allow the temp directory to be deleted. | |
| 271 base::ClosePlatformFile(file); | |
| 272 } | |
| 273 | |
| 274 | |
| 214 TEST(PlatformFile, TruncatePlatformFile) { | 275 TEST(PlatformFile, TruncatePlatformFile) { |
| 215 base::ScopedTempDir temp_dir; | 276 base::ScopedTempDir temp_dir; |
| 216 ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); | 277 ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); |
| 217 FilePath file_path = temp_dir.path().AppendASCII("truncate_file"); | 278 FilePath file_path = temp_dir.path().AppendASCII("truncate_file"); |
| 218 base::PlatformFile file = base::CreatePlatformFile( | 279 base::PlatformFile file = base::CreatePlatformFile( |
| 219 file_path, | 280 file_path, |
| 220 base::PLATFORM_FILE_CREATE | | 281 base::PLATFORM_FILE_CREATE | base::PLATFORM_FILE_READ | |
| 221 base::PLATFORM_FILE_READ | | 282 base::PLATFORM_FILE_WRITE, |
| 222 base::PLATFORM_FILE_WRITE, | 283 NULL, |
| 223 NULL, NULL); | 284 NULL); |
| 224 EXPECT_NE(base::kInvalidPlatformFileValue, file); | 285 EXPECT_NE(base::kInvalidPlatformFileValue, file); |
| 225 | 286 |
| 226 // Write "test" to the file. | 287 // Write "test" to the file. |
| 227 char data_to_write[] = "test"; | 288 char data_to_write[] = "test"; |
| 228 int kTestDataSize = 4; | 289 int kTestDataSize = 4; |
| 229 int bytes_written = WriteFully(file, 0, data_to_write, kTestDataSize); | 290 int bytes_written = WriteFully(file, 0, data_to_write, kTestDataSize); |
| 230 EXPECT_EQ(kTestDataSize, bytes_written); | 291 EXPECT_EQ(kTestDataSize, bytes_written); |
| 231 | 292 |
| 232 // Extend the file. | 293 // Extend the file. |
| 233 const int kExtendedFileLength = 10; | 294 const int kExtendedFileLength = 10; |
| (...skipping 30 matching lines...) Expand all Loading... | |
| 264 // Flakily fails: http://crbug.com/86494 | 325 // Flakily fails: http://crbug.com/86494 |
| 265 #if defined(OS_ANDROID) | 326 #if defined(OS_ANDROID) |
| 266 TEST(PlatformFile, TouchGetInfoPlatformFile) { | 327 TEST(PlatformFile, TouchGetInfoPlatformFile) { |
| 267 #else | 328 #else |
| 268 TEST(PlatformFile, DISABLED_TouchGetInfoPlatformFile) { | 329 TEST(PlatformFile, DISABLED_TouchGetInfoPlatformFile) { |
| 269 #endif | 330 #endif |
| 270 base::ScopedTempDir temp_dir; | 331 base::ScopedTempDir temp_dir; |
| 271 ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); | 332 ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); |
| 272 base::PlatformFile file = base::CreatePlatformFile( | 333 base::PlatformFile file = base::CreatePlatformFile( |
| 273 temp_dir.path().AppendASCII("touch_get_info_file"), | 334 temp_dir.path().AppendASCII("touch_get_info_file"), |
| 274 base::PLATFORM_FILE_CREATE | | 335 base::PLATFORM_FILE_CREATE | base::PLATFORM_FILE_WRITE | |
| 275 base::PLATFORM_FILE_WRITE | | 336 base::PLATFORM_FILE_WRITE_ATTRIBUTES, |
| 276 base::PLATFORM_FILE_WRITE_ATTRIBUTES, | 337 NULL, |
| 277 NULL, NULL); | 338 NULL); |
| 278 EXPECT_NE(base::kInvalidPlatformFileValue, file); | 339 EXPECT_NE(base::kInvalidPlatformFileValue, file); |
| 279 | 340 |
| 280 // Get info for a newly created file. | 341 // Get info for a newly created file. |
| 281 base::PlatformFileInfo info; | 342 base::PlatformFileInfo info; |
| 282 EXPECT_TRUE(base::GetPlatformFileInfo(file, &info)); | 343 EXPECT_TRUE(base::GetPlatformFileInfo(file, &info)); |
| 283 | 344 |
| 284 // Add 2 seconds to account for possible rounding errors on | 345 // Add 2 seconds to account for possible rounding errors on |
| 285 // filesystems that use a 1s or 2s timestamp granularity. | 346 // filesystems that use a 1s or 2s timestamp granularity. |
| 286 base::Time now = base::Time::Now() + base::TimeDelta::FromSeconds(2); | 347 base::Time now = base::Time::Now() + base::TimeDelta::FromSeconds(2); |
| 287 EXPECT_EQ(0, info.size); | 348 EXPECT_EQ(0, info.size); |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 328 EXPECT_EQ(info.last_modified.ToInternalValue(), | 389 EXPECT_EQ(info.last_modified.ToInternalValue(), |
| 329 new_last_modified.ToInternalValue()); | 390 new_last_modified.ToInternalValue()); |
| 330 #endif | 391 #endif |
| 331 | 392 |
| 332 EXPECT_EQ(info.creation_time.ToInternalValue(), | 393 EXPECT_EQ(info.creation_time.ToInternalValue(), |
| 333 creation_time.ToInternalValue()); | 394 creation_time.ToInternalValue()); |
| 334 | 395 |
| 335 // Close the file handle to allow the temp directory to be deleted. | 396 // Close the file handle to allow the temp directory to be deleted. |
| 336 base::ClosePlatformFile(file); | 397 base::ClosePlatformFile(file); |
| 337 } | 398 } |
| OLD | NEW |