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)
for (size_t i = 0; i < kLargeDataSize; ++i)
large_data_[i] = i % kuint8max;
// Generate |corrupted_big_data_|.
corrupted_big_data_.assign(kData, kData + kDataSize);
corrupted_big_data_.resize(kBigDataSize, 0);
AddTests();
}
......@@ -267,6 +271,36 @@ void FileIOTestRunner::AddTests() {
CLOSE_FILE
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")
OPEN_FILE
EXPECT_FILE_OPENED(kSuccess)
......@@ -274,6 +308,12 @@ void FileIOTestRunner::AddTests() {
EXPECT_FILE_WRITTEN(kSuccess)
READ_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
}
......
......@@ -146,6 +146,7 @@ class FileIOTestRunner {
CompletionCB completion_cb_;
std::list<FileIOTest> remaining_tests_;
std::vector<uint8> large_data_;
std::vector<uint8> corrupted_big_data_;
size_t total_num_tests_; // Total number of 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