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

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

Issue 2089243002: Split enable_alternative_service_with_different_host flag. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 6 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
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 <memory> 5 #include <memory>
6 #include <ostream> 6 #include <ostream>
7 #include <string> 7 #include <string>
8 #include <utility> 8 #include <utility>
9 #include <vector> 9 #include <vector>
10 10
(...skipping 249 matching lines...) Expand 10 before | Expand all | Expand 10 after
260 HttpAuthHandlerFactory::CreateDefault(&host_resolver_)), 260 HttpAuthHandlerFactory::CreateDefault(&host_resolver_)),
261 random_generator_(0), 261 random_generator_(0),
262 ssl_data_(ASYNC, OK) { 262 ssl_data_(ASYNC, OK) {
263 request_.method = "GET"; 263 request_.method = "GET";
264 std::string url("https://"); 264 std::string url("https://");
265 url.append(kDefaultServerHostName); 265 url.append(kDefaultServerHostName);
266 request_.url = GURL(url); 266 request_.url = GURL(url);
267 request_.load_flags = 0; 267 request_.load_flags = 0;
268 clock_->AdvanceTime(QuicTime::Delta::FromMilliseconds(20)); 268 clock_->AdvanceTime(QuicTime::Delta::FromMilliseconds(20));
269 269
270 params_.enable_alternative_service_with_different_host = true;
271 params_.enable_alternative_service_for_insecure_origins = true; 270 params_.enable_alternative_service_for_insecure_origins = true;
272 271
273 scoped_refptr<X509Certificate> cert( 272 scoped_refptr<X509Certificate> cert(
274 ImportCertFromFile(GetTestCertsDirectory(), "wildcard.pem")); 273 ImportCertFromFile(GetTestCertsDirectory(), "wildcard.pem"));
275 verify_details_.cert_verify_result.verified_cert = cert; 274 verify_details_.cert_verify_result.verified_cert = cert;
276 verify_details_.cert_verify_result.is_issued_by_known_root = true; 275 verify_details_.cert_verify_result.is_issued_by_known_root = true;
277 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details_); 276 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details_);
278 } 277 }
279 278
280 void SetUp() override { 279 void SetUp() override {
(...skipping 425 matching lines...) Expand 10 before | Expand all | Expand 10 after
706 false, true, 0, "hello!")); 705 false, true, 0, "hello!"));
707 mock_quic_data.AddWrite(ConstructClientAckPacket(2, 1)); 706 mock_quic_data.AddWrite(ConstructClientAckPacket(2, 1));
708 mock_quic_data.AddRead(SYNCHRONOUS, ERR_IO_PENDING); // No more data to read 707 mock_quic_data.AddRead(SYNCHRONOUS, ERR_IO_PENDING); // No more data to read
709 708
710 mock_quic_data.AddSocketDataToFactory(&socket_factory_); 709 mock_quic_data.AddSocketDataToFactory(&socket_factory_);
711 710
712 // The non-alternate protocol job needs to hang in order to guarantee that 711 // The non-alternate protocol job needs to hang in order to guarantee that
713 // the alternate-protocol job will "win". 712 // the alternate-protocol job will "win".
714 AddHangingNonAlternateProtocolSocketData(); 713 AddHangingNonAlternateProtocolSocketData();
715 714
716 params_.enable_alternative_service_with_different_host = false;
717 CreateSession(); 715 CreateSession();
718 716
719 EXPECT_FALSE( 717 EXPECT_FALSE(
720 test_socket_performance_watcher_factory_.rtt_notification_received()); 718 test_socket_performance_watcher_factory_.rtt_notification_received());
721 SendRequestAndExpectQuicResponse("hello!"); 719 SendRequestAndExpectQuicResponse("hello!");
722 EXPECT_TRUE( 720 EXPECT_TRUE(
723 test_socket_performance_watcher_factory_.rtt_notification_received()); 721 test_socket_performance_watcher_factory_.rtt_notification_received());
724 722
725 // Check that the NetLog was filled reasonably. 723 // Check that the NetLog was filled reasonably.
726 TestNetLogEntry::List entries; 724 TestNetLogEntry::List entries;
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
779 mock_quic_data.AddRead(ASYNC, 0); // EOF 777 mock_quic_data.AddRead(ASYNC, 0); // EOF
780 778
781 mock_quic_data.AddSocketDataToFactory(&socket_factory_); 779 mock_quic_data.AddSocketDataToFactory(&socket_factory_);
782 780
783 EXPECT_FALSE( 781 EXPECT_FALSE(
784 test_socket_performance_watcher_factory_.rtt_notification_received()); 782 test_socket_performance_watcher_factory_.rtt_notification_received());
785 // There is no need to set up an alternate protocol job, because 783 // There is no need to set up an alternate protocol job, because
786 // no attempt will be made to speak to the proxy over TCP. 784 // no attempt will be made to speak to the proxy over TCP.
787 785
788 request_.url = GURL("http://mail.example.org/"); 786 request_.url = GURL("http://mail.example.org/");
789 params_.enable_alternative_service_with_different_host = false;
790 CreateSession(); 787 CreateSession();
791 788
792 SendRequestAndExpectQuicResponseFromProxyOnPort("hello!", 70); 789 SendRequestAndExpectQuicResponseFromProxyOnPort("hello!", 70);
793 EXPECT_TRUE( 790 EXPECT_TRUE(
794 test_socket_performance_watcher_factory_.rtt_notification_received()); 791 test_socket_performance_watcher_factory_.rtt_notification_received());
795 } 792 }
796 793
797 // Regression test for https://crbug.com/492458. Test that for an HTTP 794 // Regression test for https://crbug.com/492458. Test that for an HTTP
798 // connection through a QUIC proxy, the certificate exhibited by the proxy is 795 // connection through a QUIC proxy, the certificate exhibited by the proxy is
799 // checked against the proxy hostname, not the origin hostname. 796 // checked against the proxy hostname, not the origin hostname.
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
834 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details2); 831 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details2);
835 832
836 request_.url = GURL("http://" + origin_host); 833 request_.url = GURL("http://" + origin_host);
837 AddHangingNonAlternateProtocolSocketData(); 834 AddHangingNonAlternateProtocolSocketData();
838 CreateSession(); 835 CreateSession();
839 AddQuicAlternateProtocolMapping(MockCryptoClientStream::CONFIRM_HANDSHAKE); 836 AddQuicAlternateProtocolMapping(MockCryptoClientStream::CONFIRM_HANDSHAKE);
840 SendRequestAndExpectQuicResponseFromProxyOnPort("hello!", 70); 837 SendRequestAndExpectQuicResponseFromProxyOnPort("hello!", 70);
841 } 838 }
842 839
843 TEST_P(QuicNetworkTransactionTest, AlternativeServicesDifferentHost) { 840 TEST_P(QuicNetworkTransactionTest, AlternativeServicesDifferentHost) {
844 params_.enable_alternative_service_with_different_host = true;
845 HostPortPair origin("www.example.org", 443); 841 HostPortPair origin("www.example.org", 443);
846 HostPortPair alternative("mail.example.org", 443); 842 HostPortPair alternative("mail.example.org", 443);
847 843
848 base::FilePath certs_dir = GetTestCertsDirectory(); 844 base::FilePath certs_dir = GetTestCertsDirectory();
849 scoped_refptr<X509Certificate> cert( 845 scoped_refptr<X509Certificate> cert(
850 ImportCertFromFile(GetTestCertsDirectory(), "wildcard.pem")); 846 ImportCertFromFile(GetTestCertsDirectory(), "wildcard.pem"));
851 ASSERT_TRUE(cert.get()); 847 ASSERT_TRUE(cert.get());
852 // TODO(rch): the connection should be "to" the origin, so if the cert is 848 // TODO(rch): the connection should be "to" the origin, so if the cert is
853 // valid for the origin but not the alternative, that should work too. 849 // valid for the origin but not the alternative, that should work too.
854 bool common_name_fallback_used; 850 bool common_name_fallback_used;
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
890 mock_quic_data1.AddRead(ASYNC, ERR_SOCKET_NOT_CONNECTED); 886 mock_quic_data1.AddRead(ASYNC, ERR_SOCKET_NOT_CONNECTED);
891 887
892 MockQuicData mock_quic_data2; 888 MockQuicData mock_quic_data2;
893 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details_); 889 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details_);
894 mock_quic_data2.AddRead(ASYNC, ERR_SOCKET_NOT_CONNECTED); 890 mock_quic_data2.AddRead(ASYNC, ERR_SOCKET_NOT_CONNECTED);
895 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details_); 891 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details_);
896 892
897 mock_quic_data1.AddSocketDataToFactory(&socket_factory_); 893 mock_quic_data1.AddSocketDataToFactory(&socket_factory_);
898 mock_quic_data2.AddSocketDataToFactory(&socket_factory_); 894 mock_quic_data2.AddSocketDataToFactory(&socket_factory_);
899 895
900 params_.enable_alternative_service_with_different_host = false;
901 CreateSession(); 896 CreateSession();
902 897
903 EXPECT_EQ(0U, test_socket_performance_watcher_factory_.watcher_count()); 898 EXPECT_EQ(0U, test_socket_performance_watcher_factory_.watcher_count());
904 for (size_t i = 0; i < 2; ++i) { 899 for (size_t i = 0; i < 2; ++i) {
905 std::unique_ptr<HttpNetworkTransaction> trans( 900 std::unique_ptr<HttpNetworkTransaction> trans(
906 new HttpNetworkTransaction(DEFAULT_PRIORITY, session_.get())); 901 new HttpNetworkTransaction(DEFAULT_PRIORITY, session_.get()));
907 TestCompletionCallback callback; 902 TestCompletionCallback callback;
908 int rv = trans->Start(&request_, callback.callback(), net_log_.bound()); 903 int rv = trans->Start(&request_, callback.callback(), net_log_.bound());
909 EXPECT_EQ(ERR_IO_PENDING, rv); 904 EXPECT_EQ(ERR_IO_PENDING, rv);
910 EXPECT_EQ(ERR_CONNECTION_CLOSED, callback.WaitForResult()); 905 EXPECT_EQ(ERR_CONNECTION_CLOSED, callback.WaitForResult());
911 EXPECT_EQ(1 + i, test_socket_performance_watcher_factory_.watcher_count()); 906 EXPECT_EQ(1 + i, test_socket_performance_watcher_factory_.watcher_count());
912 } 907 }
913 } 908 }
914 909
915 TEST_P(QuicNetworkTransactionTest, DoNotForceQuicForHttps) { 910 TEST_P(QuicNetworkTransactionTest, DoNotForceQuicForHttps) {
916 // Attempt to "force" quic on 443, which will not be honored. 911 // Attempt to "force" quic on 443, which will not be honored.
917 params_.origins_to_force_quic_on.insert( 912 params_.origins_to_force_quic_on.insert(
918 HostPortPair::FromString("www.google.com:443")); 913 HostPortPair::FromString("www.google.com:443"));
919 914
920 MockRead http_reads[] = { 915 MockRead http_reads[] = {
921 MockRead("HTTP/1.1 200 OK\r\n\r\n"), MockRead("hello world"), 916 MockRead("HTTP/1.1 200 OK\r\n\r\n"), MockRead("hello world"),
922 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), 917 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ),
923 MockRead(ASYNC, OK)}; 918 MockRead(ASYNC, OK)};
924 919
925 StaticSocketDataProvider data(http_reads, arraysize(http_reads), nullptr, 0); 920 StaticSocketDataProvider data(http_reads, arraysize(http_reads), nullptr, 0);
926 socket_factory_.AddSocketDataProvider(&data); 921 socket_factory_.AddSocketDataProvider(&data);
927 SSLSocketDataProvider ssl(ASYNC, OK); 922 SSLSocketDataProvider ssl(ASYNC, OK);
928 socket_factory_.AddSSLSocketDataProvider(&ssl); 923 socket_factory_.AddSSLSocketDataProvider(&ssl);
929 924
930 params_.enable_alternative_service_with_different_host = false;
931 CreateSession(); 925 CreateSession();
932 926
933 SendRequestAndExpectHttpResponse("hello world"); 927 SendRequestAndExpectHttpResponse("hello world");
934 EXPECT_EQ(0U, test_socket_performance_watcher_factory_.watcher_count()); 928 EXPECT_EQ(0U, test_socket_performance_watcher_factory_.watcher_count());
935 } 929 }
936 930
937 TEST_P(QuicNetworkTransactionTest, UseAlternativeServiceForQuic) { 931 TEST_P(QuicNetworkTransactionTest, UseAlternativeServiceForQuic) {
938 MockRead http_reads[] = { 932 MockRead http_reads[] = {
939 MockRead("HTTP/1.1 200 OK\r\n"), MockRead(kQuicAlternativeServiceHeader), 933 MockRead("HTTP/1.1 200 OK\r\n"), MockRead(kQuicAlternativeServiceHeader),
940 MockRead("hello world"), 934 MockRead("hello world"),
(...skipping 1188 matching lines...) Expand 10 before | Expand all | Expand 10 after
2129 MockRead reads[] = {MockRead(SYNCHRONOUS, ERR_IO_PENDING, 0)}; 2123 MockRead reads[] = {MockRead(SYNCHRONOUS, ERR_IO_PENDING, 0)};
2130 MockWrite writes[] = {MockWrite(SYNCHRONOUS, ERR_FAILED, 1)}; 2124 MockWrite writes[] = {MockWrite(SYNCHRONOUS, ERR_FAILED, 1)};
2131 SequencedSocketData socket_data(reads, arraysize(reads), writes, 2125 SequencedSocketData socket_data(reads, arraysize(reads), writes,
2132 arraysize(writes)); 2126 arraysize(writes));
2133 socket_factory_.AddSocketDataProvider(&socket_data); 2127 socket_factory_.AddSocketDataProvider(&socket_data);
2134 2128
2135 // The non-alternate protocol job needs to hang in order to guarantee that 2129 // The non-alternate protocol job needs to hang in order to guarantee that
2136 // the alternate-protocol job will "win". 2130 // the alternate-protocol job will "win".
2137 AddHangingNonAlternateProtocolSocketData(); 2131 AddHangingNonAlternateProtocolSocketData();
2138 2132
2139 params_.enable_alternative_service_with_different_host = false;
2140 CreateSession(); 2133 CreateSession();
2141 request_.method = "POST"; 2134 request_.method = "POST";
2142 ChunkedUploadDataStream upload_data(0); 2135 ChunkedUploadDataStream upload_data(0);
2143 upload_data.AppendData("1", 1, true); 2136 upload_data.AppendData("1", 1, true);
2144 2137
2145 request_.upload_data_stream = &upload_data; 2138 request_.upload_data_stream = &upload_data;
2146 2139
2147 std::unique_ptr<HttpNetworkTransaction> trans( 2140 std::unique_ptr<HttpNetworkTransaction> trans(
2148 new HttpNetworkTransaction(DEFAULT_PRIORITY, session_.get())); 2141 new HttpNetworkTransaction(DEFAULT_PRIORITY, session_.get()));
2149 TestCompletionCallback callback; 2142 TestCompletionCallback callback;
(...skipping 24 matching lines...) Expand all
2174 2167
2175 HttpNetworkSession::Params params; 2168 HttpNetworkSession::Params params;
2176 2169
2177 clock_->AdvanceTime(QuicTime::Delta::FromMilliseconds(20)); 2170 clock_->AdvanceTime(QuicTime::Delta::FromMilliseconds(20));
2178 params.quic_clock = clock_; 2171 params.quic_clock = clock_;
2179 2172
2180 crypto_client_stream_factory_.set_handshake_mode( 2173 crypto_client_stream_factory_.set_handshake_mode(
2181 MockCryptoClientStream::CONFIRM_HANDSHAKE); 2174 MockCryptoClientStream::CONFIRM_HANDSHAKE);
2182 params.quic_crypto_client_stream_factory = &crypto_client_stream_factory_; 2175 params.quic_crypto_client_stream_factory = &crypto_client_stream_factory_;
2183 2176
2184 params.enable_alternative_service_with_different_host = true;
2185 params.enable_quic = true; 2177 params.enable_quic = true;
2186 params.quic_random = &random_generator_; 2178 params.quic_random = &random_generator_;
2187 params.client_socket_factory = &socket_factory_; 2179 params.client_socket_factory = &socket_factory_;
2188 params.host_resolver = &host_resolver_; 2180 params.host_resolver = &host_resolver_;
2189 params.cert_verifier = &cert_verifier_; 2181 params.cert_verifier = &cert_verifier_;
2190 params.transport_security_state = &transport_security_state_; 2182 params.transport_security_state = &transport_security_state_;
2191 params.cert_transparency_verifier = cert_transparency_verifier_.get(); 2183 params.cert_transparency_verifier = cert_transparency_verifier_.get();
2192 params.ct_policy_enforcer = &ct_policy_enforcer_; 2184 params.ct_policy_enforcer = &ct_policy_enforcer_;
2193 params.socket_performance_watcher_factory = 2185 params.socket_performance_watcher_factory =
2194 &test_socket_performance_watcher_factory_; 2186 &test_socket_performance_watcher_factory_;
(...skipping 373 matching lines...) Expand 10 before | Expand all | Expand 10 after
2568 AddHangingSocketData(); 2560 AddHangingSocketData();
2569 2561
2570 SendRequestAndExpectQuicResponse(origin1_); 2562 SendRequestAndExpectQuicResponse(origin1_);
2571 SendRequestAndExpectQuicResponse(origin2_); 2563 SendRequestAndExpectQuicResponse(origin2_);
2572 2564
2573 EXPECT_TRUE(AllDataConsumed()); 2565 EXPECT_TRUE(AllDataConsumed());
2574 } 2566 }
2575 2567
2576 } // namespace test 2568 } // namespace test
2577 } // namespace net 2569 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698