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

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

Issue 2011983002: Remove |parse_alternative_service| flag. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase. 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
« no previous file with comments | « net/log/net_log_util.cc ('k') | net/spdy/spdy_network_transaction_unittest.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 <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 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
64 namespace { 64 namespace {
65 65
66 enum DestinationType { 66 enum DestinationType {
67 // In pooling tests with two requests for different origins to the same 67 // In pooling tests with two requests for different origins to the same
68 // destination, the destination should be 68 // destination, the destination should be
69 SAME_AS_FIRST, // the same as the first origin, 69 SAME_AS_FIRST, // the same as the first origin,
70 SAME_AS_SECOND, // the same as the second origin, or 70 SAME_AS_SECOND, // the same as the second origin, or
71 DIFFERENT, // different from both. 71 DIFFERENT, // different from both.
72 }; 72 };
73 73
74 static const char kQuicAlternateProtocolHeader[] =
75 "Alternate-Protocol: 443:quic\r\n\r\n";
76 static const char kQuicAlternateProtocolWithProbabilityHeader[] =
77 "Alternate-Protocol: 443:quic,p=.5\r\n\r\n";
78 static const char kQuicAlternateProtocolDifferentPortHeader[] =
79 "Alternate-Protocol: 137:quic\r\n\r\n";
80 static const char kQuicAlternativeServiceHeader[] = 74 static const char kQuicAlternativeServiceHeader[] =
81 "Alt-Svc: quic=\":443\"\r\n\r\n"; 75 "Alt-Svc: quic=\":443\"\r\n\r\n";
82 static const char kQuicAlternativeServiceWithProbabilityHeader[] = 76 static const char kQuicAlternativeServiceWithProbabilityHeader[] =
83 "Alt-Svc: quic=\":443\";p=\".5\"\r\n\r\n"; 77 "Alt-Svc: quic=\":443\";p=\".5\"\r\n\r\n";
84 static const char kQuicAlternativeServiceDifferentPortHeader[] = 78 static const char kQuicAlternativeServiceDifferentPortHeader[] =
85 "Alt-Svc: quic=\":137\"\r\n\r\n"; 79 "Alt-Svc: quic=\":137\"\r\n\r\n";
86 80
87 const char kDefaultServerHostName[] = "mail.example.org"; 81 const char kDefaultServerHostName[] = "mail.example.org";
88 const char kDifferentHostname[] = "different.example.com"; 82 const char kDifferentHostname[] = "different.example.com";
89 83
(...skipping 1488 matching lines...) Expand 10 before | Expand all | Expand 10 after
1578 1572
1579 mock_quic_data.AddSocketDataToFactory(&socket_factory_); 1573 mock_quic_data.AddSocketDataToFactory(&socket_factory_);
1580 1574
1581 AddHangingNonAlternateProtocolSocketData(); 1575 AddHangingNonAlternateProtocolSocketData();
1582 CreateSession(); 1576 CreateSession();
1583 1577
1584 // TODO(rtenneti): Test QUIC over HTTPS, GetSSLInfo(). 1578 // TODO(rtenneti): Test QUIC over HTTPS, GetSSLInfo().
1585 SendRequestAndExpectHttpResponse("hello world"); 1579 SendRequestAndExpectHttpResponse("hello world");
1586 } 1580 }
1587 1581
1588 TEST_P(QuicNetworkTransactionTest, UseAlternateProtocolForQuic) { 1582 TEST_P(QuicNetworkTransactionTest, HungAlternativeService) {
1589 MockRead http_reads[] = {
1590 MockRead("HTTP/1.1 200 OK\r\n"), MockRead(kQuicAlternateProtocolHeader),
1591 MockRead("hello world"),
1592 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ),
1593 MockRead(ASYNC, OK)};
1594
1595 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), nullptr,
1596 0);
1597 socket_factory_.AddSocketDataProvider(&http_data);
1598 socket_factory_.AddSSLSocketDataProvider(&ssl_data_);
1599
1600 MockQuicData mock_quic_data;
1601 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket(
1602 1, kClientDataStreamId1, true, true,
1603 GetRequestHeaders("GET", "https", "/")));
1604 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket(
1605 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK")));
1606 mock_quic_data.AddRead(ConstructServerDataPacket(2, kClientDataStreamId1,
1607 false, true, 0, "hello!"));
1608 mock_quic_data.AddWrite(ConstructClientAckPacket(2, 1));
1609 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read
1610 mock_quic_data.AddRead(ASYNC, 0); // EOF
1611
1612 mock_quic_data.AddSocketDataToFactory(&socket_factory_);
1613
1614 // The non-alternate protocol job needs to hang in order to guarantee that
1615 // the alternate-protocol job will "win".
1616 AddHangingNonAlternateProtocolSocketData();
1617
1618 params_.parse_alternative_services = false;
1619 params_.parse_alternative_services = false;
1620 CreateSession();
1621
1622 SendRequestAndExpectHttpResponse("hello world");
1623 SendRequestAndExpectQuicResponse("hello!");
1624 }
1625
1626 TEST_P(QuicNetworkTransactionTest, UseAlternateProtocolWithProbabilityForQuic) {
1627 MockRead http_reads[] = {
1628 MockRead("HTTP/1.1 200 OK\r\n"),
1629 MockRead(kQuicAlternateProtocolWithProbabilityHeader),
1630 MockRead("hello world"),
1631 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ),
1632 MockRead(ASYNC, OK)};
1633
1634 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), nullptr,
1635 0);
1636 socket_factory_.AddSocketDataProvider(&http_data);
1637 socket_factory_.AddSSLSocketDataProvider(&ssl_data_);
1638
1639 MockQuicData mock_quic_data;
1640 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket(
1641 1, kClientDataStreamId1, true, true,
1642 GetRequestHeaders("GET", "https", "/")));
1643 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket(
1644 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK")));
1645 mock_quic_data.AddRead(ConstructServerDataPacket(2, kClientDataStreamId1,
1646 false, true, 0, "hello!"));
1647 mock_quic_data.AddWrite(ConstructClientAckPacket(2, 1));
1648 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read
1649 mock_quic_data.AddRead(ASYNC, 0); // EOF
1650
1651 mock_quic_data.AddSocketDataToFactory(&socket_factory_);
1652
1653 // The non-alternate protocol job needs to hang in order to guarantee that
1654 // the alternate-protocol job will "win".
1655 AddHangingNonAlternateProtocolSocketData();
1656
1657 params_.parse_alternative_services = false;
1658 params_.parse_alternative_services = false;
1659 CreateSession();
1660
1661 SendRequestAndExpectHttpResponse("hello world");
1662 SendRequestAndExpectQuicResponse("hello!");
1663 }
1664
1665 TEST_P(QuicNetworkTransactionTest, AlternateProtocolDifferentPort) {
1666 MockRead http_reads[] = {
1667 MockRead("HTTP/1.1 200 OK\r\n"),
1668 MockRead(kQuicAlternateProtocolDifferentPortHeader),
1669 MockRead("hello world"),
1670 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ),
1671 MockRead(ASYNC, OK)};
1672
1673 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), nullptr,
1674 0);
1675 socket_factory_.AddSocketDataProvider(&http_data);
1676 socket_factory_.AddSSLSocketDataProvider(&ssl_data_);
1677
1678 // The non-alternate protocol job needs to hang in order to guarantee that
1679 // the alternate-protocol job will "win".
1680 AddHangingNonAlternateProtocolSocketData();
1681
1682 params_.parse_alternative_services = false;
1683 CreateSession();
1684
1685 SendRequestAndExpectHttpResponse("hello world");
1686
1687 url::SchemeHostPort http_server("https", kDefaultServerHostName, 443);
1688 AlternativeServiceVector alternative_service_vector =
1689 http_server_properties_.GetAlternativeServices(http_server);
1690 ASSERT_EQ(1u, alternative_service_vector.size());
1691 const AlternativeService alternative_service = alternative_service_vector[0];
1692 EXPECT_EQ(QUIC, alternative_service_vector[0].protocol);
1693 EXPECT_EQ(kDefaultServerHostName, alternative_service_vector[0].host);
1694 EXPECT_EQ(137, alternative_service_vector[0].port);
1695 }
1696
1697 TEST_P(QuicNetworkTransactionTest, ConfirmAlternateProtocol) {
1698 MockRead http_reads[] = {
1699 MockRead("HTTP/1.1 200 OK\r\n"), MockRead(kQuicAlternateProtocolHeader),
1700 MockRead("hello world"),
1701 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ),
1702 MockRead(ASYNC, OK)};
1703
1704 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), nullptr,
1705 0);
1706 socket_factory_.AddSocketDataProvider(&http_data);
1707 socket_factory_.AddSSLSocketDataProvider(&ssl_data_);
1708
1709 MockQuicData mock_quic_data;
1710 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket(
1711 1, kClientDataStreamId1, true, true,
1712 GetRequestHeaders("GET", "https", "/")));
1713 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket(
1714 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK")));
1715 mock_quic_data.AddRead(ConstructServerDataPacket(2, kClientDataStreamId1,
1716 false, true, 0, "hello!"));
1717 mock_quic_data.AddWrite(ConstructClientAckPacket(2, 1));
1718 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read
1719 mock_quic_data.AddRead(ASYNC, 0); // EOF
1720
1721 mock_quic_data.AddSocketDataToFactory(&socket_factory_);
1722
1723 // The non-alternate protocol job needs to hang in order to guarantee that
1724 // the alternate-protocol job will "win".
1725 AddHangingNonAlternateProtocolSocketData();
1726
1727 params_.parse_alternative_services = false;
1728 CreateSession();
1729
1730 AlternativeService alternative_service(QUIC,
1731 HostPortPair::FromURL(request_.url));
1732 http_server_properties_.MarkAlternativeServiceRecentlyBroken(
1733 alternative_service);
1734 EXPECT_TRUE(http_server_properties_.WasAlternativeServiceRecentlyBroken(
1735 alternative_service));
1736
1737 SendRequestAndExpectHttpResponse("hello world");
1738 SendRequestAndExpectQuicResponse("hello!");
1739
1740 mock_quic_data.Resume();
1741
1742 EXPECT_FALSE(http_server_properties_.WasAlternativeServiceRecentlyBroken(
1743 alternative_service));
1744 }
1745
1746 TEST_P(QuicNetworkTransactionTest, UseAlternateProtocolForQuicForHttps) {
1747 MockRead http_reads[] = {
1748 MockRead("HTTP/1.1 200 OK\r\n"), MockRead(kQuicAlternateProtocolHeader),
1749 MockRead("hello world"),
1750 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ),
1751 MockRead(ASYNC, OK)};
1752
1753 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), nullptr,
1754 0);
1755 socket_factory_.AddSocketDataProvider(&http_data);
1756
1757 MockQuicData mock_quic_data;
1758 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket(
1759 1, kClientDataStreamId1, true, true,
1760 GetRequestHeaders("GET", "https", "/")));
1761 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket(
1762 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK")));
1763 mock_quic_data.AddRead(ConstructServerDataPacket(2, kClientDataStreamId1,
1764 false, true, 0, "hello!"));
1765 mock_quic_data.AddWrite(ConstructClientAckPacket(2, 1));
1766 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read
1767 mock_quic_data.AddRead(ASYNC, 0); // EOF
1768
1769 mock_quic_data.AddSocketDataToFactory(&socket_factory_);
1770
1771 // The non-alternate protocol job needs to hang in order to guarantee that
1772 // the alternate-protocol job will "win".
1773 AddHangingNonAlternateProtocolSocketData();
1774
1775 CreateSession();
1776
1777 // TODO(rtenneti): Test QUIC over HTTPS, GetSSLInfo().
1778 SendRequestAndExpectHttpResponse("hello world");
1779 }
1780
1781 TEST_P(QuicNetworkTransactionTest, HungAlternateProtocol) {
1782 params_.parse_alternative_services = false;
1783 crypto_client_stream_factory_.set_handshake_mode( 1583 crypto_client_stream_factory_.set_handshake_mode(
1784 MockCryptoClientStream::COLD_START); 1584 MockCryptoClientStream::COLD_START);
1785 1585
1786 MockWrite http_writes[] = { 1586 MockWrite http_writes[] = {
1787 MockWrite(SYNCHRONOUS, 0, "GET / HTTP/1.1\r\n"), 1587 MockWrite(SYNCHRONOUS, 0, "GET / HTTP/1.1\r\n"),
1788 MockWrite(SYNCHRONOUS, 1, "Host: mail.example.org\r\n"), 1588 MockWrite(SYNCHRONOUS, 1, "Host: mail.example.org\r\n"),
1789 MockWrite(SYNCHRONOUS, 2, "Connection: keep-alive\r\n\r\n")}; 1589 MockWrite(SYNCHRONOUS, 2, "Connection: keep-alive\r\n\r\n")};
1790 1590
1791 MockRead http_reads[] = { 1591 MockRead http_reads[] = {
1792 MockRead(SYNCHRONOUS, 3, "HTTP/1.1 200 OK\r\n"), 1592 MockRead(SYNCHRONOUS, 3, "HTTP/1.1 200 OK\r\n"),
1793 MockRead(SYNCHRONOUS, 4, kQuicAlternateProtocolHeader), 1593 MockRead(SYNCHRONOUS, 4, kQuicAlternativeServiceHeader),
1794 MockRead(SYNCHRONOUS, 5, "hello world"), MockRead(SYNCHRONOUS, OK, 6)}; 1594 MockRead(SYNCHRONOUS, 5, "hello world"), MockRead(SYNCHRONOUS, OK, 6)};
1795 1595
1796 SequencedSocketData http_data(http_reads, arraysize(http_reads), http_writes, 1596 SequencedSocketData http_data(http_reads, arraysize(http_reads), http_writes,
1797 arraysize(http_writes)); 1597 arraysize(http_writes));
1798 socket_factory_.AddSocketDataProvider(&http_data); 1598 socket_factory_.AddSocketDataProvider(&http_data);
1799 socket_factory_.AddSSLSocketDataProvider(&ssl_data_); 1599 socket_factory_.AddSSLSocketDataProvider(&ssl_data_);
1800 1600
1801 // The QUIC transaction will not be allowed to complete. 1601 // The QUIC transaction will not be allowed to complete.
1802 MockWrite quic_writes[] = {MockWrite(SYNCHRONOUS, ERR_IO_PENDING, 1)}; 1602 MockWrite quic_writes[] = {MockWrite(SYNCHRONOUS, ERR_IO_PENDING, 1)};
1803 MockRead quic_reads[] = { 1603 MockRead quic_reads[] = {
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
1889 proxy_service_ = ProxyService::CreateFixedFromPacResult("PROXY myproxy:70"); 1689 proxy_service_ = ProxyService::CreateFixedFromPacResult("PROXY myproxy:70");
1890 1690
1891 // Since we are using a proxy, the QUIC job will not succeed. 1691 // Since we are using a proxy, the QUIC job will not succeed.
1892 MockWrite http_writes[] = { 1692 MockWrite http_writes[] = {
1893 MockWrite(SYNCHRONOUS, 0, "GET http://mail.example.org/ HTTP/1.1\r\n"), 1693 MockWrite(SYNCHRONOUS, 0, "GET http://mail.example.org/ HTTP/1.1\r\n"),
1894 MockWrite(SYNCHRONOUS, 1, "Host: mail.example.org\r\n"), 1694 MockWrite(SYNCHRONOUS, 1, "Host: mail.example.org\r\n"),
1895 MockWrite(SYNCHRONOUS, 2, "Proxy-Connection: keep-alive\r\n\r\n")}; 1695 MockWrite(SYNCHRONOUS, 2, "Proxy-Connection: keep-alive\r\n\r\n")};
1896 1696
1897 MockRead http_reads[] = { 1697 MockRead http_reads[] = {
1898 MockRead(SYNCHRONOUS, 3, "HTTP/1.1 200 OK\r\n"), 1698 MockRead(SYNCHRONOUS, 3, "HTTP/1.1 200 OK\r\n"),
1899 MockRead(SYNCHRONOUS, 4, kQuicAlternateProtocolHeader), 1699 MockRead(SYNCHRONOUS, 4, kQuicAlternativeServiceHeader),
1900 MockRead(SYNCHRONOUS, 5, "hello world"), MockRead(SYNCHRONOUS, OK, 6)}; 1700 MockRead(SYNCHRONOUS, 5, "hello world"), MockRead(SYNCHRONOUS, OK, 6)};
1901 1701
1902 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), 1702 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads),
1903 http_writes, arraysize(http_writes)); 1703 http_writes, arraysize(http_writes));
1904 socket_factory_.AddSocketDataProvider(&http_data); 1704 socket_factory_.AddSocketDataProvider(&http_data);
1905 1705
1906 // In order for a new QUIC session to be established via alternate-protocol 1706 // In order for a new QUIC session to be established via alternate-protocol
1907 // without racing an HTTP connection, we need the host resolution to happen 1707 // without racing an HTTP connection, we need the host resolution to happen
1908 // synchronously. 1708 // synchronously.
1909 host_resolver_.set_synchronous_mode(true); 1709 host_resolver_.set_synchronous_mode(true);
(...skipping 345 matching lines...) Expand 10 before | Expand all | Expand 10 after
2255 MockQuicData mock_quic_data; 2055 MockQuicData mock_quic_data;
2256 mock_quic_data.AddSynchronousRead(ConstructServerConnectionClosePacket(1)); 2056 mock_quic_data.AddSynchronousRead(ConstructServerConnectionClosePacket(1));
2257 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( 2057 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket(
2258 1, kClientDataStreamId1, true, true, 2058 1, kClientDataStreamId1, true, true,
2259 GetRequestHeaders("GET", "https", "/"))); 2059 GetRequestHeaders("GET", "https", "/")));
2260 mock_quic_data.AddWrite(ConstructClientAckPacket(2, 1)); 2060 mock_quic_data.AddWrite(ConstructClientAckPacket(2, 1));
2261 mock_quic_data.AddSocketDataToFactory(&socket_factory_); 2061 mock_quic_data.AddSocketDataToFactory(&socket_factory_);
2262 2062
2263 // When the QUIC connection fails, we will try the request again over HTTP. 2063 // When the QUIC connection fails, we will try the request again over HTTP.
2264 MockRead http_reads[] = { 2064 MockRead http_reads[] = {
2265 MockRead("HTTP/1.1 200 OK\r\n"), MockRead(kQuicAlternateProtocolHeader), 2065 MockRead("HTTP/1.1 200 OK\r\n"), MockRead(kQuicAlternativeServiceHeader),
2266 MockRead("hello world"), 2066 MockRead("hello world"),
2267 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), 2067 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ),
2268 MockRead(ASYNC, OK)}; 2068 MockRead(ASYNC, OK)};
2269 2069
2270 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), nullptr, 2070 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), nullptr,
2271 0); 2071 0);
2272 socket_factory_.AddSocketDataProvider(&http_data); 2072 socket_factory_.AddSocketDataProvider(&http_data);
2273 socket_factory_.AddSSLSocketDataProvider(&ssl_data_); 2073 socket_factory_.AddSSLSocketDataProvider(&ssl_data_);
2274 2074
2275 // In order for a new QUIC session to be established via alternate-protocol 2075 // In order for a new QUIC session to be established via alternate-protocol
(...skipping 480 matching lines...) Expand 10 before | Expand all | Expand 10 after
2756 AddHangingSocketData(); 2556 AddHangingSocketData();
2757 2557
2758 SendRequestAndExpectQuicResponse(origin1_); 2558 SendRequestAndExpectQuicResponse(origin1_);
2759 SendRequestAndExpectQuicResponse(origin2_); 2559 SendRequestAndExpectQuicResponse(origin2_);
2760 2560
2761 EXPECT_TRUE(AllDataConsumed()); 2561 EXPECT_TRUE(AllDataConsumed());
2762 } 2562 }
2763 2563
2764 } // namespace test 2564 } // namespace test
2765 } // namespace net 2565 } // namespace net
OLDNEW
« no previous file with comments | « net/log/net_log_util.cc ('k') | net/spdy/spdy_network_transaction_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698