OLD | NEW |
---|---|
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 Loading... | |
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 Loading... | |
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 Loading... | |
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 Loading... | |
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 Loading... | |
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 Loading... | |
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 Loading... | |
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 Loading... | |
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 Loading... | |
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 |
OLD | NEW |