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

Side by Side Diff: ppapi/tests/test_file_io.cc

Issue 6899055: PPAPI: Force async callback invocation option. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 9 years, 6 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 | Annotate | Revision Log
OLDNEW
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
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
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698