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

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

Issue 23856018: Changes to HttpNetworkTransaction for WebSocket Handshake (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Rename SetWebSocketHandshakeCreateHelper Created 7 years, 1 month 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
« no previous file with comments | « net/http/http_network_transaction.cc ('k') | net/http/http_stream_factory_impl_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 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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 <stdarg.h> 8 #include <stdarg.h>
9 #include <string> 9 #include <string>
10 #include <vector> 10 #include <vector>
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
57 #include "net/socket/ssl_client_socket.h" 57 #include "net/socket/ssl_client_socket.h"
58 #include "net/spdy/spdy_framer.h" 58 #include "net/spdy/spdy_framer.h"
59 #include "net/spdy/spdy_session.h" 59 #include "net/spdy/spdy_session.h"
60 #include "net/spdy/spdy_session_pool.h" 60 #include "net/spdy/spdy_session_pool.h"
61 #include "net/spdy/spdy_test_util_common.h" 61 #include "net/spdy/spdy_test_util_common.h"
62 #include "net/ssl/ssl_cert_request_info.h" 62 #include "net/ssl/ssl_cert_request_info.h"
63 #include "net/ssl/ssl_config_service.h" 63 #include "net/ssl/ssl_config_service.h"
64 #include "net/ssl/ssl_config_service_defaults.h" 64 #include "net/ssl/ssl_config_service_defaults.h"
65 #include "net/ssl/ssl_info.h" 65 #include "net/ssl/ssl_info.h"
66 #include "net/test/cert_test_util.h" 66 #include "net/test/cert_test_util.h"
67 #include "net/websockets/websocket_handshake_stream_base.h"
67 #include "testing/gtest/include/gtest/gtest.h" 68 #include "testing/gtest/include/gtest/gtest.h"
68 #include "testing/platform_test.h" 69 #include "testing/platform_test.h"
69 #include "url/gurl.h" 70 #include "url/gurl.h"
70 71
71 //----------------------------------------------------------------------------- 72 //-----------------------------------------------------------------------------
72 73
73 namespace { 74 namespace {
74 75
75 const base::string16 kBar(ASCIIToUTF16("bar")); 76 const base::string16 kBar(ASCIIToUTF16("bar"));
76 const base::string16 kBar2(ASCIIToUTF16("bar2")); 77 const base::string16 kBar2(ASCIIToUTF16("bar2"));
(...skipping 7087 matching lines...) Expand 10 before | Expand all | Expand 10 after
7164 session_deps_.proxy_service.reset( 7165 session_deps_.proxy_service.reset(
7165 ProxyService::CreateFixed(tests[i].proxy_server)); 7166 ProxyService::CreateFixed(tests[i].proxy_server));
7166 scoped_refptr<HttpNetworkSession> session( 7167 scoped_refptr<HttpNetworkSession> session(
7167 SetupSessionForGroupNameTests(GetParam(), &session_deps_)); 7168 SetupSessionForGroupNameTests(GetParam(), &session_deps_));
7168 7169
7169 HttpNetworkSessionPeer peer(session); 7170 HttpNetworkSessionPeer peer(session);
7170 CaptureGroupNameTransportSocketPool* transport_conn_pool = 7171 CaptureGroupNameTransportSocketPool* transport_conn_pool =
7171 new CaptureGroupNameTransportSocketPool(NULL, NULL); 7172 new CaptureGroupNameTransportSocketPool(NULL, NULL);
7172 CaptureGroupNameSSLSocketPool* ssl_conn_pool = 7173 CaptureGroupNameSSLSocketPool* ssl_conn_pool =
7173 new CaptureGroupNameSSLSocketPool(NULL, NULL); 7174 new CaptureGroupNameSSLSocketPool(NULL, NULL);
7174 MockClientSocketPoolManager* mock_pool_manager = 7175 scoped_ptr<MockClientSocketPoolManager> mock_pool_manager(
7175 new MockClientSocketPoolManager; 7176 new MockClientSocketPoolManager);
7176 mock_pool_manager->SetTransportSocketPool(transport_conn_pool); 7177 mock_pool_manager->SetTransportSocketPool(transport_conn_pool);
7177 mock_pool_manager->SetSSLSocketPool(ssl_conn_pool); 7178 mock_pool_manager->SetSSLSocketPool(ssl_conn_pool);
7178 peer.SetClientSocketPoolManager(mock_pool_manager); 7179 peer.SetClientSocketPoolManager(
7180 mock_pool_manager.PassAs<ClientSocketPoolManager>());
7179 7181
7180 EXPECT_EQ(ERR_IO_PENDING, 7182 EXPECT_EQ(ERR_IO_PENDING,
7181 GroupNameTransactionHelper(tests[i].url, session)); 7183 GroupNameTransactionHelper(tests[i].url, session));
7182 if (tests[i].ssl) 7184 if (tests[i].ssl)
7183 EXPECT_EQ(tests[i].expected_group_name, 7185 EXPECT_EQ(tests[i].expected_group_name,
7184 ssl_conn_pool->last_group_name_received()); 7186 ssl_conn_pool->last_group_name_received());
7185 else 7187 else
7186 EXPECT_EQ(tests[i].expected_group_name, 7188 EXPECT_EQ(tests[i].expected_group_name,
7187 transport_conn_pool->last_group_name_received()); 7189 transport_conn_pool->last_group_name_received());
7188 } 7190 }
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
7230 SetupSessionForGroupNameTests(GetParam(), &session_deps_)); 7232 SetupSessionForGroupNameTests(GetParam(), &session_deps_));
7231 7233
7232 HttpNetworkSessionPeer peer(session); 7234 HttpNetworkSessionPeer peer(session);
7233 7235
7234 HostPortPair proxy_host("http_proxy", 80); 7236 HostPortPair proxy_host("http_proxy", 80);
7235 CaptureGroupNameHttpProxySocketPool* http_proxy_pool = 7237 CaptureGroupNameHttpProxySocketPool* http_proxy_pool =
7236 new CaptureGroupNameHttpProxySocketPool(NULL, NULL); 7238 new CaptureGroupNameHttpProxySocketPool(NULL, NULL);
7237 CaptureGroupNameSSLSocketPool* ssl_conn_pool = 7239 CaptureGroupNameSSLSocketPool* ssl_conn_pool =
7238 new CaptureGroupNameSSLSocketPool(NULL, NULL); 7240 new CaptureGroupNameSSLSocketPool(NULL, NULL);
7239 7241
7240 MockClientSocketPoolManager* mock_pool_manager = 7242 scoped_ptr<MockClientSocketPoolManager> mock_pool_manager(
7241 new MockClientSocketPoolManager; 7243 new MockClientSocketPoolManager);
7242 mock_pool_manager->SetSocketPoolForHTTPProxy(proxy_host, http_proxy_pool); 7244 mock_pool_manager->SetSocketPoolForHTTPProxy(proxy_host, http_proxy_pool);
7243 mock_pool_manager->SetSocketPoolForSSLWithProxy(proxy_host, ssl_conn_pool); 7245 mock_pool_manager->SetSocketPoolForSSLWithProxy(proxy_host, ssl_conn_pool);
7244 peer.SetClientSocketPoolManager(mock_pool_manager); 7246 peer.SetClientSocketPoolManager(
7247 mock_pool_manager.PassAs<ClientSocketPoolManager>());
7245 7248
7246 EXPECT_EQ(ERR_IO_PENDING, 7249 EXPECT_EQ(ERR_IO_PENDING,
7247 GroupNameTransactionHelper(tests[i].url, session)); 7250 GroupNameTransactionHelper(tests[i].url, session));
7248 if (tests[i].ssl) 7251 if (tests[i].ssl)
7249 EXPECT_EQ(tests[i].expected_group_name, 7252 EXPECT_EQ(tests[i].expected_group_name,
7250 ssl_conn_pool->last_group_name_received()); 7253 ssl_conn_pool->last_group_name_received());
7251 else 7254 else
7252 EXPECT_EQ(tests[i].expected_group_name, 7255 EXPECT_EQ(tests[i].expected_group_name,
7253 http_proxy_pool->last_group_name_received()); 7256 http_proxy_pool->last_group_name_received());
7254 } 7257 }
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
7300 SetupSessionForGroupNameTests(GetParam(), &session_deps_)); 7303 SetupSessionForGroupNameTests(GetParam(), &session_deps_));
7301 7304
7302 HttpNetworkSessionPeer peer(session); 7305 HttpNetworkSessionPeer peer(session);
7303 7306
7304 HostPortPair proxy_host("socks_proxy", 1080); 7307 HostPortPair proxy_host("socks_proxy", 1080);
7305 CaptureGroupNameSOCKSSocketPool* socks_conn_pool = 7308 CaptureGroupNameSOCKSSocketPool* socks_conn_pool =
7306 new CaptureGroupNameSOCKSSocketPool(NULL, NULL); 7309 new CaptureGroupNameSOCKSSocketPool(NULL, NULL);
7307 CaptureGroupNameSSLSocketPool* ssl_conn_pool = 7310 CaptureGroupNameSSLSocketPool* ssl_conn_pool =
7308 new CaptureGroupNameSSLSocketPool(NULL, NULL); 7311 new CaptureGroupNameSSLSocketPool(NULL, NULL);
7309 7312
7310 MockClientSocketPoolManager* mock_pool_manager = 7313 scoped_ptr<MockClientSocketPoolManager> mock_pool_manager(
7311 new MockClientSocketPoolManager; 7314 new MockClientSocketPoolManager);
7312 mock_pool_manager->SetSocketPoolForSOCKSProxy(proxy_host, socks_conn_pool); 7315 mock_pool_manager->SetSocketPoolForSOCKSProxy(proxy_host, socks_conn_pool);
7313 mock_pool_manager->SetSocketPoolForSSLWithProxy(proxy_host, ssl_conn_pool); 7316 mock_pool_manager->SetSocketPoolForSSLWithProxy(proxy_host, ssl_conn_pool);
7314 peer.SetClientSocketPoolManager(mock_pool_manager); 7317 peer.SetClientSocketPoolManager(
7318 mock_pool_manager.PassAs<ClientSocketPoolManager>());
7315 7319
7316 scoped_ptr<HttpTransaction> trans( 7320 scoped_ptr<HttpTransaction> trans(
7317 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); 7321 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get()));
7318 7322
7319 EXPECT_EQ(ERR_IO_PENDING, 7323 EXPECT_EQ(ERR_IO_PENDING,
7320 GroupNameTransactionHelper(tests[i].url, session)); 7324 GroupNameTransactionHelper(tests[i].url, session));
7321 if (tests[i].ssl) 7325 if (tests[i].ssl)
7322 EXPECT_EQ(tests[i].expected_group_name, 7326 EXPECT_EQ(tests[i].expected_group_name,
7323 ssl_conn_pool->last_group_name_received()); 7327 ssl_conn_pool->last_group_name_received());
7324 else 7328 else
(...skipping 2031 matching lines...) Expand 10 before | Expand all | Expand 10 after
9356 // each round of multi-round authentication. 9360 // each round of multi-round authentication.
9357 HttpNetworkSessionPeer session_peer(session); 9361 HttpNetworkSessionPeer session_peer(session);
9358 ClientSocketPoolHistograms transport_pool_histograms("SmallTCP"); 9362 ClientSocketPoolHistograms transport_pool_histograms("SmallTCP");
9359 TransportClientSocketPool* transport_pool = new TransportClientSocketPool( 9363 TransportClientSocketPool* transport_pool = new TransportClientSocketPool(
9360 50, // Max sockets for pool 9364 50, // Max sockets for pool
9361 1, // Max sockets per group 9365 1, // Max sockets per group
9362 &transport_pool_histograms, 9366 &transport_pool_histograms,
9363 session_deps_.host_resolver.get(), 9367 session_deps_.host_resolver.get(),
9364 session_deps_.socket_factory.get(), 9368 session_deps_.socket_factory.get(),
9365 session_deps_.net_log); 9369 session_deps_.net_log);
9366 MockClientSocketPoolManager* mock_pool_manager = 9370 scoped_ptr<MockClientSocketPoolManager> mock_pool_manager(
9367 new MockClientSocketPoolManager; 9371 new MockClientSocketPoolManager);
9368 mock_pool_manager->SetTransportSocketPool(transport_pool); 9372 mock_pool_manager->SetTransportSocketPool(transport_pool);
9369 session_peer.SetClientSocketPoolManager(mock_pool_manager); 9373 session_peer.SetClientSocketPoolManager(
9374 mock_pool_manager.PassAs<ClientSocketPoolManager>());
9370 9375
9371 scoped_ptr<HttpTransaction> trans( 9376 scoped_ptr<HttpTransaction> trans(
9372 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); 9377 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get()));
9373 TestCompletionCallback callback; 9378 TestCompletionCallback callback;
9374 9379
9375 const MockWrite kGet( 9380 const MockWrite kGet(
9376 "GET / HTTP/1.1\r\n" 9381 "GET / HTTP/1.1\r\n"
9377 "Host: www.example.com\r\n" 9382 "Host: www.example.com\r\n"
9378 "Connection: keep-alive\r\n\r\n"); 9383 "Connection: keep-alive\r\n\r\n");
9379 const MockWrite kGetAuth( 9384 const MockWrite kGetAuth(
(...skipping 2464 matching lines...) Expand 10 before | Expand all | Expand 10 after
11844 }; 11849 };
11845 11850
11846 // Fake HttpStreamRequest that simply records calls to SetPriority() 11851 // Fake HttpStreamRequest that simply records calls to SetPriority()
11847 // and vends FakeStreams with its current priority. 11852 // and vends FakeStreams with its current priority.
11848 class FakeStreamRequest : public HttpStreamRequest, 11853 class FakeStreamRequest : public HttpStreamRequest,
11849 public base::SupportsWeakPtr<FakeStreamRequest> { 11854 public base::SupportsWeakPtr<FakeStreamRequest> {
11850 public: 11855 public:
11851 FakeStreamRequest(RequestPriority priority, 11856 FakeStreamRequest(RequestPriority priority,
11852 HttpStreamRequest::Delegate* delegate) 11857 HttpStreamRequest::Delegate* delegate)
11853 : priority_(priority), 11858 : priority_(priority),
11854 delegate_(delegate) {} 11859 delegate_(delegate),
11860 websocket_stream_create_helper_(NULL) {}
11861
11862 FakeStreamRequest(RequestPriority priority,
11863 HttpStreamRequest::Delegate* delegate,
11864 WebSocketHandshakeStreamBase::CreateHelper* create_helper)
11865 : priority_(priority),
11866 delegate_(delegate),
11867 websocket_stream_create_helper_(create_helper) {}
11855 11868
11856 virtual ~FakeStreamRequest() {} 11869 virtual ~FakeStreamRequest() {}
11857 11870
11858 RequestPriority priority() const { return priority_; } 11871 RequestPriority priority() const { return priority_; }
11859 11872
11873 const WebSocketHandshakeStreamBase::CreateHelper*
11874 websocket_stream_create_helper() const {
11875 return websocket_stream_create_helper_;
11876 }
11877
11860 // Create a new FakeStream and pass it to the request's 11878 // Create a new FakeStream and pass it to the request's
11861 // delegate. Returns a weak pointer to the FakeStream. 11879 // delegate. Returns a weak pointer to the FakeStream.
11862 base::WeakPtr<FakeStream> FinishStreamRequest() { 11880 base::WeakPtr<FakeStream> FinishStreamRequest() {
11863 FakeStream* fake_stream = new FakeStream(priority_); 11881 FakeStream* fake_stream = new FakeStream(priority_);
11864 // Do this before calling OnStreamReady() as OnStreamReady() may 11882 // Do this before calling OnStreamReady() as OnStreamReady() may
11865 // immediately delete |fake_stream|. 11883 // immediately delete |fake_stream|.
11866 base::WeakPtr<FakeStream> weak_stream = fake_stream->AsWeakPtr(); 11884 base::WeakPtr<FakeStream> weak_stream = fake_stream->AsWeakPtr();
11867 delegate_->OnStreamReady(SSLConfig(), ProxyInfo(), fake_stream); 11885 delegate_->OnStreamReady(SSLConfig(), ProxyInfo(), fake_stream);
11868 return weak_stream; 11886 return weak_stream;
11869 } 11887 }
(...skipping 21 matching lines...) Expand all
11891 return kProtoUnknown; 11909 return kProtoUnknown;
11892 } 11910 }
11893 11911
11894 virtual bool using_spdy() const OVERRIDE { 11912 virtual bool using_spdy() const OVERRIDE {
11895 return false; 11913 return false;
11896 } 11914 }
11897 11915
11898 private: 11916 private:
11899 RequestPriority priority_; 11917 RequestPriority priority_;
11900 HttpStreamRequest::Delegate* const delegate_; 11918 HttpStreamRequest::Delegate* const delegate_;
11919 WebSocketHandshakeStreamBase::CreateHelper* websocket_stream_create_helper_;
11901 11920
11902 DISALLOW_COPY_AND_ASSIGN(FakeStreamRequest); 11921 DISALLOW_COPY_AND_ASSIGN(FakeStreamRequest);
11903 }; 11922 };
11904 11923
11905 // Fake HttpStreamFactory that vends FakeStreamRequests. 11924 // Fake HttpStreamFactory that vends FakeStreamRequests.
11906 class FakeStreamFactory : public HttpStreamFactory { 11925 class FakeStreamFactory : public HttpStreamFactory {
11907 public: 11926 public:
11908 FakeStreamFactory() {} 11927 FakeStreamFactory() {}
11909 virtual ~FakeStreamFactory() {} 11928 virtual ~FakeStreamFactory() {}
11910 11929
(...skipping 16 matching lines...) Expand all
11927 } 11946 }
11928 11947
11929 virtual HttpStreamRequest* RequestWebSocketHandshakeStream( 11948 virtual HttpStreamRequest* RequestWebSocketHandshakeStream(
11930 const HttpRequestInfo& info, 11949 const HttpRequestInfo& info,
11931 RequestPriority priority, 11950 RequestPriority priority,
11932 const SSLConfig& server_ssl_config, 11951 const SSLConfig& server_ssl_config,
11933 const SSLConfig& proxy_ssl_config, 11952 const SSLConfig& proxy_ssl_config,
11934 HttpStreamRequest::Delegate* delegate, 11953 HttpStreamRequest::Delegate* delegate,
11935 WebSocketHandshakeStreamBase::CreateHelper* create_helper, 11954 WebSocketHandshakeStreamBase::CreateHelper* create_helper,
11936 const BoundNetLog& net_log) OVERRIDE { 11955 const BoundNetLog& net_log) OVERRIDE {
11937 ADD_FAILURE(); 11956 FakeStreamRequest* fake_request =
11938 return NULL; 11957 new FakeStreamRequest(priority, delegate, create_helper);
11958 last_stream_request_ = fake_request->AsWeakPtr();
11959 return fake_request;
11939 } 11960 }
11940 11961
11941 virtual void PreconnectStreams(int num_streams, 11962 virtual void PreconnectStreams(int num_streams,
11942 const HttpRequestInfo& info, 11963 const HttpRequestInfo& info,
11943 RequestPriority priority, 11964 RequestPriority priority,
11944 const SSLConfig& server_ssl_config, 11965 const SSLConfig& server_ssl_config,
11945 const SSLConfig& proxy_ssl_config) OVERRIDE { 11966 const SSLConfig& proxy_ssl_config) OVERRIDE {
11946 ADD_FAILURE(); 11967 ADD_FAILURE();
11947 } 11968 }
11948 11969
11949 virtual base::Value* PipelineInfoToValue() const OVERRIDE { 11970 virtual base::Value* PipelineInfoToValue() const OVERRIDE {
11950 ADD_FAILURE(); 11971 ADD_FAILURE();
11951 return NULL; 11972 return NULL;
11952 } 11973 }
11953 11974
11954 virtual const HostMappingRules* GetHostMappingRules() const OVERRIDE { 11975 virtual const HostMappingRules* GetHostMappingRules() const OVERRIDE {
11955 ADD_FAILURE(); 11976 ADD_FAILURE();
11956 return NULL; 11977 return NULL;
11957 } 11978 }
11958 11979
11959 private: 11980 private:
11960 base::WeakPtr<FakeStreamRequest> last_stream_request_; 11981 base::WeakPtr<FakeStreamRequest> last_stream_request_;
11961 11982
11962 DISALLOW_COPY_AND_ASSIGN(FakeStreamFactory); 11983 DISALLOW_COPY_AND_ASSIGN(FakeStreamFactory);
11963 }; 11984 };
11964 11985
11986 // TODO(yhirano): Split this class out into a net/websockets file, if it is
11987 // worth doing.
11988 class FakeWebSocketStreamCreateHelper :
11989 public WebSocketHandshakeStreamBase::CreateHelper {
11990 public:
11991 virtual WebSocketHandshakeStreamBase* CreateBasicStream(
11992 ClientSocketHandle* connection,
11993 bool using_proxy) OVERRIDE {
11994 NOTREACHED();
11995 return NULL;
11996 }
11997
11998 virtual WebSocketHandshakeStreamBase* CreateSpdyStream(
11999 const base::WeakPtr<SpdySession>& session,
12000 bool use_relative_url) OVERRIDE {
12001 NOTREACHED();
12002 return NULL;
12003 };
12004
12005 virtual ~FakeWebSocketStreamCreateHelper() {}
12006
12007 virtual scoped_ptr<WebSocketStream> Upgrade() {
12008 NOTREACHED();
12009 return scoped_ptr<WebSocketStream>();
12010 }
12011 };
12012
11965 } // namespace 12013 } // namespace
11966 12014
11967 // Make sure that HttpNetworkTransaction passes on its priority to its 12015 // Make sure that HttpNetworkTransaction passes on its priority to its
11968 // stream request on start. 12016 // stream request on start.
11969 TEST_P(HttpNetworkTransactionTest, SetStreamRequestPriorityOnStart) { 12017 TEST_P(HttpNetworkTransactionTest, SetStreamRequestPriorityOnStart) {
11970 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); 12018 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_));
11971 HttpNetworkSessionPeer peer(session); 12019 HttpNetworkSessionPeer peer(session);
11972 FakeStreamFactory* fake_factory = new FakeStreamFactory(); 12020 FakeStreamFactory* fake_factory = new FakeStreamFactory();
11973 peer.SetHttpStreamFactory(fake_factory); 12021 peer.SetHttpStreamFactory(scoped_ptr<HttpStreamFactory>(fake_factory));
11974 12022
11975 HttpNetworkTransaction trans(LOW, session); 12023 HttpNetworkTransaction trans(LOW, session);
11976 12024
11977 ASSERT_TRUE(fake_factory->last_stream_request() == NULL); 12025 ASSERT_TRUE(fake_factory->last_stream_request() == NULL);
11978 12026
11979 HttpRequestInfo request; 12027 HttpRequestInfo request;
11980 TestCompletionCallback callback; 12028 TestCompletionCallback callback;
11981 EXPECT_EQ(ERR_IO_PENDING, 12029 EXPECT_EQ(ERR_IO_PENDING,
11982 trans.Start(&request, callback.callback(), BoundNetLog())); 12030 trans.Start(&request, callback.callback(), BoundNetLog()));
11983 12031
11984 base::WeakPtr<FakeStreamRequest> fake_request = 12032 base::WeakPtr<FakeStreamRequest> fake_request =
11985 fake_factory->last_stream_request(); 12033 fake_factory->last_stream_request();
11986 ASSERT_TRUE(fake_request != NULL); 12034 ASSERT_TRUE(fake_request != NULL);
11987 EXPECT_EQ(LOW, fake_request->priority()); 12035 EXPECT_EQ(LOW, fake_request->priority());
11988 } 12036 }
11989 12037
11990 // Make sure that HttpNetworkTransaction passes on its priority 12038 // Make sure that HttpNetworkTransaction passes on its priority
11991 // updates to its stream request. 12039 // updates to its stream request.
11992 TEST_P(HttpNetworkTransactionTest, SetStreamRequestPriority) { 12040 TEST_P(HttpNetworkTransactionTest, SetStreamRequestPriority) {
11993 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); 12041 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_));
11994 HttpNetworkSessionPeer peer(session); 12042 HttpNetworkSessionPeer peer(session);
11995 FakeStreamFactory* fake_factory = new FakeStreamFactory(); 12043 FakeStreamFactory* fake_factory = new FakeStreamFactory();
11996 peer.SetHttpStreamFactory(fake_factory); 12044 peer.SetHttpStreamFactory(scoped_ptr<HttpStreamFactory>(fake_factory));
11997 12045
11998 HttpNetworkTransaction trans(LOW, session); 12046 HttpNetworkTransaction trans(LOW, session);
11999 12047
12000 HttpRequestInfo request; 12048 HttpRequestInfo request;
12001 TestCompletionCallback callback; 12049 TestCompletionCallback callback;
12002 EXPECT_EQ(ERR_IO_PENDING, 12050 EXPECT_EQ(ERR_IO_PENDING,
12003 trans.Start(&request, callback.callback(), BoundNetLog())); 12051 trans.Start(&request, callback.callback(), BoundNetLog()));
12004 12052
12005 base::WeakPtr<FakeStreamRequest> fake_request = 12053 base::WeakPtr<FakeStreamRequest> fake_request =
12006 fake_factory->last_stream_request(); 12054 fake_factory->last_stream_request();
12007 ASSERT_TRUE(fake_request != NULL); 12055 ASSERT_TRUE(fake_request != NULL);
12008 EXPECT_EQ(LOW, fake_request->priority()); 12056 EXPECT_EQ(LOW, fake_request->priority());
12009 12057
12010 trans.SetPriority(LOWEST); 12058 trans.SetPriority(LOWEST);
12011 ASSERT_TRUE(fake_request != NULL); 12059 ASSERT_TRUE(fake_request != NULL);
12012 EXPECT_EQ(LOWEST, fake_request->priority()); 12060 EXPECT_EQ(LOWEST, fake_request->priority());
12013 } 12061 }
12014 12062
12015 // Make sure that HttpNetworkTransaction passes on its priority 12063 // Make sure that HttpNetworkTransaction passes on its priority
12016 // updates to its stream. 12064 // updates to its stream.
12017 TEST_P(HttpNetworkTransactionTest, SetStreamPriority) { 12065 TEST_P(HttpNetworkTransactionTest, SetStreamPriority) {
12018 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); 12066 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_));
12019 HttpNetworkSessionPeer peer(session); 12067 HttpNetworkSessionPeer peer(session);
12020 FakeStreamFactory* fake_factory = new FakeStreamFactory(); 12068 FakeStreamFactory* fake_factory = new FakeStreamFactory();
12021 peer.SetHttpStreamFactory(fake_factory); 12069 peer.SetHttpStreamFactory(scoped_ptr<HttpStreamFactory>(fake_factory));
12022 12070
12023 HttpNetworkTransaction trans(LOW, session); 12071 HttpNetworkTransaction trans(LOW, session);
12024 12072
12025 HttpRequestInfo request; 12073 HttpRequestInfo request;
12026 TestCompletionCallback callback; 12074 TestCompletionCallback callback;
12027 EXPECT_EQ(ERR_IO_PENDING, 12075 EXPECT_EQ(ERR_IO_PENDING,
12028 trans.Start(&request, callback.callback(), BoundNetLog())); 12076 trans.Start(&request, callback.callback(), BoundNetLog()));
12029 12077
12030 base::WeakPtr<FakeStreamRequest> fake_request = 12078 base::WeakPtr<FakeStreamRequest> fake_request =
12031 fake_factory->last_stream_request(); 12079 fake_factory->last_stream_request();
12032 ASSERT_TRUE(fake_request != NULL); 12080 ASSERT_TRUE(fake_request != NULL);
12033 base::WeakPtr<FakeStream> fake_stream = fake_request->FinishStreamRequest(); 12081 base::WeakPtr<FakeStream> fake_stream = fake_request->FinishStreamRequest();
12034 ASSERT_TRUE(fake_stream != NULL); 12082 ASSERT_TRUE(fake_stream != NULL);
12035 EXPECT_EQ(LOW, fake_stream->priority()); 12083 EXPECT_EQ(LOW, fake_stream->priority());
12036 12084
12037 trans.SetPriority(LOWEST); 12085 trans.SetPriority(LOWEST);
12038 EXPECT_EQ(LOWEST, fake_stream->priority()); 12086 EXPECT_EQ(LOWEST, fake_stream->priority());
12039 } 12087 }
12040 12088
12089 TEST_P(HttpNetworkTransactionTest, CreateWebSocketHandshakeStream) {
12090 // The same logic needs to be tested for both ws: and wss: schemes, but this
12091 // test is already parameterised on NextProto, so it uses a loop to verify
12092 // that the different schemes work.
12093 std::string test_cases[] = {"ws://www.google.com/", "wss://www.google.com/"};
12094 for (size_t i = 0; i < arraysize(test_cases); ++i) {
12095 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_));
12096 HttpNetworkSessionPeer peer(session);
12097 FakeStreamFactory* fake_factory = new FakeStreamFactory();
12098 FakeWebSocketStreamCreateHelper websocket_stream_create_helper;
12099 peer.SetWebSocketHandshakeStreamFactory(
12100 scoped_ptr<HttpStreamFactory>(fake_factory));
12101
12102 HttpNetworkTransaction trans(LOW, session);
12103 trans.SetWebSocketHandshakeStreamCreateHelper(
12104 &websocket_stream_create_helper);
12105
12106 HttpRequestInfo request;
12107 TestCompletionCallback callback;
12108 request.method = "GET";
12109 request.url = GURL(test_cases[i]);
12110
12111 EXPECT_EQ(ERR_IO_PENDING,
12112 trans.Start(&request, callback.callback(), BoundNetLog()));
12113
12114 base::WeakPtr<FakeStreamRequest> fake_request =
12115 fake_factory->last_stream_request();
12116 ASSERT_TRUE(fake_request != NULL);
12117 EXPECT_EQ(&websocket_stream_create_helper,
12118 fake_request->websocket_stream_create_helper());
12119 }
12120 }
12121
12041 // Tests that when a used socket is returned to the SSL socket pool, it's closed 12122 // Tests that when a used socket is returned to the SSL socket pool, it's closed
12042 // if the transport socket pool is stalled on the global socket limit. 12123 // if the transport socket pool is stalled on the global socket limit.
12043 TEST_P(HttpNetworkTransactionTest, CloseSSLSocketOnIdleForHttpRequest) { 12124 TEST_P(HttpNetworkTransactionTest, CloseSSLSocketOnIdleForHttpRequest) {
12044 ClientSocketPoolManager::set_max_sockets_per_group( 12125 ClientSocketPoolManager::set_max_sockets_per_group(
12045 HttpNetworkSession::NORMAL_SOCKET_POOL, 1); 12126 HttpNetworkSession::NORMAL_SOCKET_POOL, 1);
12046 ClientSocketPoolManager::set_max_sockets_per_pool( 12127 ClientSocketPoolManager::set_max_sockets_per_pool(
12047 HttpNetworkSession::NORMAL_SOCKET_POOL, 1); 12128 HttpNetworkSession::NORMAL_SOCKET_POOL, 1);
12048 12129
12049 // Set up SSL request. 12130 // Set up SSL request.
12050 12131
(...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after
12196 // established, to let the HTTP request start. 12277 // established, to let the HTTP request start.
12197 ASSERT_EQ(OK, http_callback.WaitForResult()); 12278 ASSERT_EQ(OK, http_callback.WaitForResult());
12198 std::string response_data; 12279 std::string response_data;
12199 ASSERT_EQ(OK, ReadTransaction(http_trans.get(), &response_data)); 12280 ASSERT_EQ(OK, ReadTransaction(http_trans.get(), &response_data));
12200 EXPECT_EQ("falafel", response_data); 12281 EXPECT_EQ("falafel", response_data);
12201 12282
12202 EXPECT_EQ(1, GetIdleSocketCountInTransportSocketPool(session)); 12283 EXPECT_EQ(1, GetIdleSocketCountInTransportSocketPool(session));
12203 } 12284 }
12204 12285
12205 } // namespace net 12286 } // namespace net
OLDNEW
« no previous file with comments | « net/http/http_network_transaction.cc ('k') | net/http/http_stream_factory_impl_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698