| OLD | NEW |
| 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 "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 235 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 246 } | 246 } |
| 247 | 247 |
| 248 SSLSocketDataProvider::~SSLSocketDataProvider() { | 248 SSLSocketDataProvider::~SSLSocketDataProvider() { |
| 249 } | 249 } |
| 250 | 250 |
| 251 DelayedSocketData::DelayedSocketData( | 251 DelayedSocketData::DelayedSocketData( |
| 252 int write_delay, MockRead* reads, size_t reads_count, | 252 int write_delay, MockRead* reads, size_t reads_count, |
| 253 MockWrite* writes, size_t writes_count) | 253 MockWrite* writes, size_t writes_count) |
| 254 : StaticSocketDataProvider(reads, reads_count, writes, writes_count), | 254 : StaticSocketDataProvider(reads, reads_count, writes, writes_count), |
| 255 write_delay_(write_delay), | 255 write_delay_(write_delay), |
| 256 read_in_progress_(false), |
| 256 ALLOW_THIS_IN_INITIALIZER_LIST(weak_factory_(this)) { | 257 ALLOW_THIS_IN_INITIALIZER_LIST(weak_factory_(this)) { |
| 257 DCHECK_GE(write_delay_, 0); | 258 DCHECK_GE(write_delay_, 0); |
| 258 } | 259 } |
| 259 | 260 |
| 260 DelayedSocketData::DelayedSocketData( | 261 DelayedSocketData::DelayedSocketData( |
| 261 const MockConnect& connect, int write_delay, MockRead* reads, | 262 const MockConnect& connect, int write_delay, MockRead* reads, |
| 262 size_t reads_count, MockWrite* writes, size_t writes_count) | 263 size_t reads_count, MockWrite* writes, size_t writes_count) |
| 263 : StaticSocketDataProvider(reads, reads_count, writes, writes_count), | 264 : StaticSocketDataProvider(reads, reads_count, writes, writes_count), |
| 264 write_delay_(write_delay), | 265 write_delay_(write_delay), |
| 266 read_in_progress_(false), |
| 265 ALLOW_THIS_IN_INITIALIZER_LIST(weak_factory_(this)) { | 267 ALLOW_THIS_IN_INITIALIZER_LIST(weak_factory_(this)) { |
| 266 DCHECK_GE(write_delay_, 0); | 268 DCHECK_GE(write_delay_, 0); |
| 267 set_connect_data(connect); | 269 set_connect_data(connect); |
| 268 } | 270 } |
| 269 | 271 |
| 270 DelayedSocketData::~DelayedSocketData() { | 272 DelayedSocketData::~DelayedSocketData() { |
| 271 } | 273 } |
| 272 | 274 |
| 273 void DelayedSocketData::ForceNextRead() { | 275 void DelayedSocketData::ForceNextRead() { |
| 276 DCHECK(read_in_progress_); |
| 274 write_delay_ = 0; | 277 write_delay_ = 0; |
| 275 CompleteRead(); | 278 CompleteRead(); |
| 276 } | 279 } |
| 277 | 280 |
| 278 MockRead DelayedSocketData::GetNextRead() { | 281 MockRead DelayedSocketData::GetNextRead() { |
| 279 if (write_delay_ > 0) | 282 MockRead out = MockRead(true, ERR_IO_PENDING); |
| 280 return MockRead(true, ERR_IO_PENDING); | 283 if (write_delay_ <= 0) |
| 281 return StaticSocketDataProvider::GetNextRead(); | 284 out = StaticSocketDataProvider::GetNextRead(); |
| 285 read_in_progress_ = (out.result == ERR_IO_PENDING); |
| 286 return out; |
| 282 } | 287 } |
| 283 | 288 |
| 284 MockWriteResult DelayedSocketData::OnWrite(const std::string& data) { | 289 MockWriteResult DelayedSocketData::OnWrite(const std::string& data) { |
| 285 MockWriteResult rv = StaticSocketDataProvider::OnWrite(data); | 290 MockWriteResult rv = StaticSocketDataProvider::OnWrite(data); |
| 286 // Now that our write has completed, we can allow reads to continue. | 291 // Now that our write has completed, we can allow reads to continue. |
| 287 if (!--write_delay_) | 292 if (!--write_delay_ && read_in_progress_) |
| 288 MessageLoop::current()->PostDelayedTask( | 293 MessageLoop::current()->PostDelayedTask( |
| 289 FROM_HERE, | 294 FROM_HERE, |
| 290 base::Bind(&DelayedSocketData::CompleteRead, | 295 base::Bind(&DelayedSocketData::CompleteRead, |
| 291 weak_factory_.GetWeakPtr()), | 296 weak_factory_.GetWeakPtr()), |
| 292 100); | 297 100); |
| 293 return rv; | 298 return rv; |
| 294 } | 299 } |
| 295 | 300 |
| 296 void DelayedSocketData::Reset() { | 301 void DelayedSocketData::Reset() { |
| 297 set_socket(NULL); | 302 set_socket(NULL); |
| 303 read_in_progress_ = false; |
| 298 weak_factory_.InvalidateWeakPtrs(); | 304 weak_factory_.InvalidateWeakPtrs(); |
| 299 StaticSocketDataProvider::Reset(); | 305 StaticSocketDataProvider::Reset(); |
| 300 } | 306 } |
| 301 | 307 |
| 302 void DelayedSocketData::CompleteRead() { | 308 void DelayedSocketData::CompleteRead() { |
| 303 if (socket()) | 309 if (socket() && read_in_progress_) |
| 304 socket()->OnReadComplete(GetNextRead()); | 310 socket()->OnReadComplete(GetNextRead()); |
| 305 } | 311 } |
| 306 | 312 |
| 307 OrderedSocketData::OrderedSocketData( | 313 OrderedSocketData::OrderedSocketData( |
| 308 MockRead* reads, size_t reads_count, MockWrite* writes, size_t writes_count) | 314 MockRead* reads, size_t reads_count, MockWrite* writes, size_t writes_count) |
| 309 : StaticSocketDataProvider(reads, reads_count, writes, writes_count), | 315 : StaticSocketDataProvider(reads, reads_count, writes, writes_count), |
| 310 sequence_number_(0), loop_stop_stage_(0), | 316 sequence_number_(0), loop_stop_stage_(0), |
| 311 blocked_(false), ALLOW_THIS_IN_INITIALIZER_LIST(weak_factory_(this)) { | 317 blocked_(false), ALLOW_THIS_IN_INITIALIZER_LIST(weak_factory_(this)) { |
| 312 } | 318 } |
| 313 | 319 |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 346 weak_factory_.InvalidateWeakPtrs(); | 352 weak_factory_.InvalidateWeakPtrs(); |
| 347 blocked_ = false; | 353 blocked_ = false; |
| 348 const MockRead& next_read = StaticSocketDataProvider::PeekRead(); | 354 const MockRead& next_read = StaticSocketDataProvider::PeekRead(); |
| 349 if (next_read.sequence_number & MockRead::STOPLOOP) | 355 if (next_read.sequence_number & MockRead::STOPLOOP) |
| 350 EndLoop(); | 356 EndLoop(); |
| 351 if ((next_read.sequence_number & ~MockRead::STOPLOOP) <= | 357 if ((next_read.sequence_number & ~MockRead::STOPLOOP) <= |
| 352 sequence_number_++) { | 358 sequence_number_++) { |
| 353 NET_TRACE(INFO, " *** ") << "Stage " << sequence_number_ - 1 | 359 NET_TRACE(INFO, " *** ") << "Stage " << sequence_number_ - 1 |
| 354 << ": Read " << read_index(); | 360 << ": Read " << read_index(); |
| 355 DumpMockRead(next_read); | 361 DumpMockRead(next_read); |
| 362 blocked_ = (next_read.result == ERR_IO_PENDING); |
| 356 return StaticSocketDataProvider::GetNextRead(); | 363 return StaticSocketDataProvider::GetNextRead(); |
| 357 } | 364 } |
| 358 NET_TRACE(INFO, " *** ") << "Stage " << sequence_number_ - 1 | 365 NET_TRACE(INFO, " *** ") << "Stage " << sequence_number_ - 1 |
| 359 << ": I/O Pending"; | 366 << ": I/O Pending"; |
| 360 MockRead result = MockRead(true, ERR_IO_PENDING); | 367 MockRead result = MockRead(true, ERR_IO_PENDING); |
| 361 DumpMockRead(result); | 368 DumpMockRead(result); |
| 362 blocked_ = true; | 369 blocked_ = true; |
| 363 return result; | 370 return result; |
| 364 } | 371 } |
| 365 | 372 |
| (...skipping 21 matching lines...) Expand all Loading... |
| 387 NET_TRACE(INFO, " *** ") << "Stage " | 394 NET_TRACE(INFO, " *** ") << "Stage " |
| 388 << sequence_number_ << ": Reset()"; | 395 << sequence_number_ << ": Reset()"; |
| 389 sequence_number_ = 0; | 396 sequence_number_ = 0; |
| 390 loop_stop_stage_ = 0; | 397 loop_stop_stage_ = 0; |
| 391 set_socket(NULL); | 398 set_socket(NULL); |
| 392 weak_factory_.InvalidateWeakPtrs(); | 399 weak_factory_.InvalidateWeakPtrs(); |
| 393 StaticSocketDataProvider::Reset(); | 400 StaticSocketDataProvider::Reset(); |
| 394 } | 401 } |
| 395 | 402 |
| 396 void OrderedSocketData::CompleteRead() { | 403 void OrderedSocketData::CompleteRead() { |
| 397 if (socket()) { | 404 if (socket() && blocked_) { |
| 398 NET_TRACE(INFO, " *** ") << "Stage " << sequence_number_; | 405 NET_TRACE(INFO, " *** ") << "Stage " << sequence_number_; |
| 399 socket()->OnReadComplete(GetNextRead()); | 406 socket()->OnReadComplete(GetNextRead()); |
| 400 } | 407 } |
| 401 } | 408 } |
| 402 | 409 |
| 403 OrderedSocketData::~OrderedSocketData() {} | 410 OrderedSocketData::~OrderedSocketData() {} |
| 404 | 411 |
| 405 DeterministicSocketData::DeterministicSocketData(MockRead* reads, | 412 DeterministicSocketData::DeterministicSocketData(MockRead* reads, |
| 406 size_t reads_count, MockWrite* writes, size_t writes_count) | 413 size_t reads_count, MockWrite* writes, size_t writes_count) |
| 407 : StaticSocketDataProvider(reads, reads_count, writes, writes_count), | 414 : StaticSocketDataProvider(reads, reads_count, writes, writes_count), |
| (...skipping 167 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 575 void MockClientSocketFactory::AddSSLSocketDataProvider( | 582 void MockClientSocketFactory::AddSSLSocketDataProvider( |
| 576 SSLSocketDataProvider* data) { | 583 SSLSocketDataProvider* data) { |
| 577 mock_ssl_data_.Add(data); | 584 mock_ssl_data_.Add(data); |
| 578 } | 585 } |
| 579 | 586 |
| 580 void MockClientSocketFactory::ResetNextMockIndexes() { | 587 void MockClientSocketFactory::ResetNextMockIndexes() { |
| 581 mock_data_.ResetNextIndex(); | 588 mock_data_.ResetNextIndex(); |
| 582 mock_ssl_data_.ResetNextIndex(); | 589 mock_ssl_data_.ResetNextIndex(); |
| 583 } | 590 } |
| 584 | 591 |
| 585 MockTCPClientSocket* MockClientSocketFactory::GetMockTCPClientSocket( | |
| 586 size_t index) const { | |
| 587 DCHECK_LT(index, tcp_client_sockets_.size()); | |
| 588 return tcp_client_sockets_[index]; | |
| 589 } | |
| 590 | |
| 591 MockSSLClientSocket* MockClientSocketFactory::GetMockSSLClientSocket( | |
| 592 size_t index) const { | |
| 593 DCHECK_LT(index, ssl_client_sockets_.size()); | |
| 594 return ssl_client_sockets_[index]; | |
| 595 } | |
| 596 | |
| 597 DatagramClientSocket* MockClientSocketFactory::CreateDatagramClientSocket( | 592 DatagramClientSocket* MockClientSocketFactory::CreateDatagramClientSocket( |
| 598 DatagramSocket::BindType bind_type, | 593 DatagramSocket::BindType bind_type, |
| 599 const RandIntCallback& rand_int_cb, | 594 const RandIntCallback& rand_int_cb, |
| 600 net::NetLog* net_log, | 595 net::NetLog* net_log, |
| 601 const net::NetLog::Source& source) { | 596 const net::NetLog::Source& source) { |
| 602 SocketDataProvider* data_provider = mock_data_.GetNext(); | 597 SocketDataProvider* data_provider = mock_data_.GetNext(); |
| 603 MockUDPClientSocket* socket = new MockUDPClientSocket(data_provider, net_log); | 598 MockUDPClientSocket* socket = new MockUDPClientSocket(data_provider, net_log); |
| 604 data_provider->set_socket(socket); | 599 data_provider->set_socket(socket); |
| 605 udp_client_sockets_.push_back(socket); | |
| 606 return socket; | 600 return socket; |
| 607 } | 601 } |
| 608 | 602 |
| 609 StreamSocket* MockClientSocketFactory::CreateTransportClientSocket( | 603 StreamSocket* MockClientSocketFactory::CreateTransportClientSocket( |
| 610 const AddressList& addresses, | 604 const AddressList& addresses, |
| 611 net::NetLog* net_log, | 605 net::NetLog* net_log, |
| 612 const net::NetLog::Source& source) { | 606 const net::NetLog::Source& source) { |
| 613 SocketDataProvider* data_provider = mock_data_.GetNext(); | 607 SocketDataProvider* data_provider = mock_data_.GetNext(); |
| 614 MockTCPClientSocket* socket = | 608 MockTCPClientSocket* socket = |
| 615 new MockTCPClientSocket(addresses, net_log, data_provider); | 609 new MockTCPClientSocket(addresses, net_log, data_provider); |
| 616 data_provider->set_socket(socket); | 610 data_provider->set_socket(socket); |
| 617 tcp_client_sockets_.push_back(socket); | |
| 618 return socket; | 611 return socket; |
| 619 } | 612 } |
| 620 | 613 |
| 621 SSLClientSocket* MockClientSocketFactory::CreateSSLClientSocket( | 614 SSLClientSocket* MockClientSocketFactory::CreateSSLClientSocket( |
| 622 ClientSocketHandle* transport_socket, | 615 ClientSocketHandle* transport_socket, |
| 623 const HostPortPair& host_and_port, | 616 const HostPortPair& host_and_port, |
| 624 const SSLConfig& ssl_config, | 617 const SSLConfig& ssl_config, |
| 625 SSLHostInfo* ssl_host_info, | 618 SSLHostInfo* ssl_host_info, |
| 626 const SSLClientSocketContext& context) { | 619 const SSLClientSocketContext& context) { |
| 627 MockSSLClientSocket* socket = | 620 MockSSLClientSocket* socket = |
| 628 new MockSSLClientSocket(transport_socket, host_and_port, ssl_config, | 621 new MockSSLClientSocket(transport_socket, host_and_port, ssl_config, |
| 629 ssl_host_info, mock_ssl_data_.GetNext()); | 622 ssl_host_info, mock_ssl_data_.GetNext()); |
| 630 ssl_client_sockets_.push_back(socket); | |
| 631 return socket; | 623 return socket; |
| 632 } | 624 } |
| 633 | 625 |
| 634 void MockClientSocketFactory::ClearSSLSessionCache() { | 626 void MockClientSocketFactory::ClearSSLSessionCache() { |
| 635 } | 627 } |
| 636 | 628 |
| 637 MockClientSocket::MockClientSocket(net::NetLog* net_log) | 629 MockClientSocket::MockClientSocket(net::NetLog* net_log) |
| 638 : ALLOW_THIS_IN_INITIALIZER_LIST(weak_factory_(this)), | 630 : ALLOW_THIS_IN_INITIALIZER_LIST(weak_factory_(this)), |
| 639 connected_(false), | 631 connected_(false), |
| 640 net_log_(net::NetLog::Source(), net_log) { | 632 net_log_(net::NetLog::Source(), net_log) { |
| (...skipping 956 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1597 | 1589 |
| 1598 const char kSOCKS5OkRequest[] = | 1590 const char kSOCKS5OkRequest[] = |
| 1599 { 0x05, 0x01, 0x00, 0x03, 0x04, 'h', 'o', 's', 't', 0x00, 0x50 }; | 1591 { 0x05, 0x01, 0x00, 0x03, 0x04, 'h', 'o', 's', 't', 0x00, 0x50 }; |
| 1600 const int kSOCKS5OkRequestLength = arraysize(kSOCKS5OkRequest); | 1592 const int kSOCKS5OkRequestLength = arraysize(kSOCKS5OkRequest); |
| 1601 | 1593 |
| 1602 const char kSOCKS5OkResponse[] = | 1594 const char kSOCKS5OkResponse[] = |
| 1603 { 0x05, 0x00, 0x00, 0x01, 127, 0, 0, 1, 0x00, 0x50 }; | 1595 { 0x05, 0x00, 0x00, 0x01, 127, 0, 0, 1, 0x00, 0x50 }; |
| 1604 const int kSOCKS5OkResponseLength = arraysize(kSOCKS5OkResponse); | 1596 const int kSOCKS5OkResponseLength = arraysize(kSOCKS5OkResponse); |
| 1605 | 1597 |
| 1606 } // namespace net | 1598 } // namespace net |
| OLD | NEW |