Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(33)

Side by Side Diff: net/quic/chromium/quic_stream_factory_test.cc

Issue 2344053003: Fixes crash bug when iterating through sessions in OnNetworkConnected. (Closed)
Patch Set: Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « net/quic/chromium/quic_stream_factory.cc ('k') | no next file » | 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/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
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
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
OLDNEW
« no previous file with comments | « net/quic/chromium/quic_stream_factory.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698