| 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/ip_endpoint.h" | 7 #include "net/base/ip_endpoint.h" |
| 8 #include "net/spdy/spdy_io_buffer.h" | 8 #include "net/spdy/spdy_io_buffer.h" |
| 9 #include "net/spdy/spdy_session_pool.h" | 9 #include "net/spdy/spdy_session_pool.h" |
| 10 #include "net/spdy/spdy_stream.h" | 10 #include "net/spdy/spdy_stream.h" |
| (...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 101 SpdyIOBuffer buffer = queue_.top(); | 101 SpdyIOBuffer buffer = queue_.top(); |
| 102 EXPECT_EQ(priority++, buffer.priority()); | 102 EXPECT_EQ(priority++, buffer.priority()); |
| 103 queue_.pop(); | 103 queue_.pop(); |
| 104 } | 104 } |
| 105 } | 105 } |
| 106 | 106 |
| 107 TEST_F(SpdySessionTest, GoAway) { | 107 TEST_F(SpdySessionTest, GoAway) { |
| 108 SpdySessionDependencies session_deps; | 108 SpdySessionDependencies session_deps; |
| 109 session_deps.host_resolver->set_synchronous_mode(true); | 109 session_deps.host_resolver->set_synchronous_mode(true); |
| 110 | 110 |
| 111 MockConnect connect_data(false, OK); | 111 MockConnect connect_data(SYNCHRONOUS, OK); |
| 112 scoped_ptr<spdy::SpdyFrame> goaway(ConstructSpdyGoAway()); | 112 scoped_ptr<spdy::SpdyFrame> goaway(ConstructSpdyGoAway()); |
| 113 MockRead reads[] = { | 113 MockRead reads[] = { |
| 114 CreateMockRead(*goaway), | 114 CreateMockRead(*goaway), |
| 115 MockRead(false, 0, 0) // EOF | 115 MockRead(false, 0, 0) // EOF |
| 116 }; | 116 }; |
| 117 StaticSocketDataProvider data(reads, arraysize(reads), NULL, 0); | 117 StaticSocketDataProvider data(reads, arraysize(reads), NULL, 0); |
| 118 data.set_connect_data(connect_data); | 118 data.set_connect_data(connect_data); |
| 119 session_deps.socket_factory->AddSocketDataProvider(&data); | 119 session_deps.socket_factory->AddSocketDataProvider(&data); |
| 120 | 120 |
| 121 SSLSocketDataProvider ssl(false, OK); | 121 SSLSocketDataProvider ssl(false, OK); |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 160 | 160 |
| 161 // Delete the second session. | 161 // Delete the second session. |
| 162 spdy_session_pool->Remove(session2); | 162 spdy_session_pool->Remove(session2); |
| 163 session2 = NULL; | 163 session2 = NULL; |
| 164 } | 164 } |
| 165 | 165 |
| 166 TEST_F(SpdySessionTest, Ping) { | 166 TEST_F(SpdySessionTest, Ping) { |
| 167 SpdySessionDependencies session_deps; | 167 SpdySessionDependencies session_deps; |
| 168 session_deps.host_resolver->set_synchronous_mode(true); | 168 session_deps.host_resolver->set_synchronous_mode(true); |
| 169 | 169 |
| 170 MockConnect connect_data(false, OK); | 170 MockConnect connect_data(SYNCHRONOUS, OK); |
| 171 scoped_ptr<spdy::SpdyFrame> read_ping(ConstructSpdyPing()); | 171 scoped_ptr<spdy::SpdyFrame> read_ping(ConstructSpdyPing()); |
| 172 MockRead reads[] = { | 172 MockRead reads[] = { |
| 173 CreateMockRead(*read_ping), | 173 CreateMockRead(*read_ping), |
| 174 CreateMockRead(*read_ping), | 174 CreateMockRead(*read_ping), |
| 175 MockRead(false, 0, 0) // EOF | 175 MockRead(false, 0, 0) // EOF |
| 176 }; | 176 }; |
| 177 scoped_ptr<spdy::SpdyFrame> write_ping(ConstructSpdyPing()); | 177 scoped_ptr<spdy::SpdyFrame> write_ping(ConstructSpdyPing()); |
| 178 MockRead writes[] = { | 178 MockRead writes[] = { |
| 179 CreateMockRead(*write_ping), | 179 CreateMockRead(*write_ping), |
| 180 CreateMockRead(*write_ping), | 180 CreateMockRead(*write_ping), |
| (...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 251 EXPECT_FALSE(spdy_session_pool->HasSession(pair)); | 251 EXPECT_FALSE(spdy_session_pool->HasSession(pair)); |
| 252 | 252 |
| 253 // Delete the first session. | 253 // Delete the first session. |
| 254 session = NULL; | 254 session = NULL; |
| 255 } | 255 } |
| 256 | 256 |
| 257 TEST_F(SpdySessionTest, FailedPing) { | 257 TEST_F(SpdySessionTest, FailedPing) { |
| 258 SpdySessionDependencies session_deps; | 258 SpdySessionDependencies session_deps; |
| 259 session_deps.host_resolver->set_synchronous_mode(true); | 259 session_deps.host_resolver->set_synchronous_mode(true); |
| 260 | 260 |
| 261 MockConnect connect_data(false, OK); | 261 MockConnect connect_data(SYNCHRONOUS, OK); |
| 262 scoped_ptr<spdy::SpdyFrame> read_ping(ConstructSpdyPing()); | 262 scoped_ptr<spdy::SpdyFrame> read_ping(ConstructSpdyPing()); |
| 263 MockRead reads[] = { | 263 MockRead reads[] = { |
| 264 CreateMockRead(*read_ping), | 264 CreateMockRead(*read_ping), |
| 265 MockRead(false, 0, 0) // EOF | 265 MockRead(false, 0, 0) // EOF |
| 266 }; | 266 }; |
| 267 scoped_ptr<spdy::SpdyFrame> write_ping(ConstructSpdyPing()); | 267 scoped_ptr<spdy::SpdyFrame> write_ping(ConstructSpdyPing()); |
| 268 MockRead writes[] = { | 268 MockRead writes[] = { |
| 269 CreateMockRead(*write_ping), | 269 CreateMockRead(*write_ping), |
| 270 }; | 270 }; |
| 271 StaticSocketDataProvider data( | 271 StaticSocketDataProvider data( |
| (...skipping 222 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 494 session_deps.host_resolver->set_synchronous_mode(true); | 494 session_deps.host_resolver->set_synchronous_mode(true); |
| 495 | 495 |
| 496 spdy::SpdySettings new_settings; | 496 spdy::SpdySettings new_settings; |
| 497 spdy::SettingsFlagsAndId id(0); | 497 spdy::SettingsFlagsAndId id(0); |
| 498 id.set_id(spdy::SETTINGS_MAX_CONCURRENT_STREAMS); | 498 id.set_id(spdy::SETTINGS_MAX_CONCURRENT_STREAMS); |
| 499 const size_t max_concurrent_streams = 2; | 499 const size_t max_concurrent_streams = 2; |
| 500 new_settings.push_back(spdy::SpdySetting(id, max_concurrent_streams)); | 500 new_settings.push_back(spdy::SpdySetting(id, max_concurrent_streams)); |
| 501 | 501 |
| 502 // Set up the socket so we read a SETTINGS frame that raises max concurrent | 502 // Set up the socket so we read a SETTINGS frame that raises max concurrent |
| 503 // streams to 2. | 503 // streams to 2. |
| 504 MockConnect connect_data(false, OK); | 504 MockConnect connect_data(SYNCHRONOUS, OK); |
| 505 scoped_ptr<spdy::SpdyFrame> settings_frame( | 505 scoped_ptr<spdy::SpdyFrame> settings_frame( |
| 506 ConstructSpdySettings(new_settings)); | 506 ConstructSpdySettings(new_settings)); |
| 507 MockRead reads[] = { | 507 MockRead reads[] = { |
| 508 CreateMockRead(*settings_frame), | 508 CreateMockRead(*settings_frame), |
| 509 MockRead(false, 0, 0) // EOF | 509 MockRead(false, 0, 0) // EOF |
| 510 }; | 510 }; |
| 511 | 511 |
| 512 StaticSocketDataProvider data(reads, arraysize(reads), NULL, 0); | 512 StaticSocketDataProvider data(reads, arraysize(reads), NULL, 0); |
| 513 data.set_connect_data(connect_data); | 513 data.set_connect_data(connect_data); |
| 514 session_deps.socket_factory->AddSocketDataProvider(&data); | 514 session_deps.socket_factory->AddSocketDataProvider(&data); |
| (...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 583 // http://crbug.com/63532 | 583 // http://crbug.com/63532 |
| 584 TEST_F(SpdySessionTest, CancelPendingCreateStream) { | 584 TEST_F(SpdySessionTest, CancelPendingCreateStream) { |
| 585 SpdySessionDependencies session_deps; | 585 SpdySessionDependencies session_deps; |
| 586 session_deps.host_resolver->set_synchronous_mode(true); | 586 session_deps.host_resolver->set_synchronous_mode(true); |
| 587 | 587 |
| 588 MockRead reads[] = { | 588 MockRead reads[] = { |
| 589 MockRead(false, ERR_IO_PENDING) // Stall forever. | 589 MockRead(false, ERR_IO_PENDING) // Stall forever. |
| 590 }; | 590 }; |
| 591 | 591 |
| 592 StaticSocketDataProvider data(reads, arraysize(reads), NULL, 0); | 592 StaticSocketDataProvider data(reads, arraysize(reads), NULL, 0); |
| 593 MockConnect connect_data(false, OK); | 593 MockConnect connect_data(SYNCHRONOUS, OK); |
| 594 | 594 |
| 595 data.set_connect_data(connect_data); | 595 data.set_connect_data(connect_data); |
| 596 session_deps.socket_factory->AddSocketDataProvider(&data); | 596 session_deps.socket_factory->AddSocketDataProvider(&data); |
| 597 | 597 |
| 598 SSLSocketDataProvider ssl(false, OK); | 598 SSLSocketDataProvider ssl(false, OK); |
| 599 session_deps.socket_factory->AddSSLSocketDataProvider(&ssl); | 599 session_deps.socket_factory->AddSSLSocketDataProvider(&ssl); |
| 600 | 600 |
| 601 scoped_refptr<HttpNetworkSession> http_session( | 601 scoped_refptr<HttpNetworkSession> http_session( |
| 602 SpdySessionDependencies::SpdyCreateSession(&session_deps)); | 602 SpdySessionDependencies::SpdyCreateSession(&session_deps)); |
| 603 | 603 |
| (...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 679 // Note that it will be marked as SETTINGS_FLAG_PERSISTED when sent out. But | 679 // Note that it will be marked as SETTINGS_FLAG_PERSISTED when sent out. But |
| 680 // to set it into the SpdySettingsStorage, we need to mark as | 680 // to set it into the SpdySettingsStorage, we need to mark as |
| 681 // SETTINGS_FLAG_PLEASE_PERSIST. | 681 // SETTINGS_FLAG_PLEASE_PERSIST. |
| 682 spdy::SpdySettings settings; | 682 spdy::SpdySettings settings; |
| 683 const uint32 kBogusSettingId = 0xABAB; | 683 const uint32 kBogusSettingId = 0xABAB; |
| 684 const uint32 kBogusSettingValue = 0xCDCD; | 684 const uint32 kBogusSettingValue = 0xCDCD; |
| 685 spdy::SettingsFlagsAndId id(0); | 685 spdy::SettingsFlagsAndId id(0); |
| 686 id.set_id(kBogusSettingId); | 686 id.set_id(kBogusSettingId); |
| 687 id.set_flags(spdy::SETTINGS_FLAG_PERSISTED); | 687 id.set_flags(spdy::SETTINGS_FLAG_PERSISTED); |
| 688 settings.push_back(spdy::SpdySetting(id, kBogusSettingValue)); | 688 settings.push_back(spdy::SpdySetting(id, kBogusSettingValue)); |
| 689 MockConnect connect_data(false, OK); | 689 MockConnect connect_data(SYNCHRONOUS, OK); |
| 690 scoped_ptr<spdy::SpdyFrame> settings_frame( | 690 scoped_ptr<spdy::SpdyFrame> settings_frame( |
| 691 ConstructSpdySettings(settings)); | 691 ConstructSpdySettings(settings)); |
| 692 MockWrite writes[] = { | 692 MockWrite writes[] = { |
| 693 CreateMockWrite(*settings_frame), | 693 CreateMockWrite(*settings_frame), |
| 694 }; | 694 }; |
| 695 | 695 |
| 696 StaticSocketDataProvider data( | 696 StaticSocketDataProvider data( |
| 697 reads, arraysize(reads), writes, arraysize(writes)); | 697 reads, arraysize(reads), writes, arraysize(writes)); |
| 698 data.set_connect_data(connect_data); | 698 data.set_connect_data(connect_data); |
| 699 session_deps.socket_factory->AddSocketDataProvider(&data); | 699 session_deps.socket_factory->AddSocketDataProvider(&data); |
| (...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 763 HostResolver::RequestInfo info(HostPortPair(test_hosts[i].name, kTestPort)); | 763 HostResolver::RequestInfo info(HostPortPair(test_hosts[i].name, kTestPort)); |
| 764 session_deps.host_resolver->Resolve( | 764 session_deps.host_resolver->Resolve( |
| 765 info, &test_hosts[i].addresses, CompletionCallback(), NULL, | 765 info, &test_hosts[i].addresses, CompletionCallback(), NULL, |
| 766 BoundNetLog()); | 766 BoundNetLog()); |
| 767 | 767 |
| 768 // Setup a HostPortProxyPair | 768 // Setup a HostPortProxyPair |
| 769 test_hosts[i].pair = HostPortProxyPair( | 769 test_hosts[i].pair = HostPortProxyPair( |
| 770 HostPortPair(test_hosts[i].name, kTestPort), ProxyServer::Direct()); | 770 HostPortPair(test_hosts[i].name, kTestPort), ProxyServer::Direct()); |
| 771 } | 771 } |
| 772 | 772 |
| 773 MockConnect connect_data(false, OK); | 773 MockConnect connect_data(SYNCHRONOUS, OK); |
| 774 MockRead reads[] = { | 774 MockRead reads[] = { |
| 775 MockRead(false, ERR_IO_PENDING) // Stall forever. | 775 MockRead(false, ERR_IO_PENDING) // Stall forever. |
| 776 }; | 776 }; |
| 777 | 777 |
| 778 StaticSocketDataProvider data(reads, arraysize(reads), NULL, 0); | 778 StaticSocketDataProvider data(reads, arraysize(reads), NULL, 0); |
| 779 data.set_connect_data(connect_data); | 779 data.set_connect_data(connect_data); |
| 780 session_deps.socket_factory->AddSocketDataProvider(&data); | 780 session_deps.socket_factory->AddSocketDataProvider(&data); |
| 781 | 781 |
| 782 SSLSocketDataProvider ssl(false, OK); | 782 SSLSocketDataProvider ssl(false, OK); |
| 783 session_deps.socket_factory->AddSSLSocketDataProvider(&ssl); | 783 session_deps.socket_factory->AddSSLSocketDataProvider(&ssl); |
| (...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 903 EXPECT_NE(0u, test_http_server_properties->GetSpdySettings( | 903 EXPECT_NE(0u, test_http_server_properties->GetSpdySettings( |
| 904 test_host_port_pair).size()); | 904 test_host_port_pair).size()); |
| 905 spdy_session_pool->OnIPAddressChanged(); | 905 spdy_session_pool->OnIPAddressChanged(); |
| 906 EXPECT_EQ(0u, test_http_server_properties->GetSpdySettings( | 906 EXPECT_EQ(0u, test_http_server_properties->GetSpdySettings( |
| 907 test_host_port_pair).size()); | 907 test_host_port_pair).size()); |
| 908 } | 908 } |
| 909 | 909 |
| 910 TEST_F(SpdySessionTest, NeedsCredentials) { | 910 TEST_F(SpdySessionTest, NeedsCredentials) { |
| 911 SpdySessionDependencies session_deps; | 911 SpdySessionDependencies session_deps; |
| 912 | 912 |
| 913 MockConnect connect_data(false, OK); | 913 MockConnect connect_data(SYNCHRONOUS, OK); |
| 914 MockRead reads[] = { | 914 MockRead reads[] = { |
| 915 MockRead(false, ERR_IO_PENDING) // Stall forever. | 915 MockRead(false, ERR_IO_PENDING) // Stall forever. |
| 916 }; | 916 }; |
| 917 StaticSocketDataProvider data(reads, arraysize(reads), NULL, 0); | 917 StaticSocketDataProvider data(reads, arraysize(reads), NULL, 0); |
| 918 data.set_connect_data(connect_data); | 918 data.set_connect_data(connect_data); |
| 919 session_deps.socket_factory->AddSocketDataProvider(&data); | 919 session_deps.socket_factory->AddSocketDataProvider(&data); |
| 920 | 920 |
| 921 SSLSocketDataProvider ssl(false, OK); | 921 SSLSocketDataProvider ssl(false, OK); |
| 922 ssl.origin_bound_cert_type = CLIENT_CERT_RSA_SIGN; | 922 ssl.origin_bound_cert_type = CLIENT_CERT_RSA_SIGN; |
| 923 ssl.protocol_negotiated = SSLClientSocket::kProtoSPDY3; | 923 ssl.protocol_negotiated = SSLClientSocket::kProtoSPDY3; |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 971 // Flush the SpdySession::OnReadComplete() task. | 971 // Flush the SpdySession::OnReadComplete() task. |
| 972 MessageLoop::current()->RunAllPending(); | 972 MessageLoop::current()->RunAllPending(); |
| 973 | 973 |
| 974 spdy_session_pool->Remove(session); | 974 spdy_session_pool->Remove(session); |
| 975 EXPECT_FALSE(spdy_session_pool->HasSession(pair)); | 975 EXPECT_FALSE(spdy_session_pool->HasSession(pair)); |
| 976 } | 976 } |
| 977 | 977 |
| 978 TEST_F(SpdySessionTest, SendCredentials) { | 978 TEST_F(SpdySessionTest, SendCredentials) { |
| 979 SpdySessionDependencies session_deps; | 979 SpdySessionDependencies session_deps; |
| 980 | 980 |
| 981 MockConnect connect_data(false, OK); | 981 MockConnect connect_data(SYNCHRONOUS, OK); |
| 982 MockRead reads[] = { | 982 MockRead reads[] = { |
| 983 MockRead(false, ERR_IO_PENDING) // Stall forever. | 983 MockRead(false, ERR_IO_PENDING) // Stall forever. |
| 984 }; | 984 }; |
| 985 spdy::SpdySettings settings; | 985 spdy::SpdySettings settings; |
| 986 scoped_ptr<spdy::SpdyFrame> settings_frame( | 986 scoped_ptr<spdy::SpdyFrame> settings_frame( |
| 987 ConstructSpdySettings(settings)); | 987 ConstructSpdySettings(settings)); |
| 988 MockWrite writes[] = { | 988 MockWrite writes[] = { |
| 989 CreateMockWrite(*settings_frame), | 989 CreateMockWrite(*settings_frame), |
| 990 }; | 990 }; |
| 991 StaticSocketDataProvider data(reads, arraysize(reads), | 991 StaticSocketDataProvider data(reads, arraysize(reads), |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1044 EXPECT_TRUE(session->NeedsCredentials(test_host_port_pair2)); | 1044 EXPECT_TRUE(session->NeedsCredentials(test_host_port_pair2)); |
| 1045 | 1045 |
| 1046 // Flush the SpdySession::OnReadComplete() task. | 1046 // Flush the SpdySession::OnReadComplete() task. |
| 1047 MessageLoop::current()->RunAllPending(); | 1047 MessageLoop::current()->RunAllPending(); |
| 1048 | 1048 |
| 1049 spdy_session_pool->Remove(session); | 1049 spdy_session_pool->Remove(session); |
| 1050 EXPECT_FALSE(spdy_session_pool->HasSession(pair)); | 1050 EXPECT_FALSE(spdy_session_pool->HasSession(pair)); |
| 1051 } | 1051 } |
| 1052 | 1052 |
| 1053 } // namespace net | 1053 } // namespace net |
| OLD | NEW |