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/quic/chromium/quic_stream_factory.h" | 5 #include "net/quic/chromium/quic_stream_factory.h" |
6 | 6 |
7 #include <ostream> | 7 #include <ostream> |
8 #include <utility> | 8 #include <utility> |
9 | 9 |
10 #include "base/bind.h" | 10 #include "base/bind.h" |
(...skipping 2133 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2144 | 2144 |
2145 stream.reset(); | 2145 stream.reset(); |
2146 EXPECT_TRUE(socket_data.AllReadDataConsumed()); | 2146 EXPECT_TRUE(socket_data.AllReadDataConsumed()); |
2147 EXPECT_TRUE(socket_data.AllWriteDataConsumed()); | 2147 EXPECT_TRUE(socket_data.AllWriteDataConsumed()); |
2148 EXPECT_TRUE(socket_data1.AllReadDataConsumed()); | 2148 EXPECT_TRUE(socket_data1.AllReadDataConsumed()); |
2149 EXPECT_TRUE(socket_data1.AllWriteDataConsumed()); | 2149 EXPECT_TRUE(socket_data1.AllWriteDataConsumed()); |
2150 EXPECT_TRUE(socket_data2.AllReadDataConsumed()); | 2150 EXPECT_TRUE(socket_data2.AllReadDataConsumed()); |
2151 EXPECT_TRUE(socket_data2.AllWriteDataConsumed()); | 2151 EXPECT_TRUE(socket_data2.AllWriteDataConsumed()); |
2152 } | 2152 } |
2153 | 2153 |
| 2154 TEST_P(QuicStreamFactoryTest, |
| 2155 OnNetworkChangeDisconnectedPauseBeforeConnectedMultipleSessions) { |
| 2156 InitializeConnectionMigrationTest({kDefaultNetworkForTests}); |
| 2157 |
| 2158 MockQuicData socket_data1; |
| 2159 socket_data1.AddRead(SYNCHRONOUS, ERR_IO_PENDING); |
| 2160 socket_data1.AddWrite(ASYNC, OK); |
| 2161 socket_data1.AddSocketDataToFactory(&socket_factory_); |
| 2162 MockQuicData socket_data2; |
| 2163 socket_data2.AddRead(SYNCHRONOUS, ERR_IO_PENDING); |
| 2164 |
| 2165 socket_data2.AddWrite(ASYNC, OK); |
| 2166 socket_data2.AddSocketDataToFactory(&socket_factory_); |
| 2167 |
| 2168 HostPortPair server1(kDefaultServerHostName, 443); |
| 2169 HostPortPair server2(kServer2HostName, 443); |
| 2170 |
| 2171 ProofVerifyDetailsChromium verify_details = DefaultProofVerifyDetails(); |
| 2172 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details); |
| 2173 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details); |
| 2174 |
| 2175 host_resolver_.set_synchronous_mode(true); |
| 2176 host_resolver_.rules()->AddIPLiteralRule(server1.host(), "192.168.0.1", ""); |
| 2177 host_resolver_.rules()->AddIPLiteralRule(server2.host(), "192.168.0.2", ""); |
| 2178 |
| 2179 // Create request and QuicHttpStream to create session1. |
| 2180 QuicStreamRequest request1(factory_.get()); |
| 2181 EXPECT_EQ(OK, request1.Request(server1, privacy_mode_, |
| 2182 /*cert_verify_flags=*/0, url_, "GET", net_log_, |
| 2183 callback_.callback())); |
| 2184 std::unique_ptr<QuicHttpStream> stream1 = request1.CreateStream(); |
| 2185 EXPECT_TRUE(stream1.get()); |
| 2186 |
| 2187 // Create request and QuicHttpStream to create session2. |
| 2188 QuicStreamRequest request2(factory_.get()); |
| 2189 EXPECT_EQ(OK, request2.Request(server2, privacy_mode_, |
| 2190 /*cert_verify_flags=*/0, url2_, "GET", |
| 2191 net_log_, callback_.callback())); |
| 2192 std::unique_ptr<QuicHttpStream> stream2 = request2.CreateStream(); |
| 2193 EXPECT_TRUE(stream2.get()); |
| 2194 |
| 2195 QuicChromiumClientSession* session1 = GetActiveSession(server1); |
| 2196 QuicChromiumClientSession* session2 = GetActiveSession(server2); |
| 2197 EXPECT_NE(session1, session2); |
| 2198 |
| 2199 // Cause QUIC stream to be created and send GET so session1 has an open |
| 2200 // stream. |
| 2201 HttpRequestInfo request_info1; |
| 2202 request_info1.method = "GET"; |
| 2203 request_info1.url = url_; |
| 2204 EXPECT_EQ(OK, stream1->InitializeStream(&request_info1, DEFAULT_PRIORITY, |
| 2205 net_log_, CompletionCallback())); |
| 2206 HttpResponseInfo response1; |
| 2207 HttpRequestHeaders request_headers1; |
| 2208 EXPECT_EQ(OK, stream1->SendRequest(request_headers1, &response1, |
| 2209 callback_.callback())); |
| 2210 |
| 2211 // Cause QUIC stream to be created and send GET so session2 has an open |
| 2212 // stream. |
| 2213 HttpRequestInfo request_info2; |
| 2214 request_info2.method = "GET"; |
| 2215 request_info2.url = url_; |
| 2216 EXPECT_EQ(OK, stream2->InitializeStream(&request_info2, DEFAULT_PRIORITY, |
| 2217 net_log_, CompletionCallback())); |
| 2218 HttpResponseInfo response2; |
| 2219 HttpRequestHeaders request_headers2; |
| 2220 EXPECT_EQ(OK, stream2->SendRequest(request_headers2, &response2, |
| 2221 callback_.callback())); |
| 2222 |
| 2223 // Cause both sessions to be paused due to DISCONNECTED. |
| 2224 scoped_mock_network_change_notifier_->mock_network_change_notifier() |
| 2225 ->NotifyNetworkDisconnected(kDefaultNetworkForTests); |
| 2226 |
| 2227 // Ensure that both sessions are paused but alive. |
| 2228 EXPECT_TRUE(QuicStreamFactoryPeer::IsLiveSession(factory_.get(), session1)); |
| 2229 EXPECT_TRUE(QuicStreamFactoryPeer::IsLiveSession(factory_.get(), session2)); |
| 2230 |
| 2231 // Add new sockets to use post migration. |
| 2232 MockConnect connect_result = |
| 2233 MockConnect(SYNCHRONOUS, ERR_INTERNET_DISCONNECTED); |
| 2234 SequencedSocketData socket_data3(connect_result, nullptr, 0, nullptr, 0); |
| 2235 socket_factory_.AddSocketDataProvider(&socket_data3); |
| 2236 SequencedSocketData socket_data4(connect_result, nullptr, 0, nullptr, 0); |
| 2237 socket_factory_.AddSocketDataProvider(&socket_data4); |
| 2238 |
| 2239 // Add a new network and cause migration to bad sockets, causing sessions to |
| 2240 // close. |
| 2241 scoped_mock_network_change_notifier_->mock_network_change_notifier() |
| 2242 ->SetConnectedNetworksList({kNewNetworkForTests}); |
| 2243 scoped_mock_network_change_notifier_->mock_network_change_notifier() |
| 2244 ->NotifyNetworkConnected(kNewNetworkForTests); |
| 2245 |
| 2246 EXPECT_FALSE(QuicStreamFactoryPeer::IsLiveSession(factory_.get(), session1)); |
| 2247 EXPECT_FALSE(QuicStreamFactoryPeer::IsLiveSession(factory_.get(), session2)); |
| 2248 |
| 2249 EXPECT_TRUE(socket_data1.AllReadDataConsumed()); |
| 2250 EXPECT_TRUE(socket_data1.AllWriteDataConsumed()); |
| 2251 EXPECT_TRUE(socket_data2.AllReadDataConsumed()); |
| 2252 EXPECT_TRUE(socket_data2.AllWriteDataConsumed()); |
| 2253 } |
| 2254 |
2154 TEST_P(QuicStreamFactoryTest, MigrateSessionEarly) { | 2255 TEST_P(QuicStreamFactoryTest, MigrateSessionEarly) { |
2155 InitializeConnectionMigrationTest( | 2256 InitializeConnectionMigrationTest( |
2156 {kDefaultNetworkForTests, kNewNetworkForTests}); | 2257 {kDefaultNetworkForTests, kNewNetworkForTests}); |
2157 ProofVerifyDetailsChromium verify_details = DefaultProofVerifyDetails(); | 2258 ProofVerifyDetailsChromium verify_details = DefaultProofVerifyDetails(); |
2158 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details); | 2259 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details); |
2159 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details); | 2260 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details); |
2160 | 2261 |
2161 MockQuicData socket_data; | 2262 MockQuicData socket_data; |
2162 socket_data.AddRead(SYNCHRONOUS, ERR_IO_PENDING); | 2263 socket_data.AddRead(SYNCHRONOUS, ERR_IO_PENDING); |
2163 socket_data.AddWrite( | 2264 socket_data.AddWrite( |
(...skipping 2884 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5048 // Clear all cached states. | 5149 // Clear all cached states. |
5049 factory_->ClearCachedStatesInCryptoConfig( | 5150 factory_->ClearCachedStatesInCryptoConfig( |
5050 base::Callback<bool(const GURL&)>()); | 5151 base::Callback<bool(const GURL&)>()); |
5051 EXPECT_TRUE(test_cases[0].state->certs().empty()); | 5152 EXPECT_TRUE(test_cases[0].state->certs().empty()); |
5052 EXPECT_TRUE(test_cases[1].state->certs().empty()); | 5153 EXPECT_TRUE(test_cases[1].state->certs().empty()); |
5053 EXPECT_TRUE(test_cases[2].state->certs().empty()); | 5154 EXPECT_TRUE(test_cases[2].state->certs().empty()); |
5054 } | 5155 } |
5055 | 5156 |
5056 } // namespace test | 5157 } // namespace test |
5057 } // namespace net | 5158 } // namespace net |
OLD | NEW |