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 |