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

Side by Side Diff: net/spdy/spdy_session_unittest.cc

Issue 18796003: When an idle socket is added back to a socket pool, check for stalled jobs in lower pools (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: sync Created 7 years, 4 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
« net/spdy/spdy_session.cc ('K') | « net/spdy/spdy_session.cc ('k') | no next file » | 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) 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/spdy/spdy_session.h" 5 #include "net/spdy/spdy_session.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/callback.h" 8 #include "base/callback.h"
9 #include "base/memory/scoped_ptr.h" 9 #include "base/memory/scoped_ptr.h"
10 #include "base/run_loop.h" 10 #include "base/run_loop.h"
(...skipping 2832 matching lines...) Expand 10 before | Expand all | Expand 10 after
2843 EXPECT_TRUE(pool->IsStalled()); 2843 EXPECT_TRUE(pool->IsStalled());
2844 2844
2845 // The socket pool should close the connection asynchronously and establish a 2845 // The socket pool should close the connection asynchronously and establish a
2846 // new connection. 2846 // new connection.
2847 EXPECT_EQ(OK, callback3.WaitForResult()); 2847 EXPECT_EQ(OK, callback3.WaitForResult());
2848 EXPECT_FALSE(pool->IsStalled()); 2848 EXPECT_FALSE(pool->IsStalled());
2849 EXPECT_TRUE(session1 == NULL); 2849 EXPECT_TRUE(session1 == NULL);
2850 EXPECT_TRUE(session2 == NULL); 2850 EXPECT_TRUE(session2 == NULL);
2851 } 2851 }
2852 2852
2853 // Tests that a non-SPDY request can't close a SPDY session that's currently in 2853 // Tests that when a SPDY session becomes idle, it closes itself if there is
2854 // use. 2854 // a lower layer pool stalled on the per-pool socket limit.
2855 TEST_P(SpdySessionTest, CloseOneIdleConnectionFailsWhenSessionInUse) { 2855 TEST_P(SpdySessionTest, CloseSessionOnIdleWhenPoolStalled) {
2856 ClientSocketPoolManager::set_max_sockets_per_group( 2856 ClientSocketPoolManager::set_max_sockets_per_group(
2857 HttpNetworkSession::NORMAL_SOCKET_POOL, 1); 2857 HttpNetworkSession::NORMAL_SOCKET_POOL, 1);
2858 ClientSocketPoolManager::set_max_sockets_per_pool( 2858 ClientSocketPoolManager::set_max_sockets_per_pool(
2859 HttpNetworkSession::NORMAL_SOCKET_POOL, 1); 2859 HttpNetworkSession::NORMAL_SOCKET_POOL, 1);
2860 2860
2861 MockConnect connect_data(SYNCHRONOUS, OK); 2861 MockConnect connect_data(SYNCHRONOUS, OK);
2862 MockRead reads[] = { 2862 MockRead reads[] = {
2863 MockRead(SYNCHRONOUS, ERR_IO_PENDING) // Stall forever. 2863 MockRead(SYNCHRONOUS, ERR_IO_PENDING) // Stall forever.
2864 }; 2864 };
2865 scoped_ptr<SpdyFrame> req1( 2865 scoped_ptr<SpdyFrame> req1(
2866 spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, LOWEST, true)); 2866 spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, LOWEST, true));
2867 scoped_ptr<SpdyFrame> cancel1( 2867 scoped_ptr<SpdyFrame> cancel1(
2868 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_CANCEL)); 2868 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_CANCEL));
2869 MockWrite writes[] = { 2869 MockWrite writes[] = {
2870 CreateMockWrite(*req1, 1), 2870 CreateMockWrite(*req1, 1),
2871 CreateMockWrite(*cancel1, 1), 2871 CreateMockWrite(*cancel1, 1),
2872 }; 2872 };
2873 StaticSocketDataProvider data(reads, arraysize(reads), 2873 StaticSocketDataProvider data(reads, arraysize(reads),
2874 writes, arraysize(writes)); 2874 writes, arraysize(writes));
2875 data.set_connect_data(connect_data); 2875 data.set_connect_data(connect_data);
2876 session_deps_.socket_factory->AddSocketDataProvider(&data); 2876 session_deps_.socket_factory->AddSocketDataProvider(&data);
2877 2877
2878 MockRead http_reads[] = {
2879 MockRead(SYNCHRONOUS, ERR_IO_PENDING) // Stall forever.
2880 };
2881 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads),
2882 NULL, 0);
2883 http_data.set_connect_data(connect_data);
2884 session_deps_.socket_factory->AddSocketDataProvider(&http_data);
2885
2886
2878 CreateNetworkSession(); 2887 CreateNetworkSession();
2879 2888
2880 TransportClientSocketPool* pool = 2889 TransportClientSocketPool* pool =
2881 http_session_->GetTransportSocketPool( 2890 http_session_->GetTransportSocketPool(
2882 HttpNetworkSession::NORMAL_SOCKET_POOL); 2891 HttpNetworkSession::NORMAL_SOCKET_POOL);
2883 2892
2884 // Create a SPDY session. 2893 // Create a SPDY session.
2885 GURL url1("http://www.google.com"); 2894 GURL url1("http://www.google.com");
2886 SpdySessionKey key1(HostPortPair(url1.host(), 80), 2895 SpdySessionKey key1(HostPortPair(url1.host(), 80),
2887 ProxyServer::Direct(), kPrivacyModeDisabled); 2896 ProxyServer::Direct(), kPrivacyModeDisabled);
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
2922 callback2.callback(), pool, BoundNetLog())); 2931 callback2.callback(), pool, BoundNetLog()));
2923 EXPECT_TRUE(pool->IsStalled()); 2932 EXPECT_TRUE(pool->IsStalled());
2924 2933
2925 // Running the message loop should cause the socket pool to ask the SPDY 2934 // Running the message loop should cause the socket pool to ask the SPDY
2926 // session to close an idle socket, but since the socket is in use, nothing 2935 // session to close an idle socket, but since the socket is in use, nothing
2927 // happens. 2936 // happens.
2928 base::RunLoop().RunUntilIdle(); 2937 base::RunLoop().RunUntilIdle();
2929 EXPECT_TRUE(pool->IsStalled()); 2938 EXPECT_TRUE(pool->IsStalled());
2930 EXPECT_FALSE(callback2.have_result()); 2939 EXPECT_FALSE(callback2.have_result());
2931 2940
2932 // Cancelling the request should still not release the session's socket, 2941 // Cancelling the request should result in the session's socket being
2933 // since the session is still kept alive by the SpdySessionPool. 2942 // closed, since the pool is stalled.
2934 ASSERT_TRUE(spdy_stream1.get()); 2943 ASSERT_TRUE(spdy_stream1.get());
2935 spdy_stream1->Cancel(); 2944 spdy_stream1->Cancel();
2936 base::RunLoop().RunUntilIdle(); 2945 base::RunLoop().RunUntilIdle();
2937 EXPECT_TRUE(pool->IsStalled()); 2946 ASSERT_FALSE(pool->IsStalled());
2938 EXPECT_FALSE(callback2.have_result()); 2947 EXPECT_EQ(OK, callback2.WaitForResult());
2939 EXPECT_TRUE(session1 != NULL);
2940 } 2948 }
2941 2949
2942 // Verify that SpdySessionKey and therefore SpdySession is different when 2950 // Verify that SpdySessionKey and therefore SpdySession is different when
2943 // privacy mode is enabled or disabled. 2951 // privacy mode is enabled or disabled.
2944 TEST_P(SpdySessionTest, SpdySessionKeyPrivacyMode) { 2952 TEST_P(SpdySessionTest, SpdySessionKeyPrivacyMode) {
2945 CreateDeterministicNetworkSession(); 2953 CreateDeterministicNetworkSession();
2946 2954
2947 HostPortPair host_port_pair("www.google.com", 443); 2955 HostPortPair host_port_pair("www.google.com", 443);
2948 SpdySessionKey key_privacy_enabled(host_port_pair, ProxyServer::Direct(), 2956 SpdySessionKey key_privacy_enabled(host_port_pair, ProxyServer::Direct(),
2949 kPrivacyModeEnabled); 2957 kPrivacyModeEnabled);
(...skipping 1247 matching lines...) Expand 10 before | Expand all | Expand 10 after
4197 EXPECT_TRUE(delegate1.send_headers_completed()); 4205 EXPECT_TRUE(delegate1.send_headers_completed());
4198 EXPECT_EQ(std::string(), delegate1.TakeReceivedData()); 4206 EXPECT_EQ(std::string(), delegate1.TakeReceivedData());
4199 4207
4200 EXPECT_TRUE(delegate2.send_headers_completed()); 4208 EXPECT_TRUE(delegate2.send_headers_completed());
4201 EXPECT_EQ(std::string(), delegate2.TakeReceivedData()); 4209 EXPECT_EQ(std::string(), delegate2.TakeReceivedData());
4202 4210
4203 EXPECT_TRUE(data.at_write_eof()); 4211 EXPECT_TRUE(data.at_write_eof());
4204 } 4212 }
4205 4213
4206 } // namespace net 4214 } // namespace net
OLDNEW
« net/spdy/spdy_session.cc ('K') | « net/spdy/spdy_session.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698