Chromium Code Reviews

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

Issue 208663003: Revert of Fix SPDY error-handling if the connection gets closed just after use. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View unified diff | | Annotate | Revision Log
« no previous file with comments | « net/spdy/spdy_session_pool.cc ('k') | net/spdy/spdy_test_util_common.h » ('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) 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 172 matching lines...)
183 SpdySessionTest, 183 SpdySessionTest,
184 testing::Values(kProtoDeprecatedSPDY2, 184 testing::Values(kProtoDeprecatedSPDY2,
185 kProtoSPDY3, kProtoSPDY31, kProtoSPDY4a2, 185 kProtoSPDY3, kProtoSPDY31, kProtoSPDY4a2,
186 kProtoHTTP2Draft04)); 186 kProtoHTTP2Draft04));
187 187
188 // Try to create a SPDY session that will fail during 188 // Try to create a SPDY session that will fail during
189 // initialization. Nothing should blow up. 189 // initialization. Nothing should blow up.
190 TEST_P(SpdySessionTest, InitialReadError) { 190 TEST_P(SpdySessionTest, InitialReadError) {
191 CreateDeterministicNetworkSession(); 191 CreateDeterministicNetworkSession();
192 192
193 base::WeakPtr<SpdySession> session = TryCreateFakeSpdySessionExpectingFailure( 193 TryCreateFakeSpdySessionExpectingFailure(
194 spdy_session_pool_, key_, ERR_FAILED); 194 spdy_session_pool_, key_, ERR_FAILED);
195 EXPECT_TRUE(session);
196 // Flush the read.
197 base::RunLoop().RunUntilIdle();
198 EXPECT_FALSE(session);
199 } 195 }
200 196
201 namespace { 197 namespace {
202 198
203 // A helper class that vends a callback that, when fired, destroys a 199 // A helper class that vends a callback that, when fired, destroys a
204 // given SpdyStreamRequest. 200 // given SpdyStreamRequest.
205 class StreamRequestDestroyingCallback : public TestCompletionCallbackBase { 201 class StreamRequestDestroyingCallback : public TestCompletionCallbackBase {
206 public: 202 public:
207 StreamRequestDestroyingCallback() {} 203 StreamRequestDestroyingCallback() {}
208 204
(...skipping 65 matching lines...)
274 test_url_, 270 test_url_,
275 MEDIUM, 271 MEDIUM,
276 BoundNetLog(), 272 BoundNetLog(),
277 callback2.callback())); 273 callback2.callback()));
278 274
279 callback1.SetRequestToDestroy(request2.Pass()); 275 callback1.SetRequestToDestroy(request2.Pass());
280 276
281 session->CloseSessionOnError(ERR_ABORTED, "Aborting session"); 277 session->CloseSessionOnError(ERR_ABORTED, "Aborting session");
282 278
283 EXPECT_EQ(ERR_ABORTED, callback1.WaitForResult()); 279 EXPECT_EQ(ERR_ABORTED, callback1.WaitForResult());
280
281 data.RunFor(1);
284 } 282 }
285 283
286 // A session receiving a GOAWAY frame with no active streams should 284 // A session receiving a GOAWAY frame with no active streams should
287 // immediately close. 285 // immediately close.
288 TEST_P(SpdySessionTest, GoAwayWithNoActiveStreams) { 286 TEST_P(SpdySessionTest, GoAwayWithNoActiveStreams) {
289 session_deps_.host_resolver->set_synchronous_mode(true); 287 session_deps_.host_resolver->set_synchronous_mode(true);
290 288
291 MockConnect connect_data(SYNCHRONOUS, OK); 289 MockConnect connect_data(SYNCHRONOUS, OK);
292 scoped_ptr<SpdyFrame> goaway(spdy_util_.ConstructSpdyGoAway(1)); 290 scoped_ptr<SpdyFrame> goaway(spdy_util_.ConstructSpdyGoAway(1));
293 MockRead reads[] = { 291 MockRead reads[] = {
(...skipping 31 matching lines...)
325 CreateMockRead(*goaway, 0, SYNCHRONOUS), 323 CreateMockRead(*goaway, 0, SYNCHRONOUS),
326 }; 324 };
327 DeterministicSocketData data(reads, arraysize(reads), NULL, 0); 325 DeterministicSocketData data(reads, arraysize(reads), NULL, 0);
328 data.set_connect_data(connect_data); 326 data.set_connect_data(connect_data);
329 session_deps_.deterministic_socket_factory->AddSocketDataProvider(&data); 327 session_deps_.deterministic_socket_factory->AddSocketDataProvider(&data);
330 328
331 CreateDeterministicNetworkSession(); 329 CreateDeterministicNetworkSession();
332 330
333 data.StopAfter(1); 331 data.StopAfter(1);
334 332
335 base::WeakPtr<SpdySession> session = 333 TryCreateInsecureSpdySessionExpectingFailure(
336 TryCreateInsecureSpdySessionExpectingFailure( 334 http_session_, key_, ERR_CONNECTION_CLOSED, BoundNetLog());
337 http_session_, key_, ERR_CONNECTION_CLOSED, BoundNetLog());
338 base::RunLoop().RunUntilIdle();
339 335
340 EXPECT_FALSE(session);
341 EXPECT_FALSE(HasSpdySession(spdy_session_pool_, key_)); 336 EXPECT_FALSE(HasSpdySession(spdy_session_pool_, key_));
342 } 337 }
343 338
344 // A session receiving a GOAWAY frame with active streams should close 339 // A session receiving a GOAWAY frame with active streams should close
345 // when the last active stream is closed. 340 // when the last active stream is closed.
346 TEST_P(SpdySessionTest, GoAwayWithActiveStreams) { 341 TEST_P(SpdySessionTest, GoAwayWithActiveStreams) {
347 session_deps_.host_resolver->set_synchronous_mode(true); 342 session_deps_.host_resolver->set_synchronous_mode(true);
348 343
349 MockConnect connect_data(SYNCHRONOUS, OK); 344 MockConnect connect_data(SYNCHRONOUS, OK);
350 scoped_ptr<SpdyFrame> goaway(spdy_util_.ConstructSpdyGoAway(1)); 345 scoped_ptr<SpdyFrame> goaway(spdy_util_.ConstructSpdyGoAway(1));
(...skipping 692 matching lines...)
1043 EXPECT_TRUE(HasSpdySession(spdy_session_pool_, key_)); 1038 EXPECT_TRUE(HasSpdySession(spdy_session_pool_, key_));
1044 1039
1045 // We set last time we have received any data in 1 sec less than now. 1040 // We set last time we have received any data in 1 sec less than now.
1046 // CheckPingStatus will trigger timeout because hung interval is zero. 1041 // CheckPingStatus will trigger timeout because hung interval is zero.
1047 base::TimeTicks now = base::TimeTicks::Now(); 1042 base::TimeTicks now = base::TimeTicks::Now();
1048 session->last_activity_time_ = now - base::TimeDelta::FromSeconds(1); 1043 session->last_activity_time_ = now - base::TimeDelta::FromSeconds(1);
1049 session->CheckPingStatus(now); 1044 session->CheckPingStatus(now);
1050 1045
1051 EXPECT_TRUE(session == NULL); 1046 EXPECT_TRUE(session == NULL);
1052 EXPECT_FALSE(HasSpdySession(spdy_session_pool_, key_)); 1047 EXPECT_FALSE(HasSpdySession(spdy_session_pool_, key_));
1048
1049 data.RunFor(1);
1053 EXPECT_EQ(NULL, spdy_stream1.get()); 1050 EXPECT_EQ(NULL, spdy_stream1.get());
1054 } 1051 }
1055 1052
1056 // Request kInitialMaxConcurrentStreams + 1 streams. Receive a 1053 // Request kInitialMaxConcurrentStreams + 1 streams. Receive a
1057 // settings frame increasing the max concurrent streams by 1. Make 1054 // settings frame increasing the max concurrent streams by 1. Make
1058 // sure nothing blows up. This is a regression test for 1055 // sure nothing blows up. This is a regression test for
1059 // http://crbug.com/57331 . 1056 // http://crbug.com/57331 .
1060 TEST_P(SpdySessionTest, OnSettings) { 1057 TEST_P(SpdySessionTest, OnSettings) {
1061 session_deps_.host_resolver->set_synchronous_mode(true); 1058 session_deps_.host_resolver->set_synchronous_mode(true);
1062 1059
(...skipping 3076 matching lines...)
4139 TEST(MapRstStreamStatusToProtocolError, MapsValues) { 4136 TEST(MapRstStreamStatusToProtocolError, MapsValues) {
4140 CHECK_EQ(STATUS_CODE_PROTOCOL_ERROR, 4137 CHECK_EQ(STATUS_CODE_PROTOCOL_ERROR,
4141 MapRstStreamStatusToProtocolError( 4138 MapRstStreamStatusToProtocolError(
4142 RST_STREAM_PROTOCOL_ERROR)); 4139 RST_STREAM_PROTOCOL_ERROR));
4143 CHECK_EQ(STATUS_CODE_FRAME_TOO_LARGE, 4140 CHECK_EQ(STATUS_CODE_FRAME_TOO_LARGE,
4144 MapRstStreamStatusToProtocolError( 4141 MapRstStreamStatusToProtocolError(
4145 RST_STREAM_FRAME_TOO_LARGE)); 4142 RST_STREAM_FRAME_TOO_LARGE));
4146 } 4143 }
4147 4144
4148 } // namespace net 4145 } // namespace net
OLDNEW
« no previous file with comments | « net/spdy/spdy_session_pool.cc ('k') | net/spdy/spdy_test_util_common.h » ('j') | no next file with comments »

Powered by Google App Engine