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

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 cronet and iOS 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
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 428 matching lines...) Expand 10 before | Expand all | Expand 10 after
510 SendRequestAndExpectQuicResponseMaybeFromProxy(expected, true, port); 506 SendRequestAndExpectQuicResponseMaybeFromProxy(expected, true, port);
511 } 507 }
512 508
513 void AddQuicAlternateProtocolMapping( 509 void AddQuicAlternateProtocolMapping(
514 MockCryptoClientStream::HandshakeMode handshake_mode) { 510 MockCryptoClientStream::HandshakeMode handshake_mode) {
515 crypto_client_stream_factory_.set_handshake_mode(handshake_mode); 511 crypto_client_stream_factory_.set_handshake_mode(handshake_mode);
516 HostPortPair host_port_pair = HostPortPair::FromURL(request_.url); 512 HostPortPair host_port_pair = HostPortPair::FromURL(request_.url);
517 AlternativeService alternative_service(QUIC, host_port_pair.host(), 443); 513 AlternativeService alternative_service(QUIC, host_port_pair.host(), 443);
518 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); 514 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1);
519 http_server_properties_.SetAlternativeService( 515 http_server_properties_.SetAlternativeService(
520 host_port_pair, alternative_service, 1.0, expiration); 516 host_port_pair, alternative_service, expiration);
521 } 517 }
522 518
523 void AddQuicRemoteAlternativeServiceMapping( 519 void AddQuicRemoteAlternativeServiceMapping(
524 MockCryptoClientStream::HandshakeMode handshake_mode, 520 MockCryptoClientStream::HandshakeMode handshake_mode,
525 const HostPortPair& alternative) { 521 const HostPortPair& alternative) {
526 crypto_client_stream_factory_.set_handshake_mode(handshake_mode); 522 crypto_client_stream_factory_.set_handshake_mode(handshake_mode);
527 HostPortPair host_port_pair = HostPortPair::FromURL(request_.url); 523 HostPortPair host_port_pair = HostPortPair::FromURL(request_.url);
528 AlternativeService alternative_service(QUIC, alternative.host(), 524 AlternativeService alternative_service(QUIC, alternative.host(),
529 alternative.port()); 525 alternative.port());
530 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); 526 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1);
531 http_server_properties_.SetAlternativeService( 527 http_server_properties_.SetAlternativeService(
532 host_port_pair, alternative_service, 1.0, expiration); 528 host_port_pair, alternative_service, expiration);
533 } 529 }
534 530
535 void ExpectBrokenAlternateProtocolMapping() { 531 void ExpectBrokenAlternateProtocolMapping() {
536 const HostPortPair origin = HostPortPair::FromURL(request_.url); 532 const HostPortPair origin = HostPortPair::FromURL(request_.url);
537 const AlternativeServiceVector alternative_service_vector = 533 const AlternativeServiceVector alternative_service_vector =
538 http_server_properties_.GetAlternativeServices(origin); 534 http_server_properties_.GetAlternativeServices(origin);
539 EXPECT_EQ(1u, alternative_service_vector.size()); 535 EXPECT_EQ(1u, alternative_service_vector.size());
540 EXPECT_TRUE(http_server_properties_.IsAlternativeServiceBroken( 536 EXPECT_TRUE(http_server_properties_.IsAlternativeServiceBroken(
541 alternative_service_vector[0])); 537 alternative_service_vector[0]));
542 } 538 }
(...skipping 802 matching lines...) Expand 10 before | Expand all | Expand 10 after
1345 1341
1346 SendRequestAndExpectHttpResponse("hello world"); 1342 SendRequestAndExpectHttpResponse("hello world");
1347 SendRequestAndExpectQuicResponse("hello!"); 1343 SendRequestAndExpectQuicResponse("hello!");
1348 1344
1349 mock_quic_data.Resume(); 1345 mock_quic_data.Resume();
1350 1346
1351 EXPECT_FALSE(http_server_properties_.WasAlternativeServiceRecentlyBroken( 1347 EXPECT_FALSE(http_server_properties_.WasAlternativeServiceRecentlyBroken(
1352 alternative_service)); 1348 alternative_service));
1353 } 1349 }
1354 1350
1355 TEST_P(QuicNetworkTransactionTest, UseAlternativeServiceProbabilityForQuic) {
1356 MockRead http_reads[] = {
1357 MockRead("HTTP/1.1 200 OK\r\n"),
1358 MockRead(kQuicAlternativeService50pctHeader), MockRead("hello world"),
1359 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ),
1360 MockRead(ASYNC, OK)};
1361
1362 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), nullptr,
1363 0);
1364 socket_factory_.AddSocketDataProvider(&http_data);
1365 socket_factory_.AddSSLSocketDataProvider(&ssl_data_);
1366
1367 MockQuicData mock_quic_data;
1368 mock_quic_data.AddWrite(
1369 ConstructRequestHeadersPacket(1, kClientDataStreamId1, true, true,
1370 GetRequestHeaders("GET", "https", "/")));
1371 mock_quic_data.AddRead(ConstructResponseHeadersPacket(
1372 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK")));
1373 mock_quic_data.AddRead(
1374 ConstructDataPacket(2, kClientDataStreamId1, false, true, 0, "hello!"));
1375 mock_quic_data.AddWrite(ConstructAckPacket(2, 1));
1376 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read
1377 mock_quic_data.AddRead(ASYNC, 0); // EOF
1378
1379 mock_quic_data.AddSocketDataToFactory(&socket_factory_);
1380
1381 AddHangingNonAlternateProtocolSocketData();
1382 params_.alternative_service_probability_threshold = 0.25;
1383 CreateSession();
1384
1385 SendRequestAndExpectHttpResponse("hello world");
1386 SendRequestAndExpectQuicResponse("hello!");
1387 }
1388
1389 TEST_P(QuicNetworkTransactionTest,
1390 DontUseAlternativeServiceProbabilityForQuic) {
1391 MockRead http_reads[] = {
1392 MockRead("HTTP/1.1 200 OK\r\n"),
1393 MockRead(kQuicAlternativeService50pctHeader), MockRead("hello world"),
1394 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ),
1395 MockRead(ASYNC, OK)};
1396
1397 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), nullptr,
1398 0);
1399 socket_factory_.AddSocketDataProvider(&http_data);
1400 socket_factory_.AddSSLSocketDataProvider(&ssl_data_);
1401 socket_factory_.AddSocketDataProvider(&http_data);
1402 socket_factory_.AddSSLSocketDataProvider(&ssl_data_);
1403
1404 params_.alternative_service_probability_threshold = 0.75;
1405 CreateSession();
1406
1407 SendRequestAndExpectHttpResponse("hello world");
1408 SendRequestAndExpectHttpResponse("hello world");
1409 }
1410
1411 TEST_P(QuicNetworkTransactionTest,
1412 DontUseAlternativeServiceWithBadProbabilityForQuic) {
1413 MockRead http_reads[] = {
1414 MockRead("HTTP/1.1 200 OK\r\n"),
1415 MockRead("Alt-Svc: quic=\":443\";p=2\r\n\r\n"), MockRead("hello world"),
1416 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ),
1417 MockRead(ASYNC, OK)};
1418
1419 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), nullptr,
1420 0);
1421 socket_factory_.AddSocketDataProvider(&http_data);
1422 socket_factory_.AddSSLSocketDataProvider(&ssl_data_);
1423 socket_factory_.AddSocketDataProvider(&http_data);
1424 socket_factory_.AddSSLSocketDataProvider(&ssl_data_);
1425
1426 params_.alternative_service_probability_threshold = 0.75;
1427 CreateSession();
1428
1429 SendRequestAndExpectHttpResponse("hello world");
1430 SendRequestAndExpectHttpResponse("hello world");
1431 }
1432
1433 TEST_P(QuicNetworkTransactionTest, UseAlternativeServiceForQuicForHttps) { 1351 TEST_P(QuicNetworkTransactionTest, UseAlternativeServiceForQuicForHttps) {
1434 MockRead http_reads[] = { 1352 MockRead http_reads[] = {
1435 MockRead("HTTP/1.1 200 OK\r\n"), MockRead(kQuicAlternativeServiceHeader), 1353 MockRead("HTTP/1.1 200 OK\r\n"), MockRead(kQuicAlternativeServiceHeader),
1436 MockRead("hello world"), 1354 MockRead("hello world"),
1437 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), 1355 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ),
1438 MockRead(ASYNC, OK)}; 1356 MockRead(ASYNC, OK)};
1439 1357
1440 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), nullptr, 1358 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), nullptr,
1441 0); 1359 0);
1442 socket_factory_.AddSocketDataProvider(&http_data); 1360 socket_factory_.AddSocketDataProvider(&http_data);
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after
1580 1498
1581 SendRequestAndExpectHttpResponse("hello world"); 1499 SendRequestAndExpectHttpResponse("hello world");
1582 SendRequestAndExpectQuicResponse("hello!"); 1500 SendRequestAndExpectQuicResponse("hello!");
1583 1501
1584 mock_quic_data.Resume(); 1502 mock_quic_data.Resume();
1585 1503
1586 EXPECT_FALSE(http_server_properties_.WasAlternativeServiceRecentlyBroken( 1504 EXPECT_FALSE(http_server_properties_.WasAlternativeServiceRecentlyBroken(
1587 alternative_service)); 1505 alternative_service));
1588 } 1506 }
1589 1507
1590 TEST_P(QuicNetworkTransactionTest, UseAlternateProtocolProbabilityForQuic) {
1591 params_.parse_alternative_services = false;
1592 MockRead http_reads[] = {
1593 MockRead("HTTP/1.1 200 OK\r\n"),
1594 MockRead(kQuicAlternateProtocol50pctHeader), MockRead("hello world"),
1595 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ),
1596 MockRead(ASYNC, OK)};
1597
1598 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), nullptr,
1599 0);
1600 socket_factory_.AddSocketDataProvider(&http_data);
1601
1602 MockQuicData mock_quic_data;
1603 mock_quic_data.AddWrite(
1604 ConstructRequestHeadersPacket(1, kClientDataStreamId1, true, true,
1605 GetRequestHeaders("GET", "https", "/")));
1606 mock_quic_data.AddRead(ConstructResponseHeadersPacket(
1607 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK")));
1608 mock_quic_data.AddRead(
1609 ConstructDataPacket(2, kClientDataStreamId1, false, true, 0, "hello!"));
1610 mock_quic_data.AddWrite(ConstructAckPacket(2, 1));
1611 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read
1612 mock_quic_data.AddRead(ASYNC, 0); // EOF
1613
1614 mock_quic_data.AddSocketDataToFactory(&socket_factory_);
1615
1616 // The non-alternate protocol job needs to hang in order to guarantee that
1617 // the alternate-protocol job will "win".
1618 AddHangingNonAlternateProtocolSocketData();
1619
1620 params_.alternative_service_probability_threshold = .25;
1621 params_.parse_alternative_services = false;
1622 CreateSession();
1623
1624 SendRequestAndExpectHttpResponse("hello world");
1625 SendRequestAndExpectQuicResponse("hello!");
1626 }
1627
1628 TEST_P(QuicNetworkTransactionTest, DontUseAlternateProtocolProbabilityForQuic) {
1629 params_.parse_alternative_services = false;
1630 MockRead http_reads[] = {
1631 MockRead("HTTP/1.1 200 OK\r\n"),
1632 MockRead(kQuicAlternateProtocol50pctHeader), MockRead("hello world"),
1633 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ),
1634 MockRead(ASYNC, OK)};
1635
1636 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), nullptr,
1637 0);
1638 socket_factory_.AddSocketDataProvider(&http_data);
1639 socket_factory_.AddSSLSocketDataProvider(&ssl_data_);
1640 socket_factory_.AddSocketDataProvider(&http_data);
1641 socket_factory_.AddSSLSocketDataProvider(&ssl_data_);
1642
1643 params_.alternative_service_probability_threshold = .75;
1644 CreateSession();
1645
1646 SendRequestAndExpectHttpResponse("hello world");
1647 SendRequestAndExpectHttpResponse("hello world");
1648 }
1649
1650 TEST_P(QuicNetworkTransactionTest,
1651 DontUseAlternateProtocolWithBadProbabilityForQuic) {
1652 params_.parse_alternative_services = false;
1653 MockRead http_reads[] = {
1654 MockRead("HTTP/1.1 200 OK\r\n"),
1655 MockRead("Alternate-Protocol: 443:quic,p=2\r\n\r\n"),
1656 MockRead("hello world"),
1657 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ),
1658 MockRead(ASYNC, OK)};
1659
1660 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), nullptr,
1661 0);
1662 socket_factory_.AddSocketDataProvider(&http_data);
1663 socket_factory_.AddSSLSocketDataProvider(&ssl_data_);
1664 socket_factory_.AddSocketDataProvider(&http_data);
1665 socket_factory_.AddSSLSocketDataProvider(&ssl_data_);
1666
1667 params_.alternative_service_probability_threshold = .75;
1668 CreateSession();
1669
1670 SendRequestAndExpectHttpResponse("hello world");
1671 SendRequestAndExpectHttpResponse("hello world");
1672 }
1673
1674 TEST_P(QuicNetworkTransactionTest, UseAlternateProtocolForQuicForHttps) { 1508 TEST_P(QuicNetworkTransactionTest, UseAlternateProtocolForQuicForHttps) {
1675 params_.parse_alternative_services = false; 1509 params_.parse_alternative_services = false;
1676 MockRead http_reads[] = { 1510 MockRead http_reads[] = {
1677 MockRead("HTTP/1.1 200 OK\r\n"), MockRead(kQuicAlternateProtocolHeader), 1511 MockRead("HTTP/1.1 200 OK\r\n"), MockRead(kQuicAlternateProtocolHeader),
1678 MockRead("hello world"), 1512 MockRead("hello world"),
1679 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), 1513 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ),
1680 MockRead(ASYNC, OK)}; 1514 MockRead(ASYNC, OK)};
1681 1515
1682 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), nullptr, 1516 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), nullptr,
1683 0); 1517 0);
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
1750 // connection to |alternate| only. 1584 // connection to |alternate| only.
1751 MockConnect refused_connect(ASYNC, ERR_CONNECTION_REFUSED); 1585 MockConnect refused_connect(ASYNC, ERR_CONNECTION_REFUSED);
1752 StaticSocketDataProvider refused_data; 1586 StaticSocketDataProvider refused_data;
1753 refused_data.set_connect_data(refused_connect); 1587 refused_data.set_connect_data(refused_connect);
1754 socket_factory_.AddSocketDataProvider(&refused_data); 1588 socket_factory_.AddSocketDataProvider(&refused_data);
1755 1589
1756 CreateSession(); 1590 CreateSession();
1757 AlternativeService alternative_service(QUIC, alternative); 1591 AlternativeService alternative_service(QUIC, alternative);
1758 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); 1592 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1);
1759 session_->http_server_properties()->SetAlternativeService( 1593 session_->http_server_properties()->SetAlternativeService(
1760 origin, alternative_service, 1.0, expiration); 1594 origin, alternative_service, expiration);
1761 scoped_ptr<HttpNetworkTransaction> trans( 1595 scoped_ptr<HttpNetworkTransaction> trans(
1762 new HttpNetworkTransaction(DEFAULT_PRIORITY, session_.get())); 1596 new HttpNetworkTransaction(DEFAULT_PRIORITY, session_.get()));
1763 TestCompletionCallback callback; 1597 TestCompletionCallback callback;
1764 int rv = trans->Start(&request_, callback.callback(), net_log_.bound()); 1598 int rv = trans->Start(&request_, callback.callback(), net_log_.bound());
1765 EXPECT_EQ(ERR_IO_PENDING, rv); 1599 EXPECT_EQ(ERR_IO_PENDING, rv);
1766 rv = callback.WaitForResult(); 1600 rv = callback.WaitForResult();
1767 if (valid) { 1601 if (valid) {
1768 EXPECT_EQ(OK, rv); 1602 EXPECT_EQ(OK, rv);
1769 CheckWasQuicResponse(trans); 1603 CheckWasQuicResponse(trans);
1770 CheckResponsePort(trans, 443); 1604 CheckResponsePort(trans, 443);
(...skipping 576 matching lines...) Expand 10 before | Expand all | Expand 10 after
2347 scoped_ptr<HttpNetworkTransaction> trans( 2181 scoped_ptr<HttpNetworkTransaction> trans(
2348 new HttpNetworkTransaction(DEFAULT_PRIORITY, session_.get())); 2182 new HttpNetworkTransaction(DEFAULT_PRIORITY, session_.get()));
2349 TestCompletionCallback callback; 2183 TestCompletionCallback callback;
2350 int rv = trans->Start(&request_, callback.callback(), net_log_.bound()); 2184 int rv = trans->Start(&request_, callback.callback(), net_log_.bound());
2351 EXPECT_EQ(ERR_IO_PENDING, rv); 2185 EXPECT_EQ(ERR_IO_PENDING, rv);
2352 EXPECT_NE(OK, callback.WaitForResult()); 2186 EXPECT_NE(OK, callback.WaitForResult());
2353 } 2187 }
2354 2188
2355 } // namespace test 2189 } // namespace test
2356 } // namespace net 2190 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698