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

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

Issue 2848923004: Move the "wait for QUIC handshake confirmation" logic to QuicChromiumClientSession::StreamRequest (Closed)
Patch Set: fix 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
« no previous file with comments | « net/quic/chromium/quic_chromium_client_session.cc ('k') | net/quic/chromium/quic_http_stream.h » ('j') | 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_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 189 matching lines...) Expand 10 before | Expand all | Expand 10 after
200 quic_data.AddWrite(client_maker_.MakeInitialSettingsPacket(1, nullptr)); 200 quic_data.AddWrite(client_maker_.MakeInitialSettingsPacket(1, nullptr));
201 quic_data.AddRead(ASYNC, ERR_IO_PENDING); 201 quic_data.AddRead(ASYNC, ERR_IO_PENDING);
202 quic_data.AddRead(ASYNC, OK); // EOF 202 quic_data.AddRead(ASYNC, OK); // EOF
203 quic_data.AddSocketDataToFactory(&socket_factory_); 203 quic_data.AddSocketDataToFactory(&socket_factory_);
204 204
205 Initialize(); 205 Initialize();
206 CompleteCryptoHandshake(); 206 CompleteCryptoHandshake();
207 207
208 // Request a stream and verify that a stream was created. 208 // Request a stream and verify that a stream was created.
209 std::unique_ptr<QuicChromiumClientSession::StreamRequest> stream_request = 209 std::unique_ptr<QuicChromiumClientSession::StreamRequest> stream_request =
210 session_->CreateStreamRequest(); 210 session_->CreateStreamRequest(/*requires_confirmation=*/false);
211 TestCompletionCallback callback; 211 TestCompletionCallback callback;
212 ASSERT_EQ(OK, stream_request->StartRequest(callback.callback())); 212 ASSERT_EQ(OK, stream_request->StartRequest(callback.callback()));
213 EXPECT_TRUE(stream_request->ReleaseStream() != nullptr); 213 EXPECT_TRUE(stream_request->ReleaseStream() != nullptr);
214 214
215 quic_data.Resume(); 215 quic_data.Resume();
216 EXPECT_TRUE(quic_data.AllReadDataConsumed()); 216 EXPECT_TRUE(quic_data.AllReadDataConsumed());
217 EXPECT_TRUE(quic_data.AllWriteDataConsumed()); 217 EXPECT_TRUE(quic_data.AllWriteDataConsumed());
218 } 218 }
219 219
220 TEST_P(QuicChromiumClientSessionTest, ConfirmationRequiredStreamRequest) {
221 MockQuicData quic_data;
222 quic_data.AddWrite(client_maker_.MakeInitialSettingsPacket(1, nullptr));
223 quic_data.AddRead(ASYNC, ERR_IO_PENDING);
224 quic_data.AddRead(ASYNC, OK); // EOF
225 quic_data.AddSocketDataToFactory(&socket_factory_);
226
227 Initialize();
228 CompleteCryptoHandshake();
229
230 // Request a stream and verify that a stream was created.
231 std::unique_ptr<QuicChromiumClientSession::StreamRequest> stream_request =
232 session_->CreateStreamRequest(/*requires_confirmation=*/true);
233 TestCompletionCallback callback;
234 ASSERT_EQ(OK, stream_request->StartRequest(callback.callback()));
235 EXPECT_TRUE(stream_request->ReleaseStream() != nullptr);
236
237 quic_data.Resume();
238 EXPECT_TRUE(quic_data.AllReadDataConsumed());
239 EXPECT_TRUE(quic_data.AllWriteDataConsumed());
240 }
241
242 TEST_P(QuicChromiumClientSessionTest, StreamRequestBeforeConfirmation) {
243 MockQuicData quic_data;
244 quic_data.AddWrite(client_maker_.MakeInitialSettingsPacket(1, nullptr));
245 quic_data.AddRead(ASYNC, ERR_IO_PENDING);
246 quic_data.AddRead(ASYNC, OK); // EOF
247 quic_data.AddSocketDataToFactory(&socket_factory_);
248
249 Initialize();
250
251 // Request a stream and verify that a stream was created.
252 std::unique_ptr<QuicChromiumClientSession::StreamRequest> stream_request =
253 session_->CreateStreamRequest(/*requires_confirmation=*/true);
254 TestCompletionCallback callback;
255 ASSERT_EQ(ERR_IO_PENDING, stream_request->StartRequest(callback.callback()));
256
257 CompleteCryptoHandshake();
258
259 EXPECT_THAT(callback.WaitForResult(), IsOk());
260
261 EXPECT_TRUE(stream_request->ReleaseStream() != nullptr);
262
263 quic_data.Resume();
264 EXPECT_TRUE(quic_data.AllReadDataConsumed());
265 EXPECT_TRUE(quic_data.AllWriteDataConsumed());
266 }
267
220 TEST_P(QuicChromiumClientSessionTest, CancelStreamRequestBeforeRelease) { 268 TEST_P(QuicChromiumClientSessionTest, CancelStreamRequestBeforeRelease) {
221 MockQuicData quic_data; 269 MockQuicData quic_data;
222 quic_data.AddWrite(client_maker_.MakeInitialSettingsPacket(1, nullptr)); 270 quic_data.AddWrite(client_maker_.MakeInitialSettingsPacket(1, nullptr));
223 quic_data.AddWrite(client_maker_.MakeRstPacket(2, true, kClientDataStreamId1, 271 quic_data.AddWrite(client_maker_.MakeRstPacket(2, true, kClientDataStreamId1,
224 QUIC_STREAM_CANCELLED)); 272 QUIC_STREAM_CANCELLED));
225 quic_data.AddRead(ASYNC, ERR_IO_PENDING); 273 quic_data.AddRead(ASYNC, ERR_IO_PENDING);
226 quic_data.AddRead(ASYNC, OK); // EOF 274 quic_data.AddRead(ASYNC, OK); // EOF
227 quic_data.AddSocketDataToFactory(&socket_factory_); 275 quic_data.AddSocketDataToFactory(&socket_factory_);
228 276
229 Initialize(); 277 Initialize();
230 CompleteCryptoHandshake(); 278 CompleteCryptoHandshake();
231 279
232 // Request a stream and cancel it without releasing the stream. 280 // Request a stream and cancel it without releasing the stream.
233 std::unique_ptr<QuicChromiumClientSession::StreamRequest> stream_request = 281 std::unique_ptr<QuicChromiumClientSession::StreamRequest> stream_request =
234 session_->CreateStreamRequest(); 282 session_->CreateStreamRequest(/*requires_confirmation=*/false);
235 TestCompletionCallback callback; 283 TestCompletionCallback callback;
236 ASSERT_EQ(OK, stream_request->StartRequest(callback.callback())); 284 ASSERT_EQ(OK, stream_request->StartRequest(callback.callback()));
237 stream_request.reset(); 285 stream_request.reset();
238 286
239 quic_data.Resume(); 287 quic_data.Resume();
240 EXPECT_TRUE(quic_data.AllReadDataConsumed()); 288 EXPECT_TRUE(quic_data.AllReadDataConsumed());
241 EXPECT_TRUE(quic_data.AllWriteDataConsumed()); 289 EXPECT_TRUE(quic_data.AllWriteDataConsumed());
242 } 290 }
243 291
244 TEST_P(QuicChromiumClientSessionTest, AsyncStreamRequest) { 292 TEST_P(QuicChromiumClientSessionTest, AsyncStreamRequest) {
(...skipping 11 matching lines...) Expand all
256 // Open the maximum number of streams so that a subsequent request 304 // Open the maximum number of streams so that a subsequent request
257 // can not proceed immediately. 305 // can not proceed immediately.
258 const size_t kMaxOpenStreams = session_->max_open_outgoing_streams(); 306 const size_t kMaxOpenStreams = session_->max_open_outgoing_streams();
259 for (size_t i = 0; i < kMaxOpenStreams; i++) { 307 for (size_t i = 0; i < kMaxOpenStreams; i++) {
260 session_->CreateOutgoingDynamicStream(kDefaultPriority); 308 session_->CreateOutgoingDynamicStream(kDefaultPriority);
261 } 309 }
262 EXPECT_EQ(kMaxOpenStreams, session_->GetNumOpenOutgoingStreams()); 310 EXPECT_EQ(kMaxOpenStreams, session_->GetNumOpenOutgoingStreams());
263 311
264 // Request a stream and verify that it's pending. 312 // Request a stream and verify that it's pending.
265 std::unique_ptr<QuicChromiumClientSession::StreamRequest> stream_request = 313 std::unique_ptr<QuicChromiumClientSession::StreamRequest> stream_request =
266 session_->CreateStreamRequest(); 314 session_->CreateStreamRequest(/*requires_confirmation=*/false);
267 TestCompletionCallback callback; 315 TestCompletionCallback callback;
268 ASSERT_EQ(ERR_IO_PENDING, stream_request->StartRequest(callback.callback())); 316 ASSERT_EQ(ERR_IO_PENDING, stream_request->StartRequest(callback.callback()));
269 317
270 // Close a stream and ensure the stream request completes. 318 // Close a stream and ensure the stream request completes.
271 QuicRstStreamFrame rst(kClientDataStreamId1, QUIC_STREAM_CANCELLED, 0); 319 QuicRstStreamFrame rst(kClientDataStreamId1, QUIC_STREAM_CANCELLED, 0);
272 session_->OnRstStream(rst); 320 session_->OnRstStream(rst);
273 ASSERT_TRUE(callback.have_result()); 321 ASSERT_TRUE(callback.have_result());
274 EXPECT_THAT(callback.WaitForResult(), IsOk()); 322 EXPECT_THAT(callback.WaitForResult(), IsOk());
275 EXPECT_TRUE(stream_request->ReleaseStream() != nullptr); 323 EXPECT_TRUE(stream_request->ReleaseStream() != nullptr);
276 324
(...skipping 17 matching lines...) Expand all
294 // Open the maximum number of streams so that a subsequent request 342 // Open the maximum number of streams so that a subsequent request
295 // can not proceed immediately. 343 // can not proceed immediately.
296 const size_t kMaxOpenStreams = session_->max_open_outgoing_streams(); 344 const size_t kMaxOpenStreams = session_->max_open_outgoing_streams();
297 for (size_t i = 0; i < kMaxOpenStreams; i++) { 345 for (size_t i = 0; i < kMaxOpenStreams; i++) {
298 session_->CreateOutgoingDynamicStream(kDefaultPriority); 346 session_->CreateOutgoingDynamicStream(kDefaultPriority);
299 } 347 }
300 EXPECT_EQ(kMaxOpenStreams, session_->GetNumOpenOutgoingStreams()); 348 EXPECT_EQ(kMaxOpenStreams, session_->GetNumOpenOutgoingStreams());
301 349
302 // Request a stream and verify that it's pending. 350 // Request a stream and verify that it's pending.
303 std::unique_ptr<QuicChromiumClientSession::StreamRequest> stream_request = 351 std::unique_ptr<QuicChromiumClientSession::StreamRequest> stream_request =
304 session_->CreateStreamRequest(); 352 session_->CreateStreamRequest(/*requires_confirmation=*/false);
305 TestCompletionCallback callback; 353 TestCompletionCallback callback;
306 ASSERT_EQ(ERR_IO_PENDING, stream_request->StartRequest(callback.callback())); 354 ASSERT_EQ(ERR_IO_PENDING, stream_request->StartRequest(callback.callback()));
307 355
308 // Cancel the pending stream request. 356 // Cancel the pending stream request.
309 stream_request.reset(); 357 stream_request.reset();
310 358
311 // Close a stream and ensure that no new stream is created. 359 // Close a stream and ensure that no new stream is created.
312 QuicRstStreamFrame rst(kClientDataStreamId1, QUIC_STREAM_CANCELLED, 0); 360 QuicRstStreamFrame rst(kClientDataStreamId1, QUIC_STREAM_CANCELLED, 0);
313 session_->OnRstStream(rst); 361 session_->OnRstStream(rst);
314 EXPECT_EQ(kMaxOpenStreams - 1, session_->GetNumOpenOutgoingStreams()); 362 EXPECT_EQ(kMaxOpenStreams - 1, session_->GetNumOpenOutgoingStreams());
(...skipping 10 matching lines...) Expand all
325 quic_data.AddSocketDataToFactory(&socket_factory_); 373 quic_data.AddSocketDataToFactory(&socket_factory_);
326 374
327 Initialize(); 375 Initialize();
328 CompleteCryptoHandshake(); 376 CompleteCryptoHandshake();
329 377
330 // Pump the message loop to read the connection close packet. 378 // Pump the message loop to read the connection close packet.
331 base::RunLoop().RunUntilIdle(); 379 base::RunLoop().RunUntilIdle();
332 380
333 // Request a stream and verify that it failed. 381 // Request a stream and verify that it failed.
334 std::unique_ptr<QuicChromiumClientSession::StreamRequest> stream_request = 382 std::unique_ptr<QuicChromiumClientSession::StreamRequest> stream_request =
335 session_->CreateStreamRequest(); 383 session_->CreateStreamRequest(/*requires_confirmation=*/false);
336 TestCompletionCallback callback; 384 TestCompletionCallback callback;
337 ASSERT_EQ(ERR_CONNECTION_CLOSED, 385 ASSERT_EQ(ERR_CONNECTION_CLOSED,
338 stream_request->StartRequest(callback.callback())); 386 stream_request->StartRequest(callback.callback()));
339 387
340 EXPECT_TRUE(quic_data.AllReadDataConsumed()); 388 EXPECT_TRUE(quic_data.AllReadDataConsumed());
341 EXPECT_TRUE(quic_data.AllWriteDataConsumed()); 389 EXPECT_TRUE(quic_data.AllWriteDataConsumed());
342 } 390 }
343 391
392 TEST_P(QuicChromiumClientSessionTest, ConnectionCloseBeforeHandshakeConfirmed) {
393 MockQuicData quic_data;
394 quic_data.AddRead(ASYNC, ERR_IO_PENDING);
395 quic_data.AddRead(server_maker_.MakeConnectionClosePacket(1));
396 quic_data.AddSocketDataToFactory(&socket_factory_);
397
398 Initialize();
399
400 // Request a stream and verify that it's pending.
401 std::unique_ptr<QuicChromiumClientSession::StreamRequest> stream_request =
402 session_->CreateStreamRequest(/*requires_confirmation=*/true);
403 TestCompletionCallback callback;
404 ASSERT_EQ(ERR_IO_PENDING, stream_request->StartRequest(callback.callback()));
405
406 // Close the connection and verify that the StreamRequest completes with
407 // an error.
408 quic_data.Resume();
409 base::RunLoop().RunUntilIdle();
410
411 EXPECT_THAT(callback.WaitForResult(), IsError(ERR_CONNECTION_CLOSED));
412
413 EXPECT_TRUE(quic_data.AllReadDataConsumed());
414 EXPECT_TRUE(quic_data.AllWriteDataConsumed());
415 }
416
344 TEST_P(QuicChromiumClientSessionTest, ConnectionCloseWithPendingStreamRequest) { 417 TEST_P(QuicChromiumClientSessionTest, ConnectionCloseWithPendingStreamRequest) {
345 MockQuicData quic_data; 418 MockQuicData quic_data;
346 quic_data.AddWrite(client_maker_.MakeInitialSettingsPacket(1, nullptr)); 419 quic_data.AddWrite(client_maker_.MakeInitialSettingsPacket(1, nullptr));
347 quic_data.AddRead(ASYNC, ERR_IO_PENDING); 420 quic_data.AddRead(ASYNC, ERR_IO_PENDING);
348 quic_data.AddRead(server_maker_.MakeConnectionClosePacket(1)); 421 quic_data.AddRead(server_maker_.MakeConnectionClosePacket(1));
349 quic_data.AddSocketDataToFactory(&socket_factory_); 422 quic_data.AddSocketDataToFactory(&socket_factory_);
350 423
351 Initialize(); 424 Initialize();
352 CompleteCryptoHandshake(); 425 CompleteCryptoHandshake();
353 426
354 // Open the maximum number of streams so that a subsequent request 427 // Open the maximum number of streams so that a subsequent request
355 // can not proceed immediately. 428 // can not proceed immediately.
356 const size_t kMaxOpenStreams = session_->max_open_outgoing_streams(); 429 const size_t kMaxOpenStreams = session_->max_open_outgoing_streams();
357 for (size_t i = 0; i < kMaxOpenStreams; i++) { 430 for (size_t i = 0; i < kMaxOpenStreams; i++) {
358 session_->CreateOutgoingDynamicStream(kDefaultPriority); 431 session_->CreateOutgoingDynamicStream(kDefaultPriority);
359 } 432 }
360 EXPECT_EQ(kMaxOpenStreams, session_->GetNumOpenOutgoingStreams()); 433 EXPECT_EQ(kMaxOpenStreams, session_->GetNumOpenOutgoingStreams());
361 434
362 // Request a stream and verify that it's pending. 435 // Request a stream and verify that it's pending.
363 std::unique_ptr<QuicChromiumClientSession::StreamRequest> stream_request = 436 std::unique_ptr<QuicChromiumClientSession::StreamRequest> stream_request =
364 session_->CreateStreamRequest(); 437 session_->CreateStreamRequest(/*requires_confirmation=*/false);
365 TestCompletionCallback callback; 438 TestCompletionCallback callback;
366 ASSERT_EQ(ERR_IO_PENDING, stream_request->StartRequest(callback.callback())); 439 ASSERT_EQ(ERR_IO_PENDING, stream_request->StartRequest(callback.callback()));
367 440
368 // Close the connection and verify that the StreamRequest completes with 441 // Close the connection and verify that the StreamRequest completes with
369 // an error. 442 // an error.
370 quic_data.Resume(); 443 quic_data.Resume();
371 base::RunLoop().RunUntilIdle(); 444 base::RunLoop().RunUntilIdle();
372 445
373 EXPECT_THAT(callback.WaitForResult(), IsError(ERR_CONNECTION_CLOSED)); 446 EXPECT_THAT(callback.WaitForResult(), IsError(ERR_CONNECTION_CLOSED));
374 447
(...skipping 346 matching lines...) Expand 10 before | Expand all | Expand 10 after
721 794
722 std::vector<QuicChromiumClientStream*> streams; 795 std::vector<QuicChromiumClientStream*> streams;
723 for (size_t i = 0; i < kMaxOpenStreams; i++) { 796 for (size_t i = 0; i < kMaxOpenStreams; i++) {
724 QuicChromiumClientStream* stream = 797 QuicChromiumClientStream* stream =
725 session_->CreateOutgoingDynamicStream(kDefaultPriority); 798 session_->CreateOutgoingDynamicStream(kDefaultPriority);
726 EXPECT_TRUE(stream); 799 EXPECT_TRUE(stream);
727 streams.push_back(stream); 800 streams.push_back(stream);
728 } 801 }
729 802
730 std::unique_ptr<QuicChromiumClientSession::StreamRequest> stream_request = 803 std::unique_ptr<QuicChromiumClientSession::StreamRequest> stream_request =
731 session_->CreateStreamRequest(); 804 session_->CreateStreamRequest(/*requires_confirmation=*/false);
732 TestCompletionCallback callback; 805 TestCompletionCallback callback;
733 ASSERT_EQ(ERR_IO_PENDING, stream_request->StartRequest(callback.callback())); 806 ASSERT_EQ(ERR_IO_PENDING, stream_request->StartRequest(callback.callback()));
734 807
735 // Close a stream and ensure I can now open a new one. 808 // Close a stream and ensure I can now open a new one.
736 QuicStreamId stream_id = streams[0]->id(); 809 QuicStreamId stream_id = streams[0]->id();
737 session_->CloseStream(stream_id); 810 session_->CloseStream(stream_id);
738 QuicRstStreamFrame rst1(stream_id, QUIC_STREAM_NO_ERROR, 0); 811 QuicRstStreamFrame rst1(stream_id, QUIC_STREAM_NO_ERROR, 0);
739 session_->OnRstStream(rst1); 812 session_->OnRstStream(rst1);
740 ASSERT_TRUE(callback.have_result()); 813 ASSERT_TRUE(callback.have_result());
741 EXPECT_THAT(callback.WaitForResult(), IsOk()); 814 EXPECT_THAT(callback.WaitForResult(), IsOk());
(...skipping 330 matching lines...) Expand 10 before | Expand all | Expand 10 after
1072 1145
1073 EXPECT_TRUE(socket_data_->AllReadDataConsumed()); 1146 EXPECT_TRUE(socket_data_->AllReadDataConsumed());
1074 EXPECT_TRUE(socket_data_->AllWriteDataConsumed()); 1147 EXPECT_TRUE(socket_data_->AllWriteDataConsumed());
1075 EXPECT_TRUE(new_socket_data.AllReadDataConsumed()); 1148 EXPECT_TRUE(new_socket_data.AllReadDataConsumed());
1076 EXPECT_TRUE(new_socket_data.AllWriteDataConsumed()); 1149 EXPECT_TRUE(new_socket_data.AllWriteDataConsumed());
1077 } 1150 }
1078 1151
1079 } // namespace 1152 } // namespace
1080 } // namespace test 1153 } // namespace test
1081 } // namespace net 1154 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/chromium/quic_chromium_client_session.cc ('k') | net/quic/chromium/quic_http_stream.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698