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

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

Issue 2334943002: Add a new QuicChromiumClientSession::Handle class (Closed)
Patch Set: cleanup Created 3 years, 7 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
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_chromium_client_session.h" 5 #include "net/quic/chromium/quic_chromium_client_session.h"
6 6
7 #include "base/base64.h" 7 #include "base/base64.h"
8 #include "base/files/file_path.h" 8 #include "base/files/file_path.h"
9 #include "base/memory/ptr_util.h" 9 #include "base/memory/ptr_util.h"
10 #include "base/rand_util.h" 10 #include "base/rand_util.h"
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
82 class QuicChromiumClientSessionTest 82 class QuicChromiumClientSessionTest
83 : public ::testing::TestWithParam<QuicVersion> { 83 : public ::testing::TestWithParam<QuicVersion> {
84 protected: 84 protected:
85 QuicChromiumClientSessionTest() 85 QuicChromiumClientSessionTest()
86 : crypto_config_(crypto_test_utils::ProofVerifierForTesting()), 86 : crypto_config_(crypto_test_utils::ProofVerifierForTesting()),
87 default_read_(new MockRead(SYNCHRONOUS, ERR_IO_PENDING, 0)), 87 default_read_(new MockRead(SYNCHRONOUS, ERR_IO_PENDING, 0)),
88 socket_data_( 88 socket_data_(
89 new SequencedSocketData(default_read_.get(), 1, nullptr, 0)), 89 new SequencedSocketData(default_read_.get(), 1, nullptr, 0)),
90 random_(0), 90 random_(0),
91 helper_(&clock_, &random_), 91 helper_(&clock_, &random_),
92 server_id_(kServerHostname, kServerPort, PRIVACY_MODE_DISABLED),
92 client_maker_(GetParam(), 93 client_maker_(GetParam(),
93 0, 94 0,
94 &clock_, 95 &clock_,
95 kServerHostname, 96 kServerHostname,
96 Perspective::IS_CLIENT), 97 Perspective::IS_CLIENT),
97 server_maker_(GetParam(), 98 server_maker_(GetParam(),
98 0, 99 0,
99 &clock_, 100 &clock_,
100 kServerHostname, 101 kServerHostname,
101 Perspective::IS_SERVER) { 102 Perspective::IS_SERVER) {
(...skipping 12 matching lines...) Expand all
114 QuicChromiumPacketWriter* writer = 115 QuicChromiumPacketWriter* writer =
115 new net::QuicChromiumPacketWriter(socket.get()); 116 new net::QuicChromiumPacketWriter(socket.get());
116 QuicConnection* connection = new QuicConnection( 117 QuicConnection* connection = new QuicConnection(
117 0, QuicSocketAddress(QuicSocketAddressImpl(kIpEndPoint)), &helper_, 118 0, QuicSocketAddress(QuicSocketAddressImpl(kIpEndPoint)), &helper_,
118 &alarm_factory_, writer, true, Perspective::IS_CLIENT, 119 &alarm_factory_, writer, true, Perspective::IS_CLIENT,
119 SupportedVersions(GetParam())); 120 SupportedVersions(GetParam()));
120 session_.reset(new QuicChromiumClientSession( 121 session_.reset(new QuicChromiumClientSession(
121 connection, std::move(socket), 122 connection, std::move(socket),
122 /*stream_factory=*/nullptr, &crypto_client_stream_factory_, &clock_, 123 /*stream_factory=*/nullptr, &crypto_client_stream_factory_, &clock_,
123 &transport_security_state_, 124 &transport_security_state_,
124 base::WrapUnique(static_cast<QuicServerInfo*>(nullptr)), 125 base::WrapUnique(static_cast<QuicServerInfo*>(nullptr)), server_id_,
125 QuicServerId(kServerHostname, kServerPort, PRIVACY_MODE_DISABLED),
126 /*require_confirmation=*/false, kQuicYieldAfterPacketsRead, 126 /*require_confirmation=*/false, kQuicYieldAfterPacketsRead,
127 QuicTime::Delta::FromMilliseconds(kQuicYieldAfterDurationMilliseconds), 127 QuicTime::Delta::FromMilliseconds(kQuicYieldAfterDurationMilliseconds),
128 /*cert_verify_flags=*/0, DefaultQuicConfig(), &crypto_config_, 128 /*cert_verify_flags=*/0, DefaultQuicConfig(), &crypto_config_,
129 "CONNECTION_UNKNOWN", base::TimeTicks::Now(), base::TimeTicks::Now(), 129 "CONNECTION_UNKNOWN", base::TimeTicks::Now(), base::TimeTicks::Now(),
130 &push_promise_index_, &test_push_delegate_, 130 &push_promise_index_, &test_push_delegate_,
131 base::ThreadTaskRunnerHandle::Get().get(), 131 base::ThreadTaskRunnerHandle::Get().get(),
132 /*socket_performance_watcher=*/nullptr, &net_log_)); 132 /*socket_performance_watcher=*/nullptr, &net_log_));
133 133
134 scoped_refptr<X509Certificate> cert( 134 scoped_refptr<X509Certificate> cert(
135 ImportCertFromFile(GetTestCertsDirectory(), "spdy_pooling.pem")); 135 ImportCertFromFile(GetTestCertsDirectory(), "spdy_pooling.pem"));
136 verify_details_.cert_verify_result.verified_cert = cert; 136 verify_details_.cert_verify_result.verified_cert = cert;
137 verify_details_.cert_verify_result.is_issued_by_known_root = true; 137 verify_details_.cert_verify_result.is_issued_by_known_root = true;
138 session_->Initialize(); 138 session_->Initialize();
139 session_->StartReading(); 139 session_->StartReading();
140 writer->set_delegate(session_.get()); 140 writer->set_delegate(session_.get());
141 } 141 }
142 142
143 void TearDown() override { 143 void TearDown() override {
144 session_->CloseSessionOnError(ERR_ABORTED, QUIC_INTERNAL_ERROR); 144 if (session_)
145 session_->CloseSessionOnError(ERR_ABORTED, QUIC_INTERNAL_ERROR);
145 } 146 }
146 147
147 void CompleteCryptoHandshake() { 148 void CompleteCryptoHandshake() {
148 ASSERT_THAT(session_->CryptoConnect(callback_.callback()), IsOk()); 149 ASSERT_THAT(session_->CryptoConnect(callback_.callback()), IsOk());
149 } 150 }
150 151
151 QuicChromiumPacketWriter* CreateQuicChromiumPacketWriter( 152 QuicChromiumPacketWriter* CreateQuicChromiumPacketWriter(
152 DatagramClientSocket* socket, 153 DatagramClientSocket* socket,
153 QuicChromiumClientSession* session) const { 154 QuicChromiumClientSession* session) const {
154 std::unique_ptr<QuicChromiumPacketWriter> writer( 155 std::unique_ptr<QuicChromiumPacketWriter> writer(
155 new QuicChromiumPacketWriter(socket)); 156 new QuicChromiumPacketWriter(socket));
156 writer->set_delegate(session); 157 writer->set_delegate(session);
157 return writer.release(); 158 return writer.release();
158 } 159 }
159 160
160 QuicCryptoClientConfig crypto_config_; 161 QuicCryptoClientConfig crypto_config_;
161 TestNetLog net_log_; 162 TestNetLog net_log_;
162 BoundTestNetLog bound_test_net_log_; 163 BoundTestNetLog bound_test_net_log_;
163 MockClientSocketFactory socket_factory_; 164 MockClientSocketFactory socket_factory_;
164 std::unique_ptr<MockRead> default_read_; 165 std::unique_ptr<MockRead> default_read_;
165 std::unique_ptr<SequencedSocketData> socket_data_; 166 std::unique_ptr<SequencedSocketData> socket_data_;
166 MockClock clock_; 167 MockClock clock_;
167 MockRandom random_; 168 MockRandom random_;
168 QuicChromiumConnectionHelper helper_; 169 QuicChromiumConnectionHelper helper_;
169 MockAlarmFactory alarm_factory_; 170 MockAlarmFactory alarm_factory_;
170 TransportSecurityState transport_security_state_; 171 TransportSecurityState transport_security_state_;
171 MockCryptoClientStreamFactory crypto_client_stream_factory_; 172 MockCryptoClientStreamFactory crypto_client_stream_factory_;
172 QuicClientPushPromiseIndex push_promise_index_; 173 QuicClientPushPromiseIndex push_promise_index_;
174 QuicServerId server_id_;
173 std::unique_ptr<QuicChromiumClientSession> session_; 175 std::unique_ptr<QuicChromiumClientSession> session_;
174 TestServerPushDelegate test_push_delegate_; 176 TestServerPushDelegate test_push_delegate_;
175 QuicConnectionVisitorInterface* visitor_; 177 QuicConnectionVisitorInterface* visitor_;
176 TestCompletionCallback callback_; 178 TestCompletionCallback callback_;
177 QuicTestPacketMaker client_maker_; 179 QuicTestPacketMaker client_maker_;
178 QuicTestPacketMaker server_maker_; 180 QuicTestPacketMaker server_maker_;
179 ProofVerifyDetailsChromium verify_details_; 181 ProofVerifyDetailsChromium verify_details_;
180 }; 182 };
181 183
182 INSTANTIATE_TEST_CASE_P(Tests, 184 INSTANTIATE_TEST_CASE_P(Tests,
183 QuicChromiumClientSessionTest, 185 QuicChromiumClientSessionTest,
184 ::testing::ValuesIn(AllSupportedVersions())); 186 ::testing::ValuesIn(AllSupportedVersions()));
185 187
186 TEST_P(QuicChromiumClientSessionTest, CryptoConnect) { 188 TEST_P(QuicChromiumClientSessionTest, CryptoConnect) {
187 MockRead reads[] = {MockRead(SYNCHRONOUS, ERR_IO_PENDING, 0)}; 189 MockRead reads[] = {MockRead(SYNCHRONOUS, ERR_IO_PENDING, 0)};
188 std::unique_ptr<QuicEncryptedPacket> settings_packet( 190 std::unique_ptr<QuicEncryptedPacket> settings_packet(
189 client_maker_.MakeInitialSettingsPacket(1, nullptr)); 191 client_maker_.MakeInitialSettingsPacket(1, nullptr));
190 MockWrite writes[] = { 192 MockWrite writes[] = {
191 MockWrite(ASYNC, settings_packet->data(), settings_packet->length(), 1)}; 193 MockWrite(ASYNC, settings_packet->data(), settings_packet->length(), 1)};
192 socket_data_.reset(new SequencedSocketData(reads, arraysize(reads), writes, 194 socket_data_.reset(new SequencedSocketData(reads, arraysize(reads), writes,
193 arraysize(writes))); 195 arraysize(writes)));
194 Initialize(); 196 Initialize();
195 CompleteCryptoHandshake(); 197 CompleteCryptoHandshake();
196 } 198 }
197 199
200 TEST_P(QuicChromiumClientSessionTest, GetHandle) {
201 MockQuicData quic_data;
202 quic_data.AddWrite(client_maker_.MakeInitialSettingsPacket(1, nullptr));
203 quic_data.AddRead(ASYNC, ERR_IO_PENDING);
204 quic_data.AddRead(ASYNC, OK); // EOF
205 quic_data.AddSocketDataToFactory(&socket_factory_);
206
207 Initialize();
208
209 NetLogWithSource session_net_log = session_->net_log();
210 EXPECT_EQ(NetLogSourceType::QUIC_SESSION, session_net_log.source().type);
211 EXPECT_EQ(&net_log_, session_net_log.net_log());
212
213 QuicChromiumClientSession::Handle handle = session_->GetHandle();
214 EXPECT_TRUE(handle.IsConnected());
215 EXPECT_FALSE(handle.IsCryptoHandshakeConfirmed());
216 EXPECT_EQ(GetParam(), handle.GetQuicVersion());
217 EXPECT_EQ(server_id_, handle.server_id());
218 EXPECT_EQ(session_net_log.source().type, handle.net_log().source().type);
219 EXPECT_EQ(session_net_log.source().id, handle.net_log().source().id);
220 EXPECT_EQ(session_net_log.net_log(), handle.net_log().net_log());
221 IPEndPoint address;
222 EXPECT_EQ(OK, handle.GetPeerAddress(&address));
223 EXPECT_EQ(kIpEndPoint, address);
224 EXPECT_TRUE(handle.CreatePacketBundler(QuicConnection::NO_ACK).get() !=
225 nullptr);
226 {
227 // Verify that the copy constructor works as expected.
228 QuicChromiumClientSession::Handle handle2(handle);
229 EXPECT_TRUE(handle2.IsConnected());
230 EXPECT_FALSE(handle2.IsCryptoHandshakeConfirmed());
231 }
232
233 CompleteCryptoHandshake();
234
235 EXPECT_TRUE(handle.IsCryptoHandshakeConfirmed());
236
237 // Request a stream and verify that a stream was created.
238 auto stream_request =
239 handle.CreateStreamRequest(/*requires_confirmation=*/false);
240 TestCompletionCallback callback;
241 ASSERT_EQ(OK, stream_request->StartRequest(callback.callback()));
242 EXPECT_TRUE(stream_request->ReleaseStream() != nullptr);
243
244 quic_data.Resume();
245 EXPECT_TRUE(quic_data.AllReadDataConsumed());
246 EXPECT_TRUE(quic_data.AllWriteDataConsumed());
247
248 // Veirfy that the handle works correctly after the session is closed.
249 EXPECT_FALSE(handle.IsConnected());
250 EXPECT_TRUE(handle.IsCryptoHandshakeConfirmed());
251 EXPECT_EQ(GetParam(), handle.GetQuicVersion());
252 EXPECT_EQ(server_id_, handle.server_id());
253 EXPECT_EQ(session_net_log.source().type, handle.net_log().source().type);
254 EXPECT_EQ(session_net_log.source().id, handle.net_log().source().id);
255 EXPECT_EQ(session_net_log.net_log(), handle.net_log().net_log());
256 EXPECT_EQ(ERR_CONNECTION_CLOSED, handle.GetPeerAddress(&address));
257 EXPECT_TRUE(handle.CreatePacketBundler(QuicConnection::NO_ACK).get() ==
258 nullptr);
259 {
260 // Verify that the copy constructor works as expected, even after the
261 // session is closed.
262 QuicChromiumClientSession::Handle handle2(handle);
263 EXPECT_FALSE(handle2.IsConnected());
264 EXPECT_TRUE(handle2.IsCryptoHandshakeConfirmed());
265 }
266
267 {
268 // Verify that GetHandle() works even after the session is closed.
269 QuicChromiumClientSession::Handle handle2 = session_->GetHandle();
270 EXPECT_FALSE(handle2.IsConnected());
271 EXPECT_TRUE(handle2.IsCryptoHandshakeConfirmed());
272 }
273
274 auto stream_request2 =
275 handle.CreateStreamRequest(/*requires_confirmation=*/false);
276 ASSERT_EQ(ERR_CONNECTION_CLOSED,
277 stream_request->StartRequest(callback.callback()));
278
279 session_.reset();
280
281 // Veirfy that the handle works correctly after the session is delete.
282 EXPECT_FALSE(handle.IsConnected());
283 EXPECT_TRUE(handle.IsCryptoHandshakeConfirmed());
284 EXPECT_EQ(GetParam(), handle.GetQuicVersion());
285 EXPECT_EQ(server_id_, handle.server_id());
286 EXPECT_EQ(session_net_log.source().type, handle.net_log().source().type);
287 EXPECT_EQ(session_net_log.source().id, handle.net_log().source().id);
288 EXPECT_EQ(session_net_log.net_log(), handle.net_log().net_log());
289 EXPECT_EQ(ERR_CONNECTION_CLOSED, handle.GetPeerAddress(&address));
290 EXPECT_TRUE(handle.CreatePacketBundler(QuicConnection::NO_ACK).get() ==
291 nullptr);
292 auto stream_request3 =
293 handle.CreateStreamRequest(/*requires_confirmation=*/false);
294 ASSERT_EQ(ERR_CONNECTION_CLOSED,
295 stream_request->StartRequest(callback.callback()));
296 {
297 // Verify that the copy constructor works as expected, even after the
298 // session is deleted.
299 QuicChromiumClientSession::Handle handle2(handle);
300 EXPECT_FALSE(handle2.IsConnected());
301 EXPECT_TRUE(handle2.IsCryptoHandshakeConfirmed());
302 }
303 }
304
198 TEST_P(QuicChromiumClientSessionTest, StreamRequest) { 305 TEST_P(QuicChromiumClientSessionTest, StreamRequest) {
199 MockQuicData quic_data; 306 MockQuicData quic_data;
200 quic_data.AddWrite(client_maker_.MakeInitialSettingsPacket(1, nullptr)); 307 quic_data.AddWrite(client_maker_.MakeInitialSettingsPacket(1, nullptr));
201 quic_data.AddRead(ASYNC, ERR_IO_PENDING); 308 quic_data.AddRead(ASYNC, ERR_IO_PENDING);
202 quic_data.AddRead(ASYNC, OK); // EOF 309 quic_data.AddRead(ASYNC, OK); // EOF
203 quic_data.AddSocketDataToFactory(&socket_factory_); 310 quic_data.AddSocketDataToFactory(&socket_factory_);
204 311
205 Initialize(); 312 Initialize();
206 CompleteCryptoHandshake(); 313 CompleteCryptoHandshake();
207 314
208 // Request a stream and verify that a stream was created. 315 // Request a stream and verify that a stream was created.
316 QuicChromiumClientSession::Handle handle = session_->GetHandle();
209 std::unique_ptr<QuicChromiumClientSession::StreamRequest> stream_request = 317 std::unique_ptr<QuicChromiumClientSession::StreamRequest> stream_request =
210 session_->CreateStreamRequest(/*requires_confirmation=*/false); 318 handle.CreateStreamRequest(/*requires_confirmation=*/false);
211 TestCompletionCallback callback; 319 TestCompletionCallback callback;
212 ASSERT_EQ(OK, stream_request->StartRequest(callback.callback())); 320 ASSERT_EQ(OK, stream_request->StartRequest(callback.callback()));
213 EXPECT_TRUE(stream_request->ReleaseStream() != nullptr); 321 EXPECT_TRUE(stream_request->ReleaseStream() != nullptr);
214 322
215 quic_data.Resume(); 323 quic_data.Resume();
216 EXPECT_TRUE(quic_data.AllReadDataConsumed()); 324 EXPECT_TRUE(quic_data.AllReadDataConsumed());
217 EXPECT_TRUE(quic_data.AllWriteDataConsumed()); 325 EXPECT_TRUE(quic_data.AllWriteDataConsumed());
218 } 326 }
219 327
220 TEST_P(QuicChromiumClientSessionTest, ConfirmationRequiredStreamRequest) { 328 TEST_P(QuicChromiumClientSessionTest, ConfirmationRequiredStreamRequest) {
221 MockQuicData quic_data; 329 MockQuicData quic_data;
222 quic_data.AddWrite(client_maker_.MakeInitialSettingsPacket(1, nullptr)); 330 quic_data.AddWrite(client_maker_.MakeInitialSettingsPacket(1, nullptr));
223 quic_data.AddRead(ASYNC, ERR_IO_PENDING); 331 quic_data.AddRead(ASYNC, ERR_IO_PENDING);
224 quic_data.AddRead(ASYNC, OK); // EOF 332 quic_data.AddRead(ASYNC, OK); // EOF
225 quic_data.AddSocketDataToFactory(&socket_factory_); 333 quic_data.AddSocketDataToFactory(&socket_factory_);
226 334
227 Initialize(); 335 Initialize();
228 CompleteCryptoHandshake(); 336 CompleteCryptoHandshake();
229 337
230 // Request a stream and verify that a stream was created. 338 // Request a stream and verify that a stream was created.
339 QuicChromiumClientSession::Handle handle = session_->GetHandle();
231 std::unique_ptr<QuicChromiumClientSession::StreamRequest> stream_request = 340 std::unique_ptr<QuicChromiumClientSession::StreamRequest> stream_request =
232 session_->CreateStreamRequest(/*requires_confirmation=*/true); 341 handle.CreateStreamRequest(/*requires_confirmation=*/true);
233 TestCompletionCallback callback; 342 TestCompletionCallback callback;
234 ASSERT_EQ(OK, stream_request->StartRequest(callback.callback())); 343 ASSERT_EQ(OK, stream_request->StartRequest(callback.callback()));
235 EXPECT_TRUE(stream_request->ReleaseStream() != nullptr); 344 EXPECT_TRUE(stream_request->ReleaseStream() != nullptr);
236 345
237 quic_data.Resume(); 346 quic_data.Resume();
238 EXPECT_TRUE(quic_data.AllReadDataConsumed()); 347 EXPECT_TRUE(quic_data.AllReadDataConsumed());
239 EXPECT_TRUE(quic_data.AllWriteDataConsumed()); 348 EXPECT_TRUE(quic_data.AllWriteDataConsumed());
240 } 349 }
241 350
242 TEST_P(QuicChromiumClientSessionTest, StreamRequestBeforeConfirmation) { 351 TEST_P(QuicChromiumClientSessionTest, StreamRequestBeforeConfirmation) {
243 MockQuicData quic_data; 352 MockQuicData quic_data;
244 quic_data.AddWrite(client_maker_.MakeInitialSettingsPacket(1, nullptr)); 353 quic_data.AddWrite(client_maker_.MakeInitialSettingsPacket(1, nullptr));
245 quic_data.AddRead(ASYNC, ERR_IO_PENDING); 354 quic_data.AddRead(ASYNC, ERR_IO_PENDING);
246 quic_data.AddRead(ASYNC, OK); // EOF 355 quic_data.AddRead(ASYNC, OK); // EOF
247 quic_data.AddSocketDataToFactory(&socket_factory_); 356 quic_data.AddSocketDataToFactory(&socket_factory_);
248 357
249 Initialize(); 358 Initialize();
250 359
251 // Request a stream and verify that a stream was created. 360 // Request a stream and verify that a stream was created.
361 QuicChromiumClientSession::Handle handle = session_->GetHandle();
252 std::unique_ptr<QuicChromiumClientSession::StreamRequest> stream_request = 362 std::unique_ptr<QuicChromiumClientSession::StreamRequest> stream_request =
253 session_->CreateStreamRequest(/*requires_confirmation=*/true); 363 handle.CreateStreamRequest(/*requires_confirmation=*/true);
254 TestCompletionCallback callback; 364 TestCompletionCallback callback;
255 ASSERT_EQ(ERR_IO_PENDING, stream_request->StartRequest(callback.callback())); 365 ASSERT_EQ(ERR_IO_PENDING, stream_request->StartRequest(callback.callback()));
256 366
257 CompleteCryptoHandshake(); 367 CompleteCryptoHandshake();
258 368
259 EXPECT_THAT(callback.WaitForResult(), IsOk()); 369 EXPECT_THAT(callback.WaitForResult(), IsOk());
260 370
261 EXPECT_TRUE(stream_request->ReleaseStream() != nullptr); 371 EXPECT_TRUE(stream_request->ReleaseStream() != nullptr);
262 372
263 quic_data.Resume(); 373 quic_data.Resume();
264 EXPECT_TRUE(quic_data.AllReadDataConsumed()); 374 EXPECT_TRUE(quic_data.AllReadDataConsumed());
265 EXPECT_TRUE(quic_data.AllWriteDataConsumed()); 375 EXPECT_TRUE(quic_data.AllWriteDataConsumed());
266 } 376 }
267 377
268 TEST_P(QuicChromiumClientSessionTest, CancelStreamRequestBeforeRelease) { 378 TEST_P(QuicChromiumClientSessionTest, CancelStreamRequestBeforeRelease) {
269 MockQuicData quic_data; 379 MockQuicData quic_data;
270 quic_data.AddWrite(client_maker_.MakeInitialSettingsPacket(1, nullptr)); 380 quic_data.AddWrite(client_maker_.MakeInitialSettingsPacket(1, nullptr));
271 quic_data.AddWrite(client_maker_.MakeRstPacket(2, true, kClientDataStreamId1, 381 quic_data.AddWrite(client_maker_.MakeRstPacket(2, true, kClientDataStreamId1,
272 QUIC_STREAM_CANCELLED)); 382 QUIC_STREAM_CANCELLED));
273 quic_data.AddRead(ASYNC, ERR_IO_PENDING); 383 quic_data.AddRead(ASYNC, ERR_IO_PENDING);
274 quic_data.AddRead(ASYNC, OK); // EOF 384 quic_data.AddRead(ASYNC, OK); // EOF
275 quic_data.AddSocketDataToFactory(&socket_factory_); 385 quic_data.AddSocketDataToFactory(&socket_factory_);
276 386
277 Initialize(); 387 Initialize();
278 CompleteCryptoHandshake(); 388 CompleteCryptoHandshake();
279 389
280 // Request a stream and cancel it without releasing the stream. 390 // Request a stream and cancel it without releasing the stream.
391 QuicChromiumClientSession::Handle handle = session_->GetHandle();
281 std::unique_ptr<QuicChromiumClientSession::StreamRequest> stream_request = 392 std::unique_ptr<QuicChromiumClientSession::StreamRequest> stream_request =
282 session_->CreateStreamRequest(/*requires_confirmation=*/false); 393 handle.CreateStreamRequest(/*requires_confirmation=*/false);
283 TestCompletionCallback callback; 394 TestCompletionCallback callback;
284 ASSERT_EQ(OK, stream_request->StartRequest(callback.callback())); 395 ASSERT_EQ(OK, stream_request->StartRequest(callback.callback()));
285 stream_request.reset(); 396 stream_request.reset();
286 397
287 quic_data.Resume(); 398 quic_data.Resume();
288 EXPECT_TRUE(quic_data.AllReadDataConsumed()); 399 EXPECT_TRUE(quic_data.AllReadDataConsumed());
289 EXPECT_TRUE(quic_data.AllWriteDataConsumed()); 400 EXPECT_TRUE(quic_data.AllWriteDataConsumed());
290 } 401 }
291 402
292 TEST_P(QuicChromiumClientSessionTest, AsyncStreamRequest) { 403 TEST_P(QuicChromiumClientSessionTest, AsyncStreamRequest) {
(...skipping 10 matching lines...) Expand all
303 414
304 // Open the maximum number of streams so that a subsequent request 415 // Open the maximum number of streams so that a subsequent request
305 // can not proceed immediately. 416 // can not proceed immediately.
306 const size_t kMaxOpenStreams = session_->max_open_outgoing_streams(); 417 const size_t kMaxOpenStreams = session_->max_open_outgoing_streams();
307 for (size_t i = 0; i < kMaxOpenStreams; i++) { 418 for (size_t i = 0; i < kMaxOpenStreams; i++) {
308 session_->CreateOutgoingDynamicStream(kDefaultPriority); 419 session_->CreateOutgoingDynamicStream(kDefaultPriority);
309 } 420 }
310 EXPECT_EQ(kMaxOpenStreams, session_->GetNumOpenOutgoingStreams()); 421 EXPECT_EQ(kMaxOpenStreams, session_->GetNumOpenOutgoingStreams());
311 422
312 // Request a stream and verify that it's pending. 423 // Request a stream and verify that it's pending.
424 QuicChromiumClientSession::Handle handle = session_->GetHandle();
313 std::unique_ptr<QuicChromiumClientSession::StreamRequest> stream_request = 425 std::unique_ptr<QuicChromiumClientSession::StreamRequest> stream_request =
314 session_->CreateStreamRequest(/*requires_confirmation=*/false); 426 handle.CreateStreamRequest(/*requires_confirmation=*/false);
315 TestCompletionCallback callback; 427 TestCompletionCallback callback;
316 ASSERT_EQ(ERR_IO_PENDING, stream_request->StartRequest(callback.callback())); 428 ASSERT_EQ(ERR_IO_PENDING, stream_request->StartRequest(callback.callback()));
317 429
318 // Close a stream and ensure the stream request completes. 430 // Close a stream and ensure the stream request completes.
319 QuicRstStreamFrame rst(kClientDataStreamId1, QUIC_STREAM_CANCELLED, 0); 431 QuicRstStreamFrame rst(kClientDataStreamId1, QUIC_STREAM_CANCELLED, 0);
320 session_->OnRstStream(rst); 432 session_->OnRstStream(rst);
321 ASSERT_TRUE(callback.have_result()); 433 ASSERT_TRUE(callback.have_result());
322 EXPECT_THAT(callback.WaitForResult(), IsOk()); 434 EXPECT_THAT(callback.WaitForResult(), IsOk());
323 EXPECT_TRUE(stream_request->ReleaseStream() != nullptr); 435 EXPECT_TRUE(stream_request->ReleaseStream() != nullptr);
324 436
(...skipping 16 matching lines...) Expand all
341 453
342 // Open the maximum number of streams so that a subsequent request 454 // Open the maximum number of streams so that a subsequent request
343 // can not proceed immediately. 455 // can not proceed immediately.
344 const size_t kMaxOpenStreams = session_->max_open_outgoing_streams(); 456 const size_t kMaxOpenStreams = session_->max_open_outgoing_streams();
345 for (size_t i = 0; i < kMaxOpenStreams; i++) { 457 for (size_t i = 0; i < kMaxOpenStreams; i++) {
346 session_->CreateOutgoingDynamicStream(kDefaultPriority); 458 session_->CreateOutgoingDynamicStream(kDefaultPriority);
347 } 459 }
348 EXPECT_EQ(kMaxOpenStreams, session_->GetNumOpenOutgoingStreams()); 460 EXPECT_EQ(kMaxOpenStreams, session_->GetNumOpenOutgoingStreams());
349 461
350 // Request a stream and verify that it's pending. 462 // Request a stream and verify that it's pending.
463 QuicChromiumClientSession::Handle handle = session_->GetHandle();
351 std::unique_ptr<QuicChromiumClientSession::StreamRequest> stream_request = 464 std::unique_ptr<QuicChromiumClientSession::StreamRequest> stream_request =
352 session_->CreateStreamRequest(/*requires_confirmation=*/false); 465 handle.CreateStreamRequest(/*requires_confirmation=*/false);
353 TestCompletionCallback callback; 466 TestCompletionCallback callback;
354 ASSERT_EQ(ERR_IO_PENDING, stream_request->StartRequest(callback.callback())); 467 ASSERT_EQ(ERR_IO_PENDING, stream_request->StartRequest(callback.callback()));
355 468
356 // Cancel the pending stream request. 469 // Cancel the pending stream request.
357 stream_request.reset(); 470 stream_request.reset();
358 471
359 // Close a stream and ensure that no new stream is created. 472 // Close a stream and ensure that no new stream is created.
360 QuicRstStreamFrame rst(kClientDataStreamId1, QUIC_STREAM_CANCELLED, 0); 473 QuicRstStreamFrame rst(kClientDataStreamId1, QUIC_STREAM_CANCELLED, 0);
361 session_->OnRstStream(rst); 474 session_->OnRstStream(rst);
362 EXPECT_EQ(kMaxOpenStreams - 1, session_->GetNumOpenOutgoingStreams()); 475 EXPECT_EQ(kMaxOpenStreams - 1, session_->GetNumOpenOutgoingStreams());
363 476
364 quic_data.Resume(); 477 quic_data.Resume();
365 EXPECT_TRUE(quic_data.AllReadDataConsumed()); 478 EXPECT_TRUE(quic_data.AllReadDataConsumed());
366 EXPECT_TRUE(quic_data.AllWriteDataConsumed()); 479 EXPECT_TRUE(quic_data.AllWriteDataConsumed());
367 } 480 }
368 481
369 TEST_P(QuicChromiumClientSessionTest, ConnectionCloseBeforeStreamRequest) { 482 TEST_P(QuicChromiumClientSessionTest, ConnectionCloseBeforeStreamRequest) {
370 MockQuicData quic_data; 483 MockQuicData quic_data;
371 quic_data.AddWrite(client_maker_.MakeInitialSettingsPacket(1, nullptr)); 484 quic_data.AddWrite(client_maker_.MakeInitialSettingsPacket(1, nullptr));
372 quic_data.AddRead(server_maker_.MakeConnectionClosePacket(1)); 485 quic_data.AddRead(server_maker_.MakeConnectionClosePacket(1));
373 quic_data.AddSocketDataToFactory(&socket_factory_); 486 quic_data.AddSocketDataToFactory(&socket_factory_);
374 487
375 Initialize(); 488 Initialize();
376 CompleteCryptoHandshake(); 489 CompleteCryptoHandshake();
377 490
378 // Pump the message loop to read the connection close packet. 491 // Pump the message loop to read the connection close packet.
379 base::RunLoop().RunUntilIdle(); 492 base::RunLoop().RunUntilIdle();
380 493
381 // Request a stream and verify that it failed. 494 // Request a stream and verify that it failed.
495 QuicChromiumClientSession::Handle handle = session_->GetHandle();
382 std::unique_ptr<QuicChromiumClientSession::StreamRequest> stream_request = 496 std::unique_ptr<QuicChromiumClientSession::StreamRequest> stream_request =
383 session_->CreateStreamRequest(/*requires_confirmation=*/false); 497 handle.CreateStreamRequest(/*requires_confirmation=*/false);
384 TestCompletionCallback callback; 498 TestCompletionCallback callback;
385 ASSERT_EQ(ERR_CONNECTION_CLOSED, 499 ASSERT_EQ(ERR_CONNECTION_CLOSED,
386 stream_request->StartRequest(callback.callback())); 500 stream_request->StartRequest(callback.callback()));
387 501
388 EXPECT_TRUE(quic_data.AllReadDataConsumed()); 502 EXPECT_TRUE(quic_data.AllReadDataConsumed());
389 EXPECT_TRUE(quic_data.AllWriteDataConsumed()); 503 EXPECT_TRUE(quic_data.AllWriteDataConsumed());
390 } 504 }
391 505
392 TEST_P(QuicChromiumClientSessionTest, ConnectionCloseBeforeHandshakeConfirmed) { 506 TEST_P(QuicChromiumClientSessionTest, ConnectionCloseBeforeHandshakeConfirmed) {
393 MockQuicData quic_data; 507 MockQuicData quic_data;
394 quic_data.AddRead(ASYNC, ERR_IO_PENDING); 508 quic_data.AddRead(ASYNC, ERR_IO_PENDING);
395 quic_data.AddRead(server_maker_.MakeConnectionClosePacket(1)); 509 quic_data.AddRead(server_maker_.MakeConnectionClosePacket(1));
396 quic_data.AddSocketDataToFactory(&socket_factory_); 510 quic_data.AddSocketDataToFactory(&socket_factory_);
397 511
398 Initialize(); 512 Initialize();
399 513
400 // Request a stream and verify that it's pending. 514 // Request a stream and verify that it's pending.
515 QuicChromiumClientSession::Handle handle = session_->GetHandle();
401 std::unique_ptr<QuicChromiumClientSession::StreamRequest> stream_request = 516 std::unique_ptr<QuicChromiumClientSession::StreamRequest> stream_request =
402 session_->CreateStreamRequest(/*requires_confirmation=*/true); 517 handle.CreateStreamRequest(/*requires_confirmation=*/true);
403 TestCompletionCallback callback; 518 TestCompletionCallback callback;
404 ASSERT_EQ(ERR_IO_PENDING, stream_request->StartRequest(callback.callback())); 519 ASSERT_EQ(ERR_IO_PENDING, stream_request->StartRequest(callback.callback()));
405 520
406 // Close the connection and verify that the StreamRequest completes with 521 // Close the connection and verify that the StreamRequest completes with
407 // an error. 522 // an error.
408 quic_data.Resume(); 523 quic_data.Resume();
409 base::RunLoop().RunUntilIdle(); 524 base::RunLoop().RunUntilIdle();
410 525
411 EXPECT_THAT(callback.WaitForResult(), IsError(ERR_CONNECTION_CLOSED)); 526 EXPECT_THAT(callback.WaitForResult(), IsError(ERR_CONNECTION_CLOSED));
412 527
(...skipping 13 matching lines...) Expand all
426 541
427 // Open the maximum number of streams so that a subsequent request 542 // Open the maximum number of streams so that a subsequent request
428 // can not proceed immediately. 543 // can not proceed immediately.
429 const size_t kMaxOpenStreams = session_->max_open_outgoing_streams(); 544 const size_t kMaxOpenStreams = session_->max_open_outgoing_streams();
430 for (size_t i = 0; i < kMaxOpenStreams; i++) { 545 for (size_t i = 0; i < kMaxOpenStreams; i++) {
431 session_->CreateOutgoingDynamicStream(kDefaultPriority); 546 session_->CreateOutgoingDynamicStream(kDefaultPriority);
432 } 547 }
433 EXPECT_EQ(kMaxOpenStreams, session_->GetNumOpenOutgoingStreams()); 548 EXPECT_EQ(kMaxOpenStreams, session_->GetNumOpenOutgoingStreams());
434 549
435 // Request a stream and verify that it's pending. 550 // Request a stream and verify that it's pending.
551 QuicChromiumClientSession::Handle handle = session_->GetHandle();
436 std::unique_ptr<QuicChromiumClientSession::StreamRequest> stream_request = 552 std::unique_ptr<QuicChromiumClientSession::StreamRequest> stream_request =
437 session_->CreateStreamRequest(/*requires_confirmation=*/false); 553 handle.CreateStreamRequest(/*requires_confirmation=*/false);
438 TestCompletionCallback callback; 554 TestCompletionCallback callback;
439 ASSERT_EQ(ERR_IO_PENDING, stream_request->StartRequest(callback.callback())); 555 ASSERT_EQ(ERR_IO_PENDING, stream_request->StartRequest(callback.callback()));
440 556
441 // Close the connection and verify that the StreamRequest completes with 557 // Close the connection and verify that the StreamRequest completes with
442 // an error. 558 // an error.
443 quic_data.Resume(); 559 quic_data.Resume();
444 base::RunLoop().RunUntilIdle(); 560 base::RunLoop().RunUntilIdle();
445 561
446 EXPECT_THAT(callback.WaitForResult(), IsError(ERR_CONNECTION_CLOSED)); 562 EXPECT_THAT(callback.WaitForResult(), IsError(ERR_CONNECTION_CLOSED));
447 563
(...skipping 345 matching lines...) Expand 10 before | Expand all | Expand 10 after
793 const size_t kMaxOpenStreams = session_->max_open_outgoing_streams(); 909 const size_t kMaxOpenStreams = session_->max_open_outgoing_streams();
794 910
795 std::vector<QuicChromiumClientStream*> streams; 911 std::vector<QuicChromiumClientStream*> streams;
796 for (size_t i = 0; i < kMaxOpenStreams; i++) { 912 for (size_t i = 0; i < kMaxOpenStreams; i++) {
797 QuicChromiumClientStream* stream = 913 QuicChromiumClientStream* stream =
798 session_->CreateOutgoingDynamicStream(kDefaultPriority); 914 session_->CreateOutgoingDynamicStream(kDefaultPriority);
799 EXPECT_TRUE(stream); 915 EXPECT_TRUE(stream);
800 streams.push_back(stream); 916 streams.push_back(stream);
801 } 917 }
802 918
919 QuicChromiumClientSession::Handle handle = session_->GetHandle();
803 std::unique_ptr<QuicChromiumClientSession::StreamRequest> stream_request = 920 std::unique_ptr<QuicChromiumClientSession::StreamRequest> stream_request =
804 session_->CreateStreamRequest(/*requires_confirmation=*/false); 921 handle.CreateStreamRequest(/*requires_confirmation=*/false);
805 TestCompletionCallback callback; 922 TestCompletionCallback callback;
806 ASSERT_EQ(ERR_IO_PENDING, stream_request->StartRequest(callback.callback())); 923 ASSERT_EQ(ERR_IO_PENDING, stream_request->StartRequest(callback.callback()));
807 924
808 // Close a stream and ensure I can now open a new one. 925 // Close a stream and ensure I can now open a new one.
809 QuicStreamId stream_id = streams[0]->id(); 926 QuicStreamId stream_id = streams[0]->id();
810 session_->CloseStream(stream_id); 927 session_->CloseStream(stream_id);
811 QuicRstStreamFrame rst1(stream_id, QUIC_STREAM_NO_ERROR, 0); 928 QuicRstStreamFrame rst1(stream_id, QUIC_STREAM_NO_ERROR, 0);
812 session_->OnRstStream(rst1); 929 session_->OnRstStream(rst1);
813 ASSERT_TRUE(callback.have_result()); 930 ASSERT_TRUE(callback.have_result());
814 EXPECT_THAT(callback.WaitForResult(), IsOk()); 931 EXPECT_THAT(callback.WaitForResult(), IsOk());
(...skipping 330 matching lines...) Expand 10 before | Expand all | Expand 10 after
1145 1262
1146 EXPECT_TRUE(socket_data_->AllReadDataConsumed()); 1263 EXPECT_TRUE(socket_data_->AllReadDataConsumed());
1147 EXPECT_TRUE(socket_data_->AllWriteDataConsumed()); 1264 EXPECT_TRUE(socket_data_->AllWriteDataConsumed());
1148 EXPECT_TRUE(new_socket_data.AllReadDataConsumed()); 1265 EXPECT_TRUE(new_socket_data.AllReadDataConsumed());
1149 EXPECT_TRUE(new_socket_data.AllWriteDataConsumed()); 1266 EXPECT_TRUE(new_socket_data.AllWriteDataConsumed());
1150 } 1267 }
1151 1268
1152 } // namespace 1269 } // namespace
1153 } // namespace test 1270 } // namespace test
1154 } // namespace net 1271 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698