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

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

Issue 1680243005: Make QUIC tests use certs which are valid for the hosts they connect to. (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/quic/quic_http_stream_test.cc ('k') | net/quic/test_tools/mock_crypto_client_stream.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <vector> 5 #include <vector>
6 6
7 #include "base/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 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
65 "Alternate-Protocol: 443:quic,p=.5\r\n\r\n"; 65 "Alternate-Protocol: 443:quic,p=.5\r\n\r\n";
66 static const char kQuicAlternateProtocolDifferentPortHeader[] = 66 static const char kQuicAlternateProtocolDifferentPortHeader[] =
67 "Alternate-Protocol: 137:quic\r\n\r\n"; 67 "Alternate-Protocol: 137:quic\r\n\r\n";
68 static const char kQuicAlternativeServiceHeader[] = 68 static const char kQuicAlternativeServiceHeader[] =
69 "Alt-Svc: quic=\":443\"\r\n\r\n"; 69 "Alt-Svc: quic=\":443\"\r\n\r\n";
70 static const char kQuicAlternativeService50pctHeader[] = 70 static const char kQuicAlternativeService50pctHeader[] =
71 "Alt-Svc: quic=\":443\";p=\".5\"\r\n\r\n"; 71 "Alt-Svc: quic=\":443\";p=\".5\"\r\n\r\n";
72 static const char kQuicAlternativeServiceDifferentPortHeader[] = 72 static const char kQuicAlternativeServiceDifferentPortHeader[] =
73 "Alt-Svc: quic=\":137\"\r\n\r\n"; 73 "Alt-Svc: quic=\":137\"\r\n\r\n";
74 74
75 const char kDefaultServerHostName[] = "mail.example.com"; 75 const char kDefaultServerHostName[] = "mail.example.org";
76 76
77 } // namespace 77 } // namespace
78 78
79 // Helper class to encapsulate MockReads and MockWrites for QUIC. 79 // Helper class to encapsulate MockReads and MockWrites for QUIC.
80 // Simplify ownership issues and the interaction with the MockSocketFactory. 80 // Simplify ownership issues and the interaction with the MockSocketFactory.
81 class MockQuicData { 81 class MockQuicData {
82 public: 82 public:
83 MockQuicData() : packet_number_(0) {} 83 MockQuicData() : packet_number_(0) {}
84 84
85 ~MockQuicData() { STLDeleteElements(&packets_); } 85 ~MockQuicData() { STLDeleteElements(&packets_); }
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after
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 scoped_refptr<X509Certificate> cert( 207 scoped_refptr<X509Certificate> cert(
208 ImportCertFromFile(GetTestCertsDirectory(), "spdy_pooling.pem")); 208 ImportCertFromFile(GetTestCertsDirectory(), "wildcard.pem"));
209 verify_details_.cert_verify_result.verified_cert = cert; 209 verify_details_.cert_verify_result.verified_cert = cert;
210 verify_details_.cert_verify_result.is_issued_by_known_root = true; 210 verify_details_.cert_verify_result.is_issued_by_known_root = true;
211 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details_); 211 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details_);
212 } 212 }
213 213
214 void SetUp() override { 214 void SetUp() override {
215 NetworkChangeNotifier::NotifyObserversOfIPAddressChangeForTests(); 215 NetworkChangeNotifier::NotifyObserversOfIPAddressChangeForTests();
216 base::MessageLoop::current()->RunUntilIdle(); 216 base::MessageLoop::current()->RunUntilIdle();
217 } 217 }
218 218
(...skipping 207 matching lines...) Expand 10 before | Expand all | Expand 10 after
426 params_.transport_security_state = &transport_security_state_; 426 params_.transport_security_state = &transport_security_state_;
427 params_.cert_transparency_verifier = cert_transparency_verifier_.get(); 427 params_.cert_transparency_verifier = cert_transparency_verifier_.get();
428 params_.socket_performance_watcher_factory = 428 params_.socket_performance_watcher_factory =
429 test_network_quality_estimator_.get(); 429 test_network_quality_estimator_.get();
430 params_.proxy_service = proxy_service_.get(); 430 params_.proxy_service = proxy_service_.get();
431 params_.ssl_config_service = ssl_config_service_.get(); 431 params_.ssl_config_service = ssl_config_service_.get();
432 params_.http_auth_handler_factory = auth_handler_factory_.get(); 432 params_.http_auth_handler_factory = auth_handler_factory_.get();
433 params_.http_server_properties = http_server_properties_.GetWeakPtr(); 433 params_.http_server_properties = http_server_properties_.GetWeakPtr();
434 params_.quic_supported_versions = SupportedVersions(GetParam()); 434 params_.quic_supported_versions = SupportedVersions(GetParam());
435 for (const char* host : 435 for (const char* host :
436 {kDefaultServerHostName, "www.example.com", "news.example.com", 436 {kDefaultServerHostName, "www.example.org", "news.example.org",
437 "bar.example.com", "foo.example.com", "www.example.org", 437 "bar.example.org", "foo.example.org", "invalid.example.org",
438 "invalid.example.org", "docs.example.org"}) { 438 "mail.example.com"}) {
439 params_.quic_host_whitelist.insert(host); 439 params_.quic_host_whitelist.insert(host);
440 } 440 }
441 441
442 test_network_quality_estimator_->AddRTTObserver(&rtt_observer_); 442 test_network_quality_estimator_->AddRTTObserver(&rtt_observer_);
443 443
444 if (use_next_protos) { 444 if (use_next_protos) {
445 params_.parse_alternative_services = true; 445 params_.parse_alternative_services = true;
446 params_.enable_alternative_service_with_different_host = true; 446 params_.enable_alternative_service_with_different_host = true;
447 } 447 }
448 448
(...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after
596 EXPECT_EQ(used_proxy, proxy_headers_handler.was_called()); 596 EXPECT_EQ(used_proxy, proxy_headers_handler.was_called());
597 } 597 }
598 }; 598 };
599 599
600 INSTANTIATE_TEST_CASE_P(Version, 600 INSTANTIATE_TEST_CASE_P(Version,
601 QuicNetworkTransactionTest, 601 QuicNetworkTransactionTest,
602 ::testing::ValuesIn(QuicSupportedVersions())); 602 ::testing::ValuesIn(QuicSupportedVersions()));
603 603
604 TEST_P(QuicNetworkTransactionTest, ForceQuic) { 604 TEST_P(QuicNetworkTransactionTest, ForceQuic) {
605 params_.origin_to_force_quic_on = 605 params_.origin_to_force_quic_on =
606 HostPortPair::FromString("mail.example.com:443"); 606 HostPortPair::FromString("mail.example.org:443");
607 607
608 MockQuicData mock_quic_data; 608 MockQuicData mock_quic_data;
609 mock_quic_data.AddWrite( 609 mock_quic_data.AddWrite(
610 ConstructRequestHeadersPacket(1, kClientDataStreamId1, true, true, 610 ConstructRequestHeadersPacket(1, kClientDataStreamId1, true, true,
611 GetRequestHeaders("GET", "https", "/"))); 611 GetRequestHeaders("GET", "https", "/")));
612 mock_quic_data.AddRead(ConstructResponseHeadersPacket( 612 mock_quic_data.AddRead(ConstructResponseHeadersPacket(
613 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK"))); 613 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK")));
614 mock_quic_data.AddRead( 614 mock_quic_data.AddRead(
615 ConstructDataPacket(2, kClientDataStreamId1, false, true, 0, "hello!")); 615 ConstructDataPacket(2, kClientDataStreamId1, false, true, 0, "hello!"));
616 mock_quic_data.AddWrite(ConstructAckPacket(2, 1)); 616 mock_quic_data.AddWrite(ConstructAckPacket(2, 1));
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
663 EXPECT_LT(0, pos); 663 EXPECT_LT(0, pos);
664 664
665 int log_stream_id; 665 int log_stream_id;
666 ASSERT_TRUE(entries[pos].GetIntegerValue("stream_id", &log_stream_id)); 666 ASSERT_TRUE(entries[pos].GetIntegerValue("stream_id", &log_stream_id));
667 EXPECT_EQ(3, log_stream_id); 667 EXPECT_EQ(3, log_stream_id);
668 } 668 }
669 669
670 TEST_P(QuicNetworkTransactionTest, QuicProxy) { 670 TEST_P(QuicNetworkTransactionTest, QuicProxy) {
671 params_.enable_quic_for_proxies = true; 671 params_.enable_quic_for_proxies = true;
672 proxy_service_ = 672 proxy_service_ =
673 ProxyService::CreateFixedFromPacResult("QUIC mail.example.com:70"); 673 ProxyService::CreateFixedFromPacResult("QUIC mail.example.org:70");
674 674
675 MockQuicData mock_quic_data; 675 MockQuicData mock_quic_data;
676 mock_quic_data.AddWrite( 676 mock_quic_data.AddWrite(
677 ConstructRequestHeadersPacket(1, kClientDataStreamId1, true, true, 677 ConstructRequestHeadersPacket(1, kClientDataStreamId1, true, true,
678 GetRequestHeaders("GET", "http", "/"))); 678 GetRequestHeaders("GET", "http", "/")));
679 mock_quic_data.AddRead(ConstructResponseHeadersPacket( 679 mock_quic_data.AddRead(ConstructResponseHeadersPacket(
680 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK"))); 680 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK")));
681 mock_quic_data.AddRead( 681 mock_quic_data.AddRead(
682 ConstructDataPacket(2, kClientDataStreamId1, false, true, 0, "hello!")); 682 ConstructDataPacket(2, kClientDataStreamId1, false, true, 0, "hello!"));
683 mock_quic_data.AddWrite(ConstructAckPacket(2, 1)); 683 mock_quic_data.AddWrite(ConstructAckPacket(2, 1));
684 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read 684 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read
685 mock_quic_data.AddRead(ASYNC, 0); // EOF 685 mock_quic_data.AddRead(ASYNC, 0); // EOF
686 686
687 mock_quic_data.AddSocketDataToFactory(&socket_factory_); 687 mock_quic_data.AddSocketDataToFactory(&socket_factory_);
688 688
689 EXPECT_FALSE(rtt_observer_.rtt_notification_received()); 689 EXPECT_FALSE(rtt_observer_.rtt_notification_received());
690 // There is no need to set up an alternate protocol job, because 690 // There is no need to set up an alternate protocol job, because
691 // no attempt will be made to speak to the proxy over TCP. 691 // no attempt will be made to speak to the proxy over TCP.
692 692
693 request_.url = GURL("http://mail.example.com/"); 693 request_.url = GURL("http://mail.example.org/");
694 CreateSession(); 694 CreateSession();
695 695
696 SendRequestAndExpectQuicResponseFromProxyOnPort("hello!", 70); 696 SendRequestAndExpectQuicResponseFromProxyOnPort("hello!", 70);
697 EXPECT_TRUE(rtt_observer_.rtt_notification_received()); 697 EXPECT_TRUE(rtt_observer_.rtt_notification_received());
698 } 698 }
699 699
700 // Regression test for https://crbug.com/492458. Test that for an HTTP 700 // Regression test for https://crbug.com/492458. Test that for an HTTP
701 // connection through a QUIC proxy, the certificate exhibited by the proxy is 701 // connection through a QUIC proxy, the certificate exhibited by the proxy is
702 // checked against the proxy hostname, not the origin hostname. 702 // checked against the proxy hostname, not the origin hostname.
703 TEST_P(QuicNetworkTransactionTest, QuicProxyWithCert) { 703 TEST_P(QuicNetworkTransactionTest, QuicProxyWithCert) {
704 const std::string origin_host = "news.example.com"; 704 const std::string origin_host = "mail.example.com";
705 const std::string proxy_host = "www.example.org"; 705 const std::string proxy_host = "www.example.org";
706 706
707 params_.enable_quic_for_proxies = true; 707 params_.enable_quic_for_proxies = true;
708 proxy_service_ = 708 proxy_service_ =
709 ProxyService::CreateFixedFromPacResult("QUIC " + proxy_host + ":70"); 709 ProxyService::CreateFixedFromPacResult("QUIC " + proxy_host + ":70");
710 710
711 maker_.set_hostname(origin_host); 711 maker_.set_hostname(origin_host);
712 MockQuicData mock_quic_data; 712 MockQuicData mock_quic_data;
713 mock_quic_data.AddWrite( 713 mock_quic_data.AddWrite(
714 ConstructRequestHeadersPacket(1, kClientDataStreamId1, true, true, 714 ConstructRequestHeadersPacket(1, kClientDataStreamId1, true, true,
715 GetRequestHeaders("GET", "http", "/"))); 715 GetRequestHeaders("GET", "http", "/")));
716 mock_quic_data.AddRead(ConstructResponseHeadersPacket( 716 mock_quic_data.AddRead(ConstructResponseHeadersPacket(
717 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK"))); 717 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK")));
718 mock_quic_data.AddRead( 718 mock_quic_data.AddRead(
719 ConstructDataPacket(2, kClientDataStreamId1, false, true, 0, "hello!")); 719 ConstructDataPacket(2, kClientDataStreamId1, false, true, 0, "hello!"));
720 mock_quic_data.AddWrite(ConstructAckPacket(2, 1)); 720 mock_quic_data.AddWrite(ConstructAckPacket(2, 1));
721 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read 721 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read
722 mock_quic_data.AddRead(ASYNC, 0); 722 mock_quic_data.AddRead(ASYNC, 0);
723 mock_quic_data.AddSocketDataToFactory(&socket_factory_); 723 mock_quic_data.AddSocketDataToFactory(&socket_factory_);
724 724
725 scoped_refptr<X509Certificate> cert( 725 scoped_refptr<X509Certificate> cert(
726 ImportCertFromFile(GetTestCertsDirectory(), "spdy_pooling.pem")); 726 ImportCertFromFile(GetTestCertsDirectory(), "wildcard.pem"));
727 ASSERT_TRUE(cert.get()); 727 ASSERT_TRUE(cert.get());
728 // This certificate is valid for the proxy, but not for the origin. 728 // This certificate is valid for the proxy, but not for the origin.
729 bool common_name_fallback_used; 729 bool common_name_fallback_used;
730 EXPECT_TRUE(cert->VerifyNameMatch(proxy_host, &common_name_fallback_used)); 730 EXPECT_TRUE(cert->VerifyNameMatch(proxy_host, &common_name_fallback_used));
731 EXPECT_FALSE(cert->VerifyNameMatch(origin_host, &common_name_fallback_used)); 731 EXPECT_FALSE(cert->VerifyNameMatch(origin_host, &common_name_fallback_used));
732 ProofVerifyDetailsChromium verify_details; 732 ProofVerifyDetailsChromium verify_details;
733 verify_details.cert_verify_result.verified_cert = cert; 733 verify_details.cert_verify_result.verified_cert = cert;
734 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details); 734 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details);
735 ProofVerifyDetailsChromium verify_details2; 735 ProofVerifyDetailsChromium verify_details2;
736 verify_details2.cert_verify_result.verified_cert = cert; 736 verify_details2.cert_verify_result.verified_cert = cert;
737 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details2); 737 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details2);
738 738
739 request_.url = GURL("http://" + origin_host); 739 request_.url = GURL("http://" + origin_host);
740 AddHangingNonAlternateProtocolSocketData(); 740 AddHangingNonAlternateProtocolSocketData();
741 CreateSessionWithNextProtos(); 741 CreateSessionWithNextProtos();
742 AddQuicAlternateProtocolMapping(MockCryptoClientStream::CONFIRM_HANDSHAKE); 742 AddQuicAlternateProtocolMapping(MockCryptoClientStream::CONFIRM_HANDSHAKE);
743 SendRequestAndExpectQuicResponseFromProxyOnPort("hello!", 70); 743 SendRequestAndExpectQuicResponseFromProxyOnPort("hello!", 70);
744 } 744 }
745 745
746 TEST_P(QuicNetworkTransactionTest, ForceQuicWithErrorConnecting) { 746 TEST_P(QuicNetworkTransactionTest, ForceQuicWithErrorConnecting) {
747 params_.origin_to_force_quic_on = 747 params_.origin_to_force_quic_on =
748 HostPortPair::FromString("mail.example.com:443"); 748 HostPortPair::FromString("mail.example.org:443");
749 749
750 MockQuicData mock_quic_data1; 750 MockQuicData mock_quic_data1;
751 mock_quic_data1.AddRead(ASYNC, ERR_SOCKET_NOT_CONNECTED); 751 mock_quic_data1.AddRead(ASYNC, ERR_SOCKET_NOT_CONNECTED);
752 752
753 MockQuicData mock_quic_data2; 753 MockQuicData mock_quic_data2;
754 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details_); 754 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details_);
755 mock_quic_data2.AddRead(ASYNC, ERR_SOCKET_NOT_CONNECTED); 755 mock_quic_data2.AddRead(ASYNC, ERR_SOCKET_NOT_CONNECTED);
756 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details_); 756 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details_);
757 757
758 mock_quic_data1.AddSocketDataToFactory(&socket_factory_); 758 mock_quic_data1.AddSocketDataToFactory(&socket_factory_);
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after
884 SendRequestAndExpectHttpResponse("hello world"); 884 SendRequestAndExpectHttpResponse("hello world");
885 } 885 }
886 886
887 // When multiple alternative services are advertised, 887 // When multiple alternative services are advertised,
888 // HttpStreamFactoryImpl::RequestStreamInternal() should select the alternative 888 // HttpStreamFactoryImpl::RequestStreamInternal() should select the alternative
889 // service which uses existing QUIC session if available. If no existing QUIC 889 // service which uses existing QUIC session if available. If no existing QUIC
890 // session can be used, use the first alternative service from the list. 890 // session can be used, use the first alternative service from the list.
891 TEST_P(QuicNetworkTransactionTest, UseExistingAlternativeServiceForQuic) { 891 TEST_P(QuicNetworkTransactionTest, UseExistingAlternativeServiceForQuic) {
892 MockRead http_reads[] = { 892 MockRead http_reads[] = {
893 MockRead("HTTP/1.1 200 OK\r\n"), 893 MockRead("HTTP/1.1 200 OK\r\n"),
894 MockRead("Alt-Svc: quic=\"foo.example.com:443\", quic=\":444\"\r\n\r\n"), 894 MockRead("Alt-Svc: quic=\"foo.example.org:443\", quic=\":444\"\r\n\r\n"),
895 MockRead("hello world"), 895 MockRead("hello world"),
896 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), 896 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ),
897 MockRead(ASYNC, OK)}; 897 MockRead(ASYNC, OK)};
898 898
899 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), nullptr, 899 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), nullptr,
900 0); 900 0);
901 socket_factory_.AddSocketDataProvider(&http_data); 901 socket_factory_.AddSocketDataProvider(&http_data);
902 socket_factory_.AddSSLSocketDataProvider(&ssl_data_); 902 socket_factory_.AddSSLSocketDataProvider(&ssl_data_);
903 903
904 QuicStreamOffset request_header_offset = 0; 904 QuicStreamOffset request_header_offset = 0;
905 QuicStreamOffset response_header_offset = 0; 905 QuicStreamOffset response_header_offset = 0;
906 // First QUIC request data. 906 // First QUIC request data.
907 // Open a session to foo.example.com:443 using the first entry of the 907 // Open a session to foo.example.org:443 using the first entry of the
908 // alternative service list. 908 // alternative service list.
909 MockQuicData mock_quic_data; 909 MockQuicData mock_quic_data;
910 mock_quic_data.AddWrite(ConstructRequestHeadersPacket( 910 mock_quic_data.AddWrite(ConstructRequestHeadersPacket(
911 1, kClientDataStreamId1, true, true, 911 1, kClientDataStreamId1, true, true,
912 GetRequestHeaders("GET", "https", "/"), &request_header_offset)); 912 GetRequestHeaders("GET", "https", "/"), &request_header_offset));
913 913
914 std::string alt_svc_list = 914 std::string alt_svc_list =
915 "quic=\"mail.example.com:444\", quic=\"foo.example.com:443\", " 915 "quic=\"mail.example.org:444\", quic=\"foo.example.org:443\", "
916 "quic=\"bar.example.com:445\""; 916 "quic=\"bar.example.org:445\"";
917 mock_quic_data.AddRead(ConstructResponseHeadersPacket( 917 mock_quic_data.AddRead(ConstructResponseHeadersPacket(
918 1, kClientDataStreamId1, false, false, 918 1, kClientDataStreamId1, false, false,
919 GetResponseHeaders("200 OK", alt_svc_list), &response_header_offset)); 919 GetResponseHeaders("200 OK", alt_svc_list), &response_header_offset));
920 mock_quic_data.AddRead( 920 mock_quic_data.AddRead(
921 ConstructDataPacket(2, kClientDataStreamId1, false, true, 0, "hello!")); 921 ConstructDataPacket(2, kClientDataStreamId1, false, true, 0, "hello!"));
922 mock_quic_data.AddWrite(ConstructAckPacket(2, 1)); 922 mock_quic_data.AddWrite(ConstructAckPacket(2, 1));
923 923
924 // Second QUIC request data. 924 // Second QUIC request data.
925 // Connection pooling, using existing session, no need to include version 925 // Connection pooling, using existing session, no need to include version
926 // as version negotiation has been completed. 926 // as version negotiation has been completed.
(...skipping 19 matching lines...) Expand all
946 SendRequestAndExpectQuicResponseOnPort("hello!", 443); 946 SendRequestAndExpectQuicResponseOnPort("hello!", 443);
947 SendRequestAndExpectQuicResponseOnPort("hello!", 443); 947 SendRequestAndExpectQuicResponseOnPort("hello!", 443);
948 } 948 }
949 949
950 // When multiple alternative services that has existing QUIC session. 950 // When multiple alternative services that has existing QUIC session.
951 // HttpStreamFactoryImpl::RequestStreamInternal() should select the first 951 // HttpStreamFactoryImpl::RequestStreamInternal() should select the first
952 // alternative service which uses existing QUIC session. 952 // alternative service which uses existing QUIC session.
953 TEST_P(QuicNetworkTransactionTest, UseFirstExistingAlternativeServiceForQuic) { 953 TEST_P(QuicNetworkTransactionTest, UseFirstExistingAlternativeServiceForQuic) {
954 MockRead http_reads[] = { 954 MockRead http_reads[] = {
955 MockRead("HTTP/1.1 200 OK\r\n"), 955 MockRead("HTTP/1.1 200 OK\r\n"),
956 MockRead("Alt-Svc: quic=\"foo.example.com:443\", quic=\":446\"\r\n\r\n"), 956 MockRead("Alt-Svc: quic=\"foo.example.org:443\", quic=\":446\"\r\n\r\n"),
957 MockRead("hello world"), 957 MockRead("hello world"),
958 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), 958 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ),
959 MockRead(ASYNC, OK)}; 959 MockRead(ASYNC, OK)};
960 960
961 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), nullptr, 961 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), nullptr,
962 0); 962 0);
963 socket_factory_.AddSocketDataProvider(&http_data); 963 socket_factory_.AddSocketDataProvider(&http_data);
964 socket_factory_.AddSSLSocketDataProvider(&ssl_data_); 964 socket_factory_.AddSSLSocketDataProvider(&ssl_data_);
965 965
966 QuicStreamOffset request_header_offset = 0; 966 QuicStreamOffset request_header_offset = 0;
967 QuicStreamOffset response_header_offset = 0; 967 QuicStreamOffset response_header_offset = 0;
968 968
969 QuicTestPacketMaker maker(GetParam(), 0, clock_, kDefaultServerHostName); 969 QuicTestPacketMaker maker(GetParam(), 0, clock_, kDefaultServerHostName);
970 970
971 MockQuicData mock_quic_data; 971 MockQuicData mock_quic_data;
972 MockQuicData mock_quic_data2; 972 MockQuicData mock_quic_data2;
973 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details_); 973 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details_);
974 // First QUIC request data. 974 // First QUIC request data.
975 // Open a QUIC session to foo.example.com:443. 975 // Open a QUIC session to foo.example.org:443.
976 mock_quic_data.AddWrite(ConstructRequestHeadersPacket( 976 mock_quic_data.AddWrite(ConstructRequestHeadersPacket(
977 1, kClientDataStreamId1, true, true, 977 1, kClientDataStreamId1, true, true,
978 GetRequestHeaders("GET", "https", "/"), &request_header_offset)); 978 GetRequestHeaders("GET", "https", "/"), &request_header_offset));
979 979
980 std::string alt_svc_list = 980 std::string alt_svc_list =
981 "quic=\"bar.example.com:444\", quic=\"frog.example.com:445\", " 981 "quic=\"bar.example.org:444\", quic=\"frog.example.org:445\", "
982 "quic=\"mail.example.com:446\""; 982 "quic=\"mail.example.org:446\"";
983 // Response header from the server resets the alt_svc list for the origin. 983 // Response header from the server resets the alt_svc list for the origin.
984 mock_quic_data.AddRead(ConstructResponseHeadersPacket( 984 mock_quic_data.AddRead(ConstructResponseHeadersPacket(
985 1, kClientDataStreamId1, false, false, 985 1, kClientDataStreamId1, false, false,
986 GetResponseHeaders("200 OK", alt_svc_list), &response_header_offset)); 986 GetResponseHeaders("200 OK", alt_svc_list), &response_header_offset));
987 mock_quic_data.AddRead(ConstructDataPacket(2, kClientDataStreamId1, false, 987 mock_quic_data.AddRead(ConstructDataPacket(2, kClientDataStreamId1, false,
988 true, 0, "hello from foo!")); 988 true, 0, "hello from foo!"));
989 mock_quic_data.AddWrite(ConstructAckPacket(2, 1)); 989 mock_quic_data.AddWrite(ConstructAckPacket(2, 1));
990 990
991 // Second QUIC request data. 991 // Second QUIC request data.
992 // Existing QUIC session to foo.example.com is not viable from the updated 992 // Existing QUIC session to foo.example.org is not viable from the updated
993 // alt_svc. Unable to pool the existing QUIC session. 993 // alt_svc. Unable to pool the existing QUIC session.
994 // Open a new QUIC session to bar.example.com:443. 994 // Open a new QUIC session to bar.example.org:443.
995 mock_quic_data2.AddWrite(ConstructRequestHeadersPacket( 995 mock_quic_data2.AddWrite(ConstructRequestHeadersPacket(
996 1, kClientDataStreamId1, true, true, 996 1, kClientDataStreamId1, true, true,
997 GetRequestHeaders("GET", "https", "/"), &maker)); 997 GetRequestHeaders("GET", "https", "/"), &maker));
998 alt_svc_list = 998 alt_svc_list =
999 "quic=\"foo.example.com:443\", quic=\"mail.example.com:446\", " 999 "quic=\"foo.example.org:443\", quic=\"mail.example.org:446\", "
1000 "quic=\"bar.example.com:444\""; 1000 "quic=\"bar.example.org:444\"";
1001 // Response header from the server resets the alt_svc list for the origin. 1001 // Response header from the server resets the alt_svc list for the origin.
1002 mock_quic_data2.AddRead(ConstructResponseHeadersPacket( 1002 mock_quic_data2.AddRead(ConstructResponseHeadersPacket(
1003 1, kClientDataStreamId1, false, false, 1003 1, kClientDataStreamId1, false, false,
1004 GetResponseHeaders("200 OK", alt_svc_list), &maker)); 1004 GetResponseHeaders("200 OK", alt_svc_list), &maker));
1005 mock_quic_data2.AddRead(ConstructDataPacket(2, kClientDataStreamId1, false, 1005 mock_quic_data2.AddRead(ConstructDataPacket(2, kClientDataStreamId1, false,
1006 true, 0, "hello from bar!")); 1006 true, 0, "hello from bar!"));
1007 mock_quic_data2.AddWrite(ConstructAckPacket(2, 1, &maker)); 1007 mock_quic_data2.AddWrite(ConstructAckPacket(2, 1, &maker));
1008 mock_quic_data2.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read 1008 mock_quic_data2.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read
1009 mock_quic_data2.AddRead(ASYNC, 0); // EOF 1009 mock_quic_data2.AddRead(ASYNC, 0); // EOF
1010 1010
1011 // Third QUIC request data. 1011 // Third QUIC request data.
1012 // Connection pooling, using the first existing session to foo.example.com 1012 // Connection pooling, using the first existing session to foo.example.org
1013 mock_quic_data.AddWrite(ConstructRequestHeadersPacket( 1013 mock_quic_data.AddWrite(ConstructRequestHeadersPacket(
1014 3, kClientDataStreamId2, false, true, 1014 3, kClientDataStreamId2, false, true,
1015 GetRequestHeaders("GET", "https", "/"), &request_header_offset)); 1015 GetRequestHeaders("GET", "https", "/"), &request_header_offset));
1016 mock_quic_data.AddRead(ConstructResponseHeadersPacket( 1016 mock_quic_data.AddRead(ConstructResponseHeadersPacket(
1017 3, kClientDataStreamId2, false, false, GetResponseHeaders("200 OK"), 1017 3, kClientDataStreamId2, false, false, GetResponseHeaders("200 OK"),
1018 &response_header_offset)); 1018 &response_header_offset));
1019 mock_quic_data.AddRead(ConstructDataPacket(4, kClientDataStreamId2, false, 1019 mock_quic_data.AddRead(ConstructDataPacket(4, kClientDataStreamId2, false,
1020 true, 0, "hello from foo!")); 1020 true, 0, "hello from foo!"));
1021 mock_quic_data.AddWrite(ConstructAckAndConnectionClosePacket(4, 4, 3, 1)); 1021 mock_quic_data.AddWrite(ConstructAckAndConnectionClosePacket(4, 4, 3, 1));
1022 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read 1022 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read
(...skipping 13 matching lines...) Expand all
1036 SendRequestAndExpectQuicResponseOnPort("hello from bar!", 444); 1036 SendRequestAndExpectQuicResponseOnPort("hello from bar!", 444);
1037 SendRequestAndExpectQuicResponseOnPort("hello from foo!", 443); 1037 SendRequestAndExpectQuicResponseOnPort("hello from foo!", 443);
1038 } 1038 }
1039 1039
1040 // Multiple origins have listed the same alternative services. When there's a 1040 // Multiple origins have listed the same alternative services. When there's a
1041 // existing QUIC session opened by a request to other origin, 1041 // existing QUIC session opened by a request to other origin,
1042 // if the cert is valid, should select this QUIC session to make the request 1042 // if the cert is valid, should select this QUIC session to make the request
1043 // if this is also the first existing QUIC session. 1043 // if this is also the first existing QUIC session.
1044 TEST_P(QuicNetworkTransactionTest, 1044 TEST_P(QuicNetworkTransactionTest,
1045 UseSharedExistingAlternativeServiceForQuicWithValidCert) { 1045 UseSharedExistingAlternativeServiceForQuicWithValidCert) {
1046 // Default cert is valid for the following origins: 1046 // Default cert is valid for *.example.org
1047 // mail.example.com, mail.example.org, and www.example.org.
1048 1047
1049 // HTTP data for request to mail.example.com. 1048 // HTTP data for request to www.example.org.
1050 MockRead http_reads[] = { 1049 MockRead http_reads[] = {
1051 MockRead("HTTP/1.1 200 OK\r\n"), 1050 MockRead("HTTP/1.1 200 OK\r\n"),
1052 MockRead("Alt-Svc: quic=\":443\"\r\n\r\n"), 1051 MockRead("Alt-Svc: quic=\":443\"\r\n\r\n"),
1053 MockRead("hello world from mail.example.com"), 1052 MockRead("hello world from www.example.org"),
1054 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), 1053 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ),
1055 MockRead(ASYNC, OK)}; 1054 MockRead(ASYNC, OK)};
1056 1055
1057 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), nullptr, 1056 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), nullptr,
1058 0); 1057 0);
1059 socket_factory_.AddSocketDataProvider(&http_data); 1058 socket_factory_.AddSocketDataProvider(&http_data);
1060 socket_factory_.AddSSLSocketDataProvider(&ssl_data_); 1059 socket_factory_.AddSSLSocketDataProvider(&ssl_data_);
1061 1060
1062 // HTTP data for request to mail.example.org. 1061 // HTTP data for request to mail.example.org.
1063 MockRead http_reads2[] = { 1062 MockRead http_reads2[] = {
1064 MockRead("HTTP/1.1 200 OK\r\n"), 1063 MockRead("HTTP/1.1 200 OK\r\n"),
1065 MockRead("Alt-Svc: quic=\":444\", quic=\"mail.example.com:443\"\r\n\r\n"), 1064 MockRead("Alt-Svc: quic=\":444\", quic=\"www.example.org:443\"\r\n\r\n"),
1066 MockRead("hello world from mail.example.org"), 1065 MockRead("hello world from mail.example.org"),
1067 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), 1066 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ),
1068 MockRead(ASYNC, OK)}; 1067 MockRead(ASYNC, OK)};
1069 1068
1070 StaticSocketDataProvider http_data2(http_reads2, arraysize(http_reads2), 1069 StaticSocketDataProvider http_data2(http_reads2, arraysize(http_reads2),
1071 nullptr, 0); 1070 nullptr, 0);
1072 socket_factory_.AddSocketDataProvider(&http_data2); 1071 socket_factory_.AddSocketDataProvider(&http_data2);
1073 socket_factory_.AddSSLSocketDataProvider(&ssl_data_); 1072 socket_factory_.AddSSLSocketDataProvider(&ssl_data_);
1074 1073
1075 QuicStreamOffset request_header_offset = 0; 1074 QuicStreamOffset request_header_offset = 0;
1076 QuicStreamOffset response_header_offset = 0; 1075 QuicStreamOffset response_header_offset = 0;
1077 1076
1078 QuicTestPacketMaker maker(GetParam(), 0, clock_, kDefaultServerHostName); 1077 QuicTestPacketMaker maker(GetParam(), 0, clock_, "mail.example.org");
1079 maker.set_hostname("mail.example.org"); 1078 maker_.set_hostname("www.example.org");
1080 MockQuicData mock_quic_data; 1079 MockQuicData mock_quic_data;
1081 1080
1082 // First QUIC request data. 1081 // First QUIC request data.
1083 mock_quic_data.AddWrite(ConstructRequestHeadersPacket( 1082 mock_quic_data.AddWrite(ConstructRequestHeadersPacket(
1084 1, kClientDataStreamId1, true, true, 1083 1, kClientDataStreamId1, true, true,
1085 GetRequestHeaders("GET", "https", "/"), &request_header_offset)); 1084 GetRequestHeaders("GET", "https", "/"), &request_header_offset));
1086 1085
1087 mock_quic_data.AddRead(ConstructResponseHeadersPacket( 1086 mock_quic_data.AddRead(ConstructResponseHeadersPacket(
1088 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK"), 1087 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK"),
1089 &response_header_offset)); 1088 &response_header_offset));
1090 mock_quic_data.AddRead(ConstructDataPacket(2, kClientDataStreamId1, false, 1089 mock_quic_data.AddRead(ConstructDataPacket(2, kClientDataStreamId1, false,
1091 true, 0, "hello from mail QUIC!")); 1090 true, 0, "hello from mail QUIC!"));
1092 mock_quic_data.AddWrite(ConstructAckPacket(2, 1)); 1091 mock_quic_data.AddWrite(ConstructAckPacket(2, 1));
1093
1094 // Second QUIC request data. 1092 // Second QUIC request data.
1095 mock_quic_data.AddWrite(ConstructRequestHeadersPacket( 1093 mock_quic_data.AddWrite(ConstructRequestHeadersPacket(
1096 3, kClientDataStreamId2, false, true, 1094 3, kClientDataStreamId2, false, true,
1097 GetRequestHeaders("GET", "https", "/", maker), &request_header_offset, 1095 GetRequestHeaders("GET", "https", "/", maker), &request_header_offset,
1098 &maker)); 1096 &maker));
1099 mock_quic_data.AddRead(ConstructResponseHeadersPacket( 1097 mock_quic_data.AddRead(ConstructResponseHeadersPacket(
1100 3, kClientDataStreamId2, false, false, GetResponseHeaders("200 OK"), 1098 3, kClientDataStreamId2, false, false, GetResponseHeaders("200 OK"),
1101 &response_header_offset)); 1099 &response_header_offset));
1102 mock_quic_data.AddRead(ConstructDataPacket(4, kClientDataStreamId2, false, 1100 mock_quic_data.AddRead(ConstructDataPacket(4, kClientDataStreamId2, false,
1103 true, 0, "hello from mail QUIC!")); 1101 true, 0, "hello from mail QUIC!"));
1104 mock_quic_data.AddWrite(ConstructAckAndConnectionClosePacket(4, 4, 3, 1)); 1102 mock_quic_data.AddWrite(ConstructAckAndConnectionClosePacket(4, 4, 3, 1));
1105 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read 1103 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read
1106 mock_quic_data.AddRead(ASYNC, 0); // EOF 1104 mock_quic_data.AddRead(ASYNC, 0); // EOF
1107 1105
1108 mock_quic_data.AddSocketDataToFactory(&socket_factory_); 1106 mock_quic_data.AddSocketDataToFactory(&socket_factory_);
1109 AddHangingNonAlternateProtocolSocketData(); 1107 AddHangingNonAlternateProtocolSocketData();
1110 1108
1111 CreateSessionWithNextProtos(); 1109 CreateSessionWithNextProtos();
1112 1110
1113 // Send two HTTP requests, responses set up alt-svc lists for the origins. 1111 // Send two HTTP requests, responses set up alt-svc lists for the origins.
1114 SendRequestAndExpectHttpResponse("hello world from mail.example.com"); 1112 request_.url = GURL("https://www.example.org/");
1113 SendRequestAndExpectHttpResponse("hello world from www.example.org");
1115 request_.url = GURL("https://mail.example.org/"); 1114 request_.url = GURL("https://mail.example.org/");
1116 SendRequestAndExpectHttpResponse("hello world from mail.example.org"); 1115 SendRequestAndExpectHttpResponse("hello world from mail.example.org");
1117 1116
1118 // Open a QUIC session to mail.example.com:443 when making request 1117 // Open a QUIC session to mail.example.org:443 when making request
1119 // to mail.example.com. 1118 // to mail.example.org.
1120 request_.url = GURL("https://mail.example.com/"); 1119 request_.url = GURL("https://www.example.org/");
1121 SendRequestAndExpectQuicResponseOnPort("hello from mail QUIC!", 443); 1120 SendRequestAndExpectQuicResponseOnPort("hello from mail QUIC!", 443);
1122 1121
1123 // Uses the existing QUIC session when making request to mail.example.org. 1122 // Uses the existing QUIC session when making request to www.example.org.
1124 request_.url = GURL("https://mail.example.org/"); 1123 request_.url = GURL("https://mail.example.org/");
1125 SendRequestAndExpectQuicResponseOnPort("hello from mail QUIC!", 443); 1124 SendRequestAndExpectQuicResponseOnPort("hello from mail QUIC!", 443);
1126 } 1125 }
1127 1126
1128 // Multiple origins have listed the same alternative services. When there's a 1127 // Multiple origins have listed the same alternative services. When there's a
1129 // existing QUIC session opened by a request to other origin, 1128 // existing QUIC session opened by a request to other origin,
1130 // if the cert is NOT valid, should ignore this QUIC session. 1129 // if the cert is NOT valid, should ignore this QUIC session.
1131 TEST_P(QuicNetworkTransactionTest, 1130 TEST_P(QuicNetworkTransactionTest,
1132 DoNotUseSharedExistingAlternativeServiceForQuicWithInvalidCert) { 1131 DoNotUseSharedExistingAlternativeServiceForQuicWithInvalidCert) {
1133 // Default cert is only valid for the following origins: 1132 // Default cert is valid *.example.org
1134 // mail.example.com, mail.example.org, and www.example.org. 1133 // NOT valid for mail.example.com.
1135 // NOT valid for docs.example.org.
1136 1134
1137 // HTTP data for request to mail.example.com. 1135 // HTTP data for request to mail.example.org.
1138 MockRead http_reads[] = { 1136 MockRead http_reads[] = {
1139 MockRead("HTTP/1.1 200 OK\r\n"), 1137 MockRead("HTTP/1.1 200 OK\r\n"),
1140 MockRead("Alt-Svc: quic=\":443\"\r\n\r\n"), 1138 MockRead("Alt-Svc: quic=\":443\"\r\n\r\n"),
1141 MockRead("hello world from mail.example.com"), 1139 MockRead("hello world from mail.example.org"),
1142 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), 1140 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ),
1143 MockRead(ASYNC, OK)}; 1141 MockRead(ASYNC, OK)};
1144 1142
1145 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), nullptr, 1143 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), nullptr,
1146 0); 1144 0);
1147 socket_factory_.AddSocketDataProvider(&http_data); 1145 socket_factory_.AddSocketDataProvider(&http_data);
1148 socket_factory_.AddSSLSocketDataProvider(&ssl_data_); 1146 socket_factory_.AddSSLSocketDataProvider(&ssl_data_);
1149 1147
1150 // HTTP data for request to docs.example.org. 1148 // HTTP data for request to mail.example.com.
1151 MockRead http_reads2[] = { 1149 MockRead http_reads2[] = {
1152 MockRead("HTTP/1.1 200 OK\r\n"), 1150 MockRead("HTTP/1.1 200 OK\r\n"),
1153 MockRead("Alt-Svc: quic=\":444\", quic=\"mail.example.com:443\"\r\n\r\n"), 1151 MockRead("Alt-Svc: quic=\":444\", quic=\"mail.example.org:443\"\r\n\r\n"),
1154 MockRead("hello world from docs.example.org"), 1152 MockRead("hello world from mail.example.com"),
1155 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), 1153 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ),
1156 MockRead(ASYNC, OK)}; 1154 MockRead(ASYNC, OK)};
1157 1155
1158 StaticSocketDataProvider http_data2(http_reads2, arraysize(http_reads2), 1156 StaticSocketDataProvider http_data2(http_reads2, arraysize(http_reads2),
1159 nullptr, 0); 1157 nullptr, 0);
1160 socket_factory_.AddSocketDataProvider(&http_data2); 1158 socket_factory_.AddSocketDataProvider(&http_data2);
1161 socket_factory_.AddSSLSocketDataProvider(&ssl_data_); 1159 socket_factory_.AddSSLSocketDataProvider(&ssl_data_);
1162 1160
1163 QuicTestPacketMaker maker(GetParam(), 0, clock_, kDefaultServerHostName); 1161 QuicTestPacketMaker maker(GetParam(), 0, clock_, "mail.example.org");
1164 maker.set_hostname("docs.example.org"); 1162 maker.set_hostname("mail.example.com");
1165 MockQuicData mock_quic_data; 1163 MockQuicData mock_quic_data;
1166 MockQuicData mock_quic_data2; 1164 MockQuicData mock_quic_data2;
1167 1165
1168 // Adding a valid cert for *.example.org but not mail.example.com. 1166 // Adding a valid cert for *.example.org but not mail.example.com.
1169 ProofVerifyDetailsChromium verify_details; 1167 ProofVerifyDetailsChromium verify_details;
1170 scoped_refptr<X509Certificate> cert( 1168 scoped_refptr<X509Certificate> cert(
1171 ImportCertFromFile(GetTestCertsDirectory(), "wildcard.pem")); 1169 ImportCertFromFile(GetTestCertsDirectory(), "spdy_pooling.pem"));
1172 verify_details.cert_verify_result.verified_cert = cert; 1170 verify_details.cert_verify_result.verified_cert = cert;
1173 verify_details.cert_verify_result.is_issued_by_known_root = true; 1171 verify_details.cert_verify_result.is_issued_by_known_root = true;
1174 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details); 1172 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details);
1175 1173
1176 // First QUIC request data. 1174 // First QUIC request data.
1177 mock_quic_data.AddWrite( 1175 mock_quic_data.AddWrite(
1178 ConstructRequestHeadersPacket(1, kClientDataStreamId1, true, true, 1176 ConstructRequestHeadersPacket(1, kClientDataStreamId1, true, true,
1179 GetRequestHeaders("GET", "https", "/"))); 1177 GetRequestHeaders("GET", "https", "/")));
1180 mock_quic_data.AddRead(ConstructResponseHeadersPacket( 1178 mock_quic_data.AddRead(ConstructResponseHeadersPacket(
1181 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK"))); 1179 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK")));
(...skipping 18 matching lines...) Expand all
1200 1198
1201 mock_quic_data.AddSocketDataToFactory(&socket_factory_); 1199 mock_quic_data.AddSocketDataToFactory(&socket_factory_);
1202 AddHangingNonAlternateProtocolSocketData(); 1200 AddHangingNonAlternateProtocolSocketData();
1203 1201
1204 mock_quic_data2.AddSocketDataToFactory(&socket_factory_); 1202 mock_quic_data2.AddSocketDataToFactory(&socket_factory_);
1205 AddHangingNonAlternateProtocolSocketData(); 1203 AddHangingNonAlternateProtocolSocketData();
1206 1204
1207 CreateSessionWithNextProtos(); 1205 CreateSessionWithNextProtos();
1208 1206
1209 // Send HTTP requests, responses set up the alt-svc lists for the origins. 1207 // Send HTTP requests, responses set up the alt-svc lists for the origins.
1208 SendRequestAndExpectHttpResponse("hello world from mail.example.org");
1209 request_.url = GURL("https://mail.example.com/");
1210 SendRequestAndExpectHttpResponse("hello world from mail.example.com"); 1210 SendRequestAndExpectHttpResponse("hello world from mail.example.com");
1211 request_.url = GURL("https://docs.example.org/");
1212 SendRequestAndExpectHttpResponse("hello world from docs.example.org");
1213 1211
1214 // Open a QUIC session to mail.example.com:443 when making request 1212 // Open a QUIC session to mail.example.org:443 when making request
1215 // to mail.example.com. 1213 // to mail.example.org.
1216 request_.url = GURL("https://mail.example.com/"); 1214 request_.url = GURL("https://mail.example.org/");
1217 SendRequestAndExpectQuicResponseOnPort("hello from mail QUIC!", 443); 1215 SendRequestAndExpectQuicResponseOnPort("hello from mail QUIC!", 443);
1218 1216
1219 // Open another new QUIC session to docs.example.org:444. 1217 // Open another new QUIC session to mail.example.com:444.
1220 request_.url = GURL("https://docs.example.org/"); 1218 request_.url = GURL("https://mail.example.com/");
1221 SendRequestAndExpectQuicResponseOnPort("hello from docs QUIC!", 444); 1219 SendRequestAndExpectQuicResponseOnPort("hello from docs QUIC!", 444);
1222 } 1220 }
1223 1221
1224 TEST_P(QuicNetworkTransactionTest, AlternativeServiceDifferentPort) { 1222 TEST_P(QuicNetworkTransactionTest, AlternativeServiceDifferentPort) {
1225 MockRead http_reads[] = { 1223 MockRead http_reads[] = {
1226 MockRead("HTTP/1.1 200 OK\r\n"), 1224 MockRead("HTTP/1.1 200 OK\r\n"),
1227 MockRead(kQuicAlternativeServiceDifferentPortHeader), 1225 MockRead(kQuicAlternativeServiceDifferentPortHeader),
1228 MockRead("hello world"), 1226 MockRead("hello world"),
1229 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), 1227 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ),
1230 MockRead(ASYNC, OK)}; 1228 MockRead(ASYNC, OK)};
(...skipping 412 matching lines...) Expand 10 before | Expand all | Expand 10 after
1643 CreateSessionWithNextProtos(); 1641 CreateSessionWithNextProtos();
1644 1642
1645 // TODO(rtenneti): Test QUIC over HTTPS, GetSSLInfo(). 1643 // TODO(rtenneti): Test QUIC over HTTPS, GetSSLInfo().
1646 SendRequestAndExpectHttpResponse("hello world"); 1644 SendRequestAndExpectHttpResponse("hello world");
1647 } 1645 }
1648 1646
1649 class QuicAltSvcCertificateVerificationTest 1647 class QuicAltSvcCertificateVerificationTest
1650 : public QuicNetworkTransactionTest { 1648 : public QuicNetworkTransactionTest {
1651 public: 1649 public:
1652 void Run(bool valid) { 1650 void Run(bool valid) {
1653 HostPortPair origin(valid ? "mail.example.org" : "invalid.example.org", 1651 HostPortPair origin(valid ? "mail.example.org" : "mail.example.com", 443);
1654 443);
1655 HostPortPair alternative("www.example.org", 443); 1652 HostPortPair alternative("www.example.org", 443);
1656 std::string url("https://"); 1653 std::string url("https://");
1657 url.append(origin.host()); 1654 url.append(origin.host());
1658 url.append(":443"); 1655 url.append(":443");
1659 request_.url = GURL(url); 1656 request_.url = GURL(url);
1660 1657
1661 maker_.set_hostname(origin.host()); 1658 maker_.set_hostname(origin.host());
1662 MockQuicData mock_quic_data; 1659 MockQuicData mock_quic_data;
1663 mock_quic_data.AddWrite( 1660 mock_quic_data.AddWrite(
1664 ConstructRequestHeadersPacket(1, kClientDataStreamId1, true, true, 1661 ConstructRequestHeadersPacket(1, kClientDataStreamId1, true, true,
1665 GetRequestHeaders("GET", "https", "/"))); 1662 GetRequestHeaders("GET", "https", "/")));
1666 mock_quic_data.AddRead(ConstructResponseHeadersPacket( 1663 mock_quic_data.AddRead(ConstructResponseHeadersPacket(
1667 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK"))); 1664 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK")));
1668 mock_quic_data.AddRead( 1665 mock_quic_data.AddRead(
1669 ConstructDataPacket(2, kClientDataStreamId1, false, true, 0, "hello!")); 1666 ConstructDataPacket(2, kClientDataStreamId1, false, true, 0, "hello!"));
1670 mock_quic_data.AddWrite(ConstructAckPacket(2, 1)); 1667 mock_quic_data.AddWrite(ConstructAckPacket(2, 1));
1671 mock_quic_data.AddRead(SYNCHRONOUS, ERR_IO_PENDING); 1668 mock_quic_data.AddRead(SYNCHRONOUS, ERR_IO_PENDING);
1672 mock_quic_data.AddSocketDataToFactory(&socket_factory_); 1669 mock_quic_data.AddSocketDataToFactory(&socket_factory_);
1673 1670
1674 scoped_refptr<X509Certificate> cert( 1671 scoped_refptr<X509Certificate> cert(
1675 ImportCertFromFile(GetTestCertsDirectory(), "spdy_pooling.pem")); 1672 ImportCertFromFile(GetTestCertsDirectory(), "wildcard.pem"));
1676 ASSERT_TRUE(cert.get()); 1673 ASSERT_TRUE(cert.get());
1677 bool common_name_fallback_used; 1674 bool common_name_fallback_used;
1678 EXPECT_EQ(valid, 1675 EXPECT_EQ(valid,
1679 cert->VerifyNameMatch(origin.host(), &common_name_fallback_used)); 1676 cert->VerifyNameMatch(origin.host(), &common_name_fallback_used));
1680 EXPECT_TRUE( 1677 EXPECT_TRUE(
1681 cert->VerifyNameMatch(alternative.host(), &common_name_fallback_used)); 1678 cert->VerifyNameMatch(alternative.host(), &common_name_fallback_used));
1682 ProofVerifyDetailsChromium verify_details; 1679 ProofVerifyDetailsChromium verify_details;
1683 verify_details.cert_verify_result.verified_cert = cert; 1680 verify_details.cert_verify_result.verified_cert = cert;
1684 verify_details.cert_verify_result.is_issued_by_known_root = true; 1681 verify_details.cert_verify_result.is_issued_by_known_root = true;
1685 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details); 1682 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details);
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
1728 RequestFailsWithInvalidCertificate) { 1725 RequestFailsWithInvalidCertificate) {
1729 Run(false); 1726 Run(false);
1730 } 1727 }
1731 1728
1732 TEST_P(QuicNetworkTransactionTest, HungAlternateProtocol) { 1729 TEST_P(QuicNetworkTransactionTest, HungAlternateProtocol) {
1733 crypto_client_stream_factory_.set_handshake_mode( 1730 crypto_client_stream_factory_.set_handshake_mode(
1734 MockCryptoClientStream::COLD_START); 1731 MockCryptoClientStream::COLD_START);
1735 1732
1736 MockWrite http_writes[] = { 1733 MockWrite http_writes[] = {
1737 MockWrite(SYNCHRONOUS, 0, "GET / HTTP/1.1\r\n"), 1734 MockWrite(SYNCHRONOUS, 0, "GET / HTTP/1.1\r\n"),
1738 MockWrite(SYNCHRONOUS, 1, "Host: mail.example.com\r\n"), 1735 MockWrite(SYNCHRONOUS, 1, "Host: mail.example.org\r\n"),
1739 MockWrite(SYNCHRONOUS, 2, "Connection: keep-alive\r\n\r\n")}; 1736 MockWrite(SYNCHRONOUS, 2, "Connection: keep-alive\r\n\r\n")};
1740 1737
1741 MockRead http_reads[] = { 1738 MockRead http_reads[] = {
1742 MockRead(SYNCHRONOUS, 3, "HTTP/1.1 200 OK\r\n"), 1739 MockRead(SYNCHRONOUS, 3, "HTTP/1.1 200 OK\r\n"),
1743 MockRead(SYNCHRONOUS, 4, kQuicAlternateProtocolHeader), 1740 MockRead(SYNCHRONOUS, 4, kQuicAlternateProtocolHeader),
1744 MockRead(SYNCHRONOUS, 5, "hello world"), MockRead(SYNCHRONOUS, OK, 6)}; 1741 MockRead(SYNCHRONOUS, 5, "hello world"), MockRead(SYNCHRONOUS, OK, 6)};
1745 1742
1746 MockClientSocketFactory socket_factory; 1743 MockClientSocketFactory socket_factory;
1747 1744
1748 SequencedSocketData http_data(http_reads, arraysize(http_reads), http_writes, 1745 SequencedSocketData http_data(http_reads, arraysize(http_reads), http_writes,
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
1817 ConstructDataPacket(2, kClientDataStreamId1, false, true, 0, "hello!")); 1814 ConstructDataPacket(2, kClientDataStreamId1, false, true, 0, "hello!"));
1818 mock_quic_data.AddWrite(ConstructAckPacket(2, 1)); 1815 mock_quic_data.AddWrite(ConstructAckPacket(2, 1));
1819 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read 1816 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read
1820 mock_quic_data.AddRead(ASYNC, 0); // EOF 1817 mock_quic_data.AddRead(ASYNC, 0); // EOF
1821 mock_quic_data.AddSocketDataToFactory(&socket_factory_); 1818 mock_quic_data.AddSocketDataToFactory(&socket_factory_);
1822 1819
1823 // In order for a new QUIC session to be established via alternate-protocol 1820 // In order for a new QUIC session to be established via alternate-protocol
1824 // without racing an HTTP connection, we need the host resolution to happen 1821 // without racing an HTTP connection, we need the host resolution to happen
1825 // synchronously. 1822 // synchronously.
1826 host_resolver_.set_synchronous_mode(true); 1823 host_resolver_.set_synchronous_mode(true);
1827 host_resolver_.rules()->AddIPLiteralRule("mail.example.com", "192.168.0.1", 1824 host_resolver_.rules()->AddIPLiteralRule("mail.example.org", "192.168.0.1",
1828 ""); 1825 "");
1829 HostResolver::RequestInfo info(HostPortPair("mail.example.com", 443)); 1826 HostResolver::RequestInfo info(HostPortPair("mail.example.org", 443));
1830 AddressList address; 1827 AddressList address;
1831 host_resolver_.Resolve(info, DEFAULT_PRIORITY, &address, CompletionCallback(), 1828 host_resolver_.Resolve(info, DEFAULT_PRIORITY, &address, CompletionCallback(),
1832 nullptr, net_log_.bound()); 1829 nullptr, net_log_.bound());
1833 1830
1834 CreateSessionWithNextProtos(); 1831 CreateSessionWithNextProtos();
1835 AddQuicAlternateProtocolMapping(MockCryptoClientStream::ZERO_RTT); 1832 AddQuicAlternateProtocolMapping(MockCryptoClientStream::ZERO_RTT);
1836 SendRequestAndExpectQuicResponse("hello!"); 1833 SendRequestAndExpectQuicResponse("hello!");
1837 } 1834 }
1838 1835
1839 TEST_P(QuicNetworkTransactionTest, ZeroRTTWithProxy) { 1836 TEST_P(QuicNetworkTransactionTest, ZeroRTTWithProxy) {
1840 proxy_service_ = ProxyService::CreateFixedFromPacResult("PROXY myproxy:70"); 1837 proxy_service_ = ProxyService::CreateFixedFromPacResult("PROXY myproxy:70");
1841 1838
1842 // Since we are using a proxy, the QUIC job will not succeed. 1839 // Since we are using a proxy, the QUIC job will not succeed.
1843 MockWrite http_writes[] = { 1840 MockWrite http_writes[] = {
1844 MockWrite(SYNCHRONOUS, 0, "GET http://mail.example.com/ HTTP/1.1\r\n"), 1841 MockWrite(SYNCHRONOUS, 0, "GET http://mail.example.org/ HTTP/1.1\r\n"),
1845 MockWrite(SYNCHRONOUS, 1, "Host: mail.example.com\r\n"), 1842 MockWrite(SYNCHRONOUS, 1, "Host: mail.example.org\r\n"),
1846 MockWrite(SYNCHRONOUS, 2, "Proxy-Connection: keep-alive\r\n\r\n")}; 1843 MockWrite(SYNCHRONOUS, 2, "Proxy-Connection: keep-alive\r\n\r\n")};
1847 1844
1848 MockRead http_reads[] = { 1845 MockRead http_reads[] = {
1849 MockRead(SYNCHRONOUS, 3, "HTTP/1.1 200 OK\r\n"), 1846 MockRead(SYNCHRONOUS, 3, "HTTP/1.1 200 OK\r\n"),
1850 MockRead(SYNCHRONOUS, 4, kQuicAlternateProtocolHeader), 1847 MockRead(SYNCHRONOUS, 4, kQuicAlternateProtocolHeader),
1851 MockRead(SYNCHRONOUS, 5, "hello world"), MockRead(SYNCHRONOUS, OK, 6)}; 1848 MockRead(SYNCHRONOUS, 5, "hello world"), MockRead(SYNCHRONOUS, OK, 6)};
1852 1849
1853 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), 1850 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads),
1854 http_writes, arraysize(http_writes)); 1851 http_writes, arraysize(http_writes));
1855 socket_factory_.AddSocketDataProvider(&http_data); 1852 socket_factory_.AddSocketDataProvider(&http_data);
1856 1853
1857 // In order for a new QUIC session to be established via alternate-protocol 1854 // In order for a new QUIC session to be established via alternate-protocol
1858 // without racing an HTTP connection, we need the host resolution to happen 1855 // without racing an HTTP connection, we need the host resolution to happen
1859 // synchronously. 1856 // synchronously.
1860 host_resolver_.set_synchronous_mode(true); 1857 host_resolver_.set_synchronous_mode(true);
1861 host_resolver_.rules()->AddIPLiteralRule("mail.example.com", "192.168.0.1", 1858 host_resolver_.rules()->AddIPLiteralRule("mail.example.org", "192.168.0.1",
1862 ""); 1859 "");
1863 HostResolver::RequestInfo info(HostPortPair("mail.example.com", 443)); 1860 HostResolver::RequestInfo info(HostPortPair("mail.example.org", 443));
1864 AddressList address; 1861 AddressList address;
1865 host_resolver_.Resolve(info, DEFAULT_PRIORITY, &address, CompletionCallback(), 1862 host_resolver_.Resolve(info, DEFAULT_PRIORITY, &address, CompletionCallback(),
1866 nullptr, net_log_.bound()); 1863 nullptr, net_log_.bound());
1867 1864
1868 request_.url = GURL("http://mail.example.com/"); 1865 request_.url = GURL("http://mail.example.org/");
1869 CreateSessionWithNextProtos(); 1866 CreateSessionWithNextProtos();
1870 AddQuicAlternateProtocolMapping(MockCryptoClientStream::ZERO_RTT); 1867 AddQuicAlternateProtocolMapping(MockCryptoClientStream::ZERO_RTT);
1871 SendRequestAndExpectHttpResponse("hello world"); 1868 SendRequestAndExpectHttpResponse("hello world");
1872 } 1869 }
1873 1870
1874 TEST_P(QuicNetworkTransactionTest, ZeroRTTWithConfirmationRequired) { 1871 TEST_P(QuicNetworkTransactionTest, ZeroRTTWithConfirmationRequired) {
1875 MockQuicData mock_quic_data; 1872 MockQuicData mock_quic_data;
1876 mock_quic_data.AddWrite( 1873 mock_quic_data.AddWrite(
1877 ConstructRequestHeadersPacket(1, kClientDataStreamId1, true, true, 1874 ConstructRequestHeadersPacket(1, kClientDataStreamId1, true, true,
1878 GetRequestHeaders("GET", "https", "/"))); 1875 GetRequestHeaders("GET", "https", "/")));
1879 mock_quic_data.AddRead(ConstructResponseHeadersPacket( 1876 mock_quic_data.AddRead(ConstructResponseHeadersPacket(
1880 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK"))); 1877 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK")));
1881 mock_quic_data.AddRead( 1878 mock_quic_data.AddRead(
1882 ConstructDataPacket(2, kClientDataStreamId1, false, true, 0, "hello!")); 1879 ConstructDataPacket(2, kClientDataStreamId1, false, true, 0, "hello!"));
1883 mock_quic_data.AddWrite(ConstructAckPacket(2, 1)); 1880 mock_quic_data.AddWrite(ConstructAckPacket(2, 1));
1884 mock_quic_data.AddRead(SYNCHRONOUS, ERR_IO_PENDING); // No more data to read 1881 mock_quic_data.AddRead(SYNCHRONOUS, ERR_IO_PENDING); // No more data to read
1885 mock_quic_data.AddSocketDataToFactory(&socket_factory_); 1882 mock_quic_data.AddSocketDataToFactory(&socket_factory_);
1886 1883
1887 // The non-alternate protocol job needs to hang in order to guarantee that 1884 // The non-alternate protocol job needs to hang in order to guarantee that
1888 // the alternate-protocol job will "win". 1885 // the alternate-protocol job will "win".
1889 AddHangingNonAlternateProtocolSocketData(); 1886 AddHangingNonAlternateProtocolSocketData();
1890 1887
1891 // In order for a new QUIC session to be established via alternate-protocol 1888 // In order for a new QUIC session to be established via alternate-protocol
1892 // without racing an HTTP connection, we need the host resolution to happen 1889 // without racing an HTTP connection, we need the host resolution to happen
1893 // synchronously. Of course, even though QUIC *could* perform a 0-RTT 1890 // synchronously. Of course, even though QUIC *could* perform a 0-RTT
1894 // connection to the the server, in this test we require confirmation 1891 // connection to the the server, in this test we require confirmation
1895 // before encrypting so the HTTP job will still start. 1892 // before encrypting so the HTTP job will still start.
1896 host_resolver_.set_synchronous_mode(true); 1893 host_resolver_.set_synchronous_mode(true);
1897 host_resolver_.rules()->AddIPLiteralRule("mail.example.com", "192.168.0.1", 1894 host_resolver_.rules()->AddIPLiteralRule("mail.example.org", "192.168.0.1",
1898 ""); 1895 "");
1899 HostResolver::RequestInfo info(HostPortPair("mail.example.com", 443)); 1896 HostResolver::RequestInfo info(HostPortPair("mail.example.org", 443));
1900 AddressList address; 1897 AddressList address;
1901 host_resolver_.Resolve(info, DEFAULT_PRIORITY, &address, CompletionCallback(), 1898 host_resolver_.Resolve(info, DEFAULT_PRIORITY, &address, CompletionCallback(),
1902 nullptr, net_log_.bound()); 1899 nullptr, net_log_.bound());
1903 1900
1904 CreateSessionWithNextProtos(); 1901 CreateSessionWithNextProtos();
1905 session_->quic_stream_factory()->set_require_confirmation(true); 1902 session_->quic_stream_factory()->set_require_confirmation(true);
1906 AddQuicAlternateProtocolMapping(MockCryptoClientStream::ZERO_RTT); 1903 AddQuicAlternateProtocolMapping(MockCryptoClientStream::ZERO_RTT);
1907 1904
1908 scoped_ptr<HttpNetworkTransaction> trans( 1905 scoped_ptr<HttpNetworkTransaction> trans(
1909 new HttpNetworkTransaction(DEFAULT_PRIORITY, session_.get())); 1906 new HttpNetworkTransaction(DEFAULT_PRIORITY, session_.get()));
(...skipping 23 matching lines...) Expand all
1933 // The non-alternate protocol job needs to hang in order to guarantee that 1930 // The non-alternate protocol job needs to hang in order to guarantee that
1934 // the alternate-protocol job will "win". 1931 // the alternate-protocol job will "win".
1935 AddHangingNonAlternateProtocolSocketData(); 1932 AddHangingNonAlternateProtocolSocketData();
1936 1933
1937 // In order for a new QUIC session to be established via alternate-protocol 1934 // In order for a new QUIC session to be established via alternate-protocol
1938 // without racing an HTTP connection, we need the host resolution to happen 1935 // without racing an HTTP connection, we need the host resolution to happen
1939 // synchronously. Of course, even though QUIC *could* perform a 0-RTT 1936 // synchronously. Of course, even though QUIC *could* perform a 0-RTT
1940 // connection to the the server, in this test we require confirmation 1937 // connection to the the server, in this test we require confirmation
1941 // before encrypting so the HTTP job will still start. 1938 // before encrypting so the HTTP job will still start.
1942 host_resolver_.set_synchronous_mode(true); 1939 host_resolver_.set_synchronous_mode(true);
1943 host_resolver_.rules()->AddIPLiteralRule("mail.example.com", "192.168.0.1", 1940 host_resolver_.rules()->AddIPLiteralRule("mail.example.org", "192.168.0.1",
1944 ""); 1941 "");
1945 HostResolver::RequestInfo info(HostPortPair("mail.example.com", 443)); 1942 HostResolver::RequestInfo info(HostPortPair("mail.example.org", 443));
1946 AddressList address; 1943 AddressList address;
1947 host_resolver_.Resolve(info, DEFAULT_PRIORITY, &address, CompletionCallback(), 1944 host_resolver_.Resolve(info, DEFAULT_PRIORITY, &address, CompletionCallback(),
1948 nullptr, net_log_.bound()); 1945 nullptr, net_log_.bound());
1949 1946
1950 CreateSessionWithNextProtos(); 1947 CreateSessionWithNextProtos();
1951 session_->quic_stream_factory()->set_require_confirmation(true); 1948 session_->quic_stream_factory()->set_require_confirmation(true);
1952 AddQuicAlternateProtocolMapping(MockCryptoClientStream::ZERO_RTT); 1949 AddQuicAlternateProtocolMapping(MockCryptoClientStream::ZERO_RTT);
1953 1950
1954 scoped_ptr<HttpNetworkTransaction> trans( 1951 scoped_ptr<HttpNetworkTransaction> trans(
1955 new HttpNetworkTransaction(DEFAULT_PRIORITY, session_.get())); 1952 new HttpNetworkTransaction(DEFAULT_PRIORITY, session_.get()));
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
1988 // The non-alternate protocol job needs to hang in order to guarantee that 1985 // The non-alternate protocol job needs to hang in order to guarantee that
1989 // the alternate-protocol job will "win". 1986 // the alternate-protocol job will "win".
1990 AddHangingNonAlternateProtocolSocketData(); 1987 AddHangingNonAlternateProtocolSocketData();
1991 1988
1992 // In order for a new QUIC session to be established via alternate-protocol 1989 // In order for a new QUIC session to be established via alternate-protocol
1993 // without racing an HTTP connection, we need the host resolution to happen 1990 // without racing an HTTP connection, we need the host resolution to happen
1994 // synchronously. Of course, even though QUIC *could* perform a 0-RTT 1991 // synchronously. Of course, even though QUIC *could* perform a 0-RTT
1995 // connection to the the server, in this test we require confirmation 1992 // connection to the the server, in this test we require confirmation
1996 // before encrypting so the HTTP job will still start. 1993 // before encrypting so the HTTP job will still start.
1997 host_resolver_.set_synchronous_mode(true); 1994 host_resolver_.set_synchronous_mode(true);
1998 host_resolver_.rules()->AddIPLiteralRule("mail.example.com", "192.168.0.1", 1995 host_resolver_.rules()->AddIPLiteralRule("mail.example.org", "192.168.0.1",
1999 ""); 1996 "");
2000 HostResolver::RequestInfo info(HostPortPair("mail.example.com", 443)); 1997 HostResolver::RequestInfo info(HostPortPair("mail.example.org", 443));
2001 AddressList address; 1998 AddressList address;
2002 host_resolver_.Resolve(info, DEFAULT_PRIORITY, &address, CompletionCallback(), 1999 host_resolver_.Resolve(info, DEFAULT_PRIORITY, &address, CompletionCallback(),
2003 nullptr, net_log_.bound()); 2000 nullptr, net_log_.bound());
2004 2001
2005 CreateSessionWithNextProtos(); 2002 CreateSessionWithNextProtos();
2006 session_->quic_stream_factory()->set_require_confirmation(true); 2003 session_->quic_stream_factory()->set_require_confirmation(true);
2007 AddQuicAlternateProtocolMapping(MockCryptoClientStream::ZERO_RTT); 2004 AddQuicAlternateProtocolMapping(MockCryptoClientStream::ZERO_RTT);
2008 2005
2009 scoped_ptr<HttpNetworkTransaction> trans( 2006 scoped_ptr<HttpNetworkTransaction> trans(
2010 new HttpNetworkTransaction(DEFAULT_PRIORITY, session_.get())); 2007 new HttpNetworkTransaction(DEFAULT_PRIORITY, session_.get()));
(...skipping 207 matching lines...) Expand 10 before | Expand all | Expand 10 after
2218 2215
2219 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), nullptr, 2216 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), nullptr,
2220 0); 2217 0);
2221 socket_factory_.AddSocketDataProvider(&http_data); 2218 socket_factory_.AddSocketDataProvider(&http_data);
2222 socket_factory_.AddSSLSocketDataProvider(&ssl_data_); 2219 socket_factory_.AddSSLSocketDataProvider(&ssl_data_);
2223 2220
2224 // In order for a new QUIC session to be established via alternate-protocol 2221 // In order for a new QUIC session to be established via alternate-protocol
2225 // without racing an HTTP connection, we need the host resolution to happen 2222 // without racing an HTTP connection, we need the host resolution to happen
2226 // synchronously. 2223 // synchronously.
2227 host_resolver_.set_synchronous_mode(true); 2224 host_resolver_.set_synchronous_mode(true);
2228 host_resolver_.rules()->AddIPLiteralRule("mail.example.com", "192.168.0.1", 2225 host_resolver_.rules()->AddIPLiteralRule("mail.example.org", "192.168.0.1",
2229 ""); 2226 "");
2230 HostResolver::RequestInfo info(HostPortPair("mail.example.com", 443)); 2227 HostResolver::RequestInfo info(HostPortPair("mail.example.org", 443));
2231 AddressList address; 2228 AddressList address;
2232 host_resolver_.Resolve(info, DEFAULT_PRIORITY, &address, CompletionCallback(), 2229 host_resolver_.Resolve(info, DEFAULT_PRIORITY, &address, CompletionCallback(),
2233 nullptr, net_log_.bound()); 2230 nullptr, net_log_.bound());
2234 2231
2235 CreateSessionWithNextProtos(); 2232 CreateSessionWithNextProtos();
2236 AddQuicAlternateProtocolMapping(MockCryptoClientStream::ZERO_RTT); 2233 AddQuicAlternateProtocolMapping(MockCryptoClientStream::ZERO_RTT);
2237 SendRequestAndExpectHttpResponse("hello world"); 2234 SendRequestAndExpectHttpResponse("hello world");
2238 } 2235 }
2239 2236
2240 TEST_P(QuicNetworkTransactionTest, SecureResourceOverSecureQuic) { 2237 TEST_P(QuicNetworkTransactionTest, SecureResourceOverSecureQuic) {
(...skipping 14 matching lines...) Expand all
2255 request_.url = GURL("https://www.example.org:443"); 2252 request_.url = GURL("https://www.example.org:443");
2256 AddHangingNonAlternateProtocolSocketData(); 2253 AddHangingNonAlternateProtocolSocketData();
2257 CreateSessionWithNextProtos(); 2254 CreateSessionWithNextProtos();
2258 AddQuicAlternateProtocolMapping(MockCryptoClientStream::CONFIRM_HANDSHAKE); 2255 AddQuicAlternateProtocolMapping(MockCryptoClientStream::CONFIRM_HANDSHAKE);
2259 SendRequestAndExpectQuicResponse("hello!"); 2256 SendRequestAndExpectQuicResponse("hello!");
2260 EXPECT_TRUE(rtt_observer_.rtt_notification_received()); 2257 EXPECT_TRUE(rtt_observer_.rtt_notification_received());
2261 } 2258 }
2262 2259
2263 TEST_P(QuicNetworkTransactionTest, QuicUpload) { 2260 TEST_P(QuicNetworkTransactionTest, QuicUpload) {
2264 params_.origin_to_force_quic_on = 2261 params_.origin_to_force_quic_on =
2265 HostPortPair::FromString("mail.example.com:443"); 2262 HostPortPair::FromString("mail.example.org:443");
2266 2263
2267 MockRead reads[] = {MockRead(SYNCHRONOUS, ERR_IO_PENDING, 0)}; 2264 MockRead reads[] = {MockRead(SYNCHRONOUS, ERR_IO_PENDING, 0)};
2268 MockWrite writes[] = {MockWrite(SYNCHRONOUS, ERR_FAILED, 1)}; 2265 MockWrite writes[] = {MockWrite(SYNCHRONOUS, ERR_FAILED, 1)};
2269 SequencedSocketData socket_data(reads, arraysize(reads), writes, 2266 SequencedSocketData socket_data(reads, arraysize(reads), writes,
2270 arraysize(writes)); 2267 arraysize(writes));
2271 socket_factory_.AddSocketDataProvider(&socket_data); 2268 socket_factory_.AddSocketDataProvider(&socket_data);
2272 2269
2273 // The non-alternate protocol job needs to hang in order to guarantee that 2270 // The non-alternate protocol job needs to hang in order to guarantee that
2274 // the alternate-protocol job will "win". 2271 // the alternate-protocol job will "win".
2275 AddHangingNonAlternateProtocolSocketData(); 2272 AddHangingNonAlternateProtocolSocketData();
2276 2273
2277 CreateSession(); 2274 CreateSession();
2278 request_.method = "POST"; 2275 request_.method = "POST";
2279 ChunkedUploadDataStream upload_data(0); 2276 ChunkedUploadDataStream upload_data(0);
2280 upload_data.AppendData("1", 1, true); 2277 upload_data.AppendData("1", 1, true);
2281 2278
2282 request_.upload_data_stream = &upload_data; 2279 request_.upload_data_stream = &upload_data;
2283 2280
2284 scoped_ptr<HttpNetworkTransaction> trans( 2281 scoped_ptr<HttpNetworkTransaction> trans(
2285 new HttpNetworkTransaction(DEFAULT_PRIORITY, session_.get())); 2282 new HttpNetworkTransaction(DEFAULT_PRIORITY, session_.get()));
2286 TestCompletionCallback callback; 2283 TestCompletionCallback callback;
2287 int rv = trans->Start(&request_, callback.callback(), net_log_.bound()); 2284 int rv = trans->Start(&request_, callback.callback(), net_log_.bound());
2288 EXPECT_EQ(ERR_IO_PENDING, rv); 2285 EXPECT_EQ(ERR_IO_PENDING, rv);
2289 EXPECT_NE(OK, callback.WaitForResult()); 2286 EXPECT_NE(OK, callback.WaitForResult());
2290 } 2287 }
2291 2288
2292 } // namespace test 2289 } // namespace test
2293 } // namespace net 2290 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/quic_http_stream_test.cc ('k') | net/quic/test_tools/mock_crypto_client_stream.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698