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

Side by Side Diff: net/http/http_network_transaction_unittest.cc

Issue 7484051: Merging SPDY IP connection pooling changes from the trunk (r93105) (Closed) Base URL: svn://svn.chromium.org/chrome/branches/782/src/
Patch Set: '' Created 9 years, 5 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 | Annotate | Revision Log
« no previous file with comments | « no previous file | net/socket/ssl_client_socket_pool_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) 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/http/http_network_transaction.h" 5 #include "net/http/http_network_transaction.h"
6 6
7 #include <math.h> // ceil 7 #include <math.h> // ceil
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/basictypes.h" 10 #include "base/basictypes.h"
(...skipping 8666 matching lines...) Expand 10 before | Expand all | Expand 10 after
8677 8677
8678 // Now that the new handshake has failed, ensure that the client 8678 // Now that the new handshake has failed, ensure that the client
8679 // certificate was removed from the client auth cache. 8679 // certificate was removed from the client auth cache.
8680 ASSERT_FALSE(session->ssl_client_auth_cache()->Lookup("proxy:70", 8680 ASSERT_FALSE(session->ssl_client_auth_cache()->Lookup("proxy:70",
8681 &client_cert)); 8681 &client_cert));
8682 ASSERT_FALSE(session->ssl_client_auth_cache()->Lookup("www.example.com:443", 8682 ASSERT_FALSE(session->ssl_client_auth_cache()->Lookup("www.example.com:443",
8683 &client_cert)); 8683 &client_cert));
8684 } 8684 }
8685 } 8685 }
8686 8686
8687 void IPPoolingPreloadHostCache(MockCachingHostResolver* host_resolver,
8688 SpdySessionPoolPeer* pool_peer) {
8689 const int kTestPort = 443;
8690 struct TestHosts {
8691 std::string name;
8692 std::string iplist;
8693 } test_hosts[] = {
8694 { "www.google.com", "127.0.0.1"},
8695 };
8696
8697 // Preload cache entries into HostCache.
8698 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(test_hosts); i++) {
8699 host_resolver->rules()->AddIPLiteralRule(test_hosts[i].name,
8700 test_hosts[i].iplist, "");
8701
8702 AddressList addresses;
8703 // This test requires that the HostResolver cache be populated. Normal
8704 // code would have done this already, but we do it manually.
8705 HostResolver::RequestInfo info(HostPortPair(test_hosts[i].name, kTestPort));
8706 host_resolver->Resolve(
8707 info, &addresses, NULL, NULL, BoundNetLog());
8708
8709 // Setup a HostPortProxyPair
8710 HostPortProxyPair pair = HostPortProxyPair(
8711 HostPortPair(test_hosts[i].name, kTestPort), ProxyServer::Direct());
8712
8713 const addrinfo* address = addresses.head();
8714 pool_peer->AddAlias(address, pair);
8715 }
8716 }
8717
8687 TEST_F(HttpNetworkTransactionTest, UseIPConnectionPooling) { 8718 TEST_F(HttpNetworkTransactionTest, UseIPConnectionPooling) {
8688 HttpStreamFactory::set_use_alternate_protocols(true); 8719 HttpStreamFactory::set_use_alternate_protocols(true);
8689 HttpStreamFactory::set_next_protos(kExpectedNPNString); 8720 HttpStreamFactory::set_next_protos(kExpectedNPNString);
8690 DisableSpdySessionDomainVerification(); 8721 DisableSpdySessionDomainVerification();
8691 8722
8692 // Set up a special HttpNetworkSession with a MockCachingHostResolver. 8723 // Set up a special HttpNetworkSession with a MockCachingHostResolver.
8693 SessionDependencies session_deps; 8724 SessionDependencies session_deps;
8694 MockCachingHostResolver host_resolver; 8725 MockCachingHostResolver host_resolver;
8695 net::HttpNetworkSession::Params params; 8726 net::HttpNetworkSession::Params params;
8696 params.client_socket_factory = &session_deps.socket_factory; 8727 params.client_socket_factory = &session_deps.socket_factory;
8697 params.host_resolver = &host_resolver; 8728 params.host_resolver = &host_resolver;
8698 params.cert_verifier = session_deps.cert_verifier.get(); 8729 params.cert_verifier = session_deps.cert_verifier.get();
8699 params.proxy_service = session_deps.proxy_service.get(); 8730 params.proxy_service = session_deps.proxy_service.get();
8700 params.ssl_config_service = session_deps.ssl_config_service; 8731 params.ssl_config_service = session_deps.ssl_config_service;
8701 params.http_auth_handler_factory = 8732 params.http_auth_handler_factory =
8702 session_deps.http_auth_handler_factory.get(); 8733 session_deps.http_auth_handler_factory.get();
8703 params.net_log = session_deps.net_log; 8734 params.net_log = session_deps.net_log;
8704 scoped_refptr<HttpNetworkSession> session(new HttpNetworkSession(params)); 8735 scoped_refptr<HttpNetworkSession> session(new HttpNetworkSession(params));
8736 SpdySessionPoolPeer pool_peer(session->spdy_session_pool());
8705 8737
8706 SSLSocketDataProvider ssl(true, OK); 8738 SSLSocketDataProvider ssl(true, OK);
8707 ssl.next_proto_status = SSLClientSocket::kNextProtoNegotiated; 8739 ssl.next_proto_status = SSLClientSocket::kNextProtoNegotiated;
8708 ssl.next_proto = "spdy/2"; 8740 ssl.next_proto = "spdy/2";
8709 ssl.was_npn_negotiated = true; 8741 ssl.was_npn_negotiated = true;
8710 session_deps.socket_factory.AddSSLSocketDataProvider(&ssl); 8742 session_deps.socket_factory.AddSSLSocketDataProvider(&ssl);
8711 8743
8712 scoped_ptr<spdy::SpdyFrame> host1_req(ConstructSpdyGet( 8744 scoped_ptr<spdy::SpdyFrame> host1_req(ConstructSpdyGet(
8713 "https://www.google.com", false, 1, LOWEST)); 8745 "https://www.google.com", false, 1, LOWEST));
8714 scoped_ptr<spdy::SpdyFrame> host2_req(ConstructSpdyGet( 8746 scoped_ptr<spdy::SpdyFrame> host2_req(ConstructSpdyGet(
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
8754 std::string response_data; 8786 std::string response_data;
8755 ASSERT_EQ(OK, ReadTransaction(&trans1, &response_data)); 8787 ASSERT_EQ(OK, ReadTransaction(&trans1, &response_data));
8756 EXPECT_EQ("hello!", response_data); 8788 EXPECT_EQ("hello!", response_data);
8757 8789
8758 // Preload www.gmail.com into HostCache. 8790 // Preload www.gmail.com into HostCache.
8759 HostPortPair host_port("www.gmail.com", 443); 8791 HostPortPair host_port("www.gmail.com", 443);
8760 HostResolver::RequestInfo resolve_info(host_port); 8792 HostResolver::RequestInfo resolve_info(host_port);
8761 AddressList ignored; 8793 AddressList ignored;
8762 host_resolver.Resolve(resolve_info, &ignored, NULL, NULL, BoundNetLog()); 8794 host_resolver.Resolve(resolve_info, &ignored, NULL, NULL, BoundNetLog());
8763 8795
8796 IPPoolingPreloadHostCache(&host_resolver, &pool_peer);
8797
8764 HttpRequestInfo request2; 8798 HttpRequestInfo request2;
8765 request2.method = "GET"; 8799 request2.method = "GET";
8766 request2.url = GURL("https://www.gmail.com/"); 8800 request2.url = GURL("https://www.gmail.com/");
8767 request2.load_flags = 0; 8801 request2.load_flags = 0;
8768 HttpNetworkTransaction trans2(session); 8802 HttpNetworkTransaction trans2(session);
8769 8803
8770 rv = trans2.Start(&request2, &callback, BoundNetLog()); 8804 rv = trans2.Start(&request2, &callback, BoundNetLog());
8771 EXPECT_EQ(ERR_IO_PENDING, rv); 8805 EXPECT_EQ(ERR_IO_PENDING, rv);
8772 EXPECT_EQ(OK, callback.WaitForResult()); 8806 EXPECT_EQ(OK, callback.WaitForResult());
8773 8807
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
8813 } 8847 }
8814 8848
8815 virtual void AddObserver(Observer* observer) { 8849 virtual void AddObserver(Observer* observer) {
8816 return host_resolver_.AddObserver(observer); 8850 return host_resolver_.AddObserver(observer);
8817 } 8851 }
8818 8852
8819 virtual void RemoveObserver(Observer* observer) { 8853 virtual void RemoveObserver(Observer* observer) {
8820 return host_resolver_.RemoveObserver(observer); 8854 return host_resolver_.RemoveObserver(observer);
8821 } 8855 }
8822 8856
8857 MockCachingHostResolver* GetMockHostResolver() {
8858 return &host_resolver_;
8859 }
8860
8823 private: 8861 private:
8824 MockCachingHostResolver host_resolver_; 8862 MockCachingHostResolver host_resolver_;
8825 const HostPortPair host_port_; 8863 const HostPortPair host_port_;
8826 }; 8864 };
8827 8865
8828 TEST_F(HttpNetworkTransactionTest, 8866 TEST_F(HttpNetworkTransactionTest,
8829 UseIPConnectionPoolingWithHostCacheExpiration) { 8867 UseIPConnectionPoolingWithHostCacheExpiration) {
8830 HttpStreamFactory::set_use_alternate_protocols(true); 8868 HttpStreamFactory::set_use_alternate_protocols(true);
8831 HttpStreamFactory::set_next_protos(kExpectedNPNString); 8869 HttpStreamFactory::set_next_protos(kExpectedNPNString);
8832 DisableSpdySessionDomainVerification(); 8870 DisableSpdySessionDomainVerification();
8833 8871
8834 // Set up a special HttpNetworkSession with a OneTimeCachingHostResolver. 8872 // Set up a special HttpNetworkSession with a OneTimeCachingHostResolver.
8835 SessionDependencies session_deps; 8873 SessionDependencies session_deps;
8836 OneTimeCachingHostResolver host_resolver(HostPortPair("www.gmail.com", 443)); 8874 OneTimeCachingHostResolver host_resolver(HostPortPair("www.gmail.com", 443));
8837 net::HttpNetworkSession::Params params; 8875 net::HttpNetworkSession::Params params;
8838 params.client_socket_factory = &session_deps.socket_factory; 8876 params.client_socket_factory = &session_deps.socket_factory;
8839 params.host_resolver = &host_resolver; 8877 params.host_resolver = &host_resolver;
8840 params.cert_verifier = session_deps.cert_verifier.get(); 8878 params.cert_verifier = session_deps.cert_verifier.get();
8841 params.proxy_service = session_deps.proxy_service.get(); 8879 params.proxy_service = session_deps.proxy_service.get();
8842 params.ssl_config_service = session_deps.ssl_config_service; 8880 params.ssl_config_service = session_deps.ssl_config_service;
8843 params.http_auth_handler_factory = 8881 params.http_auth_handler_factory =
8844 session_deps.http_auth_handler_factory.get(); 8882 session_deps.http_auth_handler_factory.get();
8845 params.net_log = session_deps.net_log; 8883 params.net_log = session_deps.net_log;
8846 scoped_refptr<HttpNetworkSession> session(new HttpNetworkSession(params)); 8884 scoped_refptr<HttpNetworkSession> session(new HttpNetworkSession(params));
8885 SpdySessionPoolPeer pool_peer(session->spdy_session_pool());
8847 8886
8848 SSLSocketDataProvider ssl(true, OK); 8887 SSLSocketDataProvider ssl(true, OK);
8849 ssl.next_proto_status = SSLClientSocket::kNextProtoNegotiated; 8888 ssl.next_proto_status = SSLClientSocket::kNextProtoNegotiated;
8850 ssl.next_proto = "spdy/2"; 8889 ssl.next_proto = "spdy/2";
8851 ssl.was_npn_negotiated = true; 8890 ssl.was_npn_negotiated = true;
8852 session_deps.socket_factory.AddSSLSocketDataProvider(&ssl); 8891 session_deps.socket_factory.AddSSLSocketDataProvider(&ssl);
8853 8892
8854 scoped_ptr<spdy::SpdyFrame> host1_req(ConstructSpdyGet( 8893 scoped_ptr<spdy::SpdyFrame> host1_req(ConstructSpdyGet(
8855 "https://www.google.com", false, 1, LOWEST)); 8894 "https://www.google.com", false, 1, LOWEST));
8856 scoped_ptr<spdy::SpdyFrame> host2_req(ConstructSpdyGet( 8895 scoped_ptr<spdy::SpdyFrame> host2_req(ConstructSpdyGet(
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
8901 HostResolver::RequestInfo resolve_info(HostPortPair("www.gmail.com", 443)); 8940 HostResolver::RequestInfo resolve_info(HostPortPair("www.gmail.com", 443));
8902 AddressList ignored; 8941 AddressList ignored;
8903 host_resolver.Resolve(resolve_info, &ignored, NULL, NULL, BoundNetLog()); 8942 host_resolver.Resolve(resolve_info, &ignored, NULL, NULL, BoundNetLog());
8904 8943
8905 HttpRequestInfo request2; 8944 HttpRequestInfo request2;
8906 request2.method = "GET"; 8945 request2.method = "GET";
8907 request2.url = GURL("https://www.gmail.com/"); 8946 request2.url = GURL("https://www.gmail.com/");
8908 request2.load_flags = 0; 8947 request2.load_flags = 0;
8909 HttpNetworkTransaction trans2(session); 8948 HttpNetworkTransaction trans2(session);
8910 8949
8950 IPPoolingPreloadHostCache(host_resolver.GetMockHostResolver(), &pool_peer);
8951
8911 rv = trans2.Start(&request2, &callback, BoundNetLog()); 8952 rv = trans2.Start(&request2, &callback, BoundNetLog());
8912 EXPECT_EQ(ERR_IO_PENDING, rv); 8953 EXPECT_EQ(ERR_IO_PENDING, rv);
8913 EXPECT_EQ(OK, callback.WaitForResult()); 8954 EXPECT_EQ(OK, callback.WaitForResult());
8914 8955
8915 response = trans2.GetResponseInfo(); 8956 response = trans2.GetResponseInfo();
8916 ASSERT_TRUE(response != NULL); 8957 ASSERT_TRUE(response != NULL);
8917 ASSERT_TRUE(response->headers != NULL); 8958 ASSERT_TRUE(response->headers != NULL);
8918 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); 8959 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine());
8919 EXPECT_TRUE(response->was_fetched_via_spdy); 8960 EXPECT_TRUE(response->was_fetched_via_spdy);
8920 EXPECT_TRUE(response->was_npn_negotiated); 8961 EXPECT_TRUE(response->was_npn_negotiated);
8921 ASSERT_EQ(OK, ReadTransaction(&trans2, &response_data)); 8962 ASSERT_EQ(OK, ReadTransaction(&trans2, &response_data));
8922 EXPECT_EQ("hello!", response_data); 8963 EXPECT_EQ("hello!", response_data);
8923 8964
8924 HttpStreamFactory::set_next_protos(""); 8965 HttpStreamFactory::set_next_protos("");
8925 HttpStreamFactory::set_use_alternate_protocols(false); 8966 HttpStreamFactory::set_use_alternate_protocols(false);
8926 } 8967 }
8927 8968
8928 } // namespace net 8969 } // namespace net
OLDNEW
« no previous file with comments | « no previous file | net/socket/ssl_client_socket_pool_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698