| 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/http/http_proxy_client_socket_pool.h" | 5 #include "net/http/http_proxy_client_socket_pool.h" |
| 6 | 6 |
| 7 #include "base/callback.h" | 7 #include "base/callback.h" |
| 8 #include "base/compiler_specific.h" | 8 #include "base/compiler_specific.h" |
| 9 #include "base/string_util.h" | 9 #include "base/string_util.h" |
| 10 #include "base/time.h" | 10 #include "base/time.h" |
| (...skipping 342 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 353 EXPECT_EQ(ERR_NPN_NEGOTIATION_FAILED, callback.WaitForResult()); | 353 EXPECT_EQ(ERR_NPN_NEGOTIATION_FAILED, callback.WaitForResult()); |
| 354 EXPECT_FALSE(handle.is_initialized()); | 354 EXPECT_FALSE(handle.is_initialized()); |
| 355 EXPECT_FALSE(handle.socket()); | 355 EXPECT_FALSE(handle.socket()); |
| 356 EXPECT_TRUE(handle.is_ssl_error()); | 356 EXPECT_TRUE(handle.is_ssl_error()); |
| 357 } | 357 } |
| 358 | 358 |
| 359 TEST_F(SSLClientSocketPoolTest, DirectGotSPDY) { | 359 TEST_F(SSLClientSocketPoolTest, DirectGotSPDY) { |
| 360 StaticSocketDataProvider data; | 360 StaticSocketDataProvider data; |
| 361 socket_factory_.AddSocketDataProvider(&data); | 361 socket_factory_.AddSocketDataProvider(&data); |
| 362 SSLSocketDataProvider ssl(ASYNC, OK); | 362 SSLSocketDataProvider ssl(ASYNC, OK); |
| 363 ssl.SetNextProto(kProtoSPDY21); | 363 ssl.SetNextProto(kProtoSPDY2); |
| 364 socket_factory_.AddSSLSocketDataProvider(&ssl); | 364 socket_factory_.AddSSLSocketDataProvider(&ssl); |
| 365 | 365 |
| 366 CreatePool(true /* tcp pool */, false, false); | 366 CreatePool(true /* tcp pool */, false, false); |
| 367 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_DIRECT, | 367 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_DIRECT, |
| 368 true); | 368 true); |
| 369 | 369 |
| 370 ClientSocketHandle handle; | 370 ClientSocketHandle handle; |
| 371 TestCompletionCallback callback; | 371 TestCompletionCallback callback; |
| 372 int rv = handle.Init( | 372 int rv = handle.Init( |
| 373 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog()); | 373 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog()); |
| 374 EXPECT_EQ(ERR_IO_PENDING, rv); | 374 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 375 EXPECT_FALSE(handle.is_initialized()); | 375 EXPECT_FALSE(handle.is_initialized()); |
| 376 EXPECT_FALSE(handle.socket()); | 376 EXPECT_FALSE(handle.socket()); |
| 377 | 377 |
| 378 EXPECT_EQ(OK, callback.WaitForResult()); | 378 EXPECT_EQ(OK, callback.WaitForResult()); |
| 379 EXPECT_TRUE(handle.is_initialized()); | 379 EXPECT_TRUE(handle.is_initialized()); |
| 380 EXPECT_TRUE(handle.socket()); | 380 EXPECT_TRUE(handle.socket()); |
| 381 | 381 |
| 382 SSLClientSocket* ssl_socket = static_cast<SSLClientSocket*>(handle.socket()); | 382 SSLClientSocket* ssl_socket = static_cast<SSLClientSocket*>(handle.socket()); |
| 383 EXPECT_TRUE(ssl_socket->was_npn_negotiated()); | 383 EXPECT_TRUE(ssl_socket->was_npn_negotiated()); |
| 384 std::string proto; | 384 std::string proto; |
| 385 std::string server_protos; | 385 std::string server_protos; |
| 386 ssl_socket->GetNextProto(&proto, &server_protos); | 386 ssl_socket->GetNextProto(&proto, &server_protos); |
| 387 EXPECT_EQ(SSLClientSocket::NextProtoFromString(proto), | 387 EXPECT_EQ(SSLClientSocket::NextProtoFromString(proto), |
| 388 kProtoSPDY21); | 388 kProtoSPDY2); |
| 389 } | 389 } |
| 390 | 390 |
| 391 TEST_F(SSLClientSocketPoolTest, DirectGotBonusSPDY) { | 391 TEST_F(SSLClientSocketPoolTest, DirectGotBonusSPDY) { |
| 392 StaticSocketDataProvider data; | 392 StaticSocketDataProvider data; |
| 393 socket_factory_.AddSocketDataProvider(&data); | 393 socket_factory_.AddSocketDataProvider(&data); |
| 394 SSLSocketDataProvider ssl(ASYNC, OK); | 394 SSLSocketDataProvider ssl(ASYNC, OK); |
| 395 ssl.SetNextProto(kProtoSPDY21); | 395 ssl.SetNextProto(kProtoSPDY2); |
| 396 socket_factory_.AddSSLSocketDataProvider(&ssl); | 396 socket_factory_.AddSSLSocketDataProvider(&ssl); |
| 397 | 397 |
| 398 CreatePool(true /* tcp pool */, false, false); | 398 CreatePool(true /* tcp pool */, false, false); |
| 399 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_DIRECT, | 399 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_DIRECT, |
| 400 true); | 400 true); |
| 401 | 401 |
| 402 ClientSocketHandle handle; | 402 ClientSocketHandle handle; |
| 403 TestCompletionCallback callback; | 403 TestCompletionCallback callback; |
| 404 int rv = handle.Init( | 404 int rv = handle.Init( |
| 405 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog()); | 405 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog()); |
| 406 EXPECT_EQ(ERR_IO_PENDING, rv); | 406 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 407 EXPECT_FALSE(handle.is_initialized()); | 407 EXPECT_FALSE(handle.is_initialized()); |
| 408 EXPECT_FALSE(handle.socket()); | 408 EXPECT_FALSE(handle.socket()); |
| 409 | 409 |
| 410 EXPECT_EQ(OK, callback.WaitForResult()); | 410 EXPECT_EQ(OK, callback.WaitForResult()); |
| 411 EXPECT_TRUE(handle.is_initialized()); | 411 EXPECT_TRUE(handle.is_initialized()); |
| 412 EXPECT_TRUE(handle.socket()); | 412 EXPECT_TRUE(handle.socket()); |
| 413 | 413 |
| 414 SSLClientSocket* ssl_socket = static_cast<SSLClientSocket*>(handle.socket()); | 414 SSLClientSocket* ssl_socket = static_cast<SSLClientSocket*>(handle.socket()); |
| 415 EXPECT_TRUE(ssl_socket->was_npn_negotiated()); | 415 EXPECT_TRUE(ssl_socket->was_npn_negotiated()); |
| 416 std::string proto; | 416 std::string proto; |
| 417 std::string server_protos; | 417 std::string server_protos; |
| 418 ssl_socket->GetNextProto(&proto, &server_protos); | 418 ssl_socket->GetNextProto(&proto, &server_protos); |
| 419 EXPECT_EQ(SSLClientSocket::NextProtoFromString(proto), | 419 EXPECT_EQ(SSLClientSocket::NextProtoFromString(proto), |
| 420 kProtoSPDY21); | 420 kProtoSPDY2); |
| 421 } | 421 } |
| 422 | 422 |
| 423 TEST_F(SSLClientSocketPoolTest, SOCKSFail) { | 423 TEST_F(SSLClientSocketPoolTest, SOCKSFail) { |
| 424 StaticSocketDataProvider data; | 424 StaticSocketDataProvider data; |
| 425 data.set_connect_data(MockConnect(SYNCHRONOUS, ERR_CONNECTION_FAILED)); | 425 data.set_connect_data(MockConnect(SYNCHRONOUS, ERR_CONNECTION_FAILED)); |
| 426 socket_factory_.AddSocketDataProvider(&data); | 426 socket_factory_.AddSocketDataProvider(&data); |
| 427 | 427 |
| 428 CreatePool(false, true /* http proxy pool */, true /* socks pool */); | 428 CreatePool(false, true /* http proxy pool */, true /* socks pool */); |
| 429 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_SOCKS5, | 429 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_SOCKS5, |
| 430 false); | 430 false); |
| (...skipping 254 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 685 } | 685 } |
| 686 | 686 |
| 687 MockRead reads[] = { | 687 MockRead reads[] = { |
| 688 MockRead(ASYNC, ERR_IO_PENDING), | 688 MockRead(ASYNC, ERR_IO_PENDING), |
| 689 }; | 689 }; |
| 690 StaticSocketDataProvider data(reads, arraysize(reads), NULL, 0); | 690 StaticSocketDataProvider data(reads, arraysize(reads), NULL, 0); |
| 691 socket_factory_.AddSocketDataProvider(&data); | 691 socket_factory_.AddSocketDataProvider(&data); |
| 692 SSLSocketDataProvider ssl(ASYNC, OK); | 692 SSLSocketDataProvider ssl(ASYNC, OK); |
| 693 ssl.cert = X509Certificate::CreateFromBytes( | 693 ssl.cert = X509Certificate::CreateFromBytes( |
| 694 reinterpret_cast<const char*>(webkit_der), sizeof(webkit_der)); | 694 reinterpret_cast<const char*>(webkit_der), sizeof(webkit_der)); |
| 695 ssl.SetNextProto(kProtoSPDY21); | 695 ssl.SetNextProto(kProtoSPDY2); |
| 696 socket_factory_.AddSSLSocketDataProvider(&ssl); | 696 socket_factory_.AddSSLSocketDataProvider(&ssl); |
| 697 | 697 |
| 698 CreatePool(true /* tcp pool */, false, false); | 698 CreatePool(true /* tcp pool */, false, false); |
| 699 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_DIRECT, | 699 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_DIRECT, |
| 700 true); | 700 true); |
| 701 | 701 |
| 702 scoped_ptr<ClientSocketHandle> handle(new ClientSocketHandle()); | 702 scoped_ptr<ClientSocketHandle> handle(new ClientSocketHandle()); |
| 703 TestCompletionCallback callback; | 703 TestCompletionCallback callback; |
| 704 int rv = handle->Init( | 704 int rv = handle->Init( |
| 705 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog()); | 705 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog()); |
| 706 EXPECT_EQ(ERR_IO_PENDING, rv); | 706 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 707 EXPECT_FALSE(handle->is_initialized()); | 707 EXPECT_FALSE(handle->is_initialized()); |
| 708 EXPECT_FALSE(handle->socket()); | 708 EXPECT_FALSE(handle->socket()); |
| 709 | 709 |
| 710 EXPECT_EQ(OK, callback.WaitForResult()); | 710 EXPECT_EQ(OK, callback.WaitForResult()); |
| 711 EXPECT_TRUE(handle->is_initialized()); | 711 EXPECT_TRUE(handle->is_initialized()); |
| 712 EXPECT_TRUE(handle->socket()); | 712 EXPECT_TRUE(handle->socket()); |
| 713 | 713 |
| 714 SSLClientSocket* ssl_socket = static_cast<SSLClientSocket*>(handle->socket()); | 714 SSLClientSocket* ssl_socket = static_cast<SSLClientSocket*>(handle->socket()); |
| 715 EXPECT_TRUE(ssl_socket->was_npn_negotiated()); | 715 EXPECT_TRUE(ssl_socket->was_npn_negotiated()); |
| 716 std::string proto; | 716 std::string proto; |
| 717 std::string server_protos; | 717 std::string server_protos; |
| 718 ssl_socket->GetNextProto(&proto, &server_protos); | 718 ssl_socket->GetNextProto(&proto, &server_protos); |
| 719 EXPECT_EQ(SSLClientSocket::NextProtoFromString(proto), | 719 EXPECT_EQ(SSLClientSocket::NextProtoFromString(proto), |
| 720 kProtoSPDY21); | 720 kProtoSPDY2); |
| 721 | 721 |
| 722 // TODO(rtenneti): MockClientSocket::GetPeerAddress returns 0 as the port | 722 // TODO(rtenneti): MockClientSocket::GetPeerAddress returns 0 as the port |
| 723 // number. Fix it to return port 80 and then use GetPeerAddress to AddAlias. | 723 // number. Fix it to return port 80 and then use GetPeerAddress to AddAlias. |
| 724 const addrinfo* address = test_hosts[0].addresses.head(); | 724 const addrinfo* address = test_hosts[0].addresses.head(); |
| 725 SpdySessionPoolPeer pool_peer(session_->spdy_session_pool()); | 725 SpdySessionPoolPeer pool_peer(session_->spdy_session_pool()); |
| 726 pool_peer.AddAlias(address, test_hosts[0].pair); | 726 pool_peer.AddAlias(address, test_hosts[0].pair); |
| 727 | 727 |
| 728 scoped_refptr<SpdySession> spdy_session; | 728 scoped_refptr<SpdySession> spdy_session; |
| 729 rv = session_->spdy_session_pool()->GetSpdySessionFromSocket( | 729 rv = session_->spdy_session_pool()->GetSpdySessionFromSocket( |
| 730 test_hosts[0].pair, handle.release(), BoundNetLog(), 0, | 730 test_hosts[0].pair, handle.release(), BoundNetLog(), 0, |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 772 | 772 |
| 773 MockRead reads[] = { | 773 MockRead reads[] = { |
| 774 MockRead(ASYNC, ERR_IO_PENDING), | 774 MockRead(ASYNC, ERR_IO_PENDING), |
| 775 }; | 775 }; |
| 776 StaticSocketDataProvider data(reads, arraysize(reads), NULL, 0); | 776 StaticSocketDataProvider data(reads, arraysize(reads), NULL, 0); |
| 777 socket_factory_.AddSocketDataProvider(&data); | 777 socket_factory_.AddSocketDataProvider(&data); |
| 778 SSLSocketDataProvider ssl(ASYNC, OK); | 778 SSLSocketDataProvider ssl(ASYNC, OK); |
| 779 ssl.cert = X509Certificate::CreateFromBytes( | 779 ssl.cert = X509Certificate::CreateFromBytes( |
| 780 reinterpret_cast<const char*>(webkit_der), sizeof(webkit_der)); | 780 reinterpret_cast<const char*>(webkit_der), sizeof(webkit_der)); |
| 781 ssl.client_cert_sent = true; | 781 ssl.client_cert_sent = true; |
| 782 ssl.SetNextProto(kProtoSPDY21); | 782 ssl.SetNextProto(kProtoSPDY2); |
| 783 socket_factory_.AddSSLSocketDataProvider(&ssl); | 783 socket_factory_.AddSSLSocketDataProvider(&ssl); |
| 784 | 784 |
| 785 CreatePool(true /* tcp pool */, false, false); | 785 CreatePool(true /* tcp pool */, false, false); |
| 786 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_DIRECT, | 786 scoped_refptr<SSLSocketParams> params = SSLParams(ProxyServer::SCHEME_DIRECT, |
| 787 true); | 787 true); |
| 788 | 788 |
| 789 scoped_ptr<ClientSocketHandle> handle(new ClientSocketHandle()); | 789 scoped_ptr<ClientSocketHandle> handle(new ClientSocketHandle()); |
| 790 rv = handle->Init( | 790 rv = handle->Init( |
| 791 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog()); | 791 "a", params, MEDIUM, callback.callback(), pool_.get(), BoundNetLog()); |
| 792 EXPECT_EQ(ERR_IO_PENDING, rv); | 792 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 793 EXPECT_FALSE(handle->is_initialized()); | 793 EXPECT_FALSE(handle->is_initialized()); |
| 794 EXPECT_FALSE(handle->socket()); | 794 EXPECT_FALSE(handle->socket()); |
| 795 | 795 |
| 796 EXPECT_EQ(OK, callback.WaitForResult()); | 796 EXPECT_EQ(OK, callback.WaitForResult()); |
| 797 EXPECT_TRUE(handle->is_initialized()); | 797 EXPECT_TRUE(handle->is_initialized()); |
| 798 EXPECT_TRUE(handle->socket()); | 798 EXPECT_TRUE(handle->socket()); |
| 799 | 799 |
| 800 SSLClientSocket* ssl_socket = static_cast<SSLClientSocket*>(handle->socket()); | 800 SSLClientSocket* ssl_socket = static_cast<SSLClientSocket*>(handle->socket()); |
| 801 EXPECT_TRUE(ssl_socket->was_npn_negotiated()); | 801 EXPECT_TRUE(ssl_socket->was_npn_negotiated()); |
| 802 std::string proto; | 802 std::string proto; |
| 803 std::string server_protos; | 803 std::string server_protos; |
| 804 ssl_socket->GetNextProto(&proto, &server_protos); | 804 ssl_socket->GetNextProto(&proto, &server_protos); |
| 805 EXPECT_EQ(SSLClientSocket::NextProtoFromString(proto), | 805 EXPECT_EQ(SSLClientSocket::NextProtoFromString(proto), |
| 806 kProtoSPDY21); | 806 kProtoSPDY2); |
| 807 | 807 |
| 808 // TODO(rtenneti): MockClientSocket::GetPeerAddress returns 0 as the port | 808 // TODO(rtenneti): MockClientSocket::GetPeerAddress returns 0 as the port |
| 809 // number. Fix it to return port 80 and then use GetPeerAddress to AddAlias. | 809 // number. Fix it to return port 80 and then use GetPeerAddress to AddAlias. |
| 810 const addrinfo* address = test_hosts[0].addresses.head(); | 810 const addrinfo* address = test_hosts[0].addresses.head(); |
| 811 SpdySessionPoolPeer pool_peer(session_->spdy_session_pool()); | 811 SpdySessionPoolPeer pool_peer(session_->spdy_session_pool()); |
| 812 pool_peer.AddAlias(address, test_hosts[0].pair); | 812 pool_peer.AddAlias(address, test_hosts[0].pair); |
| 813 | 813 |
| 814 scoped_refptr<SpdySession> spdy_session; | 814 scoped_refptr<SpdySession> spdy_session; |
| 815 rv = session_->spdy_session_pool()->GetSpdySessionFromSocket( | 815 rv = session_->spdy_session_pool()->GetSpdySessionFromSocket( |
| 816 test_hosts[0].pair, handle.release(), BoundNetLog(), 0, | 816 test_hosts[0].pair, handle.release(), BoundNetLog(), 0, |
| 817 &spdy_session, true); | 817 &spdy_session, true); |
| 818 EXPECT_EQ(0, rv); | 818 EXPECT_EQ(0, rv); |
| 819 | 819 |
| 820 EXPECT_TRUE(session_->spdy_session_pool()->HasSession(test_hosts[0].pair)); | 820 EXPECT_TRUE(session_->spdy_session_pool()->HasSession(test_hosts[0].pair)); |
| 821 EXPECT_FALSE(session_->spdy_session_pool()->HasSession(test_hosts[1].pair)); | 821 EXPECT_FALSE(session_->spdy_session_pool()->HasSession(test_hosts[1].pair)); |
| 822 | 822 |
| 823 session_->spdy_session_pool()->CloseAllSessions(); | 823 session_->spdy_session_pool()->CloseAllSessions(); |
| 824 } | 824 } |
| 825 | 825 |
| 826 // It would be nice to also test the timeouts in SSLClientSocketPool. | 826 // It would be nice to also test the timeouts in SSLClientSocketPool. |
| 827 | 827 |
| 828 } // namespace | 828 } // namespace |
| 829 | 829 |
| 830 } // namespace net | 830 } // namespace net |
| OLD | NEW |