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 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
80 } | 80 } |
81 | 81 |
82 void AddWrite(scoped_ptr<QuicEncryptedPacket> packet) { | 82 void AddWrite(scoped_ptr<QuicEncryptedPacket> packet) { |
83 writes_.push_back(MockWrite(SYNCHRONOUS, packet->data(), packet->length(), | 83 writes_.push_back(MockWrite(SYNCHRONOUS, packet->data(), packet->length(), |
84 sequence_number_++)); | 84 sequence_number_++)); |
85 packets_.push_back(packet.release()); | 85 packets_.push_back(packet.release()); |
86 } | 86 } |
87 | 87 |
88 void AddDelayedSocketDataToFactory(MockClientSocketFactory* factory, | 88 void AddDelayedSocketDataToFactory(MockClientSocketFactory* factory, |
89 size_t delay) { | 89 size_t delay) { |
90 MockRead* reads = reads_.empty() ? NULL : &reads_[0]; | 90 MockRead* reads = reads_.empty() ? nullptr : &reads_[0]; |
91 MockWrite* writes = writes_.empty() ? NULL : &writes_[0]; | 91 MockWrite* writes = writes_.empty() ? nullptr : &writes_[0]; |
92 socket_data_.reset(new DelayedSocketData( | 92 socket_data_.reset(new DelayedSocketData( |
93 delay, reads, reads_.size(), writes, writes_.size())); | 93 delay, reads, reads_.size(), writes, writes_.size())); |
94 factory->AddSocketDataProvider(socket_data_.get()); | 94 factory->AddSocketDataProvider(socket_data_.get()); |
95 } | 95 } |
96 | 96 |
97 private: | 97 private: |
98 std::vector<QuicEncryptedPacket*> packets_; | 98 std::vector<QuicEncryptedPacket*> packets_; |
99 std::vector<MockWrite> writes_; | 99 std::vector<MockWrite> writes_; |
100 std::vector<MockRead> reads_; | 100 std::vector<MockRead> reads_; |
101 size_t sequence_number_; | 101 size_t sequence_number_; |
102 scoped_ptr<SocketDataProvider> socket_data_; | 102 scoped_ptr<SocketDataProvider> socket_data_; |
103 }; | 103 }; |
104 | 104 |
105 class QuicNetworkTransactionTest | 105 class QuicNetworkTransactionTest |
106 : public PlatformTest, | 106 : public PlatformTest, |
107 public ::testing::WithParamInterface<QuicVersion> { | 107 public ::testing::WithParamInterface<QuicVersion> { |
108 protected: | 108 protected: |
109 QuicNetworkTransactionTest() | 109 QuicNetworkTransactionTest() |
110 : clock_(new MockClock), | 110 : clock_(new MockClock), |
111 maker_(GetParam(), 0, clock_), | 111 maker_(GetParam(), 0, clock_), |
112 ssl_config_service_(new SSLConfigServiceDefaults), | 112 ssl_config_service_(new SSLConfigServiceDefaults), |
113 proxy_service_(ProxyService::CreateDirect()), | 113 proxy_service_(ProxyService::CreateDirect()), |
114 auth_handler_factory_( | 114 auth_handler_factory_( |
115 HttpAuthHandlerFactory::CreateDefault(&host_resolver_)), | 115 HttpAuthHandlerFactory::CreateDefault(&host_resolver_)), |
116 random_generator_(0), | 116 random_generator_(0), |
117 hanging_data_(NULL, 0, NULL, 0) { | 117 hanging_data_(nullptr, 0, nullptr, 0) { |
118 request_.method = "GET"; | 118 request_.method = "GET"; |
119 request_.url = GURL("http://www.google.com/"); | 119 request_.url = GURL("http://www.google.com/"); |
120 request_.load_flags = 0; | 120 request_.load_flags = 0; |
121 clock_->AdvanceTime(QuicTime::Delta::FromMilliseconds(20)); | 121 clock_->AdvanceTime(QuicTime::Delta::FromMilliseconds(20)); |
122 } | 122 } |
123 | 123 |
124 virtual void SetUp() { | 124 virtual void SetUp() { |
125 NetworkChangeNotifier::NotifyObserversOfIPAddressChangeForTests(); | 125 NetworkChangeNotifier::NotifyObserversOfIPAddressChangeForTests(); |
126 base::MessageLoop::current()->RunUntilIdle(); | 126 base::MessageLoop::current()->RunUntilIdle(); |
127 } | 127 } |
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
216 params_.use_alternate_protocols = true; | 216 params_.use_alternate_protocols = true; |
217 params_.next_protos = NextProtosSpdy3(); | 217 params_.next_protos = NextProtosSpdy3(); |
218 } | 218 } |
219 | 219 |
220 session_ = new HttpNetworkSession(params_); | 220 session_ = new HttpNetworkSession(params_); |
221 session_->quic_stream_factory()->set_require_confirmation(false); | 221 session_->quic_stream_factory()->set_require_confirmation(false); |
222 } | 222 } |
223 | 223 |
224 void CheckWasQuicResponse(const scoped_ptr<HttpNetworkTransaction>& trans) { | 224 void CheckWasQuicResponse(const scoped_ptr<HttpNetworkTransaction>& trans) { |
225 const HttpResponseInfo* response = trans->GetResponseInfo(); | 225 const HttpResponseInfo* response = trans->GetResponseInfo(); |
226 ASSERT_TRUE(response != NULL); | 226 ASSERT_TRUE(response != nullptr); |
227 ASSERT_TRUE(response->headers.get() != NULL); | 227 ASSERT_TRUE(response->headers.get() != nullptr); |
228 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); | 228 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); |
229 EXPECT_TRUE(response->was_fetched_via_spdy); | 229 EXPECT_TRUE(response->was_fetched_via_spdy); |
230 EXPECT_TRUE(response->was_npn_negotiated); | 230 EXPECT_TRUE(response->was_npn_negotiated); |
231 EXPECT_EQ(HttpResponseInfo::CONNECTION_INFO_QUIC1_SPDY3, | 231 EXPECT_EQ(HttpResponseInfo::CONNECTION_INFO_QUIC1_SPDY3, |
232 response->connection_info); | 232 response->connection_info); |
233 } | 233 } |
234 | 234 |
235 void CheckWasHttpResponse(const scoped_ptr<HttpNetworkTransaction>& trans) { | 235 void CheckWasHttpResponse(const scoped_ptr<HttpNetworkTransaction>& trans) { |
236 const HttpResponseInfo* response = trans->GetResponseInfo(); | 236 const HttpResponseInfo* response = trans->GetResponseInfo(); |
237 ASSERT_TRUE(response != NULL); | 237 ASSERT_TRUE(response != nullptr); |
238 ASSERT_TRUE(response->headers.get() != NULL); | 238 ASSERT_TRUE(response->headers.get() != nullptr); |
239 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); | 239 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); |
240 EXPECT_FALSE(response->was_fetched_via_spdy); | 240 EXPECT_FALSE(response->was_fetched_via_spdy); |
241 EXPECT_FALSE(response->was_npn_negotiated); | 241 EXPECT_FALSE(response->was_npn_negotiated); |
242 EXPECT_EQ(HttpResponseInfo::CONNECTION_INFO_HTTP1, | 242 EXPECT_EQ(HttpResponseInfo::CONNECTION_INFO_HTTP1, |
243 response->connection_info); | 243 response->connection_info); |
244 } | 244 } |
245 | 245 |
246 void CheckResponseData(HttpNetworkTransaction* trans, | 246 void CheckResponseData(HttpNetworkTransaction* trans, |
247 const std::string& expected) { | 247 const std::string& expected) { |
248 std::string response_data; | 248 std::string response_data; |
(...skipping 189 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
438 params_.origin_to_force_quic_on = | 438 params_.origin_to_force_quic_on = |
439 HostPortPair::FromString("www.google.com:443"); | 439 HostPortPair::FromString("www.google.com:443"); |
440 | 440 |
441 MockRead http_reads[] = { | 441 MockRead http_reads[] = { |
442 MockRead("HTTP/1.1 200 OK\r\n\r\n"), | 442 MockRead("HTTP/1.1 200 OK\r\n\r\n"), |
443 MockRead("hello world"), | 443 MockRead("hello world"), |
444 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), | 444 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), |
445 MockRead(ASYNC, OK) | 445 MockRead(ASYNC, OK) |
446 }; | 446 }; |
447 | 447 |
448 StaticSocketDataProvider data(http_reads, arraysize(http_reads), NULL, 0); | 448 StaticSocketDataProvider data(http_reads, arraysize(http_reads), nullptr, 0); |
449 socket_factory_.AddSocketDataProvider(&data); | 449 socket_factory_.AddSocketDataProvider(&data); |
450 SSLSocketDataProvider ssl(ASYNC, OK); | 450 SSLSocketDataProvider ssl(ASYNC, OK); |
451 socket_factory_.AddSSLSocketDataProvider(&ssl); | 451 socket_factory_.AddSSLSocketDataProvider(&ssl); |
452 | 452 |
453 CreateSession(); | 453 CreateSession(); |
454 | 454 |
455 SendRequestAndExpectHttpResponse("hello world"); | 455 SendRequestAndExpectHttpResponse("hello world"); |
456 } | 456 } |
457 | 457 |
458 TEST_P(QuicNetworkTransactionTest, UseAlternateProtocolForQuic) { | 458 TEST_P(QuicNetworkTransactionTest, UseAlternateProtocolForQuic) { |
459 MockRead http_reads[] = { | 459 MockRead http_reads[] = { |
460 MockRead("HTTP/1.1 200 OK\r\n"), | 460 MockRead("HTTP/1.1 200 OK\r\n"), |
461 MockRead(kQuicAlternateProtocolHttpHeader), | 461 MockRead(kQuicAlternateProtocolHttpHeader), |
462 MockRead("hello world"), | 462 MockRead("hello world"), |
463 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), | 463 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), |
464 MockRead(ASYNC, OK) | 464 MockRead(ASYNC, OK) |
465 }; | 465 }; |
466 | 466 |
467 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), | 467 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), |
468 NULL, 0); | 468 nullptr, 0); |
469 socket_factory_.AddSocketDataProvider(&http_data); | 469 socket_factory_.AddSocketDataProvider(&http_data); |
470 | 470 |
471 MockQuicData mock_quic_data; | 471 MockQuicData mock_quic_data; |
472 mock_quic_data.AddWrite( | 472 mock_quic_data.AddWrite( |
473 ConstructRequestHeadersPacket(1, kClientDataStreamId1, true, true, | 473 ConstructRequestHeadersPacket(1, kClientDataStreamId1, true, true, |
474 GetRequestHeaders("GET", "http", "/"))); | 474 GetRequestHeaders("GET", "http", "/"))); |
475 mock_quic_data.AddRead( | 475 mock_quic_data.AddRead( |
476 ConstructResponseHeadersPacket(1, kClientDataStreamId1, false, false, | 476 ConstructResponseHeadersPacket(1, kClientDataStreamId1, false, false, |
477 GetResponseHeaders("200 OK"))); | 477 GetResponseHeaders("200 OK"))); |
478 mock_quic_data.AddRead( | 478 mock_quic_data.AddRead( |
(...skipping 16 matching lines...) Expand all Loading... |
495 TEST_P(QuicNetworkTransactionTest, UseAlternateProtocolProbabilityForQuic) { | 495 TEST_P(QuicNetworkTransactionTest, UseAlternateProtocolProbabilityForQuic) { |
496 MockRead http_reads[] = { | 496 MockRead http_reads[] = { |
497 MockRead("HTTP/1.1 200 OK\r\n"), | 497 MockRead("HTTP/1.1 200 OK\r\n"), |
498 MockRead(kQuicAlternateProtocol50pctHttpHeader), | 498 MockRead(kQuicAlternateProtocol50pctHttpHeader), |
499 MockRead("hello world"), | 499 MockRead("hello world"), |
500 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), | 500 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), |
501 MockRead(ASYNC, OK) | 501 MockRead(ASYNC, OK) |
502 }; | 502 }; |
503 | 503 |
504 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), | 504 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), |
505 NULL, 0); | 505 nullptr, 0); |
506 socket_factory_.AddSocketDataProvider(&http_data); | 506 socket_factory_.AddSocketDataProvider(&http_data); |
507 | 507 |
508 MockQuicData mock_quic_data; | 508 MockQuicData mock_quic_data; |
509 mock_quic_data.AddWrite( | 509 mock_quic_data.AddWrite( |
510 ConstructRequestHeadersPacket(1, kClientDataStreamId1, true, true, | 510 ConstructRequestHeadersPacket(1, kClientDataStreamId1, true, true, |
511 GetRequestHeaders("GET", "http", "/"))); | 511 GetRequestHeaders("GET", "http", "/"))); |
512 mock_quic_data.AddRead( | 512 mock_quic_data.AddRead( |
513 ConstructResponseHeadersPacket(1, kClientDataStreamId1, false, false, | 513 ConstructResponseHeadersPacket(1, kClientDataStreamId1, false, false, |
514 GetResponseHeaders("200 OK"))); | 514 GetResponseHeaders("200 OK"))); |
515 mock_quic_data.AddRead( | 515 mock_quic_data.AddRead( |
(...skipping 17 matching lines...) Expand all Loading... |
533 TEST_P(QuicNetworkTransactionTest, DontUseAlternateProtocolProbabilityForQuic) { | 533 TEST_P(QuicNetworkTransactionTest, DontUseAlternateProtocolProbabilityForQuic) { |
534 MockRead http_reads[] = { | 534 MockRead http_reads[] = { |
535 MockRead("HTTP/1.1 200 OK\r\n"), | 535 MockRead("HTTP/1.1 200 OK\r\n"), |
536 MockRead(kQuicAlternateProtocol50pctHttpHeader), | 536 MockRead(kQuicAlternateProtocol50pctHttpHeader), |
537 MockRead("hello world"), | 537 MockRead("hello world"), |
538 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), | 538 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), |
539 MockRead(ASYNC, OK) | 539 MockRead(ASYNC, OK) |
540 }; | 540 }; |
541 | 541 |
542 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), | 542 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), |
543 NULL, 0); | 543 nullptr, 0); |
544 socket_factory_.AddSocketDataProvider(&http_data); | 544 socket_factory_.AddSocketDataProvider(&http_data); |
545 socket_factory_.AddSocketDataProvider(&http_data); | 545 socket_factory_.AddSocketDataProvider(&http_data); |
546 | 546 |
547 params_.alternate_protocol_probability_threshold = .75; | 547 params_.alternate_protocol_probability_threshold = .75; |
548 CreateSessionWithNextProtos(); | 548 CreateSessionWithNextProtos(); |
549 | 549 |
550 SendRequestAndExpectHttpResponse("hello world"); | 550 SendRequestAndExpectHttpResponse("hello world"); |
551 SendRequestAndExpectHttpResponse("hello world"); | 551 SendRequestAndExpectHttpResponse("hello world"); |
552 } | 552 } |
553 | 553 |
554 TEST_P(QuicNetworkTransactionTest, | 554 TEST_P(QuicNetworkTransactionTest, |
555 DontUseAlternateProtocolWithBadProbabilityForQuic) { | 555 DontUseAlternateProtocolWithBadProbabilityForQuic) { |
556 MockRead http_reads[] = { | 556 MockRead http_reads[] = { |
557 MockRead("HTTP/1.1 200 OK\r\n"), | 557 MockRead("HTTP/1.1 200 OK\r\n"), |
558 MockRead("Alternate-Protocol: 443:quic,p=2\r\n\r\n"), | 558 MockRead("Alternate-Protocol: 443:quic,p=2\r\n\r\n"), |
559 MockRead("hello world"), | 559 MockRead("hello world"), |
560 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), | 560 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), |
561 MockRead(ASYNC, OK) | 561 MockRead(ASYNC, OK) |
562 }; | 562 }; |
563 | 563 |
564 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), | 564 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), |
565 NULL, 0); | 565 nullptr, 0); |
566 socket_factory_.AddSocketDataProvider(&http_data); | 566 socket_factory_.AddSocketDataProvider(&http_data); |
567 socket_factory_.AddSocketDataProvider(&http_data); | 567 socket_factory_.AddSocketDataProvider(&http_data); |
568 | 568 |
569 params_.alternate_protocol_probability_threshold = .75; | 569 params_.alternate_protocol_probability_threshold = .75; |
570 CreateSessionWithNextProtos(); | 570 CreateSessionWithNextProtos(); |
571 | 571 |
572 SendRequestAndExpectHttpResponse("hello world"); | 572 SendRequestAndExpectHttpResponse("hello world"); |
573 SendRequestAndExpectHttpResponse("hello world"); | 573 SendRequestAndExpectHttpResponse("hello world"); |
574 } | 574 } |
575 | 575 |
576 TEST_P(QuicNetworkTransactionTest, UseAlternateProtocolForQuicForHttps) { | 576 TEST_P(QuicNetworkTransactionTest, UseAlternateProtocolForQuicForHttps) { |
577 params_.origin_to_force_quic_on = | 577 params_.origin_to_force_quic_on = |
578 HostPortPair::FromString("www.google.com:443"); | 578 HostPortPair::FromString("www.google.com:443"); |
579 | 579 |
580 MockRead http_reads[] = { | 580 MockRead http_reads[] = { |
581 MockRead("HTTP/1.1 200 OK\r\n"), | 581 MockRead("HTTP/1.1 200 OK\r\n"), |
582 MockRead(kQuicAlternateProtocolHttpsHeader), | 582 MockRead(kQuicAlternateProtocolHttpsHeader), |
583 MockRead("hello world"), | 583 MockRead("hello world"), |
584 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), | 584 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), |
585 MockRead(ASYNC, OK) | 585 MockRead(ASYNC, OK) |
586 }; | 586 }; |
587 | 587 |
588 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), | 588 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), |
589 NULL, 0); | 589 nullptr, 0); |
590 socket_factory_.AddSocketDataProvider(&http_data); | 590 socket_factory_.AddSocketDataProvider(&http_data); |
591 | 591 |
592 MockQuicData mock_quic_data; | 592 MockQuicData mock_quic_data; |
593 mock_quic_data.AddWrite( | 593 mock_quic_data.AddWrite( |
594 ConstructRequestHeadersPacket(1, kClientDataStreamId1, true, true, | 594 ConstructRequestHeadersPacket(1, kClientDataStreamId1, true, true, |
595 GetRequestHeaders("GET", "http", "/"))); | 595 GetRequestHeaders("GET", "http", "/"))); |
596 mock_quic_data.AddRead( | 596 mock_quic_data.AddRead( |
597 ConstructResponseHeadersPacket(1, kClientDataStreamId1, false, false, | 597 ConstructResponseHeadersPacket(1, kClientDataStreamId1, false, false, |
598 GetResponseHeaders("200 OK"))); | 598 GetResponseHeaders("200 OK"))); |
599 mock_quic_data.AddRead( | 599 mock_quic_data.AddRead( |
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
713 // without racing an HTTP connection, we need the host resolution to happen | 713 // without racing an HTTP connection, we need the host resolution to happen |
714 // synchronously. | 714 // synchronously. |
715 host_resolver_.set_synchronous_mode(true); | 715 host_resolver_.set_synchronous_mode(true); |
716 host_resolver_.rules()->AddIPLiteralRule("www.google.com", "192.168.0.1", ""); | 716 host_resolver_.rules()->AddIPLiteralRule("www.google.com", "192.168.0.1", ""); |
717 HostResolver::RequestInfo info(HostPortPair("www.google.com", 80)); | 717 HostResolver::RequestInfo info(HostPortPair("www.google.com", 80)); |
718 AddressList address; | 718 AddressList address; |
719 host_resolver_.Resolve(info, | 719 host_resolver_.Resolve(info, |
720 DEFAULT_PRIORITY, | 720 DEFAULT_PRIORITY, |
721 &address, | 721 &address, |
722 CompletionCallback(), | 722 CompletionCallback(), |
723 NULL, | 723 nullptr, |
724 net_log_.bound()); | 724 net_log_.bound()); |
725 | 725 |
726 CreateSessionWithNextProtos(); | 726 CreateSessionWithNextProtos(); |
727 AddQuicAlternateProtocolMapping(MockCryptoClientStream::ZERO_RTT); | 727 AddQuicAlternateProtocolMapping(MockCryptoClientStream::ZERO_RTT); |
728 SendRequestAndExpectQuicResponse("hello!"); | 728 SendRequestAndExpectQuicResponse("hello!"); |
729 } | 729 } |
730 | 730 |
731 TEST_P(QuicNetworkTransactionTest, ZeroRTTWithProxy) { | 731 TEST_P(QuicNetworkTransactionTest, ZeroRTTWithProxy) { |
732 proxy_service_.reset( | 732 proxy_service_.reset( |
733 ProxyService::CreateFixedFromPacResult("PROXY myproxy:70")); | 733 ProxyService::CreateFixedFromPacResult("PROXY myproxy:70")); |
(...skipping 20 matching lines...) Expand all Loading... |
754 // without racing an HTTP connection, we need the host resolution to happen | 754 // without racing an HTTP connection, we need the host resolution to happen |
755 // synchronously. | 755 // synchronously. |
756 host_resolver_.set_synchronous_mode(true); | 756 host_resolver_.set_synchronous_mode(true); |
757 host_resolver_.rules()->AddIPLiteralRule("www.google.com", "192.168.0.1", ""); | 757 host_resolver_.rules()->AddIPLiteralRule("www.google.com", "192.168.0.1", ""); |
758 HostResolver::RequestInfo info(HostPortPair("www.google.com", 80)); | 758 HostResolver::RequestInfo info(HostPortPair("www.google.com", 80)); |
759 AddressList address; | 759 AddressList address; |
760 host_resolver_.Resolve(info, | 760 host_resolver_.Resolve(info, |
761 DEFAULT_PRIORITY, | 761 DEFAULT_PRIORITY, |
762 &address, | 762 &address, |
763 CompletionCallback(), | 763 CompletionCallback(), |
764 NULL, | 764 nullptr, |
765 net_log_.bound()); | 765 net_log_.bound()); |
766 | 766 |
767 CreateSessionWithNextProtos(); | 767 CreateSessionWithNextProtos(); |
768 AddQuicAlternateProtocolMapping(MockCryptoClientStream::ZERO_RTT); | 768 AddQuicAlternateProtocolMapping(MockCryptoClientStream::ZERO_RTT); |
769 SendRequestAndExpectHttpResponse("hello world"); | 769 SendRequestAndExpectHttpResponse("hello world"); |
770 } | 770 } |
771 | 771 |
772 TEST_P(QuicNetworkTransactionTest, ZeroRTTWithConfirmationRequired) { | 772 TEST_P(QuicNetworkTransactionTest, ZeroRTTWithConfirmationRequired) { |
773 MockQuicData mock_quic_data; | 773 MockQuicData mock_quic_data; |
774 mock_quic_data.AddWrite( | 774 mock_quic_data.AddWrite( |
(...skipping 15 matching lines...) Expand all Loading... |
790 // In order for a new QUIC session to be established via alternate-protocol | 790 // 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 | 791 // without racing an HTTP connection, we need the host resolution to happen |
792 // synchronously. Of course, even though QUIC *could* perform a 0-RTT | 792 // synchronously. Of course, even though QUIC *could* perform a 0-RTT |
793 // connection to the the server, in this test we require confirmation | 793 // connection to the the server, in this test we require confirmation |
794 // before encrypting so the HTTP job will still start. | 794 // before encrypting so the HTTP job will still start. |
795 host_resolver_.set_synchronous_mode(true); | 795 host_resolver_.set_synchronous_mode(true); |
796 host_resolver_.rules()->AddIPLiteralRule("www.google.com", "192.168.0.1", ""); | 796 host_resolver_.rules()->AddIPLiteralRule("www.google.com", "192.168.0.1", ""); |
797 HostResolver::RequestInfo info(HostPortPair("www.google.com", 80)); | 797 HostResolver::RequestInfo info(HostPortPair("www.google.com", 80)); |
798 AddressList address; | 798 AddressList address; |
799 host_resolver_.Resolve(info, DEFAULT_PRIORITY, &address, | 799 host_resolver_.Resolve(info, DEFAULT_PRIORITY, &address, |
800 CompletionCallback(), NULL, net_log_.bound()); | 800 CompletionCallback(), nullptr, net_log_.bound()); |
801 | 801 |
802 CreateSessionWithNextProtos(); | 802 CreateSessionWithNextProtos(); |
803 session_->quic_stream_factory()->set_require_confirmation(true); | 803 session_->quic_stream_factory()->set_require_confirmation(true); |
804 AddQuicAlternateProtocolMapping(MockCryptoClientStream::ZERO_RTT); | 804 AddQuicAlternateProtocolMapping(MockCryptoClientStream::ZERO_RTT); |
805 | 805 |
806 scoped_ptr<HttpNetworkTransaction> trans( | 806 scoped_ptr<HttpNetworkTransaction> trans( |
807 new HttpNetworkTransaction(DEFAULT_PRIORITY, session_.get())); | 807 new HttpNetworkTransaction(DEFAULT_PRIORITY, session_.get())); |
808 TestCompletionCallback callback; | 808 TestCompletionCallback callback; |
809 int rv = trans->Start(&request_, callback.callback(), net_log_.bound()); | 809 int rv = trans->Start(&request_, callback.callback(), net_log_.bound()); |
810 EXPECT_EQ(ERR_IO_PENDING, rv); | 810 EXPECT_EQ(ERR_IO_PENDING, rv); |
811 | 811 |
812 crypto_client_stream_factory_.last_stream()->SendOnCryptoHandshakeEvent( | 812 crypto_client_stream_factory_.last_stream()->SendOnCryptoHandshakeEvent( |
813 QuicSession::HANDSHAKE_CONFIRMED); | 813 QuicSession::HANDSHAKE_CONFIRMED); |
814 EXPECT_EQ(OK, callback.WaitForResult()); | 814 EXPECT_EQ(OK, callback.WaitForResult()); |
815 } | 815 } |
816 | 816 |
817 TEST_P(QuicNetworkTransactionTest, BrokenAlternateProtocol) { | 817 TEST_P(QuicNetworkTransactionTest, BrokenAlternateProtocol) { |
818 // Alternate-protocol job | 818 // Alternate-protocol job |
819 scoped_ptr<QuicEncryptedPacket> close(ConstructConnectionClosePacket(1)); | 819 scoped_ptr<QuicEncryptedPacket> close(ConstructConnectionClosePacket(1)); |
820 MockRead quic_reads[] = { | 820 MockRead quic_reads[] = { |
821 MockRead(ASYNC, close->data(), close->length()), | 821 MockRead(ASYNC, close->data(), close->length()), |
822 MockRead(ASYNC, OK), // EOF | 822 MockRead(ASYNC, OK), // EOF |
823 }; | 823 }; |
824 StaticSocketDataProvider quic_data(quic_reads, arraysize(quic_reads), | 824 StaticSocketDataProvider quic_data(quic_reads, arraysize(quic_reads), |
825 NULL, 0); | 825 nullptr, 0); |
826 socket_factory_.AddSocketDataProvider(&quic_data); | 826 socket_factory_.AddSocketDataProvider(&quic_data); |
827 | 827 |
828 // Main job which will succeed even though the alternate job fails. | 828 // Main job which will succeed even though the alternate job fails. |
829 MockRead http_reads[] = { | 829 MockRead http_reads[] = { |
830 MockRead("HTTP/1.1 200 OK\r\n\r\n"), | 830 MockRead("HTTP/1.1 200 OK\r\n\r\n"), |
831 MockRead("hello from http"), | 831 MockRead("hello from http"), |
832 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), | 832 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), |
833 MockRead(ASYNC, OK) | 833 MockRead(ASYNC, OK) |
834 }; | 834 }; |
835 | 835 |
836 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), | 836 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), |
837 NULL, 0); | 837 nullptr, 0); |
838 socket_factory_.AddSocketDataProvider(&http_data); | 838 socket_factory_.AddSocketDataProvider(&http_data); |
839 | 839 |
840 CreateSessionWithNextProtos(); | 840 CreateSessionWithNextProtos(); |
841 AddQuicAlternateProtocolMapping(MockCryptoClientStream::COLD_START); | 841 AddQuicAlternateProtocolMapping(MockCryptoClientStream::COLD_START); |
842 SendRequestAndExpectHttpResponse("hello from http"); | 842 SendRequestAndExpectHttpResponse("hello from http"); |
843 ExpectBrokenAlternateProtocolMapping(); | 843 ExpectBrokenAlternateProtocolMapping(); |
844 } | 844 } |
845 | 845 |
846 TEST_P(QuicNetworkTransactionTest, BrokenAlternateProtocolReadError) { | 846 TEST_P(QuicNetworkTransactionTest, BrokenAlternateProtocolReadError) { |
847 // Alternate-protocol job | 847 // Alternate-protocol job |
848 MockRead quic_reads[] = { | 848 MockRead quic_reads[] = { |
849 MockRead(ASYNC, ERR_SOCKET_NOT_CONNECTED), | 849 MockRead(ASYNC, ERR_SOCKET_NOT_CONNECTED), |
850 }; | 850 }; |
851 StaticSocketDataProvider quic_data(quic_reads, arraysize(quic_reads), | 851 StaticSocketDataProvider quic_data(quic_reads, arraysize(quic_reads), |
852 NULL, 0); | 852 nullptr, 0); |
853 socket_factory_.AddSocketDataProvider(&quic_data); | 853 socket_factory_.AddSocketDataProvider(&quic_data); |
854 | 854 |
855 // Main job which will succeed even though the alternate job fails. | 855 // Main job which will succeed even though the alternate job fails. |
856 MockRead http_reads[] = { | 856 MockRead http_reads[] = { |
857 MockRead("HTTP/1.1 200 OK\r\n\r\n"), | 857 MockRead("HTTP/1.1 200 OK\r\n\r\n"), |
858 MockRead("hello from http"), | 858 MockRead("hello from http"), |
859 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), | 859 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), |
860 MockRead(ASYNC, OK) | 860 MockRead(ASYNC, OK) |
861 }; | 861 }; |
862 | 862 |
863 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), | 863 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), |
864 NULL, 0); | 864 nullptr, 0); |
865 socket_factory_.AddSocketDataProvider(&http_data); | 865 socket_factory_.AddSocketDataProvider(&http_data); |
866 | 866 |
867 CreateSessionWithNextProtos(); | 867 CreateSessionWithNextProtos(); |
868 | 868 |
869 AddQuicAlternateProtocolMapping(MockCryptoClientStream::COLD_START); | 869 AddQuicAlternateProtocolMapping(MockCryptoClientStream::COLD_START); |
870 SendRequestAndExpectHttpResponse("hello from http"); | 870 SendRequestAndExpectHttpResponse("hello from http"); |
871 ExpectBrokenAlternateProtocolMapping(); | 871 ExpectBrokenAlternateProtocolMapping(); |
872 } | 872 } |
873 | 873 |
874 TEST_P(QuicNetworkTransactionTest, NoBrokenAlternateProtocolIfTcpFails) { | 874 TEST_P(QuicNetworkTransactionTest, NoBrokenAlternateProtocolIfTcpFails) { |
875 // Alternate-protocol job will fail when the session attempts to read. | 875 // Alternate-protocol job will fail when the session attempts to read. |
876 MockRead quic_reads[] = { | 876 MockRead quic_reads[] = { |
877 MockRead(ASYNC, ERR_SOCKET_NOT_CONNECTED), | 877 MockRead(ASYNC, ERR_SOCKET_NOT_CONNECTED), |
878 }; | 878 }; |
879 StaticSocketDataProvider quic_data(quic_reads, arraysize(quic_reads), | 879 StaticSocketDataProvider quic_data(quic_reads, arraysize(quic_reads), |
880 NULL, 0); | 880 nullptr, 0); |
881 socket_factory_.AddSocketDataProvider(&quic_data); | 881 socket_factory_.AddSocketDataProvider(&quic_data); |
882 | 882 |
883 // Main job will also fail. | 883 // Main job will also fail. |
884 MockRead http_reads[] = { | 884 MockRead http_reads[] = { |
885 MockRead(ASYNC, ERR_SOCKET_NOT_CONNECTED), | 885 MockRead(ASYNC, ERR_SOCKET_NOT_CONNECTED), |
886 }; | 886 }; |
887 | 887 |
888 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), | 888 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), |
889 NULL, 0); | 889 nullptr, 0); |
890 http_data.set_connect_data(MockConnect(ASYNC, ERR_SOCKET_NOT_CONNECTED)); | 890 http_data.set_connect_data(MockConnect(ASYNC, ERR_SOCKET_NOT_CONNECTED)); |
891 socket_factory_.AddSocketDataProvider(&http_data); | 891 socket_factory_.AddSocketDataProvider(&http_data); |
892 | 892 |
893 CreateSessionWithNextProtos(); | 893 CreateSessionWithNextProtos(); |
894 | 894 |
895 AddQuicAlternateProtocolMapping(MockCryptoClientStream::COLD_START); | 895 AddQuicAlternateProtocolMapping(MockCryptoClientStream::COLD_START); |
896 scoped_ptr<HttpNetworkTransaction> trans( | 896 scoped_ptr<HttpNetworkTransaction> trans( |
897 new HttpNetworkTransaction(DEFAULT_PRIORITY, session_.get())); | 897 new HttpNetworkTransaction(DEFAULT_PRIORITY, session_.get())); |
898 TestCompletionCallback callback; | 898 TestCompletionCallback callback; |
899 int rv = trans->Start(&request_, callback.callback(), net_log_.bound()); | 899 int rv = trans->Start(&request_, callback.callback(), net_log_.bound()); |
900 EXPECT_EQ(ERR_IO_PENDING, rv); | 900 EXPECT_EQ(ERR_IO_PENDING, rv); |
901 EXPECT_EQ(ERR_SOCKET_NOT_CONNECTED, callback.WaitForResult()); | 901 EXPECT_EQ(ERR_SOCKET_NOT_CONNECTED, callback.WaitForResult()); |
902 ExpectQuicAlternateProtocolMapping(); | 902 ExpectQuicAlternateProtocolMapping(); |
903 } | 903 } |
904 | 904 |
905 TEST_P(QuicNetworkTransactionTest, FailedZeroRttBrokenAlternateProtocol) { | 905 TEST_P(QuicNetworkTransactionTest, FailedZeroRttBrokenAlternateProtocol) { |
906 // Alternate-protocol job | 906 // Alternate-protocol job |
907 MockRead quic_reads[] = { | 907 MockRead quic_reads[] = { |
908 MockRead(ASYNC, ERR_SOCKET_NOT_CONNECTED), | 908 MockRead(ASYNC, ERR_SOCKET_NOT_CONNECTED), |
909 }; | 909 }; |
910 StaticSocketDataProvider quic_data(quic_reads, arraysize(quic_reads), | 910 StaticSocketDataProvider quic_data(quic_reads, arraysize(quic_reads), |
911 NULL, 0); | 911 nullptr, 0); |
912 socket_factory_.AddSocketDataProvider(&quic_data); | 912 socket_factory_.AddSocketDataProvider(&quic_data); |
913 | 913 |
914 AddHangingNonAlternateProtocolSocketData(); | 914 AddHangingNonAlternateProtocolSocketData(); |
915 | 915 |
916 // Second Alternate-protocol job which will race with the TCP job. | 916 // Second Alternate-protocol job which will race with the TCP job. |
917 StaticSocketDataProvider quic_data2(quic_reads, arraysize(quic_reads), | 917 StaticSocketDataProvider quic_data2(quic_reads, arraysize(quic_reads), |
918 NULL, 0); | 918 nullptr, 0); |
919 socket_factory_.AddSocketDataProvider(&quic_data2); | 919 socket_factory_.AddSocketDataProvider(&quic_data2); |
920 | 920 |
921 // Final job that will proceed when the QUIC job fails. | 921 // Final job that will proceed when the QUIC job fails. |
922 MockRead http_reads[] = { | 922 MockRead http_reads[] = { |
923 MockRead("HTTP/1.1 200 OK\r\n\r\n"), | 923 MockRead("HTTP/1.1 200 OK\r\n\r\n"), |
924 MockRead("hello from http"), | 924 MockRead("hello from http"), |
925 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), | 925 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), |
926 MockRead(ASYNC, OK) | 926 MockRead(ASYNC, OK) |
927 }; | 927 }; |
928 | 928 |
929 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), | 929 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), |
930 NULL, 0); | 930 nullptr, 0); |
931 socket_factory_.AddSocketDataProvider(&http_data); | 931 socket_factory_.AddSocketDataProvider(&http_data); |
932 | 932 |
933 CreateSessionWithNextProtos(); | 933 CreateSessionWithNextProtos(); |
934 | 934 |
935 AddQuicAlternateProtocolMapping(MockCryptoClientStream::ZERO_RTT); | 935 AddQuicAlternateProtocolMapping(MockCryptoClientStream::ZERO_RTT); |
936 | 936 |
937 SendRequestAndExpectHttpResponse("hello from http"); | 937 SendRequestAndExpectHttpResponse("hello from http"); |
938 | 938 |
939 ExpectBrokenAlternateProtocolMapping(); | 939 ExpectBrokenAlternateProtocolMapping(); |
940 | 940 |
941 EXPECT_TRUE(quic_data.at_read_eof()); | 941 EXPECT_TRUE(quic_data.at_read_eof()); |
942 EXPECT_TRUE(quic_data.at_write_eof()); | 942 EXPECT_TRUE(quic_data.at_write_eof()); |
943 } | 943 } |
944 | 944 |
945 TEST_P(QuicNetworkTransactionTest, DISABLED_HangingZeroRttFallback) { | 945 TEST_P(QuicNetworkTransactionTest, DISABLED_HangingZeroRttFallback) { |
946 // Alternate-protocol job | 946 // Alternate-protocol job |
947 MockRead quic_reads[] = { | 947 MockRead quic_reads[] = { |
948 MockRead(ASYNC, ERR_IO_PENDING), | 948 MockRead(ASYNC, ERR_IO_PENDING), |
949 }; | 949 }; |
950 StaticSocketDataProvider quic_data(quic_reads, arraysize(quic_reads), | 950 StaticSocketDataProvider quic_data(quic_reads, arraysize(quic_reads), |
951 NULL, 0); | 951 nullptr, 0); |
952 socket_factory_.AddSocketDataProvider(&quic_data); | 952 socket_factory_.AddSocketDataProvider(&quic_data); |
953 | 953 |
954 // Main job that will proceed when the QUIC job fails. | 954 // Main job that will proceed when the QUIC job fails. |
955 MockRead http_reads[] = { | 955 MockRead http_reads[] = { |
956 MockRead("HTTP/1.1 200 OK\r\n\r\n"), | 956 MockRead("HTTP/1.1 200 OK\r\n\r\n"), |
957 MockRead("hello from http"), | 957 MockRead("hello from http"), |
958 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), | 958 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), |
959 MockRead(ASYNC, OK) | 959 MockRead(ASYNC, OK) |
960 }; | 960 }; |
961 | 961 |
962 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), | 962 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), |
963 NULL, 0); | 963 nullptr, 0); |
964 socket_factory_.AddSocketDataProvider(&http_data); | 964 socket_factory_.AddSocketDataProvider(&http_data); |
965 | 965 |
966 CreateSessionWithNextProtos(); | 966 CreateSessionWithNextProtos(); |
967 | 967 |
968 AddQuicAlternateProtocolMapping(MockCryptoClientStream::ZERO_RTT); | 968 AddQuicAlternateProtocolMapping(MockCryptoClientStream::ZERO_RTT); |
969 | 969 |
970 SendRequestAndExpectHttpResponse("hello from http"); | 970 SendRequestAndExpectHttpResponse("hello from http"); |
971 } | 971 } |
972 | 972 |
973 TEST_P(QuicNetworkTransactionTest, BrokenAlternateProtocolOnConnectFailure) { | 973 TEST_P(QuicNetworkTransactionTest, BrokenAlternateProtocolOnConnectFailure) { |
974 // Alternate-protocol job will fail before creating a QUIC session. | 974 // Alternate-protocol job will fail before creating a QUIC session. |
975 StaticSocketDataProvider quic_data(NULL, 0, NULL, 0); | 975 StaticSocketDataProvider quic_data(nullptr, 0, nullptr, 0); |
976 quic_data.set_connect_data(MockConnect(SYNCHRONOUS, | 976 quic_data.set_connect_data(MockConnect(SYNCHRONOUS, |
977 ERR_INTERNET_DISCONNECTED)); | 977 ERR_INTERNET_DISCONNECTED)); |
978 socket_factory_.AddSocketDataProvider(&quic_data); | 978 socket_factory_.AddSocketDataProvider(&quic_data); |
979 | 979 |
980 // Main job which will succeed even though the alternate job fails. | 980 // Main job which will succeed even though the alternate job fails. |
981 MockRead http_reads[] = { | 981 MockRead http_reads[] = { |
982 MockRead("HTTP/1.1 200 OK\r\n\r\n"), | 982 MockRead("HTTP/1.1 200 OK\r\n\r\n"), |
983 MockRead("hello from http"), | 983 MockRead("hello from http"), |
984 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), | 984 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), |
985 MockRead(ASYNC, OK) | 985 MockRead(ASYNC, OK) |
986 }; | 986 }; |
987 | 987 |
988 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), | 988 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), |
989 NULL, 0); | 989 nullptr, 0); |
990 socket_factory_.AddSocketDataProvider(&http_data); | 990 socket_factory_.AddSocketDataProvider(&http_data); |
991 | 991 |
992 CreateSessionWithNextProtos(); | 992 CreateSessionWithNextProtos(); |
993 AddQuicAlternateProtocolMapping(MockCryptoClientStream::COLD_START); | 993 AddQuicAlternateProtocolMapping(MockCryptoClientStream::COLD_START); |
994 SendRequestAndExpectHttpResponse("hello from http"); | 994 SendRequestAndExpectHttpResponse("hello from http"); |
995 | 995 |
996 ExpectBrokenAlternateProtocolMapping(); | 996 ExpectBrokenAlternateProtocolMapping(); |
997 } | 997 } |
998 | 998 |
999 TEST_P(QuicNetworkTransactionTest, ConnectionCloseDuringConnect) { | 999 TEST_P(QuicNetworkTransactionTest, ConnectionCloseDuringConnect) { |
1000 MockQuicData mock_quic_data; | 1000 MockQuicData mock_quic_data; |
1001 mock_quic_data.AddRead(ConstructConnectionClosePacket(1)); | 1001 mock_quic_data.AddRead(ConstructConnectionClosePacket(1)); |
1002 mock_quic_data.AddWrite( | 1002 mock_quic_data.AddWrite( |
1003 ConstructRequestHeadersPacket(1, kClientDataStreamId1, true, true, | 1003 ConstructRequestHeadersPacket(1, kClientDataStreamId1, true, true, |
1004 GetRequestHeaders("GET", "http", "/"))); | 1004 GetRequestHeaders("GET", "http", "/"))); |
1005 mock_quic_data.AddWrite(ConstructAckPacket(2, 1)); | 1005 mock_quic_data.AddWrite(ConstructAckPacket(2, 1)); |
1006 mock_quic_data.AddDelayedSocketDataToFactory(&socket_factory_, 0); | 1006 mock_quic_data.AddDelayedSocketDataToFactory(&socket_factory_, 0); |
1007 | 1007 |
1008 // When the QUIC connection fails, we will try the request again over HTTP. | 1008 // When the QUIC connection fails, we will try the request again over HTTP. |
1009 MockRead http_reads[] = { | 1009 MockRead http_reads[] = { |
1010 MockRead("HTTP/1.1 200 OK\r\n"), | 1010 MockRead("HTTP/1.1 200 OK\r\n"), |
1011 MockRead(kQuicAlternateProtocolHttpHeader), | 1011 MockRead(kQuicAlternateProtocolHttpHeader), |
1012 MockRead("hello world"), | 1012 MockRead("hello world"), |
1013 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), | 1013 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), |
1014 MockRead(ASYNC, OK) | 1014 MockRead(ASYNC, OK) |
1015 }; | 1015 }; |
1016 | 1016 |
1017 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), | 1017 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), |
1018 NULL, 0); | 1018 nullptr, 0); |
1019 socket_factory_.AddSocketDataProvider(&http_data); | 1019 socket_factory_.AddSocketDataProvider(&http_data); |
1020 | 1020 |
1021 // In order for a new QUIC session to be established via alternate-protocol | 1021 // In order for a new QUIC session to be established via alternate-protocol |
1022 // without racing an HTTP connection, we need the host resolution to happen | 1022 // without racing an HTTP connection, we need the host resolution to happen |
1023 // synchronously. | 1023 // synchronously. |
1024 host_resolver_.set_synchronous_mode(true); | 1024 host_resolver_.set_synchronous_mode(true); |
1025 host_resolver_.rules()->AddIPLiteralRule("www.google.com", "192.168.0.1", ""); | 1025 host_resolver_.rules()->AddIPLiteralRule("www.google.com", "192.168.0.1", ""); |
1026 HostResolver::RequestInfo info(HostPortPair("www.google.com", 80)); | 1026 HostResolver::RequestInfo info(HostPortPair("www.google.com", 80)); |
1027 AddressList address; | 1027 AddressList address; |
1028 host_resolver_.Resolve(info, | 1028 host_resolver_.Resolve(info, |
1029 DEFAULT_PRIORITY, | 1029 DEFAULT_PRIORITY, |
1030 &address, | 1030 &address, |
1031 CompletionCallback(), | 1031 CompletionCallback(), |
1032 NULL, | 1032 nullptr, |
1033 net_log_.bound()); | 1033 net_log_.bound()); |
1034 | 1034 |
1035 CreateSessionWithNextProtos(); | 1035 CreateSessionWithNextProtos(); |
1036 AddQuicAlternateProtocolMapping(MockCryptoClientStream::ZERO_RTT); | 1036 AddQuicAlternateProtocolMapping(MockCryptoClientStream::ZERO_RTT); |
1037 SendRequestAndExpectHttpResponse("hello world"); | 1037 SendRequestAndExpectHttpResponse("hello world"); |
1038 } | 1038 } |
1039 | 1039 |
1040 } // namespace test | 1040 } // namespace test |
1041 } // namespace net | 1041 } // namespace net |
OLD | NEW |