OLD | NEW |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 |
OLD | NEW |