Commit f6b40dd6 authored by xhwang's avatar xhwang Committed by Commit bot

CDM FileIOTest: Explictly test corrupted file.

Since Write() takes two (or more) steps to finish, it's possible for
CdmFileIOImpl to be destructed after SetLength() is called but before
WriteFile() is called. In that case, since we SetLength(data_size), we
could end up with a corrupted file.

This CL update FileIOTest to explictly cover this case.

BUG=410630
TEST=ECKEncryptedMediaTest.FileIOTest still passes.

Review URL: https://codereview.chromium.org/563193002

Cr-Commit-Position: refs/heads/master@{#294867}
parent 048f8474
...@@ -75,6 +75,10 @@ FileIOTestRunner::FileIOTestRunner(const CreateFileIOCB& create_file_io_cb) ...@@ -75,6 +75,10 @@ FileIOTestRunner::FileIOTestRunner(const CreateFileIOCB& create_file_io_cb)
for (size_t i = 0; i < kLargeDataSize; ++i) for (size_t i = 0; i < kLargeDataSize; ++i)
large_data_[i] = i % kuint8max; large_data_[i] = i % kuint8max;
// Generate |corrupted_big_data_|.
corrupted_big_data_.assign(kData, kData + kDataSize);
corrupted_big_data_.resize(kBigDataSize, 0);
AddTests(); AddTests();
} }
...@@ -267,6 +271,36 @@ void FileIOTestRunner::AddTests() { ...@@ -267,6 +271,36 @@ void FileIOTestRunner::AddTests() {
CLOSE_FILE CLOSE_FILE
END_TEST_CASE END_TEST_CASE
START_TEST_CASE("CloseDuringPendingOverwriteWithLargerData")
OPEN_FILE
EXPECT_FILE_OPENED(kSuccess)
WRITE_FILE(kData, kDataSize)
EXPECT_FILE_WRITTEN(kSuccess)
WRITE_FILE(kBigData, kBigDataSize)
CLOSE_FILE
// The file is corrupted. See http://crbug.com/410630
CREATE_FILE_IO
OPEN_FILE
EXPECT_FILE_OPENED(kSuccess)
READ_FILE
EXPECT_FILE_READ(kSuccess, &corrupted_big_data_[0], kBigDataSize)
END_TEST_CASE
START_TEST_CASE("CloseDuringPendingOverwriteWithSmallerData")
OPEN_FILE
EXPECT_FILE_OPENED(kSuccess)
WRITE_FILE(kBigData, kBigDataSize)
EXPECT_FILE_WRITTEN(kSuccess)
WRITE_FILE(kData, kDataSize)
CLOSE_FILE
// The file is corrupted. See http://crbug.com/410630
CREATE_FILE_IO
OPEN_FILE
EXPECT_FILE_OPENED(kSuccess)
READ_FILE
EXPECT_FILE_READ(kSuccess, kBigData, kDataSize)
END_TEST_CASE
START_TEST_CASE("CloseDuringPendingRead") START_TEST_CASE("CloseDuringPendingRead")
OPEN_FILE OPEN_FILE
EXPECT_FILE_OPENED(kSuccess) EXPECT_FILE_OPENED(kSuccess)
...@@ -274,6 +308,12 @@ void FileIOTestRunner::AddTests() { ...@@ -274,6 +308,12 @@ void FileIOTestRunner::AddTests() {
EXPECT_FILE_WRITTEN(kSuccess) EXPECT_FILE_WRITTEN(kSuccess)
READ_FILE READ_FILE
CLOSE_FILE CLOSE_FILE
// Make sure the file is not modified.
CREATE_FILE_IO
OPEN_FILE
EXPECT_FILE_OPENED(kSuccess)
READ_FILE
EXPECT_FILE_READ(kSuccess, kData, kDataSize)
END_TEST_CASE END_TEST_CASE
} }
......
...@@ -146,6 +146,7 @@ class FileIOTestRunner { ...@@ -146,6 +146,7 @@ class FileIOTestRunner {
CompletionCB completion_cb_; CompletionCB completion_cb_;
std::list<FileIOTest> remaining_tests_; std::list<FileIOTest> remaining_tests_;
std::vector<uint8> large_data_; std::vector<uint8> large_data_;
std::vector<uint8> corrupted_big_data_;
size_t total_num_tests_; // Total number of tests. size_t total_num_tests_; // Total number of tests.
size_t num_passed_tests_; // Number of passed tests. size_t num_passed_tests_; // Number of passed tests.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment