OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 "ppapi/tests/test_file_io.h" | 5 #include "ppapi/tests/test_file_io.h" |
6 | 6 |
7 #include <stdio.h> | 7 #include <stdio.h> |
8 #include <string.h> | 8 #include <string.h> |
9 | 9 |
10 #include "ppapi/c/pp_errors.h" | 10 #include "ppapi/c/pp_errors.h" |
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
104 return PP_OK; | 104 return PP_OK; |
105 } | 105 } |
106 | 106 |
107 } // namespace | 107 } // namespace |
108 | 108 |
109 bool TestFileIO::Init() { | 109 bool TestFileIO::Init() { |
110 return InitTestingInterface() && EnsureRunningOverHTTP(); | 110 return InitTestingInterface() && EnsureRunningOverHTTP(); |
111 } | 111 } |
112 | 112 |
113 void TestFileIO::RunTest() { | 113 void TestFileIO::RunTest() { |
114 RUN_TEST(Open); | 114 RUN_ASYNC_TEST(Open); |
115 RUN_TEST(ReadWriteSetLength); | 115 RUN_ASYNC_TEST(ReadWriteSetLength); |
116 RUN_TEST(TouchQuery); | 116 RUN_ASYNC_TEST(TouchQuery); |
117 RUN_TEST(AbortCalls); | 117 RUN_ASYNC_TEST(AbortCalls); |
118 // TODO(viettrungluu): add tests: | 118 // TODO(viettrungluu): add tests: |
119 // - that PP_ERROR_PENDING is correctly returned | 119 // - that PP_ERROR_PENDING is correctly returned |
120 // - that operations respect the file open modes (flags) | 120 // - that operations respect the file open modes (flags) |
121 } | 121 } |
122 | 122 |
123 std::string TestFileIO::TestOpen() { | 123 std::string TestFileIO::TestOpen() { |
124 TestCompletionCallback callback(instance_->pp_instance()); | 124 TestCompletionCallback callback(instance_->pp_instance(), force_async_); |
125 | 125 |
126 pp::FileSystem_Dev file_system(instance_, PP_FILESYSTEMTYPE_LOCALTEMPORARY); | 126 pp::FileSystem_Dev file_system(instance_, PP_FILESYSTEMTYPE_LOCALTEMPORARY); |
127 pp::FileRef_Dev file_ref(file_system, "/file_open"); | 127 pp::FileRef_Dev file_ref(file_system, "/file_open"); |
128 int32_t rv = file_system.Open(1024, callback); | 128 int32_t rv = file_system.Open(1024, callback); |
| 129 if (force_async_ && rv != PP_OK_COMPLETIONPENDING) |
| 130 return ReportError("FileSystem::Open force_async failed", rv); |
129 if (rv == PP_OK_COMPLETIONPENDING) | 131 if (rv == PP_OK_COMPLETIONPENDING) |
130 rv = callback.WaitForResult(); | 132 rv = callback.WaitForResult(); |
131 if (rv != PP_OK) | 133 if (rv != PP_OK) |
132 return ReportError("FileSystem::Open", rv); | 134 return ReportError("FileSystem::Open", rv); |
133 | 135 |
134 std::string result; | 136 std::string result; |
135 result = MatchOpenExpectations( | 137 result = MatchOpenExpectations( |
136 &file_system, | 138 &file_system, |
137 PP_FILEOPENFLAG_READ, | 139 PP_FILEOPENFLAG_READ, |
138 DONT_CREATE_IF_DOESNT_EXIST | OPEN_IF_EXISTS | DONT_TRUNCATE_IF_EXISTS); | 140 DONT_CREATE_IF_DOESNT_EXIST | OPEN_IF_EXISTS | DONT_TRUNCATE_IF_EXISTS); |
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
210 &file_system, | 212 &file_system, |
211 PP_FILEOPENFLAG_READ | PP_FILEOPENFLAG_TRUNCATE, | 213 PP_FILEOPENFLAG_READ | PP_FILEOPENFLAG_TRUNCATE, |
212 INVALID_FLAG_COMBINATION); | 214 INVALID_FLAG_COMBINATION); |
213 if (!result.empty()) | 215 if (!result.empty()) |
214 return result; | 216 return result; |
215 | 217 |
216 PASS(); | 218 PASS(); |
217 } | 219 } |
218 | 220 |
219 std::string TestFileIO::TestReadWriteSetLength() { | 221 std::string TestFileIO::TestReadWriteSetLength() { |
220 TestCompletionCallback callback(instance_->pp_instance()); | 222 TestCompletionCallback callback(instance_->pp_instance(), force_async_); |
221 | 223 |
222 pp::FileSystem_Dev file_system(instance_, PP_FILESYSTEMTYPE_LOCALTEMPORARY); | 224 pp::FileSystem_Dev file_system(instance_, PP_FILESYSTEMTYPE_LOCALTEMPORARY); |
223 pp::FileRef_Dev file_ref(file_system, "/file_read_write_setlength"); | 225 pp::FileRef_Dev file_ref(file_system, "/file_read_write_setlength"); |
224 int32_t rv = file_system.Open(1024, callback); | 226 int32_t rv = file_system.Open(1024, callback); |
| 227 if (force_async_ && rv != PP_OK_COMPLETIONPENDING) |
| 228 return ReportError("FileSystem::Open force_async failed", rv); |
225 if (rv == PP_OK_COMPLETIONPENDING) | 229 if (rv == PP_OK_COMPLETIONPENDING) |
226 rv = callback.WaitForResult(); | 230 rv = callback.WaitForResult(); |
227 if (rv != PP_OK) | 231 if (rv != PP_OK) |
228 return ReportError("FileSystem::Open", rv); | 232 return ReportError("FileSystem::Open", rv); |
229 | 233 |
230 pp::FileIO_Dev file_io(instance_); | 234 pp::FileIO_Dev file_io(instance_); |
231 rv = file_io.Open(file_ref, | 235 rv = file_io.Open(file_ref, |
232 PP_FILEOPENFLAG_CREATE | | 236 PP_FILEOPENFLAG_CREATE | |
233 PP_FILEOPENFLAG_TRUNCATE | | 237 PP_FILEOPENFLAG_TRUNCATE | |
234 PP_FILEOPENFLAG_READ | | 238 PP_FILEOPENFLAG_READ | |
235 PP_FILEOPENFLAG_WRITE, | 239 PP_FILEOPENFLAG_WRITE, |
236 callback); | 240 callback); |
| 241 if (force_async_ && rv != PP_OK_COMPLETIONPENDING) |
| 242 return ReportError("FileIO::Open force_async failed", rv); |
237 if (rv == PP_OK_COMPLETIONPENDING) | 243 if (rv == PP_OK_COMPLETIONPENDING) |
238 rv = callback.WaitForResult(); | 244 rv = callback.WaitForResult(); |
239 if (rv != PP_OK) | 245 if (rv != PP_OK) |
240 return ReportError("FileIO::Open", rv); | 246 return ReportError("FileIO::Open", rv); |
241 | 247 |
242 // Write something to the file. | 248 // Write something to the file. |
243 rv = WriteEntireBuffer(instance_->pp_instance(), &file_io, 0, "test_test"); | 249 rv = WriteEntireBuffer(instance_->pp_instance(), &file_io, 0, "test_test"); |
244 if (rv != PP_OK) | 250 if (rv != PP_OK) |
245 return ReportError("FileIO::Write", rv); | 251 return ReportError("FileIO::Write", rv); |
246 | 252 |
247 // Read the entire file. | 253 // Read the entire file. |
248 std::string read_buffer; | 254 std::string read_buffer; |
249 rv = ReadEntireFile(instance_->pp_instance(), &file_io, 0, &read_buffer); | 255 rv = ReadEntireFile(instance_->pp_instance(), &file_io, 0, &read_buffer); |
250 if (rv != PP_OK) | 256 if (rv != PP_OK) |
251 return ReportError("FileIO::Read", rv); | 257 return ReportError("FileIO::Read", rv); |
252 if (read_buffer != "test_test") | 258 if (read_buffer != "test_test") |
253 return ReportMismatch("FileIO::Read", read_buffer, "test_test"); | 259 return ReportMismatch("FileIO::Read", read_buffer, "test_test"); |
254 | 260 |
255 // Truncate the file. | 261 // Truncate the file. |
256 rv = file_io.SetLength(4, callback); | 262 rv = file_io.SetLength(4, callback); |
| 263 if (force_async_ && rv != PP_OK_COMPLETIONPENDING) |
| 264 return ReportError("FileIO::SetLength force_async failed", rv); |
257 if (rv == PP_OK_COMPLETIONPENDING) | 265 if (rv == PP_OK_COMPLETIONPENDING) |
258 rv = callback.WaitForResult(); | 266 rv = callback.WaitForResult(); |
259 if (rv != PP_OK) | 267 if (rv != PP_OK) |
260 return ReportError("FileIO::SetLength", rv); | 268 return ReportError("FileIO::SetLength", rv); |
261 | 269 |
262 // Check the file contents. | 270 // Check the file contents. |
263 read_buffer.clear(); | 271 read_buffer.clear(); |
264 rv = ReadEntireFile(instance_->pp_instance(), &file_io, 0, &read_buffer); | 272 rv = ReadEntireFile(instance_->pp_instance(), &file_io, 0, &read_buffer); |
265 if (rv != PP_OK) | 273 if (rv != PP_OK) |
266 return ReportError("FileIO::Read", rv); | 274 return ReportError("FileIO::Read", rv); |
(...skipping 17 matching lines...) Expand all Loading... |
284 read_buffer.clear(); | 292 read_buffer.clear(); |
285 rv = ReadEntireFile(instance_->pp_instance(), &file_io, 0, &read_buffer); | 293 rv = ReadEntireFile(instance_->pp_instance(), &file_io, 0, &read_buffer); |
286 if (rv != PP_OK) | 294 if (rv != PP_OK) |
287 return ReportError("FileIO::Read", rv); | 295 return ReportError("FileIO::Read", rv); |
288 if (read_buffer != std::string("test\0\0\0\0test", 12)) | 296 if (read_buffer != std::string("test\0\0\0\0test", 12)) |
289 return ReportMismatch("FileIO::Read", read_buffer, | 297 return ReportMismatch("FileIO::Read", read_buffer, |
290 std::string("test\0\0\0\0test", 12)); | 298 std::string("test\0\0\0\0test", 12)); |
291 | 299 |
292 // Extend the file. | 300 // Extend the file. |
293 rv = file_io.SetLength(16, callback); | 301 rv = file_io.SetLength(16, callback); |
| 302 if (force_async_ && rv != PP_OK_COMPLETIONPENDING) |
| 303 return ReportError("FileIO::SetLength force_async failed", rv); |
294 if (rv == PP_OK_COMPLETIONPENDING) | 304 if (rv == PP_OK_COMPLETIONPENDING) |
295 rv = callback.WaitForResult(); | 305 rv = callback.WaitForResult(); |
296 if (rv != PP_OK) | 306 if (rv != PP_OK) |
297 return ReportError("FileIO::SetLength", rv); | 307 return ReportError("FileIO::SetLength", rv); |
298 | 308 |
299 // Check the contents of the file. | 309 // Check the contents of the file. |
300 read_buffer.clear(); | 310 read_buffer.clear(); |
301 rv = ReadEntireFile(instance_->pp_instance(), &file_io, 0, &read_buffer); | 311 rv = ReadEntireFile(instance_->pp_instance(), &file_io, 0, &read_buffer); |
302 if (rv != PP_OK) | 312 if (rv != PP_OK) |
303 return ReportError("FileIO::Read", rv); | 313 return ReportError("FileIO::Read", rv); |
(...skipping 21 matching lines...) Expand all Loading... |
325 if (rv != PP_OK) | 335 if (rv != PP_OK) |
326 return ReportError("FileIO::Read", rv); | 336 return ReportError("FileIO::Read", rv); |
327 if (read_buffer != std::string("testtest\0\0\0\0", 12)) | 337 if (read_buffer != std::string("testtest\0\0\0\0", 12)) |
328 return ReportMismatch("FileIO::Read", read_buffer, | 338 return ReportMismatch("FileIO::Read", read_buffer, |
329 std::string("testtest\0\0\0\0", 12)); | 339 std::string("testtest\0\0\0\0", 12)); |
330 | 340 |
331 PASS(); | 341 PASS(); |
332 } | 342 } |
333 | 343 |
334 std::string TestFileIO::TestTouchQuery() { | 344 std::string TestFileIO::TestTouchQuery() { |
335 TestCompletionCallback callback(instance_->pp_instance()); | 345 TestCompletionCallback callback(instance_->pp_instance(), force_async_); |
336 | 346 |
337 pp::FileSystem_Dev file_system(instance_, PP_FILESYSTEMTYPE_LOCALTEMPORARY); | 347 pp::FileSystem_Dev file_system(instance_, PP_FILESYSTEMTYPE_LOCALTEMPORARY); |
338 int32_t rv = file_system.Open(1024, callback); | 348 int32_t rv = file_system.Open(1024, callback); |
| 349 if (force_async_ && rv != PP_OK_COMPLETIONPENDING) |
| 350 return ReportError("FileSystem::Open force_async failed", rv); |
339 if (rv == PP_OK_COMPLETIONPENDING) | 351 if (rv == PP_OK_COMPLETIONPENDING) |
340 rv = callback.WaitForResult(); | 352 rv = callback.WaitForResult(); |
341 if (rv != PP_OK) | 353 if (rv != PP_OK) |
342 return ReportError("FileSystem::Open", rv); | 354 return ReportError("FileSystem::Open", rv); |
343 | 355 |
344 pp::FileRef_Dev file_ref(file_system, "/file_touch"); | 356 pp::FileRef_Dev file_ref(file_system, "/file_touch"); |
345 pp::FileIO_Dev file_io(instance_); | 357 pp::FileIO_Dev file_io(instance_); |
346 rv = file_io.Open(file_ref, | 358 rv = file_io.Open(file_ref, |
347 PP_FILEOPENFLAG_CREATE | | 359 PP_FILEOPENFLAG_CREATE | |
348 PP_FILEOPENFLAG_TRUNCATE | | 360 PP_FILEOPENFLAG_TRUNCATE | |
349 PP_FILEOPENFLAG_WRITE, | 361 PP_FILEOPENFLAG_WRITE, |
350 callback); | 362 callback); |
| 363 if (force_async_ && rv != PP_OK_COMPLETIONPENDING) |
| 364 return ReportError("FileIO::Open force_async failed", rv); |
351 if (rv == PP_OK_COMPLETIONPENDING) | 365 if (rv == PP_OK_COMPLETIONPENDING) |
352 rv = callback.WaitForResult(); | 366 rv = callback.WaitForResult(); |
353 if (rv != PP_OK) | 367 if (rv != PP_OK) |
354 return ReportError("FileIO::Open", rv); | 368 return ReportError("FileIO::Open", rv); |
355 | 369 |
356 // Write some data to have a non-zero file size. | 370 // Write some data to have a non-zero file size. |
357 rv = file_io.Write(0, "test", 4, callback); | 371 rv = file_io.Write(0, "test", 4, callback); |
| 372 if (force_async_ && rv != PP_OK_COMPLETIONPENDING) |
| 373 return ReportError("FileIO::Write force_async failed", rv); |
358 if (rv == PP_OK_COMPLETIONPENDING) | 374 if (rv == PP_OK_COMPLETIONPENDING) |
359 rv = callback.WaitForResult(); | 375 rv = callback.WaitForResult(); |
360 if (rv != 4) | 376 if (rv != 4) |
361 return ReportError("FileIO::Write", rv); | 377 return ReportError("FileIO::Write", rv); |
362 | 378 |
363 // last_access_time's granularity is 1 day | 379 // last_access_time's granularity is 1 day |
364 // last_modified_time's granularity is 2 seconds | 380 // last_modified_time's granularity is 2 seconds |
365 const PP_Time last_access_time = 123 * 24 * 3600.0; | 381 const PP_Time last_access_time = 123 * 24 * 3600.0; |
366 const PP_Time last_modified_time = 246.0; | 382 const PP_Time last_modified_time = 246.0; |
367 rv = file_io.Touch(last_access_time, last_modified_time, callback); | 383 rv = file_io.Touch(last_access_time, last_modified_time, callback); |
| 384 if (force_async_ && rv != PP_OK_COMPLETIONPENDING) |
| 385 return ReportError("FileIO::Touch force_async failed", rv); |
368 if (rv == PP_OK_COMPLETIONPENDING) | 386 if (rv == PP_OK_COMPLETIONPENDING) |
369 rv = callback.WaitForResult(); | 387 rv = callback.WaitForResult(); |
370 if (rv != PP_OK) | 388 if (rv != PP_OK) |
371 return ReportError("FileSystem::Touch", rv); | 389 return ReportError("FileIO::Touch", rv); |
372 | 390 |
373 PP_FileInfo_Dev info; | 391 PP_FileInfo_Dev info; |
374 rv = file_io.Query(&info, callback); | 392 rv = file_io.Query(&info, callback); |
| 393 if (force_async_ && rv != PP_OK_COMPLETIONPENDING) |
| 394 return ReportError("FileIO::Query force_async failed", rv); |
375 if (rv == PP_OK_COMPLETIONPENDING) | 395 if (rv == PP_OK_COMPLETIONPENDING) |
376 rv = callback.WaitForResult(); | 396 rv = callback.WaitForResult(); |
377 if (rv != PP_OK) | 397 if (rv != PP_OK) |
378 return ReportError("FileSystem::Query", rv); | 398 return ReportError("FileIO::Query", rv); |
379 | 399 |
380 if ((info.size != 4) || | 400 if ((info.size != 4) || |
381 (info.type != PP_FILETYPE_REGULAR) || | 401 (info.type != PP_FILETYPE_REGULAR) || |
382 (info.system_type != PP_FILESYSTEMTYPE_LOCALTEMPORARY) || | 402 (info.system_type != PP_FILESYSTEMTYPE_LOCALTEMPORARY) || |
383 (info.last_access_time != last_access_time) || | 403 (info.last_access_time != last_access_time) || |
384 (info.last_modified_time != last_modified_time)) | 404 (info.last_modified_time != last_modified_time)) |
385 return "FileSystem::Query() has returned bad data."; | 405 return "FileIO::Query() has returned bad data."; |
386 | 406 |
387 // Call |Query()| again, to make sure it works a second time. | 407 // Call |Query()| again, to make sure it works a second time. |
388 rv = file_io.Query(&info, callback); | 408 rv = file_io.Query(&info, callback); |
| 409 if (force_async_ && rv != PP_OK_COMPLETIONPENDING) |
| 410 return ReportError("FileIO::Query force_async failed", rv); |
389 if (rv == PP_OK_COMPLETIONPENDING) | 411 if (rv == PP_OK_COMPLETIONPENDING) |
390 rv = callback.WaitForResult(); | 412 rv = callback.WaitForResult(); |
391 if (rv != PP_OK) | 413 if (rv != PP_OK) |
392 return ReportError("FileSystem::Query", rv); | 414 return ReportError("FileIO::Query", rv); |
393 | 415 |
394 PASS(); | 416 PASS(); |
395 } | 417 } |
396 | 418 |
397 std::string TestFileIO::TestAbortCalls() { | 419 std::string TestFileIO::TestAbortCalls() { |
398 TestCompletionCallback callback(instance_->pp_instance()); | 420 TestCompletionCallback callback(instance_->pp_instance(), force_async_); |
399 | 421 |
400 pp::FileSystem_Dev file_system(instance_, PP_FILESYSTEMTYPE_LOCALTEMPORARY); | 422 pp::FileSystem_Dev file_system(instance_, PP_FILESYSTEMTYPE_LOCALTEMPORARY); |
401 pp::FileRef_Dev file_ref(file_system, "/file_abort_calls"); | 423 pp::FileRef_Dev file_ref(file_system, "/file_abort_calls"); |
402 int32_t rv = file_system.Open(1024, callback); | 424 int32_t rv = file_system.Open(1024, callback); |
| 425 if (force_async_ && rv != PP_OK_COMPLETIONPENDING) |
| 426 return ReportError("FileSystem::Open force_async failed", rv); |
403 if (rv == PP_OK_COMPLETIONPENDING) | 427 if (rv == PP_OK_COMPLETIONPENDING) |
404 rv = callback.WaitForResult(); | 428 rv = callback.WaitForResult(); |
405 if (rv != PP_OK) | 429 if (rv != PP_OK) |
406 return ReportError("FileSystem::Open", rv); | 430 return ReportError("FileSystem::Open", rv); |
407 | 431 |
408 // First, create a file which to do ops on. | 432 // First, create a file which to do ops on. |
409 { | 433 { |
410 pp::FileIO_Dev file_io(instance_); | 434 pp::FileIO_Dev file_io(instance_); |
411 rv = file_io.Open(file_ref, | 435 rv = file_io.Open(file_ref, |
412 PP_FILEOPENFLAG_CREATE | PP_FILEOPENFLAG_WRITE, | 436 PP_FILEOPENFLAG_CREATE | PP_FILEOPENFLAG_WRITE, |
413 callback); | 437 callback); |
| 438 if (force_async_ && rv != PP_OK_COMPLETIONPENDING) |
| 439 return ReportError("FileIO::Open force_async failed", rv); |
414 if (rv == PP_OK_COMPLETIONPENDING) | 440 if (rv == PP_OK_COMPLETIONPENDING) |
415 rv = callback.WaitForResult(); | 441 rv = callback.WaitForResult(); |
416 if (rv != PP_OK) | 442 if (rv != PP_OK) |
417 return ReportError("FileIO::Open", rv); | 443 return ReportError("FileIO::Open", rv); |
418 | 444 |
419 // N.B.: Should write at least 3 bytes. | 445 // N.B.: Should write at least 3 bytes. |
420 rv = WriteEntireBuffer(instance_->pp_instance(), | 446 rv = WriteEntireBuffer(instance_->pp_instance(), |
421 &file_io, | 447 &file_io, |
422 0, | 448 0, |
423 "foobarbazquux"); | 449 "foobarbazquux"); |
424 if (rv != PP_OK) | 450 if (rv != PP_OK) |
425 return ReportError("FileIO::Write", rv); | 451 return ReportError("FileIO::Write", rv); |
426 } | 452 } |
427 | 453 |
428 // Abort |Open()|. | 454 // Abort |Open()|. |
429 { | 455 { |
430 callback.reset_run_count(); | 456 callback.reset_run_count(); |
431 rv = pp::FileIO_Dev(instance_) | 457 rv = pp::FileIO_Dev(instance_) |
432 .Open(file_ref, PP_FILEOPENFLAG_READ,callback); | 458 .Open(file_ref, PP_FILEOPENFLAG_READ,callback); |
| 459 if (force_async_ && rv != PP_OK_COMPLETIONPENDING) |
| 460 return ReportError("FileIO::Open force_async failed", rv); |
433 if (callback.run_count() > 0) | 461 if (callback.run_count() > 0) |
434 return "FileIO::Open ran callback synchronously."; | 462 return "FileIO::Open ran callback synchronously."; |
435 if (rv == PP_OK_COMPLETIONPENDING) { | 463 if (rv == PP_OK_COMPLETIONPENDING) { |
436 rv = callback.WaitForResult(); | 464 rv = callback.WaitForResult(); |
437 if (rv != PP_ERROR_ABORTED) | 465 if (rv != PP_ERROR_ABORTED) |
438 return "FileIO::Open not aborted."; | 466 return "FileIO::Open not aborted."; |
439 } else if (rv != PP_OK) { | 467 } else if (rv != PP_OK) { |
440 return ReportError("FileIO::Open", rv); | 468 return ReportError("FileIO::Open", rv); |
441 } | 469 } |
442 } | 470 } |
443 | 471 |
444 // Abort |Query()|. | 472 // Abort |Query()|. |
445 { | 473 { |
446 PP_FileInfo_Dev info = { 0 }; | 474 PP_FileInfo_Dev info = { 0 }; |
447 { | 475 { |
448 pp::FileIO_Dev file_io(instance_); | 476 pp::FileIO_Dev file_io(instance_); |
449 rv = file_io.Open(file_ref, PP_FILEOPENFLAG_READ, callback); | 477 rv = file_io.Open(file_ref, PP_FILEOPENFLAG_READ, callback); |
| 478 if (force_async_ && rv != PP_OK_COMPLETIONPENDING) |
| 479 return ReportError("FileIO::Open force_async failed", rv); |
450 if (rv == PP_OK_COMPLETIONPENDING) | 480 if (rv == PP_OK_COMPLETIONPENDING) |
451 rv = callback.WaitForResult(); | 481 rv = callback.WaitForResult(); |
452 if (rv != PP_OK) | 482 if (rv != PP_OK) |
453 return ReportError("FileIO::Open", rv); | 483 return ReportError("FileIO::Open", rv); |
454 | 484 |
455 callback.reset_run_count(); | 485 callback.reset_run_count(); |
456 rv = file_io.Query(&info, callback); | 486 rv = file_io.Query(&info, callback); |
| 487 if (force_async_ && rv != PP_OK_COMPLETIONPENDING) |
| 488 return ReportError("FileIO::Query force_async failed", rv); |
457 } // Destroy |file_io|. | 489 } // Destroy |file_io|. |
458 if (rv == PP_OK_COMPLETIONPENDING) { | 490 if (rv == PP_OK_COMPLETIONPENDING) { |
459 // Save a copy and make sure |info| doesn't get written to. | 491 // Save a copy and make sure |info| doesn't get written to. |
460 PP_FileInfo_Dev info_copy; | 492 PP_FileInfo_Dev info_copy; |
461 memcpy(&info_copy, &info, sizeof(info)); | 493 memcpy(&info_copy, &info, sizeof(info)); |
462 rv = callback.WaitForResult(); | 494 rv = callback.WaitForResult(); |
463 if (rv != PP_ERROR_ABORTED) | 495 if (rv != PP_ERROR_ABORTED) |
464 return "FileIO::Query not aborted."; | 496 return "FileIO::Query not aborted."; |
465 if (memcmp(&info_copy, &info, sizeof(info)) != 0) | 497 if (memcmp(&info_copy, &info, sizeof(info)) != 0) |
466 return "FileIO::Query wrote data after resource destruction."; | 498 return "FileIO::Query wrote data after resource destruction."; |
467 } else if (rv != PP_OK) { | 499 } else if (rv != PP_OK) { |
468 return ReportError("FileIO::Query", rv); | 500 return ReportError("FileIO::Query", rv); |
469 } | 501 } |
470 } | 502 } |
471 | 503 |
472 // Abort |Touch()|. | 504 // Abort |Touch()|. |
473 { | 505 { |
474 { | 506 { |
475 pp::FileIO_Dev file_io(instance_); | 507 pp::FileIO_Dev file_io(instance_); |
476 rv = file_io.Open(file_ref, PP_FILEOPENFLAG_WRITE, callback); | 508 rv = file_io.Open(file_ref, PP_FILEOPENFLAG_WRITE, callback); |
| 509 if (force_async_ && rv != PP_OK_COMPLETIONPENDING) |
| 510 return ReportError("FileIO::Open force_async failed", rv); |
477 if (rv == PP_OK_COMPLETIONPENDING) | 511 if (rv == PP_OK_COMPLETIONPENDING) |
478 rv = callback.WaitForResult(); | 512 rv = callback.WaitForResult(); |
479 if (rv != PP_OK) | 513 if (rv != PP_OK) |
480 return ReportError("FileIO::Open", rv); | 514 return ReportError("FileIO::Open", rv); |
481 | 515 |
482 callback.reset_run_count(); | 516 callback.reset_run_count(); |
483 rv = file_io.Touch(0, 0, callback); | 517 rv = file_io.Touch(0, 0, callback); |
| 518 if (force_async_ && rv != PP_OK_COMPLETIONPENDING) |
| 519 return ReportError("FileIO::Touch force_async failed", rv); |
484 } // Destroy |file_io|. | 520 } // Destroy |file_io|. |
485 if (rv == PP_OK_COMPLETIONPENDING) { | 521 if (rv == PP_OK_COMPLETIONPENDING) { |
486 rv = callback.WaitForResult(); | 522 rv = callback.WaitForResult(); |
487 if (rv != PP_ERROR_ABORTED) | 523 if (rv != PP_ERROR_ABORTED) |
488 return "FileIO::Touch not aborted."; | 524 return "FileIO::Touch not aborted."; |
489 } else if (rv != PP_OK) { | 525 } else if (rv != PP_OK) { |
490 return ReportError("FileIO::Touch", rv); | 526 return ReportError("FileIO::Touch", rv); |
491 } | 527 } |
492 } | 528 } |
493 | 529 |
494 // Abort |Read()|. | 530 // Abort |Read()|. |
495 { | 531 { |
496 char buf[3] = { 0 }; | 532 char buf[3] = { 0 }; |
497 { | 533 { |
498 pp::FileIO_Dev file_io(instance_); | 534 pp::FileIO_Dev file_io(instance_); |
499 rv = file_io.Open(file_ref, PP_FILEOPENFLAG_READ, callback); | 535 rv = file_io.Open(file_ref, PP_FILEOPENFLAG_READ, callback); |
| 536 if (force_async_ && rv != PP_OK_COMPLETIONPENDING) |
| 537 return ReportError("FileIO::Open force_async failed", rv); |
500 if (rv == PP_OK_COMPLETIONPENDING) | 538 if (rv == PP_OK_COMPLETIONPENDING) |
501 rv = callback.WaitForResult(); | 539 rv = callback.WaitForResult(); |
502 if (rv != PP_OK) | 540 if (rv != PP_OK) |
503 return ReportError("FileIO::Open", rv); | 541 return ReportError("FileIO::Open", rv); |
504 | 542 |
505 callback.reset_run_count(); | 543 callback.reset_run_count(); |
506 rv = file_io.Read(0, buf, sizeof(buf), callback); | 544 rv = file_io.Read(0, buf, sizeof(buf), callback); |
| 545 if (force_async_ && rv != PP_OK_COMPLETIONPENDING) |
| 546 return ReportError("FileIO::Read force_async failed", rv); |
507 } // Destroy |file_io|. | 547 } // Destroy |file_io|. |
508 if (rv == PP_OK_COMPLETIONPENDING) { | 548 if (rv == PP_OK_COMPLETIONPENDING) { |
509 // Save a copy and make sure |buf| doesn't get written to. | 549 // Save a copy and make sure |buf| doesn't get written to. |
510 char buf_copy[3]; | 550 char buf_copy[3]; |
511 memcpy(&buf_copy, &buf, sizeof(buf)); | 551 memcpy(&buf_copy, &buf, sizeof(buf)); |
512 rv = callback.WaitForResult(); | 552 rv = callback.WaitForResult(); |
513 if (rv != PP_ERROR_ABORTED) | 553 if (rv != PP_ERROR_ABORTED) |
514 return "FileIO::Read not aborted."; | 554 return "FileIO::Read not aborted."; |
515 if (memcmp(&buf_copy, &buf, sizeof(buf)) != 0) | 555 if (memcmp(&buf_copy, &buf, sizeof(buf)) != 0) |
516 return "FileIO::Read wrote data after resource destruction."; | 556 return "FileIO::Read wrote data after resource destruction."; |
517 } else if (rv != PP_OK) { | 557 } else if (rv != PP_OK) { |
518 return ReportError("FileIO::Read", rv); | 558 return ReportError("FileIO::Read", rv); |
519 } | 559 } |
520 } | 560 } |
521 | 561 |
522 // Abort |Write()|. | 562 // Abort |Write()|. |
523 { | 563 { |
524 char buf[3] = { 0 }; | 564 char buf[3] = { 0 }; |
525 { | 565 { |
526 pp::FileIO_Dev file_io(instance_); | 566 pp::FileIO_Dev file_io(instance_); |
527 rv = file_io.Open(file_ref, PP_FILEOPENFLAG_READ, callback); | 567 rv = file_io.Open(file_ref, PP_FILEOPENFLAG_READ, callback); |
| 568 if (force_async_ && rv != PP_OK_COMPLETIONPENDING) |
| 569 return ReportError("FileIO::Open force_async failed", rv); |
528 if (rv == PP_OK_COMPLETIONPENDING) | 570 if (rv == PP_OK_COMPLETIONPENDING) |
529 rv = callback.WaitForResult(); | 571 rv = callback.WaitForResult(); |
530 if (rv != PP_OK) | 572 if (rv != PP_OK) |
531 return ReportError("FileIO::Open", rv); | 573 return ReportError("FileIO::Open", rv); |
532 | 574 |
533 callback.reset_run_count(); | 575 callback.reset_run_count(); |
534 rv = file_io.Write(0, buf, sizeof(buf), callback); | 576 rv = file_io.Write(0, buf, sizeof(buf), callback); |
| 577 if (force_async_ && rv != PP_OK_COMPLETIONPENDING) |
| 578 return ReportError("FileIO::Write force_async failed", rv); |
535 } // Destroy |file_io|. | 579 } // Destroy |file_io|. |
536 if (rv == PP_OK_COMPLETIONPENDING) { | 580 if (rv == PP_OK_COMPLETIONPENDING) { |
537 rv = callback.WaitForResult(); | 581 rv = callback.WaitForResult(); |
538 if (rv != PP_ERROR_ABORTED) | 582 if (rv != PP_ERROR_ABORTED) |
539 return "FileIO::Write not aborted."; | 583 return "FileIO::Write not aborted."; |
540 } else if (rv != PP_OK) { | 584 } else if (rv != PP_OK) { |
541 return ReportError("FileIO::Write", rv); | 585 return ReportError("FileIO::Write", rv); |
542 } | 586 } |
543 } | 587 } |
544 | 588 |
545 // Abort |SetLength()|. | 589 // Abort |SetLength()|. |
546 { | 590 { |
547 { | 591 { |
548 pp::FileIO_Dev file_io(instance_); | 592 pp::FileIO_Dev file_io(instance_); |
549 rv = file_io.Open(file_ref, PP_FILEOPENFLAG_READ, callback); | 593 rv = file_io.Open(file_ref, PP_FILEOPENFLAG_READ, callback); |
| 594 if (force_async_ && rv != PP_OK_COMPLETIONPENDING) |
| 595 return ReportError("FileIO::Open force_async failed", rv); |
550 if (rv == PP_OK_COMPLETIONPENDING) | 596 if (rv == PP_OK_COMPLETIONPENDING) |
551 rv = callback.WaitForResult(); | 597 rv = callback.WaitForResult(); |
552 if (rv != PP_OK) | 598 if (rv != PP_OK) |
553 return ReportError("FileIO::Open", rv); | 599 return ReportError("FileIO::Open", rv); |
554 | 600 |
555 callback.reset_run_count(); | 601 callback.reset_run_count(); |
556 rv = file_io.SetLength(3, callback); | 602 rv = file_io.SetLength(3, callback); |
| 603 if (force_async_ && rv != PP_OK_COMPLETIONPENDING) |
| 604 return ReportError("FileIO::SetLength force_async failed", rv); |
557 } // Destroy |file_io|. | 605 } // Destroy |file_io|. |
558 if (rv == PP_OK_COMPLETIONPENDING) { | 606 if (rv == PP_OK_COMPLETIONPENDING) { |
559 rv = callback.WaitForResult(); | 607 rv = callback.WaitForResult(); |
560 if (rv != PP_ERROR_ABORTED) | 608 if (rv != PP_ERROR_ABORTED) |
561 return "FileIO::SetLength not aborted."; | 609 return "FileIO::SetLength not aborted."; |
562 } else if (rv != PP_OK) { | 610 } else if (rv != PP_OK) { |
563 return ReportError("FileIO::SetLength", rv); | 611 return ReportError("FileIO::SetLength", rv); |
564 } | 612 } |
565 } | 613 } |
566 | 614 |
567 // Abort |Flush()|. | 615 // Abort |Flush()|. |
568 { | 616 { |
569 { | 617 { |
570 pp::FileIO_Dev file_io(instance_); | 618 pp::FileIO_Dev file_io(instance_); |
571 rv = file_io.Open(file_ref, PP_FILEOPENFLAG_READ, callback); | 619 rv = file_io.Open(file_ref, PP_FILEOPENFLAG_READ, callback); |
| 620 if (force_async_ && rv != PP_OK_COMPLETIONPENDING) |
| 621 return ReportError("FileIO::Open force_async failed", rv); |
572 if (rv == PP_OK_COMPLETIONPENDING) | 622 if (rv == PP_OK_COMPLETIONPENDING) |
573 rv = callback.WaitForResult(); | 623 rv = callback.WaitForResult(); |
574 if (rv != PP_OK) | 624 if (rv != PP_OK) |
575 return ReportError("FileIO::Open", rv); | 625 return ReportError("FileIO::Open", rv); |
576 | 626 |
577 callback.reset_run_count(); | 627 callback.reset_run_count(); |
578 rv = file_io.Flush(callback); | 628 rv = file_io.Flush(callback); |
| 629 if (force_async_ && rv != PP_OK_COMPLETIONPENDING) |
| 630 return ReportError("FileIO::Flush force_async failed", rv); |
579 } // Destroy |file_io|. | 631 } // Destroy |file_io|. |
580 if (rv == PP_OK_COMPLETIONPENDING) { | 632 if (rv == PP_OK_COMPLETIONPENDING) { |
581 rv = callback.WaitForResult(); | 633 rv = callback.WaitForResult(); |
582 if (rv != PP_ERROR_ABORTED) | 634 if (rv != PP_ERROR_ABORTED) |
583 return "FileIO::Flush not aborted."; | 635 return "FileIO::Flush not aborted."; |
584 } else if (rv != PP_OK) { | 636 } else if (rv != PP_OK) { |
585 return ReportError("FileIO::Flush", rv); | 637 return ReportError("FileIO::Flush", rv); |
586 } | 638 } |
587 } | 639 } |
588 | 640 |
(...skipping 18 matching lines...) Expand all Loading... |
607 for (size_t remains = expectations, end = END_OF_OPEN_EXPECATION_PAIRS; | 659 for (size_t remains = expectations, end = END_OF_OPEN_EXPECATION_PAIRS; |
608 end != 0; remains >>= 2, end >>= 2) { | 660 end != 0; remains >>= 2, end >>= 2) { |
609 if (!!(remains & 1) == !!(remains & 2)) | 661 if (!!(remains & 1) == !!(remains & 2)) |
610 return bad_argument; | 662 return bad_argument; |
611 } | 663 } |
612 } | 664 } |
613 bool create_if_doesnt_exist = !!(expectations & CREATE_IF_DOESNT_EXIST); | 665 bool create_if_doesnt_exist = !!(expectations & CREATE_IF_DOESNT_EXIST); |
614 bool open_if_exists = !!(expectations & OPEN_IF_EXISTS); | 666 bool open_if_exists = !!(expectations & OPEN_IF_EXISTS); |
615 bool truncate_if_exists = !!(expectations & TRUNCATE_IF_EXISTS); | 667 bool truncate_if_exists = !!(expectations & TRUNCATE_IF_EXISTS); |
616 | 668 |
617 TestCompletionCallback callback(instance_->pp_instance()); | 669 TestCompletionCallback callback(instance_->pp_instance(), force_async_); |
618 pp::FileRef_Dev existent_file_ref( | 670 pp::FileRef_Dev existent_file_ref( |
619 *file_system, "/match_open_expectation_existent_non_empty_file"); | 671 *file_system, "/match_open_expectation_existent_non_empty_file"); |
620 pp::FileRef_Dev nonexistent_file_ref( | 672 pp::FileRef_Dev nonexistent_file_ref( |
621 *file_system, "/match_open_expectation_nonexistent_file"); | 673 *file_system, "/match_open_expectation_nonexistent_file"); |
622 | 674 |
623 // Setup files for test. | 675 // Setup files for test. |
624 { | 676 { |
625 int32_t rv = existent_file_ref.Delete(callback); | 677 int32_t rv = existent_file_ref.Delete(callback); |
| 678 if (force_async_ && rv != PP_OK_COMPLETIONPENDING) |
| 679 return ReportError("FileRef::Delete force_async failed", rv); |
626 if (rv == PP_OK_COMPLETIONPENDING) | 680 if (rv == PP_OK_COMPLETIONPENDING) |
627 rv = callback.WaitForResult(); | 681 rv = callback.WaitForResult(); |
628 if (rv != PP_OK && rv != PP_ERROR_FILENOTFOUND) | 682 if (rv != PP_OK && rv != PP_ERROR_FILENOTFOUND) |
629 return ReportError("FileRef::Delete", rv); | 683 return ReportError("FileRef::Delete", rv); |
630 | 684 |
631 rv = nonexistent_file_ref.Delete(callback); | 685 rv = nonexistent_file_ref.Delete(callback); |
| 686 if (force_async_ && rv != PP_OK_COMPLETIONPENDING) |
| 687 return ReportError("FileRef::Delete force_async failed", rv); |
632 if (rv == PP_OK_COMPLETIONPENDING) | 688 if (rv == PP_OK_COMPLETIONPENDING) |
633 rv = callback.WaitForResult(); | 689 rv = callback.WaitForResult(); |
634 if (rv != PP_OK && rv != PP_ERROR_FILENOTFOUND) | 690 if (rv != PP_OK && rv != PP_ERROR_FILENOTFOUND) |
635 return ReportError("FileRef::Delete", rv); | 691 return ReportError("FileRef::Delete", rv); |
636 | 692 |
637 pp::FileIO_Dev existent_file_io(instance_); | 693 pp::FileIO_Dev existent_file_io(instance_); |
638 rv = existent_file_io.Open(existent_file_ref, | 694 rv = existent_file_io.Open(existent_file_ref, |
639 PP_FILEOPENFLAG_CREATE | PP_FILEOPENFLAG_WRITE, | 695 PP_FILEOPENFLAG_CREATE | PP_FILEOPENFLAG_WRITE, |
640 callback); | 696 callback); |
| 697 if (force_async_ && rv != PP_OK_COMPLETIONPENDING) |
| 698 return ReportError("FileIO::Open force_async failed", rv); |
641 if (rv == PP_OK_COMPLETIONPENDING) | 699 if (rv == PP_OK_COMPLETIONPENDING) |
642 rv = callback.WaitForResult(); | 700 rv = callback.WaitForResult(); |
643 if (rv != PP_OK) | 701 if (rv != PP_OK) |
644 return ReportError("FileIO::Open", rv); | 702 return ReportError("FileIO::Open", rv); |
645 | 703 |
646 rv = WriteEntireBuffer(instance_->pp_instance(), &existent_file_io, 0, | 704 rv = WriteEntireBuffer(instance_->pp_instance(), &existent_file_io, 0, |
647 "foobar"); | 705 "foobar"); |
648 if (rv != PP_OK) | 706 if (rv != PP_OK) |
649 return ReportError("FileIO::Write", rv); | 707 return ReportError("FileIO::Write", rv); |
650 } | 708 } |
651 | 709 |
652 pp::FileIO_Dev existent_file_io(instance_); | 710 pp::FileIO_Dev existent_file_io(instance_); |
653 int32_t rv = existent_file_io.Open(existent_file_ref, open_flags, callback); | 711 int32_t rv = existent_file_io.Open(existent_file_ref, open_flags, callback); |
| 712 if (force_async_ && rv != PP_OK_COMPLETIONPENDING) |
| 713 return ReportError("FileIO::Open force_async failed", rv); |
654 if (rv == PP_OK_COMPLETIONPENDING) | 714 if (rv == PP_OK_COMPLETIONPENDING) |
655 rv = callback.WaitForResult(); | 715 rv = callback.WaitForResult(); |
656 if ((invalid_combination && rv == PP_OK) || | 716 if ((invalid_combination && rv == PP_OK) || |
657 (!invalid_combination && ((rv == PP_OK) != open_if_exists))) { | 717 (!invalid_combination && ((rv == PP_OK) != open_if_exists))) { |
658 return ReportOpenError(open_flags); | 718 return ReportOpenError(open_flags); |
659 } | 719 } |
660 | 720 |
661 if (!invalid_combination && open_if_exists) { | 721 if (!invalid_combination && open_if_exists) { |
662 PP_FileInfo_Dev info; | 722 PP_FileInfo_Dev info; |
663 rv = existent_file_io.Query(&info, callback); | 723 rv = existent_file_io.Query(&info, callback); |
| 724 if (force_async_ && rv != PP_OK_COMPLETIONPENDING) |
| 725 return ReportError("FileIO::Query force_async failed", rv); |
664 if (rv == PP_OK_COMPLETIONPENDING) | 726 if (rv == PP_OK_COMPLETIONPENDING) |
665 rv = callback.WaitForResult(); | 727 rv = callback.WaitForResult(); |
666 if (rv != PP_OK) | 728 if (rv != PP_OK) |
667 return ReportError("FileIO::Query", rv); | 729 return ReportError("FileIO::Query", rv); |
668 | 730 |
669 if (truncate_if_exists != (info.size == 0)) | 731 if (truncate_if_exists != (info.size == 0)) |
670 return ReportOpenError(open_flags); | 732 return ReportOpenError(open_flags); |
671 } | 733 } |
672 | 734 |
673 pp::FileIO_Dev nonexistent_file_io(instance_); | 735 pp::FileIO_Dev nonexistent_file_io(instance_); |
674 rv = nonexistent_file_io.Open(nonexistent_file_ref, open_flags, callback); | 736 rv = nonexistent_file_io.Open(nonexistent_file_ref, open_flags, callback); |
| 737 if (force_async_ && rv != PP_OK_COMPLETIONPENDING) |
| 738 return ReportError("FileIO::Open force_async failed", rv); |
675 if (rv == PP_OK_COMPLETIONPENDING) | 739 if (rv == PP_OK_COMPLETIONPENDING) |
676 rv = callback.WaitForResult(); | 740 rv = callback.WaitForResult(); |
677 if ((invalid_combination && rv == PP_OK) || | 741 if ((invalid_combination && rv == PP_OK) || |
678 (!invalid_combination && ((rv == PP_OK) != create_if_doesnt_exist))) { | 742 (!invalid_combination && ((rv == PP_OK) != create_if_doesnt_exist))) { |
679 return ReportOpenError(open_flags); | 743 return ReportOpenError(open_flags); |
680 } | 744 } |
681 | 745 |
682 return std::string(); | 746 return std::string(); |
683 } | 747 } |
684 | 748 |
685 // TODO(viettrungluu): Test Close(). crbug.com/69457 | 749 // TODO(viettrungluu): Test Close(). crbug.com/69457 |
OLD | NEW |