Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(530)

Side by Side Diff: media/cdm/ppapi/cdm_file_io_test.cc

Issue 545983005: CdmFileIOImpl: Refactor Write() implementation. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Cannot use "ERROR" on Windows!!! Also polished tests. Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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("FileNameContains/ForwardSlash")
102 OPEN_FILE
103 EXPECT_FILE_OPENED(kError)
104 END_TEST_CASE
105
106 START_TEST_CASE("\\FileNameStartsWithBackslash")
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
121 START_TEST_CASE("FileNameContains_Underscore")
122 OPEN_FILE
123 EXPECT_FILE_OPENED(kSuccess)
124 END_TEST_CASE
125
97 START_TEST_CASE("ReadBeforeOpeningFile") 126 START_TEST_CASE("ReadBeforeOpeningFile")
98 READ_FILE 127 READ_FILE
99 EXPECT_FILE_READ(kError, NULL, 0) 128 EXPECT_FILE_READ(kError, NULL, 0)
100 END_TEST_CASE 129 END_TEST_CASE
101 130
102 START_TEST_CASE("WriteBeforeOpeningFile") 131 START_TEST_CASE("WriteBeforeOpeningFile")
103 WRITE_FILE(kData, kDataSize) 132 WRITE_FILE(kData, kDataSize)
104 EXPECT_FILE_WRITTEN(kError) 133 EXPECT_FILE_WRITTEN(kError)
105 END_TEST_CASE 134 END_TEST_CASE
106 135
107 START_TEST_CASE("ReadBeforeFileOpened") 136 START_TEST_CASE("ReadBeforeFileOpened")
108 OPEN_FILE 137 OPEN_FILE
109 READ_FILE 138 READ_FILE
110 EXPECT_FILE_OPENED(kSuccess) 139 EXPECT_FILE_OPENED(kSuccess)
111 EXPECT_FILE_READ(kError, NULL, 0) 140 EXPECT_FILE_READ(kError, NULL, 0)
141 // After file opened, we can still do normal operations.
142 WRITE_FILE(kData, kDataSize)
143 EXPECT_FILE_WRITTEN(kSuccess)
144 READ_FILE
145 EXPECT_FILE_READ(kSuccess, kData, kDataSize)
112 END_TEST_CASE 146 END_TEST_CASE
113 147
114 START_TEST_CASE("WriteBeforeFileOpened") 148 START_TEST_CASE("WriteBeforeFileOpened")
115 OPEN_FILE 149 OPEN_FILE
116 WRITE_FILE(kData, kDataSize) 150 WRITE_FILE(kData, kDataSize)
117 EXPECT_FILE_WRITTEN(kError) 151 EXPECT_FILE_WRITTEN(kError)
118 EXPECT_FILE_OPENED(kSuccess) 152 EXPECT_FILE_OPENED(kSuccess)
153 // After file opened, we can still do normal operations.
154 WRITE_FILE(kData, kDataSize)
155 EXPECT_FILE_WRITTEN(kSuccess)
156 READ_FILE
157 EXPECT_FILE_READ(kSuccess, kData, kDataSize)
119 END_TEST_CASE 158 END_TEST_CASE
120 159
121 START_TEST_CASE("ReadDuringPendingRead") 160 START_TEST_CASE("ReadDuringPendingRead")
122 OPEN_FILE 161 OPEN_FILE
123 EXPECT_FILE_OPENED(kSuccess) 162 EXPECT_FILE_OPENED(kSuccess)
124 WRITE_FILE(kData, kDataSize) 163 WRITE_FILE(kData, kDataSize)
125 EXPECT_FILE_WRITTEN(kSuccess) 164 EXPECT_FILE_WRITTEN(kSuccess)
126 READ_FILE 165 READ_FILE
127 READ_FILE 166 READ_FILE
128 EXPECT_FILE_READ(kInUse, NULL, 0) 167 EXPECT_FILE_READ(kInUse, NULL, 0)
129 EXPECT_FILE_READ(kSuccess, kData, kDataSize) 168 EXPECT_FILE_READ(kSuccess, kData, kDataSize)
169 // Read again.
170 READ_FILE
171 EXPECT_FILE_READ(kSuccess, kData, kDataSize)
130 END_TEST_CASE 172 END_TEST_CASE
131 173
132 START_TEST_CASE("ReadDuringPendingWrite") 174 START_TEST_CASE("ReadDuringPendingWrite")
133 OPEN_FILE 175 OPEN_FILE
134 EXPECT_FILE_OPENED(kSuccess) 176 EXPECT_FILE_OPENED(kSuccess)
135 WRITE_FILE(kData, kDataSize) 177 WRITE_FILE(kData, kDataSize)
136 READ_FILE 178 READ_FILE
137 EXPECT_FILE_READ(kInUse, NULL, 0) 179 EXPECT_FILE_READ(kInUse, NULL, 0)
138 EXPECT_FILE_WRITTEN(kSuccess) 180 EXPECT_FILE_WRITTEN(kSuccess)
181 // Read again.
182 READ_FILE
183 EXPECT_FILE_READ(kSuccess, kData, kDataSize)
139 END_TEST_CASE 184 END_TEST_CASE
140 185
141 START_TEST_CASE("WriteDuringPendingRead") 186 START_TEST_CASE("WriteDuringPendingRead")
142 OPEN_FILE 187 OPEN_FILE
143 EXPECT_FILE_OPENED(kSuccess) 188 EXPECT_FILE_OPENED(kSuccess)
144 READ_FILE 189 READ_FILE
145 WRITE_FILE(kData, kDataSize) 190 WRITE_FILE(kData, kDataSize)
146 EXPECT_FILE_WRITTEN(kInUse) 191 EXPECT_FILE_WRITTEN(kInUse)
147 EXPECT_FILE_READ(kSuccess, NULL, 0) 192 EXPECT_FILE_READ(kSuccess, NULL, 0)
193 // We can still do normal operations.
194 WRITE_FILE(kData, kDataSize)
195 EXPECT_FILE_WRITTEN(kSuccess)
196 READ_FILE
197 EXPECT_FILE_READ(kSuccess, kData, kDataSize)
148 END_TEST_CASE 198 END_TEST_CASE
149 199
150 START_TEST_CASE("WriteDuringPendingWrite") 200 START_TEST_CASE("WriteDuringPendingWrite")
151 OPEN_FILE 201 OPEN_FILE
152 EXPECT_FILE_OPENED(kSuccess) 202 EXPECT_FILE_OPENED(kSuccess)
153 WRITE_FILE(kData, kDataSize) 203 WRITE_FILE(kData, kDataSize)
154 WRITE_FILE(kBigData, kBigDataSize) 204 WRITE_FILE(kBigData, kBigDataSize)
155 EXPECT_FILE_WRITTEN(kInUse) 205 EXPECT_FILE_WRITTEN(kInUse)
156 EXPECT_FILE_WRITTEN(kSuccess) 206 EXPECT_FILE_WRITTEN(kSuccess)
207 // Read to make sure data is written.
ddorwin 2014/09/16 18:07:37 ... sure original data...
xhwang 2014/09/17 21:02:32 Done.
208 READ_FILE
209 EXPECT_FILE_READ(kSuccess, kData, kDataSize)
157 END_TEST_CASE 210 END_TEST_CASE
158 211
159 START_TEST_CASE("ReadEmptyFile") 212 START_TEST_CASE("ReadEmptyFile")
160 OPEN_FILE 213 OPEN_FILE
161 EXPECT_FILE_OPENED(kSuccess) 214 EXPECT_FILE_OPENED(kSuccess)
162 READ_FILE 215 READ_FILE
163 EXPECT_FILE_READ(kSuccess, NULL, 0) 216 EXPECT_FILE_READ(kSuccess, NULL, 0)
164 END_TEST_CASE 217 END_TEST_CASE
165 218
166 START_TEST_CASE("WriteAndRead") 219 START_TEST_CASE("WriteAndRead")
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
231 WRITE_FILE(kData, kDataSize) 284 WRITE_FILE(kData, kDataSize)
232 EXPECT_FILE_WRITTEN(kSuccess) 285 EXPECT_FILE_WRITTEN(kSuccess)
233 CLOSE_FILE 286 CLOSE_FILE
234 CREATE_FILE_IO 287 CREATE_FILE_IO
235 OPEN_FILE 288 OPEN_FILE
236 EXPECT_FILE_OPENED(kSuccess) 289 EXPECT_FILE_OPENED(kSuccess)
237 READ_FILE 290 READ_FILE
238 EXPECT_FILE_READ(kSuccess, kData, kDataSize) 291 EXPECT_FILE_READ(kSuccess, kData, kDataSize)
239 END_TEST_CASE 292 END_TEST_CASE
240 293
241 START_TEST_CASE("ReopenFileInTheSameFileIO") 294 START_TEST_CASE("MultipleReadsAndWrites")
295 OPEN_FILE
296 EXPECT_FILE_OPENED(kSuccess)
297 // Read file which should be empty.
298 READ_FILE
299 EXPECT_FILE_READ(kSuccess, NULL, 0)
300 // Write kData to file.
301 WRITE_FILE(kData, kDataSize)
302 EXPECT_FILE_WRITTEN(kSuccess)
303 // Read file.
304 READ_FILE
305 EXPECT_FILE_READ(kSuccess, kData, kDataSize)
306 // Read file again.
307 READ_FILE
308 EXPECT_FILE_READ(kSuccess, kData, kDataSize)
309 // Overwrite file with large data.
310 WRITE_FILE(&large_data_[0], kLargeDataSize)
311 EXPECT_FILE_WRITTEN(kSuccess)
312 // Read file.
313 READ_FILE
314 EXPECT_FILE_READ(kSuccess, &large_data_[0], kLargeDataSize)
315 // Overwite file with zero bytes.
ddorwin 2014/09/16 18:07:37 For completeness, should we write and confirm kDat
xhwang 2014/09/17 21:02:32 Done.
316 WRITE_FILE(NULL, 0)
317 EXPECT_FILE_WRITTEN(kSuccess)
318 // Read file.
319 READ_FILE
320 EXPECT_FILE_READ(kSuccess, NULL, 0)
321 END_TEST_CASE
322
323 START_TEST_CASE("OpenAfterOpen")
324 OPEN_FILE
325 EXPECT_FILE_OPENED(kSuccess)
326 OPEN_FILE
327 EXPECT_FILE_OPENED(kError)
328 END_TEST_CASE
329
330 START_TEST_CASE("OpenDuringPendingOpen")
242 OPEN_FILE 331 OPEN_FILE
243 OPEN_FILE 332 OPEN_FILE
244 EXPECT_FILE_OPENED(kError) // The second Open() failed. 333 EXPECT_FILE_OPENED(kError) // The second Open() failed.
245 EXPECT_FILE_OPENED(kSuccess) // The first Open() succeeded. 334 EXPECT_FILE_OPENED(kSuccess) // The first Open() succeeded.
246 END_TEST_CASE 335 END_TEST_CASE
247 336
248 START_TEST_CASE("ReopenFileInSeparateFileIO") 337 START_TEST_CASE("ReopenFileInSeparateFileIO")
249 OPEN_FILE 338 OPEN_FILE
250 EXPECT_FILE_OPENED(kSuccess) 339 EXPECT_FILE_OPENED(kSuccess)
251 WRITE_FILE(kData, kDataSize) 340 WRITE_FILE(kData, kDataSize)
(...skipping 19 matching lines...) Expand all
271 CLOSE_FILE 360 CLOSE_FILE
272 END_TEST_CASE 361 END_TEST_CASE
273 362
274 START_TEST_CASE("CloseDuringPendingOverwriteWithLargerData") 363 START_TEST_CASE("CloseDuringPendingOverwriteWithLargerData")
275 OPEN_FILE 364 OPEN_FILE
276 EXPECT_FILE_OPENED(kSuccess) 365 EXPECT_FILE_OPENED(kSuccess)
277 WRITE_FILE(kData, kDataSize) 366 WRITE_FILE(kData, kDataSize)
278 EXPECT_FILE_WRITTEN(kSuccess) 367 EXPECT_FILE_WRITTEN(kSuccess)
279 WRITE_FILE(kBigData, kBigDataSize) 368 WRITE_FILE(kBigData, kBigDataSize)
280 CLOSE_FILE 369 CLOSE_FILE
281 // The file is corrupted. See http://crbug.com/410630 370 // Write() didn't finish and the content of the file is not modified.
ddorwin 2014/09/16 18:07:37 Yay! :)
xhwang 2014/09/17 21:02:32 Acknowledged.
282 CREATE_FILE_IO 371 CREATE_FILE_IO
283 OPEN_FILE 372 OPEN_FILE
284 EXPECT_FILE_OPENED(kSuccess) 373 EXPECT_FILE_OPENED(kSuccess)
285 READ_FILE 374 READ_FILE
286 EXPECT_FILE_READ(kSuccess, &corrupted_big_data_[0], kBigDataSize) 375 EXPECT_FILE_READ(kSuccess, kData, kDataSize)
287 END_TEST_CASE 376 END_TEST_CASE
288 377
289 START_TEST_CASE("CloseDuringPendingOverwriteWithSmallerData") 378 START_TEST_CASE("CloseDuringPendingOverwriteWithSmallerData")
290 OPEN_FILE 379 OPEN_FILE
291 EXPECT_FILE_OPENED(kSuccess) 380 EXPECT_FILE_OPENED(kSuccess)
292 WRITE_FILE(kBigData, kBigDataSize) 381 WRITE_FILE(kBigData, kBigDataSize)
293 EXPECT_FILE_WRITTEN(kSuccess) 382 EXPECT_FILE_WRITTEN(kSuccess)
294 WRITE_FILE(kData, kDataSize) 383 WRITE_FILE(kData, kDataSize)
295 CLOSE_FILE 384 CLOSE_FILE
296 // The file is corrupted. See http://crbug.com/410630 385 // Write() didn't finish and the content of the file is not modified.
297 CREATE_FILE_IO 386 CREATE_FILE_IO
298 OPEN_FILE 387 OPEN_FILE
299 EXPECT_FILE_OPENED(kSuccess) 388 EXPECT_FILE_OPENED(kSuccess)
300 READ_FILE 389 READ_FILE
301 EXPECT_FILE_READ(kSuccess, kBigData, kDataSize) 390 EXPECT_FILE_READ(kSuccess, kBigData, kBigDataSize)
302 END_TEST_CASE 391 END_TEST_CASE
303 392
304 START_TEST_CASE("CloseDuringPendingRead") 393 START_TEST_CASE("CloseDuringPendingRead")
305 OPEN_FILE 394 OPEN_FILE
306 EXPECT_FILE_OPENED(kSuccess) 395 EXPECT_FILE_OPENED(kSuccess)
307 WRITE_FILE(kData, kDataSize) 396 WRITE_FILE(kData, kDataSize)
308 EXPECT_FILE_WRITTEN(kSuccess) 397 EXPECT_FILE_WRITTEN(kSuccess)
309 READ_FILE 398 READ_FILE
310 CLOSE_FILE 399 CLOSE_FILE
311 // Make sure the file is not modified. 400 // Make sure the file is not modified.
(...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after
485 void FileIOTest::OnTestComplete(bool success) { 574 void FileIOTest::OnTestComplete(bool success) {
486 while (!file_io_stack_.empty()) { 575 while (!file_io_stack_.empty()) {
487 file_io_stack_.top()->Close(); 576 file_io_stack_.top()->Close();
488 file_io_stack_.pop(); 577 file_io_stack_.pop();
489 } 578 }
490 FILE_IO_DVLOG(3) << test_name_ << (success ? " PASSED" : " FAILED"); 579 FILE_IO_DVLOG(3) << test_name_ << (success ? " PASSED" : " FAILED");
491 base::ResetAndReturn(&completion_cb_).Run(success); 580 base::ResetAndReturn(&completion_cb_).Run(success);
492 } 581 }
493 582
494 } // namespace media 583 } // namespace media
OLDNEW
« media/cdm/ppapi/cdm_file_io_impl.cc ('K') | « media/cdm/ppapi/cdm_file_io_test.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698