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 "net/base/host_cache.h" | 7 #include "net/base/host_cache.h" |
8 #include "net/base/ip_endpoint.h" | 8 #include "net/base/ip_endpoint.h" |
9 #include "net/base/net_log_unittest.h" | 9 #include "net/base/net_log_unittest.h" |
10 #include "net/spdy/spdy_io_buffer.h" | 10 #include "net/spdy/spdy_io_buffer.h" |
(...skipping 309 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
320 session->set_hung_interval(base::TimeDelta::FromSeconds(0)); | 320 session->set_hung_interval(base::TimeDelta::FromSeconds(0)); |
321 | 321 |
322 // Send a PING frame. | 322 // Send a PING frame. |
323 session->WritePingFrame(1); | 323 session->WritePingFrame(1); |
324 EXPECT_LT(0, session->pings_in_flight()); | 324 EXPECT_LT(0, session->pings_in_flight()); |
325 EXPECT_GE(session->next_ping_id(), static_cast<uint32>(1)); | 325 EXPECT_GE(session->next_ping_id(), static_cast<uint32>(1)); |
326 EXPECT_TRUE(session->check_ping_status_pending()); | 326 EXPECT_TRUE(session->check_ping_status_pending()); |
327 | 327 |
328 // Assert session is not closed. | 328 // Assert session is not closed. |
329 EXPECT_FALSE(session->IsClosed()); | 329 EXPECT_FALSE(session->IsClosed()); |
330 EXPECT_LT(0u, session->num_active_streams()); | 330 EXPECT_LT(0u, session->num_active_streams() + session->num_created_streams()); |
331 EXPECT_TRUE(spdy_session_pool->HasSession(pair)); | 331 EXPECT_TRUE(spdy_session_pool->HasSession(pair)); |
332 | 332 |
333 // We set last time we have received any data in 1 sec less than now. | 333 // We set last time we have received any data in 1 sec less than now. |
334 // CheckPingStatus will trigger timeout because hung interval is zero. | 334 // CheckPingStatus will trigger timeout because hung interval is zero. |
335 base::TimeTicks now = base::TimeTicks::Now(); | 335 base::TimeTicks now = base::TimeTicks::Now(); |
336 session->last_activity_time_ = now - base::TimeDelta::FromSeconds(1); | 336 session->last_activity_time_ = now - base::TimeDelta::FromSeconds(1); |
337 session->CheckPingStatus(now); | 337 session->CheckPingStatus(now); |
338 | 338 |
339 EXPECT_TRUE(session->IsClosed()); | 339 EXPECT_TRUE(session->IsClosed()); |
340 EXPECT_EQ(0u, session->num_active_streams()); | 340 EXPECT_EQ(0u, session->num_active_streams()); |
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
440 spdy_session_pool->CloseIdleSessions(); | 440 spdy_session_pool->CloseIdleSessions(); |
441 EXPECT_TRUE(session1->is_active()); | 441 EXPECT_TRUE(session1->is_active()); |
442 EXPECT_FALSE(session1->IsClosed()); | 442 EXPECT_FALSE(session1->IsClosed()); |
443 EXPECT_TRUE(session2->is_active()); | 443 EXPECT_TRUE(session2->is_active()); |
444 EXPECT_FALSE(session2->IsClosed()); | 444 EXPECT_FALSE(session2->IsClosed()); |
445 EXPECT_TRUE(session3->is_active()); | 445 EXPECT_TRUE(session3->is_active()); |
446 EXPECT_FALSE(session3->IsClosed()); | 446 EXPECT_FALSE(session3->IsClosed()); |
447 | 447 |
448 // Make sessions 1 and 3 inactive, but keep them open. | 448 // Make sessions 1 and 3 inactive, but keep them open. |
449 // Session 2 still open and active | 449 // Session 2 still open and active |
450 session1->CloseStream(spdy_stream1->stream_id(), OK); | 450 session1->CloseCreatedStream(spdy_stream1, OK); |
451 session3->CloseStream(spdy_stream3->stream_id(), OK); | 451 session3->CloseCreatedStream(spdy_stream3, OK); |
452 EXPECT_FALSE(session1->is_active()); | 452 EXPECT_FALSE(session1->is_active()); |
453 EXPECT_FALSE(session1->IsClosed()); | 453 EXPECT_FALSE(session1->IsClosed()); |
454 EXPECT_TRUE(session2->is_active()); | 454 EXPECT_TRUE(session2->is_active()); |
455 EXPECT_FALSE(session2->IsClosed()); | 455 EXPECT_FALSE(session2->IsClosed()); |
456 EXPECT_FALSE(session3->is_active()); | 456 EXPECT_FALSE(session3->is_active()); |
457 EXPECT_FALSE(session3->IsClosed()); | 457 EXPECT_FALSE(session3->IsClosed()); |
458 | 458 |
459 // Should close session 1 and 3, 2 should be left open | 459 // Should close session 1 and 3, 2 should be left open |
460 spdy_session_pool->CloseIdleSessions(); | 460 spdy_session_pool->CloseIdleSessions(); |
461 EXPECT_FALSE(session1->is_active()); | 461 EXPECT_FALSE(session1->is_active()); |
462 EXPECT_TRUE(session1->IsClosed()); | 462 EXPECT_TRUE(session1->IsClosed()); |
463 EXPECT_TRUE(session2->is_active()); | 463 EXPECT_TRUE(session2->is_active()); |
464 EXPECT_FALSE(session2->IsClosed()); | 464 EXPECT_FALSE(session2->IsClosed()); |
465 EXPECT_FALSE(session3->is_active()); | 465 EXPECT_FALSE(session3->is_active()); |
466 EXPECT_TRUE(session3->IsClosed()); | 466 EXPECT_TRUE(session3->IsClosed()); |
467 | 467 |
468 // Should not do anything | 468 // Should not do anything |
469 spdy_session_pool->CloseIdleSessions(); | 469 spdy_session_pool->CloseIdleSessions(); |
470 EXPECT_TRUE(session2->is_active()); | 470 EXPECT_TRUE(session2->is_active()); |
471 EXPECT_FALSE(session2->IsClosed()); | 471 EXPECT_FALSE(session2->IsClosed()); |
472 | 472 |
473 // Make 2 not active | 473 // Make 2 not active |
474 session2->CloseStream(spdy_stream2->stream_id(), OK); | 474 session2->CloseCreatedStream(spdy_stream2, OK); |
475 EXPECT_FALSE(session2->is_active()); | 475 EXPECT_FALSE(session2->is_active()); |
476 EXPECT_FALSE(session2->IsClosed()); | 476 EXPECT_FALSE(session2->IsClosed()); |
477 | 477 |
478 // This should close session 2 | 478 // This should close session 2 |
479 spdy_session_pool->CloseIdleSessions(); | 479 spdy_session_pool->CloseIdleSessions(); |
480 EXPECT_FALSE(session2->is_active()); | 480 EXPECT_FALSE(session2->is_active()); |
481 EXPECT_TRUE(session2->IsClosed()); | 481 EXPECT_TRUE(session2->IsClosed()); |
482 } | 482 } |
483 | 483 |
484 // Start with max concurrent streams set to 1. Request two streams. Receive a | 484 // Start with max concurrent streams set to 1. Request two streams. Receive a |
(...skipping 547 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1032 CapturingNetLog::Entry entry = entries[pos]; | 1032 CapturingNetLog::Entry entry = entries[pos]; |
1033 NetLogSpdySessionCloseParameter* request_params = | 1033 NetLogSpdySessionCloseParameter* request_params = |
1034 static_cast<NetLogSpdySessionCloseParameter*>( | 1034 static_cast<NetLogSpdySessionCloseParameter*>( |
1035 entry.extra_parameters.get()); | 1035 entry.extra_parameters.get()); |
1036 EXPECT_EQ(ERR_CONNECTION_CLOSED, request_params->status()); | 1036 EXPECT_EQ(ERR_CONNECTION_CLOSED, request_params->status()); |
1037 } | 1037 } |
1038 | 1038 |
1039 TEST_F(SpdySessionSpdy2Test, OutOfOrderSynStreams) { | 1039 TEST_F(SpdySessionSpdy2Test, OutOfOrderSynStreams) { |
1040 // Construct the request. | 1040 // Construct the request. |
1041 MockConnect connect_data(SYNCHRONOUS, OK); | 1041 MockConnect connect_data(SYNCHRONOUS, OK); |
1042 scoped_ptr<SpdyFrame> req1(ConstructSpdyGet(NULL, 0, false, 1, LOWEST)); | 1042 scoped_ptr<SpdyFrame> req1(ConstructSpdyGet(NULL, 0, false, 1, HIGHEST)); |
1043 scoped_ptr<SpdyFrame> req2(ConstructSpdyGet(NULL, 0, false, 3, HIGHEST)); | 1043 scoped_ptr<SpdyFrame> req2(ConstructSpdyGet(NULL, 0, false, 3, LOWEST)); |
1044 MockWrite writes[] = { | 1044 MockWrite writes[] = { |
1045 CreateMockWrite(*req1, 2), | 1045 CreateMockWrite(*req1, 2), |
1046 CreateMockWrite(*req2, 1), | 1046 CreateMockWrite(*req2, 1), |
1047 }; | 1047 }; |
1048 | 1048 |
1049 scoped_ptr<SpdyFrame> resp1(ConstructSpdyGetSynReply(NULL, 0, 1)); | 1049 scoped_ptr<SpdyFrame> resp1(ConstructSpdyGetSynReply(NULL, 0, 1)); |
1050 scoped_ptr<SpdyFrame> body1(ConstructSpdyBodyFrame(1, true)); | 1050 scoped_ptr<SpdyFrame> body1(ConstructSpdyBodyFrame(1, true)); |
1051 scoped_ptr<SpdyFrame> resp2(ConstructSpdyGetSynReply(NULL, 0, 3)); | 1051 scoped_ptr<SpdyFrame> resp2(ConstructSpdyGetSynReply(NULL, 0, 3)); |
1052 scoped_ptr<SpdyFrame> body2(ConstructSpdyBodyFrame(3, true)); | 1052 scoped_ptr<SpdyFrame> body2(ConstructSpdyBodyFrame(3, true)); |
1053 MockRead reads[] = { | 1053 MockRead reads[] = { |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1096 http_session->GetTransportSocketPool( | 1096 http_session->GetTransportSocketPool( |
1097 HttpNetworkSession::NORMAL_SOCKET_POOL), | 1097 HttpNetworkSession::NORMAL_SOCKET_POOL), |
1098 BoundNetLog())); | 1098 BoundNetLog())); |
1099 EXPECT_EQ(OK, session->InitializeWithSocket(connection.release(), false, OK)); | 1099 EXPECT_EQ(OK, session->InitializeWithSocket(connection.release(), false, OK)); |
1100 | 1100 |
1101 scoped_refptr<SpdyStream> spdy_stream1; | 1101 scoped_refptr<SpdyStream> spdy_stream1; |
1102 TestCompletionCallback callback1; | 1102 TestCompletionCallback callback1; |
1103 GURL url1("http://www.google.com"); | 1103 GURL url1("http://www.google.com"); |
1104 EXPECT_EQ(OK, session->CreateStream(url1, LOWEST, &spdy_stream1, | 1104 EXPECT_EQ(OK, session->CreateStream(url1, LOWEST, &spdy_stream1, |
1105 BoundNetLog(), callback1.callback())); | 1105 BoundNetLog(), callback1.callback())); |
1106 EXPECT_EQ(1u, spdy_stream1->stream_id()); | 1106 EXPECT_EQ(0u, spdy_stream1->stream_id()); |
1107 | 1107 |
1108 scoped_refptr<SpdyStream> spdy_stream2; | 1108 scoped_refptr<SpdyStream> spdy_stream2; |
1109 TestCompletionCallback callback2; | 1109 TestCompletionCallback callback2; |
1110 GURL url2("http://www.google.com"); | 1110 GURL url2("http://www.google.com"); |
1111 EXPECT_EQ(OK, session->CreateStream(url2, HIGHEST, &spdy_stream2, | 1111 EXPECT_EQ(OK, session->CreateStream(url2, HIGHEST, &spdy_stream2, |
1112 BoundNetLog(), callback2.callback())); | 1112 BoundNetLog(), callback2.callback())); |
1113 EXPECT_EQ(3u, spdy_stream2->stream_id()); | 1113 EXPECT_EQ(0u, spdy_stream2->stream_id()); |
1114 | 1114 |
1115 linked_ptr<SpdyHeaderBlock> headers(new SpdyHeaderBlock); | 1115 linked_ptr<SpdyHeaderBlock> headers(new SpdyHeaderBlock); |
1116 (*headers)["method"] = "GET"; | 1116 (*headers)["method"] = "GET"; |
1117 (*headers)["scheme"] = url1.scheme(); | 1117 (*headers)["scheme"] = url1.scheme(); |
1118 (*headers)["host"] = url1.host(); | 1118 (*headers)["host"] = url1.host(); |
1119 (*headers)["url"] = url1.path(); | 1119 (*headers)["url"] = url1.path(); |
1120 (*headers)["version"] = "HTTP/1.1"; | 1120 (*headers)["version"] = "HTTP/1.1"; |
1121 spdy_stream1->set_spdy_headers(headers); | 1121 spdy_stream1->set_spdy_headers(headers); |
1122 EXPECT_TRUE(spdy_stream1->HasUrl()); | 1122 EXPECT_TRUE(spdy_stream1->HasUrl()); |
1123 | 1123 |
1124 spdy_stream2->set_spdy_headers(headers); | 1124 spdy_stream2->set_spdy_headers(headers); |
1125 EXPECT_TRUE(spdy_stream2->HasUrl()); | 1125 EXPECT_TRUE(spdy_stream2->HasUrl()); |
1126 | 1126 |
1127 spdy_stream1->SendRequest(false); | 1127 spdy_stream1->SendRequest(false); |
1128 spdy_stream2->SendRequest(false); | 1128 spdy_stream2->SendRequest(false); |
1129 MessageLoop::current()->RunAllPending(); | 1129 MessageLoop::current()->RunAllPending(); |
1130 | 1130 |
1131 EXPECT_EQ(1u, spdy_stream1->stream_id()); | 1131 EXPECT_EQ(3u, spdy_stream1->stream_id()); |
1132 EXPECT_EQ(3u, spdy_stream2->stream_id()); | 1132 EXPECT_EQ(1u, spdy_stream2->stream_id()); |
1133 | 1133 |
1134 spdy_stream1->Cancel(); | 1134 spdy_stream1->Cancel(); |
1135 spdy_stream1 = NULL; | 1135 spdy_stream1 = NULL; |
1136 | 1136 |
1137 spdy_stream2->Cancel(); | 1137 spdy_stream2->Cancel(); |
1138 spdy_stream2 = NULL; | 1138 spdy_stream2 = NULL; |
1139 } | 1139 } |
1140 | 1140 |
1141 } // namespace net | 1141 } // namespace net |
OLD | NEW |