| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 "media/cdm/ppapi/cdm_file_io_test.h" | 5 #include "media/cdm/ppapi/cdm_file_io_test.h" |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/callback_helpers.h" | 8 #include "base/callback_helpers.h" |
| 9 #include "base/logging.h" | 9 #include "base/logging.h" |
| 10 | 10 |
| 11 namespace media { | 11 namespace media { |
| 12 | 12 |
| 13 #define FILE_IO_DVLOG(level) DVLOG(level) << "File IO Test: " | 13 #define FILE_IO_DVLOG(level) DVLOG(level) << "File IO Test: " |
| 14 | 14 |
| 15 const uint8 kData[] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, | 15 const uint8 kData[] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, |
| 16 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f }; | 16 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f }; |
| 17 const uint32 kDataSize = arraysize(kData); | 17 const uint32 kDataSize = arraysize(kData); |
| 18 | 18 |
| 19 const uint8 kBigData[] = { 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, | 19 const uint8 kBigData[] = { 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, |
| 20 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff, | 20 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff, |
| 21 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, | 21 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, |
| 22 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff, | 22 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff, |
| 23 0x00 }; | 23 0x00 }; |
| 24 const uint32 kBigDataSize = arraysize(kBigData); | 24 const uint32 kBigDataSize = arraysize(kBigData); |
| 25 | 25 |
| 26 // Must be > kReadSize in cdm_file_io_impl.cc. | 26 // Must be > kReadSize in cdm_file_io_impl.cc. |
| 27 const uint32 kLargeDataSize = 9 * 1024 + 7; | 27 const uint32 kLargeDataSize = 20 * 1024 + 7; |
| 28 | 28 |
| 29 // Macros to help add test cases/steps. | 29 // Macros to help add test cases/steps. |
| 30 |
| 31 // |test_name| is also used as the file name. File name validity tests relies |
| 32 // on this to work. |
| 30 #define START_TEST_CASE(test_name) \ | 33 #define START_TEST_CASE(test_name) \ |
| 31 do { \ | 34 do { \ |
| 32 FileIOTest test_case(create_file_io_cb_, "FileIOTest." test_name); \ | 35 FileIOTest test_case(create_file_io_cb_, test_name); \ |
| 33 CREATE_FILE_IO // Create FileIO for each test case. | 36 CREATE_FILE_IO // Create FileIO for each test case. |
| 34 | 37 |
| 35 #define ADD_TEST_STEP(type, status, data, data_size) \ | 38 #define ADD_TEST_STEP(type, status, data, data_size) \ |
| 36 test_case.AddTestStep(FileIOTest::type, cdm::FileIOClient::status, \ | 39 test_case.AddTestStep(FileIOTest::type, cdm::FileIOClient::status, \ |
| 37 (data), (data_size)); | 40 (data), (data_size)); |
| 38 | 41 |
| 39 #define END_TEST_CASE \ | 42 #define END_TEST_CASE \ |
| 40 remaining_tests_.push_back(test_case); \ | 43 remaining_tests_.push_back(test_case); \ |
| 41 } while(0); | 44 } while(0); |
| 42 | 45 |
| (...skipping 25 matching lines...) Expand all Loading... |
| 68 | 71 |
| 69 FileIOTestRunner::FileIOTestRunner(const CreateFileIOCB& create_file_io_cb) | 72 FileIOTestRunner::FileIOTestRunner(const CreateFileIOCB& create_file_io_cb) |
| 70 : create_file_io_cb_(create_file_io_cb), | 73 : create_file_io_cb_(create_file_io_cb), |
| 71 total_num_tests_(0), | 74 total_num_tests_(0), |
| 72 num_passed_tests_(0) { | 75 num_passed_tests_(0) { |
| 73 // Generate |large_data_|. | 76 // Generate |large_data_|. |
| 74 large_data_.resize(kLargeDataSize); | 77 large_data_.resize(kLargeDataSize); |
| 75 for (size_t i = 0; i < kLargeDataSize; ++i) | 78 for (size_t i = 0; i < kLargeDataSize; ++i) |
| 76 large_data_[i] = i % kuint8max; | 79 large_data_[i] = i % kuint8max; |
| 77 | 80 |
| 78 // Generate |corrupted_big_data_|. | |
| 79 corrupted_big_data_.assign(kData, kData + kDataSize); | |
| 80 corrupted_big_data_.resize(kBigDataSize, 0); | |
| 81 | |
| 82 AddTests(); | 81 AddTests(); |
| 83 } | 82 } |
| 84 | 83 |
| 85 FileIOTestRunner::~FileIOTestRunner() { | 84 FileIOTestRunner::~FileIOTestRunner() { |
| 86 if (remaining_tests_.empty()) | 85 if (remaining_tests_.empty()) |
| 87 return; | 86 return; |
| 88 | 87 |
| 89 DCHECK_LT(num_passed_tests_, total_num_tests_); | 88 DCHECK_LT(num_passed_tests_, total_num_tests_); |
| 90 FILE_IO_DVLOG(1) << "Not Finished (probably due to timeout). " | 89 FILE_IO_DVLOG(1) << "Not Finished (probably due to timeout). " |
| 91 << num_passed_tests_ << " passed in " | 90 << num_passed_tests_ << " passed in " |
| 92 << total_num_tests_ << " tests."; | 91 << total_num_tests_ << " tests."; |
| 93 } | 92 } |
| 94 | 93 |
| 95 // Note: Consecutive expectations (EXPECT*) can happen in any order. | 94 // Note: Consecutive expectations (EXPECT*) can happen in any order. |
| 96 void FileIOTestRunner::AddTests() { | 95 void FileIOTestRunner::AddTests() { |
| 96 START_TEST_CASE("/FileNameStartsWithForwardSlash") |
| 97 OPEN_FILE |
| 98 EXPECT_FILE_OPENED(kError) |
| 99 END_TEST_CASE |
| 100 |
| 101 START_TEST_CASE("\\FileNameStartsWithBackslash") |
| 102 OPEN_FILE |
| 103 EXPECT_FILE_OPENED(kError) |
| 104 END_TEST_CASE |
| 105 |
| 106 START_TEST_CASE("FileNameContains/ForwardSlash") |
| 107 OPEN_FILE |
| 108 EXPECT_FILE_OPENED(kError) |
| 109 END_TEST_CASE |
| 110 |
| 111 START_TEST_CASE("FileNameContains\\Backslash") |
| 112 OPEN_FILE |
| 113 EXPECT_FILE_OPENED(kError) |
| 114 END_TEST_CASE |
| 115 |
| 116 START_TEST_CASE("_FileNameStartsWithUnderscore") |
| 117 OPEN_FILE |
| 118 EXPECT_FILE_OPENED(kError) |
| 119 END_TEST_CASE |
| 120 |
| 97 START_TEST_CASE("ReadBeforeOpeningFile") | 121 START_TEST_CASE("ReadBeforeOpeningFile") |
| 98 READ_FILE | 122 READ_FILE |
| 99 EXPECT_FILE_READ(kError, NULL, 0) | 123 EXPECT_FILE_READ(kError, NULL, 0) |
| 100 END_TEST_CASE | 124 END_TEST_CASE |
| 101 | 125 |
| 102 START_TEST_CASE("WriteBeforeOpeningFile") | 126 START_TEST_CASE("WriteBeforeOpeningFile") |
| 103 WRITE_FILE(kData, kDataSize) | 127 WRITE_FILE(kData, kDataSize) |
| 104 EXPECT_FILE_WRITTEN(kError) | 128 EXPECT_FILE_WRITTEN(kError) |
| 105 END_TEST_CASE | 129 END_TEST_CASE |
| 106 | 130 |
| 107 START_TEST_CASE("ReadBeforeFileOpened") | 131 START_TEST_CASE("ReadBeforeFileOpened") |
| 108 OPEN_FILE | 132 OPEN_FILE |
| 109 READ_FILE | 133 READ_FILE |
| 110 EXPECT_FILE_OPENED(kSuccess) | 134 EXPECT_FILE_OPENED(kSuccess) |
| 111 EXPECT_FILE_READ(kError, NULL, 0) | 135 EXPECT_FILE_READ(kError, NULL, 0) |
| 136 // After file opened, we can do normal operations. |
| 137 WRITE_FILE(kData, kDataSize) |
| 138 EXPECT_FILE_WRITTEN(kSuccess) |
| 139 READ_FILE |
| 140 EXPECT_FILE_READ(kSuccess, kData, kDataSize) |
| 112 END_TEST_CASE | 141 END_TEST_CASE |
| 113 | 142 |
| 114 START_TEST_CASE("WriteBeforeFileOpened") | 143 START_TEST_CASE("WriteBeforeFileOpened") |
| 115 OPEN_FILE | 144 OPEN_FILE |
| 116 WRITE_FILE(kData, kDataSize) | 145 WRITE_FILE(kData, kDataSize) |
| 117 EXPECT_FILE_WRITTEN(kError) | 146 EXPECT_FILE_WRITTEN(kError) |
| 118 EXPECT_FILE_OPENED(kSuccess) | 147 EXPECT_FILE_OPENED(kSuccess) |
| 119 END_TEST_CASE | 148 END_TEST_CASE |
| 120 | 149 |
| 121 START_TEST_CASE("ReadDuringPendingRead") | 150 START_TEST_CASE("ReadDuringPendingRead") |
| (...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 231 WRITE_FILE(kData, kDataSize) | 260 WRITE_FILE(kData, kDataSize) |
| 232 EXPECT_FILE_WRITTEN(kSuccess) | 261 EXPECT_FILE_WRITTEN(kSuccess) |
| 233 CLOSE_FILE | 262 CLOSE_FILE |
| 234 CREATE_FILE_IO | 263 CREATE_FILE_IO |
| 235 OPEN_FILE | 264 OPEN_FILE |
| 236 EXPECT_FILE_OPENED(kSuccess) | 265 EXPECT_FILE_OPENED(kSuccess) |
| 237 READ_FILE | 266 READ_FILE |
| 238 EXPECT_FILE_READ(kSuccess, kData, kDataSize) | 267 EXPECT_FILE_READ(kSuccess, kData, kDataSize) |
| 239 END_TEST_CASE | 268 END_TEST_CASE |
| 240 | 269 |
| 241 START_TEST_CASE("ReopenFileInTheSameFileIO") | 270 START_TEST_CASE("MultipleReadsAndWrites") |
| 271 OPEN_FILE |
| 272 EXPECT_FILE_OPENED(kSuccess) |
| 273 // Read file which should be empty. |
| 274 READ_FILE |
| 275 EXPECT_FILE_READ(kSuccess, NULL, 0) |
| 276 // Write kData to file. |
| 277 WRITE_FILE(kData, kDataSize) |
| 278 EXPECT_FILE_WRITTEN(kSuccess) |
| 279 // Read file. |
| 280 READ_FILE |
| 281 EXPECT_FILE_READ(kSuccess, kData, kDataSize) |
| 282 // Read file again. |
| 283 READ_FILE |
| 284 EXPECT_FILE_READ(kSuccess, kData, kDataSize) |
| 285 // Overwrite file with large data. |
| 286 WRITE_FILE(&large_data_[0], kLargeDataSize) |
| 287 EXPECT_FILE_WRITTEN(kSuccess) |
| 288 // Read file. |
| 289 READ_FILE |
| 290 EXPECT_FILE_READ(kSuccess, &large_data_[0], kLargeDataSize) |
| 291 // Overwite file with zero bytes. |
| 292 WRITE_FILE(NULL, 0) |
| 293 EXPECT_FILE_WRITTEN(kSuccess) |
| 294 // Read file. |
| 295 READ_FILE |
| 296 EXPECT_FILE_READ(kSuccess, NULL, 0) |
| 297 END_TEST_CASE |
| 298 |
| 299 START_TEST_CASE("OpenAfterOpen") |
| 300 OPEN_FILE |
| 301 EXPECT_FILE_OPENED(kSuccess) |
| 302 OPEN_FILE |
| 303 EXPECT_FILE_OPENED(kError) |
| 304 END_TEST_CASE |
| 305 |
| 306 START_TEST_CASE("OpenDuringPendingOpen") |
| 242 OPEN_FILE | 307 OPEN_FILE |
| 243 OPEN_FILE | 308 OPEN_FILE |
| 244 EXPECT_FILE_OPENED(kError) // The second Open() failed. | 309 EXPECT_FILE_OPENED(kError) // The second Open() failed. |
| 245 EXPECT_FILE_OPENED(kSuccess) // The first Open() succeeded. | 310 EXPECT_FILE_OPENED(kSuccess) // The first Open() succeeded. |
| 246 END_TEST_CASE | 311 END_TEST_CASE |
| 247 | 312 |
| 248 START_TEST_CASE("ReopenFileInSeparateFileIO") | 313 START_TEST_CASE("ReopenFileInSeparateFileIO") |
| 249 OPEN_FILE | 314 OPEN_FILE |
| 250 EXPECT_FILE_OPENED(kSuccess) | 315 EXPECT_FILE_OPENED(kSuccess) |
| 251 WRITE_FILE(kData, kDataSize) | 316 WRITE_FILE(kData, kDataSize) |
| (...skipping 19 matching lines...) Expand all Loading... |
| 271 CLOSE_FILE | 336 CLOSE_FILE |
| 272 END_TEST_CASE | 337 END_TEST_CASE |
| 273 | 338 |
| 274 START_TEST_CASE("CloseDuringPendingOverwriteWithLargerData") | 339 START_TEST_CASE("CloseDuringPendingOverwriteWithLargerData") |
| 275 OPEN_FILE | 340 OPEN_FILE |
| 276 EXPECT_FILE_OPENED(kSuccess) | 341 EXPECT_FILE_OPENED(kSuccess) |
| 277 WRITE_FILE(kData, kDataSize) | 342 WRITE_FILE(kData, kDataSize) |
| 278 EXPECT_FILE_WRITTEN(kSuccess) | 343 EXPECT_FILE_WRITTEN(kSuccess) |
| 279 WRITE_FILE(kBigData, kBigDataSize) | 344 WRITE_FILE(kBigData, kBigDataSize) |
| 280 CLOSE_FILE | 345 CLOSE_FILE |
| 281 // The file is corrupted. See http://crbug.com/410630 | 346 // Write() didn't finish and the content of the file is not modified. |
| 282 CREATE_FILE_IO | 347 CREATE_FILE_IO |
| 283 OPEN_FILE | 348 OPEN_FILE |
| 284 EXPECT_FILE_OPENED(kSuccess) | 349 EXPECT_FILE_OPENED(kSuccess) |
| 285 READ_FILE | 350 READ_FILE |
| 286 EXPECT_FILE_READ(kSuccess, &corrupted_big_data_[0], kBigDataSize) | 351 EXPECT_FILE_READ(kSuccess, kData, kDataSize) |
| 287 END_TEST_CASE | 352 END_TEST_CASE |
| 288 | 353 |
| 289 START_TEST_CASE("CloseDuringPendingOverwriteWithSmallerData") | 354 START_TEST_CASE("CloseDuringPendingOverwriteWithSmallerData") |
| 290 OPEN_FILE | 355 OPEN_FILE |
| 291 EXPECT_FILE_OPENED(kSuccess) | 356 EXPECT_FILE_OPENED(kSuccess) |
| 292 WRITE_FILE(kBigData, kBigDataSize) | 357 WRITE_FILE(kBigData, kBigDataSize) |
| 293 EXPECT_FILE_WRITTEN(kSuccess) | 358 EXPECT_FILE_WRITTEN(kSuccess) |
| 294 WRITE_FILE(kData, kDataSize) | 359 WRITE_FILE(kData, kDataSize) |
| 295 CLOSE_FILE | 360 CLOSE_FILE |
| 296 // The file is corrupted. See http://crbug.com/410630 | 361 // Write() didn't finish and the content of the file is not modified. |
| 297 CREATE_FILE_IO | 362 CREATE_FILE_IO |
| 298 OPEN_FILE | 363 OPEN_FILE |
| 299 EXPECT_FILE_OPENED(kSuccess) | 364 EXPECT_FILE_OPENED(kSuccess) |
| 300 READ_FILE | 365 READ_FILE |
| 301 EXPECT_FILE_READ(kSuccess, kBigData, kDataSize) | 366 EXPECT_FILE_READ(kSuccess, kBigData, kBigDataSize) |
| 302 END_TEST_CASE | 367 END_TEST_CASE |
| 303 | 368 |
| 304 START_TEST_CASE("CloseDuringPendingRead") | 369 START_TEST_CASE("CloseDuringPendingRead") |
| 305 OPEN_FILE | 370 OPEN_FILE |
| 306 EXPECT_FILE_OPENED(kSuccess) | 371 EXPECT_FILE_OPENED(kSuccess) |
| 307 WRITE_FILE(kData, kDataSize) | 372 WRITE_FILE(kData, kDataSize) |
| 308 EXPECT_FILE_WRITTEN(kSuccess) | 373 EXPECT_FILE_WRITTEN(kSuccess) |
| 309 READ_FILE | 374 READ_FILE |
| 310 CLOSE_FILE | 375 CLOSE_FILE |
| 311 // Make sure the file is not modified. | 376 // Make sure the file is not modified. |
| (...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 485 void FileIOTest::OnTestComplete(bool success) { | 550 void FileIOTest::OnTestComplete(bool success) { |
| 486 while (!file_io_stack_.empty()) { | 551 while (!file_io_stack_.empty()) { |
| 487 file_io_stack_.top()->Close(); | 552 file_io_stack_.top()->Close(); |
| 488 file_io_stack_.pop(); | 553 file_io_stack_.pop(); |
| 489 } | 554 } |
| 490 FILE_IO_DVLOG(3) << test_name_ << (success ? " PASSED" : " FAILED"); | 555 FILE_IO_DVLOG(3) << test_name_ << (success ? " PASSED" : " FAILED"); |
| 491 base::ResetAndReturn(&completion_cb_).Run(success); | 556 base::ResetAndReturn(&completion_cb_).Run(success); |
| 492 } | 557 } |
| 493 | 558 |
| 494 } // namespace media | 559 } // namespace media |
| OLD | NEW |