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

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

Issue 1320683003: Move logic to figure out if a socket can be reused into HttpStream. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase Created 5 years, 3 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
OLDNEW
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_stream_factory_impl.h" 5 #include "net/http/http_stream_factory_impl.h"
6 6
7 #include <string> 7 #include <string>
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/basictypes.h" 10 #include "base/basictypes.h"
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
74 int ReadResponseHeaders(const CompletionCallback& callback) override { 74 int ReadResponseHeaders(const CompletionCallback& callback) override {
75 return ERR_IO_PENDING; 75 return ERR_IO_PENDING;
76 } 76 }
77 int ReadResponseBody(IOBuffer* buf, 77 int ReadResponseBody(IOBuffer* buf,
78 int buf_len, 78 int buf_len,
79 const CompletionCallback& callback) override { 79 const CompletionCallback& callback) override {
80 return ERR_IO_PENDING; 80 return ERR_IO_PENDING;
81 } 81 }
82 void Close(bool not_reusable) override {} 82 void Close(bool not_reusable) override {}
83 bool IsResponseBodyComplete() const override { return false; } 83 bool IsResponseBodyComplete() const override { return false; }
84 bool CanFindEndOfResponse() const override { return false; }
85 bool IsConnectionReused() const override { return false; } 84 bool IsConnectionReused() const override { return false; }
86 void SetConnectionReused() override {} 85 void SetConnectionReused() override {}
87 bool IsConnectionReusable() const override { return false; } 86 bool CanReuseConnection() const override { return false; }
88 int64 GetTotalReceivedBytes() const override { return 0; } 87 int64 GetTotalReceivedBytes() const override { return 0; }
89 bool GetLoadTimingInfo(LoadTimingInfo* load_timing_info) const override { 88 bool GetLoadTimingInfo(LoadTimingInfo* load_timing_info) const override {
90 return false; 89 return false;
91 } 90 }
92 void GetSSLInfo(SSLInfo* ssl_info) override {} 91 void GetSSLInfo(SSLInfo* ssl_info) override {}
93 void GetSSLCertRequestInfo(SSLCertRequestInfo* cert_request_info) override {} 92 void GetSSLCertRequestInfo(SSLCertRequestInfo* cert_request_info) override {}
94 bool IsSpdyHttpStream() const override { return false; }
95 void Drain(HttpNetworkSession* session) override {} 93 void Drain(HttpNetworkSession* session) override {}
96 void SetPriority(RequestPriority priority) override {} 94 void SetPriority(RequestPriority priority) override {}
97 UploadProgress GetUploadProgress() const override { return UploadProgress(); } 95 UploadProgress GetUploadProgress() const override { return UploadProgress(); }
98 HttpStream* RenewStreamForAuth() override { return nullptr; } 96 HttpStream* RenewStreamForAuth() override { return nullptr; }
99 97
100 scoped_ptr<WebSocketStream> Upgrade() override { 98 scoped_ptr<WebSocketStream> Upgrade() override {
101 return scoped_ptr<WebSocketStream>(); 99 return scoped_ptr<WebSocketStream>();
102 } 100 }
103 101
104 private: 102 private:
(...skipping 666 matching lines...) Expand 10 before | Expand all | Expand 10 after
771 waiter.WaitForStream(); 769 waiter.WaitForStream();
772 770
773 // The stream shouldn't come from spdy as we are using different privacy mode 771 // The stream shouldn't come from spdy as we are using different privacy mode
774 EXPECT_FALSE(request->using_spdy()); 772 EXPECT_FALSE(request->using_spdy());
775 773
776 SSLConfig used_ssl_config = waiter.used_ssl_config(); 774 SSLConfig used_ssl_config = waiter.used_ssl_config();
777 EXPECT_EQ(used_ssl_config.channel_id_enabled, ssl_config.channel_id_enabled); 775 EXPECT_EQ(used_ssl_config.channel_id_enabled, ssl_config.channel_id_enabled);
778 } 776 }
779 777
780 namespace { 778 namespace {
779
781 // Return count of distinct groups in given socket pool. 780 // Return count of distinct groups in given socket pool.
782 int GetSocketPoolGroupCount(ClientSocketPool* pool) { 781 int GetSocketPoolGroupCount(ClientSocketPool* pool) {
783 int count = 0; 782 int count = 0;
784 scoped_ptr<base::DictionaryValue> dict(pool->GetInfoAsValue("", "", false)); 783 scoped_ptr<base::DictionaryValue> dict(pool->GetInfoAsValue("", "", false));
785 EXPECT_TRUE(dict != nullptr); 784 EXPECT_TRUE(dict != nullptr);
786 base::DictionaryValue* groups = nullptr; 785 base::DictionaryValue* groups = nullptr;
787 if (dict->GetDictionary("groups", &groups) && (groups != nullptr)) { 786 if (dict->GetDictionary("groups", &groups) && (groups != nullptr)) {
788 count = static_cast<int>(groups->size()); 787 count = static_cast<int>(groups->size());
789 } 788 }
790 return count; 789 return count;
791 } 790 }
791
792 // Return count of distinct spdy sessions.
793 int GetSpdySessionCount(HttpNetworkSession* session) {
794 scoped_ptr<base::Value> value(
795 session->spdy_session_pool()->SpdySessionPoolInfoToValue());
796 base::ListValue* session_list;
797 if (!value || !value->GetAsList(&session_list))
798 return -1;
799 return session_list->GetSize();
800 }
801
792 } // namespace 802 } // namespace
793 803
794 TEST_P(HttpStreamFactoryTest, PrivacyModeUsesDifferentSocketPoolGroup) { 804 TEST_P(HttpStreamFactoryTest, PrivacyModeUsesDifferentSocketPoolGroup) {
795 SpdySessionDependencies session_deps( 805 SpdySessionDependencies session_deps(
796 GetParam(), ProxyService::CreateDirect()); 806 GetParam(), ProxyService::CreateDirect());
797 807
798 StaticSocketDataProvider socket_data; 808 StaticSocketDataProvider socket_data;
799 socket_data.set_connect_data(MockConnect(ASYNC, OK)); 809 socket_data.set_connect_data(MockConnect(ASYNC, OK));
800 session_deps.socket_factory->AddSocketDataProvider(&socket_data); 810 session_deps.socket_factory->AddSocketDataProvider(&socket_data);
801 811
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
896 request_info, 906 request_info,
897 DEFAULT_PRIORITY, 907 DEFAULT_PRIORITY,
898 ssl_config, 908 ssl_config,
899 ssl_config, 909 ssl_config,
900 &waiter, 910 &waiter,
901 BoundNetLog())); 911 BoundNetLog()));
902 waiter.WaitForStream(); 912 waiter.WaitForStream();
903 EXPECT_TRUE(waiter.stream_done()); 913 EXPECT_TRUE(waiter.stream_done());
904 ASSERT_TRUE(nullptr != waiter.stream()); 914 ASSERT_TRUE(nullptr != waiter.stream());
905 EXPECT_TRUE(nullptr == waiter.websocket_stream()); 915 EXPECT_TRUE(nullptr == waiter.websocket_stream());
906 EXPECT_FALSE(waiter.stream()->IsSpdyHttpStream());
907 916
917 EXPECT_EQ(0, GetSpdySessionCount(session.get()));
908 EXPECT_EQ(1, GetSocketPoolGroupCount( 918 EXPECT_EQ(1, GetSocketPoolGroupCount(
909 session->GetTransportSocketPool(HttpNetworkSession::NORMAL_SOCKET_POOL))); 919 session->GetTransportSocketPool(HttpNetworkSession::NORMAL_SOCKET_POOL)));
910 EXPECT_EQ(0, GetSocketPoolGroupCount(session->GetSSLSocketPool( 920 EXPECT_EQ(0, GetSocketPoolGroupCount(session->GetSSLSocketPool(
911 HttpNetworkSession::NORMAL_SOCKET_POOL))); 921 HttpNetworkSession::NORMAL_SOCKET_POOL)));
912 EXPECT_EQ(0, GetSocketPoolGroupCount( 922 EXPECT_EQ(0, GetSocketPoolGroupCount(
913 session->GetTransportSocketPool( 923 session->GetTransportSocketPool(
914 HttpNetworkSession::WEBSOCKET_SOCKET_POOL))); 924 HttpNetworkSession::WEBSOCKET_SOCKET_POOL)));
915 EXPECT_EQ(0, GetSocketPoolGroupCount(session->GetSSLSocketPool( 925 EXPECT_EQ(0, GetSocketPoolGroupCount(session->GetSSLSocketPool(
916 HttpNetworkSession::WEBSOCKET_SOCKET_POOL))); 926 HttpNetworkSession::WEBSOCKET_SOCKET_POOL)));
917 EXPECT_TRUE(waiter.used_proxy_info().is_direct()); 927 EXPECT_TRUE(waiter.used_proxy_info().is_direct());
(...skipping 27 matching lines...) Expand all
945 request_info, 955 request_info,
946 DEFAULT_PRIORITY, 956 DEFAULT_PRIORITY,
947 ssl_config, 957 ssl_config,
948 ssl_config, 958 ssl_config,
949 &waiter, 959 &waiter,
950 BoundNetLog())); 960 BoundNetLog()));
951 waiter.WaitForStream(); 961 waiter.WaitForStream();
952 EXPECT_TRUE(waiter.stream_done()); 962 EXPECT_TRUE(waiter.stream_done());
953 ASSERT_TRUE(nullptr != waiter.stream()); 963 ASSERT_TRUE(nullptr != waiter.stream());
954 EXPECT_TRUE(nullptr == waiter.websocket_stream()); 964 EXPECT_TRUE(nullptr == waiter.websocket_stream());
955 EXPECT_FALSE(waiter.stream()->IsSpdyHttpStream()); 965
966 EXPECT_EQ(0, GetSpdySessionCount(session.get()));
956 EXPECT_EQ(1, GetSocketPoolGroupCount( 967 EXPECT_EQ(1, GetSocketPoolGroupCount(
957 session->GetTransportSocketPool(HttpNetworkSession::NORMAL_SOCKET_POOL))); 968 session->GetTransportSocketPool(HttpNetworkSession::NORMAL_SOCKET_POOL)));
958 EXPECT_EQ(1, GetSocketPoolGroupCount( 969 EXPECT_EQ(1, GetSocketPoolGroupCount(
959 session->GetSSLSocketPool(HttpNetworkSession::NORMAL_SOCKET_POOL))); 970 session->GetSSLSocketPool(HttpNetworkSession::NORMAL_SOCKET_POOL)));
960 EXPECT_EQ(0, GetSocketPoolGroupCount( 971 EXPECT_EQ(0, GetSocketPoolGroupCount(
961 session->GetTransportSocketPool( 972 session->GetTransportSocketPool(
962 HttpNetworkSession::WEBSOCKET_SOCKET_POOL))); 973 HttpNetworkSession::WEBSOCKET_SOCKET_POOL)));
963 EXPECT_EQ(0, GetSocketPoolGroupCount(session->GetSSLSocketPool( 974 EXPECT_EQ(0, GetSocketPoolGroupCount(session->GetSSLSocketPool(
964 HttpNetworkSession::WEBSOCKET_SOCKET_POOL))); 975 HttpNetworkSession::WEBSOCKET_SOCKET_POOL)));
965 EXPECT_TRUE(waiter.used_proxy_info().is_direct()); 976 EXPECT_TRUE(waiter.used_proxy_info().is_direct());
(...skipping 24 matching lines...) Expand all
990 request_info, 1001 request_info,
991 DEFAULT_PRIORITY, 1002 DEFAULT_PRIORITY,
992 ssl_config, 1003 ssl_config,
993 ssl_config, 1004 ssl_config,
994 &waiter, 1005 &waiter,
995 BoundNetLog())); 1006 BoundNetLog()));
996 waiter.WaitForStream(); 1007 waiter.WaitForStream();
997 EXPECT_TRUE(waiter.stream_done()); 1008 EXPECT_TRUE(waiter.stream_done());
998 ASSERT_TRUE(nullptr != waiter.stream()); 1009 ASSERT_TRUE(nullptr != waiter.stream());
999 EXPECT_TRUE(nullptr == waiter.websocket_stream()); 1010 EXPECT_TRUE(nullptr == waiter.websocket_stream());
1000 EXPECT_FALSE(waiter.stream()->IsSpdyHttpStream()); 1011
1012 EXPECT_EQ(0, GetSpdySessionCount(session.get()));
1001 EXPECT_EQ(0, GetSocketPoolGroupCount( 1013 EXPECT_EQ(0, GetSocketPoolGroupCount(
1002 session->GetTransportSocketPool(HttpNetworkSession::NORMAL_SOCKET_POOL))); 1014 session->GetTransportSocketPool(HttpNetworkSession::NORMAL_SOCKET_POOL)));
1003 EXPECT_EQ(0, GetSocketPoolGroupCount( 1015 EXPECT_EQ(0, GetSocketPoolGroupCount(
1004 session->GetSSLSocketPool(HttpNetworkSession::NORMAL_SOCKET_POOL))); 1016 session->GetSSLSocketPool(HttpNetworkSession::NORMAL_SOCKET_POOL)));
1005 EXPECT_EQ(1, GetSocketPoolGroupCount(session->GetSocketPoolForHTTPProxy( 1017 EXPECT_EQ(1, GetSocketPoolGroupCount(session->GetSocketPoolForHTTPProxy(
1006 HttpNetworkSession::NORMAL_SOCKET_POOL, 1018 HttpNetworkSession::NORMAL_SOCKET_POOL,
1007 HostPortPair("myproxy", 8888)))); 1019 HostPortPair("myproxy", 8888))));
1008 EXPECT_EQ(0, GetSocketPoolGroupCount(session->GetSocketPoolForSSLWithProxy( 1020 EXPECT_EQ(0, GetSocketPoolGroupCount(session->GetSocketPoolForSSLWithProxy(
1009 HttpNetworkSession::NORMAL_SOCKET_POOL, 1021 HttpNetworkSession::NORMAL_SOCKET_POOL,
1010 HostPortPair("myproxy", 8888)))); 1022 HostPortPair("myproxy", 8888))));
(...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after
1162 EXPECT_EQ(0, GetSocketPoolGroupCount(session->GetSocketPoolForSSLWithProxy( 1174 EXPECT_EQ(0, GetSocketPoolGroupCount(session->GetSocketPoolForSSLWithProxy(
1163 HttpNetworkSession::WEBSOCKET_SOCKET_POOL, 1175 HttpNetworkSession::WEBSOCKET_SOCKET_POOL,
1164 HostPortPair("myproxy", 8888)))); 1176 HostPortPair("myproxy", 8888))));
1165 EXPECT_FALSE(waiter.used_proxy_info().is_direct()); 1177 EXPECT_FALSE(waiter.used_proxy_info().is_direct());
1166 } 1178 }
1167 1179
1168 TEST_P(HttpStreamFactoryTest, RequestSpdyHttpStream) { 1180 TEST_P(HttpStreamFactoryTest, RequestSpdyHttpStream) {
1169 SpdySessionDependencies session_deps(GetParam(), 1181 SpdySessionDependencies session_deps(GetParam(),
1170 ProxyService::CreateDirect()); 1182 ProxyService::CreateDirect());
1171 1183
1172 MockRead mock_read(ASYNC, OK); 1184 MockRead mock_read(SYNCHRONOUS, ERR_IO_PENDING);
1173 SequencedSocketData socket_data(&mock_read, 1, nullptr, 0); 1185 SequencedSocketData socket_data(&mock_read, 1, nullptr, 0);
1174 socket_data.set_connect_data(MockConnect(ASYNC, OK)); 1186 socket_data.set_connect_data(MockConnect(ASYNC, OK));
1175 session_deps.socket_factory->AddSocketDataProvider(&socket_data); 1187 session_deps.socket_factory->AddSocketDataProvider(&socket_data);
1176 1188
1177 SSLSocketDataProvider ssl_socket_data(ASYNC, OK); 1189 SSLSocketDataProvider ssl_socket_data(ASYNC, OK);
1178 ssl_socket_data.SetNextProto(GetParam()); 1190 ssl_socket_data.SetNextProto(GetParam());
1179 session_deps.socket_factory->AddSSLSocketDataProvider(&ssl_socket_data); 1191 session_deps.socket_factory->AddSSLSocketDataProvider(&ssl_socket_data);
1180 1192
1181 HostPortPair host_port_pair("www.google.com", 443); 1193 HostPortPair host_port_pair("www.google.com", 443);
1182 scoped_refptr<HttpNetworkSession> session( 1194 scoped_refptr<HttpNetworkSession> session(
(...skipping 12 matching lines...) Expand all
1195 request_info, 1207 request_info,
1196 DEFAULT_PRIORITY, 1208 DEFAULT_PRIORITY,
1197 ssl_config, 1209 ssl_config,
1198 ssl_config, 1210 ssl_config,
1199 &waiter, 1211 &waiter,
1200 BoundNetLog())); 1212 BoundNetLog()));
1201 waiter.WaitForStream(); 1213 waiter.WaitForStream();
1202 EXPECT_TRUE(waiter.stream_done()); 1214 EXPECT_TRUE(waiter.stream_done());
1203 EXPECT_TRUE(nullptr == waiter.websocket_stream()); 1215 EXPECT_TRUE(nullptr == waiter.websocket_stream());
1204 ASSERT_TRUE(nullptr != waiter.stream()); 1216 ASSERT_TRUE(nullptr != waiter.stream());
1205 EXPECT_TRUE(waiter.stream()->IsSpdyHttpStream()); 1217
1218 EXPECT_EQ(1, GetSpdySessionCount(session.get()));
1206 EXPECT_EQ(1, GetSocketPoolGroupCount( 1219 EXPECT_EQ(1, GetSocketPoolGroupCount(
1207 session->GetTransportSocketPool(HttpNetworkSession::NORMAL_SOCKET_POOL))); 1220 session->GetTransportSocketPool(HttpNetworkSession::NORMAL_SOCKET_POOL)));
1208 EXPECT_EQ(1, GetSocketPoolGroupCount( 1221 EXPECT_EQ(1, GetSocketPoolGroupCount(
1209 session->GetSSLSocketPool(HttpNetworkSession::NORMAL_SOCKET_POOL))); 1222 session->GetSSLSocketPool(HttpNetworkSession::NORMAL_SOCKET_POOL)));
1210 EXPECT_EQ(0, GetSocketPoolGroupCount( 1223 EXPECT_EQ(0, GetSocketPoolGroupCount(
1211 session->GetTransportSocketPool( 1224 session->GetTransportSocketPool(
1212 HttpNetworkSession::WEBSOCKET_SOCKET_POOL))); 1225 HttpNetworkSession::WEBSOCKET_SOCKET_POOL)));
1213 EXPECT_EQ(0, GetSocketPoolGroupCount( 1226 EXPECT_EQ(0, GetSocketPoolGroupCount(
1214 session->GetSSLSocketPool(HttpNetworkSession::WEBSOCKET_SOCKET_POOL))); 1227 session->GetSSLSocketPool(HttpNetworkSession::WEBSOCKET_SOCKET_POOL)));
1215 EXPECT_TRUE(waiter.used_proxy_info().is_direct()); 1228 EXPECT_TRUE(waiter.used_proxy_info().is_direct());
(...skipping 196 matching lines...) Expand 10 before | Expand all | Expand 10 after
1412 EXPECT_TRUE(waiter.used_proxy_info().is_direct()); 1425 EXPECT_TRUE(waiter.used_proxy_info().is_direct());
1413 1426
1414 // Make sure there is no orphaned job. it is already canceled. 1427 // Make sure there is no orphaned job. it is already canceled.
1415 ASSERT_EQ(0u, static_cast<HttpStreamFactoryImpl*>( 1428 ASSERT_EQ(0u, static_cast<HttpStreamFactoryImpl*>(
1416 session->http_stream_factory_for_websocket())->num_orphaned_jobs()); 1429 session->http_stream_factory_for_websocket())->num_orphaned_jobs());
1417 } 1430 }
1418 1431
1419 } // namespace 1432 } // namespace
1420 1433
1421 } // namespace net 1434 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698