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

Side by Side Diff: net/socket/socket_test_util.cc

Issue 1124533002: Add CompleteRead to SequencedSocketData and convert all but 3 tests (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase Created 5 years, 7 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
« no previous file with comments | « net/socket/socket_test_util.h ('k') | net/spdy/spdy_network_transaction_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "net/socket/socket_test_util.h" 5 #include "net/socket/socket_test_util.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/basictypes.h" 10 #include "base/basictypes.h"
(...skipping 506 matching lines...) Expand 10 before | Expand all | Expand 10 after
517 517
518 MockRead SequencedSocketData::OnRead() { 518 MockRead SequencedSocketData::OnRead() {
519 CHECK_EQ(IDLE, read_state_); 519 CHECK_EQ(IDLE, read_state_);
520 CHECK(!helper_.at_read_eof()); 520 CHECK(!helper_.at_read_eof());
521 521
522 NET_TRACE(1, " *** ") << "sequence_number: " << sequence_number_; 522 NET_TRACE(1, " *** ") << "sequence_number: " << sequence_number_;
523 const MockRead& next_read = helper_.PeekRead(); 523 const MockRead& next_read = helper_.PeekRead();
524 NET_TRACE(1, " *** ") << "next_read: " << next_read.sequence_number; 524 NET_TRACE(1, " *** ") << "next_read: " << next_read.sequence_number;
525 CHECK_GE(next_read.sequence_number, sequence_number_); 525 CHECK_GE(next_read.sequence_number, sequence_number_);
526 526
527 // Special case handling for hanging reads.
528 if (next_read.mode == ASYNC && next_read.result == ERR_IO_PENDING) {
529 NET_TRACE(1, " *** ") << "Hanging read";
530 helper_.AdvanceRead();
531 ++sequence_number_;
532 CHECK(helper_.at_read_eof());
533 return MockRead(SYNCHRONOUS, ERR_IO_PENDING);
534 }
535
536 if (next_read.sequence_number <= sequence_number_) { 527 if (next_read.sequence_number <= sequence_number_) {
537 if (next_read.mode == SYNCHRONOUS) { 528 if (next_read.mode == SYNCHRONOUS) {
538 NET_TRACE(1, " *** ") << "Returning synchronously"; 529 NET_TRACE(1, " *** ") << "Returning synchronously";
539 DumpMockReadWrite(next_read); 530 DumpMockReadWrite(next_read);
540 helper_.AdvanceRead(); 531 helper_.AdvanceRead();
541 ++sequence_number_; 532 ++sequence_number_;
542 MaybePostWriteCompleteTask(); 533 MaybePostWriteCompleteTask();
543 return next_read; 534 return next_read;
544 } 535 }
545 536
537 // If the result is ERR_IO_PENDING, then advance to the next state
538 // and pause reads.
539 if (next_read.result == ERR_IO_PENDING) {
540 NET_TRACE(1, " *** ") << "Pausing at: " << sequence_number_;
541 ++sequence_number_;
542 helper_.AdvanceRead();
543 read_state_ = PAUSED;
544 return MockRead(SYNCHRONOUS, ERR_IO_PENDING);
545 }
546 base::MessageLoop::current()->PostTask( 546 base::MessageLoop::current()->PostTask(
547 FROM_HERE, base::Bind(&SequencedSocketData::OnReadComplete, 547 FROM_HERE, base::Bind(&SequencedSocketData::OnReadComplete,
548 weak_factory_.GetWeakPtr())); 548 weak_factory_.GetWeakPtr()));
549 CHECK_NE(COMPLETING, write_state_); 549 CHECK_NE(COMPLETING, write_state_);
550 read_state_ = COMPLETING; 550 read_state_ = COMPLETING;
551 } else if (next_read.mode == SYNCHRONOUS) { 551 } else if (next_read.mode == SYNCHRONOUS) {
552 ADD_FAILURE() << "Unable to perform synchronous IO while stopped"; 552 ADD_FAILURE() << "Unable to perform synchronous IO while stopped";
553 return MockRead(SYNCHRONOUS, ERR_UNEXPECTED); 553 return MockRead(SYNCHRONOUS, ERR_UNEXPECTED);
554 } else { 554 } else {
555 NET_TRACE(1, " *** ") << "Waiting for write to trigger read"; 555 NET_TRACE(1, " *** ") << "Waiting for write to trigger read";
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
618 } 618 }
619 619
620 bool SequencedSocketData::at_read_eof() const { 620 bool SequencedSocketData::at_read_eof() const {
621 return helper_.at_read_eof(); 621 return helper_.at_read_eof();
622 } 622 }
623 623
624 bool SequencedSocketData::at_write_eof() const { 624 bool SequencedSocketData::at_write_eof() const {
625 return helper_.at_read_eof(); 625 return helper_.at_read_eof();
626 } 626 }
627 627
628 bool SequencedSocketData::IsReadPaused() {
629 return read_state_ == PAUSED;
630 }
631
632 void SequencedSocketData::CompleteRead() {
633 if (read_state_ != PAUSED) {
634 ADD_FAILURE() << "Unable to CompleteRead when not paused.";
635 return;
636 }
637 read_state_ = COMPLETING;
638 OnReadComplete();
639 }
640
628 void SequencedSocketData::MaybePostReadCompleteTask() { 641 void SequencedSocketData::MaybePostReadCompleteTask() {
629 NET_TRACE(1, " ****** ") << " current: " << sequence_number_; 642 NET_TRACE(1, " ****** ") << " current: " << sequence_number_;
630 // Only trigger the next read to complete if there is already a read pending 643 // Only trigger the next read to complete if there is already a read pending
631 // which should complete at the current sequence number. 644 // which should complete at the current sequence number.
632 if (read_state_ != PENDING || 645 if (read_state_ != PENDING ||
633 helper_.PeekRead().sequence_number != sequence_number_) { 646 helper_.PeekRead().sequence_number != sequence_number_) {
634 return; 647 return;
635 } 648 }
636 649
650 // If the result is ERR_IO_PENDING, then advance to the next state
651 // and pause reads.
652 if (helper_.PeekRead().result == ERR_IO_PENDING) {
653 NET_TRACE(1, " *** ") << "Pausing read at: " << sequence_number_;
654 ++sequence_number_;
655 helper_.AdvanceRead();
656 read_state_ = PAUSED;
657 return;
658 }
659
637 NET_TRACE(1, " ****** ") << "Posting task to complete read: " 660 NET_TRACE(1, " ****** ") << "Posting task to complete read: "
638 << sequence_number_; 661 << sequence_number_;
639 base::MessageLoop::current()->PostTask( 662 base::MessageLoop::current()->PostTask(
640 FROM_HERE, base::Bind(&SequencedSocketData::OnReadComplete, 663 FROM_HERE, base::Bind(&SequencedSocketData::OnReadComplete,
641 weak_factory_.GetWeakPtr())); 664 weak_factory_.GetWeakPtr()));
642 CHECK_NE(COMPLETING, write_state_); 665 CHECK_NE(COMPLETING, write_state_);
643 read_state_ = COMPLETING; 666 read_state_ = COMPLETING;
644 } 667 }
645 668
646 void SequencedSocketData::MaybePostWriteCompleteTask() { 669 void SequencedSocketData::MaybePostWriteCompleteTask() {
(...skipping 27 matching lines...) Expand all
674 sequence_number_++; 697 sequence_number_++;
675 read_state_ = IDLE; 698 read_state_ = IDLE;
676 699
677 // The result of this read completing might trigger the completion 700 // The result of this read completing might trigger the completion
678 // of a pending write. If so, post a task to complete the write later. 701 // of a pending write. If so, post a task to complete the write later.
679 // Since the socket may call back into the SequencedSocketData 702 // Since the socket may call back into the SequencedSocketData
680 // from socket()->OnReadComplete(), trigger the write task to be posted 703 // from socket()->OnReadComplete(), trigger the write task to be posted
681 // before calling that. 704 // before calling that.
682 MaybePostWriteCompleteTask(); 705 MaybePostWriteCompleteTask();
683 706
684 NET_TRACE(1, " *** ") << "Completing socket read for: " << sequence_number_; 707 NET_TRACE(1, " *** ") << "Completing socket read for: "
708 << data.sequence_number;
685 DumpMockReadWrite(data); 709 DumpMockReadWrite(data);
686 socket()->OnReadComplete(data); 710 socket()->OnReadComplete(data);
687 NET_TRACE(1, " *** ") << "Done"; 711 NET_TRACE(1, " *** ") << "Done";
688 } 712 }
689 713
690 void SequencedSocketData::OnWriteComplete() { 714 void SequencedSocketData::OnWriteComplete() {
691 CHECK_EQ(COMPLETING, write_state_); 715 CHECK_EQ(COMPLETING, write_state_);
692 NET_TRACE(1, " *** ") << " Completing write for: " << sequence_number_; 716 NET_TRACE(1, " *** ") << " Completing write for: " << sequence_number_;
693 if (!socket()) { 717 if (!socket()) {
694 NET_TRACE(1, " *** ") << "No socket available to complete write."; 718 NET_TRACE(1, " *** ") << "No socket available to complete write.";
695 return; 719 return;
696 } 720 }
697 721
698 const MockWrite& data = helper_.AdvanceWrite(); 722 const MockWrite& data = helper_.AdvanceWrite();
699 DCHECK_EQ(sequence_number_, data.sequence_number); 723 DCHECK_EQ(sequence_number_, data.sequence_number);
700 sequence_number_++; 724 sequence_number_++;
701 write_state_ = IDLE; 725 write_state_ = IDLE;
702 int rv = data.result == OK ? data.data_len : data.result; 726 int rv = data.result == OK ? data.data_len : data.result;
703 727
704 // The result of this write completing might trigger the completion 728 // The result of this write completing might trigger the completion
705 // of a pending read. If so, post a task to complete the read later. 729 // of a pending read. If so, post a task to complete the read later.
706 // Since the socket may call back into the SequencedSocketData 730 // Since the socket may call back into the SequencedSocketData
707 // from socket()->OnWriteComplete(), trigger the write task to be posted 731 // from socket()->OnWriteComplete(), trigger the write task to be posted
708 // before calling that. 732 // before calling that.
709 MaybePostReadCompleteTask(); 733 MaybePostReadCompleteTask();
710 734
711 NET_TRACE(1, " *** ") << " Completing socket write for: " << sequence_number_; 735 NET_TRACE(1, " *** ") << " Completing socket write for: "
736 << data.sequence_number;
712 socket()->OnWriteComplete(rv); 737 socket()->OnWriteComplete(rv);
713 NET_TRACE(1, " *** ") << "Done"; 738 NET_TRACE(1, " *** ") << "Done";
714 } 739 }
715 740
716 SequencedSocketData::~SequencedSocketData() { 741 SequencedSocketData::~SequencedSocketData() {
717 } 742 }
718 743
719 DeterministicSocketData::DeterministicSocketData(MockRead* reads, 744 DeterministicSocketData::DeterministicSocketData(MockRead* reads,
720 size_t reads_count, MockWrite* writes, size_t writes_count) 745 size_t reads_count, MockWrite* writes, size_t writes_count)
721 : StaticSocketDataProvider(reads, reads_count, writes, writes_count), 746 : StaticSocketDataProvider(reads, reads_count, writes, writes_count),
(...skipping 1498 matching lines...) Expand 10 before | Expand all | Expand 10 after
2220 2245
2221 const char kSOCKS5OkRequest[] = 2246 const char kSOCKS5OkRequest[] =
2222 { 0x05, 0x01, 0x00, 0x03, 0x04, 'h', 'o', 's', 't', 0x00, 0x50 }; 2247 { 0x05, 0x01, 0x00, 0x03, 0x04, 'h', 'o', 's', 't', 0x00, 0x50 };
2223 const int kSOCKS5OkRequestLength = arraysize(kSOCKS5OkRequest); 2248 const int kSOCKS5OkRequestLength = arraysize(kSOCKS5OkRequest);
2224 2249
2225 const char kSOCKS5OkResponse[] = 2250 const char kSOCKS5OkResponse[] =
2226 { 0x05, 0x00, 0x00, 0x01, 127, 0, 0, 1, 0x00, 0x50 }; 2251 { 0x05, 0x00, 0x00, 0x01, 127, 0, 0, 1, 0x00, 0x50 };
2227 const int kSOCKS5OkResponseLength = arraysize(kSOCKS5OkResponse); 2252 const int kSOCKS5OkResponseLength = arraysize(kSOCKS5OkResponse);
2228 2253
2229 } // namespace net 2254 } // namespace net
OLDNEW
« no previous file with comments | « net/socket/socket_test_util.h ('k') | net/spdy/spdy_network_transaction_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698