Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 Loading... | |
| 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 Loading... | |
| 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. | |
|
ramant (doing other things)
2015/05/19 17:06:35
overly nit: " // // written" -> " // written"
Ryan Hamilton
2015/05/19 17:33:26
Done.
| |
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 |
| OLD | NEW |