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

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

Issue 2862563003: Landing Recent QUIC changes until Sat Apr 29 00:22:04 2017 +0000 (Closed)
Patch Set: rebase and fix test bugs detected by swarm bot. 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 19 matching lines...) Expand all
30 #include "net/quic/chromium/quic_test_packet_maker.h" 30 #include "net/quic/chromium/quic_test_packet_maker.h"
31 #include "net/quic/core/crypto/aes_128_gcm_12_encrypter.h" 31 #include "net/quic/core/crypto/aes_128_gcm_12_encrypter.h"
32 #include "net/quic/core/crypto/crypto_protocol.h" 32 #include "net/quic/core/crypto/crypto_protocol.h"
33 #include "net/quic/core/crypto/quic_decrypter.h" 33 #include "net/quic/core/crypto/quic_decrypter.h"
34 #include "net/quic/core/crypto/quic_encrypter.h" 34 #include "net/quic/core/crypto/quic_encrypter.h"
35 #include "net/quic/core/quic_client_promised_info.h" 35 #include "net/quic/core/quic_client_promised_info.h"
36 #include "net/quic/core/quic_packet_writer.h" 36 #include "net/quic/core/quic_packet_writer.h"
37 #include "net/quic/platform/api/quic_flags.h" 37 #include "net/quic/platform/api/quic_flags.h"
38 #include "net/quic/test_tools/crypto_test_utils.h" 38 #include "net/quic/test_tools/crypto_test_utils.h"
39 #include "net/quic/test_tools/quic_client_promised_info_peer.h" 39 #include "net/quic/test_tools/quic_client_promised_info_peer.h"
40 #include "net/quic/test_tools/quic_spdy_session_peer.h"
41 #include "net/quic/test_tools/quic_test_utils.h" 40 #include "net/quic/test_tools/quic_test_utils.h"
42 #include "net/quic/test_tools/simple_quic_framer.h" 41 #include "net/quic/test_tools/simple_quic_framer.h"
43 #include "net/socket/datagram_client_socket.h" 42 #include "net/socket/datagram_client_socket.h"
44 #include "net/socket/socket_test_util.h" 43 #include "net/socket/socket_test_util.h"
45 #include "net/spdy/core/spdy_test_utils.h" 44 #include "net/spdy/core/spdy_test_utils.h"
46 #include "net/test/cert_test_util.h" 45 #include "net/test/cert_test_util.h"
47 #include "net/test/gtest_util.h" 46 #include "net/test/gtest_util.h"
48 #include "net/test/test_data_directory.h" 47 #include "net/test/test_data_directory.h"
49 #include "testing/gmock/include/gmock/gmock.h" 48 #include "testing/gmock/include/gmock/gmock.h"
50 49
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
149 148
150 QuicChromiumPacketWriter* CreateQuicChromiumPacketWriter( 149 QuicChromiumPacketWriter* CreateQuicChromiumPacketWriter(
151 DatagramClientSocket* socket, 150 DatagramClientSocket* socket,
152 QuicChromiumClientSession* session) const { 151 QuicChromiumClientSession* session) const {
153 std::unique_ptr<QuicChromiumPacketWriter> writer( 152 std::unique_ptr<QuicChromiumPacketWriter> writer(
154 new QuicChromiumPacketWriter(socket)); 153 new QuicChromiumPacketWriter(socket));
155 writer->set_delegate(session); 154 writer->set_delegate(session);
156 return writer.release(); 155 return writer.release();
157 } 156 }
158 157
158 QuicStreamId GetNthClientInitiatedStreamId(int n) {
159 return test::GetNthClientInitiatedStreamId(GetParam(), n);
160 }
161
162 QuicStreamId GetNthServerInitiatedStreamId(int n) {
163 return test::GetNthServerInitiatedStreamId(GetParam(), n);
164 }
165
159 QuicCryptoClientConfig crypto_config_; 166 QuicCryptoClientConfig crypto_config_;
160 TestNetLog net_log_; 167 TestNetLog net_log_;
161 BoundTestNetLog bound_test_net_log_; 168 BoundTestNetLog bound_test_net_log_;
162 MockClientSocketFactory socket_factory_; 169 MockClientSocketFactory socket_factory_;
163 std::unique_ptr<MockRead> default_read_; 170 std::unique_ptr<MockRead> default_read_;
164 std::unique_ptr<SequencedSocketData> socket_data_; 171 std::unique_ptr<SequencedSocketData> socket_data_;
165 MockClock clock_; 172 MockClock clock_;
166 MockRandom random_; 173 MockRandom random_;
167 QuicChromiumConnectionHelper helper_; 174 QuicChromiumConnectionHelper helper_;
168 MockAlarmFactory alarm_factory_; 175 MockAlarmFactory alarm_factory_;
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
260 EXPECT_TRUE(stream_request->ReleaseStream() != nullptr); 267 EXPECT_TRUE(stream_request->ReleaseStream() != nullptr);
261 268
262 quic_data.Resume(); 269 quic_data.Resume();
263 EXPECT_TRUE(quic_data.AllReadDataConsumed()); 270 EXPECT_TRUE(quic_data.AllReadDataConsumed());
264 EXPECT_TRUE(quic_data.AllWriteDataConsumed()); 271 EXPECT_TRUE(quic_data.AllWriteDataConsumed());
265 } 272 }
266 273
267 TEST_P(QuicChromiumClientSessionTest, CancelStreamRequestBeforeRelease) { 274 TEST_P(QuicChromiumClientSessionTest, CancelStreamRequestBeforeRelease) {
268 MockQuicData quic_data; 275 MockQuicData quic_data;
269 quic_data.AddWrite(client_maker_.MakeInitialSettingsPacket(1, nullptr)); 276 quic_data.AddWrite(client_maker_.MakeInitialSettingsPacket(1, nullptr));
270 quic_data.AddWrite(client_maker_.MakeRstPacket(2, true, kClientDataStreamId1, 277 quic_data.AddWrite(client_maker_.MakeRstPacket(
271 QUIC_STREAM_CANCELLED)); 278 2, true, GetNthClientInitiatedStreamId(0), QUIC_STREAM_CANCELLED));
272 quic_data.AddRead(ASYNC, ERR_IO_PENDING); 279 quic_data.AddRead(ASYNC, ERR_IO_PENDING);
273 quic_data.AddRead(ASYNC, OK); // EOF 280 quic_data.AddRead(ASYNC, OK); // EOF
274 quic_data.AddSocketDataToFactory(&socket_factory_); 281 quic_data.AddSocketDataToFactory(&socket_factory_);
275 282
276 Initialize(); 283 Initialize();
277 CompleteCryptoHandshake(); 284 CompleteCryptoHandshake();
278 285
279 // Request a stream and cancel it without releasing the stream. 286 // Request a stream and cancel it without releasing the stream.
280 std::unique_ptr<QuicChromiumClientSession::StreamRequest> stream_request = 287 std::unique_ptr<QuicChromiumClientSession::StreamRequest> stream_request =
281 session_->CreateStreamRequest(/*requires_confirmation=*/false); 288 session_->CreateStreamRequest(/*requires_confirmation=*/false);
282 TestCompletionCallback callback; 289 TestCompletionCallback callback;
283 ASSERT_EQ(OK, stream_request->StartRequest(callback.callback())); 290 ASSERT_EQ(OK, stream_request->StartRequest(callback.callback()));
284 stream_request.reset(); 291 stream_request.reset();
285 292
286 quic_data.Resume(); 293 quic_data.Resume();
287 EXPECT_TRUE(quic_data.AllReadDataConsumed()); 294 EXPECT_TRUE(quic_data.AllReadDataConsumed());
288 EXPECT_TRUE(quic_data.AllWriteDataConsumed()); 295 EXPECT_TRUE(quic_data.AllWriteDataConsumed());
289 } 296 }
290 297
291 TEST_P(QuicChromiumClientSessionTest, AsyncStreamRequest) { 298 TEST_P(QuicChromiumClientSessionTest, AsyncStreamRequest) {
292 MockQuicData quic_data; 299 MockQuicData quic_data;
293 quic_data.AddWrite(client_maker_.MakeInitialSettingsPacket(1, nullptr)); 300 quic_data.AddWrite(client_maker_.MakeInitialSettingsPacket(1, nullptr));
294 quic_data.AddWrite(client_maker_.MakeRstPacket(2, true, kClientDataStreamId1, 301 quic_data.AddWrite(client_maker_.MakeRstPacket(
295 QUIC_RST_ACKNOWLEDGEMENT)); 302 2, true, GetNthClientInitiatedStreamId(0), QUIC_RST_ACKNOWLEDGEMENT));
296 quic_data.AddRead(ASYNC, ERR_IO_PENDING); 303 quic_data.AddRead(ASYNC, ERR_IO_PENDING);
297 quic_data.AddRead(ASYNC, OK); // EOF 304 quic_data.AddRead(ASYNC, OK); // EOF
298 quic_data.AddSocketDataToFactory(&socket_factory_); 305 quic_data.AddSocketDataToFactory(&socket_factory_);
299 306
300 Initialize(); 307 Initialize();
301 CompleteCryptoHandshake(); 308 CompleteCryptoHandshake();
302 309
303 // Open the maximum number of streams so that a subsequent request 310 // Open the maximum number of streams so that a subsequent request
304 // can not proceed immediately. 311 // can not proceed immediately.
305 const size_t kMaxOpenStreams = session_->max_open_outgoing_streams(); 312 const size_t kMaxOpenStreams = session_->max_open_outgoing_streams();
306 for (size_t i = 0; i < kMaxOpenStreams; i++) { 313 for (size_t i = 0; i < kMaxOpenStreams; i++) {
307 session_->CreateOutgoingDynamicStream(kDefaultPriority); 314 session_->CreateOutgoingDynamicStream(kDefaultPriority);
308 } 315 }
309 EXPECT_EQ(kMaxOpenStreams, session_->GetNumOpenOutgoingStreams()); 316 EXPECT_EQ(kMaxOpenStreams, session_->GetNumOpenOutgoingStreams());
310 317
311 // Request a stream and verify that it's pending. 318 // Request a stream and verify that it's pending.
312 std::unique_ptr<QuicChromiumClientSession::StreamRequest> stream_request = 319 std::unique_ptr<QuicChromiumClientSession::StreamRequest> stream_request =
313 session_->CreateStreamRequest(/*requires_confirmation=*/false); 320 session_->CreateStreamRequest(/*requires_confirmation=*/false);
314 TestCompletionCallback callback; 321 TestCompletionCallback callback;
315 ASSERT_EQ(ERR_IO_PENDING, stream_request->StartRequest(callback.callback())); 322 ASSERT_EQ(ERR_IO_PENDING, stream_request->StartRequest(callback.callback()));
316 323
317 // Close a stream and ensure the stream request completes. 324 // Close a stream and ensure the stream request completes.
318 QuicRstStreamFrame rst(kClientDataStreamId1, QUIC_STREAM_CANCELLED, 0); 325 QuicRstStreamFrame rst(GetNthClientInitiatedStreamId(0),
326 QUIC_STREAM_CANCELLED, 0);
319 session_->OnRstStream(rst); 327 session_->OnRstStream(rst);
320 ASSERT_TRUE(callback.have_result()); 328 ASSERT_TRUE(callback.have_result());
321 EXPECT_THAT(callback.WaitForResult(), IsOk()); 329 EXPECT_THAT(callback.WaitForResult(), IsOk());
322 EXPECT_TRUE(stream_request->ReleaseStream() != nullptr); 330 EXPECT_TRUE(stream_request->ReleaseStream() != nullptr);
323 331
324 quic_data.Resume(); 332 quic_data.Resume();
325 EXPECT_TRUE(quic_data.AllReadDataConsumed()); 333 EXPECT_TRUE(quic_data.AllReadDataConsumed());
326 EXPECT_TRUE(quic_data.AllWriteDataConsumed()); 334 EXPECT_TRUE(quic_data.AllWriteDataConsumed());
327 } 335 }
328 336
329 TEST_P(QuicChromiumClientSessionTest, CancelPendingStreamRequest) { 337 TEST_P(QuicChromiumClientSessionTest, CancelPendingStreamRequest) {
330 MockQuicData quic_data; 338 MockQuicData quic_data;
331 quic_data.AddWrite(client_maker_.MakeInitialSettingsPacket(1, nullptr)); 339 quic_data.AddWrite(client_maker_.MakeInitialSettingsPacket(1, nullptr));
332 quic_data.AddWrite(client_maker_.MakeRstPacket(2, true, kClientDataStreamId1, 340 quic_data.AddWrite(client_maker_.MakeRstPacket(
333 QUIC_RST_ACKNOWLEDGEMENT)); 341 2, true, GetNthClientInitiatedStreamId(0), QUIC_RST_ACKNOWLEDGEMENT));
334 quic_data.AddRead(ASYNC, ERR_IO_PENDING); 342 quic_data.AddRead(ASYNC, ERR_IO_PENDING);
335 quic_data.AddRead(ASYNC, OK); // EOF 343 quic_data.AddRead(ASYNC, OK); // EOF
336 quic_data.AddSocketDataToFactory(&socket_factory_); 344 quic_data.AddSocketDataToFactory(&socket_factory_);
337 345
338 Initialize(); 346 Initialize();
339 CompleteCryptoHandshake(); 347 CompleteCryptoHandshake();
340 348
341 // Open the maximum number of streams so that a subsequent request 349 // Open the maximum number of streams so that a subsequent request
342 // can not proceed immediately. 350 // can not proceed immediately.
343 const size_t kMaxOpenStreams = session_->max_open_outgoing_streams(); 351 const size_t kMaxOpenStreams = session_->max_open_outgoing_streams();
344 for (size_t i = 0; i < kMaxOpenStreams; i++) { 352 for (size_t i = 0; i < kMaxOpenStreams; i++) {
345 session_->CreateOutgoingDynamicStream(kDefaultPriority); 353 session_->CreateOutgoingDynamicStream(kDefaultPriority);
346 } 354 }
347 EXPECT_EQ(kMaxOpenStreams, session_->GetNumOpenOutgoingStreams()); 355 EXPECT_EQ(kMaxOpenStreams, session_->GetNumOpenOutgoingStreams());
348 356
349 // Request a stream and verify that it's pending. 357 // Request a stream and verify that it's pending.
350 std::unique_ptr<QuicChromiumClientSession::StreamRequest> stream_request = 358 std::unique_ptr<QuicChromiumClientSession::StreamRequest> stream_request =
351 session_->CreateStreamRequest(/*requires_confirmation=*/false); 359 session_->CreateStreamRequest(/*requires_confirmation=*/false);
352 TestCompletionCallback callback; 360 TestCompletionCallback callback;
353 ASSERT_EQ(ERR_IO_PENDING, stream_request->StartRequest(callback.callback())); 361 ASSERT_EQ(ERR_IO_PENDING, stream_request->StartRequest(callback.callback()));
354 362
355 // Cancel the pending stream request. 363 // Cancel the pending stream request.
356 stream_request.reset(); 364 stream_request.reset();
357 365
358 // Close a stream and ensure that no new stream is created. 366 // Close a stream and ensure that no new stream is created.
359 QuicRstStreamFrame rst(kClientDataStreamId1, QUIC_STREAM_CANCELLED, 0); 367 QuicRstStreamFrame rst(GetNthClientInitiatedStreamId(0),
368 QUIC_STREAM_CANCELLED, 0);
360 session_->OnRstStream(rst); 369 session_->OnRstStream(rst);
361 EXPECT_EQ(kMaxOpenStreams - 1, session_->GetNumOpenOutgoingStreams()); 370 EXPECT_EQ(kMaxOpenStreams - 1, session_->GetNumOpenOutgoingStreams());
362 371
363 quic_data.Resume(); 372 quic_data.Resume();
364 EXPECT_TRUE(quic_data.AllReadDataConsumed()); 373 EXPECT_TRUE(quic_data.AllReadDataConsumed());
365 EXPECT_TRUE(quic_data.AllWriteDataConsumed()); 374 EXPECT_TRUE(quic_data.AllWriteDataConsumed());
366 } 375 }
367 376
368 TEST_P(QuicChromiumClientSessionTest, ConnectionCloseBeforeStreamRequest) { 377 TEST_P(QuicChromiumClientSessionTest, ConnectionCloseBeforeStreamRequest) {
369 MockQuicData quic_data; 378 MockQuicData quic_data;
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
446 455
447 EXPECT_TRUE(quic_data.AllReadDataConsumed()); 456 EXPECT_TRUE(quic_data.AllReadDataConsumed());
448 EXPECT_TRUE(quic_data.AllWriteDataConsumed()); 457 EXPECT_TRUE(quic_data.AllWriteDataConsumed());
449 } 458 }
450 459
451 TEST_P(QuicChromiumClientSessionTest, MaxNumStreams) { 460 TEST_P(QuicChromiumClientSessionTest, MaxNumStreams) {
452 MockRead reads[] = {MockRead(SYNCHRONOUS, ERR_IO_PENDING, 0)}; 461 MockRead reads[] = {MockRead(SYNCHRONOUS, ERR_IO_PENDING, 0)};
453 std::unique_ptr<QuicEncryptedPacket> settings_packet( 462 std::unique_ptr<QuicEncryptedPacket> settings_packet(
454 client_maker_.MakeInitialSettingsPacket(1, nullptr)); 463 client_maker_.MakeInitialSettingsPacket(1, nullptr));
455 std::unique_ptr<QuicEncryptedPacket> client_rst(client_maker_.MakeRstPacket( 464 std::unique_ptr<QuicEncryptedPacket> client_rst(client_maker_.MakeRstPacket(
456 2, true, kClientDataStreamId1, QUIC_RST_ACKNOWLEDGEMENT)); 465 2, true, GetNthClientInitiatedStreamId(0), QUIC_RST_ACKNOWLEDGEMENT));
457 MockWrite writes[] = { 466 MockWrite writes[] = {
458 MockWrite(ASYNC, settings_packet->data(), settings_packet->length(), 1), 467 MockWrite(ASYNC, settings_packet->data(), settings_packet->length(), 1),
459 MockWrite(ASYNC, client_rst->data(), client_rst->length(), 2)}; 468 MockWrite(ASYNC, client_rst->data(), client_rst->length(), 2)};
460 socket_data_.reset(new SequencedSocketData(reads, arraysize(reads), writes, 469 socket_data_.reset(new SequencedSocketData(reads, arraysize(reads), writes,
461 arraysize(writes))); 470 arraysize(writes)));
462 471
463 Initialize(); 472 Initialize();
464 CompleteCryptoHandshake(); 473 CompleteCryptoHandshake();
465 const size_t kMaxOpenStreams = session_->max_open_outgoing_streams(); 474 const size_t kMaxOpenStreams = session_->max_open_outgoing_streams();
466 475
(...skipping 18 matching lines...) Expand all
485 EXPECT_EQ(kMaxOpenStreams - 1, session_->GetNumOpenOutgoingStreams()); 494 EXPECT_EQ(kMaxOpenStreams - 1, session_->GetNumOpenOutgoingStreams());
486 EXPECT_TRUE(session_->CreateOutgoingDynamicStream(kDefaultPriority)); 495 EXPECT_TRUE(session_->CreateOutgoingDynamicStream(kDefaultPriority));
487 } 496 }
488 497
489 TEST_P(QuicChromiumClientSessionTest, PushStreamTimedOutNoResponse) { 498 TEST_P(QuicChromiumClientSessionTest, PushStreamTimedOutNoResponse) {
490 base::HistogramTester histogram_tester; 499 base::HistogramTester histogram_tester;
491 MockRead reads[] = {MockRead(SYNCHRONOUS, ERR_IO_PENDING, 0)}; 500 MockRead reads[] = {MockRead(SYNCHRONOUS, ERR_IO_PENDING, 0)};
492 std::unique_ptr<QuicEncryptedPacket> settings_packet( 501 std::unique_ptr<QuicEncryptedPacket> settings_packet(
493 client_maker_.MakeInitialSettingsPacket(1, nullptr)); 502 client_maker_.MakeInitialSettingsPacket(1, nullptr));
494 std::unique_ptr<QuicEncryptedPacket> client_rst(client_maker_.MakeRstPacket( 503 std::unique_ptr<QuicEncryptedPacket> client_rst(client_maker_.MakeRstPacket(
495 2, true, kServerDataStreamId1, QUIC_PUSH_STREAM_TIMED_OUT)); 504 2, true, GetNthServerInitiatedStreamId(0), QUIC_PUSH_STREAM_TIMED_OUT));
496 MockWrite writes[] = { 505 MockWrite writes[] = {
497 MockWrite(ASYNC, settings_packet->data(), settings_packet->length(), 1), 506 MockWrite(ASYNC, settings_packet->data(), settings_packet->length(), 1),
498 MockWrite(ASYNC, client_rst->data(), client_rst->length(), 2)}; 507 MockWrite(ASYNC, client_rst->data(), client_rst->length(), 2)};
499 socket_data_.reset(new SequencedSocketData(reads, arraysize(reads), writes, 508 socket_data_.reset(new SequencedSocketData(reads, arraysize(reads), writes,
500 arraysize(writes))); 509 arraysize(writes)));
501 Initialize(); 510 Initialize();
502 511
503 ProofVerifyDetailsChromium details; 512 ProofVerifyDetailsChromium details;
504 details.cert_verify_result.verified_cert = 513 details.cert_verify_result.verified_cert =
505 ImportCertFromFile(GetTestCertsDirectory(), "spdy_pooling.pem"); 514 ImportCertFromFile(GetTestCertsDirectory(), "spdy_pooling.pem");
506 ASSERT_TRUE(details.cert_verify_result.verified_cert.get()); 515 ASSERT_TRUE(details.cert_verify_result.verified_cert.get());
507 516
508 CompleteCryptoHandshake(); 517 CompleteCryptoHandshake();
509 session_->OnProofVerifyDetailsAvailable(details); 518 session_->OnProofVerifyDetailsAvailable(details);
510 519
511 QuicChromiumClientStream* stream = 520 QuicChromiumClientStream* stream =
512 session_->CreateOutgoingDynamicStream(kDefaultPriority); 521 session_->CreateOutgoingDynamicStream(kDefaultPriority);
513 EXPECT_TRUE(stream); 522 EXPECT_TRUE(stream);
514 523
515 SpdyHeaderBlock promise_headers; 524 SpdyHeaderBlock promise_headers;
516 promise_headers[":method"] = "GET"; 525 promise_headers[":method"] = "GET";
517 promise_headers[":authority"] = "www.example.org"; 526 promise_headers[":authority"] = "www.example.org";
518 promise_headers[":scheme"] = "https"; 527 promise_headers[":scheme"] = "https";
519 promise_headers[":path"] = "/pushed.jpg"; 528 promise_headers[":path"] = "/pushed.jpg";
520 529
521 // Receive a PUSH PROMISE from the server. 530 // Receive a PUSH PROMISE from the server.
522 EXPECT_TRUE(session_->HandlePromised(stream->id(), kServerDataStreamId1, 531 EXPECT_TRUE(session_->HandlePromised(
523 promise_headers)); 532 stream->id(), GetNthServerInitiatedStreamId(0), promise_headers));
524 533
525 QuicClientPromisedInfo* promised = 534 QuicClientPromisedInfo* promised =
526 session_->GetPromisedById(kServerDataStreamId1); 535 session_->GetPromisedById(GetNthServerInitiatedStreamId(0));
527 EXPECT_TRUE(promised); 536 EXPECT_TRUE(promised);
528 // Fire alarm to time out the push stream. 537 // Fire alarm to time out the push stream.
529 alarm_factory_.FireAlarm(QuicClientPromisedInfoPeer::GetAlarm(promised)); 538 alarm_factory_.FireAlarm(QuicClientPromisedInfoPeer::GetAlarm(promised));
530 EXPECT_FALSE( 539 EXPECT_FALSE(
531 session_->GetPromisedByUrl("https://www.example.org/pushed.jpg")); 540 session_->GetPromisedByUrl("https://www.example.org/pushed.jpg"));
532 EXPECT_EQ(0u, 541 EXPECT_EQ(0u,
533 QuicChromiumClientSessionPeer::GetPushedBytesCount(session_.get())); 542 QuicChromiumClientSessionPeer::GetPushedBytesCount(session_.get()));
534 EXPECT_EQ(0u, QuicChromiumClientSessionPeer::GetPushedAndUnclaimedBytesCount( 543 EXPECT_EQ(0u, QuicChromiumClientSessionPeer::GetPushedAndUnclaimedBytesCount(
535 session_.get())); 544 session_.get()));
536 } 545 }
537 546
538 TEST_P(QuicChromiumClientSessionTest, PushStreamTimedOutWithResponse) { 547 TEST_P(QuicChromiumClientSessionTest, PushStreamTimedOutWithResponse) {
539 base::HistogramTester histogram_tester; 548 base::HistogramTester histogram_tester;
540 MockRead reads[] = {MockRead(SYNCHRONOUS, ERR_IO_PENDING, 0)}; 549 MockRead reads[] = {MockRead(SYNCHRONOUS, ERR_IO_PENDING, 0)};
541 std::unique_ptr<QuicEncryptedPacket> settings_packet( 550 std::unique_ptr<QuicEncryptedPacket> settings_packet(
542 client_maker_.MakeInitialSettingsPacket(1, nullptr)); 551 client_maker_.MakeInitialSettingsPacket(1, nullptr));
543 std::unique_ptr<QuicEncryptedPacket> client_rst(client_maker_.MakeRstPacket( 552 std::unique_ptr<QuicEncryptedPacket> client_rst(client_maker_.MakeRstPacket(
544 2, true, kServerDataStreamId1, QUIC_PUSH_STREAM_TIMED_OUT)); 553 2, true, GetNthServerInitiatedStreamId(0), QUIC_PUSH_STREAM_TIMED_OUT));
545 MockWrite writes[] = { 554 MockWrite writes[] = {
546 MockWrite(ASYNC, settings_packet->data(), settings_packet->length(), 1), 555 MockWrite(ASYNC, settings_packet->data(), settings_packet->length(), 1),
547 MockWrite(ASYNC, client_rst->data(), client_rst->length(), 2)}; 556 MockWrite(ASYNC, client_rst->data(), client_rst->length(), 2)};
548 socket_data_.reset(new SequencedSocketData(reads, arraysize(reads), writes, 557 socket_data_.reset(new SequencedSocketData(reads, arraysize(reads), writes,
549 arraysize(writes))); 558 arraysize(writes)));
550 Initialize(); 559 Initialize();
551 560
552 ProofVerifyDetailsChromium details; 561 ProofVerifyDetailsChromium details;
553 details.cert_verify_result.verified_cert = 562 details.cert_verify_result.verified_cert =
554 ImportCertFromFile(GetTestCertsDirectory(), "spdy_pooling.pem"); 563 ImportCertFromFile(GetTestCertsDirectory(), "spdy_pooling.pem");
555 ASSERT_TRUE(details.cert_verify_result.verified_cert.get()); 564 ASSERT_TRUE(details.cert_verify_result.verified_cert.get());
556 565
557 CompleteCryptoHandshake(); 566 CompleteCryptoHandshake();
558 session_->OnProofVerifyDetailsAvailable(details); 567 session_->OnProofVerifyDetailsAvailable(details);
559 568
560 QuicChromiumClientStream* stream = 569 QuicChromiumClientStream* stream =
561 session_->CreateOutgoingDynamicStream(kDefaultPriority); 570 session_->CreateOutgoingDynamicStream(kDefaultPriority);
562 EXPECT_TRUE(stream); 571 EXPECT_TRUE(stream);
563 572
564 SpdyHeaderBlock promise_headers; 573 SpdyHeaderBlock promise_headers;
565 promise_headers[":method"] = "GET"; 574 promise_headers[":method"] = "GET";
566 promise_headers[":authority"] = "www.example.org"; 575 promise_headers[":authority"] = "www.example.org";
567 promise_headers[":scheme"] = "https"; 576 promise_headers[":scheme"] = "https";
568 promise_headers[":path"] = "/pushed.jpg"; 577 promise_headers[":path"] = "/pushed.jpg";
569 578
570 session_->GetOrCreateStream(kServerDataStreamId1); 579 session_->GetOrCreateStream(GetNthServerInitiatedStreamId(0));
571 // Receive a PUSH PROMISE from the server. 580 // Receive a PUSH PROMISE from the server.
572 EXPECT_TRUE(session_->HandlePromised(stream->id(), kServerDataStreamId1, 581 EXPECT_TRUE(session_->HandlePromised(
573 promise_headers)); 582 stream->id(), GetNthServerInitiatedStreamId(0), promise_headers));
574 session_->OnInitialHeadersComplete(kServerDataStreamId1, SpdyHeaderBlock()); 583 session_->OnInitialHeadersComplete(GetNthServerInitiatedStreamId(0),
584 SpdyHeaderBlock());
575 // Read data on the pushed stream. 585 // Read data on the pushed stream.
576 QuicStreamFrame data(kServerDataStreamId1, false, 0, QuicStringPiece("SP")); 586 QuicStreamFrame data(GetNthServerInitiatedStreamId(0), false, 0,
587 QuicStringPiece("SP"));
577 session_->OnStreamFrame(data); 588 session_->OnStreamFrame(data);
578 589
579 QuicClientPromisedInfo* promised = 590 QuicClientPromisedInfo* promised =
580 session_->GetPromisedById(kServerDataStreamId1); 591 session_->GetPromisedById(GetNthServerInitiatedStreamId(0));
581 EXPECT_TRUE(promised); 592 EXPECT_TRUE(promised);
582 // Fire alarm to time out the push stream. 593 // Fire alarm to time out the push stream.
583 alarm_factory_.FireAlarm(QuicClientPromisedInfoPeer::GetAlarm(promised)); 594 alarm_factory_.FireAlarm(QuicClientPromisedInfoPeer::GetAlarm(promised));
584 EXPECT_EQ(2u, 595 EXPECT_EQ(2u,
585 QuicChromiumClientSessionPeer::GetPushedBytesCount(session_.get())); 596 QuicChromiumClientSessionPeer::GetPushedBytesCount(session_.get()));
586 EXPECT_EQ(2u, QuicChromiumClientSessionPeer::GetPushedAndUnclaimedBytesCount( 597 EXPECT_EQ(2u, QuicChromiumClientSessionPeer::GetPushedAndUnclaimedBytesCount(
587 session_.get())); 598 session_.get()));
588 } 599 }
589 600
590 TEST_P(QuicChromiumClientSessionTest, CancelPushWhenPendingValidation) { 601 TEST_P(QuicChromiumClientSessionTest, CancelPushWhenPendingValidation) {
591 MockRead reads[] = {MockRead(SYNCHRONOUS, ERR_IO_PENDING, 0)}; 602 MockRead reads[] = {MockRead(SYNCHRONOUS, ERR_IO_PENDING, 0)};
592 std::unique_ptr<QuicEncryptedPacket> settings_packet( 603 std::unique_ptr<QuicEncryptedPacket> settings_packet(
593 client_maker_.MakeInitialSettingsPacket(1, nullptr)); 604 client_maker_.MakeInitialSettingsPacket(1, nullptr));
594 std::unique_ptr<QuicEncryptedPacket> client_rst(client_maker_.MakeRstPacket( 605 std::unique_ptr<QuicEncryptedPacket> client_rst(client_maker_.MakeRstPacket(
595 2, true, kClientDataStreamId1, QUIC_RST_ACKNOWLEDGEMENT)); 606 2, true, GetNthClientInitiatedStreamId(0), QUIC_RST_ACKNOWLEDGEMENT));
596 607
597 MockWrite writes[] = { 608 MockWrite writes[] = {
598 MockWrite(ASYNC, settings_packet->data(), settings_packet->length(), 1), 609 MockWrite(ASYNC, settings_packet->data(), settings_packet->length(), 1),
599 MockWrite(ASYNC, client_rst->data(), client_rst->length(), 2)}; 610 MockWrite(ASYNC, client_rst->data(), client_rst->length(), 2)};
600 socket_data_.reset(new SequencedSocketData(reads, arraysize(reads), writes, 611 socket_data_.reset(new SequencedSocketData(reads, arraysize(reads), writes,
601 arraysize(writes))); 612 arraysize(writes)));
602 Initialize(); 613 Initialize();
603 614
604 ProofVerifyDetailsChromium details; 615 ProofVerifyDetailsChromium details;
605 details.cert_verify_result.verified_cert = 616 details.cert_verify_result.verified_cert =
606 ImportCertFromFile(GetTestCertsDirectory(), "spdy_pooling.pem"); 617 ImportCertFromFile(GetTestCertsDirectory(), "spdy_pooling.pem");
607 ASSERT_TRUE(details.cert_verify_result.verified_cert.get()); 618 ASSERT_TRUE(details.cert_verify_result.verified_cert.get());
608 619
609 CompleteCryptoHandshake(); 620 CompleteCryptoHandshake();
610 session_->OnProofVerifyDetailsAvailable(details); 621 session_->OnProofVerifyDetailsAvailable(details);
611 622
612 QuicChromiumClientStream* stream = 623 QuicChromiumClientStream* stream =
613 session_->CreateOutgoingDynamicStream(kDefaultPriority); 624 session_->CreateOutgoingDynamicStream(kDefaultPriority);
614 EXPECT_TRUE(stream); 625 EXPECT_TRUE(stream);
615 626
616 SpdyHeaderBlock promise_headers; 627 SpdyHeaderBlock promise_headers;
617 promise_headers[":method"] = "GET"; 628 promise_headers[":method"] = "GET";
618 promise_headers[":authority"] = "www.example.org"; 629 promise_headers[":authority"] = "www.example.org";
619 promise_headers[":scheme"] = "https"; 630 promise_headers[":scheme"] = "https";
620 promise_headers[":path"] = "/pushed.jpg"; 631 promise_headers[":path"] = "/pushed.jpg";
621 632
622 // Receive a PUSH PROMISE from the server. 633 // Receive a PUSH PROMISE from the server.
623 EXPECT_TRUE(session_->HandlePromised(stream->id(), kServerDataStreamId1, 634 EXPECT_TRUE(session_->HandlePromised(
624 promise_headers)); 635 stream->id(), GetNthServerInitiatedStreamId(0), promise_headers));
625 636
626 QuicClientPromisedInfo* promised = 637 QuicClientPromisedInfo* promised =
627 session_->GetPromisedById(kServerDataStreamId1); 638 session_->GetPromisedById(GetNthServerInitiatedStreamId(0));
628 EXPECT_TRUE(promised); 639 EXPECT_TRUE(promised);
629 640
630 // Initiate rendezvous. 641 // Initiate rendezvous.
631 SpdyHeaderBlock client_request = promise_headers.Clone(); 642 SpdyHeaderBlock client_request = promise_headers.Clone();
632 TestPushPromiseDelegate delegate(/*match=*/true); 643 TestPushPromiseDelegate delegate(/*match=*/true);
633 promised->HandleClientRequest(client_request, &delegate); 644 promised->HandleClientRequest(client_request, &delegate);
634 645
635 // Cancel the push before receiving the response to the pushed request. 646 // Cancel the push before receiving the response to the pushed request.
636 GURL pushed_url("https://www.example.org/pushed.jpg"); 647 GURL pushed_url("https://www.example.org/pushed.jpg");
637 test_push_delegate_.CancelPush(pushed_url); 648 test_push_delegate_.CancelPush(pushed_url);
638 EXPECT_TRUE(session_->GetPromisedByUrl(pushed_url.spec())); 649 EXPECT_TRUE(session_->GetPromisedByUrl(pushed_url.spec()));
639 650
640 // Reset the stream now before tear down. 651 // Reset the stream now before tear down.
641 session_->CloseStream(kClientDataStreamId1); 652 session_->CloseStream(GetNthClientInitiatedStreamId(0));
642 } 653 }
643 654
644 TEST_P(QuicChromiumClientSessionTest, CancelPushBeforeReceivingResponse) { 655 TEST_P(QuicChromiumClientSessionTest, CancelPushBeforeReceivingResponse) {
645 base::HistogramTester histogram_tester; 656 base::HistogramTester histogram_tester;
646 MockRead reads[] = {MockRead(SYNCHRONOUS, ERR_IO_PENDING, 0)}; 657 MockRead reads[] = {MockRead(SYNCHRONOUS, ERR_IO_PENDING, 0)};
647 std::unique_ptr<QuicEncryptedPacket> settings_packet( 658 std::unique_ptr<QuicEncryptedPacket> settings_packet(
648 client_maker_.MakeInitialSettingsPacket(1, nullptr)); 659 client_maker_.MakeInitialSettingsPacket(1, nullptr));
649 std::unique_ptr<QuicEncryptedPacket> client_rst(client_maker_.MakeRstPacket( 660 std::unique_ptr<QuicEncryptedPacket> client_rst(client_maker_.MakeRstPacket(
650 2, true, kServerDataStreamId1, QUIC_STREAM_CANCELLED)); 661 2, true, GetNthServerInitiatedStreamId(0), QUIC_STREAM_CANCELLED));
651 MockWrite writes[] = { 662 MockWrite writes[] = {
652 MockWrite(ASYNC, settings_packet->data(), settings_packet->length(), 1), 663 MockWrite(ASYNC, settings_packet->data(), settings_packet->length(), 1),
653 MockWrite(ASYNC, client_rst->data(), client_rst->length(), 2)}; 664 MockWrite(ASYNC, client_rst->data(), client_rst->length(), 2)};
654 socket_data_.reset(new SequencedSocketData(reads, arraysize(reads), writes, 665 socket_data_.reset(new SequencedSocketData(reads, arraysize(reads), writes,
655 arraysize(writes))); 666 arraysize(writes)));
656 Initialize(); 667 Initialize();
657 668
658 ProofVerifyDetailsChromium details; 669 ProofVerifyDetailsChromium details;
659 details.cert_verify_result.verified_cert = 670 details.cert_verify_result.verified_cert =
660 ImportCertFromFile(GetTestCertsDirectory(), "spdy_pooling.pem"); 671 ImportCertFromFile(GetTestCertsDirectory(), "spdy_pooling.pem");
661 ASSERT_TRUE(details.cert_verify_result.verified_cert.get()); 672 ASSERT_TRUE(details.cert_verify_result.verified_cert.get());
662 673
663 CompleteCryptoHandshake(); 674 CompleteCryptoHandshake();
664 session_->OnProofVerifyDetailsAvailable(details); 675 session_->OnProofVerifyDetailsAvailable(details);
665 676
666 QuicChromiumClientStream* stream = 677 QuicChromiumClientStream* stream =
667 session_->CreateOutgoingDynamicStream(kDefaultPriority); 678 session_->CreateOutgoingDynamicStream(kDefaultPriority);
668 EXPECT_TRUE(stream); 679 EXPECT_TRUE(stream);
669 680
670 SpdyHeaderBlock promise_headers; 681 SpdyHeaderBlock promise_headers;
671 promise_headers[":method"] = "GET"; 682 promise_headers[":method"] = "GET";
672 promise_headers[":authority"] = "www.example.org"; 683 promise_headers[":authority"] = "www.example.org";
673 promise_headers[":scheme"] = "https"; 684 promise_headers[":scheme"] = "https";
674 promise_headers[":path"] = "/pushed.jpg"; 685 promise_headers[":path"] = "/pushed.jpg";
675 686
676 // Receive a PUSH PROMISE from the server. 687 // Receive a PUSH PROMISE from the server.
677 EXPECT_TRUE(session_->HandlePromised(stream->id(), kServerDataStreamId1, 688 EXPECT_TRUE(session_->HandlePromised(
678 promise_headers)); 689 stream->id(), GetNthServerInitiatedStreamId(0), promise_headers));
679 690
680 QuicClientPromisedInfo* promised = 691 QuicClientPromisedInfo* promised =
681 session_->GetPromisedById(kServerDataStreamId1); 692 session_->GetPromisedById(GetNthServerInitiatedStreamId(0));
682 EXPECT_TRUE(promised); 693 EXPECT_TRUE(promised);
683 // Cancel the push before receiving the response to the pushed request. 694 // Cancel the push before receiving the response to the pushed request.
684 GURL pushed_url("https://www.example.org/pushed.jpg"); 695 GURL pushed_url("https://www.example.org/pushed.jpg");
685 test_push_delegate_.CancelPush(pushed_url); 696 test_push_delegate_.CancelPush(pushed_url);
686 697
687 EXPECT_FALSE(session_->GetPromisedByUrl(pushed_url.spec())); 698 EXPECT_FALSE(session_->GetPromisedByUrl(pushed_url.spec()));
688 EXPECT_EQ(0u, 699 EXPECT_EQ(0u,
689 QuicChromiumClientSessionPeer::GetPushedBytesCount(session_.get())); 700 QuicChromiumClientSessionPeer::GetPushedBytesCount(session_.get()));
690 EXPECT_EQ(0u, QuicChromiumClientSessionPeer::GetPushedAndUnclaimedBytesCount( 701 EXPECT_EQ(0u, QuicChromiumClientSessionPeer::GetPushedAndUnclaimedBytesCount(
691 session_.get())); 702 session_.get()));
692 } 703 }
693 704
694 TEST_P(QuicChromiumClientSessionTest, CancelPushAfterReceivingResponse) { 705 TEST_P(QuicChromiumClientSessionTest, CancelPushAfterReceivingResponse) {
695 base::HistogramTester histogram_tester; 706 base::HistogramTester histogram_tester;
696 MockRead reads[] = {MockRead(SYNCHRONOUS, ERR_IO_PENDING, 0)}; 707 MockRead reads[] = {MockRead(SYNCHRONOUS, ERR_IO_PENDING, 0)};
697 std::unique_ptr<QuicEncryptedPacket> settings_packet( 708 std::unique_ptr<QuicEncryptedPacket> settings_packet(
698 client_maker_.MakeInitialSettingsPacket(1, nullptr)); 709 client_maker_.MakeInitialSettingsPacket(1, nullptr));
699 std::unique_ptr<QuicEncryptedPacket> client_rst(client_maker_.MakeRstPacket( 710 std::unique_ptr<QuicEncryptedPacket> client_rst(client_maker_.MakeRstPacket(
700 2, true, kServerDataStreamId1, QUIC_STREAM_CANCELLED)); 711 2, true, GetNthServerInitiatedStreamId(0), QUIC_STREAM_CANCELLED));
701 MockWrite writes[] = { 712 MockWrite writes[] = {
702 MockWrite(ASYNC, settings_packet->data(), settings_packet->length(), 1), 713 MockWrite(ASYNC, settings_packet->data(), settings_packet->length(), 1),
703 MockWrite(ASYNC, client_rst->data(), client_rst->length(), 2)}; 714 MockWrite(ASYNC, client_rst->data(), client_rst->length(), 2)};
704 socket_data_.reset(new SequencedSocketData(reads, arraysize(reads), writes, 715 socket_data_.reset(new SequencedSocketData(reads, arraysize(reads), writes,
705 arraysize(writes))); 716 arraysize(writes)));
706 Initialize(); 717 Initialize();
707 718
708 ProofVerifyDetailsChromium details; 719 ProofVerifyDetailsChromium details;
709 details.cert_verify_result.verified_cert = 720 details.cert_verify_result.verified_cert =
710 ImportCertFromFile(GetTestCertsDirectory(), "spdy_pooling.pem"); 721 ImportCertFromFile(GetTestCertsDirectory(), "spdy_pooling.pem");
711 ASSERT_TRUE(details.cert_verify_result.verified_cert.get()); 722 ASSERT_TRUE(details.cert_verify_result.verified_cert.get());
712 723
713 CompleteCryptoHandshake(); 724 CompleteCryptoHandshake();
714 session_->OnProofVerifyDetailsAvailable(details); 725 session_->OnProofVerifyDetailsAvailable(details);
715 726
716 QuicChromiumClientStream* stream = 727 QuicChromiumClientStream* stream =
717 session_->CreateOutgoingDynamicStream(kDefaultPriority); 728 session_->CreateOutgoingDynamicStream(kDefaultPriority);
718 EXPECT_TRUE(stream); 729 EXPECT_TRUE(stream);
719 730
720 SpdyHeaderBlock promise_headers; 731 SpdyHeaderBlock promise_headers;
721 promise_headers[":method"] = "GET"; 732 promise_headers[":method"] = "GET";
722 promise_headers[":authority"] = "www.example.org"; 733 promise_headers[":authority"] = "www.example.org";
723 promise_headers[":scheme"] = "https"; 734 promise_headers[":scheme"] = "https";
724 promise_headers[":path"] = "/pushed.jpg"; 735 promise_headers[":path"] = "/pushed.jpg";
725 736
726 session_->GetOrCreateStream(kServerDataStreamId1); 737 session_->GetOrCreateStream(GetNthServerInitiatedStreamId(0));
727 // Receive a PUSH PROMISE from the server. 738 // Receive a PUSH PROMISE from the server.
728 EXPECT_TRUE(session_->HandlePromised(stream->id(), kServerDataStreamId1, 739 EXPECT_TRUE(session_->HandlePromised(
729 promise_headers)); 740 stream->id(), GetNthServerInitiatedStreamId(0), promise_headers));
730 session_->OnInitialHeadersComplete(kServerDataStreamId1, SpdyHeaderBlock()); 741 session_->OnInitialHeadersComplete(GetNthServerInitiatedStreamId(0),
742 SpdyHeaderBlock());
731 // Read data on the pushed stream. 743 // Read data on the pushed stream.
732 QuicStreamFrame data(kServerDataStreamId1, false, 0, QuicStringPiece("SP")); 744 QuicStreamFrame data(GetNthServerInitiatedStreamId(0), false, 0,
745 QuicStringPiece("SP"));
733 session_->OnStreamFrame(data); 746 session_->OnStreamFrame(data);
734 747
735 QuicClientPromisedInfo* promised = 748 QuicClientPromisedInfo* promised =
736 session_->GetPromisedById(kServerDataStreamId1); 749 session_->GetPromisedById(GetNthServerInitiatedStreamId(0));
737 EXPECT_TRUE(promised); 750 EXPECT_TRUE(promised);
738 // Cancel the push after receiving data on the push stream. 751 // Cancel the push after receiving data on the push stream.
739 GURL pushed_url("https://www.example.org/pushed.jpg"); 752 GURL pushed_url("https://www.example.org/pushed.jpg");
740 test_push_delegate_.CancelPush(pushed_url); 753 test_push_delegate_.CancelPush(pushed_url);
741 754
742 EXPECT_FALSE(session_->GetPromisedByUrl(pushed_url.spec())); 755 EXPECT_FALSE(session_->GetPromisedByUrl(pushed_url.spec()));
743 EXPECT_EQ(2u, 756 EXPECT_EQ(2u,
744 QuicChromiumClientSessionPeer::GetPushedBytesCount(session_.get())); 757 QuicChromiumClientSessionPeer::GetPushedBytesCount(session_.get()));
745 EXPECT_EQ(2u, QuicChromiumClientSessionPeer::GetPushedAndUnclaimedBytesCount( 758 EXPECT_EQ(2u, QuicChromiumClientSessionPeer::GetPushedAndUnclaimedBytesCount(
746 session_.get())); 759 session_.get()));
747 } 760 }
748 761
749 TEST_P(QuicChromiumClientSessionTest, Priority) { 762 TEST_P(QuicChromiumClientSessionTest, Priority) {
750 MockRead reads[] = {MockRead(SYNCHRONOUS, ERR_IO_PENDING, 0)}; 763 MockRead reads[] = {MockRead(SYNCHRONOUS, ERR_IO_PENDING, 0)};
751 std::unique_ptr<QuicEncryptedPacket> settings_packet( 764 std::unique_ptr<QuicEncryptedPacket> settings_packet(
752 client_maker_.MakeInitialSettingsPacket(1, nullptr)); 765 client_maker_.MakeInitialSettingsPacket(1, nullptr));
753 std::unique_ptr<QuicEncryptedPacket> client_rst(client_maker_.MakeRstPacket( 766 std::unique_ptr<QuicEncryptedPacket> client_rst(client_maker_.MakeRstPacket(
754 2, true, kClientDataStreamId1, QUIC_RST_ACKNOWLEDGEMENT)); 767 2, true, GetNthClientInitiatedStreamId(0), QUIC_RST_ACKNOWLEDGEMENT));
755 MockWrite writes[] = { 768 MockWrite writes[] = {
756 MockWrite(ASYNC, settings_packet->data(), settings_packet->length(), 1), 769 MockWrite(ASYNC, settings_packet->data(), settings_packet->length(), 1),
757 MockWrite(ASYNC, client_rst->data(), client_rst->length(), 2)}; 770 MockWrite(ASYNC, client_rst->data(), client_rst->length(), 2)};
758 socket_data_.reset(new SequencedSocketData(reads, arraysize(reads), writes, 771 socket_data_.reset(new SequencedSocketData(reads, arraysize(reads), writes,
759 arraysize(writes))); 772 arraysize(writes)));
760 773
761 Initialize(); 774 Initialize();
762 CompleteCryptoHandshake(); 775 CompleteCryptoHandshake();
763 776
764 for (SpdyPriority priority : {kV3HighestPriority, kV3LowestPriority}) { 777 for (SpdyPriority priority : {kV3HighestPriority, kV3LowestPriority}) {
765 QuicChromiumClientStream* stream = 778 QuicChromiumClientStream* stream =
766 session_->CreateOutgoingDynamicStream(priority); 779 session_->CreateOutgoingDynamicStream(priority);
767 EXPECT_EQ(kV3HighestPriority, stream->priority()); 780 EXPECT_EQ(kV3HighestPriority, stream->priority());
768 781
769 SpdyHeaderBlock headers; 782 SpdyHeaderBlock headers;
770 stream->WriteHeaders(std::move(headers), /*fin*/ true, 783 stream->WriteHeaders(std::move(headers), /*fin*/ true,
771 /*ack_listener*/ nullptr); 784 /*ack_listener*/ nullptr);
772 785
773 EXPECT_EQ(priority, stream->priority()); 786 EXPECT_EQ(priority, stream->priority());
774 } 787 }
775 } 788 }
776 789
777 TEST_P(QuicChromiumClientSessionTest, MaxNumStreamsViaRequest) { 790 TEST_P(QuicChromiumClientSessionTest, MaxNumStreamsViaRequest) {
778 MockRead reads[] = {MockRead(SYNCHRONOUS, ERR_IO_PENDING, 0)}; 791 MockRead reads[] = {MockRead(SYNCHRONOUS, ERR_IO_PENDING, 0)};
779 std::unique_ptr<QuicEncryptedPacket> settings_packet( 792 std::unique_ptr<QuicEncryptedPacket> settings_packet(
780 client_maker_.MakeInitialSettingsPacket(1, nullptr)); 793 client_maker_.MakeInitialSettingsPacket(1, nullptr));
781 std::unique_ptr<QuicEncryptedPacket> client_rst(client_maker_.MakeRstPacket( 794 std::unique_ptr<QuicEncryptedPacket> client_rst(client_maker_.MakeRstPacket(
782 2, true, kClientDataStreamId1, QUIC_RST_ACKNOWLEDGEMENT)); 795 2, true, GetNthClientInitiatedStreamId(0), QUIC_RST_ACKNOWLEDGEMENT));
783 MockWrite writes[] = { 796 MockWrite writes[] = {
784 MockWrite(ASYNC, settings_packet->data(), settings_packet->length(), 1), 797 MockWrite(ASYNC, settings_packet->data(), settings_packet->length(), 1),
785 MockWrite(ASYNC, client_rst->data(), client_rst->length(), 2)}; 798 MockWrite(ASYNC, client_rst->data(), client_rst->length(), 2)};
786 socket_data_.reset(new SequencedSocketData(reads, arraysize(reads), writes, 799 socket_data_.reset(new SequencedSocketData(reads, arraysize(reads), writes,
787 arraysize(writes))); 800 arraysize(writes)));
788 801
789 Initialize(); 802 Initialize();
790 CompleteCryptoHandshake(); 803 CompleteCryptoHandshake();
791 const size_t kMaxOpenStreams = session_->max_open_outgoing_streams(); 804 const size_t kMaxOpenStreams = session_->max_open_outgoing_streams();
792 805
(...skipping 350 matching lines...) Expand 10 before | Expand all | Expand 10 after
1143 1156
1144 EXPECT_TRUE(socket_data_->AllReadDataConsumed()); 1157 EXPECT_TRUE(socket_data_->AllReadDataConsumed());
1145 EXPECT_TRUE(socket_data_->AllWriteDataConsumed()); 1158 EXPECT_TRUE(socket_data_->AllWriteDataConsumed());
1146 EXPECT_TRUE(new_socket_data.AllReadDataConsumed()); 1159 EXPECT_TRUE(new_socket_data.AllReadDataConsumed());
1147 EXPECT_TRUE(new_socket_data.AllWriteDataConsumed()); 1160 EXPECT_TRUE(new_socket_data.AllWriteDataConsumed());
1148 } 1161 }
1149 1162
1150 } // namespace 1163 } // namespace
1151 } // namespace test 1164 } // namespace test
1152 } // namespace net 1165 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/chromium/quic_chromium_client_session.cc ('k') | net/quic/chromium/quic_chromium_client_stream_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698