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

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

Issue 1699653002: Remove support for Alt-Svc/Alternate Protocol Probability (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix BIDI Created 4 years, 9 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_test.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 <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 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
54 #include "testing/gtest/include/gtest/gtest.h" 54 #include "testing/gtest/include/gtest/gtest.h"
55 #include "testing/platform_test.h" 55 #include "testing/platform_test.h"
56 56
57 namespace net { 57 namespace net {
58 namespace test { 58 namespace test {
59 59
60 namespace { 60 namespace {
61 61
62 static const char kQuicAlternateProtocolHeader[] = 62 static const char kQuicAlternateProtocolHeader[] =
63 "Alternate-Protocol: 443:quic\r\n\r\n"; 63 "Alternate-Protocol: 443:quic\r\n\r\n";
64 static const char kQuicAlternateProtocol50pctHeader[] =
65 "Alternate-Protocol: 443:quic,p=.5\r\n\r\n";
66 static const char kQuicAlternateProtocolDifferentPortHeader[] = 64 static const char kQuicAlternateProtocolDifferentPortHeader[] =
67 "Alternate-Protocol: 137:quic\r\n\r\n"; 65 "Alternate-Protocol: 137:quic\r\n\r\n";
68 static const char kQuicAlternativeServiceHeader[] = 66 static const char kQuicAlternativeServiceHeader[] =
69 "Alt-Svc: quic=\":443\"\r\n\r\n"; 67 "Alt-Svc: quic=\":443\"\r\n\r\n";
70 static const char kQuicAlternativeService50pctHeader[] =
71 "Alt-Svc: quic=\":443\";p=\".5\"\r\n\r\n";
72 static const char kQuicAlternativeServiceDifferentPortHeader[] = 68 static const char kQuicAlternativeServiceDifferentPortHeader[] =
73 "Alt-Svc: quic=\":137\"\r\n\r\n"; 69 "Alt-Svc: quic=\":137\"\r\n\r\n";
74 70
75 const char kDefaultServerHostName[] = "mail.example.org"; 71 const char kDefaultServerHostName[] = "mail.example.org";
76 72
77 } // namespace 73 } // namespace
78 74
79 // Helper class to encapsulate MockReads and MockWrites for QUIC. 75 // Helper class to encapsulate MockReads and MockWrites for QUIC.
80 // Simplify ownership issues and the interaction with the MockSocketFactory. 76 // Simplify ownership issues and the interaction with the MockSocketFactory.
81 class MockQuicData { 77 class MockQuicData {
(...skipping 447 matching lines...) Expand 10 before | Expand all | Expand 10 after
529 SendRequestAndExpectQuicResponseMaybeFromProxy(expected, true, port); 525 SendRequestAndExpectQuicResponseMaybeFromProxy(expected, true, port);
530 } 526 }
531 527
532 void AddQuicAlternateProtocolMapping( 528 void AddQuicAlternateProtocolMapping(
533 MockCryptoClientStream::HandshakeMode handshake_mode) { 529 MockCryptoClientStream::HandshakeMode handshake_mode) {
534 crypto_client_stream_factory_.set_handshake_mode(handshake_mode); 530 crypto_client_stream_factory_.set_handshake_mode(handshake_mode);
535 HostPortPair host_port_pair = HostPortPair::FromURL(request_.url); 531 HostPortPair host_port_pair = HostPortPair::FromURL(request_.url);
536 AlternativeService alternative_service(QUIC, host_port_pair.host(), 443); 532 AlternativeService alternative_service(QUIC, host_port_pair.host(), 443);
537 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); 533 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1);
538 http_server_properties_.SetAlternativeService( 534 http_server_properties_.SetAlternativeService(
539 host_port_pair, alternative_service, 1.0, expiration); 535 host_port_pair, alternative_service, expiration);
540 } 536 }
541 537
542 void AddQuicRemoteAlternativeServiceMapping( 538 void AddQuicRemoteAlternativeServiceMapping(
543 MockCryptoClientStream::HandshakeMode handshake_mode, 539 MockCryptoClientStream::HandshakeMode handshake_mode,
544 const HostPortPair& alternative) { 540 const HostPortPair& alternative) {
545 crypto_client_stream_factory_.set_handshake_mode(handshake_mode); 541 crypto_client_stream_factory_.set_handshake_mode(handshake_mode);
546 HostPortPair host_port_pair = HostPortPair::FromURL(request_.url); 542 HostPortPair host_port_pair = HostPortPair::FromURL(request_.url);
547 AlternativeService alternative_service(QUIC, alternative.host(), 543 AlternativeService alternative_service(QUIC, alternative.host(),
548 alternative.port()); 544 alternative.port());
549 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); 545 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1);
550 http_server_properties_.SetAlternativeService( 546 http_server_properties_.SetAlternativeService(
551 host_port_pair, alternative_service, 1.0, expiration); 547 host_port_pair, alternative_service, expiration);
552 } 548 }
553 549
554 void ExpectBrokenAlternateProtocolMapping() { 550 void ExpectBrokenAlternateProtocolMapping() {
555 const HostPortPair origin = HostPortPair::FromURL(request_.url); 551 const HostPortPair origin = HostPortPair::FromURL(request_.url);
556 const AlternativeServiceVector alternative_service_vector = 552 const AlternativeServiceVector alternative_service_vector =
557 http_server_properties_.GetAlternativeServices(origin); 553 http_server_properties_.GetAlternativeServices(origin);
558 EXPECT_EQ(1u, alternative_service_vector.size()); 554 EXPECT_EQ(1u, alternative_service_vector.size());
559 EXPECT_TRUE(http_server_properties_.IsAlternativeServiceBroken( 555 EXPECT_TRUE(http_server_properties_.IsAlternativeServiceBroken(
560 alternative_service_vector[0])); 556 alternative_service_vector[0]));
561 } 557 }
(...skipping 863 matching lines...) Expand 10 before | Expand all | Expand 10 after
1425 1421
1426 SendRequestAndExpectHttpResponse("hello world"); 1422 SendRequestAndExpectHttpResponse("hello world");
1427 SendRequestAndExpectQuicResponse("hello!"); 1423 SendRequestAndExpectQuicResponse("hello!");
1428 1424
1429 mock_quic_data.Resume(); 1425 mock_quic_data.Resume();
1430 1426
1431 EXPECT_FALSE(http_server_properties_.WasAlternativeServiceRecentlyBroken( 1427 EXPECT_FALSE(http_server_properties_.WasAlternativeServiceRecentlyBroken(
1432 alternative_service)); 1428 alternative_service));
1433 } 1429 }
1434 1430
1435 TEST_P(QuicNetworkTransactionTest, UseAlternativeServiceProbabilityForQuic) {
1436 MockRead http_reads[] = {
1437 MockRead("HTTP/1.1 200 OK\r\n"),
1438 MockRead(kQuicAlternativeService50pctHeader), MockRead("hello world"),
1439 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ),
1440 MockRead(ASYNC, OK)};
1441
1442 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), nullptr,
1443 0);
1444 socket_factory_.AddSocketDataProvider(&http_data);
1445 socket_factory_.AddSSLSocketDataProvider(&ssl_data_);
1446
1447 MockQuicData mock_quic_data;
1448 mock_quic_data.AddWrite(
1449 ConstructRequestHeadersPacket(1, kClientDataStreamId1, true, true,
1450 GetRequestHeaders("GET", "https", "/")));
1451 mock_quic_data.AddRead(ConstructResponseHeadersPacket(
1452 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK")));
1453 mock_quic_data.AddRead(
1454 ConstructDataPacket(2, kClientDataStreamId1, false, true, 0, "hello!"));
1455 mock_quic_data.AddWrite(ConstructAckPacket(2, 1));
1456 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read
1457 mock_quic_data.AddRead(ASYNC, 0); // EOF
1458
1459 mock_quic_data.AddSocketDataToFactory(&socket_factory_);
1460
1461 AddHangingNonAlternateProtocolSocketData();
1462 params_.alternative_service_probability_threshold = 0.25;
1463 CreateSession();
1464
1465 SendRequestAndExpectHttpResponse("hello world");
1466 SendRequestAndExpectQuicResponse("hello!");
1467 }
1468
1469 TEST_P(QuicNetworkTransactionTest,
1470 DontUseAlternativeServiceProbabilityForQuic) {
1471 MockRead http_reads[] = {
1472 MockRead("HTTP/1.1 200 OK\r\n"),
1473 MockRead(kQuicAlternativeService50pctHeader), MockRead("hello world"),
1474 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ),
1475 MockRead(ASYNC, OK)};
1476
1477 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), nullptr,
1478 0);
1479 socket_factory_.AddSocketDataProvider(&http_data);
1480 socket_factory_.AddSSLSocketDataProvider(&ssl_data_);
1481 socket_factory_.AddSocketDataProvider(&http_data);
1482 socket_factory_.AddSSLSocketDataProvider(&ssl_data_);
1483
1484 params_.alternative_service_probability_threshold = 0.75;
1485 CreateSession();
1486
1487 SendRequestAndExpectHttpResponse("hello world");
1488 SendRequestAndExpectHttpResponse("hello world");
1489 }
1490
1491 TEST_P(QuicNetworkTransactionTest,
1492 DontUseAlternativeServiceWithBadProbabilityForQuic) {
1493 MockRead http_reads[] = {
1494 MockRead("HTTP/1.1 200 OK\r\n"),
1495 MockRead("Alt-Svc: quic=\":443\";p=2\r\n\r\n"), MockRead("hello world"),
1496 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ),
1497 MockRead(ASYNC, OK)};
1498
1499 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), nullptr,
1500 0);
1501 socket_factory_.AddSocketDataProvider(&http_data);
1502 socket_factory_.AddSSLSocketDataProvider(&ssl_data_);
1503 socket_factory_.AddSocketDataProvider(&http_data);
1504 socket_factory_.AddSSLSocketDataProvider(&ssl_data_);
1505
1506 params_.alternative_service_probability_threshold = 0.75;
1507 CreateSession();
1508
1509 SendRequestAndExpectHttpResponse("hello world");
1510 SendRequestAndExpectHttpResponse("hello world");
1511 }
1512
1513 TEST_P(QuicNetworkTransactionTest, UseAlternativeServiceForQuicForHttps) { 1431 TEST_P(QuicNetworkTransactionTest, UseAlternativeServiceForQuicForHttps) {
1514 MockRead http_reads[] = { 1432 MockRead http_reads[] = {
1515 MockRead("HTTP/1.1 200 OK\r\n"), MockRead(kQuicAlternativeServiceHeader), 1433 MockRead("HTTP/1.1 200 OK\r\n"), MockRead(kQuicAlternativeServiceHeader),
1516 MockRead("hello world"), 1434 MockRead("hello world"),
1517 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), 1435 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ),
1518 MockRead(ASYNC, OK)}; 1436 MockRead(ASYNC, OK)};
1519 1437
1520 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), nullptr, 1438 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), nullptr,
1521 0); 1439 0);
1522 socket_factory_.AddSocketDataProvider(&http_data); 1440 socket_factory_.AddSocketDataProvider(&http_data);
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after
1660 1578
1661 SendRequestAndExpectHttpResponse("hello world"); 1579 SendRequestAndExpectHttpResponse("hello world");
1662 SendRequestAndExpectQuicResponse("hello!"); 1580 SendRequestAndExpectQuicResponse("hello!");
1663 1581
1664 mock_quic_data.Resume(); 1582 mock_quic_data.Resume();
1665 1583
1666 EXPECT_FALSE(http_server_properties_.WasAlternativeServiceRecentlyBroken( 1584 EXPECT_FALSE(http_server_properties_.WasAlternativeServiceRecentlyBroken(
1667 alternative_service)); 1585 alternative_service));
1668 } 1586 }
1669 1587
1670 TEST_P(QuicNetworkTransactionTest, UseAlternateProtocolProbabilityForQuic) {
1671 params_.parse_alternative_services = false;
1672 MockRead http_reads[] = {
1673 MockRead("HTTP/1.1 200 OK\r\n"),
1674 MockRead(kQuicAlternateProtocol50pctHeader), MockRead("hello world"),
1675 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ),
1676 MockRead(ASYNC, OK)};
1677
1678 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), nullptr,
1679 0);
1680 socket_factory_.AddSocketDataProvider(&http_data);
1681
1682 MockQuicData mock_quic_data;
1683 mock_quic_data.AddWrite(
1684 ConstructRequestHeadersPacket(1, kClientDataStreamId1, true, true,
1685 GetRequestHeaders("GET", "https", "/")));
1686 mock_quic_data.AddRead(ConstructResponseHeadersPacket(
1687 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK")));
1688 mock_quic_data.AddRead(
1689 ConstructDataPacket(2, kClientDataStreamId1, false, true, 0, "hello!"));
1690 mock_quic_data.AddWrite(ConstructAckPacket(2, 1));
1691 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read
1692 mock_quic_data.AddRead(ASYNC, 0); // EOF
1693
1694 mock_quic_data.AddSocketDataToFactory(&socket_factory_);
1695
1696 // The non-alternate protocol job needs to hang in order to guarantee that
1697 // the alternate-protocol job will "win".
1698 AddHangingNonAlternateProtocolSocketData();
1699
1700 params_.alternative_service_probability_threshold = .25;
1701 params_.parse_alternative_services = false;
1702 CreateSession();
1703
1704 SendRequestAndExpectHttpResponse("hello world");
1705 SendRequestAndExpectQuicResponse("hello!");
1706 }
1707
1708 TEST_P(QuicNetworkTransactionTest, DontUseAlternateProtocolProbabilityForQuic) {
1709 params_.parse_alternative_services = false;
1710 MockRead http_reads[] = {
1711 MockRead("HTTP/1.1 200 OK\r\n"),
1712 MockRead(kQuicAlternateProtocol50pctHeader), MockRead("hello world"),
1713 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ),
1714 MockRead(ASYNC, OK)};
1715
1716 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), nullptr,
1717 0);
1718 socket_factory_.AddSocketDataProvider(&http_data);
1719 socket_factory_.AddSSLSocketDataProvider(&ssl_data_);
1720 socket_factory_.AddSocketDataProvider(&http_data);
1721 socket_factory_.AddSSLSocketDataProvider(&ssl_data_);
1722
1723 params_.alternative_service_probability_threshold = .75;
1724 CreateSession();
1725
1726 SendRequestAndExpectHttpResponse("hello world");
1727 SendRequestAndExpectHttpResponse("hello world");
1728 }
1729
1730 TEST_P(QuicNetworkTransactionTest,
1731 DontUseAlternateProtocolWithBadProbabilityForQuic) {
1732 params_.parse_alternative_services = false;
1733 MockRead http_reads[] = {
1734 MockRead("HTTP/1.1 200 OK\r\n"),
1735 MockRead("Alternate-Protocol: 443:quic,p=2\r\n\r\n"),
1736 MockRead("hello world"),
1737 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ),
1738 MockRead(ASYNC, OK)};
1739
1740 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), nullptr,
1741 0);
1742 socket_factory_.AddSocketDataProvider(&http_data);
1743 socket_factory_.AddSSLSocketDataProvider(&ssl_data_);
1744 socket_factory_.AddSocketDataProvider(&http_data);
1745 socket_factory_.AddSSLSocketDataProvider(&ssl_data_);
1746
1747 params_.alternative_service_probability_threshold = .75;
1748 CreateSession();
1749
1750 SendRequestAndExpectHttpResponse("hello world");
1751 SendRequestAndExpectHttpResponse("hello world");
1752 }
1753
1754 TEST_P(QuicNetworkTransactionTest, UseAlternateProtocolForQuicForHttps) { 1588 TEST_P(QuicNetworkTransactionTest, UseAlternateProtocolForQuicForHttps) {
1755 params_.parse_alternative_services = false; 1589 params_.parse_alternative_services = false;
1756 MockRead http_reads[] = { 1590 MockRead http_reads[] = {
1757 MockRead("HTTP/1.1 200 OK\r\n"), MockRead(kQuicAlternateProtocolHeader), 1591 MockRead("HTTP/1.1 200 OK\r\n"), MockRead(kQuicAlternateProtocolHeader),
1758 MockRead("hello world"), 1592 MockRead("hello world"),
1759 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), 1593 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ),
1760 MockRead(ASYNC, OK)}; 1594 MockRead(ASYNC, OK)};
1761 1595
1762 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), nullptr, 1596 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), nullptr,
1763 0); 1597 0);
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
1830 // connection to |alternate| only. 1664 // connection to |alternate| only.
1831 MockConnect refused_connect(ASYNC, ERR_CONNECTION_REFUSED); 1665 MockConnect refused_connect(ASYNC, ERR_CONNECTION_REFUSED);
1832 StaticSocketDataProvider refused_data; 1666 StaticSocketDataProvider refused_data;
1833 refused_data.set_connect_data(refused_connect); 1667 refused_data.set_connect_data(refused_connect);
1834 socket_factory_.AddSocketDataProvider(&refused_data); 1668 socket_factory_.AddSocketDataProvider(&refused_data);
1835 1669
1836 CreateSession(); 1670 CreateSession();
1837 AlternativeService alternative_service(QUIC, alternative); 1671 AlternativeService alternative_service(QUIC, alternative);
1838 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); 1672 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1);
1839 session_->http_server_properties()->SetAlternativeService( 1673 session_->http_server_properties()->SetAlternativeService(
1840 origin, alternative_service, 1.0, expiration); 1674 origin, alternative_service, expiration);
1841 scoped_ptr<HttpNetworkTransaction> trans( 1675 scoped_ptr<HttpNetworkTransaction> trans(
1842 new HttpNetworkTransaction(DEFAULT_PRIORITY, session_.get())); 1676 new HttpNetworkTransaction(DEFAULT_PRIORITY, session_.get()));
1843 TestCompletionCallback callback; 1677 TestCompletionCallback callback;
1844 int rv = trans->Start(&request_, callback.callback(), net_log_.bound()); 1678 int rv = trans->Start(&request_, callback.callback(), net_log_.bound());
1845 EXPECT_EQ(ERR_IO_PENDING, rv); 1679 EXPECT_EQ(ERR_IO_PENDING, rv);
1846 rv = callback.WaitForResult(); 1680 rv = callback.WaitForResult();
1847 if (valid) { 1681 if (valid) {
1848 EXPECT_EQ(OK, rv); 1682 EXPECT_EQ(OK, rv);
1849 CheckWasQuicResponse(trans); 1683 CheckWasQuicResponse(trans);
1850 CheckResponsePort(trans, 443); 1684 CheckResponsePort(trans, 443);
(...skipping 576 matching lines...) Expand 10 before | Expand all | Expand 10 after
2427 scoped_ptr<HttpNetworkTransaction> trans( 2261 scoped_ptr<HttpNetworkTransaction> trans(
2428 new HttpNetworkTransaction(DEFAULT_PRIORITY, session_.get())); 2262 new HttpNetworkTransaction(DEFAULT_PRIORITY, session_.get()));
2429 TestCompletionCallback callback; 2263 TestCompletionCallback callback;
2430 int rv = trans->Start(&request_, callback.callback(), net_log_.bound()); 2264 int rv = trans->Start(&request_, callback.callback(), net_log_.bound());
2431 EXPECT_EQ(ERR_IO_PENDING, rv); 2265 EXPECT_EQ(ERR_IO_PENDING, rv);
2432 EXPECT_NE(OK, callback.WaitForResult()); 2266 EXPECT_NE(OK, callback.WaitForResult());
2433 } 2267 }
2434 2268
2435 } // namespace test 2269 } // namespace test
2436 } // namespace net 2270 } // namespace net
OLDNEW
« no previous file with comments | « net/http/http_stream_factory_impl_unittest.cc ('k') | net/quic/quic_stream_factory_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698