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

Side by Side Diff: net/quic/quic_network_transaction_unittest.cc

Issue 804813010: QUIC - enabled FLAGS_allow_truncated_connection_ids_for_quic (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Enable FLAGS_allow_truncated_connection_ids_for_quic by default Created 5 years, 11 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/quic_http_stream_test.cc ('k') | net/quic/quic_stream_factory.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 <vector> 5 #include <vector>
6 6
7 #include "base/basictypes.h" 7 #include "base/basictypes.h"
8 #include "base/compiler_specific.h" 8 #include "base/compiler_specific.h"
9 #include "base/memory/scoped_ptr.h" 9 #include "base/memory/scoped_ptr.h"
10 #include "base/stl_util.h" 10 #include "base/stl_util.h"
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after
135 base::MessageLoop::current()->RunUntilIdle(); 135 base::MessageLoop::current()->RunUntilIdle();
136 } 136 }
137 137
138 scoped_ptr<QuicEncryptedPacket> ConstructConnectionClosePacket( 138 scoped_ptr<QuicEncryptedPacket> ConstructConnectionClosePacket(
139 QuicPacketSequenceNumber num) { 139 QuicPacketSequenceNumber num) {
140 return maker_.MakeConnectionClosePacket(num); 140 return maker_.MakeConnectionClosePacket(num);
141 } 141 }
142 142
143 scoped_ptr<QuicEncryptedPacket> ConstructAckPacket( 143 scoped_ptr<QuicEncryptedPacket> ConstructAckPacket(
144 QuicPacketSequenceNumber largest_received, 144 QuicPacketSequenceNumber largest_received,
145 QuicPacketSequenceNumber least_unacked) { 145 QuicPacketSequenceNumber least_unacked,
146 return maker_.MakeAckPacket(2, largest_received, least_unacked, true); 146 QuicConnectionIdLength connection_id_length) {
147 return maker_.MakeAckPacket(2, connection_id_length, largest_received,
148 least_unacked, true);
147 } 149 }
148 150
149 SpdyHeaderBlock GetRequestHeaders(const std::string& method, 151 SpdyHeaderBlock GetRequestHeaders(const std::string& method,
150 const std::string& scheme, 152 const std::string& scheme,
151 const std::string& path) { 153 const std::string& path) {
152 return maker_.GetRequestHeaders(method, scheme, path); 154 return maker_.GetRequestHeaders(method, scheme, path);
153 } 155 }
154 156
155 SpdyHeaderBlock GetResponseHeaders(const std::string& status) { 157 SpdyHeaderBlock GetResponseHeaders(const std::string& status) {
156 return maker_.GetResponseHeaders(status); 158 return maker_.GetResponseHeaders(status);
157 } 159 }
158 160
159 scoped_ptr<QuicEncryptedPacket> ConstructDataPacket( 161 scoped_ptr<QuicEncryptedPacket> ConstructDataPacket(
160 QuicPacketSequenceNumber sequence_number, 162 QuicPacketSequenceNumber sequence_number,
161 QuicStreamId stream_id, 163 QuicStreamId stream_id,
162 bool should_include_version, 164 bool should_include_version,
163 bool fin, 165 bool fin,
164 QuicStreamOffset offset, 166 QuicStreamOffset offset,
165 base::StringPiece data) { 167 base::StringPiece data) {
166 return maker_.MakeDataPacket( 168 return maker_.MakeDataPacket(sequence_number, stream_id,
167 sequence_number, stream_id, should_include_version, fin, offset, data); 169 should_include_version, fin, offset, data);
168 } 170 }
169 171
170 scoped_ptr<QuicEncryptedPacket> ConstructRequestHeadersPacket( 172 scoped_ptr<QuicEncryptedPacket> ConstructRequestHeadersPacket(
171 QuicPacketSequenceNumber sequence_number, 173 QuicPacketSequenceNumber sequence_number,
172 QuicStreamId stream_id, 174 QuicStreamId stream_id,
175 QuicConnectionIdLength connection_id_length,
173 bool should_include_version, 176 bool should_include_version,
174 bool fin, 177 bool fin,
175 const SpdyHeaderBlock& headers) { 178 const SpdyHeaderBlock& headers) {
176 return maker_.MakeRequestHeadersPacket( 179 return maker_.MakeRequestHeadersPacket(
177 sequence_number, stream_id, should_include_version, fin, headers); 180 sequence_number, stream_id, connection_id_length,
181 should_include_version, fin, headers);
178 } 182 }
179 183
180 scoped_ptr<QuicEncryptedPacket> ConstructResponseHeadersPacket( 184 scoped_ptr<QuicEncryptedPacket> ConstructResponseHeadersPacket(
181 QuicPacketSequenceNumber sequence_number, 185 QuicPacketSequenceNumber sequence_number,
182 QuicStreamId stream_id, 186 QuicStreamId stream_id,
187 QuicConnectionIdLength connection_id_length,
183 bool should_include_version, 188 bool should_include_version,
184 bool fin, 189 bool fin,
185 const SpdyHeaderBlock& headers) { 190 const SpdyHeaderBlock& headers) {
186 return maker_.MakeResponseHeadersPacket( 191 return maker_.MakeResponseHeadersPacket(
187 sequence_number, stream_id, should_include_version, fin, headers); 192 sequence_number, stream_id, connection_id_length,
193 should_include_version, fin, headers);
188 } 194 }
189 195
190 void CreateSession() { 196 void CreateSession() {
191 CreateSessionWithFactory(&socket_factory_, false); 197 CreateSessionWithFactory(&socket_factory_, false);
192 } 198 }
193 199
194 void CreateSessionWithNextProtos() { 200 void CreateSessionWithNextProtos() {
195 CreateSessionWithFactory(&socket_factory_, true); 201 CreateSessionWithFactory(&socket_factory_, true);
196 } 202 }
197 203
(...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after
324 }; 330 };
325 331
326 INSTANTIATE_TEST_CASE_P(Version, QuicNetworkTransactionTest, 332 INSTANTIATE_TEST_CASE_P(Version, QuicNetworkTransactionTest,
327 ::testing::ValuesIn(QuicSupportedVersions())); 333 ::testing::ValuesIn(QuicSupportedVersions()));
328 334
329 TEST_P(QuicNetworkTransactionTest, ForceQuic) { 335 TEST_P(QuicNetworkTransactionTest, ForceQuic) {
330 params_.origin_to_force_quic_on = 336 params_.origin_to_force_quic_on =
331 HostPortPair::FromString("www.google.com:80"); 337 HostPortPair::FromString("www.google.com:80");
332 338
333 MockQuicData mock_quic_data; 339 MockQuicData mock_quic_data;
334 mock_quic_data.AddWrite( 340 mock_quic_data.AddWrite(ConstructRequestHeadersPacket(
335 ConstructRequestHeadersPacket(1, kClientDataStreamId1, true, true, 341 1, kClientDataStreamId1, PACKET_0BYTE_CONNECTION_ID, true, true,
Ryan Hamilton 2015/01/08 18:35:44 As discussed offline, we should probably change th
ramant (doing other things) 2015/01/08 22:21:15 Done.
336 GetRequestHeaders("GET", "http", "/"))); 342 GetRequestHeaders("GET", "http", "/")));
337 mock_quic_data.AddRead( 343 mock_quic_data.AddRead(ConstructResponseHeadersPacket(
338 ConstructResponseHeadersPacket(1, kClientDataStreamId1, false, false, 344 1, kClientDataStreamId1, PACKET_0BYTE_CONNECTION_ID, false, false,
339 GetResponseHeaders("200 OK"))); 345 GetResponseHeaders("200 OK")));
340 mock_quic_data.AddRead( 346 mock_quic_data.AddRead(
341 ConstructDataPacket(2, kClientDataStreamId1, false, true, 0, "hello!")); 347 ConstructDataPacket(2, kClientDataStreamId1, false, true, 0, "hello!"));
342 mock_quic_data.AddWrite(ConstructAckPacket(2, 1)); 348 mock_quic_data.AddWrite(ConstructAckPacket(2, 1, PACKET_0BYTE_CONNECTION_ID));
343 mock_quic_data.AddRead(SYNCHRONOUS, 0); // EOF 349 mock_quic_data.AddRead(SYNCHRONOUS, 0); // EOF
344 350
345 mock_quic_data.AddDelayedSocketDataToFactory(&socket_factory_, 1); 351 mock_quic_data.AddDelayedSocketDataToFactory(&socket_factory_, 1);
346 352
347 // The non-alternate protocol job needs to hang in order to guarantee that 353 // The non-alternate protocol job needs to hang in order to guarantee that
348 // the alternate-protocol job will "win". 354 // the alternate-protocol job will "win".
349 AddHangingNonAlternateProtocolSocketData(); 355 AddHangingNonAlternateProtocolSocketData();
350 356
351 CreateSession(); 357 CreateSession();
352 358
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
386 int log_stream_id; 392 int log_stream_id;
387 ASSERT_TRUE(entries[pos].GetIntegerValue("stream_id", &log_stream_id)); 393 ASSERT_TRUE(entries[pos].GetIntegerValue("stream_id", &log_stream_id));
388 EXPECT_EQ(3, log_stream_id); 394 EXPECT_EQ(3, log_stream_id);
389 } 395 }
390 396
391 TEST_P(QuicNetworkTransactionTest, QuicProxy) { 397 TEST_P(QuicNetworkTransactionTest, QuicProxy) {
392 proxy_service_.reset( 398 proxy_service_.reset(
393 ProxyService::CreateFixedFromPacResult("QUIC myproxy:70")); 399 ProxyService::CreateFixedFromPacResult("QUIC myproxy:70"));
394 400
395 MockQuicData mock_quic_data; 401 MockQuicData mock_quic_data;
396 mock_quic_data.AddWrite( 402 mock_quic_data.AddWrite(ConstructRequestHeadersPacket(
397 ConstructRequestHeadersPacket(1, kClientDataStreamId1, true, true, 403 1, kClientDataStreamId1, PACKET_0BYTE_CONNECTION_ID, true, true,
398 GetRequestHeaders("GET", "http", "/"))); 404 GetRequestHeaders("GET", "http", "/")));
399 mock_quic_data.AddRead( 405 mock_quic_data.AddRead(ConstructResponseHeadersPacket(
400 ConstructResponseHeadersPacket(1, kClientDataStreamId1, false, false, 406 1, kClientDataStreamId1, PACKET_0BYTE_CONNECTION_ID, false, false,
401 GetResponseHeaders("200 OK"))); 407 GetResponseHeaders("200 OK")));
402 mock_quic_data.AddRead( 408 mock_quic_data.AddRead(
403 ConstructDataPacket(2, kClientDataStreamId1, false, true, 0, "hello!")); 409 ConstructDataPacket(2, kClientDataStreamId1, false, true, 0, "hello!"));
404 mock_quic_data.AddWrite(ConstructAckPacket(2, 1)); 410 mock_quic_data.AddWrite(ConstructAckPacket(2, 1, PACKET_0BYTE_CONNECTION_ID));
405 mock_quic_data.AddRead(SYNCHRONOUS, 0); // EOF 411 mock_quic_data.AddRead(SYNCHRONOUS, 0); // EOF
406 412
407 mock_quic_data.AddDelayedSocketDataToFactory(&socket_factory_, 1); 413 mock_quic_data.AddDelayedSocketDataToFactory(&socket_factory_, 1);
408 414
409 // There is no need to set up an alternate protocol job, because 415 // There is no need to set up an alternate protocol job, because
410 // no attempt will be made to speak to the proxy over TCP. 416 // no attempt will be made to speak to the proxy over TCP.
411 417
412 CreateSession(); 418 CreateSession();
413 419
414 SendRequestAndExpectQuicResponse("hello!"); 420 SendRequestAndExpectQuicResponse("hello!");
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
462 MockRead("hello world"), 468 MockRead("hello world"),
463 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), 469 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ),
464 MockRead(ASYNC, OK) 470 MockRead(ASYNC, OK)
465 }; 471 };
466 472
467 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), 473 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads),
468 nullptr, 0); 474 nullptr, 0);
469 socket_factory_.AddSocketDataProvider(&http_data); 475 socket_factory_.AddSocketDataProvider(&http_data);
470 476
471 MockQuicData mock_quic_data; 477 MockQuicData mock_quic_data;
472 mock_quic_data.AddWrite( 478 mock_quic_data.AddWrite(ConstructRequestHeadersPacket(
473 ConstructRequestHeadersPacket(1, kClientDataStreamId1, true, true, 479 1, kClientDataStreamId1, PACKET_0BYTE_CONNECTION_ID, true, true,
474 GetRequestHeaders("GET", "http", "/"))); 480 GetRequestHeaders("GET", "http", "/")));
475 mock_quic_data.AddRead( 481 mock_quic_data.AddRead(ConstructResponseHeadersPacket(
476 ConstructResponseHeadersPacket(1, kClientDataStreamId1, false, false, 482 1, kClientDataStreamId1, PACKET_0BYTE_CONNECTION_ID, false, false,
477 GetResponseHeaders("200 OK"))); 483 GetResponseHeaders("200 OK")));
478 mock_quic_data.AddRead( 484 mock_quic_data.AddRead(
479 ConstructDataPacket(2, kClientDataStreamId1, false, true, 0, "hello!")); 485 ConstructDataPacket(2, kClientDataStreamId1, false, true, 0, "hello!"));
480 mock_quic_data.AddWrite(ConstructAckPacket(2, 1)); 486 mock_quic_data.AddWrite(ConstructAckPacket(2, 1, PACKET_0BYTE_CONNECTION_ID));
481 mock_quic_data.AddRead(SYNCHRONOUS, 0); // EOF 487 mock_quic_data.AddRead(SYNCHRONOUS, 0); // EOF
482 488
483 mock_quic_data.AddDelayedSocketDataToFactory(&socket_factory_, 1); 489 mock_quic_data.AddDelayedSocketDataToFactory(&socket_factory_, 1);
484 490
485 // The non-alternate protocol job needs to hang in order to guarantee that 491 // The non-alternate protocol job needs to hang in order to guarantee that
486 // the alternate-protocol job will "win". 492 // the alternate-protocol job will "win".
487 AddHangingNonAlternateProtocolSocketData(); 493 AddHangingNonAlternateProtocolSocketData();
488 494
489 CreateSessionWithNextProtos(); 495 CreateSessionWithNextProtos();
490 496
491 SendRequestAndExpectHttpResponse("hello world"); 497 SendRequestAndExpectHttpResponse("hello world");
492 SendRequestAndExpectQuicResponse("hello!"); 498 SendRequestAndExpectQuicResponse("hello!");
493 } 499 }
494 500
495 TEST_P(QuicNetworkTransactionTest, UseAlternateProtocolProbabilityForQuic) { 501 TEST_P(QuicNetworkTransactionTest, UseAlternateProtocolProbabilityForQuic) {
496 MockRead http_reads[] = { 502 MockRead http_reads[] = {
497 MockRead("HTTP/1.1 200 OK\r\n"), 503 MockRead("HTTP/1.1 200 OK\r\n"),
498 MockRead(kQuicAlternateProtocol50pctHttpHeader), 504 MockRead(kQuicAlternateProtocol50pctHttpHeader),
499 MockRead("hello world"), 505 MockRead("hello world"),
500 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), 506 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ),
501 MockRead(ASYNC, OK) 507 MockRead(ASYNC, OK)
502 }; 508 };
503 509
504 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), 510 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads),
505 nullptr, 0); 511 nullptr, 0);
506 socket_factory_.AddSocketDataProvider(&http_data); 512 socket_factory_.AddSocketDataProvider(&http_data);
507 513
508 MockQuicData mock_quic_data; 514 MockQuicData mock_quic_data;
509 mock_quic_data.AddWrite( 515 mock_quic_data.AddWrite(ConstructRequestHeadersPacket(
510 ConstructRequestHeadersPacket(1, kClientDataStreamId1, true, true, 516 1, kClientDataStreamId1, PACKET_0BYTE_CONNECTION_ID, true, true,
511 GetRequestHeaders("GET", "http", "/"))); 517 GetRequestHeaders("GET", "http", "/")));
512 mock_quic_data.AddRead( 518 mock_quic_data.AddRead(ConstructResponseHeadersPacket(
513 ConstructResponseHeadersPacket(1, kClientDataStreamId1, false, false, 519 1, kClientDataStreamId1, PACKET_0BYTE_CONNECTION_ID, false, false,
514 GetResponseHeaders("200 OK"))); 520 GetResponseHeaders("200 OK")));
515 mock_quic_data.AddRead( 521 mock_quic_data.AddRead(
516 ConstructDataPacket(2, kClientDataStreamId1, false, true, 0, "hello!")); 522 ConstructDataPacket(2, kClientDataStreamId1, false, true, 0, "hello!"));
517 mock_quic_data.AddWrite(ConstructAckPacket(2, 1)); 523 mock_quic_data.AddWrite(ConstructAckPacket(2, 1, PACKET_0BYTE_CONNECTION_ID));
518 mock_quic_data.AddRead(SYNCHRONOUS, 0); // EOF 524 mock_quic_data.AddRead(SYNCHRONOUS, 0); // EOF
519 525
520 mock_quic_data.AddDelayedSocketDataToFactory(&socket_factory_, 1); 526 mock_quic_data.AddDelayedSocketDataToFactory(&socket_factory_, 1);
521 527
522 // The non-alternate protocol job needs to hang in order to guarantee that 528 // The non-alternate protocol job needs to hang in order to guarantee that
523 // the alternate-protocol job will "win". 529 // the alternate-protocol job will "win".
524 AddHangingNonAlternateProtocolSocketData(); 530 AddHangingNonAlternateProtocolSocketData();
525 531
526 params_.alternate_protocol_probability_threshold = .25; 532 params_.alternate_protocol_probability_threshold = .25;
527 CreateSessionWithNextProtos(); 533 CreateSessionWithNextProtos();
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
583 MockRead("hello world"), 589 MockRead("hello world"),
584 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), 590 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ),
585 MockRead(ASYNC, OK) 591 MockRead(ASYNC, OK)
586 }; 592 };
587 593
588 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), 594 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads),
589 nullptr, 0); 595 nullptr, 0);
590 socket_factory_.AddSocketDataProvider(&http_data); 596 socket_factory_.AddSocketDataProvider(&http_data);
591 597
592 MockQuicData mock_quic_data; 598 MockQuicData mock_quic_data;
593 mock_quic_data.AddWrite( 599 mock_quic_data.AddWrite(ConstructRequestHeadersPacket(
594 ConstructRequestHeadersPacket(1, kClientDataStreamId1, true, true, 600 1, kClientDataStreamId1, PACKET_0BYTE_CONNECTION_ID, true, true,
595 GetRequestHeaders("GET", "http", "/"))); 601 GetRequestHeaders("GET", "http", "/")));
596 mock_quic_data.AddRead( 602 mock_quic_data.AddRead(ConstructResponseHeadersPacket(
597 ConstructResponseHeadersPacket(1, kClientDataStreamId1, false, false, 603 1, kClientDataStreamId1, PACKET_0BYTE_CONNECTION_ID, false, false,
598 GetResponseHeaders("200 OK"))); 604 GetResponseHeaders("200 OK")));
599 mock_quic_data.AddRead( 605 mock_quic_data.AddRead(
600 ConstructDataPacket(2, kClientDataStreamId1, false, true, 0, "hello!")); 606 ConstructDataPacket(2, kClientDataStreamId1, false, true, 0, "hello!"));
601 mock_quic_data.AddWrite(ConstructAckPacket(2, 1)); 607 mock_quic_data.AddWrite(ConstructAckPacket(2, 1, PACKET_0BYTE_CONNECTION_ID));
602 mock_quic_data.AddRead(SYNCHRONOUS, 0); // EOF 608 mock_quic_data.AddRead(SYNCHRONOUS, 0); // EOF
603 609
604 mock_quic_data.AddDelayedSocketDataToFactory(&socket_factory_, 1); 610 mock_quic_data.AddDelayedSocketDataToFactory(&socket_factory_, 1);
605 611
606 // The non-alternate protocol job needs to hang in order to guarantee that 612 // The non-alternate protocol job needs to hang in order to guarantee that
607 // the alternate-protocol job will "win". 613 // the alternate-protocol job will "win".
608 AddHangingNonAlternateProtocolSocketData(); 614 AddHangingNonAlternateProtocolSocketData();
609 615
610 CreateSessionWithNextProtos(); 616 CreateSessionWithNextProtos();
611 617
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
666 SendRequestAndExpectHttpResponse("hello world"); 672 SendRequestAndExpectHttpResponse("hello world");
667 673
668 ASSERT_TRUE(http_data2.at_read_eof()); 674 ASSERT_TRUE(http_data2.at_read_eof());
669 ASSERT_TRUE(http_data2.at_write_eof()); 675 ASSERT_TRUE(http_data2.at_write_eof());
670 ASSERT_TRUE(!quic_data.at_read_eof()); 676 ASSERT_TRUE(!quic_data.at_read_eof());
671 ASSERT_TRUE(!quic_data.at_write_eof()); 677 ASSERT_TRUE(!quic_data.at_write_eof());
672 } 678 }
673 679
674 TEST_P(QuicNetworkTransactionTest, ZeroRTTWithHttpRace) { 680 TEST_P(QuicNetworkTransactionTest, ZeroRTTWithHttpRace) {
675 MockQuicData mock_quic_data; 681 MockQuicData mock_quic_data;
676 mock_quic_data.AddWrite( 682 mock_quic_data.AddWrite(ConstructRequestHeadersPacket(
677 ConstructRequestHeadersPacket(1, kClientDataStreamId1, true, true, 683 1, kClientDataStreamId1, PACKET_8BYTE_CONNECTION_ID, true, true,
678 GetRequestHeaders("GET", "http", "/"))); 684 GetRequestHeaders("GET", "http", "/")));
679 mock_quic_data.AddRead( 685 mock_quic_data.AddRead(ConstructResponseHeadersPacket(
680 ConstructResponseHeadersPacket(1, kClientDataStreamId1, false, false, 686 1, kClientDataStreamId1, PACKET_8BYTE_CONNECTION_ID, false, false,
681 GetResponseHeaders("200 OK"))); 687 GetResponseHeaders("200 OK")));
682 mock_quic_data.AddRead( 688 mock_quic_data.AddRead(
683 ConstructDataPacket(2, kClientDataStreamId1, false, true, 0, "hello!")); 689 ConstructDataPacket(2, kClientDataStreamId1, false, true, 0, "hello!"));
684 mock_quic_data.AddWrite(ConstructAckPacket(2, 1)); 690 mock_quic_data.AddWrite(ConstructAckPacket(2, 1, PACKET_8BYTE_CONNECTION_ID));
685 mock_quic_data.AddRead(SYNCHRONOUS, 0); // EOF 691 mock_quic_data.AddRead(SYNCHRONOUS, 0); // EOF
686 692
687 mock_quic_data.AddDelayedSocketDataToFactory(&socket_factory_, 1); 693 mock_quic_data.AddDelayedSocketDataToFactory(&socket_factory_, 1);
688 694
689 // The non-alternate protocol job needs to hang in order to guarantee that 695 // The non-alternate protocol job needs to hang in order to guarantee that
690 // the alternate-protocol job will "win". 696 // the alternate-protocol job will "win".
691 AddHangingNonAlternateProtocolSocketData(); 697 AddHangingNonAlternateProtocolSocketData();
692 698
693 CreateSessionWithNextProtos(); 699 CreateSessionWithNextProtos();
694 AddQuicAlternateProtocolMapping(MockCryptoClientStream::ZERO_RTT); 700 AddQuicAlternateProtocolMapping(MockCryptoClientStream::ZERO_RTT);
695 SendRequestAndExpectQuicResponse("hello!"); 701 SendRequestAndExpectQuicResponse("hello!");
696 } 702 }
697 703
698 TEST_P(QuicNetworkTransactionTest, ZeroRTTWithNoHttpRace) { 704 TEST_P(QuicNetworkTransactionTest, ZeroRTTWithNoHttpRace) {
699 MockQuicData mock_quic_data; 705 MockQuicData mock_quic_data;
700 mock_quic_data.AddWrite( 706 mock_quic_data.AddWrite(ConstructRequestHeadersPacket(
701 ConstructRequestHeadersPacket(1, kClientDataStreamId1, true, true, 707 1, kClientDataStreamId1, PACKET_8BYTE_CONNECTION_ID, true, true,
702 GetRequestHeaders("GET", "http", "/"))); 708 GetRequestHeaders("GET", "http", "/")));
703 mock_quic_data.AddRead( 709 mock_quic_data.AddRead(ConstructResponseHeadersPacket(
704 ConstructResponseHeadersPacket(1, kClientDataStreamId1, false, false, 710 1, kClientDataStreamId1, PACKET_8BYTE_CONNECTION_ID, false, false,
705 GetResponseHeaders("200 OK"))); 711 GetResponseHeaders("200 OK")));
706 mock_quic_data.AddRead( 712 mock_quic_data.AddRead(
707 ConstructDataPacket(2, kClientDataStreamId1, false, true, 0, "hello!")); 713 ConstructDataPacket(2, kClientDataStreamId1, false, true, 0, "hello!"));
708 mock_quic_data.AddWrite(ConstructAckPacket(2, 1)); 714 mock_quic_data.AddWrite(ConstructAckPacket(2, 1, PACKET_8BYTE_CONNECTION_ID));
709 mock_quic_data.AddRead(SYNCHRONOUS, 0); // EOF 715 mock_quic_data.AddRead(SYNCHRONOUS, 0); // EOF
710 mock_quic_data.AddDelayedSocketDataToFactory(&socket_factory_, 1); 716 mock_quic_data.AddDelayedSocketDataToFactory(&socket_factory_, 1);
711 717
712 // In order for a new QUIC session to be established via alternate-protocol 718 // In order for a new QUIC session to be established via alternate-protocol
713 // without racing an HTTP connection, we need the host resolution to happen 719 // without racing an HTTP connection, we need the host resolution to happen
714 // synchronously. 720 // synchronously.
715 host_resolver_.set_synchronous_mode(true); 721 host_resolver_.set_synchronous_mode(true);
716 host_resolver_.rules()->AddIPLiteralRule("www.google.com", "192.168.0.1", ""); 722 host_resolver_.rules()->AddIPLiteralRule("www.google.com", "192.168.0.1", "");
717 HostResolver::RequestInfo info(HostPortPair("www.google.com", 80)); 723 HostResolver::RequestInfo info(HostPortPair("www.google.com", 80));
718 AddressList address; 724 AddressList address;
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
764 nullptr, 770 nullptr,
765 net_log_.bound()); 771 net_log_.bound());
766 772
767 CreateSessionWithNextProtos(); 773 CreateSessionWithNextProtos();
768 AddQuicAlternateProtocolMapping(MockCryptoClientStream::ZERO_RTT); 774 AddQuicAlternateProtocolMapping(MockCryptoClientStream::ZERO_RTT);
769 SendRequestAndExpectHttpResponse("hello world"); 775 SendRequestAndExpectHttpResponse("hello world");
770 } 776 }
771 777
772 TEST_P(QuicNetworkTransactionTest, ZeroRTTWithConfirmationRequired) { 778 TEST_P(QuicNetworkTransactionTest, ZeroRTTWithConfirmationRequired) {
773 MockQuicData mock_quic_data; 779 MockQuicData mock_quic_data;
774 mock_quic_data.AddWrite( 780 mock_quic_data.AddWrite(ConstructRequestHeadersPacket(
775 ConstructRequestHeadersPacket(1, kClientDataStreamId1, true, true, 781 1, kClientDataStreamId1, PACKET_0BYTE_CONNECTION_ID, true, true,
776 GetRequestHeaders("GET", "http", "/"))); 782 GetRequestHeaders("GET", "http", "/")));
777 mock_quic_data.AddRead( 783 mock_quic_data.AddRead(ConstructResponseHeadersPacket(
778 ConstructResponseHeadersPacket(1, kClientDataStreamId1, false, false, 784 1, kClientDataStreamId1, PACKET_0BYTE_CONNECTION_ID, false, false,
779 GetResponseHeaders("200 OK"))); 785 GetResponseHeaders("200 OK")));
780 mock_quic_data.AddRead( 786 mock_quic_data.AddRead(
781 ConstructDataPacket(2, kClientDataStreamId1, false, true, 0, "hello!")); 787 ConstructDataPacket(2, kClientDataStreamId1, false, true, 0, "hello!"));
782 mock_quic_data.AddWrite(ConstructAckPacket(2, 1)); 788 mock_quic_data.AddWrite(ConstructAckPacket(2, 1, PACKET_0BYTE_CONNECTION_ID));
783 mock_quic_data.AddRead(SYNCHRONOUS, 0); // EOF 789 mock_quic_data.AddRead(SYNCHRONOUS, 0); // EOF
784 mock_quic_data.AddDelayedSocketDataToFactory(&socket_factory_, 1); 790 mock_quic_data.AddDelayedSocketDataToFactory(&socket_factory_, 1);
785 791
786 // The non-alternate protocol job needs to hang in order to guarantee that 792 // The non-alternate protocol job needs to hang in order to guarantee that
787 // the alternate-protocol job will "win". 793 // the alternate-protocol job will "win".
788 AddHangingNonAlternateProtocolSocketData(); 794 AddHangingNonAlternateProtocolSocketData();
789 795
790 // In order for a new QUIC session to be established via alternate-protocol 796 // In order for a new QUIC session to be established via alternate-protocol
791 // without racing an HTTP connection, we need the host resolution to happen 797 // without racing an HTTP connection, we need the host resolution to happen
792 // synchronously. Of course, even though QUIC *could* perform a 0-RTT 798 // synchronously. Of course, even though QUIC *could* perform a 0-RTT
(...skipping 199 matching lines...) Expand 10 before | Expand all | Expand 10 after
992 CreateSessionWithNextProtos(); 998 CreateSessionWithNextProtos();
993 AddQuicAlternateProtocolMapping(MockCryptoClientStream::COLD_START); 999 AddQuicAlternateProtocolMapping(MockCryptoClientStream::COLD_START);
994 SendRequestAndExpectHttpResponse("hello from http"); 1000 SendRequestAndExpectHttpResponse("hello from http");
995 1001
996 ExpectBrokenAlternateProtocolMapping(); 1002 ExpectBrokenAlternateProtocolMapping();
997 } 1003 }
998 1004
999 TEST_P(QuicNetworkTransactionTest, ConnectionCloseDuringConnect) { 1005 TEST_P(QuicNetworkTransactionTest, ConnectionCloseDuringConnect) {
1000 MockQuicData mock_quic_data; 1006 MockQuicData mock_quic_data;
1001 mock_quic_data.AddRead(ConstructConnectionClosePacket(1)); 1007 mock_quic_data.AddRead(ConstructConnectionClosePacket(1));
1002 mock_quic_data.AddWrite( 1008 mock_quic_data.AddWrite(ConstructRequestHeadersPacket(
1003 ConstructRequestHeadersPacket(1, kClientDataStreamId1, true, true, 1009 1, kClientDataStreamId1, PACKET_0BYTE_CONNECTION_ID, true, true,
1004 GetRequestHeaders("GET", "http", "/"))); 1010 GetRequestHeaders("GET", "http", "/")));
1005 mock_quic_data.AddWrite(ConstructAckPacket(2, 1)); 1011 mock_quic_data.AddWrite(ConstructAckPacket(2, 1, PACKET_0BYTE_CONNECTION_ID));
1006 mock_quic_data.AddDelayedSocketDataToFactory(&socket_factory_, 0); 1012 mock_quic_data.AddDelayedSocketDataToFactory(&socket_factory_, 0);
1007 1013
1008 // When the QUIC connection fails, we will try the request again over HTTP. 1014 // When the QUIC connection fails, we will try the request again over HTTP.
1009 MockRead http_reads[] = { 1015 MockRead http_reads[] = {
1010 MockRead("HTTP/1.1 200 OK\r\n"), 1016 MockRead("HTTP/1.1 200 OK\r\n"),
1011 MockRead(kQuicAlternateProtocolHttpHeader), 1017 MockRead(kQuicAlternateProtocolHttpHeader),
1012 MockRead("hello world"), 1018 MockRead("hello world"),
1013 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), 1019 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ),
1014 MockRead(ASYNC, OK) 1020 MockRead(ASYNC, OK)
1015 }; 1021 };
(...skipping 16 matching lines...) Expand all
1032 nullptr, 1038 nullptr,
1033 net_log_.bound()); 1039 net_log_.bound());
1034 1040
1035 CreateSessionWithNextProtos(); 1041 CreateSessionWithNextProtos();
1036 AddQuicAlternateProtocolMapping(MockCryptoClientStream::ZERO_RTT); 1042 AddQuicAlternateProtocolMapping(MockCryptoClientStream::ZERO_RTT);
1037 SendRequestAndExpectHttpResponse("hello world"); 1043 SendRequestAndExpectHttpResponse("hello world");
1038 } 1044 }
1039 1045
1040 } // namespace test 1046 } // namespace test
1041 } // namespace net 1047 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/quic_http_stream_test.cc ('k') | net/quic/quic_stream_factory.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698