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

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

Issue 1980883002: Revert of QUIC - enable "delay_tcp_race" parameter by default. This feature showed (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 7 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.h » ('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 628 matching lines...) Expand 10 before | Expand all | Expand 10 after
639 GetRequestHeaders("GET", "https", "/"))); 639 GetRequestHeaders("GET", "https", "/")));
640 mock_quic_data.AddRead(ConstructResponseHeadersPacket( 640 mock_quic_data.AddRead(ConstructResponseHeadersPacket(
641 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK"))); 641 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK")));
642 mock_quic_data.AddRead( 642 mock_quic_data.AddRead(
643 ConstructDataPacket(2, kClientDataStreamId1, false, true, 0, "hello!")); 643 ConstructDataPacket(2, kClientDataStreamId1, false, true, 0, "hello!"));
644 mock_quic_data.AddWrite(ConstructAckPacket(2, 1)); 644 mock_quic_data.AddWrite(ConstructAckPacket(2, 1));
645 mock_quic_data.AddRead(SYNCHRONOUS, ERR_IO_PENDING); // No more data to read 645 mock_quic_data.AddRead(SYNCHRONOUS, ERR_IO_PENDING); // No more data to read
646 646
647 mock_quic_data.AddSocketDataToFactory(&socket_factory_); 647 mock_quic_data.AddSocketDataToFactory(&socket_factory_);
648 648
649 // The non-alternate protocol job needs to hang in order to guarantee that
650 // the alternate-protocol job will "win".
651 AddHangingNonAlternateProtocolSocketData();
652
649 params_.parse_alternative_services = false; 653 params_.parse_alternative_services = false;
650 params_.enable_alternative_service_with_different_host = false; 654 params_.enable_alternative_service_with_different_host = false;
651 CreateSession(); 655 CreateSession();
652 656
653 EXPECT_FALSE( 657 EXPECT_FALSE(
654 test_socket_performance_watcher_factory_.rtt_notification_received()); 658 test_socket_performance_watcher_factory_.rtt_notification_received());
655 SendRequestAndExpectQuicResponse("hello!"); 659 SendRequestAndExpectQuicResponse("hello!");
656 EXPECT_TRUE( 660 EXPECT_TRUE(
657 test_socket_performance_watcher_factory_.rtt_notification_received()); 661 test_socket_performance_watcher_factory_.rtt_notification_received());
658 662
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after
762 EXPECT_TRUE(cert->VerifyNameMatch(proxy_host, &common_name_fallback_used)); 766 EXPECT_TRUE(cert->VerifyNameMatch(proxy_host, &common_name_fallback_used));
763 EXPECT_FALSE(cert->VerifyNameMatch(origin_host, &common_name_fallback_used)); 767 EXPECT_FALSE(cert->VerifyNameMatch(origin_host, &common_name_fallback_used));
764 ProofVerifyDetailsChromium verify_details; 768 ProofVerifyDetailsChromium verify_details;
765 verify_details.cert_verify_result.verified_cert = cert; 769 verify_details.cert_verify_result.verified_cert = cert;
766 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details); 770 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details);
767 ProofVerifyDetailsChromium verify_details2; 771 ProofVerifyDetailsChromium verify_details2;
768 verify_details2.cert_verify_result.verified_cert = cert; 772 verify_details2.cert_verify_result.verified_cert = cert;
769 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details2); 773 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details2);
770 774
771 request_.url = GURL("http://" + origin_host); 775 request_.url = GURL("http://" + origin_host);
776 AddHangingNonAlternateProtocolSocketData();
772 CreateSession(); 777 CreateSession();
773 AddQuicAlternateProtocolMapping(MockCryptoClientStream::CONFIRM_HANDSHAKE); 778 AddQuicAlternateProtocolMapping(MockCryptoClientStream::CONFIRM_HANDSHAKE);
774 SendRequestAndExpectQuicResponseFromProxyOnPort("hello!", 70); 779 SendRequestAndExpectQuicResponseFromProxyOnPort("hello!", 70);
775 } 780 }
776 781
777 TEST_P(QuicNetworkTransactionTest, AlternativeServicesDifferentHost) { 782 TEST_P(QuicNetworkTransactionTest, AlternativeServicesDifferentHost) {
778 params_.enable_alternative_service_with_different_host = true; 783 params_.enable_alternative_service_with_different_host = true;
779 HostPortPair origin("www.example.org", 443); 784 HostPortPair origin("www.example.org", 443);
780 HostPortPair alternative("mail.example.org", 443); 785 HostPortPair alternative("mail.example.org", 443);
781 786
(...skipping 21 matching lines...) Expand all
803 mock_quic_data.AddRead( 808 mock_quic_data.AddRead(
804 ConstructDataPacket(2, kClientDataStreamId1, false, true, 0, "hello!")); 809 ConstructDataPacket(2, kClientDataStreamId1, false, true, 0, "hello!"));
805 mock_quic_data.AddWrite(ConstructAckPacket(2, 1)); 810 mock_quic_data.AddWrite(ConstructAckPacket(2, 1));
806 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read 811 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read
807 mock_quic_data.AddRead(ASYNC, 0); 812 mock_quic_data.AddRead(ASYNC, 0);
808 mock_quic_data.AddSocketDataToFactory(&socket_factory_); 813 mock_quic_data.AddSocketDataToFactory(&socket_factory_);
809 814
810 request_.url = GURL("https://" + origin.host()); 815 request_.url = GURL("https://" + origin.host());
811 AddQuicRemoteAlternativeServiceMapping( 816 AddQuicRemoteAlternativeServiceMapping(
812 MockCryptoClientStream::CONFIRM_HANDSHAKE, alternative); 817 MockCryptoClientStream::CONFIRM_HANDSHAKE, alternative);
818 AddHangingNonAlternateProtocolSocketData();
813 CreateSession(); 819 CreateSession();
814 820
815 SendRequestAndExpectQuicResponse("hello!"); 821 SendRequestAndExpectQuicResponse("hello!");
816 } 822 }
817 823
818 TEST_P(QuicNetworkTransactionTest, ForceQuicWithErrorConnecting) { 824 TEST_P(QuicNetworkTransactionTest, ForceQuicWithErrorConnecting) {
819 params_.origins_to_force_quic_on.insert( 825 params_.origins_to_force_quic_on.insert(
820 HostPortPair::FromString("mail.example.org:443")); 826 HostPortPair::FromString("mail.example.org:443"));
821 827
822 MockQuicData mock_quic_data1; 828 MockQuicData mock_quic_data1;
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
888 mock_quic_data.AddRead(ConstructResponseHeadersPacket( 894 mock_quic_data.AddRead(ConstructResponseHeadersPacket(
889 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK"))); 895 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK")));
890 mock_quic_data.AddRead( 896 mock_quic_data.AddRead(
891 ConstructDataPacket(2, kClientDataStreamId1, false, true, 0, "hello!")); 897 ConstructDataPacket(2, kClientDataStreamId1, false, true, 0, "hello!"));
892 mock_quic_data.AddWrite(ConstructAckPacket(2, 1)); 898 mock_quic_data.AddWrite(ConstructAckPacket(2, 1));
893 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read 899 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read
894 mock_quic_data.AddRead(ASYNC, 0); // EOF 900 mock_quic_data.AddRead(ASYNC, 0); // EOF
895 901
896 mock_quic_data.AddSocketDataToFactory(&socket_factory_); 902 mock_quic_data.AddSocketDataToFactory(&socket_factory_);
897 903
904 AddHangingNonAlternateProtocolSocketData();
898 CreateSession(); 905 CreateSession();
899 906
900 SendRequestAndExpectHttpResponse("hello world"); 907 SendRequestAndExpectHttpResponse("hello world");
901 SendRequestAndExpectQuicResponse("hello!"); 908 SendRequestAndExpectQuicResponse("hello!");
902 } 909 }
903 910
904 TEST_P(QuicNetworkTransactionTest, 911 TEST_P(QuicNetworkTransactionTest,
905 UseAlternativeServiceWithProbabilityForQuic) { 912 UseAlternativeServiceWithProbabilityForQuic) {
906 MockRead http_reads[] = { 913 MockRead http_reads[] = {
907 MockRead("HTTP/1.1 200 OK\r\n"), 914 MockRead("HTTP/1.1 200 OK\r\n"),
(...skipping 14 matching lines...) Expand all
922 mock_quic_data.AddRead(ConstructResponseHeadersPacket( 929 mock_quic_data.AddRead(ConstructResponseHeadersPacket(
923 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK"))); 930 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK")));
924 mock_quic_data.AddRead( 931 mock_quic_data.AddRead(
925 ConstructDataPacket(2, kClientDataStreamId1, false, true, 0, "hello!")); 932 ConstructDataPacket(2, kClientDataStreamId1, false, true, 0, "hello!"));
926 mock_quic_data.AddWrite(ConstructAckPacket(2, 1)); 933 mock_quic_data.AddWrite(ConstructAckPacket(2, 1));
927 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read 934 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read
928 mock_quic_data.AddRead(ASYNC, 0); // EOF 935 mock_quic_data.AddRead(ASYNC, 0); // EOF
929 936
930 mock_quic_data.AddSocketDataToFactory(&socket_factory_); 937 mock_quic_data.AddSocketDataToFactory(&socket_factory_);
931 938
939 AddHangingNonAlternateProtocolSocketData();
932 CreateSession(); 940 CreateSession();
933 941
934 SendRequestAndExpectHttpResponse("hello world"); 942 SendRequestAndExpectHttpResponse("hello world");
935 SendRequestAndExpectQuicResponse("hello!"); 943 SendRequestAndExpectQuicResponse("hello!");
936 } 944 }
937 945
938 TEST_P(QuicNetworkTransactionTest, SetAlternativeServiceWithScheme) { 946 TEST_P(QuicNetworkTransactionTest, SetAlternativeServiceWithScheme) {
939 MockRead http_reads[] = { 947 MockRead http_reads[] = {
940 MockRead("HTTP/1.1 200 OK\r\n"), 948 MockRead("HTTP/1.1 200 OK\r\n"),
941 MockRead("Alt-Svc: quic=\"foo.example.org:443\", quic=\":444\"\r\n\r\n"), 949 MockRead("Alt-Svc: quic=\"foo.example.org:443\", quic=\":444\"\r\n\r\n"),
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
1022 mock_quic_data.AddRead(ConstructResponseHeadersPacket( 1030 mock_quic_data.AddRead(ConstructResponseHeadersPacket(
1023 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK"))); 1031 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK")));
1024 mock_quic_data.AddRead( 1032 mock_quic_data.AddRead(
1025 ConstructDataPacket(2, kClientDataStreamId1, false, true, 0, "hello!")); 1033 ConstructDataPacket(2, kClientDataStreamId1, false, true, 0, "hello!"));
1026 mock_quic_data.AddWrite(ConstructAckPacket(2, 1)); 1034 mock_quic_data.AddWrite(ConstructAckPacket(2, 1));
1027 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read 1035 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read
1028 mock_quic_data.AddRead(ASYNC, 0); // EOF 1036 mock_quic_data.AddRead(ASYNC, 0); // EOF
1029 1037
1030 mock_quic_data.AddSocketDataToFactory(&socket_factory_); 1038 mock_quic_data.AddSocketDataToFactory(&socket_factory_);
1031 1039
1040 AddHangingNonAlternateProtocolSocketData();
1032 CreateSession(); 1041 CreateSession();
1033 1042
1034 SendRequestAndExpectHttpResponse("hello world"); 1043 SendRequestAndExpectHttpResponse("hello world");
1035 SendRequestAndExpectQuicResponse("hello!"); 1044 SendRequestAndExpectQuicResponse("hello!");
1036 } 1045 }
1037 1046
1038 TEST_P(QuicNetworkTransactionTest, GoAwayWithConnectionMigrationOnPortsOnly) { 1047 TEST_P(QuicNetworkTransactionTest, GoAwayWithConnectionMigrationOnPortsOnly) {
1039 MockQuicData mock_quic_data; 1048 MockQuicData mock_quic_data;
1040 mock_quic_data.AddWrite( 1049 mock_quic_data.AddWrite(
1041 ConstructRequestHeadersPacket(1, kClientDataStreamId1, true, true, 1050 ConstructRequestHeadersPacket(1, kClientDataStreamId1, true, true,
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after
1166 3, kClientDataStreamId2, false, false, GetResponseHeaders("200 OK"), 1175 3, kClientDataStreamId2, false, false, GetResponseHeaders("200 OK"),
1167 &response_header_offset)); 1176 &response_header_offset));
1168 mock_quic_data.AddRead( 1177 mock_quic_data.AddRead(
1169 ConstructDataPacket(4, kClientDataStreamId2, false, true, 0, "hello!")); 1178 ConstructDataPacket(4, kClientDataStreamId2, false, true, 0, "hello!"));
1170 mock_quic_data.AddWrite(ConstructAckAndConnectionClosePacket(4, 4, 3, 1)); 1179 mock_quic_data.AddWrite(ConstructAckAndConnectionClosePacket(4, 4, 3, 1));
1171 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read 1180 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read
1172 mock_quic_data.AddRead(ASYNC, 0); // EOF 1181 mock_quic_data.AddRead(ASYNC, 0); // EOF
1173 1182
1174 mock_quic_data.AddSocketDataToFactory(&socket_factory_); 1183 mock_quic_data.AddSocketDataToFactory(&socket_factory_);
1175 1184
1185 AddHangingNonAlternateProtocolSocketData();
1176 CreateSession(); 1186 CreateSession();
1177 1187
1178 SendRequestAndExpectHttpResponse("hello world"); 1188 SendRequestAndExpectHttpResponse("hello world");
1179 1189
1180 SendRequestAndExpectQuicResponseOnPort("hello!", 443); 1190 SendRequestAndExpectQuicResponseOnPort("hello!", 443);
1181 SendRequestAndExpectQuicResponseOnPort("hello!", 443); 1191 SendRequestAndExpectQuicResponseOnPort("hello!", 443);
1182 } 1192 }
1183 1193
1184 // When multiple alternative services that has existing QUIC session. 1194 // When multiple alternative services that has existing QUIC session.
1185 // HttpStreamFactoryImpl::RequestStreamInternal() should select the first 1195 // HttpStreamFactoryImpl::RequestStreamInternal() should select the first
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
1250 mock_quic_data.AddRead(ConstructResponseHeadersPacket( 1260 mock_quic_data.AddRead(ConstructResponseHeadersPacket(
1251 3, kClientDataStreamId2, false, false, GetResponseHeaders("200 OK"), 1261 3, kClientDataStreamId2, false, false, GetResponseHeaders("200 OK"),
1252 &response_header_offset)); 1262 &response_header_offset));
1253 mock_quic_data.AddRead(ConstructDataPacket(4, kClientDataStreamId2, false, 1263 mock_quic_data.AddRead(ConstructDataPacket(4, kClientDataStreamId2, false,
1254 true, 0, "hello from foo!")); 1264 true, 0, "hello from foo!"));
1255 mock_quic_data.AddWrite(ConstructAckAndConnectionClosePacket(4, 4, 3, 1)); 1265 mock_quic_data.AddWrite(ConstructAckAndConnectionClosePacket(4, 4, 3, 1));
1256 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read 1266 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read
1257 mock_quic_data.AddRead(ASYNC, 0); // EOF 1267 mock_quic_data.AddRead(ASYNC, 0); // EOF
1258 1268
1259 mock_quic_data.AddSocketDataToFactory(&socket_factory_); 1269 mock_quic_data.AddSocketDataToFactory(&socket_factory_);
1270 AddHangingNonAlternateProtocolSocketData();
1271
1260 mock_quic_data2.AddSocketDataToFactory(&socket_factory_); 1272 mock_quic_data2.AddSocketDataToFactory(&socket_factory_);
1261 1273
1274 AddHangingNonAlternateProtocolSocketData();
1275
1262 CreateSession(); 1276 CreateSession();
1263 1277
1264 SendRequestAndExpectHttpResponse("hello world"); 1278 SendRequestAndExpectHttpResponse("hello world");
1265 SendRequestAndExpectQuicResponseOnPort("hello from foo!", 443); 1279 SendRequestAndExpectQuicResponseOnPort("hello from foo!", 443);
1266 SendRequestAndExpectQuicResponseOnPort("hello from bar!", 444); 1280 SendRequestAndExpectQuicResponseOnPort("hello from bar!", 444);
1267 SendRequestAndExpectQuicResponseOnPort("hello from foo!", 443); 1281 SendRequestAndExpectQuicResponseOnPort("hello from foo!", 443);
1268 } 1282 }
1269 1283
1270 // Multiple origins have listed the same alternative services. When there's a 1284 // Multiple origins have listed the same alternative services. When there's a
1271 // existing QUIC session opened by a request to other origin, 1285 // existing QUIC session opened by a request to other origin,
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
1327 mock_quic_data.AddRead(ConstructResponseHeadersPacket( 1341 mock_quic_data.AddRead(ConstructResponseHeadersPacket(
1328 3, kClientDataStreamId2, false, false, GetResponseHeaders("200 OK"), 1342 3, kClientDataStreamId2, false, false, GetResponseHeaders("200 OK"),
1329 &response_header_offset)); 1343 &response_header_offset));
1330 mock_quic_data.AddRead(ConstructDataPacket(4, kClientDataStreamId2, false, 1344 mock_quic_data.AddRead(ConstructDataPacket(4, kClientDataStreamId2, false,
1331 true, 0, "hello from mail QUIC!")); 1345 true, 0, "hello from mail QUIC!"));
1332 mock_quic_data.AddWrite(ConstructAckAndConnectionClosePacket(4, 4, 3, 1)); 1346 mock_quic_data.AddWrite(ConstructAckAndConnectionClosePacket(4, 4, 3, 1));
1333 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read 1347 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read
1334 mock_quic_data.AddRead(ASYNC, 0); // EOF 1348 mock_quic_data.AddRead(ASYNC, 0); // EOF
1335 1349
1336 mock_quic_data.AddSocketDataToFactory(&socket_factory_); 1350 mock_quic_data.AddSocketDataToFactory(&socket_factory_);
1351 AddHangingNonAlternateProtocolSocketData();
1337 1352
1338 CreateSession(); 1353 CreateSession();
1339 1354
1340 // Send two HTTP requests, responses set up alt-svc lists for the origins. 1355 // Send two HTTP requests, responses set up alt-svc lists for the origins.
1341 request_.url = GURL("https://www.example.org/"); 1356 request_.url = GURL("https://www.example.org/");
1342 SendRequestAndExpectHttpResponse("hello world from www.example.org"); 1357 SendRequestAndExpectHttpResponse("hello world from www.example.org");
1343 request_.url = GURL("https://mail.example.org/"); 1358 request_.url = GURL("https://mail.example.org/");
1344 SendRequestAndExpectHttpResponse("hello world from mail.example.org"); 1359 SendRequestAndExpectHttpResponse("hello world from mail.example.org");
1345 1360
1346 // Open a QUIC session to mail.example.org:443 when making request 1361 // Open a QUIC session to mail.example.org:443 when making request
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
1419 mock_quic_data2.AddRead( 1434 mock_quic_data2.AddRead(
1420 ConstructResponseHeadersPacket(1, kClientDataStreamId1, false, false, 1435 ConstructResponseHeadersPacket(1, kClientDataStreamId1, false, false,
1421 GetResponseHeaders("200 OK"), &maker)); 1436 GetResponseHeaders("200 OK"), &maker));
1422 mock_quic_data2.AddRead(ConstructDataPacket( 1437 mock_quic_data2.AddRead(ConstructDataPacket(
1423 2, kClientDataStreamId1, false, true, 0, "hello from docs QUIC!")); 1438 2, kClientDataStreamId1, false, true, 0, "hello from docs QUIC!"));
1424 mock_quic_data2.AddWrite(ConstructAckPacket(2, 1, &maker)); 1439 mock_quic_data2.AddWrite(ConstructAckPacket(2, 1, &maker));
1425 mock_quic_data2.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read 1440 mock_quic_data2.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read
1426 mock_quic_data2.AddRead(ASYNC, 0); // EOF 1441 mock_quic_data2.AddRead(ASYNC, 0); // EOF
1427 1442
1428 mock_quic_data.AddSocketDataToFactory(&socket_factory_); 1443 mock_quic_data.AddSocketDataToFactory(&socket_factory_);
1444 AddHangingNonAlternateProtocolSocketData();
1445
1429 mock_quic_data2.AddSocketDataToFactory(&socket_factory_); 1446 mock_quic_data2.AddSocketDataToFactory(&socket_factory_);
1447 AddHangingNonAlternateProtocolSocketData();
1430 1448
1431 CreateSession(); 1449 CreateSession();
1432 1450
1433 // Send HTTP requests, responses set up the alt-svc lists for the origins. 1451 // Send HTTP requests, responses set up the alt-svc lists for the origins.
1434 SendRequestAndExpectHttpResponse("hello world from mail.example.org"); 1452 SendRequestAndExpectHttpResponse("hello world from mail.example.org");
1435 request_.url = GURL("https://mail.example.com/"); 1453 request_.url = GURL("https://mail.example.com/");
1436 SendRequestAndExpectHttpResponse("hello world from mail.example.com"); 1454 SendRequestAndExpectHttpResponse("hello world from mail.example.com");
1437 1455
1438 // Open a QUIC session to mail.example.org:443 when making request 1456 // Open a QUIC session to mail.example.org:443 when making request
1439 // to mail.example.org. 1457 // to mail.example.org.
(...skipping 25 matching lines...) Expand all
1465 mock_quic_data.AddRead(ConstructResponseHeadersPacket( 1483 mock_quic_data.AddRead(ConstructResponseHeadersPacket(
1466 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK"))); 1484 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK")));
1467 mock_quic_data.AddRead( 1485 mock_quic_data.AddRead(
1468 ConstructDataPacket(2, kClientDataStreamId1, false, true, 0, "hello!")); 1486 ConstructDataPacket(2, kClientDataStreamId1, false, true, 0, "hello!"));
1469 mock_quic_data.AddWrite(ConstructAckPacket(2, 1)); 1487 mock_quic_data.AddWrite(ConstructAckPacket(2, 1));
1470 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read 1488 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read
1471 mock_quic_data.AddRead(ASYNC, 0); // EOF 1489 mock_quic_data.AddRead(ASYNC, 0); // EOF
1472 1490
1473 mock_quic_data.AddSocketDataToFactory(&socket_factory_); 1491 mock_quic_data.AddSocketDataToFactory(&socket_factory_);
1474 1492
1493 AddHangingNonAlternateProtocolSocketData();
1475 CreateSession(); 1494 CreateSession();
1476 1495
1477 SendRequestAndExpectHttpResponse("hello world"); 1496 SendRequestAndExpectHttpResponse("hello world");
1478 SendRequestAndExpectQuicResponseOnPort("hello!", 137); 1497 SendRequestAndExpectQuicResponseOnPort("hello!", 137);
1479 } 1498 }
1480 1499
1481 TEST_P(QuicNetworkTransactionTest, ConfirmAlternativeService) { 1500 TEST_P(QuicNetworkTransactionTest, ConfirmAlternativeService) {
1482 MockRead http_reads[] = { 1501 MockRead http_reads[] = {
1483 MockRead("HTTP/1.1 200 OK\r\n"), MockRead(kQuicAlternativeServiceHeader), 1502 MockRead("HTTP/1.1 200 OK\r\n"), MockRead(kQuicAlternativeServiceHeader),
1484 MockRead("hello world"), 1503 MockRead("hello world"),
(...skipping 12 matching lines...) Expand all
1497 mock_quic_data.AddRead(ConstructResponseHeadersPacket( 1516 mock_quic_data.AddRead(ConstructResponseHeadersPacket(
1498 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK"))); 1517 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK")));
1499 mock_quic_data.AddRead( 1518 mock_quic_data.AddRead(
1500 ConstructDataPacket(2, kClientDataStreamId1, false, true, 0, "hello!")); 1519 ConstructDataPacket(2, kClientDataStreamId1, false, true, 0, "hello!"));
1501 mock_quic_data.AddWrite(ConstructAckPacket(2, 1)); 1520 mock_quic_data.AddWrite(ConstructAckPacket(2, 1));
1502 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read 1521 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read
1503 mock_quic_data.AddRead(ASYNC, 0); // EOF 1522 mock_quic_data.AddRead(ASYNC, 0); // EOF
1504 1523
1505 mock_quic_data.AddSocketDataToFactory(&socket_factory_); 1524 mock_quic_data.AddSocketDataToFactory(&socket_factory_);
1506 1525
1526 AddHangingNonAlternateProtocolSocketData();
1507 CreateSession(); 1527 CreateSession();
1508 1528
1509 AlternativeService alternative_service(QUIC, 1529 AlternativeService alternative_service(QUIC,
1510 HostPortPair::FromURL(request_.url)); 1530 HostPortPair::FromURL(request_.url));
1511 http_server_properties_.MarkAlternativeServiceRecentlyBroken( 1531 http_server_properties_.MarkAlternativeServiceRecentlyBroken(
1512 alternative_service); 1532 alternative_service);
1513 EXPECT_TRUE(http_server_properties_.WasAlternativeServiceRecentlyBroken( 1533 EXPECT_TRUE(http_server_properties_.WasAlternativeServiceRecentlyBroken(
1514 alternative_service)); 1534 alternative_service));
1515 1535
1516 SendRequestAndExpectHttpResponse("hello world"); 1536 SendRequestAndExpectHttpResponse("hello world");
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
1573 mock_quic_data.AddRead(ConstructResponseHeadersPacket( 1593 mock_quic_data.AddRead(ConstructResponseHeadersPacket(
1574 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK"))); 1594 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK")));
1575 mock_quic_data.AddRead( 1595 mock_quic_data.AddRead(
1576 ConstructDataPacket(2, kClientDataStreamId1, false, true, 0, "hello!")); 1596 ConstructDataPacket(2, kClientDataStreamId1, false, true, 0, "hello!"));
1577 mock_quic_data.AddWrite(ConstructAckPacket(2, 1)); 1597 mock_quic_data.AddWrite(ConstructAckPacket(2, 1));
1578 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read 1598 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read
1579 mock_quic_data.AddRead(ASYNC, 0); // EOF 1599 mock_quic_data.AddRead(ASYNC, 0); // EOF
1580 1600
1581 mock_quic_data.AddSocketDataToFactory(&socket_factory_); 1601 mock_quic_data.AddSocketDataToFactory(&socket_factory_);
1582 1602
1603 // The non-alternate protocol job needs to hang in order to guarantee that
1604 // the alternate-protocol job will "win".
1605 AddHangingNonAlternateProtocolSocketData();
1606
1583 params_.parse_alternative_services = false; 1607 params_.parse_alternative_services = false;
1584 params_.parse_alternative_services = false; 1608 params_.parse_alternative_services = false;
1585 CreateSession(); 1609 CreateSession();
1586 1610
1587 SendRequestAndExpectHttpResponse("hello world"); 1611 SendRequestAndExpectHttpResponse("hello world");
1588 SendRequestAndExpectQuicResponse("hello!"); 1612 SendRequestAndExpectQuicResponse("hello!");
1589 } 1613 }
1590 1614
1591 TEST_P(QuicNetworkTransactionTest, UseAlternateProtocolWithProbabilityForQuic) { 1615 TEST_P(QuicNetworkTransactionTest, UseAlternateProtocolWithProbabilityForQuic) {
1592 MockRead http_reads[] = { 1616 MockRead http_reads[] = {
(...skipping 15 matching lines...) Expand all
1608 mock_quic_data.AddRead(ConstructResponseHeadersPacket( 1632 mock_quic_data.AddRead(ConstructResponseHeadersPacket(
1609 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK"))); 1633 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK")));
1610 mock_quic_data.AddRead( 1634 mock_quic_data.AddRead(
1611 ConstructDataPacket(2, kClientDataStreamId1, false, true, 0, "hello!")); 1635 ConstructDataPacket(2, kClientDataStreamId1, false, true, 0, "hello!"));
1612 mock_quic_data.AddWrite(ConstructAckPacket(2, 1)); 1636 mock_quic_data.AddWrite(ConstructAckPacket(2, 1));
1613 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read 1637 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read
1614 mock_quic_data.AddRead(ASYNC, 0); // EOF 1638 mock_quic_data.AddRead(ASYNC, 0); // EOF
1615 1639
1616 mock_quic_data.AddSocketDataToFactory(&socket_factory_); 1640 mock_quic_data.AddSocketDataToFactory(&socket_factory_);
1617 1641
1642 // The non-alternate protocol job needs to hang in order to guarantee that
1643 // the alternate-protocol job will "win".
1644 AddHangingNonAlternateProtocolSocketData();
1645
1618 params_.parse_alternative_services = false; 1646 params_.parse_alternative_services = false;
1619 params_.parse_alternative_services = false; 1647 params_.parse_alternative_services = false;
1620 CreateSession(); 1648 CreateSession();
1621 1649
1622 SendRequestAndExpectHttpResponse("hello world"); 1650 SendRequestAndExpectHttpResponse("hello world");
1623 SendRequestAndExpectQuicResponse("hello!"); 1651 SendRequestAndExpectQuicResponse("hello!");
1624 } 1652 }
1625 1653
1626 TEST_P(QuicNetworkTransactionTest, AlternateProtocolDifferentPort) { 1654 TEST_P(QuicNetworkTransactionTest, AlternateProtocolDifferentPort) {
1627 MockRead http_reads[] = { 1655 MockRead http_reads[] = {
(...skipping 15 matching lines...) Expand all
1643 mock_quic_data.AddRead(ConstructResponseHeadersPacket( 1671 mock_quic_data.AddRead(ConstructResponseHeadersPacket(
1644 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK"))); 1672 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK")));
1645 mock_quic_data.AddRead( 1673 mock_quic_data.AddRead(
1646 ConstructDataPacket(2, kClientDataStreamId1, false, true, 0, "hello!")); 1674 ConstructDataPacket(2, kClientDataStreamId1, false, true, 0, "hello!"));
1647 mock_quic_data.AddWrite(ConstructAckPacket(2, 1)); 1675 mock_quic_data.AddWrite(ConstructAckPacket(2, 1));
1648 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read 1676 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read
1649 mock_quic_data.AddRead(ASYNC, 0); // EOF 1677 mock_quic_data.AddRead(ASYNC, 0); // EOF
1650 1678
1651 mock_quic_data.AddSocketDataToFactory(&socket_factory_); 1679 mock_quic_data.AddSocketDataToFactory(&socket_factory_);
1652 1680
1681 // The non-alternate protocol job needs to hang in order to guarantee that
1682 // the alternate-protocol job will "win".
1683 AddHangingNonAlternateProtocolSocketData();
1684
1653 params_.parse_alternative_services = false; 1685 params_.parse_alternative_services = false;
1654 CreateSession(); 1686 CreateSession();
1655 1687
1656 SendRequestAndExpectHttpResponse("hello world"); 1688 SendRequestAndExpectHttpResponse("hello world");
1657 SendRequestAndExpectQuicResponseOnPort("hello!", 137); 1689 SendRequestAndExpectQuicResponseOnPort("hello!", 137);
1658 } 1690 }
1659 1691
1660 TEST_P(QuicNetworkTransactionTest, ConfirmAlternateProtocol) { 1692 TEST_P(QuicNetworkTransactionTest, ConfirmAlternateProtocol) {
1661 MockRead http_reads[] = { 1693 MockRead http_reads[] = {
1662 MockRead("HTTP/1.1 200 OK\r\n"), MockRead(kQuicAlternateProtocolHeader), 1694 MockRead("HTTP/1.1 200 OK\r\n"), MockRead(kQuicAlternateProtocolHeader),
(...skipping 13 matching lines...) Expand all
1676 mock_quic_data.AddRead(ConstructResponseHeadersPacket( 1708 mock_quic_data.AddRead(ConstructResponseHeadersPacket(
1677 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK"))); 1709 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK")));
1678 mock_quic_data.AddRead( 1710 mock_quic_data.AddRead(
1679 ConstructDataPacket(2, kClientDataStreamId1, false, true, 0, "hello!")); 1711 ConstructDataPacket(2, kClientDataStreamId1, false, true, 0, "hello!"));
1680 mock_quic_data.AddWrite(ConstructAckPacket(2, 1)); 1712 mock_quic_data.AddWrite(ConstructAckPacket(2, 1));
1681 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read 1713 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read
1682 mock_quic_data.AddRead(ASYNC, 0); // EOF 1714 mock_quic_data.AddRead(ASYNC, 0); // EOF
1683 1715
1684 mock_quic_data.AddSocketDataToFactory(&socket_factory_); 1716 mock_quic_data.AddSocketDataToFactory(&socket_factory_);
1685 1717
1718 // The non-alternate protocol job needs to hang in order to guarantee that
1719 // the alternate-protocol job will "win".
1720 AddHangingNonAlternateProtocolSocketData();
1721
1686 params_.parse_alternative_services = false; 1722 params_.parse_alternative_services = false;
1687 CreateSession(); 1723 CreateSession();
1688 1724
1689 AlternativeService alternative_service(QUIC, 1725 AlternativeService alternative_service(QUIC,
1690 HostPortPair::FromURL(request_.url)); 1726 HostPortPair::FromURL(request_.url));
1691 http_server_properties_.MarkAlternativeServiceRecentlyBroken( 1727 http_server_properties_.MarkAlternativeServiceRecentlyBroken(
1692 alternative_service); 1728 alternative_service);
1693 EXPECT_TRUE(http_server_properties_.WasAlternativeServiceRecentlyBroken( 1729 EXPECT_TRUE(http_server_properties_.WasAlternativeServiceRecentlyBroken(
1694 alternative_service)); 1730 alternative_service));
1695 1731
(...skipping 25 matching lines...) Expand all
1721 mock_quic_data.AddRead(ConstructResponseHeadersPacket( 1757 mock_quic_data.AddRead(ConstructResponseHeadersPacket(
1722 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK"))); 1758 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK")));
1723 mock_quic_data.AddRead( 1759 mock_quic_data.AddRead(
1724 ConstructDataPacket(2, kClientDataStreamId1, false, true, 0, "hello!")); 1760 ConstructDataPacket(2, kClientDataStreamId1, false, true, 0, "hello!"));
1725 mock_quic_data.AddWrite(ConstructAckPacket(2, 1)); 1761 mock_quic_data.AddWrite(ConstructAckPacket(2, 1));
1726 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read 1762 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read
1727 mock_quic_data.AddRead(ASYNC, 0); // EOF 1763 mock_quic_data.AddRead(ASYNC, 0); // EOF
1728 1764
1729 mock_quic_data.AddSocketDataToFactory(&socket_factory_); 1765 mock_quic_data.AddSocketDataToFactory(&socket_factory_);
1730 1766
1767 // The non-alternate protocol job needs to hang in order to guarantee that
1768 // the alternate-protocol job will "win".
1731 AddHangingNonAlternateProtocolSocketData(); 1769 AddHangingNonAlternateProtocolSocketData();
1770
1732 CreateSession(); 1771 CreateSession();
1733 1772
1734 // TODO(rtenneti): Test QUIC over HTTPS, GetSSLInfo(). 1773 // TODO(rtenneti): Test QUIC over HTTPS, GetSSLInfo().
1735 SendRequestAndExpectHttpResponse("hello world"); 1774 SendRequestAndExpectHttpResponse("hello world");
1736 } 1775 }
1737 1776
1738 class QuicAltSvcCertificateVerificationTest 1777 class QuicAltSvcCertificateVerificationTest
1739 : public QuicNetworkTransactionTest { 1778 : public QuicNetworkTransactionTest {
1740 public: 1779 public:
1741 void Run(bool valid) { 1780 void Run(bool valid) {
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after
1878 mock_quic_data.AddRead(ConstructResponseHeadersPacket( 1917 mock_quic_data.AddRead(ConstructResponseHeadersPacket(
1879 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK"))); 1918 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK")));
1880 mock_quic_data.AddRead( 1919 mock_quic_data.AddRead(
1881 ConstructDataPacket(2, kClientDataStreamId1, false, true, 0, "hello!")); 1920 ConstructDataPacket(2, kClientDataStreamId1, false, true, 0, "hello!"));
1882 mock_quic_data.AddWrite(ConstructAckPacket(2, 1)); 1921 mock_quic_data.AddWrite(ConstructAckPacket(2, 1));
1883 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read 1922 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read
1884 mock_quic_data.AddRead(ASYNC, 0); // EOF 1923 mock_quic_data.AddRead(ASYNC, 0); // EOF
1885 1924
1886 mock_quic_data.AddSocketDataToFactory(&socket_factory_); 1925 mock_quic_data.AddSocketDataToFactory(&socket_factory_);
1887 1926
1927 // The non-alternate protocol job needs to hang in order to guarantee that
1928 // the alternate-protocol job will "win".
1929 AddHangingNonAlternateProtocolSocketData();
1930
1888 CreateSession(); 1931 CreateSession();
1889 AddQuicAlternateProtocolMapping(MockCryptoClientStream::ZERO_RTT); 1932 AddQuicAlternateProtocolMapping(MockCryptoClientStream::ZERO_RTT);
1890 SendRequestAndExpectQuicResponse("hello!"); 1933 SendRequestAndExpectQuicResponse("hello!");
1891 } 1934 }
1892 1935
1893 TEST_P(QuicNetworkTransactionTest, ZeroRTTWithNoHttpRace) { 1936 TEST_P(QuicNetworkTransactionTest, ZeroRTTWithNoHttpRace) {
1894 MockQuicData mock_quic_data; 1937 MockQuicData mock_quic_data;
1895 mock_quic_data.AddWrite( 1938 mock_quic_data.AddWrite(
1896 ConstructRequestHeadersPacket(1, kClientDataStreamId1, true, true, 1939 ConstructRequestHeadersPacket(1, kClientDataStreamId1, true, true,
1897 GetRequestHeaders("GET", "https", "/"))); 1940 GetRequestHeaders("GET", "https", "/")));
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
1961 ConstructRequestHeadersPacket(1, kClientDataStreamId1, true, true, 2004 ConstructRequestHeadersPacket(1, kClientDataStreamId1, true, true,
1962 GetRequestHeaders("GET", "https", "/"))); 2005 GetRequestHeaders("GET", "https", "/")));
1963 mock_quic_data.AddRead(ConstructResponseHeadersPacket( 2006 mock_quic_data.AddRead(ConstructResponseHeadersPacket(
1964 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK"))); 2007 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK")));
1965 mock_quic_data.AddRead( 2008 mock_quic_data.AddRead(
1966 ConstructDataPacket(2, kClientDataStreamId1, false, true, 0, "hello!")); 2009 ConstructDataPacket(2, kClientDataStreamId1, false, true, 0, "hello!"));
1967 mock_quic_data.AddWrite(ConstructAckPacket(2, 1)); 2010 mock_quic_data.AddWrite(ConstructAckPacket(2, 1));
1968 mock_quic_data.AddRead(SYNCHRONOUS, ERR_IO_PENDING); // No more data to read 2011 mock_quic_data.AddRead(SYNCHRONOUS, ERR_IO_PENDING); // No more data to read
1969 mock_quic_data.AddSocketDataToFactory(&socket_factory_); 2012 mock_quic_data.AddSocketDataToFactory(&socket_factory_);
1970 2013
2014 // The non-alternate protocol job needs to hang in order to guarantee that
2015 // the alternate-protocol job will "win".
2016 AddHangingNonAlternateProtocolSocketData();
2017
1971 // In order for a new QUIC session to be established via alternate-protocol 2018 // In order for a new QUIC session to be established via alternate-protocol
1972 // without racing an HTTP connection, we need the host resolution to happen 2019 // without racing an HTTP connection, we need the host resolution to happen
1973 // synchronously. Of course, even though QUIC *could* perform a 0-RTT 2020 // synchronously. Of course, even though QUIC *could* perform a 0-RTT
1974 // connection to the the server, in this test we require confirmation 2021 // connection to the the server, in this test we require confirmation
1975 // before encrypting so the HTTP job will still start. 2022 // before encrypting so the HTTP job will still start.
1976 host_resolver_.set_synchronous_mode(true); 2023 host_resolver_.set_synchronous_mode(true);
1977 host_resolver_.rules()->AddIPLiteralRule("mail.example.org", "192.168.0.1", 2024 host_resolver_.rules()->AddIPLiteralRule("mail.example.org", "192.168.0.1",
1978 ""); 2025 "");
1979 HostResolver::RequestInfo info(HostPortPair("mail.example.org", 443)); 2026 HostResolver::RequestInfo info(HostPortPair("mail.example.org", 443));
1980 AddressList address; 2027 AddressList address;
1981 host_resolver_.Resolve(info, DEFAULT_PRIORITY, &address, CompletionCallback(), 2028 host_resolver_.Resolve(info, DEFAULT_PRIORITY, &address, CompletionCallback(),
1982 nullptr, net_log_.bound()); 2029 nullptr, net_log_.bound());
1983 2030
1984 // The non-alternate protocol job needs to hang in order to guarantee that
1985 // the alternate-protocol job will "win".
1986 AddHangingNonAlternateProtocolSocketData();
1987
1988 CreateSession(); 2031 CreateSession();
1989 session_->quic_stream_factory()->set_require_confirmation(true); 2032 session_->quic_stream_factory()->set_require_confirmation(true);
1990 AddQuicAlternateProtocolMapping(MockCryptoClientStream::ZERO_RTT); 2033 AddQuicAlternateProtocolMapping(MockCryptoClientStream::ZERO_RTT);
1991 2034
1992 std::unique_ptr<HttpNetworkTransaction> trans( 2035 std::unique_ptr<HttpNetworkTransaction> trans(
1993 new HttpNetworkTransaction(DEFAULT_PRIORITY, session_.get())); 2036 new HttpNetworkTransaction(DEFAULT_PRIORITY, session_.get()));
1994 TestCompletionCallback callback; 2037 TestCompletionCallback callback;
1995 int rv = trans->Start(&request_, callback.callback(), net_log_.bound()); 2038 int rv = trans->Start(&request_, callback.callback(), net_log_.bound());
1996 EXPECT_EQ(ERR_IO_PENDING, rv); 2039 EXPECT_EQ(ERR_IO_PENDING, rv);
1997 2040
(...skipping 198 matching lines...) Expand 10 before | Expand all | Expand 10 after
2196 2239
2197 TEST_P(QuicNetworkTransactionTest, FailedZeroRttBrokenAlternateProtocol) { 2240 TEST_P(QuicNetworkTransactionTest, FailedZeroRttBrokenAlternateProtocol) {
2198 // Alternate-protocol job 2241 // Alternate-protocol job
2199 MockRead quic_reads[] = { 2242 MockRead quic_reads[] = {
2200 MockRead(ASYNC, ERR_SOCKET_NOT_CONNECTED), 2243 MockRead(ASYNC, ERR_SOCKET_NOT_CONNECTED),
2201 }; 2244 };
2202 StaticSocketDataProvider quic_data(quic_reads, arraysize(quic_reads), nullptr, 2245 StaticSocketDataProvider quic_data(quic_reads, arraysize(quic_reads), nullptr,
2203 0); 2246 0);
2204 socket_factory_.AddSocketDataProvider(&quic_data); 2247 socket_factory_.AddSocketDataProvider(&quic_data);
2205 2248
2249 AddHangingNonAlternateProtocolSocketData();
2250
2206 // Second Alternate-protocol job which will race with the TCP job. 2251 // Second Alternate-protocol job which will race with the TCP job.
2207 StaticSocketDataProvider quic_data2(quic_reads, arraysize(quic_reads), 2252 StaticSocketDataProvider quic_data2(quic_reads, arraysize(quic_reads),
2208 nullptr, 0); 2253 nullptr, 0);
2209 socket_factory_.AddSocketDataProvider(&quic_data2); 2254 socket_factory_.AddSocketDataProvider(&quic_data2);
2210 2255
2211 // Final job that will proceed when the QUIC job fails. 2256 // Final job that will proceed when the QUIC job fails.
2212 MockRead http_reads[] = { 2257 MockRead http_reads[] = {
2213 MockRead("HTTP/1.1 200 OK\r\n\r\n"), MockRead("hello from http"), 2258 MockRead("HTTP/1.1 200 OK\r\n\r\n"), MockRead("hello from http"),
2214 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), 2259 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ),
2215 MockRead(ASYNC, OK)}; 2260 MockRead(ASYNC, OK)};
2216 2261
2217 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), nullptr, 2262 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), nullptr,
2218 0); 2263 0);
2219 socket_factory_.AddSocketDataProvider(&http_data); 2264 socket_factory_.AddSocketDataProvider(&http_data);
2220 socket_factory_.AddSSLSocketDataProvider(&ssl_data_); 2265 socket_factory_.AddSSLSocketDataProvider(&ssl_data_);
2221 2266
2222 AddHangingNonAlternateProtocolSocketData();
2223 CreateSession(); 2267 CreateSession();
2224 2268
2225 AddQuicAlternateProtocolMapping(MockCryptoClientStream::ZERO_RTT); 2269 AddQuicAlternateProtocolMapping(MockCryptoClientStream::ZERO_RTT);
2226 2270
2227 SendRequestAndExpectHttpResponse("hello from http"); 2271 SendRequestAndExpectHttpResponse("hello from http");
2228 2272
2229 ExpectBrokenAlternateProtocolMapping(); 2273 ExpectBrokenAlternateProtocolMapping();
2230 2274
2231 EXPECT_TRUE(quic_data.AllReadDataConsumed()); 2275 EXPECT_TRUE(quic_data.AllReadDataConsumed());
2232 EXPECT_TRUE(quic_data.AllWriteDataConsumed()); 2276 EXPECT_TRUE(quic_data.AllWriteDataConsumed());
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
2330 GetRequestHeaders("GET", "https", "/"))); 2374 GetRequestHeaders("GET", "https", "/")));
2331 mock_quic_data.AddRead(ConstructResponseHeadersPacket( 2375 mock_quic_data.AddRead(ConstructResponseHeadersPacket(
2332 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK"))); 2376 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK")));
2333 mock_quic_data.AddRead( 2377 mock_quic_data.AddRead(
2334 ConstructDataPacket(2, kClientDataStreamId1, false, true, 0, "hello!")); 2378 ConstructDataPacket(2, kClientDataStreamId1, false, true, 0, "hello!"));
2335 mock_quic_data.AddWrite(ConstructAckPacket(2, 1)); 2379 mock_quic_data.AddWrite(ConstructAckPacket(2, 1));
2336 mock_quic_data.AddRead(SYNCHRONOUS, ERR_IO_PENDING); // No more read data. 2380 mock_quic_data.AddRead(SYNCHRONOUS, ERR_IO_PENDING); // No more read data.
2337 mock_quic_data.AddSocketDataToFactory(&socket_factory_); 2381 mock_quic_data.AddSocketDataToFactory(&socket_factory_);
2338 2382
2339 request_.url = GURL("https://www.example.org:443"); 2383 request_.url = GURL("https://www.example.org:443");
2384 AddHangingNonAlternateProtocolSocketData();
2340 CreateSession(); 2385 CreateSession();
2341 AddQuicAlternateProtocolMapping(MockCryptoClientStream::CONFIRM_HANDSHAKE); 2386 AddQuicAlternateProtocolMapping(MockCryptoClientStream::CONFIRM_HANDSHAKE);
2342 SendRequestAndExpectQuicResponse("hello!"); 2387 SendRequestAndExpectQuicResponse("hello!");
2343 EXPECT_TRUE( 2388 EXPECT_TRUE(
2344 test_socket_performance_watcher_factory_.rtt_notification_received()); 2389 test_socket_performance_watcher_factory_.rtt_notification_received());
2345 } 2390 }
2346 2391
2347 TEST_P(QuicNetworkTransactionTest, QuicUpload) { 2392 TEST_P(QuicNetworkTransactionTest, QuicUpload) {
2348 params_.origins_to_force_quic_on.insert( 2393 params_.origins_to_force_quic_on.insert(
2349 HostPortPair::FromString("mail.example.org:443")); 2394 HostPortPair::FromString("mail.example.org:443"));
2350 2395
2351 MockRead reads[] = {MockRead(SYNCHRONOUS, ERR_IO_PENDING, 0)}; 2396 MockRead reads[] = {MockRead(SYNCHRONOUS, ERR_IO_PENDING, 0)};
2352 MockWrite writes[] = {MockWrite(SYNCHRONOUS, ERR_FAILED, 1)}; 2397 MockWrite writes[] = {MockWrite(SYNCHRONOUS, ERR_FAILED, 1)};
2353 SequencedSocketData socket_data(reads, arraysize(reads), writes, 2398 SequencedSocketData socket_data(reads, arraysize(reads), writes,
2354 arraysize(writes)); 2399 arraysize(writes));
2355 socket_factory_.AddSocketDataProvider(&socket_data); 2400 socket_factory_.AddSocketDataProvider(&socket_data);
2356 2401
2402 // The non-alternate protocol job needs to hang in order to guarantee that
2403 // the alternate-protocol job will "win".
2404 AddHangingNonAlternateProtocolSocketData();
2405
2357 params_.parse_alternative_services = false; 2406 params_.parse_alternative_services = false;
2358 params_.enable_alternative_service_with_different_host = false; 2407 params_.enable_alternative_service_with_different_host = false;
2359 CreateSession(); 2408 CreateSession();
2360 request_.method = "POST"; 2409 request_.method = "POST";
2361 ChunkedUploadDataStream upload_data(0); 2410 ChunkedUploadDataStream upload_data(0);
2362 upload_data.AppendData("1", 1, true); 2411 upload_data.AppendData("1", 1, true);
2363 2412
2364 request_.upload_data_stream = &upload_data; 2413 request_.upload_data_stream = &upload_data;
2365 2414
2366 std::unique_ptr<HttpNetworkTransaction> trans( 2415 std::unique_ptr<HttpNetworkTransaction> trans(
2367 new HttpNetworkTransaction(DEFAULT_PRIORITY, session_.get())); 2416 new HttpNetworkTransaction(DEFAULT_PRIORITY, session_.get()));
2368 TestCompletionCallback callback; 2417 TestCompletionCallback callback;
2369 int rv = trans->Start(&request_, callback.callback(), net_log_.bound()); 2418 int rv = trans->Start(&request_, callback.callback(), net_log_.bound());
2370 EXPECT_EQ(ERR_IO_PENDING, rv); 2419 EXPECT_EQ(ERR_IO_PENDING, rv);
2371 EXPECT_NE(OK, callback.WaitForResult()); 2420 EXPECT_NE(OK, callback.WaitForResult());
2372 } 2421 }
2373 2422
2374 } // namespace test 2423 } // namespace test
2375 } // namespace net 2424 } // namespace net
OLDNEW
« no previous file with comments | « net/http/http_stream_factory_impl_unittest.cc ('k') | net/quic/quic_stream_factory.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698