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

Side by Side Diff: content/browser/service_worker/service_worker_cache_writer_unittest.cc

Issue 1704293002: ServiceWorker: Stop asynchronously creating response accessors to fix crash due to null context (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 10 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 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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 "content/browser/service_worker/service_worker_cache_writer.h" 5 #include "content/browser/service_worker/service_worker_cache_writer.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include <list> 9 #include <list>
10 #include <queue> 10 #include <queue>
(...skipping 296 matching lines...) Expand 10 before | Expand all | Expand 10 after
307 DCHECK(write.async); 307 DCHECK(write.async);
308 expected_writes_.pop(); 308 expected_writes_.pop();
309 pending_callback_.Run(write.result); 309 pending_callback_.Run(write.result);
310 } 310 }
311 311
312 class ServiceWorkerCacheWriterTest : public ::testing::Test { 312 class ServiceWorkerCacheWriterTest : public ::testing::Test {
313 public: 313 public:
314 ServiceWorkerCacheWriterTest() 314 ServiceWorkerCacheWriterTest()
315 : readers_deleter_(&readers_), writers_deleter_(&writers_) {} 315 : readers_deleter_(&readers_), writers_deleter_(&writers_) {}
316 316
317 void SetUp() override {
318 ::testing::Test::SetUp();
319 cache_writer_.reset(new ServiceWorkerCacheWriter(
320 base::Bind(&ServiceWorkerCacheWriterTest::CreateReader,
321 base::Unretained(this)),
322 base::Bind(&ServiceWorkerCacheWriterTest::CreateWriter,
323 base::Unretained(this))));
324 write_complete_ = false;
325 }
326
327 MockServiceWorkerResponseReader* ExpectReader() { 317 MockServiceWorkerResponseReader* ExpectReader() {
328 scoped_ptr<MockServiceWorkerResponseReader> reader( 318 scoped_ptr<MockServiceWorkerResponseReader> reader(
329 new MockServiceWorkerResponseReader); 319 new MockServiceWorkerResponseReader);
330 MockServiceWorkerResponseReader* borrowed_reader = reader.get(); 320 MockServiceWorkerResponseReader* borrowed_reader = reader.get();
331 readers_.push_back(reader.release()); // give ownership to |readers_| 321 readers_.push_back(reader.release()); // give ownership to |readers_|
332 return borrowed_reader; 322 return borrowed_reader;
333 } 323 }
334 324
335 MockServiceWorkerResponseWriter* ExpectWriter() { 325 MockServiceWorkerResponseWriter* ExpectWriter() {
336 scoped_ptr<MockServiceWorkerResponseWriter> writer( 326 scoped_ptr<MockServiceWorkerResponseWriter> writer(
337 new MockServiceWorkerResponseWriter); 327 new MockServiceWorkerResponseWriter);
338 MockServiceWorkerResponseWriter* borrowed_writer = writer.get(); 328 MockServiceWorkerResponseWriter* borrowed_writer = writer.get();
339 writers_.push_back(writer.release()); // give ownership to |writers_| 329 writers_.push_back(writer.release()); // give ownership to |writers_|
340 return borrowed_writer; 330 return borrowed_writer;
341 } 331 }
342 332
333 // This should be called after ExpectReader() and ExpectWriter().
334 void Initialize() {
335 cache_writer_.reset(new ServiceWorkerCacheWriter(
336 CreateReader(), CreateReader(), CreateWriter()));
337 }
338
343 protected: 339 protected:
344 // TODO(ellyjones): when unique_ptr<> is allowed, make these instead: 340 // TODO(ellyjones): when unique_ptr<> is allowed, make these instead:
345 // std::list<unique_ptr<...>> 341 // std::list<unique_ptr<...>>
346 // Right now, these cannot use scoped_ptr. 342 // Right now, these cannot use scoped_ptr.
347 // Their elements are deleted by the STLElementDeleters below when this object 343 // Their elements are deleted by the STLElementDeleters below when this object
348 // goes out of scope. 344 // goes out of scope.
349 std::list<MockServiceWorkerResponseReader*> readers_; 345 std::list<MockServiceWorkerResponseReader*> readers_;
350 std::list<MockServiceWorkerResponseWriter*> writers_; 346 std::list<MockServiceWorkerResponseWriter*> writers_;
351 STLElementDeleter<std::list<MockServiceWorkerResponseReader*>> 347 STLElementDeleter<std::list<MockServiceWorkerResponseReader*>>
352 readers_deleter_; 348 readers_deleter_;
353 STLElementDeleter<std::list<MockServiceWorkerResponseWriter*>> 349 STLElementDeleter<std::list<MockServiceWorkerResponseWriter*>>
354 writers_deleter_; 350 writers_deleter_;
355 scoped_ptr<ServiceWorkerCacheWriter> cache_writer_; 351 scoped_ptr<ServiceWorkerCacheWriter> cache_writer_;
356 bool write_complete_; 352 bool write_complete_ = false;
357 net::Error last_error_; 353 net::Error last_error_;
358 354
359 scoped_ptr<ServiceWorkerResponseReader> CreateReader() { 355 scoped_ptr<ServiceWorkerResponseReader> CreateReader() {
360 if (readers_.empty()) 356 if (readers_.empty())
361 return make_scoped_ptr<ServiceWorkerResponseReader>(nullptr); 357 return make_scoped_ptr<ServiceWorkerResponseReader>(nullptr);
362 scoped_ptr<ServiceWorkerResponseReader> reader(readers_.front()); 358 scoped_ptr<ServiceWorkerResponseReader> reader(readers_.front());
363 readers_.pop_front(); 359 readers_.pop_front();
364 return reader; 360 return reader;
365 } 361 }
366 scoped_ptr<ServiceWorkerResponseWriter> CreateWriter() { 362 scoped_ptr<ServiceWorkerResponseWriter> CreateWriter() {
(...skipping 30 matching lines...) Expand all
397 // Passthrough tests: 393 // Passthrough tests:
398 // In these tests, the ServiceWorkerCacheWriter under test has no existing 394 // In these tests, the ServiceWorkerCacheWriter under test has no existing
399 // reader, since no calls to ExpectReader() have been made; this means that 395 // reader, since no calls to ExpectReader() have been made; this means that
400 // there is no existing cached response and the incoming data is written back to 396 // there is no existing cached response and the incoming data is written back to
401 // the cache directly. 397 // the cache directly.
402 398
403 TEST_F(ServiceWorkerCacheWriterTest, PassthroughHeadersSync) { 399 TEST_F(ServiceWorkerCacheWriterTest, PassthroughHeadersSync) {
404 const size_t kHeaderSize = 16; 400 const size_t kHeaderSize = 16;
405 MockServiceWorkerResponseWriter* writer = ExpectWriter(); 401 MockServiceWorkerResponseWriter* writer = ExpectWriter();
406 writer->ExpectWriteInfoOk(kHeaderSize, false); 402 writer->ExpectWriteInfoOk(kHeaderSize, false);
403 Initialize();
407 404
408 net::Error error = WriteHeaders(kHeaderSize); 405 net::Error error = WriteHeaders(kHeaderSize);
409 EXPECT_EQ(net::OK, error); 406 EXPECT_EQ(net::OK, error);
410 EXPECT_FALSE(write_complete_); 407 EXPECT_FALSE(write_complete_);
411 EXPECT_TRUE(writer->AllExpectedWritesDone()); 408 EXPECT_TRUE(writer->AllExpectedWritesDone());
412 EXPECT_EQ(0U, cache_writer_->bytes_written()); 409 EXPECT_EQ(0U, cache_writer_->bytes_written());
413 } 410 }
414 411
415 TEST_F(ServiceWorkerCacheWriterTest, PassthroughHeadersAsync) { 412 TEST_F(ServiceWorkerCacheWriterTest, PassthroughHeadersAsync) {
416 size_t kHeaderSize = 16; 413 size_t kHeaderSize = 16;
417 MockServiceWorkerResponseWriter* writer = ExpectWriter(); 414 MockServiceWorkerResponseWriter* writer = ExpectWriter();
418 writer->ExpectWriteInfoOk(kHeaderSize, true); 415 writer->ExpectWriteInfoOk(kHeaderSize, true);
416 Initialize();
419 417
420 net::Error error = WriteHeaders(kHeaderSize); 418 net::Error error = WriteHeaders(kHeaderSize);
421 EXPECT_EQ(net::ERR_IO_PENDING, error); 419 EXPECT_EQ(net::ERR_IO_PENDING, error);
422 EXPECT_FALSE(write_complete_); 420 EXPECT_FALSE(write_complete_);
423 writer->CompletePendingWrite(); 421 writer->CompletePendingWrite();
424 EXPECT_TRUE(write_complete_); 422 EXPECT_TRUE(write_complete_);
425 EXPECT_EQ(net::OK, last_error_); 423 EXPECT_EQ(net::OK, last_error_);
426 EXPECT_TRUE(writer->AllExpectedWritesDone()); 424 EXPECT_TRUE(writer->AllExpectedWritesDone());
427 EXPECT_EQ(0U, cache_writer_->bytes_written()); 425 EXPECT_EQ(0U, cache_writer_->bytes_written());
428 } 426 }
429 427
430 TEST_F(ServiceWorkerCacheWriterTest, PassthroughDataSync) { 428 TEST_F(ServiceWorkerCacheWriterTest, PassthroughDataSync) {
431 const std::string data1 = "abcdef"; 429 const std::string data1 = "abcdef";
432 const std::string data2 = "ghijklmno"; 430 const std::string data2 = "ghijklmno";
433 size_t response_size = data1.size() + data2.size(); 431 size_t response_size = data1.size() + data2.size();
434 432
435 MockServiceWorkerResponseWriter* writer = ExpectWriter(); 433 MockServiceWorkerResponseWriter* writer = ExpectWriter();
436 writer->ExpectWriteInfoOk(response_size, false); 434 writer->ExpectWriteInfoOk(response_size, false);
437 writer->ExpectWriteDataOk(data1.size(), false); 435 writer->ExpectWriteDataOk(data1.size(), false);
438 writer->ExpectWriteDataOk(data2.size(), false); 436 writer->ExpectWriteDataOk(data2.size(), false);
437 Initialize();
439 438
440 net::Error error = WriteHeaders(response_size); 439 net::Error error = WriteHeaders(response_size);
441 EXPECT_EQ(net::OK, error); 440 EXPECT_EQ(net::OK, error);
442 441
443 error = WriteData(data1); 442 error = WriteData(data1);
444 EXPECT_EQ(net::OK, error); 443 EXPECT_EQ(net::OK, error);
445 444
446 error = WriteData(data2); 445 error = WriteData(data2);
447 EXPECT_EQ(net::OK, error); 446 EXPECT_EQ(net::OK, error);
448 EXPECT_TRUE(writer->AllExpectedWritesDone()); 447 EXPECT_TRUE(writer->AllExpectedWritesDone());
449 } 448 }
450 449
451 TEST_F(ServiceWorkerCacheWriterTest, PassthroughDataAsync) { 450 TEST_F(ServiceWorkerCacheWriterTest, PassthroughDataAsync) {
452 const std::string data1 = "abcdef"; 451 const std::string data1 = "abcdef";
453 const std::string data2 = "ghijklmno"; 452 const std::string data2 = "ghijklmno";
454 size_t response_size = data1.size() + data2.size(); 453 size_t response_size = data1.size() + data2.size();
455 454
456 MockServiceWorkerResponseWriter* writer = ExpectWriter(); 455 MockServiceWorkerResponseWriter* writer = ExpectWriter();
457 writer->ExpectWriteInfoOk(response_size, false); 456 writer->ExpectWriteInfoOk(response_size, false);
458 writer->ExpectWriteDataOk(data1.size(), true); 457 writer->ExpectWriteDataOk(data1.size(), true);
459 writer->ExpectWriteDataOk(data2.size(), true); 458 writer->ExpectWriteDataOk(data2.size(), true);
459 Initialize();
460 460
461 net::Error error = WriteHeaders(response_size); 461 net::Error error = WriteHeaders(response_size);
462 EXPECT_EQ(net::OK, error); 462 EXPECT_EQ(net::OK, error);
463 463
464 error = WriteData(data1); 464 error = WriteData(data1);
465 EXPECT_EQ(net::ERR_IO_PENDING, error); 465 EXPECT_EQ(net::ERR_IO_PENDING, error);
466 writer->CompletePendingWrite(); 466 writer->CompletePendingWrite();
467 EXPECT_TRUE(write_complete_); 467 EXPECT_TRUE(write_complete_);
468 468
469 write_complete_ = false; 469 write_complete_ = false;
470 error = WriteData(data2); 470 error = WriteData(data2);
471 EXPECT_EQ(net::ERR_IO_PENDING, error); 471 EXPECT_EQ(net::ERR_IO_PENDING, error);
472 writer->CompletePendingWrite(); 472 writer->CompletePendingWrite();
473 EXPECT_TRUE(write_complete_); 473 EXPECT_TRUE(write_complete_);
474 EXPECT_EQ(net::OK, last_error_); 474 EXPECT_EQ(net::OK, last_error_);
475 EXPECT_TRUE(writer->AllExpectedWritesDone()); 475 EXPECT_TRUE(writer->AllExpectedWritesDone());
476 } 476 }
477 477
478 TEST_F(ServiceWorkerCacheWriterTest, PassthroughHeadersFailSync) { 478 TEST_F(ServiceWorkerCacheWriterTest, PassthroughHeadersFailSync) {
479 const size_t kHeaderSize = 16; 479 const size_t kHeaderSize = 16;
480 MockServiceWorkerResponseWriter* writer = ExpectWriter(); 480 MockServiceWorkerResponseWriter* writer = ExpectWriter();
481 writer->ExpectWriteInfo(kHeaderSize, false, net::ERR_FAILED); 481 writer->ExpectWriteInfo(kHeaderSize, false, net::ERR_FAILED);
482 Initialize();
482 483
483 net::Error error = WriteHeaders(kHeaderSize); 484 net::Error error = WriteHeaders(kHeaderSize);
484 EXPECT_EQ(net::ERR_FAILED, error); 485 EXPECT_EQ(net::ERR_FAILED, error);
485 EXPECT_FALSE(write_complete_); 486 EXPECT_FALSE(write_complete_);
486 EXPECT_TRUE(writer->AllExpectedWritesDone()); 487 EXPECT_TRUE(writer->AllExpectedWritesDone());
487 EXPECT_EQ(0U, cache_writer_->bytes_written()); 488 EXPECT_EQ(0U, cache_writer_->bytes_written());
488 } 489 }
489 490
490 TEST_F(ServiceWorkerCacheWriterTest, PassthroughHeadersFailAsync) { 491 TEST_F(ServiceWorkerCacheWriterTest, PassthroughHeadersFailAsync) {
491 size_t kHeaderSize = 16; 492 size_t kHeaderSize = 16;
492 MockServiceWorkerResponseWriter* writer = ExpectWriter(); 493 MockServiceWorkerResponseWriter* writer = ExpectWriter();
493 writer->ExpectWriteInfo(kHeaderSize, true, net::ERR_FAILED); 494 writer->ExpectWriteInfo(kHeaderSize, true, net::ERR_FAILED);
495 Initialize();
494 496
495 net::Error error = WriteHeaders(kHeaderSize); 497 net::Error error = WriteHeaders(kHeaderSize);
496 EXPECT_EQ(net::ERR_IO_PENDING, error); 498 EXPECT_EQ(net::ERR_IO_PENDING, error);
497 EXPECT_FALSE(write_complete_); 499 EXPECT_FALSE(write_complete_);
498 writer->CompletePendingWrite(); 500 writer->CompletePendingWrite();
499 EXPECT_TRUE(write_complete_); 501 EXPECT_TRUE(write_complete_);
500 EXPECT_EQ(net::ERR_FAILED, last_error_); 502 EXPECT_EQ(net::ERR_FAILED, last_error_);
501 EXPECT_TRUE(writer->AllExpectedWritesDone()); 503 EXPECT_TRUE(writer->AllExpectedWritesDone());
502 EXPECT_EQ(0U, cache_writer_->bytes_written()); 504 EXPECT_EQ(0U, cache_writer_->bytes_written());
503 } 505 }
504 506
505 TEST_F(ServiceWorkerCacheWriterTest, PassthroughDataFailSync) { 507 TEST_F(ServiceWorkerCacheWriterTest, PassthroughDataFailSync) {
506 const std::string data = "abcdef"; 508 const std::string data = "abcdef";
507 509
508 MockServiceWorkerResponseWriter* writer = ExpectWriter(); 510 MockServiceWorkerResponseWriter* writer = ExpectWriter();
509 writer->ExpectWriteInfoOk(data.size(), false); 511 writer->ExpectWriteInfoOk(data.size(), false);
510 writer->ExpectWriteData(data.size(), false, net::ERR_FAILED); 512 writer->ExpectWriteData(data.size(), false, net::ERR_FAILED);
513 Initialize();
511 514
512 EXPECT_EQ(net::OK, WriteHeaders(data.size())); 515 EXPECT_EQ(net::OK, WriteHeaders(data.size()));
513 EXPECT_EQ(net::ERR_FAILED, WriteData(data)); 516 EXPECT_EQ(net::ERR_FAILED, WriteData(data));
514 EXPECT_TRUE(writer->AllExpectedWritesDone()); 517 EXPECT_TRUE(writer->AllExpectedWritesDone());
515 } 518 }
516 519
517 TEST_F(ServiceWorkerCacheWriterTest, PassthroughDataFailAsync) { 520 TEST_F(ServiceWorkerCacheWriterTest, PassthroughDataFailAsync) {
518 const std::string data = "abcdef"; 521 const std::string data = "abcdef";
519 522
520 MockServiceWorkerResponseWriter* writer = ExpectWriter(); 523 MockServiceWorkerResponseWriter* writer = ExpectWriter();
521 writer->ExpectWriteInfoOk(data.size(), false); 524 writer->ExpectWriteInfoOk(data.size(), false);
522 writer->ExpectWriteData(data.size(), true, net::ERR_FAILED); 525 writer->ExpectWriteData(data.size(), true, net::ERR_FAILED);
526 Initialize();
523 527
524 EXPECT_EQ(net::OK, WriteHeaders(data.size())); 528 EXPECT_EQ(net::OK, WriteHeaders(data.size()));
525 529
526 EXPECT_EQ(net::ERR_IO_PENDING, WriteData(data)); 530 EXPECT_EQ(net::ERR_IO_PENDING, WriteData(data));
527 writer->CompletePendingWrite(); 531 writer->CompletePendingWrite();
528 EXPECT_EQ(net::ERR_FAILED, last_error_); 532 EXPECT_EQ(net::ERR_FAILED, last_error_);
529 EXPECT_TRUE(write_complete_); 533 EXPECT_TRUE(write_complete_);
530 EXPECT_TRUE(writer->AllExpectedWritesDone()); 534 EXPECT_TRUE(writer->AllExpectedWritesDone());
531 } 535 }
532 536
533 // Comparison tests: 537 // Comparison tests:
534 // For the Compare* tests below, the ServiceWorkerCacheWriter under test has a 538 // For the Compare* tests below, the ServiceWorkerCacheWriter under test has a
535 // reader for an existing cached response, so it will compare the response being 539 // reader for an existing cached response, so it will compare the response being
536 // written to it against the existing cached response. 540 // written to it against the existing cached response.
537 541
538 TEST_F(ServiceWorkerCacheWriterTest, CompareHeadersSync) { 542 TEST_F(ServiceWorkerCacheWriterTest, CompareHeadersSync) {
539 size_t response_size = 3; 543 size_t response_size = 3;
540 MockServiceWorkerResponseWriter* writer = ExpectWriter(); 544 MockServiceWorkerResponseWriter* writer = ExpectWriter();
541 MockServiceWorkerResponseReader* reader = ExpectReader(); 545 MockServiceWorkerResponseReader* reader = ExpectReader();
542 546
543 reader->ExpectReadInfoOk(response_size, false); 547 reader->ExpectReadInfoOk(response_size, false);
548 Initialize();
544 549
545 net::Error error = WriteHeaders(response_size); 550 net::Error error = WriteHeaders(response_size);
546 EXPECT_EQ(net::OK, error); 551 EXPECT_EQ(net::OK, error);
547 EXPECT_TRUE(writer->AllExpectedWritesDone()); 552 EXPECT_TRUE(writer->AllExpectedWritesDone());
548 EXPECT_TRUE(reader->AllExpectedReadsDone()); 553 EXPECT_TRUE(reader->AllExpectedReadsDone());
549 } 554 }
550 555
551 TEST_F(ServiceWorkerCacheWriterTest, CompareDataOkSync) { 556 TEST_F(ServiceWorkerCacheWriterTest, CompareDataOkSync) {
552 const std::string data1 = "abcdef"; 557 const std::string data1 = "abcdef";
553 size_t response_size = data1.size(); 558 size_t response_size = data1.size();
554 559
555 MockServiceWorkerResponseWriter* writer = ExpectWriter(); 560 MockServiceWorkerResponseWriter* writer = ExpectWriter();
556 MockServiceWorkerResponseReader* reader = ExpectReader(); 561 MockServiceWorkerResponseReader* reader = ExpectReader();
557 562
558 reader->ExpectReadInfoOk(response_size, false); 563 reader->ExpectReadInfoOk(response_size, false);
559 reader->ExpectReadDataOk(data1, false); 564 reader->ExpectReadDataOk(data1, false);
565 Initialize();
560 566
561 net::Error error = WriteHeaders(response_size); 567 net::Error error = WriteHeaders(response_size);
562 EXPECT_EQ(net::OK, error); 568 EXPECT_EQ(net::OK, error);
563 569
564 error = WriteData(data1); 570 error = WriteData(data1);
565 EXPECT_EQ(net::OK, error); 571 EXPECT_EQ(net::OK, error);
566 572
567 EXPECT_TRUE(writer->AllExpectedWritesDone()); 573 EXPECT_TRUE(writer->AllExpectedWritesDone());
568 EXPECT_TRUE(reader->AllExpectedReadsDone()); 574 EXPECT_TRUE(reader->AllExpectedReadsDone());
569 EXPECT_EQ(0U, cache_writer_->bytes_written()); 575 EXPECT_EQ(0U, cache_writer_->bytes_written());
570 } 576 }
571 577
572 TEST_F(ServiceWorkerCacheWriterTest, CompareHeadersFailSync) { 578 TEST_F(ServiceWorkerCacheWriterTest, CompareHeadersFailSync) {
573 size_t response_size = 3; 579 size_t response_size = 3;
574 MockServiceWorkerResponseWriter* writer = ExpectWriter(); 580 MockServiceWorkerResponseWriter* writer = ExpectWriter();
575 MockServiceWorkerResponseReader* reader = ExpectReader(); 581 MockServiceWorkerResponseReader* reader = ExpectReader();
576 582
577 reader->ExpectReadInfo(response_size, false, net::ERR_FAILED); 583 reader->ExpectReadInfo(response_size, false, net::ERR_FAILED);
584 Initialize();
578 585
579 EXPECT_EQ(net::ERR_FAILED, WriteHeaders(response_size)); 586 EXPECT_EQ(net::ERR_FAILED, WriteHeaders(response_size));
580 EXPECT_TRUE(writer->AllExpectedWritesDone()); 587 EXPECT_TRUE(writer->AllExpectedWritesDone());
581 EXPECT_TRUE(reader->AllExpectedReadsDone()); 588 EXPECT_TRUE(reader->AllExpectedReadsDone());
582 } 589 }
583 590
584 TEST_F(ServiceWorkerCacheWriterTest, CompareDataFailSync) { 591 TEST_F(ServiceWorkerCacheWriterTest, CompareDataFailSync) {
585 const std::string data1 = "abcdef"; 592 const std::string data1 = "abcdef";
586 size_t response_size = data1.size(); 593 size_t response_size = data1.size();
587 594
588 MockServiceWorkerResponseWriter* writer = ExpectWriter(); 595 MockServiceWorkerResponseWriter* writer = ExpectWriter();
589 MockServiceWorkerResponseReader* reader = ExpectReader(); 596 MockServiceWorkerResponseReader* reader = ExpectReader();
590 597
591 reader->ExpectReadInfoOk(response_size, false); 598 reader->ExpectReadInfoOk(response_size, false);
592 reader->ExpectReadData(data1.c_str(), data1.length(), false, net::ERR_FAILED); 599 reader->ExpectReadData(data1.c_str(), data1.length(), false, net::ERR_FAILED);
600 Initialize();
593 601
594 net::Error error = WriteHeaders(response_size); 602 net::Error error = WriteHeaders(response_size);
595 EXPECT_EQ(net::OK, error); 603 EXPECT_EQ(net::OK, error);
596 604
597 EXPECT_EQ(net::ERR_FAILED, WriteData(data1)); 605 EXPECT_EQ(net::ERR_FAILED, WriteData(data1));
598 606
599 EXPECT_TRUE(writer->AllExpectedWritesDone()); 607 EXPECT_TRUE(writer->AllExpectedWritesDone());
600 EXPECT_TRUE(reader->AllExpectedReadsDone()); 608 EXPECT_TRUE(reader->AllExpectedReadsDone());
601 EXPECT_EQ(0U, cache_writer_->bytes_written()); 609 EXPECT_EQ(0U, cache_writer_->bytes_written());
602 } 610 }
603 611
604 TEST_F(ServiceWorkerCacheWriterTest, CompareShortCacheReads) { 612 TEST_F(ServiceWorkerCacheWriterTest, CompareShortCacheReads) {
605 const size_t kHeaderSize = 16; 613 const size_t kHeaderSize = 16;
606 const std::string& data1 = "abcdef"; 614 const std::string& data1 = "abcdef";
607 const std::string& cache_data2 = "ghi"; 615 const std::string& cache_data2 = "ghi";
608 const std::string& cache_data3 = "j"; 616 const std::string& cache_data3 = "j";
609 const std::string& cache_data4 = "kl"; 617 const std::string& cache_data4 = "kl";
610 const std::string& net_data2 = "ghijkl"; 618 const std::string& net_data2 = "ghijkl";
611 const std::string& data5 = "mnopqrst"; 619 const std::string& data5 = "mnopqrst";
612 620
613 MockServiceWorkerResponseReader* reader = ExpectReader(); 621 MockServiceWorkerResponseReader* reader = ExpectReader();
614 reader->ExpectReadInfo(kHeaderSize, false, kHeaderSize); 622 reader->ExpectReadInfo(kHeaderSize, false, kHeaderSize);
615 reader->ExpectReadDataOk(data1, false); 623 reader->ExpectReadDataOk(data1, false);
616 reader->ExpectReadDataOk(cache_data2, false); 624 reader->ExpectReadDataOk(cache_data2, false);
617 reader->ExpectReadDataOk(cache_data3, false); 625 reader->ExpectReadDataOk(cache_data3, false);
618 reader->ExpectReadDataOk(cache_data4, false); 626 reader->ExpectReadDataOk(cache_data4, false);
619 reader->ExpectReadDataOk(data5, false); 627 reader->ExpectReadDataOk(data5, false);
628 Initialize();
620 629
621 net::Error error = WriteHeaders(kHeaderSize); 630 net::Error error = WriteHeaders(kHeaderSize);
622 EXPECT_EQ(net::OK, error); 631 EXPECT_EQ(net::OK, error);
623 error = WriteData(data1); 632 error = WriteData(data1);
624 EXPECT_EQ(net::OK, error); 633 EXPECT_EQ(net::OK, error);
625 error = WriteData(net_data2); 634 error = WriteData(net_data2);
626 EXPECT_EQ(net::OK, error); 635 EXPECT_EQ(net::OK, error);
627 error = WriteData(data5); 636 error = WriteData(data5);
628 EXPECT_EQ(net::OK, error); 637 EXPECT_EQ(net::OK, error);
629 EXPECT_TRUE(reader->AllExpectedReadsDone()); 638 EXPECT_TRUE(reader->AllExpectedReadsDone());
630 EXPECT_EQ(0U, cache_writer_->bytes_written()); 639 EXPECT_EQ(0U, cache_writer_->bytes_written());
631 } 640 }
632 641
633 TEST_F(ServiceWorkerCacheWriterTest, CompareDataOkAsync) { 642 TEST_F(ServiceWorkerCacheWriterTest, CompareDataOkAsync) {
634 const std::string data1 = "abcdef"; 643 const std::string data1 = "abcdef";
635 size_t response_size = data1.size(); 644 size_t response_size = data1.size();
636 645
637 MockServiceWorkerResponseReader* reader = ExpectReader(); 646 MockServiceWorkerResponseReader* reader = ExpectReader();
638 647
639 reader->ExpectReadInfoOk(response_size, true); 648 reader->ExpectReadInfoOk(response_size, true);
640 reader->ExpectReadDataOk(data1, true); 649 reader->ExpectReadDataOk(data1, true);
650 Initialize();
641 651
642 net::Error error = WriteHeaders(response_size); 652 net::Error error = WriteHeaders(response_size);
643 EXPECT_EQ(net::ERR_IO_PENDING, error); 653 EXPECT_EQ(net::ERR_IO_PENDING, error);
644 reader->CompletePendingRead(); 654 reader->CompletePendingRead();
645 655
646 error = WriteData(data1); 656 error = WriteData(data1);
647 EXPECT_EQ(net::ERR_IO_PENDING, error); 657 EXPECT_EQ(net::ERR_IO_PENDING, error);
648 reader->CompletePendingRead(); 658 reader->CompletePendingRead();
649 659
650 EXPECT_TRUE(reader->AllExpectedReadsDone()); 660 EXPECT_TRUE(reader->AllExpectedReadsDone());
651 EXPECT_EQ(0U, cache_writer_->bytes_written()); 661 EXPECT_EQ(0U, cache_writer_->bytes_written());
652 } 662 }
653 663
654 TEST_F(ServiceWorkerCacheWriterTest, CompareDataManyOkAsync) { 664 TEST_F(ServiceWorkerCacheWriterTest, CompareDataManyOkAsync) {
655 const std::string expected_data[] = { 665 const std::string expected_data[] = {
656 "abcdef", "ghijkl", "mnopqr", "stuvwxyz", 666 "abcdef", "ghijkl", "mnopqr", "stuvwxyz",
657 }; 667 };
658 size_t response_size = 0; 668 size_t response_size = 0;
659 for (size_t i = 0; i < arraysize(expected_data); ++i) 669 for (size_t i = 0; i < arraysize(expected_data); ++i)
660 response_size += expected_data[i].size(); 670 response_size += expected_data[i].size();
661 671
662 MockServiceWorkerResponseReader* reader = ExpectReader(); 672 MockServiceWorkerResponseReader* reader = ExpectReader();
663 673
664 reader->ExpectReadInfoOk(response_size, true); 674 reader->ExpectReadInfoOk(response_size, true);
665 for (size_t i = 0; i < arraysize(expected_data); ++i) { 675 for (size_t i = 0; i < arraysize(expected_data); ++i) {
666 reader->ExpectReadDataOk(expected_data[i], true); 676 reader->ExpectReadDataOk(expected_data[i], true);
667 } 677 }
678 Initialize();
668 679
669 net::Error error = WriteHeaders(response_size); 680 net::Error error = WriteHeaders(response_size);
670 EXPECT_EQ(net::ERR_IO_PENDING, error); 681 EXPECT_EQ(net::ERR_IO_PENDING, error);
671 reader->CompletePendingRead(); 682 reader->CompletePendingRead();
672 683
673 for (size_t i = 0; i < arraysize(expected_data); ++i) { 684 for (size_t i = 0; i < arraysize(expected_data); ++i) {
674 error = WriteData(expected_data[i]); 685 error = WriteData(expected_data[i]);
675 EXPECT_EQ(net::ERR_IO_PENDING, error); 686 EXPECT_EQ(net::ERR_IO_PENDING, error);
676 reader->CompletePendingRead(); 687 reader->CompletePendingRead();
677 EXPECT_EQ(net::OK, last_error_); 688 EXPECT_EQ(net::OK, last_error_);
(...skipping 24 matching lines...) Expand all
702 compare_reader->ExpectReadDataOk(cache_data2, false); 713 compare_reader->ExpectReadDataOk(cache_data2, false);
703 714
704 copy_reader->ExpectReadInfoOk(cache_response_size, false); 715 copy_reader->ExpectReadInfoOk(cache_response_size, false);
705 copy_reader->ExpectReadDataOk(data1, false); 716 copy_reader->ExpectReadDataOk(data1, false);
706 717
707 writer->ExpectWriteInfoOk(net_response_size, false); 718 writer->ExpectWriteInfoOk(net_response_size, false);
708 writer->ExpectWriteDataOk(data1.size(), false); 719 writer->ExpectWriteDataOk(data1.size(), false);
709 writer->ExpectWriteDataOk(net_data2.size(), false); 720 writer->ExpectWriteDataOk(net_data2.size(), false);
710 writer->ExpectWriteDataOk(data3.size(), false); 721 writer->ExpectWriteDataOk(data3.size(), false);
711 722
723 Initialize();
724
712 net::Error error = WriteHeaders(net_response_size); 725 net::Error error = WriteHeaders(net_response_size);
713 EXPECT_EQ(net::OK, error); 726 EXPECT_EQ(net::OK, error);
714 error = WriteData(data1); 727 error = WriteData(data1);
715 EXPECT_EQ(net::OK, error); 728 EXPECT_EQ(net::OK, error);
716 error = WriteData(net_data2); 729 error = WriteData(net_data2);
717 EXPECT_EQ(net::OK, error); 730 EXPECT_EQ(net::OK, error);
718 error = WriteData(data3); 731 error = WriteData(data3);
719 EXPECT_EQ(net::OK, error); 732 EXPECT_EQ(net::OK, error);
720 733
721 EXPECT_TRUE(writer->AllExpectedWritesDone()); 734 EXPECT_TRUE(writer->AllExpectedWritesDone());
(...skipping 20 matching lines...) Expand all
742 compare_reader->ExpectReadDataOk("", false); // EOF read 755 compare_reader->ExpectReadDataOk("", false); // EOF read
743 756
744 copy_reader->ExpectReadInfoOk(cache_response_size, false); 757 copy_reader->ExpectReadInfoOk(cache_response_size, false);
745 copy_reader->ExpectReadDataOk(data1, false); 758 copy_reader->ExpectReadDataOk(data1, false);
746 759
747 writer->ExpectWriteInfoOk(net_response_size, false); 760 writer->ExpectWriteInfoOk(net_response_size, false);
748 writer->ExpectWriteDataOk(data1.size(), false); 761 writer->ExpectWriteDataOk(data1.size(), false);
749 writer->ExpectWriteDataOk(net_data2.size(), false); 762 writer->ExpectWriteDataOk(net_data2.size(), false);
750 writer->ExpectWriteDataOk(data3.size(), false); 763 writer->ExpectWriteDataOk(data3.size(), false);
751 764
765 Initialize();
766
752 net::Error error = WriteHeaders(net_response_size); 767 net::Error error = WriteHeaders(net_response_size);
753 EXPECT_EQ(net::OK, error); 768 EXPECT_EQ(net::OK, error);
754 error = WriteData(data1); 769 error = WriteData(data1);
755 EXPECT_EQ(net::OK, error); 770 EXPECT_EQ(net::OK, error);
756 error = WriteData(net_data2); 771 error = WriteData(net_data2);
757 EXPECT_EQ(net::OK, error); 772 EXPECT_EQ(net::OK, error);
758 error = WriteData(data3); 773 error = WriteData(data3);
759 EXPECT_EQ(net::OK, error); 774 EXPECT_EQ(net::OK, error);
760 775
761 EXPECT_TRUE(writer->AllExpectedWritesDone()); 776 EXPECT_TRUE(writer->AllExpectedWritesDone());
(...skipping 22 matching lines...) Expand all
784 // writer realizes the two responses are different sizes, and then the network 799 // writer realizes the two responses are different sizes, and then the network
785 // data should be written back starting with |net_data2|. 800 // data should be written back starting with |net_data2|.
786 copy_reader->ExpectReadInfoOk(cached_size, false); 801 copy_reader->ExpectReadInfoOk(cached_size, false);
787 copy_reader->ExpectReadDataOk(data1, false); 802 copy_reader->ExpectReadDataOk(data1, false);
788 copy_reader->ExpectReadDataOk(net_data2, false); 803 copy_reader->ExpectReadDataOk(net_data2, false);
789 804
790 writer->ExpectWriteInfoOk(net_size, false); 805 writer->ExpectWriteInfoOk(net_size, false);
791 writer->ExpectWriteDataOk(data1.size(), false); 806 writer->ExpectWriteDataOk(data1.size(), false);
792 writer->ExpectWriteDataOk(net_data2.size(), false); 807 writer->ExpectWriteDataOk(net_data2.size(), false);
793 808
809 Initialize();
810
794 net::Error error = WriteHeaders(net_size); 811 net::Error error = WriteHeaders(net_size);
795 EXPECT_EQ(net::OK, error); 812 EXPECT_EQ(net::OK, error);
796 error = WriteData(data1); 813 error = WriteData(data1);
797 EXPECT_EQ(net::OK, error); 814 EXPECT_EQ(net::OK, error);
798 error = WriteData(net_data2); 815 error = WriteData(net_data2);
799 EXPECT_EQ(net::OK, error); 816 EXPECT_EQ(net::OK, error);
800 error = WriteData(""); 817 error = WriteData("");
801 EXPECT_EQ(net::OK, error); 818 EXPECT_EQ(net::OK, error);
802 819
803 EXPECT_TRUE(writer->AllExpectedWritesDone()); 820 EXPECT_TRUE(writer->AllExpectedWritesDone());
804 EXPECT_TRUE(compare_reader->AllExpectedReadsDone()); 821 EXPECT_TRUE(compare_reader->AllExpectedReadsDone());
805 EXPECT_TRUE(copy_reader->AllExpectedReadsDone()); 822 EXPECT_TRUE(copy_reader->AllExpectedReadsDone());
806 } 823 }
807 824
808 } // namespace 825 } // namespace
809 } // namespace content 826 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698