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

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

Issue 1135553003: Change DeterministicSocketData to no longer inherit from SocketDataProvider (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 588 matching lines...) Expand 10 before | Expand all | Expand 10 after
599 NET_TRACE(1, " *** ") << " Completing socket write for: " 599 NET_TRACE(1, " *** ") << " Completing socket write for: "
600 << data.sequence_number; 600 << data.sequence_number;
601 socket()->OnWriteComplete(rv); 601 socket()->OnWriteComplete(rv);
602 NET_TRACE(1, " *** ") << "Done"; 602 NET_TRACE(1, " *** ") << "Done";
603 } 603 }
604 604
605 SequencedSocketData::~SequencedSocketData() { 605 SequencedSocketData::~SequencedSocketData() {
606 } 606 }
607 607
608 DeterministicSocketData::DeterministicSocketData(MockRead* reads, 608 DeterministicSocketData::DeterministicSocketData(MockRead* reads,
609 size_t reads_count, MockWrite* writes, size_t writes_count) 609 size_t reads_count,
610 : StaticSocketDataProvider(reads, reads_count, writes, writes_count), 610 MockWrite* writes,
611 size_t writes_count)
612 : helper_(reads, reads_count, writes, writes_count),
611 sequence_number_(0), 613 sequence_number_(0),
612 current_read_(), 614 current_read_(),
613 current_write_(), 615 current_write_(),
614 stopping_sequence_number_(0), 616 stopping_sequence_number_(0),
615 stopped_(false), 617 stopped_(false),
616 print_debug_(false), 618 print_debug_(false),
617 is_running_(false) { 619 is_running_(false) {
618 VerifyCorrectSequenceNumbers(reads, reads_count, writes, writes_count); 620 VerifyCorrectSequenceNumbers(reads, reads_count, writes, writes_count);
619 } 621 }
620 622
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
660 DCHECK_LT(sequence_number_, seq); 662 DCHECK_LT(sequence_number_, seq);
661 stopping_sequence_number_ = seq; 663 stopping_sequence_number_ = seq;
662 stopped_ = false; 664 stopped_ = false;
663 } 665 }
664 666
665 void DeterministicSocketData::StopAfter(int seq) { 667 void DeterministicSocketData::StopAfter(int seq) {
666 SetStop(sequence_number_ + seq); 668 SetStop(sequence_number_ + seq);
667 } 669 }
668 670
669 MockRead DeterministicSocketData::OnRead() { 671 MockRead DeterministicSocketData::OnRead() {
670 current_read_ = helper()->PeekRead(); 672 current_read_ = helper_.PeekRead();
671 673
672 // Synchronous read while stopped is an error 674 // Synchronous read while stopped is an error
673 if (stopped() && current_read_.mode == SYNCHRONOUS) { 675 if (stopped() && current_read_.mode == SYNCHRONOUS) {
674 LOG(ERROR) << "Unable to perform synchronous IO while stopped"; 676 LOG(ERROR) << "Unable to perform synchronous IO while stopped";
675 return MockRead(SYNCHRONOUS, ERR_UNEXPECTED); 677 return MockRead(SYNCHRONOUS, ERR_UNEXPECTED);
676 } 678 }
677 679
678 // Async read which will be called back in a future step. 680 // Async read which will be called back in a future step.
679 if (sequence_number_ < current_read_.sequence_number) { 681 if (sequence_number_ < current_read_.sequence_number) {
680 NET_TRACE(1, " *** ") << "Stage " << sequence_number_ << ": I/O Pending"; 682 NET_TRACE(1, " *** ") << "Stage " << sequence_number_ << ": I/O Pending";
681 MockRead result = MockRead(SYNCHRONOUS, ERR_IO_PENDING); 683 MockRead result = MockRead(SYNCHRONOUS, ERR_IO_PENDING);
682 if (current_read_.mode == SYNCHRONOUS) { 684 if (current_read_.mode == SYNCHRONOUS) {
683 LOG(ERROR) << "Unable to perform synchronous read: " 685 LOG(ERROR) << "Unable to perform synchronous read: "
684 << current_read_.sequence_number 686 << current_read_.sequence_number
685 << " at stage: " << sequence_number_; 687 << " at stage: " << sequence_number_;
686 result = MockRead(SYNCHRONOUS, ERR_UNEXPECTED); 688 result = MockRead(SYNCHRONOUS, ERR_UNEXPECTED);
687 } 689 }
688 if (print_debug_) 690 if (print_debug_)
689 DumpMockReadWrite(result); 691 DumpMockReadWrite(result);
690 return result; 692 return result;
691 } 693 }
692 694
693 NET_TRACE(1, " *** ") << "Stage " << sequence_number_ << ": Read " 695 NET_TRACE(1, " *** ") << "Stage " << sequence_number_ << ": Read "
694 << read_index(); 696 << helper_.read_index();
695 if (print_debug_) 697 if (print_debug_)
696 DumpMockReadWrite(current_read_); 698 DumpMockReadWrite(current_read_);
697 699
698 // Increment the sequence number if IO is complete 700 // Increment the sequence number if IO is complete
699 if (current_read_.mode == SYNCHRONOUS) 701 if (current_read_.mode == SYNCHRONOUS)
700 NextStep(); 702 NextStep();
701 703
702 DCHECK_NE(ERR_IO_PENDING, current_read_.result); 704 DCHECK_NE(ERR_IO_PENDING, current_read_.result);
703 StaticSocketDataProvider::OnRead();
704 705
706 helper_.AdvanceRead();
705 return current_read_; 707 return current_read_;
706 } 708 }
707 709
708 MockWriteResult DeterministicSocketData::OnWrite(const std::string& data) { 710 MockWriteResult DeterministicSocketData::OnWrite(const std::string& data) {
709 const MockWrite& next_write = helper()->PeekWrite(); 711 const MockWrite& next_write = helper_.PeekWrite();
710 current_write_ = next_write; 712 current_write_ = next_write;
711 713
712 // Synchronous write while stopped is an error 714 // Synchronous write while stopped is an error
713 if (stopped() && next_write.mode == SYNCHRONOUS) { 715 if (stopped() && next_write.mode == SYNCHRONOUS) {
714 LOG(ERROR) << "Unable to perform synchronous IO while stopped"; 716 LOG(ERROR) << "Unable to perform synchronous IO while stopped";
715 return MockWriteResult(SYNCHRONOUS, ERR_UNEXPECTED); 717 return MockWriteResult(SYNCHRONOUS, ERR_UNEXPECTED);
716 } 718 }
717 719
718 // Async write which will be called back in a future step. 720 // Async write which will be called back in a future step.
719 if (sequence_number_ < next_write.sequence_number) { 721 if (sequence_number_ < next_write.sequence_number) {
720 NET_TRACE(1, " *** ") << "Stage " << sequence_number_ << ": I/O Pending"; 722 NET_TRACE(1, " *** ") << "Stage " << sequence_number_ << ": I/O Pending";
721 if (next_write.mode == SYNCHRONOUS) { 723 if (next_write.mode == SYNCHRONOUS) {
722 LOG(ERROR) << "Unable to perform synchronous write: " 724 LOG(ERROR) << "Unable to perform synchronous write: "
723 << next_write.sequence_number << " at stage: " << sequence_number_; 725 << next_write.sequence_number << " at stage: " << sequence_number_;
724 return MockWriteResult(SYNCHRONOUS, ERR_UNEXPECTED); 726 return MockWriteResult(SYNCHRONOUS, ERR_UNEXPECTED);
725 } 727 }
726 } else { 728 } else {
727 NET_TRACE(1, " *** ") << "Stage " << sequence_number_ << ": Write " 729 NET_TRACE(1, " *** ") << "Stage " << sequence_number_ << ": Write "
728 << write_index(); 730 << helper_.write_index();
729 } 731 }
730 732
731 if (print_debug_) 733 if (print_debug_)
732 DumpMockReadWrite(next_write); 734 DumpMockReadWrite(next_write);
733 735
734 // Move to the next step if I/O is synchronous, since the operation will 736 // Move to the next step if I/O is synchronous, since the operation will
735 // complete when this method returns. 737 // complete when this method returns.
736 if (next_write.mode == SYNCHRONOUS) 738 if (next_write.mode == SYNCHRONOUS)
737 NextStep(); 739 NextStep();
738 740
739 // This is either a sync write for this step, or an async write. 741 // Check that what we are writing matches the expectation.
740 return StaticSocketDataProvider::OnWrite(data); 742 // Then give the mocked return value.
743 if (!helper_.VerifyWriteData(data))
744 return MockWriteResult(SYNCHRONOUS, ERR_UNEXPECTED);
745
746 helper_.AdvanceWrite();
747
748 // In the case that the write was successful, return the number of bytes
749 // written. Otherwise return the error code.
750 int result =
751 next_write.result == OK ? next_write.data_len : next_write.result;
752 return MockWriteResult(next_write.mode, result);
741 } 753 }
742 754
743 void DeterministicSocketData::Reset() { 755 bool DeterministicSocketData::AllReadDataConsumed() const {
744 NET_TRACE(1, " *** ") << "Stage " << sequence_number_ << ": Reset()"; 756 return helper_.AllReadDataConsumed();
745 sequence_number_ = 0; 757 }
746 StaticSocketDataProvider::Reset(); 758
747 NOTREACHED(); 759 bool DeterministicSocketData::AllWriteDataConsumed() const {
760 return helper_.AllWriteDataConsumed();
748 } 761 }
749 762
750 void DeterministicSocketData::InvokeCallbacks() { 763 void DeterministicSocketData::InvokeCallbacks() {
751 if (delegate_.get() && delegate_->WritePending() && 764 if (delegate_.get() && delegate_->WritePending() &&
752 (current_write().sequence_number == sequence_number())) { 765 (current_write().sequence_number == sequence_number())) {
753 NextStep(); 766 NextStep();
754 delegate_->CompleteWrite(); 767 delegate_->CompleteWrite();
755 return; 768 return;
756 } 769 }
757 if (delegate_.get() && delegate_->ReadPending() && 770 if (delegate_.get() && delegate_->ReadPending() &&
(...skipping 626 matching lines...) Expand 10 before | Expand all | Expand 10 after
1384 bool rv = ParseIPLiteralToNumber("192.0.2.33", &ip); 1397 bool rv = ParseIPLiteralToNumber("192.0.2.33", &ip);
1385 CHECK(rv); 1398 CHECK(rv);
1386 *address = IPEndPoint(ip, source_port_); 1399 *address = IPEndPoint(ip, source_port_);
1387 return OK; 1400 return OK;
1388 } 1401 }
1389 1402
1390 const BoundNetLog& DeterministicMockUDPClientSocket::NetLog() const { 1403 const BoundNetLog& DeterministicMockUDPClientSocket::NetLog() const {
1391 return helper_.net_log(); 1404 return helper_.net_log();
1392 } 1405 }
1393 1406
1394 void DeterministicMockUDPClientSocket::OnReadComplete(const MockRead& data) {}
1395
1396 void DeterministicMockUDPClientSocket::OnWriteComplete(int rv) {
1397 }
1398
1399 void DeterministicMockUDPClientSocket::OnConnectComplete(
1400 const MockConnect& data) {
1401 NOTIMPLEMENTED();
1402 }
1403
1404 DeterministicMockTCPClientSocket::DeterministicMockTCPClientSocket( 1407 DeterministicMockTCPClientSocket::DeterministicMockTCPClientSocket(
1405 net::NetLog* net_log, 1408 net::NetLog* net_log,
1406 DeterministicSocketData* data) 1409 DeterministicSocketData* data)
1407 : MockClientSocket(BoundNetLog::Make(net_log, NetLog::SOURCE_NONE)), 1410 : MockClientSocket(BoundNetLog::Make(net_log, NetLog::SOURCE_NONE)),
1408 helper_(net_log, data) { 1411 helper_(net_log, data) {
1409 peer_addr_ = data->connect_data().peer_addr; 1412 peer_addr_ = data->connect_data().peer_addr;
1410 } 1413 }
1411 1414
1412 DeterministicMockTCPClientSocket::~DeterministicMockTCPClientSocket() {} 1415 DeterministicMockTCPClientSocket::~DeterministicMockTCPClientSocket() {}
1413 1416
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
1481 } 1484 }
1482 1485
1483 bool DeterministicMockTCPClientSocket::WasNpnNegotiated() const { 1486 bool DeterministicMockTCPClientSocket::WasNpnNegotiated() const {
1484 return false; 1487 return false;
1485 } 1488 }
1486 1489
1487 bool DeterministicMockTCPClientSocket::GetSSLInfo(SSLInfo* ssl_info) { 1490 bool DeterministicMockTCPClientSocket::GetSSLInfo(SSLInfo* ssl_info) {
1488 return false; 1491 return false;
1489 } 1492 }
1490 1493
1491 void DeterministicMockTCPClientSocket::OnReadComplete(const MockRead& data) {}
1492
1493 void DeterministicMockTCPClientSocket::OnWriteComplete(int rv) {
1494 }
1495
1496 void DeterministicMockTCPClientSocket::OnConnectComplete(
1497 const MockConnect& data) {}
1498
1499 // static 1494 // static
1500 void MockSSLClientSocket::ConnectCallback( 1495 void MockSSLClientSocket::ConnectCallback(
1501 MockSSLClientSocket* ssl_client_socket, 1496 MockSSLClientSocket* ssl_client_socket,
1502 const CompletionCallback& callback, 1497 const CompletionCallback& callback,
1503 int rv) { 1498 int rv) {
1504 if (rv == OK) 1499 if (rv == OK)
1505 ssl_client_socket->connected_ = true; 1500 ssl_client_socket->connected_ = true;
1506 callback.Run(rv); 1501 callback.Run(rv);
1507 } 1502 }
1508 1503
(...skipping 600 matching lines...) Expand 10 before | Expand all | Expand 10 after
2109 2104
2110 const char kSOCKS5OkRequest[] = 2105 const char kSOCKS5OkRequest[] =
2111 { 0x05, 0x01, 0x00, 0x03, 0x04, 'h', 'o', 's', 't', 0x00, 0x50 }; 2106 { 0x05, 0x01, 0x00, 0x03, 0x04, 'h', 'o', 's', 't', 0x00, 0x50 };
2112 const int kSOCKS5OkRequestLength = arraysize(kSOCKS5OkRequest); 2107 const int kSOCKS5OkRequestLength = arraysize(kSOCKS5OkRequest);
2113 2108
2114 const char kSOCKS5OkResponse[] = 2109 const char kSOCKS5OkResponse[] =
2115 { 0x05, 0x00, 0x00, 0x01, 127, 0, 0, 1, 0x00, 0x50 }; 2110 { 0x05, 0x00, 0x00, 0x01, 127, 0, 0, 1, 0x00, 0x50 };
2116 const int kSOCKS5OkResponseLength = arraysize(kSOCKS5OkResponse); 2111 const int kSOCKS5OkResponseLength = arraysize(kSOCKS5OkResponse);
2117 2112
2118 } // namespace net 2113 } // 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