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

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

Issue 1720163002: When Alt-Svc header processing is enabled, do not process Alternate-Protocol (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « net/http/http_network_transaction_unittest.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <vector> 5 #include <vector>
6 6
7 #include "base/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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
OLDNEW
« no previous file with comments | « net/http/http_network_transaction_unittest.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698