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/compiler_specific.h" | 7 #include "base/compiler_specific.h" |
8 #include "base/macros.h" | 8 #include "base/macros.h" |
9 #include "base/memory/scoped_ptr.h" | 9 #include "base/memory/scoped_ptr.h" |
10 #include "base/run_loop.h" | 10 #include "base/run_loop.h" |
(...skipping 186 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
197 HttpAuthHandlerFactory::CreateDefault(&host_resolver_)), | 197 HttpAuthHandlerFactory::CreateDefault(&host_resolver_)), |
198 random_generator_(0), | 198 random_generator_(0), |
199 ssl_data_(ASYNC, OK) { | 199 ssl_data_(ASYNC, OK) { |
200 request_.method = "GET"; | 200 request_.method = "GET"; |
201 std::string url("https://"); | 201 std::string url("https://"); |
202 url.append(kDefaultServerHostName); | 202 url.append(kDefaultServerHostName); |
203 request_.url = GURL(url); | 203 request_.url = GURL(url); |
204 request_.load_flags = 0; | 204 request_.load_flags = 0; |
205 clock_->AdvanceTime(QuicTime::Delta::FromMilliseconds(20)); | 205 clock_->AdvanceTime(QuicTime::Delta::FromMilliseconds(20)); |
206 | 206 |
| 207 params_.parse_alternative_services = true; |
| 208 params_.enable_alternative_service_with_different_host = true; |
| 209 |
207 scoped_refptr<X509Certificate> cert( | 210 scoped_refptr<X509Certificate> cert( |
208 ImportCertFromFile(GetTestCertsDirectory(), "wildcard.pem")); | 211 ImportCertFromFile(GetTestCertsDirectory(), "wildcard.pem")); |
209 verify_details_.cert_verify_result.verified_cert = cert; | 212 verify_details_.cert_verify_result.verified_cert = cert; |
210 verify_details_.cert_verify_result.is_issued_by_known_root = true; | 213 verify_details_.cert_verify_result.is_issued_by_known_root = true; |
211 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details_); | 214 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details_); |
212 } | 215 } |
213 | 216 |
214 void SetUp() override { | 217 void SetUp() override { |
215 NetworkChangeNotifier::NotifyObserversOfIPAddressChangeForTests(); | 218 NetworkChangeNotifier::NotifyObserversOfIPAddressChangeForTests(); |
216 base::MessageLoop::current()->RunUntilIdle(); | 219 base::MessageLoop::current()->RunUntilIdle(); |
(...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
400 QuicStreamId stream_id, | 403 QuicStreamId stream_id, |
401 bool should_include_version, | 404 bool should_include_version, |
402 bool fin, | 405 bool fin, |
403 const SpdyHeaderBlock& headers, | 406 const SpdyHeaderBlock& headers, |
404 QuicStreamOffset* offset, | 407 QuicStreamOffset* offset, |
405 QuicTestPacketMaker* maker) { | 408 QuicTestPacketMaker* maker) { |
406 return maker->MakeResponseHeadersPacketWithOffsetTracking( | 409 return maker->MakeResponseHeadersPacketWithOffsetTracking( |
407 packet_number, stream_id, should_include_version, fin, headers, offset); | 410 packet_number, stream_id, should_include_version, fin, headers, offset); |
408 } | 411 } |
409 | 412 |
410 void CreateSession() { CreateSessionWithFactory(&socket_factory_, false); } | 413 void CreateSession() { CreateSessionWithFactory(&socket_factory_); } |
411 | 414 |
412 void CreateSessionWithNextProtos() { | 415 void CreateSessionWithFactory(ClientSocketFactory* socket_factory) { |
413 CreateSessionWithFactory(&socket_factory_, true); | |
414 } | |
415 | |
416 // If |use_next_protos| is true, enables SPDY and QUIC. | |
417 void CreateSessionWithFactory(ClientSocketFactory* socket_factory, | |
418 bool use_next_protos) { | |
419 params_.enable_quic = true; | 416 params_.enable_quic = true; |
420 params_.quic_clock = clock_; | 417 params_.quic_clock = clock_; |
421 params_.quic_random = &random_generator_; | 418 params_.quic_random = &random_generator_; |
422 params_.client_socket_factory = socket_factory; | 419 params_.client_socket_factory = socket_factory; |
423 params_.quic_crypto_client_stream_factory = &crypto_client_stream_factory_; | 420 params_.quic_crypto_client_stream_factory = &crypto_client_stream_factory_; |
424 params_.host_resolver = &host_resolver_; | 421 params_.host_resolver = &host_resolver_; |
425 params_.cert_verifier = &cert_verifier_; | 422 params_.cert_verifier = &cert_verifier_; |
426 params_.transport_security_state = &transport_security_state_; | 423 params_.transport_security_state = &transport_security_state_; |
427 params_.cert_transparency_verifier = cert_transparency_verifier_.get(); | 424 params_.cert_transparency_verifier = cert_transparency_verifier_.get(); |
428 params_.socket_performance_watcher_factory = | 425 params_.socket_performance_watcher_factory = |
429 test_network_quality_estimator_.get(); | 426 test_network_quality_estimator_.get(); |
430 params_.proxy_service = proxy_service_.get(); | 427 params_.proxy_service = proxy_service_.get(); |
431 params_.ssl_config_service = ssl_config_service_.get(); | 428 params_.ssl_config_service = ssl_config_service_.get(); |
432 params_.http_auth_handler_factory = auth_handler_factory_.get(); | 429 params_.http_auth_handler_factory = auth_handler_factory_.get(); |
433 params_.http_server_properties = http_server_properties_.GetWeakPtr(); | 430 params_.http_server_properties = http_server_properties_.GetWeakPtr(); |
434 params_.quic_supported_versions = SupportedVersions(GetParam()); | 431 params_.quic_supported_versions = SupportedVersions(GetParam()); |
435 for (const char* host : | 432 for (const char* host : |
436 {kDefaultServerHostName, "www.example.org", "news.example.org", | 433 {kDefaultServerHostName, "www.example.org", "news.example.org", |
437 "bar.example.org", "foo.example.org", "invalid.example.org", | 434 "bar.example.org", "foo.example.org", "invalid.example.org", |
438 "mail.example.com"}) { | 435 "mail.example.com"}) { |
439 params_.quic_host_whitelist.insert(host); | 436 params_.quic_host_whitelist.insert(host); |
440 } | 437 } |
441 | 438 |
442 test_network_quality_estimator_->AddRTTObserver(&rtt_observer_); | 439 test_network_quality_estimator_->AddRTTObserver(&rtt_observer_); |
443 | 440 |
444 if (use_next_protos) { | |
445 params_.parse_alternative_services = true; | |
446 params_.enable_alternative_service_with_different_host = true; | |
447 } | |
448 | |
449 session_.reset(new HttpNetworkSession(params_)); | 441 session_.reset(new HttpNetworkSession(params_)); |
450 session_->quic_stream_factory()->set_require_confirmation(false); | 442 session_->quic_stream_factory()->set_require_confirmation(false); |
451 ASSERT_EQ(params_.quic_socket_receive_buffer_size, | 443 ASSERT_EQ(params_.quic_socket_receive_buffer_size, |
452 session_->quic_stream_factory()->socket_receive_buffer_size()); | 444 session_->quic_stream_factory()->socket_receive_buffer_size()); |
453 } | 445 } |
454 | 446 |
455 void CheckWasQuicResponse(const scoped_ptr<HttpNetworkTransaction>& trans) { | 447 void CheckWasQuicResponse(const scoped_ptr<HttpNetworkTransaction>& trans) { |
456 const HttpResponseInfo* response = trans->GetResponseInfo(); | 448 const HttpResponseInfo* response = trans->GetResponseInfo(); |
457 ASSERT_TRUE(response != nullptr); | 449 ASSERT_TRUE(response != nullptr); |
458 ASSERT_TRUE(response->headers.get() != nullptr); | 450 ASSERT_TRUE(response->headers.get() != nullptr); |
(...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
627 ConstructDataPacket(2, kClientDataStreamId1, false, true, 0, "hello!")); | 619 ConstructDataPacket(2, kClientDataStreamId1, false, true, 0, "hello!")); |
628 mock_quic_data.AddWrite(ConstructAckPacket(2, 1)); | 620 mock_quic_data.AddWrite(ConstructAckPacket(2, 1)); |
629 mock_quic_data.AddRead(SYNCHRONOUS, ERR_IO_PENDING); // No more data to read | 621 mock_quic_data.AddRead(SYNCHRONOUS, ERR_IO_PENDING); // No more data to read |
630 | 622 |
631 mock_quic_data.AddSocketDataToFactory(&socket_factory_); | 623 mock_quic_data.AddSocketDataToFactory(&socket_factory_); |
632 | 624 |
633 // The non-alternate protocol job needs to hang in order to guarantee that | 625 // The non-alternate protocol job needs to hang in order to guarantee that |
634 // the alternate-protocol job will "win". | 626 // the alternate-protocol job will "win". |
635 AddHangingNonAlternateProtocolSocketData(); | 627 AddHangingNonAlternateProtocolSocketData(); |
636 | 628 |
| 629 params_.parse_alternative_services = false; |
| 630 params_.enable_alternative_service_with_different_host = false; |
637 CreateSession(); | 631 CreateSession(); |
638 | 632 |
639 EXPECT_FALSE(rtt_observer_.rtt_notification_received()); | 633 EXPECT_FALSE(rtt_observer_.rtt_notification_received()); |
640 SendRequestAndExpectQuicResponse("hello!"); | 634 SendRequestAndExpectQuicResponse("hello!"); |
641 EXPECT_TRUE(rtt_observer_.rtt_notification_received()); | 635 EXPECT_TRUE(rtt_observer_.rtt_notification_received()); |
642 | 636 |
643 // Check that the NetLog was filled reasonably. | 637 // Check that the NetLog was filled reasonably. |
644 TestNetLogEntry::List entries; | 638 TestNetLogEntry::List entries; |
645 net_log_.GetEntries(&entries); | 639 net_log_.GetEntries(&entries); |
646 EXPECT_LT(0u, entries.size()); | 640 EXPECT_LT(0u, entries.size()); |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
696 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read | 690 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read |
697 mock_quic_data.AddRead(ASYNC, 0); // EOF | 691 mock_quic_data.AddRead(ASYNC, 0); // EOF |
698 | 692 |
699 mock_quic_data.AddSocketDataToFactory(&socket_factory_); | 693 mock_quic_data.AddSocketDataToFactory(&socket_factory_); |
700 | 694 |
701 EXPECT_FALSE(rtt_observer_.rtt_notification_received()); | 695 EXPECT_FALSE(rtt_observer_.rtt_notification_received()); |
702 // There is no need to set up an alternate protocol job, because | 696 // There is no need to set up an alternate protocol job, because |
703 // no attempt will be made to speak to the proxy over TCP. | 697 // no attempt will be made to speak to the proxy over TCP. |
704 | 698 |
705 request_.url = GURL("http://mail.example.org/"); | 699 request_.url = GURL("http://mail.example.org/"); |
| 700 params_.parse_alternative_services = false; |
| 701 params_.enable_alternative_service_with_different_host = false; |
706 CreateSession(); | 702 CreateSession(); |
707 | 703 |
708 SendRequestAndExpectQuicResponseFromProxyOnPort("hello!", 70); | 704 SendRequestAndExpectQuicResponseFromProxyOnPort("hello!", 70); |
709 EXPECT_TRUE(rtt_observer_.rtt_notification_received()); | 705 EXPECT_TRUE(rtt_observer_.rtt_notification_received()); |
710 } | 706 } |
711 | 707 |
712 // Regression test for https://crbug.com/492458. Test that for an HTTP | 708 // Regression test for https://crbug.com/492458. Test that for an HTTP |
713 // connection through a QUIC proxy, the certificate exhibited by the proxy is | 709 // connection through a QUIC proxy, the certificate exhibited by the proxy is |
714 // checked against the proxy hostname, not the origin hostname. | 710 // checked against the proxy hostname, not the origin hostname. |
715 TEST_P(QuicNetworkTransactionTest, QuicProxyWithCert) { | 711 TEST_P(QuicNetworkTransactionTest, QuicProxyWithCert) { |
(...skipping 27 matching lines...) Expand all Loading... |
743 EXPECT_FALSE(cert->VerifyNameMatch(origin_host, &common_name_fallback_used)); | 739 EXPECT_FALSE(cert->VerifyNameMatch(origin_host, &common_name_fallback_used)); |
744 ProofVerifyDetailsChromium verify_details; | 740 ProofVerifyDetailsChromium verify_details; |
745 verify_details.cert_verify_result.verified_cert = cert; | 741 verify_details.cert_verify_result.verified_cert = cert; |
746 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details); | 742 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details); |
747 ProofVerifyDetailsChromium verify_details2; | 743 ProofVerifyDetailsChromium verify_details2; |
748 verify_details2.cert_verify_result.verified_cert = cert; | 744 verify_details2.cert_verify_result.verified_cert = cert; |
749 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details2); | 745 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details2); |
750 | 746 |
751 request_.url = GURL("http://" + origin_host); | 747 request_.url = GURL("http://" + origin_host); |
752 AddHangingNonAlternateProtocolSocketData(); | 748 AddHangingNonAlternateProtocolSocketData(); |
753 CreateSessionWithNextProtos(); | 749 CreateSession(); |
754 AddQuicAlternateProtocolMapping(MockCryptoClientStream::CONFIRM_HANDSHAKE); | 750 AddQuicAlternateProtocolMapping(MockCryptoClientStream::CONFIRM_HANDSHAKE); |
755 SendRequestAndExpectQuicResponseFromProxyOnPort("hello!", 70); | 751 SendRequestAndExpectQuicResponseFromProxyOnPort("hello!", 70); |
756 } | 752 } |
757 | 753 |
758 TEST_P(QuicNetworkTransactionTest, AlternativeServicesDifferentHost) { | 754 TEST_P(QuicNetworkTransactionTest, AlternativeServicesDifferentHost) { |
759 params_.enable_alternative_service_with_different_host = true; | 755 params_.enable_alternative_service_with_different_host = true; |
760 HostPortPair origin("www.example.org", 443); | 756 HostPortPair origin("www.example.org", 443); |
761 HostPortPair alternative("mail.example.org", 443); | 757 HostPortPair alternative("mail.example.org", 443); |
762 | 758 |
763 base::FilePath certs_dir = GetTestCertsDirectory(); | 759 base::FilePath certs_dir = GetTestCertsDirectory(); |
(...skipping 21 matching lines...) Expand all Loading... |
785 ConstructDataPacket(2, kClientDataStreamId1, false, true, 0, "hello!")); | 781 ConstructDataPacket(2, kClientDataStreamId1, false, true, 0, "hello!")); |
786 mock_quic_data.AddWrite(ConstructAckPacket(2, 1)); | 782 mock_quic_data.AddWrite(ConstructAckPacket(2, 1)); |
787 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read | 783 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read |
788 mock_quic_data.AddRead(ASYNC, 0); | 784 mock_quic_data.AddRead(ASYNC, 0); |
789 mock_quic_data.AddSocketDataToFactory(&socket_factory_); | 785 mock_quic_data.AddSocketDataToFactory(&socket_factory_); |
790 | 786 |
791 request_.url = GURL("https://" + origin.host()); | 787 request_.url = GURL("https://" + origin.host()); |
792 AddQuicRemoteAlternativeServiceMapping( | 788 AddQuicRemoteAlternativeServiceMapping( |
793 MockCryptoClientStream::CONFIRM_HANDSHAKE, alternative); | 789 MockCryptoClientStream::CONFIRM_HANDSHAKE, alternative); |
794 AddHangingNonAlternateProtocolSocketData(); | 790 AddHangingNonAlternateProtocolSocketData(); |
795 CreateSessionWithNextProtos(); | 791 CreateSession(); |
796 | 792 |
797 SendRequestAndExpectQuicResponse("hello!"); | 793 SendRequestAndExpectQuicResponse("hello!"); |
798 } | 794 } |
799 | 795 |
800 TEST_P(QuicNetworkTransactionTest, ForceQuicWithErrorConnecting) { | 796 TEST_P(QuicNetworkTransactionTest, ForceQuicWithErrorConnecting) { |
801 params_.origin_to_force_quic_on = | 797 params_.origin_to_force_quic_on = |
802 HostPortPair::FromString("mail.example.org:443"); | 798 HostPortPair::FromString("mail.example.org:443"); |
803 | 799 |
804 MockQuicData mock_quic_data1; | 800 MockQuicData mock_quic_data1; |
805 mock_quic_data1.AddRead(ASYNC, ERR_SOCKET_NOT_CONNECTED); | 801 mock_quic_data1.AddRead(ASYNC, ERR_SOCKET_NOT_CONNECTED); |
806 | 802 |
807 MockQuicData mock_quic_data2; | 803 MockQuicData mock_quic_data2; |
808 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details_); | 804 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details_); |
809 mock_quic_data2.AddRead(ASYNC, ERR_SOCKET_NOT_CONNECTED); | 805 mock_quic_data2.AddRead(ASYNC, ERR_SOCKET_NOT_CONNECTED); |
810 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details_); | 806 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details_); |
811 | 807 |
812 mock_quic_data1.AddSocketDataToFactory(&socket_factory_); | 808 mock_quic_data1.AddSocketDataToFactory(&socket_factory_); |
813 mock_quic_data2.AddSocketDataToFactory(&socket_factory_); | 809 mock_quic_data2.AddSocketDataToFactory(&socket_factory_); |
814 | 810 |
| 811 params_.parse_alternative_services = false; |
| 812 params_.enable_alternative_service_with_different_host = false; |
815 CreateSession(); | 813 CreateSession(); |
816 | 814 |
817 EXPECT_EQ(0U, test_network_quality_estimator_->watcher_count()); | 815 EXPECT_EQ(0U, test_network_quality_estimator_->watcher_count()); |
818 for (size_t i = 0; i < 2; ++i) { | 816 for (size_t i = 0; i < 2; ++i) { |
819 scoped_ptr<HttpNetworkTransaction> trans( | 817 scoped_ptr<HttpNetworkTransaction> trans( |
820 new HttpNetworkTransaction(DEFAULT_PRIORITY, session_.get())); | 818 new HttpNetworkTransaction(DEFAULT_PRIORITY, session_.get())); |
821 TestCompletionCallback callback; | 819 TestCompletionCallback callback; |
822 int rv = trans->Start(&request_, callback.callback(), net_log_.bound()); | 820 int rv = trans->Start(&request_, callback.callback(), net_log_.bound()); |
823 EXPECT_EQ(ERR_IO_PENDING, rv); | 821 EXPECT_EQ(ERR_IO_PENDING, rv); |
824 EXPECT_EQ(ERR_CONNECTION_CLOSED, callback.WaitForResult()); | 822 EXPECT_EQ(ERR_CONNECTION_CLOSED, callback.WaitForResult()); |
825 EXPECT_EQ(1 + i, test_network_quality_estimator_->watcher_count()); | 823 EXPECT_EQ(1 + i, test_network_quality_estimator_->watcher_count()); |
826 } | 824 } |
827 } | 825 } |
828 | 826 |
829 TEST_P(QuicNetworkTransactionTest, DoNotForceQuicForHttps) { | 827 TEST_P(QuicNetworkTransactionTest, DoNotForceQuicForHttps) { |
830 // Attempt to "force" quic on 443, which will not be honored. | 828 // Attempt to "force" quic on 443, which will not be honored. |
831 params_.origin_to_force_quic_on = | 829 params_.origin_to_force_quic_on = |
832 HostPortPair::FromString("www.google.com:443"); | 830 HostPortPair::FromString("www.google.com:443"); |
833 | 831 |
834 MockRead http_reads[] = { | 832 MockRead http_reads[] = { |
835 MockRead("HTTP/1.1 200 OK\r\n\r\n"), MockRead("hello world"), | 833 MockRead("HTTP/1.1 200 OK\r\n\r\n"), MockRead("hello world"), |
836 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), | 834 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), |
837 MockRead(ASYNC, OK)}; | 835 MockRead(ASYNC, OK)}; |
838 | 836 |
839 StaticSocketDataProvider data(http_reads, arraysize(http_reads), nullptr, 0); | 837 StaticSocketDataProvider data(http_reads, arraysize(http_reads), nullptr, 0); |
840 socket_factory_.AddSocketDataProvider(&data); | 838 socket_factory_.AddSocketDataProvider(&data); |
841 SSLSocketDataProvider ssl(ASYNC, OK); | 839 SSLSocketDataProvider ssl(ASYNC, OK); |
842 socket_factory_.AddSSLSocketDataProvider(&ssl); | 840 socket_factory_.AddSSLSocketDataProvider(&ssl); |
843 | 841 |
| 842 params_.parse_alternative_services = false; |
| 843 params_.enable_alternative_service_with_different_host = false; |
844 CreateSession(); | 844 CreateSession(); |
845 | 845 |
846 SendRequestAndExpectHttpResponse("hello world"); | 846 SendRequestAndExpectHttpResponse("hello world"); |
847 EXPECT_EQ(0U, test_network_quality_estimator_->watcher_count()); | 847 EXPECT_EQ(0U, test_network_quality_estimator_->watcher_count()); |
848 } | 848 } |
849 | 849 |
850 TEST_P(QuicNetworkTransactionTest, UseAlternativeServiceForQuic) { | 850 TEST_P(QuicNetworkTransactionTest, UseAlternativeServiceForQuic) { |
851 MockRead http_reads[] = { | 851 MockRead http_reads[] = { |
852 MockRead("HTTP/1.1 200 OK\r\n"), MockRead(kQuicAlternativeServiceHeader), | 852 MockRead("HTTP/1.1 200 OK\r\n"), MockRead(kQuicAlternativeServiceHeader), |
853 MockRead("hello world"), | 853 MockRead("hello world"), |
(...skipping 13 matching lines...) Expand all Loading... |
867 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK"))); | 867 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK"))); |
868 mock_quic_data.AddRead( | 868 mock_quic_data.AddRead( |
869 ConstructDataPacket(2, kClientDataStreamId1, false, true, 0, "hello!")); | 869 ConstructDataPacket(2, kClientDataStreamId1, false, true, 0, "hello!")); |
870 mock_quic_data.AddWrite(ConstructAckPacket(2, 1)); | 870 mock_quic_data.AddWrite(ConstructAckPacket(2, 1)); |
871 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read | 871 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read |
872 mock_quic_data.AddRead(ASYNC, 0); // EOF | 872 mock_quic_data.AddRead(ASYNC, 0); // EOF |
873 | 873 |
874 mock_quic_data.AddSocketDataToFactory(&socket_factory_); | 874 mock_quic_data.AddSocketDataToFactory(&socket_factory_); |
875 | 875 |
876 AddHangingNonAlternateProtocolSocketData(); | 876 AddHangingNonAlternateProtocolSocketData(); |
877 CreateSessionWithNextProtos(); | 877 CreateSession(); |
878 | 878 |
879 SendRequestAndExpectHttpResponse("hello world"); | 879 SendRequestAndExpectHttpResponse("hello world"); |
880 SendRequestAndExpectQuicResponse("hello!"); | 880 SendRequestAndExpectQuicResponse("hello!"); |
881 } | 881 } |
882 | 882 |
883 TEST_P(QuicNetworkTransactionTest, UseAlternativeServiceQuicSupportedVersion) { | 883 TEST_P(QuicNetworkTransactionTest, UseAlternativeServiceQuicSupportedVersion) { |
884 std::string altsvc_header = base::StringPrintf( | 884 std::string altsvc_header = base::StringPrintf( |
885 "Alt-Svc: quic=\":443\"; v=\"%u\"\r\n\r\n", GetParam()); | 885 "Alt-Svc: quic=\":443\"; v=\"%u\"\r\n\r\n", GetParam()); |
886 MockRead http_reads[] = { | 886 MockRead http_reads[] = { |
887 MockRead("HTTP/1.1 200 OK\r\n"), MockRead(altsvc_header.c_str()), | 887 MockRead("HTTP/1.1 200 OK\r\n"), MockRead(altsvc_header.c_str()), |
(...skipping 14 matching lines...) Expand all Loading... |
902 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK"))); | 902 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK"))); |
903 mock_quic_data.AddRead( | 903 mock_quic_data.AddRead( |
904 ConstructDataPacket(2, kClientDataStreamId1, false, true, 0, "hello!")); | 904 ConstructDataPacket(2, kClientDataStreamId1, false, true, 0, "hello!")); |
905 mock_quic_data.AddWrite(ConstructAckPacket(2, 1)); | 905 mock_quic_data.AddWrite(ConstructAckPacket(2, 1)); |
906 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read | 906 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read |
907 mock_quic_data.AddRead(ASYNC, 0); // EOF | 907 mock_quic_data.AddRead(ASYNC, 0); // EOF |
908 | 908 |
909 mock_quic_data.AddSocketDataToFactory(&socket_factory_); | 909 mock_quic_data.AddSocketDataToFactory(&socket_factory_); |
910 | 910 |
911 AddHangingNonAlternateProtocolSocketData(); | 911 AddHangingNonAlternateProtocolSocketData(); |
912 CreateSessionWithNextProtos(); | 912 CreateSession(); |
913 | 913 |
914 SendRequestAndExpectHttpResponse("hello world"); | 914 SendRequestAndExpectHttpResponse("hello world"); |
915 SendRequestAndExpectQuicResponse("hello!"); | 915 SendRequestAndExpectQuicResponse("hello!"); |
916 } | 916 } |
917 | 917 |
918 TEST_P(QuicNetworkTransactionTest, | 918 TEST_P(QuicNetworkTransactionTest, |
919 DoNotUseAlternativeServiceQuicUnsupportedVersion) { | 919 DoNotUseAlternativeServiceQuicUnsupportedVersion) { |
920 std::string altsvc_header = base::StringPrintf( | 920 std::string altsvc_header = base::StringPrintf( |
921 "Alt-Svc: quic=\":443\"; v=\"%u\"\r\n\r\n", GetParam() - 1); | 921 "Alt-Svc: quic=\":443\"; v=\"%u\"\r\n\r\n", GetParam() - 1); |
922 MockRead http_reads[] = { | 922 MockRead http_reads[] = { |
923 MockRead("HTTP/1.1 200 OK\r\n"), MockRead(altsvc_header.c_str()), | 923 MockRead("HTTP/1.1 200 OK\r\n"), MockRead(altsvc_header.c_str()), |
924 MockRead("hello world"), | 924 MockRead("hello world"), |
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 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), nullptr, | 928 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), nullptr, |
929 0); | 929 0); |
930 socket_factory_.AddSocketDataProvider(&http_data); | 930 socket_factory_.AddSocketDataProvider(&http_data); |
931 socket_factory_.AddSSLSocketDataProvider(&ssl_data_); | 931 socket_factory_.AddSSLSocketDataProvider(&ssl_data_); |
932 socket_factory_.AddSocketDataProvider(&http_data); | 932 socket_factory_.AddSocketDataProvider(&http_data); |
933 socket_factory_.AddSSLSocketDataProvider(&ssl_data_); | 933 socket_factory_.AddSSLSocketDataProvider(&ssl_data_); |
934 | 934 |
935 CreateSessionWithNextProtos(); | 935 CreateSession(); |
936 | 936 |
937 SendRequestAndExpectHttpResponse("hello world"); | 937 SendRequestAndExpectHttpResponse("hello world"); |
938 SendRequestAndExpectHttpResponse("hello world"); | 938 SendRequestAndExpectHttpResponse("hello world"); |
939 } | 939 } |
940 | 940 |
941 // When multiple alternative services are advertised, | 941 // When multiple alternative services are advertised, |
942 // HttpStreamFactoryImpl::RequestStreamInternal() should select the alternative | 942 // HttpStreamFactoryImpl::RequestStreamInternal() should select the alternative |
943 // service which uses existing QUIC session if available. If no existing QUIC | 943 // service which uses existing QUIC session if available. If no existing QUIC |
944 // session can be used, use the first alternative service from the list. | 944 // session can be used, use the first alternative service from the list. |
945 TEST_P(QuicNetworkTransactionTest, UseExistingAlternativeServiceForQuic) { | 945 TEST_P(QuicNetworkTransactionTest, UseExistingAlternativeServiceForQuic) { |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
986 &response_header_offset)); | 986 &response_header_offset)); |
987 mock_quic_data.AddRead( | 987 mock_quic_data.AddRead( |
988 ConstructDataPacket(4, kClientDataStreamId2, false, true, 0, "hello!")); | 988 ConstructDataPacket(4, kClientDataStreamId2, false, true, 0, "hello!")); |
989 mock_quic_data.AddWrite(ConstructAckAndConnectionClosePacket(4, 4, 3, 1)); | 989 mock_quic_data.AddWrite(ConstructAckAndConnectionClosePacket(4, 4, 3, 1)); |
990 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read | 990 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read |
991 mock_quic_data.AddRead(ASYNC, 0); // EOF | 991 mock_quic_data.AddRead(ASYNC, 0); // EOF |
992 | 992 |
993 mock_quic_data.AddSocketDataToFactory(&socket_factory_); | 993 mock_quic_data.AddSocketDataToFactory(&socket_factory_); |
994 | 994 |
995 AddHangingNonAlternateProtocolSocketData(); | 995 AddHangingNonAlternateProtocolSocketData(); |
996 CreateSessionWithNextProtos(); | 996 CreateSession(); |
997 | 997 |
998 SendRequestAndExpectHttpResponse("hello world"); | 998 SendRequestAndExpectHttpResponse("hello world"); |
999 | 999 |
1000 SendRequestAndExpectQuicResponseOnPort("hello!", 443); | 1000 SendRequestAndExpectQuicResponseOnPort("hello!", 443); |
1001 SendRequestAndExpectQuicResponseOnPort("hello!", 443); | 1001 SendRequestAndExpectQuicResponseOnPort("hello!", 443); |
1002 } | 1002 } |
1003 | 1003 |
1004 // When multiple alternative services that has existing QUIC session. | 1004 // When multiple alternative services that has existing QUIC session. |
1005 // HttpStreamFactoryImpl::RequestStreamInternal() should select the first | 1005 // HttpStreamFactoryImpl::RequestStreamInternal() should select the first |
1006 // alternative service which uses existing QUIC session. | 1006 // alternative service which uses existing QUIC session. |
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1076 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read | 1076 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read |
1077 mock_quic_data.AddRead(ASYNC, 0); // EOF | 1077 mock_quic_data.AddRead(ASYNC, 0); // EOF |
1078 | 1078 |
1079 mock_quic_data.AddSocketDataToFactory(&socket_factory_); | 1079 mock_quic_data.AddSocketDataToFactory(&socket_factory_); |
1080 AddHangingNonAlternateProtocolSocketData(); | 1080 AddHangingNonAlternateProtocolSocketData(); |
1081 | 1081 |
1082 mock_quic_data2.AddSocketDataToFactory(&socket_factory_); | 1082 mock_quic_data2.AddSocketDataToFactory(&socket_factory_); |
1083 | 1083 |
1084 AddHangingNonAlternateProtocolSocketData(); | 1084 AddHangingNonAlternateProtocolSocketData(); |
1085 | 1085 |
1086 CreateSessionWithNextProtos(); | 1086 CreateSession(); |
1087 | 1087 |
1088 SendRequestAndExpectHttpResponse("hello world"); | 1088 SendRequestAndExpectHttpResponse("hello world"); |
1089 SendRequestAndExpectQuicResponseOnPort("hello from foo!", 443); | 1089 SendRequestAndExpectQuicResponseOnPort("hello from foo!", 443); |
1090 SendRequestAndExpectQuicResponseOnPort("hello from bar!", 444); | 1090 SendRequestAndExpectQuicResponseOnPort("hello from bar!", 444); |
1091 SendRequestAndExpectQuicResponseOnPort("hello from foo!", 443); | 1091 SendRequestAndExpectQuicResponseOnPort("hello from foo!", 443); |
1092 } | 1092 } |
1093 | 1093 |
1094 // Multiple origins have listed the same alternative services. When there's a | 1094 // Multiple origins have listed the same alternative services. When there's a |
1095 // existing QUIC session opened by a request to other origin, | 1095 // existing QUIC session opened by a request to other origin, |
1096 // if the cert is valid, should select this QUIC session to make the request | 1096 // if the cert is valid, should select this QUIC session to make the request |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1153 &response_header_offset)); | 1153 &response_header_offset)); |
1154 mock_quic_data.AddRead(ConstructDataPacket(4, kClientDataStreamId2, false, | 1154 mock_quic_data.AddRead(ConstructDataPacket(4, kClientDataStreamId2, false, |
1155 true, 0, "hello from mail QUIC!")); | 1155 true, 0, "hello from mail QUIC!")); |
1156 mock_quic_data.AddWrite(ConstructAckAndConnectionClosePacket(4, 4, 3, 1)); | 1156 mock_quic_data.AddWrite(ConstructAckAndConnectionClosePacket(4, 4, 3, 1)); |
1157 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read | 1157 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read |
1158 mock_quic_data.AddRead(ASYNC, 0); // EOF | 1158 mock_quic_data.AddRead(ASYNC, 0); // EOF |
1159 | 1159 |
1160 mock_quic_data.AddSocketDataToFactory(&socket_factory_); | 1160 mock_quic_data.AddSocketDataToFactory(&socket_factory_); |
1161 AddHangingNonAlternateProtocolSocketData(); | 1161 AddHangingNonAlternateProtocolSocketData(); |
1162 | 1162 |
1163 CreateSessionWithNextProtos(); | 1163 CreateSession(); |
1164 | 1164 |
1165 // Send two HTTP requests, responses set up alt-svc lists for the origins. | 1165 // Send two HTTP requests, responses set up alt-svc lists for the origins. |
1166 request_.url = GURL("https://www.example.org/"); | 1166 request_.url = GURL("https://www.example.org/"); |
1167 SendRequestAndExpectHttpResponse("hello world from www.example.org"); | 1167 SendRequestAndExpectHttpResponse("hello world from www.example.org"); |
1168 request_.url = GURL("https://mail.example.org/"); | 1168 request_.url = GURL("https://mail.example.org/"); |
1169 SendRequestAndExpectHttpResponse("hello world from mail.example.org"); | 1169 SendRequestAndExpectHttpResponse("hello world from mail.example.org"); |
1170 | 1170 |
1171 // Open a QUIC session to mail.example.org:443 when making request | 1171 // Open a QUIC session to mail.example.org:443 when making request |
1172 // to mail.example.org. | 1172 // to mail.example.org. |
1173 request_.url = GURL("https://www.example.org/"); | 1173 request_.url = GURL("https://www.example.org/"); |
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1249 mock_quic_data2.AddWrite(ConstructAckPacket(2, 1, &maker)); | 1249 mock_quic_data2.AddWrite(ConstructAckPacket(2, 1, &maker)); |
1250 mock_quic_data2.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read | 1250 mock_quic_data2.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read |
1251 mock_quic_data2.AddRead(ASYNC, 0); // EOF | 1251 mock_quic_data2.AddRead(ASYNC, 0); // EOF |
1252 | 1252 |
1253 mock_quic_data.AddSocketDataToFactory(&socket_factory_); | 1253 mock_quic_data.AddSocketDataToFactory(&socket_factory_); |
1254 AddHangingNonAlternateProtocolSocketData(); | 1254 AddHangingNonAlternateProtocolSocketData(); |
1255 | 1255 |
1256 mock_quic_data2.AddSocketDataToFactory(&socket_factory_); | 1256 mock_quic_data2.AddSocketDataToFactory(&socket_factory_); |
1257 AddHangingNonAlternateProtocolSocketData(); | 1257 AddHangingNonAlternateProtocolSocketData(); |
1258 | 1258 |
1259 CreateSessionWithNextProtos(); | 1259 CreateSession(); |
1260 | 1260 |
1261 // Send HTTP requests, responses set up the alt-svc lists for the origins. | 1261 // Send HTTP requests, responses set up the alt-svc lists for the origins. |
1262 SendRequestAndExpectHttpResponse("hello world from mail.example.org"); | 1262 SendRequestAndExpectHttpResponse("hello world from mail.example.org"); |
1263 request_.url = GURL("https://mail.example.com/"); | 1263 request_.url = GURL("https://mail.example.com/"); |
1264 SendRequestAndExpectHttpResponse("hello world from mail.example.com"); | 1264 SendRequestAndExpectHttpResponse("hello world from mail.example.com"); |
1265 | 1265 |
1266 // Open a QUIC session to mail.example.org:443 when making request | 1266 // Open a QUIC session to mail.example.org:443 when making request |
1267 // to mail.example.org. | 1267 // to mail.example.org. |
1268 request_.url = GURL("https://mail.example.org/"); | 1268 request_.url = GURL("https://mail.example.org/"); |
1269 SendRequestAndExpectQuicResponseOnPort("hello from mail QUIC!", 443); | 1269 SendRequestAndExpectQuicResponseOnPort("hello from mail QUIC!", 443); |
(...skipping 24 matching lines...) Expand all Loading... |
1294 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK"))); | 1294 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK"))); |
1295 mock_quic_data.AddRead( | 1295 mock_quic_data.AddRead( |
1296 ConstructDataPacket(2, kClientDataStreamId1, false, true, 0, "hello!")); | 1296 ConstructDataPacket(2, kClientDataStreamId1, false, true, 0, "hello!")); |
1297 mock_quic_data.AddWrite(ConstructAckPacket(2, 1)); | 1297 mock_quic_data.AddWrite(ConstructAckPacket(2, 1)); |
1298 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read | 1298 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read |
1299 mock_quic_data.AddRead(ASYNC, 0); // EOF | 1299 mock_quic_data.AddRead(ASYNC, 0); // EOF |
1300 | 1300 |
1301 mock_quic_data.AddSocketDataToFactory(&socket_factory_); | 1301 mock_quic_data.AddSocketDataToFactory(&socket_factory_); |
1302 | 1302 |
1303 AddHangingNonAlternateProtocolSocketData(); | 1303 AddHangingNonAlternateProtocolSocketData(); |
1304 CreateSessionWithNextProtos(); | 1304 CreateSession(); |
1305 | 1305 |
1306 SendRequestAndExpectHttpResponse("hello world"); | 1306 SendRequestAndExpectHttpResponse("hello world"); |
1307 SendRequestAndExpectQuicResponseOnPort("hello!", 137); | 1307 SendRequestAndExpectQuicResponseOnPort("hello!", 137); |
1308 } | 1308 } |
1309 | 1309 |
1310 TEST_P(QuicNetworkTransactionTest, ConfirmAlternativeService) { | 1310 TEST_P(QuicNetworkTransactionTest, ConfirmAlternativeService) { |
1311 MockRead http_reads[] = { | 1311 MockRead http_reads[] = { |
1312 MockRead("HTTP/1.1 200 OK\r\n"), MockRead(kQuicAlternativeServiceHeader), | 1312 MockRead("HTTP/1.1 200 OK\r\n"), MockRead(kQuicAlternativeServiceHeader), |
1313 MockRead("hello world"), | 1313 MockRead("hello world"), |
1314 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), | 1314 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), |
(...skipping 12 matching lines...) Expand all Loading... |
1327 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK"))); | 1327 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK"))); |
1328 mock_quic_data.AddRead( | 1328 mock_quic_data.AddRead( |
1329 ConstructDataPacket(2, kClientDataStreamId1, false, true, 0, "hello!")); | 1329 ConstructDataPacket(2, kClientDataStreamId1, false, true, 0, "hello!")); |
1330 mock_quic_data.AddWrite(ConstructAckPacket(2, 1)); | 1330 mock_quic_data.AddWrite(ConstructAckPacket(2, 1)); |
1331 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read | 1331 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read |
1332 mock_quic_data.AddRead(ASYNC, 0); // EOF | 1332 mock_quic_data.AddRead(ASYNC, 0); // EOF |
1333 | 1333 |
1334 mock_quic_data.AddSocketDataToFactory(&socket_factory_); | 1334 mock_quic_data.AddSocketDataToFactory(&socket_factory_); |
1335 | 1335 |
1336 AddHangingNonAlternateProtocolSocketData(); | 1336 AddHangingNonAlternateProtocolSocketData(); |
1337 CreateSessionWithNextProtos(); | 1337 CreateSession(); |
1338 | 1338 |
1339 AlternativeService alternative_service(QUIC, | 1339 AlternativeService alternative_service(QUIC, |
1340 HostPortPair::FromURL(request_.url)); | 1340 HostPortPair::FromURL(request_.url)); |
1341 http_server_properties_.MarkAlternativeServiceRecentlyBroken( | 1341 http_server_properties_.MarkAlternativeServiceRecentlyBroken( |
1342 alternative_service); | 1342 alternative_service); |
1343 EXPECT_TRUE(http_server_properties_.WasAlternativeServiceRecentlyBroken( | 1343 EXPECT_TRUE(http_server_properties_.WasAlternativeServiceRecentlyBroken( |
1344 alternative_service)); | 1344 alternative_service)); |
1345 | 1345 |
1346 SendRequestAndExpectHttpResponse("hello world"); | 1346 SendRequestAndExpectHttpResponse("hello world"); |
1347 SendRequestAndExpectQuicResponse("hello!"); | 1347 SendRequestAndExpectQuicResponse("hello!"); |
(...skipping 25 matching lines...) Expand all Loading... |
1373 mock_quic_data.AddRead( | 1373 mock_quic_data.AddRead( |
1374 ConstructDataPacket(2, kClientDataStreamId1, false, true, 0, "hello!")); | 1374 ConstructDataPacket(2, kClientDataStreamId1, false, true, 0, "hello!")); |
1375 mock_quic_data.AddWrite(ConstructAckPacket(2, 1)); | 1375 mock_quic_data.AddWrite(ConstructAckPacket(2, 1)); |
1376 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read | 1376 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read |
1377 mock_quic_data.AddRead(ASYNC, 0); // EOF | 1377 mock_quic_data.AddRead(ASYNC, 0); // EOF |
1378 | 1378 |
1379 mock_quic_data.AddSocketDataToFactory(&socket_factory_); | 1379 mock_quic_data.AddSocketDataToFactory(&socket_factory_); |
1380 | 1380 |
1381 AddHangingNonAlternateProtocolSocketData(); | 1381 AddHangingNonAlternateProtocolSocketData(); |
1382 params_.alternative_service_probability_threshold = 0.25; | 1382 params_.alternative_service_probability_threshold = 0.25; |
1383 CreateSessionWithNextProtos(); | 1383 CreateSession(); |
1384 | 1384 |
1385 SendRequestAndExpectHttpResponse("hello world"); | 1385 SendRequestAndExpectHttpResponse("hello world"); |
1386 SendRequestAndExpectQuicResponse("hello!"); | 1386 SendRequestAndExpectQuicResponse("hello!"); |
1387 } | 1387 } |
1388 | 1388 |
1389 TEST_P(QuicNetworkTransactionTest, | 1389 TEST_P(QuicNetworkTransactionTest, |
1390 DontUseAlternativeServiceProbabilityForQuic) { | 1390 DontUseAlternativeServiceProbabilityForQuic) { |
1391 MockRead http_reads[] = { | 1391 MockRead http_reads[] = { |
1392 MockRead("HTTP/1.1 200 OK\r\n"), | 1392 MockRead("HTTP/1.1 200 OK\r\n"), |
1393 MockRead(kQuicAlternativeService50pctHeader), MockRead("hello world"), | 1393 MockRead(kQuicAlternativeService50pctHeader), MockRead("hello world"), |
1394 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), | 1394 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), |
1395 MockRead(ASYNC, OK)}; | 1395 MockRead(ASYNC, OK)}; |
1396 | 1396 |
1397 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), nullptr, | 1397 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), nullptr, |
1398 0); | 1398 0); |
1399 socket_factory_.AddSocketDataProvider(&http_data); | 1399 socket_factory_.AddSocketDataProvider(&http_data); |
1400 socket_factory_.AddSSLSocketDataProvider(&ssl_data_); | 1400 socket_factory_.AddSSLSocketDataProvider(&ssl_data_); |
1401 socket_factory_.AddSocketDataProvider(&http_data); | 1401 socket_factory_.AddSocketDataProvider(&http_data); |
1402 socket_factory_.AddSSLSocketDataProvider(&ssl_data_); | 1402 socket_factory_.AddSSLSocketDataProvider(&ssl_data_); |
1403 | 1403 |
1404 params_.alternative_service_probability_threshold = 0.75; | 1404 params_.alternative_service_probability_threshold = 0.75; |
1405 CreateSessionWithNextProtos(); | 1405 CreateSession(); |
1406 | 1406 |
1407 SendRequestAndExpectHttpResponse("hello world"); | 1407 SendRequestAndExpectHttpResponse("hello world"); |
1408 SendRequestAndExpectHttpResponse("hello world"); | 1408 SendRequestAndExpectHttpResponse("hello world"); |
1409 } | 1409 } |
1410 | 1410 |
1411 TEST_P(QuicNetworkTransactionTest, | 1411 TEST_P(QuicNetworkTransactionTest, |
1412 DontUseAlternativeServiceWithBadProbabilityForQuic) { | 1412 DontUseAlternativeServiceWithBadProbabilityForQuic) { |
1413 MockRead http_reads[] = { | 1413 MockRead http_reads[] = { |
1414 MockRead("HTTP/1.1 200 OK\r\n"), | 1414 MockRead("HTTP/1.1 200 OK\r\n"), |
1415 MockRead("Alt-Svc: quic=\":443\";p=2\r\n\r\n"), MockRead("hello world"), | 1415 MockRead("Alt-Svc: quic=\":443\";p=2\r\n\r\n"), MockRead("hello world"), |
1416 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), | 1416 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), |
1417 MockRead(ASYNC, OK)}; | 1417 MockRead(ASYNC, OK)}; |
1418 | 1418 |
1419 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), nullptr, | 1419 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), nullptr, |
1420 0); | 1420 0); |
1421 socket_factory_.AddSocketDataProvider(&http_data); | 1421 socket_factory_.AddSocketDataProvider(&http_data); |
1422 socket_factory_.AddSSLSocketDataProvider(&ssl_data_); | 1422 socket_factory_.AddSSLSocketDataProvider(&ssl_data_); |
1423 socket_factory_.AddSocketDataProvider(&http_data); | 1423 socket_factory_.AddSocketDataProvider(&http_data); |
1424 socket_factory_.AddSSLSocketDataProvider(&ssl_data_); | 1424 socket_factory_.AddSSLSocketDataProvider(&ssl_data_); |
1425 | 1425 |
1426 params_.alternative_service_probability_threshold = 0.75; | 1426 params_.alternative_service_probability_threshold = 0.75; |
1427 CreateSessionWithNextProtos(); | 1427 CreateSession(); |
1428 | 1428 |
1429 SendRequestAndExpectHttpResponse("hello world"); | 1429 SendRequestAndExpectHttpResponse("hello world"); |
1430 SendRequestAndExpectHttpResponse("hello world"); | 1430 SendRequestAndExpectHttpResponse("hello world"); |
1431 } | 1431 } |
1432 | 1432 |
1433 TEST_P(QuicNetworkTransactionTest, UseAlternativeServiceForQuicForHttps) { | 1433 TEST_P(QuicNetworkTransactionTest, UseAlternativeServiceForQuicForHttps) { |
1434 MockRead http_reads[] = { | 1434 MockRead http_reads[] = { |
1435 MockRead("HTTP/1.1 200 OK\r\n"), MockRead(kQuicAlternativeServiceHeader), | 1435 MockRead("HTTP/1.1 200 OK\r\n"), MockRead(kQuicAlternativeServiceHeader), |
1436 MockRead("hello world"), | 1436 MockRead("hello world"), |
1437 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), | 1437 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), |
(...skipping 11 matching lines...) Expand all Loading... |
1449 mock_quic_data.AddRead(ConstructResponseHeadersPacket( | 1449 mock_quic_data.AddRead(ConstructResponseHeadersPacket( |
1450 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK"))); | 1450 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK"))); |
1451 mock_quic_data.AddRead( | 1451 mock_quic_data.AddRead( |
1452 ConstructDataPacket(2, kClientDataStreamId1, false, true, 0, "hello!")); | 1452 ConstructDataPacket(2, kClientDataStreamId1, false, true, 0, "hello!")); |
1453 mock_quic_data.AddWrite(ConstructAckPacket(2, 1)); | 1453 mock_quic_data.AddWrite(ConstructAckPacket(2, 1)); |
1454 mock_quic_data.AddRead(SYNCHRONOUS, 0); // EOF | 1454 mock_quic_data.AddRead(SYNCHRONOUS, 0); // EOF |
1455 | 1455 |
1456 mock_quic_data.AddSocketDataToFactory(&socket_factory_); | 1456 mock_quic_data.AddSocketDataToFactory(&socket_factory_); |
1457 | 1457 |
1458 AddHangingNonAlternateProtocolSocketData(); | 1458 AddHangingNonAlternateProtocolSocketData(); |
1459 CreateSessionWithNextProtos(); | 1459 CreateSession(); |
1460 | 1460 |
1461 // TODO(rtenneti): Test QUIC over HTTPS, GetSSLInfo(). | 1461 // TODO(rtenneti): Test QUIC over HTTPS, GetSSLInfo(). |
1462 SendRequestAndExpectHttpResponse("hello world"); | 1462 SendRequestAndExpectHttpResponse("hello world"); |
1463 } | 1463 } |
1464 | 1464 |
1465 TEST_P(QuicNetworkTransactionTest, UseAlternateProtocolForQuic) { | 1465 TEST_P(QuicNetworkTransactionTest, UseAlternateProtocolForQuic) { |
1466 MockRead http_reads[] = { | 1466 MockRead http_reads[] = { |
1467 MockRead("HTTP/1.1 200 OK\r\n"), MockRead(kQuicAlternateProtocolHeader), | 1467 MockRead("HTTP/1.1 200 OK\r\n"), MockRead(kQuicAlternateProtocolHeader), |
1468 MockRead("hello world"), | 1468 MockRead("hello world"), |
1469 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), | 1469 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), |
(...skipping 15 matching lines...) Expand all Loading... |
1485 mock_quic_data.AddWrite(ConstructAckPacket(2, 1)); | 1485 mock_quic_data.AddWrite(ConstructAckPacket(2, 1)); |
1486 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read | 1486 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read |
1487 mock_quic_data.AddRead(ASYNC, 0); // EOF | 1487 mock_quic_data.AddRead(ASYNC, 0); // EOF |
1488 | 1488 |
1489 mock_quic_data.AddSocketDataToFactory(&socket_factory_); | 1489 mock_quic_data.AddSocketDataToFactory(&socket_factory_); |
1490 | 1490 |
1491 // The non-alternate protocol job needs to hang in order to guarantee that | 1491 // The non-alternate protocol job needs to hang in order to guarantee that |
1492 // the alternate-protocol job will "win". | 1492 // the alternate-protocol job will "win". |
1493 AddHangingNonAlternateProtocolSocketData(); | 1493 AddHangingNonAlternateProtocolSocketData(); |
1494 | 1494 |
1495 CreateSessionWithNextProtos(); | 1495 params_.parse_alternative_services = false; |
| 1496 params_.parse_alternative_services = false; |
| 1497 CreateSession(); |
1496 | 1498 |
1497 SendRequestAndExpectHttpResponse("hello world"); | 1499 SendRequestAndExpectHttpResponse("hello world"); |
1498 SendRequestAndExpectQuicResponse("hello!"); | 1500 SendRequestAndExpectQuicResponse("hello!"); |
1499 } | 1501 } |
1500 | 1502 |
1501 TEST_P(QuicNetworkTransactionTest, AlternateProtocolDifferentPort) { | 1503 TEST_P(QuicNetworkTransactionTest, AlternateProtocolDifferentPort) { |
1502 MockRead http_reads[] = { | 1504 MockRead http_reads[] = { |
1503 MockRead("HTTP/1.1 200 OK\r\n"), | 1505 MockRead("HTTP/1.1 200 OK\r\n"), |
1504 MockRead(kQuicAlternateProtocolDifferentPortHeader), | 1506 MockRead(kQuicAlternateProtocolDifferentPortHeader), |
1505 MockRead("hello world"), | 1507 MockRead("hello world"), |
(...skipping 16 matching lines...) Expand all Loading... |
1522 mock_quic_data.AddWrite(ConstructAckPacket(2, 1)); | 1524 mock_quic_data.AddWrite(ConstructAckPacket(2, 1)); |
1523 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read | 1525 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read |
1524 mock_quic_data.AddRead(ASYNC, 0); // EOF | 1526 mock_quic_data.AddRead(ASYNC, 0); // EOF |
1525 | 1527 |
1526 mock_quic_data.AddSocketDataToFactory(&socket_factory_); | 1528 mock_quic_data.AddSocketDataToFactory(&socket_factory_); |
1527 | 1529 |
1528 // The non-alternate protocol job needs to hang in order to guarantee that | 1530 // The non-alternate protocol job needs to hang in order to guarantee that |
1529 // the alternate-protocol job will "win". | 1531 // the alternate-protocol job will "win". |
1530 AddHangingNonAlternateProtocolSocketData(); | 1532 AddHangingNonAlternateProtocolSocketData(); |
1531 | 1533 |
1532 CreateSessionWithNextProtos(); | 1534 params_.parse_alternative_services = false; |
| 1535 CreateSession(); |
1533 | 1536 |
1534 SendRequestAndExpectHttpResponse("hello world"); | 1537 SendRequestAndExpectHttpResponse("hello world"); |
1535 SendRequestAndExpectQuicResponseOnPort("hello!", 137); | 1538 SendRequestAndExpectQuicResponseOnPort("hello!", 137); |
1536 } | 1539 } |
1537 | 1540 |
1538 TEST_P(QuicNetworkTransactionTest, ConfirmAlternateProtocol) { | 1541 TEST_P(QuicNetworkTransactionTest, ConfirmAlternateProtocol) { |
1539 MockRead http_reads[] = { | 1542 MockRead http_reads[] = { |
1540 MockRead("HTTP/1.1 200 OK\r\n"), MockRead(kQuicAlternateProtocolHeader), | 1543 MockRead("HTTP/1.1 200 OK\r\n"), MockRead(kQuicAlternateProtocolHeader), |
1541 MockRead("hello world"), | 1544 MockRead("hello world"), |
1542 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), | 1545 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), |
(...skipping 15 matching lines...) Expand all Loading... |
1558 mock_quic_data.AddWrite(ConstructAckPacket(2, 1)); | 1561 mock_quic_data.AddWrite(ConstructAckPacket(2, 1)); |
1559 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read | 1562 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read |
1560 mock_quic_data.AddRead(ASYNC, 0); // EOF | 1563 mock_quic_data.AddRead(ASYNC, 0); // EOF |
1561 | 1564 |
1562 mock_quic_data.AddSocketDataToFactory(&socket_factory_); | 1565 mock_quic_data.AddSocketDataToFactory(&socket_factory_); |
1563 | 1566 |
1564 // The non-alternate protocol job needs to hang in order to guarantee that | 1567 // The non-alternate protocol job needs to hang in order to guarantee that |
1565 // the alternate-protocol job will "win". | 1568 // the alternate-protocol job will "win". |
1566 AddHangingNonAlternateProtocolSocketData(); | 1569 AddHangingNonAlternateProtocolSocketData(); |
1567 | 1570 |
1568 CreateSessionWithNextProtos(); | 1571 params_.parse_alternative_services = false; |
| 1572 CreateSession(); |
1569 | 1573 |
1570 AlternativeService alternative_service(QUIC, | 1574 AlternativeService alternative_service(QUIC, |
1571 HostPortPair::FromURL(request_.url)); | 1575 HostPortPair::FromURL(request_.url)); |
1572 http_server_properties_.MarkAlternativeServiceRecentlyBroken( | 1576 http_server_properties_.MarkAlternativeServiceRecentlyBroken( |
1573 alternative_service); | 1577 alternative_service); |
1574 EXPECT_TRUE(http_server_properties_.WasAlternativeServiceRecentlyBroken( | 1578 EXPECT_TRUE(http_server_properties_.WasAlternativeServiceRecentlyBroken( |
1575 alternative_service)); | 1579 alternative_service)); |
1576 | 1580 |
1577 SendRequestAndExpectHttpResponse("hello world"); | 1581 SendRequestAndExpectHttpResponse("hello world"); |
1578 SendRequestAndExpectQuicResponse("hello!"); | 1582 SendRequestAndExpectQuicResponse("hello!"); |
1579 | 1583 |
1580 mock_quic_data.Resume(); | 1584 mock_quic_data.Resume(); |
1581 | 1585 |
1582 EXPECT_FALSE(http_server_properties_.WasAlternativeServiceRecentlyBroken( | 1586 EXPECT_FALSE(http_server_properties_.WasAlternativeServiceRecentlyBroken( |
1583 alternative_service)); | 1587 alternative_service)); |
1584 } | 1588 } |
1585 | 1589 |
1586 TEST_P(QuicNetworkTransactionTest, UseAlternateProtocolProbabilityForQuic) { | 1590 TEST_P(QuicNetworkTransactionTest, UseAlternateProtocolProbabilityForQuic) { |
| 1591 params_.parse_alternative_services = false; |
1587 MockRead http_reads[] = { | 1592 MockRead http_reads[] = { |
1588 MockRead("HTTP/1.1 200 OK\r\n"), | 1593 MockRead("HTTP/1.1 200 OK\r\n"), |
1589 MockRead(kQuicAlternateProtocol50pctHeader), MockRead("hello world"), | 1594 MockRead(kQuicAlternateProtocol50pctHeader), MockRead("hello world"), |
1590 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), | 1595 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), |
1591 MockRead(ASYNC, OK)}; | 1596 MockRead(ASYNC, OK)}; |
1592 | 1597 |
1593 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), nullptr, | 1598 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), nullptr, |
1594 0); | 1599 0); |
1595 socket_factory_.AddSocketDataProvider(&http_data); | 1600 socket_factory_.AddSocketDataProvider(&http_data); |
1596 | 1601 |
1597 MockQuicData mock_quic_data; | 1602 MockQuicData mock_quic_data; |
1598 mock_quic_data.AddWrite( | 1603 mock_quic_data.AddWrite( |
1599 ConstructRequestHeadersPacket(1, kClientDataStreamId1, true, true, | 1604 ConstructRequestHeadersPacket(1, kClientDataStreamId1, true, true, |
1600 GetRequestHeaders("GET", "https", "/"))); | 1605 GetRequestHeaders("GET", "https", "/"))); |
1601 mock_quic_data.AddRead(ConstructResponseHeadersPacket( | 1606 mock_quic_data.AddRead(ConstructResponseHeadersPacket( |
1602 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK"))); | 1607 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK"))); |
1603 mock_quic_data.AddRead( | 1608 mock_quic_data.AddRead( |
1604 ConstructDataPacket(2, kClientDataStreamId1, false, true, 0, "hello!")); | 1609 ConstructDataPacket(2, kClientDataStreamId1, false, true, 0, "hello!")); |
1605 mock_quic_data.AddWrite(ConstructAckPacket(2, 1)); | 1610 mock_quic_data.AddWrite(ConstructAckPacket(2, 1)); |
1606 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read | 1611 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read |
1607 mock_quic_data.AddRead(ASYNC, 0); // EOF | 1612 mock_quic_data.AddRead(ASYNC, 0); // EOF |
1608 | 1613 |
1609 mock_quic_data.AddSocketDataToFactory(&socket_factory_); | 1614 mock_quic_data.AddSocketDataToFactory(&socket_factory_); |
1610 | 1615 |
1611 // The non-alternate protocol job needs to hang in order to guarantee that | 1616 // The non-alternate protocol job needs to hang in order to guarantee that |
1612 // the alternate-protocol job will "win". | 1617 // the alternate-protocol job will "win". |
1613 AddHangingNonAlternateProtocolSocketData(); | 1618 AddHangingNonAlternateProtocolSocketData(); |
1614 | 1619 |
1615 params_.alternative_service_probability_threshold = .25; | 1620 params_.alternative_service_probability_threshold = .25; |
1616 CreateSessionWithNextProtos(); | 1621 params_.parse_alternative_services = false; |
| 1622 CreateSession(); |
1617 | 1623 |
1618 SendRequestAndExpectHttpResponse("hello world"); | 1624 SendRequestAndExpectHttpResponse("hello world"); |
1619 SendRequestAndExpectQuicResponse("hello!"); | 1625 SendRequestAndExpectQuicResponse("hello!"); |
1620 } | 1626 } |
1621 | 1627 |
1622 TEST_P(QuicNetworkTransactionTest, DontUseAlternateProtocolProbabilityForQuic) { | 1628 TEST_P(QuicNetworkTransactionTest, DontUseAlternateProtocolProbabilityForQuic) { |
| 1629 params_.parse_alternative_services = false; |
1623 MockRead http_reads[] = { | 1630 MockRead http_reads[] = { |
1624 MockRead("HTTP/1.1 200 OK\r\n"), | 1631 MockRead("HTTP/1.1 200 OK\r\n"), |
1625 MockRead(kQuicAlternateProtocol50pctHeader), MockRead("hello world"), | 1632 MockRead(kQuicAlternateProtocol50pctHeader), MockRead("hello world"), |
1626 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), | 1633 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), |
1627 MockRead(ASYNC, OK)}; | 1634 MockRead(ASYNC, OK)}; |
1628 | 1635 |
1629 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), nullptr, | 1636 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), nullptr, |
1630 0); | 1637 0); |
1631 socket_factory_.AddSocketDataProvider(&http_data); | 1638 socket_factory_.AddSocketDataProvider(&http_data); |
1632 socket_factory_.AddSSLSocketDataProvider(&ssl_data_); | 1639 socket_factory_.AddSSLSocketDataProvider(&ssl_data_); |
1633 socket_factory_.AddSocketDataProvider(&http_data); | 1640 socket_factory_.AddSocketDataProvider(&http_data); |
1634 socket_factory_.AddSSLSocketDataProvider(&ssl_data_); | 1641 socket_factory_.AddSSLSocketDataProvider(&ssl_data_); |
1635 | 1642 |
1636 params_.alternative_service_probability_threshold = .75; | 1643 params_.alternative_service_probability_threshold = .75; |
1637 CreateSessionWithNextProtos(); | 1644 CreateSession(); |
1638 | 1645 |
1639 SendRequestAndExpectHttpResponse("hello world"); | 1646 SendRequestAndExpectHttpResponse("hello world"); |
1640 SendRequestAndExpectHttpResponse("hello world"); | 1647 SendRequestAndExpectHttpResponse("hello world"); |
1641 } | 1648 } |
1642 | 1649 |
1643 TEST_P(QuicNetworkTransactionTest, | 1650 TEST_P(QuicNetworkTransactionTest, |
1644 DontUseAlternateProtocolWithBadProbabilityForQuic) { | 1651 DontUseAlternateProtocolWithBadProbabilityForQuic) { |
| 1652 params_.parse_alternative_services = false; |
1645 MockRead http_reads[] = { | 1653 MockRead http_reads[] = { |
1646 MockRead("HTTP/1.1 200 OK\r\n"), | 1654 MockRead("HTTP/1.1 200 OK\r\n"), |
1647 MockRead("Alternate-Protocol: 443:quic,p=2\r\n\r\n"), | 1655 MockRead("Alternate-Protocol: 443:quic,p=2\r\n\r\n"), |
1648 MockRead("hello world"), | 1656 MockRead("hello world"), |
1649 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), | 1657 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), |
1650 MockRead(ASYNC, OK)}; | 1658 MockRead(ASYNC, OK)}; |
1651 | 1659 |
1652 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), nullptr, | 1660 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), nullptr, |
1653 0); | 1661 0); |
1654 socket_factory_.AddSocketDataProvider(&http_data); | 1662 socket_factory_.AddSocketDataProvider(&http_data); |
1655 socket_factory_.AddSSLSocketDataProvider(&ssl_data_); | 1663 socket_factory_.AddSSLSocketDataProvider(&ssl_data_); |
1656 socket_factory_.AddSocketDataProvider(&http_data); | 1664 socket_factory_.AddSocketDataProvider(&http_data); |
1657 socket_factory_.AddSSLSocketDataProvider(&ssl_data_); | 1665 socket_factory_.AddSSLSocketDataProvider(&ssl_data_); |
1658 | 1666 |
1659 params_.alternative_service_probability_threshold = .75; | 1667 params_.alternative_service_probability_threshold = .75; |
1660 CreateSessionWithNextProtos(); | 1668 CreateSession(); |
1661 | 1669 |
1662 SendRequestAndExpectHttpResponse("hello world"); | 1670 SendRequestAndExpectHttpResponse("hello world"); |
1663 SendRequestAndExpectHttpResponse("hello world"); | 1671 SendRequestAndExpectHttpResponse("hello world"); |
1664 } | 1672 } |
1665 | 1673 |
1666 TEST_P(QuicNetworkTransactionTest, UseAlternateProtocolForQuicForHttps) { | 1674 TEST_P(QuicNetworkTransactionTest, UseAlternateProtocolForQuicForHttps) { |
| 1675 params_.parse_alternative_services = false; |
1667 MockRead http_reads[] = { | 1676 MockRead http_reads[] = { |
1668 MockRead("HTTP/1.1 200 OK\r\n"), MockRead(kQuicAlternateProtocolHeader), | 1677 MockRead("HTTP/1.1 200 OK\r\n"), MockRead(kQuicAlternateProtocolHeader), |
1669 MockRead("hello world"), | 1678 MockRead("hello world"), |
1670 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), | 1679 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), |
1671 MockRead(ASYNC, OK)}; | 1680 MockRead(ASYNC, OK)}; |
1672 | 1681 |
1673 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), nullptr, | 1682 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), nullptr, |
1674 0); | 1683 0); |
1675 socket_factory_.AddSocketDataProvider(&http_data); | 1684 socket_factory_.AddSocketDataProvider(&http_data); |
1676 | 1685 |
1677 MockQuicData mock_quic_data; | 1686 MockQuicData mock_quic_data; |
1678 mock_quic_data.AddWrite( | 1687 mock_quic_data.AddWrite( |
1679 ConstructRequestHeadersPacket(1, kClientDataStreamId1, true, true, | 1688 ConstructRequestHeadersPacket(1, kClientDataStreamId1, true, true, |
1680 GetRequestHeaders("GET", "https", "/"))); | 1689 GetRequestHeaders("GET", "https", "/"))); |
1681 mock_quic_data.AddRead(ConstructResponseHeadersPacket( | 1690 mock_quic_data.AddRead(ConstructResponseHeadersPacket( |
1682 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK"))); | 1691 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK"))); |
1683 mock_quic_data.AddRead( | 1692 mock_quic_data.AddRead( |
1684 ConstructDataPacket(2, kClientDataStreamId1, false, true, 0, "hello!")); | 1693 ConstructDataPacket(2, kClientDataStreamId1, false, true, 0, "hello!")); |
1685 mock_quic_data.AddWrite(ConstructAckPacket(2, 1)); | 1694 mock_quic_data.AddWrite(ConstructAckPacket(2, 1)); |
1686 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read | 1695 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read |
1687 mock_quic_data.AddRead(ASYNC, 0); // EOF | 1696 mock_quic_data.AddRead(ASYNC, 0); // EOF |
1688 | 1697 |
1689 mock_quic_data.AddSocketDataToFactory(&socket_factory_); | 1698 mock_quic_data.AddSocketDataToFactory(&socket_factory_); |
1690 | 1699 |
1691 // The non-alternate protocol job needs to hang in order to guarantee that | 1700 // The non-alternate protocol job needs to hang in order to guarantee that |
1692 // the alternate-protocol job will "win". | 1701 // the alternate-protocol job will "win". |
1693 AddHangingNonAlternateProtocolSocketData(); | 1702 AddHangingNonAlternateProtocolSocketData(); |
1694 | 1703 |
1695 CreateSessionWithNextProtos(); | 1704 CreateSession(); |
1696 | 1705 |
1697 // TODO(rtenneti): Test QUIC over HTTPS, GetSSLInfo(). | 1706 // TODO(rtenneti): Test QUIC over HTTPS, GetSSLInfo(). |
1698 SendRequestAndExpectHttpResponse("hello world"); | 1707 SendRequestAndExpectHttpResponse("hello world"); |
1699 } | 1708 } |
1700 | 1709 |
1701 class QuicAltSvcCertificateVerificationTest | 1710 class QuicAltSvcCertificateVerificationTest |
1702 : public QuicNetworkTransactionTest { | 1711 : public QuicNetworkTransactionTest { |
1703 public: | 1712 public: |
1704 void Run(bool valid) { | 1713 void Run(bool valid) { |
1705 HostPortPair origin(valid ? "mail.example.org" : "mail.example.com", 443); | 1714 HostPortPair origin(valid ? "mail.example.org" : "mail.example.com", 443); |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1737 crypto_client_stream_factory_.set_handshake_mode( | 1746 crypto_client_stream_factory_.set_handshake_mode( |
1738 MockCryptoClientStream::CONFIRM_HANDSHAKE); | 1747 MockCryptoClientStream::CONFIRM_HANDSHAKE); |
1739 | 1748 |
1740 // Connection to |origin| fails, so that success of |request| depends on | 1749 // Connection to |origin| fails, so that success of |request| depends on |
1741 // connection to |alternate| only. | 1750 // connection to |alternate| only. |
1742 MockConnect refused_connect(ASYNC, ERR_CONNECTION_REFUSED); | 1751 MockConnect refused_connect(ASYNC, ERR_CONNECTION_REFUSED); |
1743 StaticSocketDataProvider refused_data; | 1752 StaticSocketDataProvider refused_data; |
1744 refused_data.set_connect_data(refused_connect); | 1753 refused_data.set_connect_data(refused_connect); |
1745 socket_factory_.AddSocketDataProvider(&refused_data); | 1754 socket_factory_.AddSocketDataProvider(&refused_data); |
1746 | 1755 |
1747 CreateSessionWithNextProtos(); | 1756 CreateSession(); |
1748 AlternativeService alternative_service(QUIC, alternative); | 1757 AlternativeService alternative_service(QUIC, alternative); |
1749 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); | 1758 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); |
1750 session_->http_server_properties()->SetAlternativeService( | 1759 session_->http_server_properties()->SetAlternativeService( |
1751 origin, alternative_service, 1.0, expiration); | 1760 origin, alternative_service, 1.0, expiration); |
1752 scoped_ptr<HttpNetworkTransaction> trans( | 1761 scoped_ptr<HttpNetworkTransaction> trans( |
1753 new HttpNetworkTransaction(DEFAULT_PRIORITY, session_.get())); | 1762 new HttpNetworkTransaction(DEFAULT_PRIORITY, session_.get())); |
1754 TestCompletionCallback callback; | 1763 TestCompletionCallback callback; |
1755 int rv = trans->Start(&request_, callback.callback(), net_log_.bound()); | 1764 int rv = trans->Start(&request_, callback.callback(), net_log_.bound()); |
1756 EXPECT_EQ(ERR_IO_PENDING, rv); | 1765 EXPECT_EQ(ERR_IO_PENDING, rv); |
1757 rv = callback.WaitForResult(); | 1766 rv = callback.WaitForResult(); |
(...skipping 16 matching lines...) Expand all Loading... |
1774 RequestSucceedsWithValidCertificate) { | 1783 RequestSucceedsWithValidCertificate) { |
1775 Run(true); | 1784 Run(true); |
1776 } | 1785 } |
1777 | 1786 |
1778 TEST_P(QuicAltSvcCertificateVerificationTest, | 1787 TEST_P(QuicAltSvcCertificateVerificationTest, |
1779 RequestFailsWithInvalidCertificate) { | 1788 RequestFailsWithInvalidCertificate) { |
1780 Run(false); | 1789 Run(false); |
1781 } | 1790 } |
1782 | 1791 |
1783 TEST_P(QuicNetworkTransactionTest, HungAlternateProtocol) { | 1792 TEST_P(QuicNetworkTransactionTest, HungAlternateProtocol) { |
| 1793 params_.parse_alternative_services = false; |
1784 crypto_client_stream_factory_.set_handshake_mode( | 1794 crypto_client_stream_factory_.set_handshake_mode( |
1785 MockCryptoClientStream::COLD_START); | 1795 MockCryptoClientStream::COLD_START); |
1786 | 1796 |
1787 MockWrite http_writes[] = { | 1797 MockWrite http_writes[] = { |
1788 MockWrite(SYNCHRONOUS, 0, "GET / HTTP/1.1\r\n"), | 1798 MockWrite(SYNCHRONOUS, 0, "GET / HTTP/1.1\r\n"), |
1789 MockWrite(SYNCHRONOUS, 1, "Host: mail.example.org\r\n"), | 1799 MockWrite(SYNCHRONOUS, 1, "Host: mail.example.org\r\n"), |
1790 MockWrite(SYNCHRONOUS, 2, "Connection: keep-alive\r\n\r\n")}; | 1800 MockWrite(SYNCHRONOUS, 2, "Connection: keep-alive\r\n\r\n")}; |
1791 | 1801 |
1792 MockRead http_reads[] = { | 1802 MockRead http_reads[] = { |
1793 MockRead(SYNCHRONOUS, 3, "HTTP/1.1 200 OK\r\n"), | 1803 MockRead(SYNCHRONOUS, 3, "HTTP/1.1 200 OK\r\n"), |
(...skipping 15 matching lines...) Expand all Loading... |
1809 SequencedSocketData quic_data(quic_reads, arraysize(quic_reads), quic_writes, | 1819 SequencedSocketData quic_data(quic_reads, arraysize(quic_reads), quic_writes, |
1810 arraysize(quic_writes)); | 1820 arraysize(quic_writes)); |
1811 socket_factory.AddSocketDataProvider(&quic_data); | 1821 socket_factory.AddSocketDataProvider(&quic_data); |
1812 | 1822 |
1813 // The HTTP transaction will complete. | 1823 // The HTTP transaction will complete. |
1814 SequencedSocketData http_data2(http_reads, arraysize(http_reads), http_writes, | 1824 SequencedSocketData http_data2(http_reads, arraysize(http_reads), http_writes, |
1815 arraysize(http_writes)); | 1825 arraysize(http_writes)); |
1816 socket_factory.AddSocketDataProvider(&http_data2); | 1826 socket_factory.AddSocketDataProvider(&http_data2); |
1817 socket_factory.AddSSLSocketDataProvider(&ssl_data_); | 1827 socket_factory.AddSSLSocketDataProvider(&ssl_data_); |
1818 | 1828 |
1819 CreateSessionWithFactory(&socket_factory, true); | 1829 CreateSessionWithFactory(&socket_factory); |
1820 | 1830 |
1821 // Run the first request. | 1831 // Run the first request. |
1822 SendRequestAndExpectHttpResponse("hello world"); | 1832 SendRequestAndExpectHttpResponse("hello world"); |
1823 ASSERT_TRUE(http_data.AllReadDataConsumed()); | 1833 ASSERT_TRUE(http_data.AllReadDataConsumed()); |
1824 ASSERT_TRUE(http_data.AllWriteDataConsumed()); | 1834 ASSERT_TRUE(http_data.AllWriteDataConsumed()); |
1825 | 1835 |
1826 // Now run the second request in which the QUIC socket hangs, | 1836 // Now run the second request in which the QUIC socket hangs, |
1827 // and verify the the transaction continues over HTTP. | 1837 // and verify the the transaction continues over HTTP. |
1828 SendRequestAndExpectHttpResponse("hello world"); | 1838 SendRequestAndExpectHttpResponse("hello world"); |
1829 base::RunLoop().RunUntilIdle(); | 1839 base::RunLoop().RunUntilIdle(); |
(...skipping 15 matching lines...) Expand all Loading... |
1845 mock_quic_data.AddWrite(ConstructAckPacket(2, 1)); | 1855 mock_quic_data.AddWrite(ConstructAckPacket(2, 1)); |
1846 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read | 1856 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read |
1847 mock_quic_data.AddRead(ASYNC, 0); // EOF | 1857 mock_quic_data.AddRead(ASYNC, 0); // EOF |
1848 | 1858 |
1849 mock_quic_data.AddSocketDataToFactory(&socket_factory_); | 1859 mock_quic_data.AddSocketDataToFactory(&socket_factory_); |
1850 | 1860 |
1851 // The non-alternate protocol job needs to hang in order to guarantee that | 1861 // The non-alternate protocol job needs to hang in order to guarantee that |
1852 // the alternate-protocol job will "win". | 1862 // the alternate-protocol job will "win". |
1853 AddHangingNonAlternateProtocolSocketData(); | 1863 AddHangingNonAlternateProtocolSocketData(); |
1854 | 1864 |
1855 CreateSessionWithNextProtos(); | 1865 CreateSession(); |
1856 AddQuicAlternateProtocolMapping(MockCryptoClientStream::ZERO_RTT); | 1866 AddQuicAlternateProtocolMapping(MockCryptoClientStream::ZERO_RTT); |
1857 SendRequestAndExpectQuicResponse("hello!"); | 1867 SendRequestAndExpectQuicResponse("hello!"); |
1858 } | 1868 } |
1859 | 1869 |
1860 TEST_P(QuicNetworkTransactionTest, ZeroRTTWithNoHttpRace) { | 1870 TEST_P(QuicNetworkTransactionTest, ZeroRTTWithNoHttpRace) { |
1861 MockQuicData mock_quic_data; | 1871 MockQuicData mock_quic_data; |
1862 mock_quic_data.AddWrite( | 1872 mock_quic_data.AddWrite( |
1863 ConstructRequestHeadersPacket(1, kClientDataStreamId1, true, true, | 1873 ConstructRequestHeadersPacket(1, kClientDataStreamId1, true, true, |
1864 GetRequestHeaders("GET", "https", "/"))); | 1874 GetRequestHeaders("GET", "https", "/"))); |
1865 mock_quic_data.AddRead(ConstructResponseHeadersPacket( | 1875 mock_quic_data.AddRead(ConstructResponseHeadersPacket( |
1866 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK"))); | 1876 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK"))); |
1867 mock_quic_data.AddRead( | 1877 mock_quic_data.AddRead( |
1868 ConstructDataPacket(2, kClientDataStreamId1, false, true, 0, "hello!")); | 1878 ConstructDataPacket(2, kClientDataStreamId1, false, true, 0, "hello!")); |
1869 mock_quic_data.AddWrite(ConstructAckPacket(2, 1)); | 1879 mock_quic_data.AddWrite(ConstructAckPacket(2, 1)); |
1870 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read | 1880 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read |
1871 mock_quic_data.AddRead(ASYNC, 0); // EOF | 1881 mock_quic_data.AddRead(ASYNC, 0); // EOF |
1872 mock_quic_data.AddSocketDataToFactory(&socket_factory_); | 1882 mock_quic_data.AddSocketDataToFactory(&socket_factory_); |
1873 | 1883 |
1874 // In order for a new QUIC session to be established via alternate-protocol | 1884 // In order for a new QUIC session to be established via alternate-protocol |
1875 // without racing an HTTP connection, we need the host resolution to happen | 1885 // without racing an HTTP connection, we need the host resolution to happen |
1876 // synchronously. | 1886 // synchronously. |
1877 host_resolver_.set_synchronous_mode(true); | 1887 host_resolver_.set_synchronous_mode(true); |
1878 host_resolver_.rules()->AddIPLiteralRule("mail.example.org", "192.168.0.1", | 1888 host_resolver_.rules()->AddIPLiteralRule("mail.example.org", "192.168.0.1", |
1879 ""); | 1889 ""); |
1880 HostResolver::RequestInfo info(HostPortPair("mail.example.org", 443)); | 1890 HostResolver::RequestInfo info(HostPortPair("mail.example.org", 443)); |
1881 AddressList address; | 1891 AddressList address; |
1882 host_resolver_.Resolve(info, DEFAULT_PRIORITY, &address, CompletionCallback(), | 1892 host_resolver_.Resolve(info, DEFAULT_PRIORITY, &address, CompletionCallback(), |
1883 nullptr, net_log_.bound()); | 1893 nullptr, net_log_.bound()); |
1884 | 1894 |
1885 CreateSessionWithNextProtos(); | 1895 CreateSession(); |
1886 AddQuicAlternateProtocolMapping(MockCryptoClientStream::ZERO_RTT); | 1896 AddQuicAlternateProtocolMapping(MockCryptoClientStream::ZERO_RTT); |
1887 SendRequestAndExpectQuicResponse("hello!"); | 1897 SendRequestAndExpectQuicResponse("hello!"); |
1888 } | 1898 } |
1889 | 1899 |
1890 TEST_P(QuicNetworkTransactionTest, ZeroRTTWithProxy) { | 1900 TEST_P(QuicNetworkTransactionTest, ZeroRTTWithProxy) { |
1891 proxy_service_ = ProxyService::CreateFixedFromPacResult("PROXY myproxy:70"); | 1901 proxy_service_ = ProxyService::CreateFixedFromPacResult("PROXY myproxy:70"); |
1892 | 1902 |
1893 // Since we are using a proxy, the QUIC job will not succeed. | 1903 // Since we are using a proxy, the QUIC job will not succeed. |
1894 MockWrite http_writes[] = { | 1904 MockWrite http_writes[] = { |
1895 MockWrite(SYNCHRONOUS, 0, "GET http://mail.example.org/ HTTP/1.1\r\n"), | 1905 MockWrite(SYNCHRONOUS, 0, "GET http://mail.example.org/ HTTP/1.1\r\n"), |
(...skipping 14 matching lines...) Expand all Loading... |
1910 // synchronously. | 1920 // synchronously. |
1911 host_resolver_.set_synchronous_mode(true); | 1921 host_resolver_.set_synchronous_mode(true); |
1912 host_resolver_.rules()->AddIPLiteralRule("mail.example.org", "192.168.0.1", | 1922 host_resolver_.rules()->AddIPLiteralRule("mail.example.org", "192.168.0.1", |
1913 ""); | 1923 ""); |
1914 HostResolver::RequestInfo info(HostPortPair("mail.example.org", 443)); | 1924 HostResolver::RequestInfo info(HostPortPair("mail.example.org", 443)); |
1915 AddressList address; | 1925 AddressList address; |
1916 host_resolver_.Resolve(info, DEFAULT_PRIORITY, &address, CompletionCallback(), | 1926 host_resolver_.Resolve(info, DEFAULT_PRIORITY, &address, CompletionCallback(), |
1917 nullptr, net_log_.bound()); | 1927 nullptr, net_log_.bound()); |
1918 | 1928 |
1919 request_.url = GURL("http://mail.example.org/"); | 1929 request_.url = GURL("http://mail.example.org/"); |
1920 CreateSessionWithNextProtos(); | 1930 CreateSession(); |
1921 AddQuicAlternateProtocolMapping(MockCryptoClientStream::ZERO_RTT); | 1931 AddQuicAlternateProtocolMapping(MockCryptoClientStream::ZERO_RTT); |
1922 SendRequestAndExpectHttpResponse("hello world"); | 1932 SendRequestAndExpectHttpResponse("hello world"); |
1923 } | 1933 } |
1924 | 1934 |
1925 TEST_P(QuicNetworkTransactionTest, ZeroRTTWithConfirmationRequired) { | 1935 TEST_P(QuicNetworkTransactionTest, ZeroRTTWithConfirmationRequired) { |
1926 MockQuicData mock_quic_data; | 1936 MockQuicData mock_quic_data; |
1927 mock_quic_data.AddWrite( | 1937 mock_quic_data.AddWrite( |
1928 ConstructRequestHeadersPacket(1, kClientDataStreamId1, true, true, | 1938 ConstructRequestHeadersPacket(1, kClientDataStreamId1, true, true, |
1929 GetRequestHeaders("GET", "https", "/"))); | 1939 GetRequestHeaders("GET", "https", "/"))); |
1930 mock_quic_data.AddRead(ConstructResponseHeadersPacket( | 1940 mock_quic_data.AddRead(ConstructResponseHeadersPacket( |
(...skipping 14 matching lines...) Expand all Loading... |
1945 // connection to the the server, in this test we require confirmation | 1955 // connection to the the server, in this test we require confirmation |
1946 // before encrypting so the HTTP job will still start. | 1956 // before encrypting so the HTTP job will still start. |
1947 host_resolver_.set_synchronous_mode(true); | 1957 host_resolver_.set_synchronous_mode(true); |
1948 host_resolver_.rules()->AddIPLiteralRule("mail.example.org", "192.168.0.1", | 1958 host_resolver_.rules()->AddIPLiteralRule("mail.example.org", "192.168.0.1", |
1949 ""); | 1959 ""); |
1950 HostResolver::RequestInfo info(HostPortPair("mail.example.org", 443)); | 1960 HostResolver::RequestInfo info(HostPortPair("mail.example.org", 443)); |
1951 AddressList address; | 1961 AddressList address; |
1952 host_resolver_.Resolve(info, DEFAULT_PRIORITY, &address, CompletionCallback(), | 1962 host_resolver_.Resolve(info, DEFAULT_PRIORITY, &address, CompletionCallback(), |
1953 nullptr, net_log_.bound()); | 1963 nullptr, net_log_.bound()); |
1954 | 1964 |
1955 CreateSessionWithNextProtos(); | 1965 CreateSession(); |
1956 session_->quic_stream_factory()->set_require_confirmation(true); | 1966 session_->quic_stream_factory()->set_require_confirmation(true); |
1957 AddQuicAlternateProtocolMapping(MockCryptoClientStream::ZERO_RTT); | 1967 AddQuicAlternateProtocolMapping(MockCryptoClientStream::ZERO_RTT); |
1958 | 1968 |
1959 scoped_ptr<HttpNetworkTransaction> trans( | 1969 scoped_ptr<HttpNetworkTransaction> trans( |
1960 new HttpNetworkTransaction(DEFAULT_PRIORITY, session_.get())); | 1970 new HttpNetworkTransaction(DEFAULT_PRIORITY, session_.get())); |
1961 TestCompletionCallback callback; | 1971 TestCompletionCallback callback; |
1962 int rv = trans->Start(&request_, callback.callback(), net_log_.bound()); | 1972 int rv = trans->Start(&request_, callback.callback(), net_log_.bound()); |
1963 EXPECT_EQ(ERR_IO_PENDING, rv); | 1973 EXPECT_EQ(ERR_IO_PENDING, rv); |
1964 | 1974 |
1965 crypto_client_stream_factory_.last_stream()->SendOnCryptoHandshakeEvent( | 1975 crypto_client_stream_factory_.last_stream()->SendOnCryptoHandshakeEvent( |
(...skipping 25 matching lines...) Expand all Loading... |
1991 // connection to the the server, in this test we require confirmation | 2001 // connection to the the server, in this test we require confirmation |
1992 // before encrypting so the HTTP job will still start. | 2002 // before encrypting so the HTTP job will still start. |
1993 host_resolver_.set_synchronous_mode(true); | 2003 host_resolver_.set_synchronous_mode(true); |
1994 host_resolver_.rules()->AddIPLiteralRule("mail.example.org", "192.168.0.1", | 2004 host_resolver_.rules()->AddIPLiteralRule("mail.example.org", "192.168.0.1", |
1995 ""); | 2005 ""); |
1996 HostResolver::RequestInfo info(HostPortPair("mail.example.org", 443)); | 2006 HostResolver::RequestInfo info(HostPortPair("mail.example.org", 443)); |
1997 AddressList address; | 2007 AddressList address; |
1998 host_resolver_.Resolve(info, DEFAULT_PRIORITY, &address, CompletionCallback(), | 2008 host_resolver_.Resolve(info, DEFAULT_PRIORITY, &address, CompletionCallback(), |
1999 nullptr, net_log_.bound()); | 2009 nullptr, net_log_.bound()); |
2000 | 2010 |
2001 CreateSessionWithNextProtos(); | 2011 CreateSession(); |
2002 session_->quic_stream_factory()->set_require_confirmation(true); | 2012 session_->quic_stream_factory()->set_require_confirmation(true); |
2003 AddQuicAlternateProtocolMapping(MockCryptoClientStream::ZERO_RTT); | 2013 AddQuicAlternateProtocolMapping(MockCryptoClientStream::ZERO_RTT); |
2004 | 2014 |
2005 scoped_ptr<HttpNetworkTransaction> trans( | 2015 scoped_ptr<HttpNetworkTransaction> trans( |
2006 new HttpNetworkTransaction(DEFAULT_PRIORITY, session_.get())); | 2016 new HttpNetworkTransaction(DEFAULT_PRIORITY, session_.get())); |
2007 TestCompletionCallback callback; | 2017 TestCompletionCallback callback; |
2008 int rv = trans->Start(&request_, callback.callback(), net_log_.bound()); | 2018 int rv = trans->Start(&request_, callback.callback(), net_log_.bound()); |
2009 EXPECT_EQ(ERR_IO_PENDING, rv); | 2019 EXPECT_EQ(ERR_IO_PENDING, rv); |
2010 | 2020 |
2011 crypto_client_stream_factory_.last_stream()->SendOnCryptoHandshakeEvent( | 2021 crypto_client_stream_factory_.last_stream()->SendOnCryptoHandshakeEvent( |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2046 // connection to the the server, in this test we require confirmation | 2056 // connection to the the server, in this test we require confirmation |
2047 // before encrypting so the HTTP job will still start. | 2057 // before encrypting so the HTTP job will still start. |
2048 host_resolver_.set_synchronous_mode(true); | 2058 host_resolver_.set_synchronous_mode(true); |
2049 host_resolver_.rules()->AddIPLiteralRule("mail.example.org", "192.168.0.1", | 2059 host_resolver_.rules()->AddIPLiteralRule("mail.example.org", "192.168.0.1", |
2050 ""); | 2060 ""); |
2051 HostResolver::RequestInfo info(HostPortPair("mail.example.org", 443)); | 2061 HostResolver::RequestInfo info(HostPortPair("mail.example.org", 443)); |
2052 AddressList address; | 2062 AddressList address; |
2053 host_resolver_.Resolve(info, DEFAULT_PRIORITY, &address, CompletionCallback(), | 2063 host_resolver_.Resolve(info, DEFAULT_PRIORITY, &address, CompletionCallback(), |
2054 nullptr, net_log_.bound()); | 2064 nullptr, net_log_.bound()); |
2055 | 2065 |
2056 CreateSessionWithNextProtos(); | 2066 CreateSession(); |
2057 session_->quic_stream_factory()->set_require_confirmation(true); | 2067 session_->quic_stream_factory()->set_require_confirmation(true); |
2058 AddQuicAlternateProtocolMapping(MockCryptoClientStream::ZERO_RTT); | 2068 AddQuicAlternateProtocolMapping(MockCryptoClientStream::ZERO_RTT); |
2059 | 2069 |
2060 scoped_ptr<HttpNetworkTransaction> trans( | 2070 scoped_ptr<HttpNetworkTransaction> trans( |
2061 new HttpNetworkTransaction(DEFAULT_PRIORITY, session_.get())); | 2071 new HttpNetworkTransaction(DEFAULT_PRIORITY, session_.get())); |
2062 TestCompletionCallback callback; | 2072 TestCompletionCallback callback; |
2063 int rv = trans->Start(&request_, callback.callback(), net_log_.bound()); | 2073 int rv = trans->Start(&request_, callback.callback(), net_log_.bound()); |
2064 EXPECT_EQ(ERR_IO_PENDING, rv); | 2074 EXPECT_EQ(ERR_IO_PENDING, rv); |
2065 | 2075 |
2066 crypto_client_stream_factory_.last_stream()->SendOnCryptoHandshakeEvent( | 2076 crypto_client_stream_factory_.last_stream()->SendOnCryptoHandshakeEvent( |
(...skipping 22 matching lines...) Expand all Loading... |
2089 MockRead http_reads[] = { | 2099 MockRead http_reads[] = { |
2090 MockRead("HTTP/1.1 200 OK\r\n\r\n"), MockRead("hello from http"), | 2100 MockRead("HTTP/1.1 200 OK\r\n\r\n"), MockRead("hello from http"), |
2091 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), | 2101 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), |
2092 MockRead(ASYNC, OK)}; | 2102 MockRead(ASYNC, OK)}; |
2093 | 2103 |
2094 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), nullptr, | 2104 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), nullptr, |
2095 0); | 2105 0); |
2096 socket_factory_.AddSocketDataProvider(&http_data); | 2106 socket_factory_.AddSocketDataProvider(&http_data); |
2097 socket_factory_.AddSSLSocketDataProvider(&ssl_data_); | 2107 socket_factory_.AddSSLSocketDataProvider(&ssl_data_); |
2098 | 2108 |
2099 CreateSessionWithNextProtos(); | 2109 CreateSession(); |
2100 AddQuicAlternateProtocolMapping(MockCryptoClientStream::COLD_START); | 2110 AddQuicAlternateProtocolMapping(MockCryptoClientStream::COLD_START); |
2101 SendRequestAndExpectHttpResponse("hello from http"); | 2111 SendRequestAndExpectHttpResponse("hello from http"); |
2102 ExpectBrokenAlternateProtocolMapping(); | 2112 ExpectBrokenAlternateProtocolMapping(); |
2103 } | 2113 } |
2104 | 2114 |
2105 TEST_P(QuicNetworkTransactionTest, BrokenAlternateProtocolReadError) { | 2115 TEST_P(QuicNetworkTransactionTest, BrokenAlternateProtocolReadError) { |
2106 // Alternate-protocol job | 2116 // Alternate-protocol job |
2107 MockRead quic_reads[] = { | 2117 MockRead quic_reads[] = { |
2108 MockRead(ASYNC, ERR_SOCKET_NOT_CONNECTED), | 2118 MockRead(ASYNC, ERR_SOCKET_NOT_CONNECTED), |
2109 }; | 2119 }; |
2110 StaticSocketDataProvider quic_data(quic_reads, arraysize(quic_reads), nullptr, | 2120 StaticSocketDataProvider quic_data(quic_reads, arraysize(quic_reads), nullptr, |
2111 0); | 2121 0); |
2112 socket_factory_.AddSocketDataProvider(&quic_data); | 2122 socket_factory_.AddSocketDataProvider(&quic_data); |
2113 | 2123 |
2114 // Main job which will succeed even though the alternate job fails. | 2124 // Main job which will succeed even though the alternate job fails. |
2115 MockRead http_reads[] = { | 2125 MockRead http_reads[] = { |
2116 MockRead("HTTP/1.1 200 OK\r\n\r\n"), MockRead("hello from http"), | 2126 MockRead("HTTP/1.1 200 OK\r\n\r\n"), MockRead("hello from http"), |
2117 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), | 2127 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), |
2118 MockRead(ASYNC, OK)}; | 2128 MockRead(ASYNC, OK)}; |
2119 | 2129 |
2120 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), nullptr, | 2130 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), nullptr, |
2121 0); | 2131 0); |
2122 socket_factory_.AddSocketDataProvider(&http_data); | 2132 socket_factory_.AddSocketDataProvider(&http_data); |
2123 socket_factory_.AddSSLSocketDataProvider(&ssl_data_); | 2133 socket_factory_.AddSSLSocketDataProvider(&ssl_data_); |
2124 | 2134 |
2125 CreateSessionWithNextProtos(); | 2135 CreateSession(); |
2126 | 2136 |
2127 AddQuicAlternateProtocolMapping(MockCryptoClientStream::COLD_START); | 2137 AddQuicAlternateProtocolMapping(MockCryptoClientStream::COLD_START); |
2128 SendRequestAndExpectHttpResponse("hello from http"); | 2138 SendRequestAndExpectHttpResponse("hello from http"); |
2129 ExpectBrokenAlternateProtocolMapping(); | 2139 ExpectBrokenAlternateProtocolMapping(); |
2130 } | 2140 } |
2131 | 2141 |
2132 TEST_P(QuicNetworkTransactionTest, NoBrokenAlternateProtocolIfTcpFails) { | 2142 TEST_P(QuicNetworkTransactionTest, NoBrokenAlternateProtocolIfTcpFails) { |
2133 // Alternate-protocol job will fail when the session attempts to read. | 2143 // Alternate-protocol job will fail when the session attempts to read. |
2134 MockRead quic_reads[] = { | 2144 MockRead quic_reads[] = { |
2135 MockRead(ASYNC, ERR_SOCKET_NOT_CONNECTED), | 2145 MockRead(ASYNC, ERR_SOCKET_NOT_CONNECTED), |
2136 }; | 2146 }; |
2137 StaticSocketDataProvider quic_data(quic_reads, arraysize(quic_reads), nullptr, | 2147 StaticSocketDataProvider quic_data(quic_reads, arraysize(quic_reads), nullptr, |
2138 0); | 2148 0); |
2139 socket_factory_.AddSocketDataProvider(&quic_data); | 2149 socket_factory_.AddSocketDataProvider(&quic_data); |
2140 | 2150 |
2141 // Main job will also fail. | 2151 // Main job will also fail. |
2142 MockRead http_reads[] = { | 2152 MockRead http_reads[] = { |
2143 MockRead(ASYNC, ERR_SOCKET_NOT_CONNECTED), | 2153 MockRead(ASYNC, ERR_SOCKET_NOT_CONNECTED), |
2144 }; | 2154 }; |
2145 | 2155 |
2146 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), nullptr, | 2156 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), nullptr, |
2147 0); | 2157 0); |
2148 http_data.set_connect_data(MockConnect(ASYNC, ERR_SOCKET_NOT_CONNECTED)); | 2158 http_data.set_connect_data(MockConnect(ASYNC, ERR_SOCKET_NOT_CONNECTED)); |
2149 socket_factory_.AddSocketDataProvider(&http_data); | 2159 socket_factory_.AddSocketDataProvider(&http_data); |
2150 socket_factory_.AddSSLSocketDataProvider(&ssl_data_); | 2160 socket_factory_.AddSSLSocketDataProvider(&ssl_data_); |
2151 | 2161 |
2152 CreateSessionWithNextProtos(); | 2162 CreateSession(); |
2153 | 2163 |
2154 AddQuicAlternateProtocolMapping(MockCryptoClientStream::COLD_START); | 2164 AddQuicAlternateProtocolMapping(MockCryptoClientStream::COLD_START); |
2155 scoped_ptr<HttpNetworkTransaction> trans( | 2165 scoped_ptr<HttpNetworkTransaction> trans( |
2156 new HttpNetworkTransaction(DEFAULT_PRIORITY, session_.get())); | 2166 new HttpNetworkTransaction(DEFAULT_PRIORITY, session_.get())); |
2157 TestCompletionCallback callback; | 2167 TestCompletionCallback callback; |
2158 int rv = trans->Start(&request_, callback.callback(), net_log_.bound()); | 2168 int rv = trans->Start(&request_, callback.callback(), net_log_.bound()); |
2159 EXPECT_EQ(ERR_IO_PENDING, rv); | 2169 EXPECT_EQ(ERR_IO_PENDING, rv); |
2160 EXPECT_EQ(ERR_SOCKET_NOT_CONNECTED, callback.WaitForResult()); | 2170 EXPECT_EQ(ERR_SOCKET_NOT_CONNECTED, callback.WaitForResult()); |
2161 ExpectQuicAlternateProtocolMapping(); | 2171 ExpectQuicAlternateProtocolMapping(); |
2162 } | 2172 } |
(...skipping 18 matching lines...) Expand all Loading... |
2181 MockRead http_reads[] = { | 2191 MockRead http_reads[] = { |
2182 MockRead("HTTP/1.1 200 OK\r\n\r\n"), MockRead("hello from http"), | 2192 MockRead("HTTP/1.1 200 OK\r\n\r\n"), MockRead("hello from http"), |
2183 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), | 2193 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), |
2184 MockRead(ASYNC, OK)}; | 2194 MockRead(ASYNC, OK)}; |
2185 | 2195 |
2186 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), nullptr, | 2196 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), nullptr, |
2187 0); | 2197 0); |
2188 socket_factory_.AddSocketDataProvider(&http_data); | 2198 socket_factory_.AddSocketDataProvider(&http_data); |
2189 socket_factory_.AddSSLSocketDataProvider(&ssl_data_); | 2199 socket_factory_.AddSSLSocketDataProvider(&ssl_data_); |
2190 | 2200 |
2191 CreateSessionWithNextProtos(); | 2201 CreateSession(); |
2192 | 2202 |
2193 AddQuicAlternateProtocolMapping(MockCryptoClientStream::ZERO_RTT); | 2203 AddQuicAlternateProtocolMapping(MockCryptoClientStream::ZERO_RTT); |
2194 | 2204 |
2195 SendRequestAndExpectHttpResponse("hello from http"); | 2205 SendRequestAndExpectHttpResponse("hello from http"); |
2196 | 2206 |
2197 ExpectBrokenAlternateProtocolMapping(); | 2207 ExpectBrokenAlternateProtocolMapping(); |
2198 | 2208 |
2199 EXPECT_TRUE(quic_data.AllReadDataConsumed()); | 2209 EXPECT_TRUE(quic_data.AllReadDataConsumed()); |
2200 EXPECT_TRUE(quic_data.AllWriteDataConsumed()); | 2210 EXPECT_TRUE(quic_data.AllWriteDataConsumed()); |
2201 } | 2211 } |
(...skipping 10 matching lines...) Expand all Loading... |
2212 // Main job that will proceed when the QUIC job fails. | 2222 // Main job that will proceed when the QUIC job fails. |
2213 MockRead http_reads[] = { | 2223 MockRead http_reads[] = { |
2214 MockRead("HTTP/1.1 200 OK\r\n\r\n"), MockRead("hello from http"), | 2224 MockRead("HTTP/1.1 200 OK\r\n\r\n"), MockRead("hello from http"), |
2215 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), | 2225 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), |
2216 MockRead(ASYNC, OK)}; | 2226 MockRead(ASYNC, OK)}; |
2217 | 2227 |
2218 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), nullptr, | 2228 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), nullptr, |
2219 0); | 2229 0); |
2220 socket_factory_.AddSocketDataProvider(&http_data); | 2230 socket_factory_.AddSocketDataProvider(&http_data); |
2221 | 2231 |
2222 CreateSessionWithNextProtos(); | 2232 CreateSession(); |
2223 | 2233 |
2224 AddQuicAlternateProtocolMapping(MockCryptoClientStream::ZERO_RTT); | 2234 AddQuicAlternateProtocolMapping(MockCryptoClientStream::ZERO_RTT); |
2225 | 2235 |
2226 SendRequestAndExpectHttpResponse("hello from http"); | 2236 SendRequestAndExpectHttpResponse("hello from http"); |
2227 } | 2237 } |
2228 | 2238 |
2229 TEST_P(QuicNetworkTransactionTest, BrokenAlternateProtocolOnConnectFailure) { | 2239 TEST_P(QuicNetworkTransactionTest, BrokenAlternateProtocolOnConnectFailure) { |
2230 // Alternate-protocol job will fail before creating a QUIC session. | 2240 // Alternate-protocol job will fail before creating a QUIC session. |
2231 StaticSocketDataProvider quic_data(nullptr, 0, nullptr, 0); | 2241 StaticSocketDataProvider quic_data(nullptr, 0, nullptr, 0); |
2232 quic_data.set_connect_data( | 2242 quic_data.set_connect_data( |
2233 MockConnect(SYNCHRONOUS, ERR_INTERNET_DISCONNECTED)); | 2243 MockConnect(SYNCHRONOUS, ERR_INTERNET_DISCONNECTED)); |
2234 socket_factory_.AddSocketDataProvider(&quic_data); | 2244 socket_factory_.AddSocketDataProvider(&quic_data); |
2235 | 2245 |
2236 // Main job which will succeed even though the alternate job fails. | 2246 // Main job which will succeed even though the alternate job fails. |
2237 MockRead http_reads[] = { | 2247 MockRead http_reads[] = { |
2238 MockRead("HTTP/1.1 200 OK\r\n\r\n"), MockRead("hello from http"), | 2248 MockRead("HTTP/1.1 200 OK\r\n\r\n"), MockRead("hello from http"), |
2239 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), | 2249 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), |
2240 MockRead(ASYNC, OK)}; | 2250 MockRead(ASYNC, OK)}; |
2241 | 2251 |
2242 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), nullptr, | 2252 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), nullptr, |
2243 0); | 2253 0); |
2244 socket_factory_.AddSocketDataProvider(&http_data); | 2254 socket_factory_.AddSocketDataProvider(&http_data); |
2245 socket_factory_.AddSSLSocketDataProvider(&ssl_data_); | 2255 socket_factory_.AddSSLSocketDataProvider(&ssl_data_); |
2246 | 2256 |
2247 CreateSessionWithNextProtos(); | 2257 CreateSession(); |
2248 AddQuicAlternateProtocolMapping(MockCryptoClientStream::COLD_START); | 2258 AddQuicAlternateProtocolMapping(MockCryptoClientStream::COLD_START); |
2249 SendRequestAndExpectHttpResponse("hello from http"); | 2259 SendRequestAndExpectHttpResponse("hello from http"); |
2250 | 2260 |
2251 ExpectBrokenAlternateProtocolMapping(); | 2261 ExpectBrokenAlternateProtocolMapping(); |
2252 } | 2262 } |
2253 | 2263 |
2254 TEST_P(QuicNetworkTransactionTest, ConnectionCloseDuringConnect) { | 2264 TEST_P(QuicNetworkTransactionTest, ConnectionCloseDuringConnect) { |
2255 MockQuicData mock_quic_data; | 2265 MockQuicData mock_quic_data; |
2256 mock_quic_data.AddSynchronousRead(ConstructConnectionClosePacket(1)); | 2266 mock_quic_data.AddSynchronousRead(ConstructConnectionClosePacket(1)); |
2257 mock_quic_data.AddWrite( | 2267 mock_quic_data.AddWrite( |
(...skipping 18 matching lines...) Expand all Loading... |
2276 // without racing an HTTP connection, we need the host resolution to happen | 2286 // without racing an HTTP connection, we need the host resolution to happen |
2277 // synchronously. | 2287 // synchronously. |
2278 host_resolver_.set_synchronous_mode(true); | 2288 host_resolver_.set_synchronous_mode(true); |
2279 host_resolver_.rules()->AddIPLiteralRule("mail.example.org", "192.168.0.1", | 2289 host_resolver_.rules()->AddIPLiteralRule("mail.example.org", "192.168.0.1", |
2280 ""); | 2290 ""); |
2281 HostResolver::RequestInfo info(HostPortPair("mail.example.org", 443)); | 2291 HostResolver::RequestInfo info(HostPortPair("mail.example.org", 443)); |
2282 AddressList address; | 2292 AddressList address; |
2283 host_resolver_.Resolve(info, DEFAULT_PRIORITY, &address, CompletionCallback(), | 2293 host_resolver_.Resolve(info, DEFAULT_PRIORITY, &address, CompletionCallback(), |
2284 nullptr, net_log_.bound()); | 2294 nullptr, net_log_.bound()); |
2285 | 2295 |
2286 CreateSessionWithNextProtos(); | 2296 CreateSession(); |
2287 AddQuicAlternateProtocolMapping(MockCryptoClientStream::ZERO_RTT); | 2297 AddQuicAlternateProtocolMapping(MockCryptoClientStream::ZERO_RTT); |
2288 SendRequestAndExpectHttpResponse("hello world"); | 2298 SendRequestAndExpectHttpResponse("hello world"); |
2289 } | 2299 } |
2290 | 2300 |
2291 TEST_P(QuicNetworkTransactionTest, SecureResourceOverSecureQuic) { | 2301 TEST_P(QuicNetworkTransactionTest, SecureResourceOverSecureQuic) { |
2292 maker_.set_hostname("www.example.org"); | 2302 maker_.set_hostname("www.example.org"); |
2293 EXPECT_FALSE(rtt_observer_.rtt_notification_received()); | 2303 EXPECT_FALSE(rtt_observer_.rtt_notification_received()); |
2294 MockQuicData mock_quic_data; | 2304 MockQuicData mock_quic_data; |
2295 mock_quic_data.AddWrite( | 2305 mock_quic_data.AddWrite( |
2296 ConstructRequestHeadersPacket(1, kClientDataStreamId1, true, true, | 2306 ConstructRequestHeadersPacket(1, kClientDataStreamId1, true, true, |
2297 GetRequestHeaders("GET", "https", "/"))); | 2307 GetRequestHeaders("GET", "https", "/"))); |
2298 mock_quic_data.AddRead(ConstructResponseHeadersPacket( | 2308 mock_quic_data.AddRead(ConstructResponseHeadersPacket( |
2299 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK"))); | 2309 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK"))); |
2300 mock_quic_data.AddRead( | 2310 mock_quic_data.AddRead( |
2301 ConstructDataPacket(2, kClientDataStreamId1, false, true, 0, "hello!")); | 2311 ConstructDataPacket(2, kClientDataStreamId1, false, true, 0, "hello!")); |
2302 mock_quic_data.AddWrite(ConstructAckPacket(2, 1)); | 2312 mock_quic_data.AddWrite(ConstructAckPacket(2, 1)); |
2303 mock_quic_data.AddRead(SYNCHRONOUS, ERR_IO_PENDING); // No more read data. | 2313 mock_quic_data.AddRead(SYNCHRONOUS, ERR_IO_PENDING); // No more read data. |
2304 mock_quic_data.AddSocketDataToFactory(&socket_factory_); | 2314 mock_quic_data.AddSocketDataToFactory(&socket_factory_); |
2305 | 2315 |
2306 request_.url = GURL("https://www.example.org:443"); | 2316 request_.url = GURL("https://www.example.org:443"); |
2307 AddHangingNonAlternateProtocolSocketData(); | 2317 AddHangingNonAlternateProtocolSocketData(); |
2308 CreateSessionWithNextProtos(); | 2318 CreateSession(); |
2309 AddQuicAlternateProtocolMapping(MockCryptoClientStream::CONFIRM_HANDSHAKE); | 2319 AddQuicAlternateProtocolMapping(MockCryptoClientStream::CONFIRM_HANDSHAKE); |
2310 SendRequestAndExpectQuicResponse("hello!"); | 2320 SendRequestAndExpectQuicResponse("hello!"); |
2311 EXPECT_TRUE(rtt_observer_.rtt_notification_received()); | 2321 EXPECT_TRUE(rtt_observer_.rtt_notification_received()); |
2312 } | 2322 } |
2313 | 2323 |
2314 TEST_P(QuicNetworkTransactionTest, QuicUpload) { | 2324 TEST_P(QuicNetworkTransactionTest, QuicUpload) { |
2315 params_.origin_to_force_quic_on = | 2325 params_.origin_to_force_quic_on = |
2316 HostPortPair::FromString("mail.example.org:443"); | 2326 HostPortPair::FromString("mail.example.org:443"); |
2317 | 2327 |
2318 MockRead reads[] = {MockRead(SYNCHRONOUS, ERR_IO_PENDING, 0)}; | 2328 MockRead reads[] = {MockRead(SYNCHRONOUS, ERR_IO_PENDING, 0)}; |
2319 MockWrite writes[] = {MockWrite(SYNCHRONOUS, ERR_FAILED, 1)}; | 2329 MockWrite writes[] = {MockWrite(SYNCHRONOUS, ERR_FAILED, 1)}; |
2320 SequencedSocketData socket_data(reads, arraysize(reads), writes, | 2330 SequencedSocketData socket_data(reads, arraysize(reads), writes, |
2321 arraysize(writes)); | 2331 arraysize(writes)); |
2322 socket_factory_.AddSocketDataProvider(&socket_data); | 2332 socket_factory_.AddSocketDataProvider(&socket_data); |
2323 | 2333 |
2324 // The non-alternate protocol job needs to hang in order to guarantee that | 2334 // The non-alternate protocol job needs to hang in order to guarantee that |
2325 // the alternate-protocol job will "win". | 2335 // the alternate-protocol job will "win". |
2326 AddHangingNonAlternateProtocolSocketData(); | 2336 AddHangingNonAlternateProtocolSocketData(); |
2327 | 2337 |
| 2338 params_.parse_alternative_services = false; |
| 2339 params_.enable_alternative_service_with_different_host = false; |
2328 CreateSession(); | 2340 CreateSession(); |
2329 request_.method = "POST"; | 2341 request_.method = "POST"; |
2330 ChunkedUploadDataStream upload_data(0); | 2342 ChunkedUploadDataStream upload_data(0); |
2331 upload_data.AppendData("1", 1, true); | 2343 upload_data.AppendData("1", 1, true); |
2332 | 2344 |
2333 request_.upload_data_stream = &upload_data; | 2345 request_.upload_data_stream = &upload_data; |
2334 | 2346 |
2335 scoped_ptr<HttpNetworkTransaction> trans( | 2347 scoped_ptr<HttpNetworkTransaction> trans( |
2336 new HttpNetworkTransaction(DEFAULT_PRIORITY, session_.get())); | 2348 new HttpNetworkTransaction(DEFAULT_PRIORITY, session_.get())); |
2337 TestCompletionCallback callback; | 2349 TestCompletionCallback callback; |
2338 int rv = trans->Start(&request_, callback.callback(), net_log_.bound()); | 2350 int rv = trans->Start(&request_, callback.callback(), net_log_.bound()); |
2339 EXPECT_EQ(ERR_IO_PENDING, rv); | 2351 EXPECT_EQ(ERR_IO_PENDING, rv); |
2340 EXPECT_NE(OK, callback.WaitForResult()); | 2352 EXPECT_NE(OK, callback.WaitForResult()); |
2341 } | 2353 } |
2342 | 2354 |
2343 } // namespace test | 2355 } // namespace test |
2344 } // namespace net | 2356 } // namespace net |
OLD | NEW |