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

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

Issue 1904483004: Change SupportsSpdy dict, SpdySettingsMap, ServerNetworkStatsMap, AlternativeServiceMap and disk da… (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fix compile after sync code, introduced by commit 388755 Created 4 years, 8 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_stream_factory_impl_unittest.cc ('k') | net/quic/quic_stream_factory.cc » ('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 <memory> 5 #include <memory>
6 #include <string> 6 #include <string>
7 #include <utility> 7 #include <utility>
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/compiler_specific.h" 10 #include "base/compiler_specific.h"
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
48 #include "net/socket/client_socket_factory.h" 48 #include "net/socket/client_socket_factory.h"
49 #include "net/socket/mock_client_socket_pool_manager.h" 49 #include "net/socket/mock_client_socket_pool_manager.h"
50 #include "net/socket/socket_test_util.h" 50 #include "net/socket/socket_test_util.h"
51 #include "net/socket/ssl_client_socket.h" 51 #include "net/socket/ssl_client_socket.h"
52 #include "net/spdy/spdy_frame_builder.h" 52 #include "net/spdy/spdy_frame_builder.h"
53 #include "net/spdy/spdy_framer.h" 53 #include "net/spdy/spdy_framer.h"
54 #include "net/ssl/ssl_config_service_defaults.h" 54 #include "net/ssl/ssl_config_service_defaults.h"
55 #include "net/test/cert_test_util.h" 55 #include "net/test/cert_test_util.h"
56 #include "testing/gtest/include/gtest/gtest.h" 56 #include "testing/gtest/include/gtest/gtest.h"
57 #include "testing/platform_test.h" 57 #include "testing/platform_test.h"
58 #include "url/gurl.h"
58 59
59 namespace net { 60 namespace net {
60 namespace test { 61 namespace test {
61 62
62 namespace { 63 namespace {
63 64
64 static const char kQuicAlternateProtocolHeader[] = 65 static const char kQuicAlternateProtocolHeader[] =
65 "Alternate-Protocol: 443:quic\r\n\r\n"; 66 "Alternate-Protocol: 443:quic\r\n\r\n";
66 static const char kQuicAlternateProtocolWithProbabilityHeader[] = 67 static const char kQuicAlternateProtocolWithProbabilityHeader[] =
67 "Alternate-Protocol: 443:quic,p=.5\r\n\r\n"; 68 "Alternate-Protocol: 443:quic,p=.5\r\n\r\n";
(...skipping 462 matching lines...) Expand 10 before | Expand all | Expand 10 after
530 531
531 void SendRequestAndExpectQuicResponseFromProxyOnPort( 532 void SendRequestAndExpectQuicResponseFromProxyOnPort(
532 const std::string& expected, 533 const std::string& expected,
533 uint16_t port) { 534 uint16_t port) {
534 SendRequestAndExpectQuicResponseMaybeFromProxy(expected, true, port); 535 SendRequestAndExpectQuicResponseMaybeFromProxy(expected, true, port);
535 } 536 }
536 537
537 void AddQuicAlternateProtocolMapping( 538 void AddQuicAlternateProtocolMapping(
538 MockCryptoClientStream::HandshakeMode handshake_mode) { 539 MockCryptoClientStream::HandshakeMode handshake_mode) {
539 crypto_client_stream_factory_.set_handshake_mode(handshake_mode); 540 crypto_client_stream_factory_.set_handshake_mode(handshake_mode);
540 HostPortPair host_port_pair = HostPortPair::FromURL(request_.url); 541 url::SchemeHostPort server(request_.url);
541 AlternativeService alternative_service(QUIC, host_port_pair.host(), 443); 542 AlternativeService alternative_service(QUIC, server.host(), 443);
542 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); 543 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1);
543 http_server_properties_.SetAlternativeService( 544 http_server_properties_.SetAlternativeService(server, alternative_service,
544 host_port_pair, alternative_service, expiration); 545 expiration);
545 } 546 }
546 547
547 void AddQuicRemoteAlternativeServiceMapping( 548 void AddQuicRemoteAlternativeServiceMapping(
548 MockCryptoClientStream::HandshakeMode handshake_mode, 549 MockCryptoClientStream::HandshakeMode handshake_mode,
549 const HostPortPair& alternative) { 550 const HostPortPair& alternative) {
550 crypto_client_stream_factory_.set_handshake_mode(handshake_mode); 551 crypto_client_stream_factory_.set_handshake_mode(handshake_mode);
551 HostPortPair host_port_pair = HostPortPair::FromURL(request_.url); 552 url::SchemeHostPort server(request_.url);
552 AlternativeService alternative_service(QUIC, alternative.host(), 553 AlternativeService alternative_service(QUIC, alternative.host(),
553 alternative.port()); 554 alternative.port());
554 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); 555 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1);
555 http_server_properties_.SetAlternativeService( 556 http_server_properties_.SetAlternativeService(server, alternative_service,
556 host_port_pair, alternative_service, expiration); 557 expiration);
557 } 558 }
558 559
559 void ExpectBrokenAlternateProtocolMapping() { 560 void ExpectBrokenAlternateProtocolMapping() {
560 const HostPortPair origin = HostPortPair::FromURL(request_.url); 561 const url::SchemeHostPort server(request_.url);
561 const AlternativeServiceVector alternative_service_vector = 562 const AlternativeServiceVector alternative_service_vector =
562 http_server_properties_.GetAlternativeServices(origin); 563 http_server_properties_.GetAlternativeServices(server);
563 EXPECT_EQ(1u, alternative_service_vector.size()); 564 EXPECT_EQ(1u, alternative_service_vector.size());
564 EXPECT_TRUE(http_server_properties_.IsAlternativeServiceBroken( 565 EXPECT_TRUE(http_server_properties_.IsAlternativeServiceBroken(
565 alternative_service_vector[0])); 566 alternative_service_vector[0]));
566 } 567 }
567 568
568 void ExpectQuicAlternateProtocolMapping() { 569 void ExpectQuicAlternateProtocolMapping() {
569 const HostPortPair origin = HostPortPair::FromURL(request_.url); 570 const url::SchemeHostPort server(request_.url);
570 const AlternativeServiceVector alternative_service_vector = 571 const AlternativeServiceVector alternative_service_vector =
571 http_server_properties_.GetAlternativeServices(origin); 572 http_server_properties_.GetAlternativeServices(server);
572 EXPECT_EQ(1u, alternative_service_vector.size()); 573 EXPECT_EQ(1u, alternative_service_vector.size());
573 EXPECT_EQ(QUIC, alternative_service_vector[0].protocol); 574 EXPECT_EQ(QUIC, alternative_service_vector[0].protocol);
574 } 575 }
575 576
576 void AddHangingNonAlternateProtocolSocketData() { 577 void AddHangingNonAlternateProtocolSocketData() {
577 std::unique_ptr<StaticSocketDataProvider> hanging_data; 578 std::unique_ptr<StaticSocketDataProvider> hanging_data;
578 hanging_data.reset(new StaticSocketDataProvider()); 579 hanging_data.reset(new StaticSocketDataProvider());
579 MockConnect hanging_connect(SYNCHRONOUS, ERR_IO_PENDING); 580 MockConnect hanging_connect(SYNCHRONOUS, ERR_IO_PENDING);
580 hanging_data->set_connect_data(hanging_connect); 581 hanging_data->set_connect_data(hanging_connect);
581 hanging_data_.push_back(std::move(hanging_data)); 582 hanging_data_.push_back(std::move(hanging_data));
(...skipping 353 matching lines...) Expand 10 before | Expand all | Expand 10 after
935 936
936 mock_quic_data.AddSocketDataToFactory(&socket_factory_); 937 mock_quic_data.AddSocketDataToFactory(&socket_factory_);
937 938
938 AddHangingNonAlternateProtocolSocketData(); 939 AddHangingNonAlternateProtocolSocketData();
939 CreateSession(); 940 CreateSession();
940 941
941 SendRequestAndExpectHttpResponse("hello world"); 942 SendRequestAndExpectHttpResponse("hello world");
942 SendRequestAndExpectQuicResponse("hello!"); 943 SendRequestAndExpectQuicResponse("hello!");
943 } 944 }
944 945
946 TEST_P(QuicNetworkTransactionTest, SetAlternativeServiceWithScheme) {
947 MockRead http_reads[] = {
948 MockRead("HTTP/1.1 200 OK\r\n"),
949 MockRead("Alt-Svc: quic=\"foo.example.org:443\", quic=\":444\"\r\n\r\n"),
950 MockRead("hello world"),
951 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ),
952 MockRead(ASYNC, OK)};
953
954 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), nullptr,
955 0);
956
957 socket_factory_.AddSocketDataProvider(&http_data);
958 socket_factory_.AddSSLSocketDataProvider(&ssl_data_);
959
960 CreateSession();
961 // Send http request, ignore alternative service advertising if response
962 // header advertises alternative service for mail.example.org.
963 request_.url = GURL("http://mail.example.org:443");
964 SendRequestAndExpectHttpResponse("hello world");
965 base::WeakPtr<HttpServerProperties> http_server_properties =
966 session_->http_server_properties();
967 url::SchemeHostPort http_server("http", "mail.example.org", 443);
968 url::SchemeHostPort https_server("https", "mail.example.org", 443);
969 // Check alternative service is set for the correct origin.
970 EXPECT_EQ(2u,
971 http_server_properties->GetAlternativeServices(http_server).size());
972 EXPECT_EQ(
973 0u, http_server_properties->GetAlternativeServices(https_server).size());
974 }
975
976 TEST_P(QuicNetworkTransactionTest, DoNotGetAltSvcForDifferentOrigin) {
977 MockRead http_reads[] = {
978 MockRead("HTTP/1.1 200 OK\r\n"),
979 MockRead("Alt-Svc: quic=\"foo.example.org:443\", quic=\":444\"\r\n\r\n"),
980 MockRead("hello world"),
981 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ),
982 MockRead(ASYNC, OK)};
983
984 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), nullptr,
985 0);
986
987 socket_factory_.AddSocketDataProvider(&http_data);
988 socket_factory_.AddSSLSocketDataProvider(&ssl_data_);
989 socket_factory_.AddSocketDataProvider(&http_data);
990 socket_factory_.AddSSLSocketDataProvider(&ssl_data_);
991
992 CreateSession();
993
994 // Send https request and set alternative services if response header
995 // advertises alternative service for mail.example.org.
996 SendRequestAndExpectHttpResponse("hello world");
997 base::WeakPtr<HttpServerProperties> http_server_properties =
998 session_->http_server_properties();
999
1000 const url::SchemeHostPort https_server(request_.url);
1001 // Check alternative service is set.
1002 AlternativeServiceVector alternative_service_vector =
1003 http_server_properties->GetAlternativeServices(https_server);
1004 EXPECT_EQ(2u, alternative_service_vector.size());
1005
1006 // Send http request to the same origin but with diffrent scheme, should not
1007 // use QUIC.
1008 request_.url = GURL("http://mail.example.org:443");
1009 SendRequestAndExpectHttpResponse("hello world");
1010 }
1011
945 TEST_P(QuicNetworkTransactionTest, UseAlternativeServiceQuicSupportedVersion) { 1012 TEST_P(QuicNetworkTransactionTest, UseAlternativeServiceQuicSupportedVersion) {
946 std::string altsvc_header = base::StringPrintf( 1013 std::string altsvc_header = base::StringPrintf(
947 "Alt-Svc: quic=\":443\"; v=\"%u\"\r\n\r\n", GetParam()); 1014 "Alt-Svc: quic=\":443\"; v=\"%u\"\r\n\r\n", GetParam());
948 MockRead http_reads[] = { 1015 MockRead http_reads[] = {
949 MockRead("HTTP/1.1 200 OK\r\n"), MockRead(altsvc_header.c_str()), 1016 MockRead("HTTP/1.1 200 OK\r\n"), MockRead(altsvc_header.c_str()),
950 MockRead("hello world"), 1017 MockRead("hello world"),
951 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), 1018 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ),
952 MockRead(ASYNC, OK)}; 1019 MockRead(ASYNC, OK)};
953 1020
954 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), nullptr, 1021 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), nullptr,
(...skipping 749 matching lines...) Expand 10 before | Expand all | Expand 10 after
1704 CreateSession(); 1771 CreateSession();
1705 1772
1706 // TODO(rtenneti): Test QUIC over HTTPS, GetSSLInfo(). 1773 // TODO(rtenneti): Test QUIC over HTTPS, GetSSLInfo().
1707 SendRequestAndExpectHttpResponse("hello world"); 1774 SendRequestAndExpectHttpResponse("hello world");
1708 } 1775 }
1709 1776
1710 class QuicAltSvcCertificateVerificationTest 1777 class QuicAltSvcCertificateVerificationTest
1711 : public QuicNetworkTransactionTest { 1778 : public QuicNetworkTransactionTest {
1712 public: 1779 public:
1713 void Run(bool valid) { 1780 void Run(bool valid) {
1714 HostPortPair origin(valid ? "mail.example.org" : "mail.example.com", 443); 1781 url::SchemeHostPort server(GURL(valid ? "https://mail.example.org:443"
1782 : "https://mail.example.com:443"));
1715 HostPortPair alternative("www.example.org", 443); 1783 HostPortPair alternative("www.example.org", 443);
1716 std::string url("https://"); 1784 std::string url("https://");
1717 url.append(origin.host()); 1785 url.append(server.host());
1718 url.append(":443"); 1786 url.append(":443");
1719 request_.url = GURL(url); 1787 request_.url = GURL(url);
1720 1788
1721 maker_.set_hostname(origin.host()); 1789 maker_.set_hostname(server.host());
1722 MockQuicData mock_quic_data; 1790 MockQuicData mock_quic_data;
1723 mock_quic_data.AddWrite( 1791 mock_quic_data.AddWrite(
1724 ConstructRequestHeadersPacket(1, kClientDataStreamId1, true, true, 1792 ConstructRequestHeadersPacket(1, kClientDataStreamId1, true, true,
1725 GetRequestHeaders("GET", "https", "/"))); 1793 GetRequestHeaders("GET", "https", "/")));
1726 mock_quic_data.AddRead(ConstructResponseHeadersPacket( 1794 mock_quic_data.AddRead(ConstructResponseHeadersPacket(
1727 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK"))); 1795 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK")));
1728 mock_quic_data.AddRead( 1796 mock_quic_data.AddRead(
1729 ConstructDataPacket(2, kClientDataStreamId1, false, true, 0, "hello!")); 1797 ConstructDataPacket(2, kClientDataStreamId1, false, true, 0, "hello!"));
1730 mock_quic_data.AddWrite(ConstructAckPacket(2, 1)); 1798 mock_quic_data.AddWrite(ConstructAckPacket(2, 1));
1731 mock_quic_data.AddRead(SYNCHRONOUS, ERR_IO_PENDING); 1799 mock_quic_data.AddRead(SYNCHRONOUS, ERR_IO_PENDING);
1732 mock_quic_data.AddSocketDataToFactory(&socket_factory_); 1800 mock_quic_data.AddSocketDataToFactory(&socket_factory_);
1733 1801
1734 scoped_refptr<X509Certificate> cert( 1802 scoped_refptr<X509Certificate> cert(
1735 ImportCertFromFile(GetTestCertsDirectory(), "wildcard.pem")); 1803 ImportCertFromFile(GetTestCertsDirectory(), "wildcard.pem"));
1736 ASSERT_TRUE(cert.get()); 1804 ASSERT_TRUE(cert.get());
1737 bool common_name_fallback_used; 1805 bool common_name_fallback_used;
1738 EXPECT_EQ(valid, 1806 EXPECT_EQ(valid,
1739 cert->VerifyNameMatch(origin.host(), &common_name_fallback_used)); 1807 cert->VerifyNameMatch(server.host(), &common_name_fallback_used));
1740 EXPECT_TRUE( 1808 EXPECT_TRUE(
1741 cert->VerifyNameMatch(alternative.host(), &common_name_fallback_used)); 1809 cert->VerifyNameMatch(alternative.host(), &common_name_fallback_used));
1742 ProofVerifyDetailsChromium verify_details; 1810 ProofVerifyDetailsChromium verify_details;
1743 verify_details.cert_verify_result.verified_cert = cert; 1811 verify_details.cert_verify_result.verified_cert = cert;
1744 verify_details.cert_verify_result.is_issued_by_known_root = true; 1812 verify_details.cert_verify_result.is_issued_by_known_root = true;
1745 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details); 1813 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details);
1746 crypto_client_stream_factory_.set_handshake_mode( 1814 crypto_client_stream_factory_.set_handshake_mode(
1747 MockCryptoClientStream::CONFIRM_HANDSHAKE); 1815 MockCryptoClientStream::CONFIRM_HANDSHAKE);
1748 1816
1749 // Connection to |origin| fails, so that success of |request| depends on 1817 // Connection to |server| fails, so that success of |request| depends on
1750 // connection to |alternate| only. 1818 // connection to |alternate| only.
1751 MockConnect refused_connect(ASYNC, ERR_CONNECTION_REFUSED); 1819 MockConnect refused_connect(ASYNC, ERR_CONNECTION_REFUSED);
1752 StaticSocketDataProvider refused_data; 1820 StaticSocketDataProvider refused_data;
1753 refused_data.set_connect_data(refused_connect); 1821 refused_data.set_connect_data(refused_connect);
1754 socket_factory_.AddSocketDataProvider(&refused_data); 1822 socket_factory_.AddSocketDataProvider(&refused_data);
1755 1823
1756 CreateSession(); 1824 CreateSession();
1757 AlternativeService alternative_service(QUIC, alternative); 1825 AlternativeService alternative_service(QUIC, alternative);
1758 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); 1826 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1);
1759 session_->http_server_properties()->SetAlternativeService( 1827 session_->http_server_properties()->SetAlternativeService(
1760 origin, alternative_service, expiration); 1828 server, alternative_service, expiration);
1761 std::unique_ptr<HttpNetworkTransaction> trans( 1829 std::unique_ptr<HttpNetworkTransaction> trans(
1762 new HttpNetworkTransaction(DEFAULT_PRIORITY, session_.get())); 1830 new HttpNetworkTransaction(DEFAULT_PRIORITY, session_.get()));
1763 TestCompletionCallback callback; 1831 TestCompletionCallback callback;
1764 int rv = trans->Start(&request_, callback.callback(), net_log_.bound()); 1832 int rv = trans->Start(&request_, callback.callback(), net_log_.bound());
1765 EXPECT_EQ(ERR_IO_PENDING, rv); 1833 EXPECT_EQ(ERR_IO_PENDING, rv);
1766 rv = callback.WaitForResult(); 1834 rv = callback.WaitForResult();
1767 if (valid) { 1835 if (valid) {
1768 EXPECT_EQ(OK, rv); 1836 EXPECT_EQ(OK, rv);
1769 CheckWasQuicResponse(trans); 1837 CheckWasQuicResponse(trans);
1770 CheckResponsePort(trans, 443); 1838 CheckResponsePort(trans, 443);
(...skipping 577 matching lines...) Expand 10 before | Expand all | Expand 10 after
2348 std::unique_ptr<HttpNetworkTransaction> trans( 2416 std::unique_ptr<HttpNetworkTransaction> trans(
2349 new HttpNetworkTransaction(DEFAULT_PRIORITY, session_.get())); 2417 new HttpNetworkTransaction(DEFAULT_PRIORITY, session_.get()));
2350 TestCompletionCallback callback; 2418 TestCompletionCallback callback;
2351 int rv = trans->Start(&request_, callback.callback(), net_log_.bound()); 2419 int rv = trans->Start(&request_, callback.callback(), net_log_.bound());
2352 EXPECT_EQ(ERR_IO_PENDING, rv); 2420 EXPECT_EQ(ERR_IO_PENDING, rv);
2353 EXPECT_NE(OK, callback.WaitForResult()); 2421 EXPECT_NE(OK, callback.WaitForResult());
2354 } 2422 }
2355 2423
2356 } // namespace test 2424 } // namespace test
2357 } // namespace net 2425 } // namespace net
OLDNEW
« no previous file with comments | « net/http/http_stream_factory_impl_unittest.cc ('k') | net/quic/quic_stream_factory.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698