| OLD | NEW | 
|---|
| 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...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 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   TryCreateFakeSpdySessionExpectingFailure( | 193   base::WeakPtr<SpdySession> session = 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); | 
| 195 } | 199 } | 
| 196 | 200 | 
| 197 namespace { | 201 namespace { | 
| 198 | 202 | 
| 199 // A helper class that vends a callback that, when fired, destroys a | 203 // A helper class that vends a callback that, when fired, destroys a | 
| 200 // given SpdyStreamRequest. | 204 // given SpdyStreamRequest. | 
| 201 class StreamRequestDestroyingCallback : public TestCompletionCallbackBase { | 205 class StreamRequestDestroyingCallback : public TestCompletionCallbackBase { | 
| 202  public: | 206  public: | 
| 203   StreamRequestDestroyingCallback() {} | 207   StreamRequestDestroyingCallback() {} | 
| 204 | 208 | 
| (...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 270                                    test_url_, | 274                                    test_url_, | 
| 271                                    MEDIUM, | 275                                    MEDIUM, | 
| 272                                    BoundNetLog(), | 276                                    BoundNetLog(), | 
| 273                                    callback2.callback())); | 277                                    callback2.callback())); | 
| 274 | 278 | 
| 275   callback1.SetRequestToDestroy(request2.Pass()); | 279   callback1.SetRequestToDestroy(request2.Pass()); | 
| 276 | 280 | 
| 277   session->CloseSessionOnError(ERR_ABORTED, "Aborting session"); | 281   session->CloseSessionOnError(ERR_ABORTED, "Aborting session"); | 
| 278 | 282 | 
| 279   EXPECT_EQ(ERR_ABORTED, callback1.WaitForResult()); | 283   EXPECT_EQ(ERR_ABORTED, callback1.WaitForResult()); | 
| 280 |  | 
| 281   data.RunFor(1); |  | 
| 282 } | 284 } | 
| 283 | 285 | 
| 284 // A session receiving a GOAWAY frame with no active streams should | 286 // A session receiving a GOAWAY frame with no active streams should | 
| 285 // immediately close. | 287 // immediately close. | 
| 286 TEST_P(SpdySessionTest, GoAwayWithNoActiveStreams) { | 288 TEST_P(SpdySessionTest, GoAwayWithNoActiveStreams) { | 
| 287   session_deps_.host_resolver->set_synchronous_mode(true); | 289   session_deps_.host_resolver->set_synchronous_mode(true); | 
| 288 | 290 | 
| 289   MockConnect connect_data(SYNCHRONOUS, OK); | 291   MockConnect connect_data(SYNCHRONOUS, OK); | 
| 290   scoped_ptr<SpdyFrame> goaway(spdy_util_.ConstructSpdyGoAway(1)); | 292   scoped_ptr<SpdyFrame> goaway(spdy_util_.ConstructSpdyGoAway(1)); | 
| 291   MockRead reads[] = { | 293   MockRead reads[] = { | 
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 323     CreateMockRead(*goaway, 0, SYNCHRONOUS), | 325     CreateMockRead(*goaway, 0, SYNCHRONOUS), | 
| 324   }; | 326   }; | 
| 325   DeterministicSocketData data(reads, arraysize(reads), NULL, 0); | 327   DeterministicSocketData data(reads, arraysize(reads), NULL, 0); | 
| 326   data.set_connect_data(connect_data); | 328   data.set_connect_data(connect_data); | 
| 327   session_deps_.deterministic_socket_factory->AddSocketDataProvider(&data); | 329   session_deps_.deterministic_socket_factory->AddSocketDataProvider(&data); | 
| 328 | 330 | 
| 329   CreateDeterministicNetworkSession(); | 331   CreateDeterministicNetworkSession(); | 
| 330 | 332 | 
| 331   data.StopAfter(1); | 333   data.StopAfter(1); | 
| 332 | 334 | 
| 333   TryCreateInsecureSpdySessionExpectingFailure( | 335   base::WeakPtr<SpdySession> session = | 
| 334       http_session_, key_, ERR_CONNECTION_CLOSED, BoundNetLog()); | 336       TryCreateInsecureSpdySessionExpectingFailure( | 
|  | 337           http_session_, key_, ERR_CONNECTION_CLOSED, BoundNetLog()); | 
|  | 338   base::RunLoop().RunUntilIdle(); | 
| 335 | 339 | 
|  | 340   EXPECT_FALSE(session); | 
| 336   EXPECT_FALSE(HasSpdySession(spdy_session_pool_, key_)); | 341   EXPECT_FALSE(HasSpdySession(spdy_session_pool_, key_)); | 
| 337 } | 342 } | 
| 338 | 343 | 
| 339 // A session receiving a GOAWAY frame with active streams should close | 344 // A session receiving a GOAWAY frame with active streams should close | 
| 340 // when the last active stream is closed. | 345 // when the last active stream is closed. | 
| 341 TEST_P(SpdySessionTest, GoAwayWithActiveStreams) { | 346 TEST_P(SpdySessionTest, GoAwayWithActiveStreams) { | 
| 342   session_deps_.host_resolver->set_synchronous_mode(true); | 347   session_deps_.host_resolver->set_synchronous_mode(true); | 
| 343 | 348 | 
| 344   MockConnect connect_data(SYNCHRONOUS, OK); | 349   MockConnect connect_data(SYNCHRONOUS, OK); | 
| 345   scoped_ptr<SpdyFrame> goaway(spdy_util_.ConstructSpdyGoAway(1)); | 350   scoped_ptr<SpdyFrame> goaway(spdy_util_.ConstructSpdyGoAway(1)); | 
| (...skipping 692 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1038   EXPECT_TRUE(HasSpdySession(spdy_session_pool_, key_)); | 1043   EXPECT_TRUE(HasSpdySession(spdy_session_pool_, key_)); | 
| 1039 | 1044 | 
| 1040   // We set last time we have received any data in 1 sec less than now. | 1045   // We set last time we have received any data in 1 sec less than now. | 
| 1041   // CheckPingStatus will trigger timeout because hung interval is zero. | 1046   // CheckPingStatus will trigger timeout because hung interval is zero. | 
| 1042   base::TimeTicks now = base::TimeTicks::Now(); | 1047   base::TimeTicks now = base::TimeTicks::Now(); | 
| 1043   session->last_activity_time_ = now - base::TimeDelta::FromSeconds(1); | 1048   session->last_activity_time_ = now - base::TimeDelta::FromSeconds(1); | 
| 1044   session->CheckPingStatus(now); | 1049   session->CheckPingStatus(now); | 
| 1045 | 1050 | 
| 1046   EXPECT_TRUE(session == NULL); | 1051   EXPECT_TRUE(session == NULL); | 
| 1047   EXPECT_FALSE(HasSpdySession(spdy_session_pool_, key_)); | 1052   EXPECT_FALSE(HasSpdySession(spdy_session_pool_, key_)); | 
| 1048 |  | 
| 1049   data.RunFor(1); |  | 
| 1050   EXPECT_EQ(NULL, spdy_stream1.get()); | 1053   EXPECT_EQ(NULL, spdy_stream1.get()); | 
| 1051 } | 1054 } | 
| 1052 | 1055 | 
| 1053 // Request kInitialMaxConcurrentStreams + 1 streams.  Receive a | 1056 // Request kInitialMaxConcurrentStreams + 1 streams.  Receive a | 
| 1054 // settings frame increasing the max concurrent streams by 1.  Make | 1057 // settings frame increasing the max concurrent streams by 1.  Make | 
| 1055 // sure nothing blows up. This is a regression test for | 1058 // sure nothing blows up. This is a regression test for | 
| 1056 // http://crbug.com/57331 . | 1059 // http://crbug.com/57331 . | 
| 1057 TEST_P(SpdySessionTest, OnSettings) { | 1060 TEST_P(SpdySessionTest, OnSettings) { | 
| 1058   session_deps_.host_resolver->set_synchronous_mode(true); | 1061   session_deps_.host_resolver->set_synchronous_mode(true); | 
| 1059 | 1062 | 
| (...skipping 3076 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 4136 TEST(MapRstStreamStatusToProtocolError, MapsValues) { | 4139 TEST(MapRstStreamStatusToProtocolError, MapsValues) { | 
| 4137   CHECK_EQ(STATUS_CODE_PROTOCOL_ERROR, | 4140   CHECK_EQ(STATUS_CODE_PROTOCOL_ERROR, | 
| 4138            MapRstStreamStatusToProtocolError( | 4141            MapRstStreamStatusToProtocolError( | 
| 4139                RST_STREAM_PROTOCOL_ERROR)); | 4142                RST_STREAM_PROTOCOL_ERROR)); | 
| 4140   CHECK_EQ(STATUS_CODE_FRAME_TOO_LARGE, | 4143   CHECK_EQ(STATUS_CODE_FRAME_TOO_LARGE, | 
| 4141            MapRstStreamStatusToProtocolError( | 4144            MapRstStreamStatusToProtocolError( | 
| 4142                RST_STREAM_FRAME_TOO_LARGE)); | 4145                RST_STREAM_FRAME_TOO_LARGE)); | 
| 4143 } | 4146 } | 
| 4144 | 4147 | 
| 4145 }  // namespace net | 4148 }  // namespace net | 
| OLD | NEW | 
|---|