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 <ostream> | 6 #include <ostream> |
7 #include <string> | 7 #include <string> |
8 #include <utility> | 8 #include <utility> |
9 #include <vector> | 9 #include <vector> |
10 | 10 |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
47 #include "net/quic/chromium/quic_test_packet_maker.h" | 47 #include "net/quic/chromium/quic_test_packet_maker.h" |
48 #include "net/quic/chromium/test_task_runner.h" | 48 #include "net/quic/chromium/test_task_runner.h" |
49 #include "net/quic/core/crypto/quic_decrypter.h" | 49 #include "net/quic/core/crypto/quic_decrypter.h" |
50 #include "net/quic/core/crypto/quic_encrypter.h" | 50 #include "net/quic/core/crypto/quic_encrypter.h" |
51 #include "net/quic/core/quic_framer.h" | 51 #include "net/quic/core/quic_framer.h" |
52 #include "net/quic/platform/api/quic_string_piece.h" | 52 #include "net/quic/platform/api/quic_string_piece.h" |
53 #include "net/quic/platform/impl/quic_test_impl.h" | 53 #include "net/quic/platform/impl/quic_test_impl.h" |
54 #include "net/quic/test_tools/crypto_test_utils.h" | 54 #include "net/quic/test_tools/crypto_test_utils.h" |
55 #include "net/quic/test_tools/mock_clock.h" | 55 #include "net/quic/test_tools/mock_clock.h" |
56 #include "net/quic/test_tools/mock_random.h" | 56 #include "net/quic/test_tools/mock_random.h" |
| 57 #include "net/quic/test_tools/quic_spdy_session_peer.h" |
57 #include "net/quic/test_tools/quic_test_utils.h" | 58 #include "net/quic/test_tools/quic_test_utils.h" |
58 #include "net/socket/client_socket_factory.h" | 59 #include "net/socket/client_socket_factory.h" |
59 #include "net/socket/mock_client_socket_pool_manager.h" | 60 #include "net/socket/mock_client_socket_pool_manager.h" |
60 #include "net/socket/next_proto.h" | 61 #include "net/socket/next_proto.h" |
61 #include "net/socket/socket_performance_watcher.h" | 62 #include "net/socket/socket_performance_watcher.h" |
62 #include "net/socket/socket_performance_watcher_factory.h" | 63 #include "net/socket/socket_performance_watcher_factory.h" |
63 #include "net/socket/socket_test_util.h" | 64 #include "net/socket/socket_test_util.h" |
64 #include "net/spdy/core/spdy_frame_builder.h" | 65 #include "net/spdy/core/spdy_frame_builder.h" |
65 #include "net/spdy/core/spdy_framer.h" | 66 #include "net/spdy/core/spdy_framer.h" |
66 #include "net/ssl/ssl_config_service_defaults.h" | 67 #include "net/ssl/ssl_config_service_defaults.h" |
(...skipping 642 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
709 EXPECT_TRUE(session_->proxy_service()->proxy_retry_info().empty()); | 710 EXPECT_TRUE(session_->proxy_service()->proxy_retry_info().empty()); |
710 | 711 |
711 // The alternative proxy server should no longer be in use. | 712 // The alternative proxy server should no longer be in use. |
712 EXPECT_FALSE(test_proxy_delegate.alternative_proxy_server().is_valid()); | 713 EXPECT_FALSE(test_proxy_delegate.alternative_proxy_server().is_valid()); |
713 | 714 |
714 // Verify that the second request completes successfully, and the | 715 // Verify that the second request completes successfully, and the |
715 // alternative proxy server job is not started. | 716 // alternative proxy server job is not started. |
716 SendRequestAndExpectHttpResponseFromProxy("hello from http", true, 443); | 717 SendRequestAndExpectHttpResponseFromProxy("hello from http", true, 443); |
717 } | 718 } |
718 | 719 |
| 720 QuicStreamId GetNthClientInitiatedStreamId(int n) { |
| 721 return test::GetNthClientInitiatedStreamId(version_, n); |
| 722 } |
| 723 |
| 724 QuicStreamId GetNthServerInitiatedStreamId(int n) { |
| 725 return test::GetNthServerInitiatedStreamId(version_, n); |
| 726 } |
| 727 |
719 const QuicVersion version_; | 728 const QuicVersion version_; |
720 QuicFlagSaver flags_; // Save/restore all QUIC flag values. | 729 QuicFlagSaver flags_; // Save/restore all QUIC flag values. |
721 MockClock clock_; | 730 MockClock clock_; |
722 QuicTestPacketMaker client_maker_; | 731 QuicTestPacketMaker client_maker_; |
723 QuicTestPacketMaker server_maker_; | 732 QuicTestPacketMaker server_maker_; |
724 std::unique_ptr<HttpNetworkSession> session_; | 733 std::unique_ptr<HttpNetworkSession> session_; |
725 MockClientSocketFactory socket_factory_; | 734 MockClientSocketFactory socket_factory_; |
726 ProofVerifyDetailsChromium verify_details_; | 735 ProofVerifyDetailsChromium verify_details_; |
727 MockCryptoClientStreamFactory crypto_client_stream_factory_; | 736 MockCryptoClientStreamFactory crypto_client_stream_factory_; |
728 MockHostResolver host_resolver_; | 737 MockHostResolver host_resolver_; |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
771 | 780 |
772 TEST_P(QuicNetworkTransactionTest, SocketWatcherEnabled) { | 781 TEST_P(QuicNetworkTransactionTest, SocketWatcherEnabled) { |
773 params_.origins_to_force_quic_on.insert( | 782 params_.origins_to_force_quic_on.insert( |
774 HostPortPair::FromString("mail.example.org:443")); | 783 HostPortPair::FromString("mail.example.org:443")); |
775 | 784 |
776 MockQuicData mock_quic_data; | 785 MockQuicData mock_quic_data; |
777 QuicStreamOffset header_stream_offset = 0; | 786 QuicStreamOffset header_stream_offset = 0; |
778 mock_quic_data.AddWrite( | 787 mock_quic_data.AddWrite( |
779 ConstructInitialSettingsPacket(1, &header_stream_offset)); | 788 ConstructInitialSettingsPacket(1, &header_stream_offset)); |
780 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( | 789 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( |
781 2, kClientDataStreamId1, true, true, | 790 2, GetNthClientInitiatedStreamId(0), true, true, |
782 GetRequestHeaders("GET", "https", "/"), &header_stream_offset)); | 791 GetRequestHeaders("GET", "https", "/"), &header_stream_offset)); |
783 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( | 792 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( |
784 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK"))); | 793 1, GetNthClientInitiatedStreamId(0), false, false, |
785 mock_quic_data.AddRead(ConstructServerDataPacket(2, kClientDataStreamId1, | 794 GetResponseHeaders("200 OK"))); |
786 false, true, 0, "hello!")); | 795 mock_quic_data.AddRead(ConstructServerDataPacket( |
| 796 2, GetNthClientInitiatedStreamId(0), false, true, 0, "hello!")); |
787 mock_quic_data.AddWrite(ConstructClientAckPacket(3, 2, 1, 1)); | 797 mock_quic_data.AddWrite(ConstructClientAckPacket(3, 2, 1, 1)); |
788 mock_quic_data.AddRead(SYNCHRONOUS, ERR_IO_PENDING); // No more data to read | 798 mock_quic_data.AddRead(SYNCHRONOUS, ERR_IO_PENDING); // No more data to read |
789 | 799 |
790 mock_quic_data.AddSocketDataToFactory(&socket_factory_); | 800 mock_quic_data.AddSocketDataToFactory(&socket_factory_); |
791 | 801 |
792 CreateSession(); | 802 CreateSession(); |
793 test_socket_performance_watcher_factory_.set_should_notify_updated_rtt(true); | 803 test_socket_performance_watcher_factory_.set_should_notify_updated_rtt(true); |
794 | 804 |
795 EXPECT_FALSE( | 805 EXPECT_FALSE( |
796 test_socket_performance_watcher_factory_.rtt_notification_received()); | 806 test_socket_performance_watcher_factory_.rtt_notification_received()); |
797 SendRequestAndExpectQuicResponse("hello!"); | 807 SendRequestAndExpectQuicResponse("hello!"); |
798 EXPECT_TRUE( | 808 EXPECT_TRUE( |
799 test_socket_performance_watcher_factory_.rtt_notification_received()); | 809 test_socket_performance_watcher_factory_.rtt_notification_received()); |
800 } | 810 } |
801 | 811 |
802 TEST_P(QuicNetworkTransactionTest, SocketWatcherDisabled) { | 812 TEST_P(QuicNetworkTransactionTest, SocketWatcherDisabled) { |
803 params_.origins_to_force_quic_on.insert( | 813 params_.origins_to_force_quic_on.insert( |
804 HostPortPair::FromString("mail.example.org:443")); | 814 HostPortPair::FromString("mail.example.org:443")); |
805 | 815 |
806 MockQuicData mock_quic_data; | 816 MockQuicData mock_quic_data; |
807 QuicStreamOffset header_stream_offset = 0; | 817 QuicStreamOffset header_stream_offset = 0; |
808 mock_quic_data.AddWrite( | 818 mock_quic_data.AddWrite( |
809 ConstructInitialSettingsPacket(1, &header_stream_offset)); | 819 ConstructInitialSettingsPacket(1, &header_stream_offset)); |
810 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( | 820 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( |
811 2, kClientDataStreamId1, true, true, | 821 2, GetNthClientInitiatedStreamId(0), true, true, |
812 GetRequestHeaders("GET", "https", "/"), &header_stream_offset)); | 822 GetRequestHeaders("GET", "https", "/"), &header_stream_offset)); |
813 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( | 823 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( |
814 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK"))); | 824 1, GetNthClientInitiatedStreamId(0), false, false, |
815 mock_quic_data.AddRead(ConstructServerDataPacket(2, kClientDataStreamId1, | 825 GetResponseHeaders("200 OK"))); |
816 false, true, 0, "hello!")); | 826 mock_quic_data.AddRead(ConstructServerDataPacket( |
| 827 2, GetNthClientInitiatedStreamId(0), false, true, 0, "hello!")); |
817 mock_quic_data.AddWrite(ConstructClientAckPacket(3, 2, 1, 1)); | 828 mock_quic_data.AddWrite(ConstructClientAckPacket(3, 2, 1, 1)); |
818 mock_quic_data.AddRead(SYNCHRONOUS, ERR_IO_PENDING); // No more data to read | 829 mock_quic_data.AddRead(SYNCHRONOUS, ERR_IO_PENDING); // No more data to read |
819 | 830 |
820 mock_quic_data.AddSocketDataToFactory(&socket_factory_); | 831 mock_quic_data.AddSocketDataToFactory(&socket_factory_); |
821 | 832 |
822 CreateSession(); | 833 CreateSession(); |
823 test_socket_performance_watcher_factory_.set_should_notify_updated_rtt(false); | 834 test_socket_performance_watcher_factory_.set_should_notify_updated_rtt(false); |
824 | 835 |
825 EXPECT_FALSE( | 836 EXPECT_FALSE( |
826 test_socket_performance_watcher_factory_.rtt_notification_received()); | 837 test_socket_performance_watcher_factory_.rtt_notification_received()); |
827 SendRequestAndExpectQuicResponse("hello!"); | 838 SendRequestAndExpectQuicResponse("hello!"); |
828 EXPECT_FALSE( | 839 EXPECT_FALSE( |
829 test_socket_performance_watcher_factory_.rtt_notification_received()); | 840 test_socket_performance_watcher_factory_.rtt_notification_received()); |
830 } | 841 } |
831 | 842 |
832 TEST_P(QuicNetworkTransactionTest, ForceQuic) { | 843 TEST_P(QuicNetworkTransactionTest, ForceQuic) { |
833 params_.origins_to_force_quic_on.insert( | 844 params_.origins_to_force_quic_on.insert( |
834 HostPortPair::FromString("mail.example.org:443")); | 845 HostPortPair::FromString("mail.example.org:443")); |
835 | 846 |
836 MockQuicData mock_quic_data; | 847 MockQuicData mock_quic_data; |
837 QuicStreamOffset header_stream_offset = 0; | 848 QuicStreamOffset header_stream_offset = 0; |
838 mock_quic_data.AddWrite( | 849 mock_quic_data.AddWrite( |
839 ConstructInitialSettingsPacket(1, &header_stream_offset)); | 850 ConstructInitialSettingsPacket(1, &header_stream_offset)); |
840 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( | 851 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( |
841 2, kClientDataStreamId1, true, true, | 852 2, GetNthClientInitiatedStreamId(0), true, true, |
842 GetRequestHeaders("GET", "https", "/"), &header_stream_offset)); | 853 GetRequestHeaders("GET", "https", "/"), &header_stream_offset)); |
843 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( | 854 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( |
844 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK"))); | 855 1, GetNthClientInitiatedStreamId(0), false, false, |
845 mock_quic_data.AddRead(ConstructServerDataPacket(2, kClientDataStreamId1, | 856 GetResponseHeaders("200 OK"))); |
846 false, true, 0, "hello!")); | 857 mock_quic_data.AddRead(ConstructServerDataPacket( |
| 858 2, GetNthClientInitiatedStreamId(0), false, true, 0, "hello!")); |
847 mock_quic_data.AddWrite(ConstructClientAckPacket(3, 2, 1, 1)); | 859 mock_quic_data.AddWrite(ConstructClientAckPacket(3, 2, 1, 1)); |
848 mock_quic_data.AddRead(SYNCHRONOUS, ERR_IO_PENDING); // No more data to read | 860 mock_quic_data.AddRead(SYNCHRONOUS, ERR_IO_PENDING); // No more data to read |
849 | 861 |
850 mock_quic_data.AddSocketDataToFactory(&socket_factory_); | 862 mock_quic_data.AddSocketDataToFactory(&socket_factory_); |
851 | 863 |
852 CreateSession(); | 864 CreateSession(); |
853 | 865 |
854 SendRequestAndExpectQuicResponse("hello!"); | 866 SendRequestAndExpectQuicResponse("hello!"); |
855 | 867 |
856 // Check that the NetLog was filled reasonably. | 868 // Check that the NetLog was filled reasonably. |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
895 TEST_P(QuicNetworkTransactionTest, ForceQuicForAll) { | 907 TEST_P(QuicNetworkTransactionTest, ForceQuicForAll) { |
896 params_.origins_to_force_quic_on.insert(HostPortPair()); | 908 params_.origins_to_force_quic_on.insert(HostPortPair()); |
897 | 909 |
898 AddQuicAlternateProtocolMapping(MockCryptoClientStream::CONFIRM_HANDSHAKE); | 910 AddQuicAlternateProtocolMapping(MockCryptoClientStream::CONFIRM_HANDSHAKE); |
899 | 911 |
900 MockQuicData mock_quic_data; | 912 MockQuicData mock_quic_data; |
901 QuicStreamOffset header_stream_offset = 0; | 913 QuicStreamOffset header_stream_offset = 0; |
902 mock_quic_data.AddWrite( | 914 mock_quic_data.AddWrite( |
903 ConstructInitialSettingsPacket(1, &header_stream_offset)); | 915 ConstructInitialSettingsPacket(1, &header_stream_offset)); |
904 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( | 916 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( |
905 2, kClientDataStreamId1, true, true, | 917 2, GetNthClientInitiatedStreamId(0), true, true, |
906 GetRequestHeaders("GET", "https", "/"), &header_stream_offset)); | 918 GetRequestHeaders("GET", "https", "/"), &header_stream_offset)); |
907 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( | 919 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( |
908 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK"))); | 920 1, GetNthClientInitiatedStreamId(0), false, false, |
909 mock_quic_data.AddRead(ConstructServerDataPacket(2, kClientDataStreamId1, | 921 GetResponseHeaders("200 OK"))); |
910 false, true, 0, "hello!")); | 922 mock_quic_data.AddRead(ConstructServerDataPacket( |
| 923 2, GetNthClientInitiatedStreamId(0), false, true, 0, "hello!")); |
911 mock_quic_data.AddWrite(ConstructClientAckPacket(3, 2, 1, 1)); | 924 mock_quic_data.AddWrite(ConstructClientAckPacket(3, 2, 1, 1)); |
912 mock_quic_data.AddRead(SYNCHRONOUS, ERR_IO_PENDING); // No more data to read | 925 mock_quic_data.AddRead(SYNCHRONOUS, ERR_IO_PENDING); // No more data to read |
913 | 926 |
914 mock_quic_data.AddSocketDataToFactory(&socket_factory_); | 927 mock_quic_data.AddSocketDataToFactory(&socket_factory_); |
915 | 928 |
916 CreateSession(); | 929 CreateSession(); |
917 | 930 |
918 SendRequestAndExpectQuicResponse("hello!"); | 931 SendRequestAndExpectQuicResponse("hello!"); |
919 EXPECT_TRUE( | 932 EXPECT_TRUE( |
920 test_socket_performance_watcher_factory_.rtt_notification_received()); | 933 test_socket_performance_watcher_factory_.rtt_notification_received()); |
921 } | 934 } |
922 | 935 |
923 TEST_P(QuicNetworkTransactionTest, QuicProxy) { | 936 TEST_P(QuicNetworkTransactionTest, QuicProxy) { |
924 params_.enable_quic = true; | 937 params_.enable_quic = true; |
925 proxy_service_ = | 938 proxy_service_ = |
926 ProxyService::CreateFixedFromPacResult("QUIC mail.example.org:70"); | 939 ProxyService::CreateFixedFromPacResult("QUIC mail.example.org:70"); |
927 | 940 |
928 MockQuicData mock_quic_data; | 941 MockQuicData mock_quic_data; |
929 QuicStreamOffset header_stream_offset = 0; | 942 QuicStreamOffset header_stream_offset = 0; |
930 mock_quic_data.AddWrite( | 943 mock_quic_data.AddWrite( |
931 ConstructInitialSettingsPacket(1, &header_stream_offset)); | 944 ConstructInitialSettingsPacket(1, &header_stream_offset)); |
932 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( | 945 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( |
933 2, kClientDataStreamId1, true, true, | 946 2, GetNthClientInitiatedStreamId(0), true, true, |
934 GetRequestHeaders("GET", "http", "/"), &header_stream_offset)); | 947 GetRequestHeaders("GET", "http", "/"), &header_stream_offset)); |
935 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( | 948 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( |
936 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK"))); | 949 1, GetNthClientInitiatedStreamId(0), false, false, |
937 mock_quic_data.AddRead(ConstructServerDataPacket(2, kClientDataStreamId1, | 950 GetResponseHeaders("200 OK"))); |
938 false, true, 0, "hello!")); | 951 mock_quic_data.AddRead(ConstructServerDataPacket( |
| 952 2, GetNthClientInitiatedStreamId(0), false, true, 0, "hello!")); |
939 mock_quic_data.AddWrite(ConstructClientAckPacket(3, 2, 1, 1)); | 953 mock_quic_data.AddWrite(ConstructClientAckPacket(3, 2, 1, 1)); |
940 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read | 954 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read |
941 mock_quic_data.AddRead(ASYNC, 0); // EOF | 955 mock_quic_data.AddRead(ASYNC, 0); // EOF |
942 | 956 |
943 mock_quic_data.AddSocketDataToFactory(&socket_factory_); | 957 mock_quic_data.AddSocketDataToFactory(&socket_factory_); |
944 | 958 |
945 EXPECT_FALSE( | 959 EXPECT_FALSE( |
946 test_socket_performance_watcher_factory_.rtt_notification_received()); | 960 test_socket_performance_watcher_factory_.rtt_notification_received()); |
947 // There is no need to set up an alternate protocol job, because | 961 // There is no need to set up an alternate protocol job, because |
948 // no attempt will be made to speak to the proxy over TCP. | 962 // no attempt will be made to speak to the proxy over TCP. |
(...skipping 16 matching lines...) Expand all Loading... |
965 params_.enable_quic = true; | 979 params_.enable_quic = true; |
966 proxy_service_ = | 980 proxy_service_ = |
967 ProxyService::CreateFixedFromPacResult("QUIC " + proxy_host + ":70"); | 981 ProxyService::CreateFixedFromPacResult("QUIC " + proxy_host + ":70"); |
968 | 982 |
969 client_maker_.set_hostname(origin_host); | 983 client_maker_.set_hostname(origin_host); |
970 MockQuicData mock_quic_data; | 984 MockQuicData mock_quic_data; |
971 QuicStreamOffset header_stream_offset = 0; | 985 QuicStreamOffset header_stream_offset = 0; |
972 mock_quic_data.AddWrite( | 986 mock_quic_data.AddWrite( |
973 ConstructInitialSettingsPacket(1, &header_stream_offset)); | 987 ConstructInitialSettingsPacket(1, &header_stream_offset)); |
974 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( | 988 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( |
975 2, kClientDataStreamId1, true, true, | 989 2, GetNthClientInitiatedStreamId(0), true, true, |
976 GetRequestHeaders("GET", "http", "/"), &header_stream_offset)); | 990 GetRequestHeaders("GET", "http", "/"), &header_stream_offset)); |
977 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( | 991 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( |
978 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK"))); | 992 1, GetNthClientInitiatedStreamId(0), false, false, |
979 mock_quic_data.AddRead(ConstructServerDataPacket(2, kClientDataStreamId1, | 993 GetResponseHeaders("200 OK"))); |
980 false, true, 0, "hello!")); | 994 mock_quic_data.AddRead(ConstructServerDataPacket( |
| 995 2, GetNthClientInitiatedStreamId(0), false, true, 0, "hello!")); |
981 mock_quic_data.AddWrite(ConstructClientAckPacket(3, 2, 1, 1)); | 996 mock_quic_data.AddWrite(ConstructClientAckPacket(3, 2, 1, 1)); |
982 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read | 997 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read |
983 mock_quic_data.AddRead(ASYNC, 0); | 998 mock_quic_data.AddRead(ASYNC, 0); |
984 mock_quic_data.AddSocketDataToFactory(&socket_factory_); | 999 mock_quic_data.AddSocketDataToFactory(&socket_factory_); |
985 | 1000 |
986 scoped_refptr<X509Certificate> cert( | 1001 scoped_refptr<X509Certificate> cert( |
987 ImportCertFromFile(GetTestCertsDirectory(), "wildcard.pem")); | 1002 ImportCertFromFile(GetTestCertsDirectory(), "wildcard.pem")); |
988 ASSERT_TRUE(cert.get()); | 1003 ASSERT_TRUE(cert.get()); |
989 // This certificate is valid for the proxy, but not for the origin. | 1004 // This certificate is valid for the proxy, but not for the origin. |
990 EXPECT_TRUE(cert->VerifyNameMatch(proxy_host, false)); | 1005 EXPECT_TRUE(cert->VerifyNameMatch(proxy_host, false)); |
(...skipping 27 matching lines...) Expand all Loading... |
1018 ProofVerifyDetailsChromium verify_details; | 1033 ProofVerifyDetailsChromium verify_details; |
1019 verify_details.cert_verify_result.verified_cert = cert; | 1034 verify_details.cert_verify_result.verified_cert = cert; |
1020 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details); | 1035 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details); |
1021 | 1036 |
1022 client_maker_.set_hostname(origin.host()); | 1037 client_maker_.set_hostname(origin.host()); |
1023 MockQuicData mock_quic_data; | 1038 MockQuicData mock_quic_data; |
1024 QuicStreamOffset header_stream_offset = 0; | 1039 QuicStreamOffset header_stream_offset = 0; |
1025 mock_quic_data.AddWrite( | 1040 mock_quic_data.AddWrite( |
1026 ConstructInitialSettingsPacket(1, &header_stream_offset)); | 1041 ConstructInitialSettingsPacket(1, &header_stream_offset)); |
1027 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( | 1042 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( |
1028 2, kClientDataStreamId1, true, true, | 1043 2, GetNthClientInitiatedStreamId(0), true, true, |
1029 GetRequestHeaders("GET", "https", "/"), &header_stream_offset)); | 1044 GetRequestHeaders("GET", "https", "/"), &header_stream_offset)); |
1030 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( | 1045 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( |
1031 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK"))); | 1046 1, GetNthClientInitiatedStreamId(0), false, false, |
1032 mock_quic_data.AddRead(ConstructServerDataPacket(2, kClientDataStreamId1, | 1047 GetResponseHeaders("200 OK"))); |
1033 false, true, 0, "hello!")); | 1048 mock_quic_data.AddRead(ConstructServerDataPacket( |
| 1049 2, GetNthClientInitiatedStreamId(0), false, true, 0, "hello!")); |
1034 mock_quic_data.AddWrite(ConstructClientAckPacket(3, 2, 1, 1)); | 1050 mock_quic_data.AddWrite(ConstructClientAckPacket(3, 2, 1, 1)); |
1035 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read | 1051 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read |
1036 mock_quic_data.AddRead(ASYNC, 0); | 1052 mock_quic_data.AddRead(ASYNC, 0); |
1037 mock_quic_data.AddSocketDataToFactory(&socket_factory_); | 1053 mock_quic_data.AddSocketDataToFactory(&socket_factory_); |
1038 | 1054 |
1039 request_.url = GURL("https://" + origin.host()); | 1055 request_.url = GURL("https://" + origin.host()); |
1040 AddQuicRemoteAlternativeServiceMapping( | 1056 AddQuicRemoteAlternativeServiceMapping( |
1041 MockCryptoClientStream::CONFIRM_HANDSHAKE, alternative); | 1057 MockCryptoClientStream::CONFIRM_HANDSHAKE, alternative); |
1042 AddHangingNonAlternateProtocolSocketData(); | 1058 AddHangingNonAlternateProtocolSocketData(); |
1043 CreateSession(); | 1059 CreateSession(); |
(...skipping 16 matching lines...) Expand all Loading... |
1060 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); | 1076 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); |
1061 http_server_properties_.SetAlternativeService(server, alternative_service, | 1077 http_server_properties_.SetAlternativeService(server, alternative_service, |
1062 expiration); | 1078 expiration); |
1063 | 1079 |
1064 // First try: alternative job uses QUIC, gets 421 Misdirected Request error. | 1080 // First try: alternative job uses QUIC, gets 421 Misdirected Request error. |
1065 MockQuicData mock_quic_data; | 1081 MockQuicData mock_quic_data; |
1066 QuicStreamOffset request_header_offset = 0; | 1082 QuicStreamOffset request_header_offset = 0; |
1067 mock_quic_data.AddWrite( | 1083 mock_quic_data.AddWrite( |
1068 ConstructInitialSettingsPacket(1, &request_header_offset)); | 1084 ConstructInitialSettingsPacket(1, &request_header_offset)); |
1069 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( | 1085 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( |
1070 2, kClientDataStreamId1, true, true, | 1086 2, GetNthClientInitiatedStreamId(0), true, true, |
1071 GetRequestHeaders("GET", "https", "/"), &request_header_offset)); | 1087 GetRequestHeaders("GET", "https", "/"), &request_header_offset)); |
1072 mock_quic_data.AddRead( | 1088 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( |
1073 ConstructServerResponseHeadersPacket(1, kClientDataStreamId1, false, true, | 1089 1, GetNthClientInitiatedStreamId(0), false, true, |
1074 GetResponseHeaders("421"), nullptr)); | 1090 GetResponseHeaders("421"), nullptr)); |
1075 mock_quic_data.AddWrite(ConstructClientAckAndRstPacket( | 1091 mock_quic_data.AddWrite(ConstructClientAckAndRstPacket( |
1076 3, kClientDataStreamId1, QUIC_STREAM_CANCELLED, 1, 1, 1)); | 1092 3, GetNthClientInitiatedStreamId(0), QUIC_STREAM_CANCELLED, 1, 1, 1)); |
1077 mock_quic_data.AddRead(ASYNC, OK); | 1093 mock_quic_data.AddRead(ASYNC, OK); |
1078 mock_quic_data.AddSocketDataToFactory(&socket_factory_); | 1094 mock_quic_data.AddSocketDataToFactory(&socket_factory_); |
1079 | 1095 |
1080 // First try: main job uses TCP, connection fails. | 1096 // First try: main job uses TCP, connection fails. |
1081 // (A hanging connection would not work here, because the main Job on the | 1097 // (A hanging connection would not work here, because the main Job on the |
1082 // second try would pool to that socket and hang.) | 1098 // second try would pool to that socket and hang.) |
1083 StaticSocketDataProvider failing_data; | 1099 StaticSocketDataProvider failing_data; |
1084 MockConnect failing_connect(SYNCHRONOUS, ERR_CONNECTION_CLOSED); | 1100 MockConnect failing_connect(SYNCHRONOUS, ERR_CONNECTION_CLOSED); |
1085 failing_data.set_connect_data(failing_connect); | 1101 failing_data.set_connect_data(failing_connect); |
1086 socket_factory_.AddSocketDataProvider(&failing_data); | 1102 socket_factory_.AddSocketDataProvider(&failing_data); |
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1171 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), nullptr, | 1187 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), nullptr, |
1172 0); | 1188 0); |
1173 socket_factory_.AddSocketDataProvider(&http_data); | 1189 socket_factory_.AddSocketDataProvider(&http_data); |
1174 socket_factory_.AddSSLSocketDataProvider(&ssl_data_); | 1190 socket_factory_.AddSSLSocketDataProvider(&ssl_data_); |
1175 | 1191 |
1176 MockQuicData mock_quic_data; | 1192 MockQuicData mock_quic_data; |
1177 QuicStreamOffset header_stream_offset = 0; | 1193 QuicStreamOffset header_stream_offset = 0; |
1178 mock_quic_data.AddWrite( | 1194 mock_quic_data.AddWrite( |
1179 ConstructInitialSettingsPacket(1, &header_stream_offset)); | 1195 ConstructInitialSettingsPacket(1, &header_stream_offset)); |
1180 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( | 1196 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( |
1181 2, kClientDataStreamId1, true, true, | 1197 2, GetNthClientInitiatedStreamId(0), true, true, |
1182 GetRequestHeaders("GET", "https", "/"), &header_stream_offset)); | 1198 GetRequestHeaders("GET", "https", "/"), &header_stream_offset)); |
1183 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( | 1199 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( |
1184 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK"))); | 1200 1, GetNthClientInitiatedStreamId(0), false, false, |
1185 mock_quic_data.AddRead(ConstructServerDataPacket(2, kClientDataStreamId1, | 1201 GetResponseHeaders("200 OK"))); |
1186 false, true, 0, "hello!")); | 1202 mock_quic_data.AddRead(ConstructServerDataPacket( |
| 1203 2, GetNthClientInitiatedStreamId(0), false, true, 0, "hello!")); |
1187 mock_quic_data.AddWrite(ConstructClientAckPacket(3, 2, 1, 1)); | 1204 mock_quic_data.AddWrite(ConstructClientAckPacket(3, 2, 1, 1)); |
1188 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read | 1205 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read |
1189 mock_quic_data.AddRead(ASYNC, 0); // EOF | 1206 mock_quic_data.AddRead(ASYNC, 0); // EOF |
1190 | 1207 |
1191 mock_quic_data.AddSocketDataToFactory(&socket_factory_); | 1208 mock_quic_data.AddSocketDataToFactory(&socket_factory_); |
1192 | 1209 |
1193 AddHangingNonAlternateProtocolSocketData(); | 1210 AddHangingNonAlternateProtocolSocketData(); |
1194 CreateSession(); | 1211 CreateSession(); |
1195 | 1212 |
1196 SendRequestAndExpectHttpResponse("hello world"); | 1213 SendRequestAndExpectHttpResponse("hello world"); |
(...skipping 12 matching lines...) Expand all Loading... |
1209 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), nullptr, | 1226 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), nullptr, |
1210 0); | 1227 0); |
1211 socket_factory_.AddSocketDataProvider(&http_data); | 1228 socket_factory_.AddSocketDataProvider(&http_data); |
1212 socket_factory_.AddSSLSocketDataProvider(&ssl_data_); | 1229 socket_factory_.AddSSLSocketDataProvider(&ssl_data_); |
1213 | 1230 |
1214 MockQuicData mock_quic_data; | 1231 MockQuicData mock_quic_data; |
1215 QuicStreamOffset header_stream_offset = 0; | 1232 QuicStreamOffset header_stream_offset = 0; |
1216 mock_quic_data.AddWrite( | 1233 mock_quic_data.AddWrite( |
1217 ConstructInitialSettingsPacket(1, &header_stream_offset)); | 1234 ConstructInitialSettingsPacket(1, &header_stream_offset)); |
1218 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( | 1235 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( |
1219 2, kClientDataStreamId1, true, true, | 1236 2, GetNthClientInitiatedStreamId(0), true, true, |
1220 GetRequestHeaders("GET", "https", "/"), &header_stream_offset)); | 1237 GetRequestHeaders("GET", "https", "/"), &header_stream_offset)); |
1221 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( | 1238 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( |
1222 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK"))); | 1239 1, GetNthClientInitiatedStreamId(0), false, false, |
1223 mock_quic_data.AddRead(ConstructServerDataPacket(2, kClientDataStreamId1, | 1240 GetResponseHeaders("200 OK"))); |
1224 false, true, 0, "hello!")); | 1241 mock_quic_data.AddRead(ConstructServerDataPacket( |
| 1242 2, GetNthClientInitiatedStreamId(0), false, true, 0, "hello!")); |
1225 mock_quic_data.AddWrite(ConstructClientAckPacket(3, 2, 1, 1)); | 1243 mock_quic_data.AddWrite(ConstructClientAckPacket(3, 2, 1, 1)); |
1226 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read | 1244 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read |
1227 mock_quic_data.AddRead(ASYNC, 0); // EOF | 1245 mock_quic_data.AddRead(ASYNC, 0); // EOF |
1228 | 1246 |
1229 mock_quic_data.AddSocketDataToFactory(&socket_factory_); | 1247 mock_quic_data.AddSocketDataToFactory(&socket_factory_); |
1230 | 1248 |
1231 AddHangingNonAlternateProtocolSocketData(); | 1249 AddHangingNonAlternateProtocolSocketData(); |
1232 CreateSession(); | 1250 CreateSession(); |
1233 | 1251 |
1234 SendRequestAndExpectHttpResponse("hello world"); | 1252 SendRequestAndExpectHttpResponse("hello world"); |
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1313 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), nullptr, | 1331 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), nullptr, |
1314 0); | 1332 0); |
1315 socket_factory_.AddSocketDataProvider(&http_data); | 1333 socket_factory_.AddSocketDataProvider(&http_data); |
1316 socket_factory_.AddSSLSocketDataProvider(&ssl_data_); | 1334 socket_factory_.AddSSLSocketDataProvider(&ssl_data_); |
1317 | 1335 |
1318 MockQuicData mock_quic_data; | 1336 MockQuicData mock_quic_data; |
1319 QuicStreamOffset header_stream_offset = 0; | 1337 QuicStreamOffset header_stream_offset = 0; |
1320 mock_quic_data.AddWrite( | 1338 mock_quic_data.AddWrite( |
1321 ConstructInitialSettingsPacket(1, &header_stream_offset)); | 1339 ConstructInitialSettingsPacket(1, &header_stream_offset)); |
1322 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( | 1340 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( |
1323 2, kClientDataStreamId1, true, true, | 1341 2, GetNthClientInitiatedStreamId(0), true, true, |
1324 GetRequestHeaders("GET", "https", "/"), &header_stream_offset)); | 1342 GetRequestHeaders("GET", "https", "/"), &header_stream_offset)); |
1325 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( | 1343 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( |
1326 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK"))); | 1344 1, GetNthClientInitiatedStreamId(0), false, false, |
1327 mock_quic_data.AddRead(ConstructServerDataPacket(2, kClientDataStreamId1, | 1345 GetResponseHeaders("200 OK"))); |
1328 false, true, 0, "hello!")); | 1346 mock_quic_data.AddRead(ConstructServerDataPacket( |
| 1347 2, GetNthClientInitiatedStreamId(0), false, true, 0, "hello!")); |
1329 mock_quic_data.AddWrite(ConstructClientAckPacket(3, 2, 1, 1)); | 1348 mock_quic_data.AddWrite(ConstructClientAckPacket(3, 2, 1, 1)); |
1330 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read | 1349 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read |
1331 mock_quic_data.AddRead(ASYNC, 0); // EOF | 1350 mock_quic_data.AddRead(ASYNC, 0); // EOF |
1332 | 1351 |
1333 mock_quic_data.AddSocketDataToFactory(&socket_factory_); | 1352 mock_quic_data.AddSocketDataToFactory(&socket_factory_); |
1334 | 1353 |
1335 AddHangingNonAlternateProtocolSocketData(); | 1354 AddHangingNonAlternateProtocolSocketData(); |
1336 CreateSession(); | 1355 CreateSession(); |
1337 | 1356 |
1338 SendRequestAndExpectHttpResponse("hello world"); | 1357 SendRequestAndExpectHttpResponse("hello world"); |
1339 SendRequestAndExpectQuicResponse("hello!"); | 1358 SendRequestAndExpectQuicResponse("hello!"); |
1340 } | 1359 } |
1341 | 1360 |
1342 TEST_P(QuicNetworkTransactionTest, GoAwayWithConnectionMigrationOnPortsOnly) { | 1361 TEST_P(QuicNetworkTransactionTest, GoAwayWithConnectionMigrationOnPortsOnly) { |
1343 MockQuicData mock_quic_data; | 1362 MockQuicData mock_quic_data; |
1344 QuicStreamOffset header_stream_offset = 0; | 1363 QuicStreamOffset header_stream_offset = 0; |
1345 mock_quic_data.AddWrite( | 1364 mock_quic_data.AddWrite( |
1346 ConstructInitialSettingsPacket(1, &header_stream_offset)); | 1365 ConstructInitialSettingsPacket(1, &header_stream_offset)); |
1347 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( | 1366 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( |
1348 2, kClientDataStreamId1, true, true, | 1367 2, GetNthClientInitiatedStreamId(0), true, true, |
1349 GetRequestHeaders("GET", "https", "/"), &header_stream_offset)); | 1368 GetRequestHeaders("GET", "https", "/"), &header_stream_offset)); |
1350 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( | 1369 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( |
1351 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK"))); | 1370 1, GetNthClientInitiatedStreamId(0), false, false, |
| 1371 GetResponseHeaders("200 OK"))); |
1352 // Read a GoAway packet with | 1372 // Read a GoAway packet with |
1353 // QuicErrorCode: QUIC_ERROR_MIGRATING_PORT from the peer. | 1373 // QuicErrorCode: QUIC_ERROR_MIGRATING_PORT from the peer. |
1354 mock_quic_data.AddSynchronousRead(ConstructServerGoAwayPacket( | 1374 mock_quic_data.AddSynchronousRead(ConstructServerGoAwayPacket( |
1355 2, QUIC_ERROR_MIGRATING_PORT, | 1375 2, QUIC_ERROR_MIGRATING_PORT, |
1356 "connection migration with port change only")); | 1376 "connection migration with port change only")); |
1357 mock_quic_data.AddWrite(ConstructClientAckPacket(3, 2, 1, 1)); | 1377 mock_quic_data.AddWrite(ConstructClientAckPacket(3, 2, 1, 1)); |
1358 mock_quic_data.AddSynchronousRead(ConstructServerDataPacket( | 1378 mock_quic_data.AddSynchronousRead(ConstructServerDataPacket( |
1359 3, kClientDataStreamId1, false, true, 0, "hello!")); | 1379 3, GetNthClientInitiatedStreamId(0), false, true, 0, "hello!")); |
1360 mock_quic_data.AddWrite(ConstructClientAckAndRstPacket( | 1380 mock_quic_data.AddWrite(ConstructClientAckAndRstPacket( |
1361 4, kClientDataStreamId1, QUIC_STREAM_CANCELLED, 3, 3, 1)); | 1381 4, GetNthClientInitiatedStreamId(0), QUIC_STREAM_CANCELLED, 3, 3, 1)); |
1362 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read | 1382 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read |
1363 mock_quic_data.AddRead(ASYNC, 0); // EOF | 1383 mock_quic_data.AddRead(ASYNC, 0); // EOF |
1364 | 1384 |
1365 mock_quic_data.AddSocketDataToFactory(&socket_factory_); | 1385 mock_quic_data.AddSocketDataToFactory(&socket_factory_); |
1366 | 1386 |
1367 // The non-alternate protocol job needs to hang in order to guarantee that | 1387 // The non-alternate protocol job needs to hang in order to guarantee that |
1368 // the alternate-protocol job will "win". | 1388 // the alternate-protocol job will "win". |
1369 AddHangingNonAlternateProtocolSocketData(); | 1389 AddHangingNonAlternateProtocolSocketData(); |
1370 | 1390 |
1371 // In order for a new QUIC session to be established via alternate-protocol | 1391 // In order for a new QUIC session to be established via alternate-protocol |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1409 params_.quic_idle_connection_timeout_seconds = 5; | 1429 params_.quic_idle_connection_timeout_seconds = 5; |
1410 | 1430 |
1411 // The request will initially go out over QUIC. | 1431 // The request will initially go out over QUIC. |
1412 MockQuicData quic_data; | 1432 MockQuicData quic_data; |
1413 QuicStreamOffset header_stream_offset = 0; | 1433 QuicStreamOffset header_stream_offset = 0; |
1414 SpdyPriority priority = | 1434 SpdyPriority priority = |
1415 ConvertRequestPriorityToQuicPriority(DEFAULT_PRIORITY); | 1435 ConvertRequestPriorityToQuicPriority(DEFAULT_PRIORITY); |
1416 | 1436 |
1417 std::string request_data; | 1437 std::string request_data; |
1418 quic_data.AddWrite(client_maker_.MakeRequestHeadersPacketAndSaveData( | 1438 quic_data.AddWrite(client_maker_.MakeRequestHeadersPacketAndSaveData( |
1419 1, kClientDataStreamId1, true, true, priority, | 1439 1, GetNthClientInitiatedStreamId(0), true, true, priority, |
1420 GetRequestHeaders("GET", "https", "/"), nullptr, &header_stream_offset, | 1440 GetRequestHeaders("GET", "https", "/"), nullptr, &header_stream_offset, |
1421 &request_data)); | 1441 &request_data)); |
1422 | 1442 |
1423 std::string settings_data; | 1443 std::string settings_data; |
1424 QuicStreamOffset settings_offset = header_stream_offset; | 1444 QuicStreamOffset settings_offset = header_stream_offset; |
1425 quic_data.AddWrite(client_maker_.MakeInitialSettingsPacketAndSaveData( | 1445 quic_data.AddWrite(client_maker_.MakeInitialSettingsPacketAndSaveData( |
1426 2, &header_stream_offset, &settings_data)); | 1446 2, &header_stream_offset, &settings_data)); |
1427 // TLP 1 | 1447 // TLP 1 |
1428 quic_data.AddWrite(client_maker_.MakeDataPacket(3, kHeadersStreamId, true, | 1448 quic_data.AddWrite(client_maker_.MakeDataPacket(3, kHeadersStreamId, true, |
1429 false, 0, request_data)); | 1449 false, 0, request_data)); |
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1499 params_.quic_connection_options.push_back(k5RTO); | 1519 params_.quic_connection_options.push_back(k5RTO); |
1500 | 1520 |
1501 // The request will initially go out over QUIC. | 1521 // The request will initially go out over QUIC. |
1502 MockQuicData quic_data; | 1522 MockQuicData quic_data; |
1503 QuicStreamOffset header_stream_offset = 0; | 1523 QuicStreamOffset header_stream_offset = 0; |
1504 SpdyPriority priority = | 1524 SpdyPriority priority = |
1505 ConvertRequestPriorityToQuicPriority(DEFAULT_PRIORITY); | 1525 ConvertRequestPriorityToQuicPriority(DEFAULT_PRIORITY); |
1506 | 1526 |
1507 std::string request_data; | 1527 std::string request_data; |
1508 quic_data.AddWrite(client_maker_.MakeRequestHeadersPacketAndSaveData( | 1528 quic_data.AddWrite(client_maker_.MakeRequestHeadersPacketAndSaveData( |
1509 1, kClientDataStreamId1, true, true, priority, | 1529 1, GetNthClientInitiatedStreamId(0), true, true, priority, |
1510 GetRequestHeaders("GET", "https", "/"), nullptr, &header_stream_offset, | 1530 GetRequestHeaders("GET", "https", "/"), nullptr, &header_stream_offset, |
1511 &request_data)); | 1531 &request_data)); |
1512 | 1532 |
1513 std::string settings_data; | 1533 std::string settings_data; |
1514 QuicStreamOffset settings_offset = header_stream_offset; | 1534 QuicStreamOffset settings_offset = header_stream_offset; |
1515 quic_data.AddWrite(client_maker_.MakeInitialSettingsPacketAndSaveData( | 1535 quic_data.AddWrite(client_maker_.MakeInitialSettingsPacketAndSaveData( |
1516 2, &header_stream_offset, &settings_data)); | 1536 2, &header_stream_offset, &settings_data)); |
1517 // TLP 1 | 1537 // TLP 1 |
1518 quic_data.AddWrite(client_maker_.MakeDataPacket(3, kHeadersStreamId, true, | 1538 quic_data.AddWrite(client_maker_.MakeDataPacket(3, kHeadersStreamId, true, |
1519 false, 0, request_data)); | 1539 false, 0, request_data)); |
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1598 params_.quic_connection_options.push_back(k5RTO); | 1618 params_.quic_connection_options.push_back(k5RTO); |
1599 | 1619 |
1600 // The request will initially go out over QUIC. | 1620 // The request will initially go out over QUIC. |
1601 MockQuicData quic_data; | 1621 MockQuicData quic_data; |
1602 QuicStreamOffset header_stream_offset = 0; | 1622 QuicStreamOffset header_stream_offset = 0; |
1603 SpdyPriority priority = | 1623 SpdyPriority priority = |
1604 ConvertRequestPriorityToQuicPriority(DEFAULT_PRIORITY); | 1624 ConvertRequestPriorityToQuicPriority(DEFAULT_PRIORITY); |
1605 | 1625 |
1606 std::string request_data; | 1626 std::string request_data; |
1607 quic_data.AddWrite(client_maker_.MakeRequestHeadersPacketAndSaveData( | 1627 quic_data.AddWrite(client_maker_.MakeRequestHeadersPacketAndSaveData( |
1608 1, kClientDataStreamId1, true, true, priority, | 1628 1, GetNthClientInitiatedStreamId(0), true, true, priority, |
1609 GetRequestHeaders("GET", "https", "/"), nullptr, &header_stream_offset, | 1629 GetRequestHeaders("GET", "https", "/"), nullptr, &header_stream_offset, |
1610 &request_data)); | 1630 &request_data)); |
1611 | 1631 |
1612 std::string settings_data; | 1632 std::string settings_data; |
1613 QuicStreamOffset settings_offset = header_stream_offset; | 1633 QuicStreamOffset settings_offset = header_stream_offset; |
1614 quic_data.AddWrite(client_maker_.MakeInitialSettingsPacketAndSaveData( | 1634 quic_data.AddWrite(client_maker_.MakeInitialSettingsPacketAndSaveData( |
1615 2, &header_stream_offset, &settings_data)); | 1635 2, &header_stream_offset, &settings_data)); |
1616 | 1636 |
1617 quic_data.AddWrite(client_maker_.MakeRstPacket(3, true, kClientDataStreamId1, | 1637 quic_data.AddWrite(client_maker_.MakeRstPacket( |
1618 QUIC_STREAM_CANCELLED)); | 1638 3, true, GetNthClientInitiatedStreamId(0), QUIC_STREAM_CANCELLED)); |
1619 // TLP 1 | 1639 // TLP 1 |
1620 quic_data.AddWrite(client_maker_.MakeDataPacket(4, kHeadersStreamId, true, | 1640 quic_data.AddWrite(client_maker_.MakeDataPacket(4, kHeadersStreamId, true, |
1621 false, 0, request_data)); | 1641 false, 0, request_data)); |
1622 // TLP 2 | 1642 // TLP 2 |
1623 quic_data.AddWrite(client_maker_.MakeDataPacket( | 1643 quic_data.AddWrite(client_maker_.MakeDataPacket( |
1624 5, kHeadersStreamId, true, false, settings_offset, settings_data)); | 1644 5, kHeadersStreamId, true, false, settings_offset, settings_data)); |
1625 // RTO 1 | 1645 // RTO 1 |
1626 quic_data.AddWrite(client_maker_.MakeRstPacket(6, true, kClientDataStreamId1, | 1646 quic_data.AddWrite(client_maker_.MakeRstPacket( |
1627 QUIC_STREAM_CANCELLED)); | 1647 6, true, GetNthClientInitiatedStreamId(0), QUIC_STREAM_CANCELLED)); |
1628 quic_data.AddWrite(client_maker_.MakeDataPacket(7, kHeadersStreamId, true, | 1648 quic_data.AddWrite(client_maker_.MakeDataPacket(7, kHeadersStreamId, true, |
1629 false, 0, request_data)); | 1649 false, 0, request_data)); |
1630 // RTO 2 | 1650 // RTO 2 |
1631 quic_data.AddWrite(client_maker_.MakeDataPacket( | 1651 quic_data.AddWrite(client_maker_.MakeDataPacket( |
1632 8, kHeadersStreamId, true, false, settings_offset, settings_data)); | 1652 8, kHeadersStreamId, true, false, settings_offset, settings_data)); |
1633 quic_data.AddWrite(client_maker_.MakeRstPacket(9, true, kClientDataStreamId1, | 1653 quic_data.AddWrite(client_maker_.MakeRstPacket( |
1634 QUIC_STREAM_CANCELLED)); | 1654 9, true, GetNthClientInitiatedStreamId(0), QUIC_STREAM_CANCELLED)); |
1635 // RTO 3 | 1655 // RTO 3 |
1636 quic_data.AddWrite(client_maker_.MakeDataPacket(10, kHeadersStreamId, true, | 1656 quic_data.AddWrite(client_maker_.MakeDataPacket(10, kHeadersStreamId, true, |
1637 false, 0, request_data)); | 1657 false, 0, request_data)); |
1638 quic_data.AddWrite(client_maker_.MakeDataPacket( | 1658 quic_data.AddWrite(client_maker_.MakeDataPacket( |
1639 11, kHeadersStreamId, true, false, settings_offset, settings_data)); | 1659 11, kHeadersStreamId, true, false, settings_offset, settings_data)); |
1640 // RTO 4 | 1660 // RTO 4 |
1641 quic_data.AddWrite(client_maker_.MakeRstPacket(12, true, kClientDataStreamId1, | 1661 quic_data.AddWrite(client_maker_.MakeRstPacket( |
1642 QUIC_STREAM_CANCELLED)); | 1662 12, true, GetNthClientInitiatedStreamId(0), QUIC_STREAM_CANCELLED)); |
1643 quic_data.AddWrite(client_maker_.MakeDataPacket(13, kHeadersStreamId, true, | 1663 quic_data.AddWrite(client_maker_.MakeDataPacket(13, kHeadersStreamId, true, |
1644 false, 0, request_data)); | 1664 false, 0, request_data)); |
1645 // RTO 5 | 1665 // RTO 5 |
1646 quic_data.AddWrite(client_maker_.MakeAckAndConnectionClosePacket( | 1666 quic_data.AddWrite(client_maker_.MakeAckAndConnectionClosePacket( |
1647 14, true, QuicTime::Delta::Infinite(), 0, 1, 1, QUIC_TOO_MANY_RTOS, | 1667 14, true, QuicTime::Delta::Infinite(), 0, 1, 1, QUIC_TOO_MANY_RTOS, |
1648 "5 consecutive retransmission timeouts")); | 1668 "5 consecutive retransmission timeouts")); |
1649 | 1669 |
1650 quic_data.AddRead(ASYNC, OK); | 1670 quic_data.AddRead(ASYNC, OK); |
1651 quic_data.AddSocketDataToFactory(&socket_factory_); | 1671 quic_data.AddSocketDataToFactory(&socket_factory_); |
1652 | 1672 |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1697 ASSERT_TRUE(quic_data.AllWriteDataConsumed()); | 1717 ASSERT_TRUE(quic_data.AllWriteDataConsumed()); |
1698 } | 1718 } |
1699 | 1719 |
1700 // Verify that if a QUIC protocol error occurs after the handshake is confirmed | 1720 // Verify that if a QUIC protocol error occurs after the handshake is confirmed |
1701 // the request fails with QUIC_PROTOCOL_ERROR. | 1721 // the request fails with QUIC_PROTOCOL_ERROR. |
1702 TEST_P(QuicNetworkTransactionTest, ProtocolErrorAfterHandshakeConfirmed) { | 1722 TEST_P(QuicNetworkTransactionTest, ProtocolErrorAfterHandshakeConfirmed) { |
1703 // The request will initially go out over QUIC. | 1723 // The request will initially go out over QUIC. |
1704 MockQuicData quic_data; | 1724 MockQuicData quic_data; |
1705 QuicStreamOffset header_stream_offset = 0; | 1725 QuicStreamOffset header_stream_offset = 0; |
1706 quic_data.AddWrite(ConstructClientRequestHeadersPacket( | 1726 quic_data.AddWrite(ConstructClientRequestHeadersPacket( |
1707 1, kClientDataStreamId1, true, true, | 1727 1, GetNthClientInitiatedStreamId(0), true, true, |
1708 GetRequestHeaders("GET", "https", "/"), &header_stream_offset)); | 1728 GetRequestHeaders("GET", "https", "/"), &header_stream_offset)); |
1709 quic_data.AddWrite(ConstructInitialSettingsPacket(2, &header_stream_offset)); | 1729 quic_data.AddWrite(ConstructInitialSettingsPacket(2, &header_stream_offset)); |
1710 // Peer sending data from an non-existing stream causes this end to raise | 1730 // Peer sending data from an non-existing stream causes this end to raise |
1711 // error and close connection. | 1731 // error and close connection. |
1712 quic_data.AddRead( | 1732 quic_data.AddRead( |
1713 ConstructServerRstPacket(1, false, 99, QUIC_STREAM_LAST_ERROR)); | 1733 ConstructServerRstPacket(1, false, 99, QUIC_STREAM_LAST_ERROR)); |
1714 std::string quic_error_details = "Data for nonexistent stream"; | 1734 std::string quic_error_details = "Data for nonexistent stream"; |
1715 quic_data.AddWrite(ConstructClientAckAndConnectionClosePacket( | 1735 quic_data.AddWrite(ConstructClientAckAndConnectionClosePacket( |
1716 3, QuicTime::Delta::Zero(), 1, 1, 1, QUIC_INVALID_STREAM_ID, | 1736 3, QuicTime::Delta::Zero(), 1, 1, 1, QUIC_INVALID_STREAM_ID, |
1717 quic_error_details)); | 1737 quic_error_details)); |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1766 params_.quic_idle_connection_timeout_seconds = 5; | 1786 params_.quic_idle_connection_timeout_seconds = 5; |
1767 | 1787 |
1768 // The request will initially go out over QUIC. | 1788 // The request will initially go out over QUIC. |
1769 MockQuicData quic_data; | 1789 MockQuicData quic_data; |
1770 QuicStreamOffset header_stream_offset = 0; | 1790 QuicStreamOffset header_stream_offset = 0; |
1771 SpdyPriority priority = | 1791 SpdyPriority priority = |
1772 ConvertRequestPriorityToQuicPriority(DEFAULT_PRIORITY); | 1792 ConvertRequestPriorityToQuicPriority(DEFAULT_PRIORITY); |
1773 | 1793 |
1774 std::string request_data; | 1794 std::string request_data; |
1775 quic_data.AddWrite(client_maker_.MakeRequestHeadersPacketAndSaveData( | 1795 quic_data.AddWrite(client_maker_.MakeRequestHeadersPacketAndSaveData( |
1776 1, kClientDataStreamId1, true, true, priority, | 1796 1, GetNthClientInitiatedStreamId(0), true, true, priority, |
1777 GetRequestHeaders("GET", "https", "/"), nullptr, &header_stream_offset, | 1797 GetRequestHeaders("GET", "https", "/"), nullptr, &header_stream_offset, |
1778 &request_data)); | 1798 &request_data)); |
1779 | 1799 |
1780 std::string settings_data; | 1800 std::string settings_data; |
1781 QuicStreamOffset settings_offset = header_stream_offset; | 1801 QuicStreamOffset settings_offset = header_stream_offset; |
1782 quic_data.AddWrite(client_maker_.MakeInitialSettingsPacketAndSaveData( | 1802 quic_data.AddWrite(client_maker_.MakeInitialSettingsPacketAndSaveData( |
1783 2, &header_stream_offset, &settings_data)); | 1803 2, &header_stream_offset, &settings_data)); |
1784 // TLP 1 | 1804 // TLP 1 |
1785 quic_data.AddWrite(client_maker_.MakeDataPacket(3, kHeadersStreamId, true, | 1805 quic_data.AddWrite(client_maker_.MakeDataPacket(3, kHeadersStreamId, true, |
1786 false, 0, request_data)); | 1806 false, 0, request_data)); |
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1883 params_.quic_idle_connection_timeout_seconds = 5; | 1903 params_.quic_idle_connection_timeout_seconds = 5; |
1884 | 1904 |
1885 // The request will initially go out over QUIC. | 1905 // The request will initially go out over QUIC. |
1886 MockQuicData quic_data; | 1906 MockQuicData quic_data; |
1887 QuicStreamOffset header_stream_offset = 0; | 1907 QuicStreamOffset header_stream_offset = 0; |
1888 SpdyPriority priority = | 1908 SpdyPriority priority = |
1889 ConvertRequestPriorityToQuicPriority(DEFAULT_PRIORITY); | 1909 ConvertRequestPriorityToQuicPriority(DEFAULT_PRIORITY); |
1890 | 1910 |
1891 std::string request_data; | 1911 std::string request_data; |
1892 quic_data.AddWrite(client_maker_.MakeRequestHeadersPacketAndSaveData( | 1912 quic_data.AddWrite(client_maker_.MakeRequestHeadersPacketAndSaveData( |
1893 1, kClientDataStreamId1, true, true, priority, | 1913 1, GetNthClientInitiatedStreamId(0), true, true, priority, |
1894 GetRequestHeaders("GET", "https", "/"), nullptr, &header_stream_offset, | 1914 GetRequestHeaders("GET", "https", "/"), nullptr, &header_stream_offset, |
1895 &request_data)); | 1915 &request_data)); |
1896 | 1916 |
1897 std::string settings_data; | 1917 std::string settings_data; |
1898 QuicStreamOffset settings_offset = header_stream_offset; | 1918 QuicStreamOffset settings_offset = header_stream_offset; |
1899 quic_data.AddWrite(client_maker_.MakeInitialSettingsPacketAndSaveData( | 1919 quic_data.AddWrite(client_maker_.MakeInitialSettingsPacketAndSaveData( |
1900 2, &header_stream_offset, &settings_data)); | 1920 2, &header_stream_offset, &settings_data)); |
1901 // TLP 1 | 1921 // TLP 1 |
1902 quic_data.AddWrite(client_maker_.MakeDataPacket(3, kHeadersStreamId, true, | 1922 quic_data.AddWrite(client_maker_.MakeDataPacket(3, kHeadersStreamId, true, |
1903 false, 0, request_data)); | 1923 false, 0, request_data)); |
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2003 params_.quic_idle_connection_timeout_seconds = 5; | 2023 params_.quic_idle_connection_timeout_seconds = 5; |
2004 | 2024 |
2005 // The request will initially go out over QUIC. | 2025 // The request will initially go out over QUIC. |
2006 MockQuicData quic_data; | 2026 MockQuicData quic_data; |
2007 QuicStreamOffset header_stream_offset = 0; | 2027 QuicStreamOffset header_stream_offset = 0; |
2008 SpdyPriority priority = | 2028 SpdyPriority priority = |
2009 ConvertRequestPriorityToQuicPriority(DEFAULT_PRIORITY); | 2029 ConvertRequestPriorityToQuicPriority(DEFAULT_PRIORITY); |
2010 | 2030 |
2011 std::string request_data; | 2031 std::string request_data; |
2012 quic_data.AddWrite(client_maker_.MakeRequestHeadersPacketAndSaveData( | 2032 quic_data.AddWrite(client_maker_.MakeRequestHeadersPacketAndSaveData( |
2013 1, kClientDataStreamId1, true, true, priority, | 2033 1, GetNthClientInitiatedStreamId(0), true, true, priority, |
2014 GetRequestHeaders("GET", "https", "/"), nullptr, &header_stream_offset, | 2034 GetRequestHeaders("GET", "https", "/"), nullptr, &header_stream_offset, |
2015 &request_data)); | 2035 &request_data)); |
2016 | 2036 |
2017 std::string settings_data; | 2037 std::string settings_data; |
2018 QuicStreamOffset settings_offset = header_stream_offset; | 2038 QuicStreamOffset settings_offset = header_stream_offset; |
2019 quic_data.AddWrite(client_maker_.MakeInitialSettingsPacketAndSaveData( | 2039 quic_data.AddWrite(client_maker_.MakeInitialSettingsPacketAndSaveData( |
2020 2, &header_stream_offset, &settings_data)); | 2040 2, &header_stream_offset, &settings_data)); |
2021 | 2041 |
2022 quic_data.AddRead(ConstructServerResponseHeadersPacket( | 2042 quic_data.AddRead(ConstructServerResponseHeadersPacket( |
2023 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK"))); | 2043 1, GetNthClientInitiatedStreamId(0), false, false, |
| 2044 GetResponseHeaders("200 OK"))); |
2024 // quic_data.AddWrite(ConstructClientAckPacket(3, 1, 1)); | 2045 // quic_data.AddWrite(ConstructClientAckPacket(3, 1, 1)); |
2025 quic_data.AddWrite(ConstructClientAckPacket( | 2046 quic_data.AddWrite(ConstructClientAckPacket( |
2026 3, 1, 1, 1, QuicTime::Delta::FromMilliseconds(25))); | 2047 3, 1, 1, 1, QuicTime::Delta::FromMilliseconds(25))); |
2027 | 2048 |
2028 // TLP 1 | 2049 // TLP 1 |
2029 quic_data.AddWrite(client_maker_.MakeDataPacket(4, kHeadersStreamId, false, | 2050 quic_data.AddWrite(client_maker_.MakeDataPacket(4, kHeadersStreamId, false, |
2030 false, 0, request_data)); | 2051 false, 0, request_data)); |
2031 // TLP 2 | 2052 // TLP 2 |
2032 quic_data.AddWrite(client_maker_.MakeDataPacket( | 2053 quic_data.AddWrite(client_maker_.MakeDataPacket( |
2033 5, kHeadersStreamId, false, false, settings_offset, settings_data)); | 2054 5, kHeadersStreamId, false, false, settings_offset, settings_data)); |
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2114 params_.quic_connection_options.push_back(k5RTO); | 2135 params_.quic_connection_options.push_back(k5RTO); |
2115 | 2136 |
2116 // The request will initially go out over QUIC. | 2137 // The request will initially go out over QUIC. |
2117 MockQuicData quic_data; | 2138 MockQuicData quic_data; |
2118 QuicStreamOffset header_stream_offset = 0; | 2139 QuicStreamOffset header_stream_offset = 0; |
2119 SpdyPriority priority = | 2140 SpdyPriority priority = |
2120 ConvertRequestPriorityToQuicPriority(DEFAULT_PRIORITY); | 2141 ConvertRequestPriorityToQuicPriority(DEFAULT_PRIORITY); |
2121 | 2142 |
2122 std::string request_data; | 2143 std::string request_data; |
2123 quic_data.AddWrite(client_maker_.MakeRequestHeadersPacketAndSaveData( | 2144 quic_data.AddWrite(client_maker_.MakeRequestHeadersPacketAndSaveData( |
2124 1, kClientDataStreamId1, true, true, priority, | 2145 1, GetNthClientInitiatedStreamId(0), true, true, priority, |
2125 GetRequestHeaders("GET", "https", "/"), nullptr, &header_stream_offset, | 2146 GetRequestHeaders("GET", "https", "/"), nullptr, &header_stream_offset, |
2126 &request_data)); | 2147 &request_data)); |
2127 | 2148 |
2128 std::string settings_data; | 2149 std::string settings_data; |
2129 QuicStreamOffset settings_offset = header_stream_offset; | 2150 QuicStreamOffset settings_offset = header_stream_offset; |
2130 quic_data.AddWrite(client_maker_.MakeInitialSettingsPacketAndSaveData( | 2151 quic_data.AddWrite(client_maker_.MakeInitialSettingsPacketAndSaveData( |
2131 2, &header_stream_offset, &settings_data)); | 2152 2, &header_stream_offset, &settings_data)); |
2132 // TLP 1 | 2153 // TLP 1 |
2133 quic_data.AddWrite(client_maker_.MakeDataPacket(3, kHeadersStreamId, true, | 2154 quic_data.AddWrite(client_maker_.MakeDataPacket(3, kHeadersStreamId, true, |
2134 false, 0, request_data)); | 2155 false, 0, request_data)); |
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2239 params_.quic_connection_options.push_back(k5RTO); | 2260 params_.quic_connection_options.push_back(k5RTO); |
2240 | 2261 |
2241 // The request will initially go out over QUIC. | 2262 // The request will initially go out over QUIC. |
2242 MockQuicData quic_data; | 2263 MockQuicData quic_data; |
2243 QuicStreamOffset header_stream_offset = 0; | 2264 QuicStreamOffset header_stream_offset = 0; |
2244 SpdyPriority priority = | 2265 SpdyPriority priority = |
2245 ConvertRequestPriorityToQuicPriority(DEFAULT_PRIORITY); | 2266 ConvertRequestPriorityToQuicPriority(DEFAULT_PRIORITY); |
2246 | 2267 |
2247 std::string request_data; | 2268 std::string request_data; |
2248 quic_data.AddWrite(client_maker_.MakeRequestHeadersPacketAndSaveData( | 2269 quic_data.AddWrite(client_maker_.MakeRequestHeadersPacketAndSaveData( |
2249 1, kClientDataStreamId1, true, true, priority, | 2270 1, GetNthClientInitiatedStreamId(0), true, true, priority, |
2250 GetRequestHeaders("GET", "https", "/"), nullptr, &header_stream_offset, | 2271 GetRequestHeaders("GET", "https", "/"), nullptr, &header_stream_offset, |
2251 &request_data)); | 2272 &request_data)); |
2252 | 2273 |
2253 std::string settings_data; | 2274 std::string settings_data; |
2254 QuicStreamOffset settings_offset = header_stream_offset; | 2275 QuicStreamOffset settings_offset = header_stream_offset; |
2255 quic_data.AddWrite(client_maker_.MakeInitialSettingsPacketAndSaveData( | 2276 quic_data.AddWrite(client_maker_.MakeInitialSettingsPacketAndSaveData( |
2256 2, &header_stream_offset, &settings_data)); | 2277 2, &header_stream_offset, &settings_data)); |
2257 | 2278 |
2258 quic_data.AddWrite(client_maker_.MakeRstPacket(3, true, kClientDataStreamId1, | 2279 quic_data.AddWrite(client_maker_.MakeRstPacket( |
2259 QUIC_STREAM_CANCELLED)); | 2280 3, true, GetNthClientInitiatedStreamId(0), QUIC_STREAM_CANCELLED)); |
2260 // TLP 1 | 2281 // TLP 1 |
2261 quic_data.AddWrite(client_maker_.MakeDataPacket(4, kHeadersStreamId, true, | 2282 quic_data.AddWrite(client_maker_.MakeDataPacket(4, kHeadersStreamId, true, |
2262 false, 0, request_data)); | 2283 false, 0, request_data)); |
2263 // TLP 2 | 2284 // TLP 2 |
2264 quic_data.AddWrite(client_maker_.MakeDataPacket( | 2285 quic_data.AddWrite(client_maker_.MakeDataPacket( |
2265 5, kHeadersStreamId, true, false, settings_offset, settings_data)); | 2286 5, kHeadersStreamId, true, false, settings_offset, settings_data)); |
2266 // RTO 1 | 2287 // RTO 1 |
2267 quic_data.AddWrite(client_maker_.MakeRstPacket(6, true, kClientDataStreamId1, | 2288 quic_data.AddWrite(client_maker_.MakeRstPacket( |
2268 QUIC_STREAM_CANCELLED)); | 2289 6, true, GetNthClientInitiatedStreamId(0), QUIC_STREAM_CANCELLED)); |
2269 quic_data.AddWrite(client_maker_.MakeDataPacket(7, kHeadersStreamId, true, | 2290 quic_data.AddWrite(client_maker_.MakeDataPacket(7, kHeadersStreamId, true, |
2270 false, 0, request_data)); | 2291 false, 0, request_data)); |
2271 // RTO 2 | 2292 // RTO 2 |
2272 quic_data.AddWrite(client_maker_.MakeDataPacket( | 2293 quic_data.AddWrite(client_maker_.MakeDataPacket( |
2273 8, kHeadersStreamId, true, false, settings_offset, settings_data)); | 2294 8, kHeadersStreamId, true, false, settings_offset, settings_data)); |
2274 quic_data.AddWrite(client_maker_.MakeRstPacket(9, true, kClientDataStreamId1, | 2295 quic_data.AddWrite(client_maker_.MakeRstPacket( |
2275 QUIC_STREAM_CANCELLED)); | 2296 9, true, GetNthClientInitiatedStreamId(0), QUIC_STREAM_CANCELLED)); |
2276 // RTO 3 | 2297 // RTO 3 |
2277 quic_data.AddWrite(client_maker_.MakeDataPacket(10, kHeadersStreamId, true, | 2298 quic_data.AddWrite(client_maker_.MakeDataPacket(10, kHeadersStreamId, true, |
2278 false, 0, request_data)); | 2299 false, 0, request_data)); |
2279 quic_data.AddWrite(client_maker_.MakeDataPacket( | 2300 quic_data.AddWrite(client_maker_.MakeDataPacket( |
2280 11, kHeadersStreamId, true, false, settings_offset, settings_data)); | 2301 11, kHeadersStreamId, true, false, settings_offset, settings_data)); |
2281 // RTO 4 | 2302 // RTO 4 |
2282 quic_data.AddWrite(client_maker_.MakeRstPacket(12, true, kClientDataStreamId1, | 2303 quic_data.AddWrite(client_maker_.MakeRstPacket( |
2283 QUIC_STREAM_CANCELLED)); | 2304 12, true, GetNthClientInitiatedStreamId(0), QUIC_STREAM_CANCELLED)); |
2284 quic_data.AddWrite(client_maker_.MakeDataPacket(13, kHeadersStreamId, true, | 2305 quic_data.AddWrite(client_maker_.MakeDataPacket(13, kHeadersStreamId, true, |
2285 false, 0, request_data)); | 2306 false, 0, request_data)); |
2286 // RTO 5 | 2307 // RTO 5 |
2287 quic_data.AddWrite(client_maker_.MakeAckAndConnectionClosePacket( | 2308 quic_data.AddWrite(client_maker_.MakeAckAndConnectionClosePacket( |
2288 14, true, QuicTime::Delta::Infinite(), 0, 1, 1, QUIC_TOO_MANY_RTOS, | 2309 14, true, QuicTime::Delta::Infinite(), 0, 1, 1, QUIC_TOO_MANY_RTOS, |
2289 "5 consecutive retransmission timeouts")); | 2310 "5 consecutive retransmission timeouts")); |
2290 | 2311 |
2291 quic_data.AddRead(ASYNC, OK); | 2312 quic_data.AddRead(ASYNC, OK); |
2292 quic_data.AddSocketDataToFactory(&socket_factory_); | 2313 quic_data.AddSocketDataToFactory(&socket_factory_); |
2293 | 2314 |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2343 // retried over TCP and the QUIC will be marked as broken. | 2364 // retried over TCP and the QUIC will be marked as broken. |
2344 TEST_P(QuicNetworkTransactionTest, | 2365 TEST_P(QuicNetworkTransactionTest, |
2345 ProtocolErrorAfterHandshakeConfirmedThenBroken) { | 2366 ProtocolErrorAfterHandshakeConfirmedThenBroken) { |
2346 params_.retry_without_alt_svc_on_quic_errors = true; | 2367 params_.retry_without_alt_svc_on_quic_errors = true; |
2347 params_.quic_idle_connection_timeout_seconds = 5; | 2368 params_.quic_idle_connection_timeout_seconds = 5; |
2348 | 2369 |
2349 // The request will initially go out over QUIC. | 2370 // The request will initially go out over QUIC. |
2350 MockQuicData quic_data; | 2371 MockQuicData quic_data; |
2351 QuicStreamOffset header_stream_offset = 0; | 2372 QuicStreamOffset header_stream_offset = 0; |
2352 quic_data.AddWrite(ConstructClientRequestHeadersPacket( | 2373 quic_data.AddWrite(ConstructClientRequestHeadersPacket( |
2353 1, kClientDataStreamId1, true, true, | 2374 1, GetNthClientInitiatedStreamId(0), true, true, |
2354 GetRequestHeaders("GET", "https", "/"), &header_stream_offset)); | 2375 GetRequestHeaders("GET", "https", "/"), &header_stream_offset)); |
2355 quic_data.AddWrite(ConstructInitialSettingsPacket(2, &header_stream_offset)); | 2376 quic_data.AddWrite(ConstructInitialSettingsPacket(2, &header_stream_offset)); |
2356 // Peer sending data from an non-existing stream causes this end to raise | 2377 // Peer sending data from an non-existing stream causes this end to raise |
2357 // error and close connection. | 2378 // error and close connection. |
2358 quic_data.AddRead( | 2379 quic_data.AddRead( |
2359 ConstructServerRstPacket(1, false, 99, QUIC_STREAM_LAST_ERROR)); | 2380 ConstructServerRstPacket(1, false, 99, QUIC_STREAM_LAST_ERROR)); |
2360 std::string quic_error_details = "Data for nonexistent stream"; | 2381 std::string quic_error_details = "Data for nonexistent stream"; |
2361 quic_data.AddWrite(ConstructClientAckAndConnectionClosePacket( | 2382 quic_data.AddWrite(ConstructClientAckAndConnectionClosePacket( |
2362 3, QuicTime::Delta::Zero(), 1, 1, 1, QUIC_INVALID_STREAM_ID, | 2383 3, QuicTime::Delta::Zero(), 1, 1, 1, QUIC_INVALID_STREAM_ID, |
2363 quic_error_details)); | 2384 quic_error_details)); |
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2469 | 2490 |
2470 QuicStreamOffset request_header_offset = 0; | 2491 QuicStreamOffset request_header_offset = 0; |
2471 QuicStreamOffset response_header_offset = 0; | 2492 QuicStreamOffset response_header_offset = 0; |
2472 // First QUIC request data. | 2493 // First QUIC request data. |
2473 // Open a session to foo.example.org:443 using the first entry of the | 2494 // Open a session to foo.example.org:443 using the first entry of the |
2474 // alternative service list. | 2495 // alternative service list. |
2475 MockQuicData mock_quic_data; | 2496 MockQuicData mock_quic_data; |
2476 mock_quic_data.AddWrite( | 2497 mock_quic_data.AddWrite( |
2477 ConstructInitialSettingsPacket(1, &request_header_offset)); | 2498 ConstructInitialSettingsPacket(1, &request_header_offset)); |
2478 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( | 2499 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( |
2479 2, kClientDataStreamId1, true, true, | 2500 2, GetNthClientInitiatedStreamId(0), true, true, |
2480 GetRequestHeaders("GET", "https", "/"), &request_header_offset)); | 2501 GetRequestHeaders("GET", "https", "/"), &request_header_offset)); |
2481 | 2502 |
2482 std::string alt_svc_list = | 2503 std::string alt_svc_list = |
2483 "quic=\"mail.example.org:444\", quic=\"foo.example.org:443\", " | 2504 "quic=\"mail.example.org:444\", quic=\"foo.example.org:443\", " |
2484 "quic=\"bar.example.org:445\""; | 2505 "quic=\"bar.example.org:445\""; |
2485 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( | 2506 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( |
2486 1, kClientDataStreamId1, false, false, | 2507 1, GetNthClientInitiatedStreamId(0), false, false, |
2487 GetResponseHeaders("200 OK", alt_svc_list), &response_header_offset)); | 2508 GetResponseHeaders("200 OK", alt_svc_list), &response_header_offset)); |
2488 mock_quic_data.AddRead(ConstructServerDataPacket(2, kClientDataStreamId1, | 2509 mock_quic_data.AddRead(ConstructServerDataPacket( |
2489 false, true, 0, "hello!")); | 2510 2, GetNthClientInitiatedStreamId(0), false, true, 0, "hello!")); |
2490 mock_quic_data.AddWrite(ConstructClientAckPacket(3, 2, 1, 1)); | 2511 mock_quic_data.AddWrite(ConstructClientAckPacket(3, 2, 1, 1)); |
2491 | 2512 |
2492 // Second QUIC request data. | 2513 // Second QUIC request data. |
2493 // Connection pooling, using existing session, no need to include version | 2514 // Connection pooling, using existing session, no need to include version |
2494 // as version negotiation has been completed. | 2515 // as version negotiation has been completed. |
2495 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( | 2516 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( |
2496 4, kClientDataStreamId2, false, true, | 2517 4, GetNthClientInitiatedStreamId(1), false, true, |
2497 GetRequestHeaders("GET", "https", "/"), &request_header_offset)); | 2518 GetRequestHeaders("GET", "https", "/"), &request_header_offset)); |
2498 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( | 2519 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( |
2499 3, kClientDataStreamId2, false, false, GetResponseHeaders("200 OK"), | 2520 3, GetNthClientInitiatedStreamId(1), false, false, |
2500 &response_header_offset)); | 2521 GetResponseHeaders("200 OK"), &response_header_offset)); |
2501 mock_quic_data.AddRead(ConstructServerDataPacket(4, kClientDataStreamId2, | 2522 mock_quic_data.AddRead(ConstructServerDataPacket( |
2502 false, true, 0, "hello!")); | 2523 4, GetNthClientInitiatedStreamId(1), false, true, 0, "hello!")); |
2503 mock_quic_data.AddWrite( | 2524 mock_quic_data.AddWrite( |
2504 ConstructClientAckAndConnectionClosePacket(5, 4, 3, 1)); | 2525 ConstructClientAckAndConnectionClosePacket(5, 4, 3, 1)); |
2505 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read | 2526 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read |
2506 mock_quic_data.AddRead(ASYNC, 0); // EOF | 2527 mock_quic_data.AddRead(ASYNC, 0); // EOF |
2507 | 2528 |
2508 mock_quic_data.AddSocketDataToFactory(&socket_factory_); | 2529 mock_quic_data.AddSocketDataToFactory(&socket_factory_); |
2509 | 2530 |
2510 AddHangingNonAlternateProtocolSocketData(); | 2531 AddHangingNonAlternateProtocolSocketData(); |
2511 CreateSession(); | 2532 CreateSession(); |
2512 | 2533 |
(...skipping 10 matching lines...) Expand all Loading... |
2523 | 2544 |
2524 QuicStreamOffset request_header_offset = 0; | 2545 QuicStreamOffset request_header_offset = 0; |
2525 QuicStreamOffset response_header_offset = 0; | 2546 QuicStreamOffset response_header_offset = 0; |
2526 // First QUIC request data. | 2547 // First QUIC request data. |
2527 // Open a session to foo.example.org:443 using the first entry of the | 2548 // Open a session to foo.example.org:443 using the first entry of the |
2528 // alternative service list. | 2549 // alternative service list. |
2529 MockQuicData mock_quic_data; | 2550 MockQuicData mock_quic_data; |
2530 mock_quic_data.AddWrite( | 2551 mock_quic_data.AddWrite( |
2531 ConstructInitialSettingsPacket(1, &request_header_offset)); | 2552 ConstructInitialSettingsPacket(1, &request_header_offset)); |
2532 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( | 2553 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( |
2533 2, kClientDataStreamId1, true, true, | 2554 2, GetNthClientInitiatedStreamId(0), true, true, |
2534 GetRequestHeaders("GET", "http", "/"), &request_header_offset)); | 2555 GetRequestHeaders("GET", "http", "/"), &request_header_offset)); |
2535 | 2556 |
2536 std::string alt_svc_list; | 2557 std::string alt_svc_list; |
2537 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( | 2558 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( |
2538 1, kClientDataStreamId1, false, false, | 2559 1, GetNthClientInitiatedStreamId(0), false, false, |
2539 GetResponseHeaders("200 OK", alt_svc_list), &response_header_offset)); | 2560 GetResponseHeaders("200 OK", alt_svc_list), &response_header_offset)); |
2540 mock_quic_data.AddRead(ConstructServerDataPacket(2, kClientDataStreamId1, | 2561 mock_quic_data.AddRead(ConstructServerDataPacket( |
2541 false, true, 0, "hello!")); | 2562 2, GetNthClientInitiatedStreamId(0), false, true, 0, "hello!")); |
2542 mock_quic_data.AddWrite(ConstructClientAckPacket(3, 2, 1, 1)); | 2563 mock_quic_data.AddWrite(ConstructClientAckPacket(3, 2, 1, 1)); |
2543 | 2564 |
2544 // Second QUIC request data. | 2565 // Second QUIC request data. |
2545 // Connection pooling, using existing session, no need to include version | 2566 // Connection pooling, using existing session, no need to include version |
2546 // as version negotiation has been completed. | 2567 // as version negotiation has been completed. |
2547 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( | 2568 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( |
2548 4, kClientDataStreamId2, false, true, | 2569 4, GetNthClientInitiatedStreamId(1), false, true, |
2549 GetRequestHeaders("GET", "http", "/"), &request_header_offset)); | 2570 GetRequestHeaders("GET", "http", "/"), &request_header_offset)); |
2550 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( | 2571 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( |
2551 3, kClientDataStreamId2, false, false, GetResponseHeaders("200 OK"), | 2572 3, GetNthClientInitiatedStreamId(1), false, false, |
2552 &response_header_offset)); | 2573 GetResponseHeaders("200 OK"), &response_header_offset)); |
2553 mock_quic_data.AddRead(ConstructServerDataPacket(4, kClientDataStreamId2, | 2574 mock_quic_data.AddRead(ConstructServerDataPacket( |
2554 false, true, 0, "hello!")); | 2575 4, GetNthClientInitiatedStreamId(1), false, true, 0, "hello!")); |
2555 mock_quic_data.AddWrite( | 2576 mock_quic_data.AddWrite( |
2556 ConstructClientAckAndConnectionClosePacket(5, 4, 3, 1)); | 2577 ConstructClientAckAndConnectionClosePacket(5, 4, 3, 1)); |
2557 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read | 2578 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read |
2558 mock_quic_data.AddRead(ASYNC, 0); // EOF | 2579 mock_quic_data.AddRead(ASYNC, 0); // EOF |
2559 | 2580 |
2560 mock_quic_data.AddSocketDataToFactory(&socket_factory_); | 2581 mock_quic_data.AddSocketDataToFactory(&socket_factory_); |
2561 | 2582 |
2562 AddHangingNonAlternateProtocolSocketData(); | 2583 AddHangingNonAlternateProtocolSocketData(); |
2563 | 2584 |
2564 TestProxyDelegate test_proxy_delegate; | 2585 TestProxyDelegate test_proxy_delegate; |
(...skipping 25 matching lines...) Expand all Loading... |
2590 // even if alternative service destination is different. | 2611 // even if alternative service destination is different. |
2591 TEST_P(QuicNetworkTransactionTest, PoolByOrigin) { | 2612 TEST_P(QuicNetworkTransactionTest, PoolByOrigin) { |
2592 MockQuicData mock_quic_data; | 2613 MockQuicData mock_quic_data; |
2593 QuicStreamOffset request_header_offset(0); | 2614 QuicStreamOffset request_header_offset(0); |
2594 QuicStreamOffset response_header_offset(0); | 2615 QuicStreamOffset response_header_offset(0); |
2595 | 2616 |
2596 mock_quic_data.AddWrite( | 2617 mock_quic_data.AddWrite( |
2597 ConstructInitialSettingsPacket(1, &request_header_offset)); | 2618 ConstructInitialSettingsPacket(1, &request_header_offset)); |
2598 // First request. | 2619 // First request. |
2599 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( | 2620 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( |
2600 2, kClientDataStreamId1, true, true, | 2621 2, GetNthClientInitiatedStreamId(0), true, true, |
2601 GetRequestHeaders("GET", "https", "/"), &request_header_offset)); | 2622 GetRequestHeaders("GET", "https", "/"), &request_header_offset)); |
2602 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( | 2623 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( |
2603 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK"), | 2624 1, GetNthClientInitiatedStreamId(0), false, false, |
2604 &response_header_offset)); | 2625 GetResponseHeaders("200 OK"), &response_header_offset)); |
2605 mock_quic_data.AddRead(ConstructServerDataPacket(2, kClientDataStreamId1, | 2626 mock_quic_data.AddRead(ConstructServerDataPacket( |
2606 false, true, 0, "hello!")); | 2627 2, GetNthClientInitiatedStreamId(0), false, true, 0, "hello!")); |
2607 mock_quic_data.AddWrite(ConstructClientAckPacket(3, 2, 1, 1)); | 2628 mock_quic_data.AddWrite(ConstructClientAckPacket(3, 2, 1, 1)); |
2608 | 2629 |
2609 // Second request. | 2630 // Second request. |
2610 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( | 2631 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( |
2611 4, kClientDataStreamId2, false, true, | 2632 4, GetNthClientInitiatedStreamId(1), false, true, |
2612 GetRequestHeaders("GET", "https", "/"), &request_header_offset)); | 2633 GetRequestHeaders("GET", "https", "/"), &request_header_offset)); |
2613 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( | 2634 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( |
2614 3, kClientDataStreamId2, false, false, GetResponseHeaders("200 OK"), | 2635 3, GetNthClientInitiatedStreamId(1), false, false, |
2615 &response_header_offset)); | 2636 GetResponseHeaders("200 OK"), &response_header_offset)); |
2616 mock_quic_data.AddRead(ConstructServerDataPacket(4, kClientDataStreamId2, | 2637 mock_quic_data.AddRead(ConstructServerDataPacket( |
2617 false, true, 0, "hello!")); | 2638 4, GetNthClientInitiatedStreamId(1), false, true, 0, "hello!")); |
2618 mock_quic_data.AddWrite( | 2639 mock_quic_data.AddWrite( |
2619 ConstructClientAckAndConnectionClosePacket(5, 4, 3, 1)); | 2640 ConstructClientAckAndConnectionClosePacket(5, 4, 3, 1)); |
2620 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read | 2641 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read |
2621 mock_quic_data.AddRead(ASYNC, 0); // EOF | 2642 mock_quic_data.AddRead(ASYNC, 0); // EOF |
2622 | 2643 |
2623 mock_quic_data.AddSocketDataToFactory(&socket_factory_); | 2644 mock_quic_data.AddSocketDataToFactory(&socket_factory_); |
2624 | 2645 |
2625 AddHangingNonAlternateProtocolSocketData(); | 2646 AddHangingNonAlternateProtocolSocketData(); |
2626 AddHangingNonAlternateProtocolSocketData(); | 2647 AddHangingNonAlternateProtocolSocketData(); |
2627 | 2648 |
(...skipping 30 matching lines...) Expand all Loading... |
2658 ASSERT_NE(origin1.host(), origin2.host()); | 2679 ASSERT_NE(origin1.host(), origin2.host()); |
2659 | 2680 |
2660 MockQuicData mock_quic_data; | 2681 MockQuicData mock_quic_data; |
2661 QuicStreamOffset request_header_offset(0); | 2682 QuicStreamOffset request_header_offset(0); |
2662 QuicStreamOffset response_header_offset(0); | 2683 QuicStreamOffset response_header_offset(0); |
2663 | 2684 |
2664 mock_quic_data.AddWrite( | 2685 mock_quic_data.AddWrite( |
2665 ConstructInitialSettingsPacket(1, &request_header_offset)); | 2686 ConstructInitialSettingsPacket(1, &request_header_offset)); |
2666 // First request. | 2687 // First request. |
2667 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( | 2688 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( |
2668 2, kClientDataStreamId1, true, true, | 2689 2, GetNthClientInitiatedStreamId(0), true, true, |
2669 GetRequestHeaders("GET", "https", "/"), &request_header_offset)); | 2690 GetRequestHeaders("GET", "https", "/"), &request_header_offset)); |
2670 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( | 2691 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( |
2671 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK"), | 2692 1, GetNthClientInitiatedStreamId(0), false, false, |
2672 &response_header_offset)); | 2693 GetResponseHeaders("200 OK"), &response_header_offset)); |
2673 mock_quic_data.AddRead(ConstructServerDataPacket(2, kClientDataStreamId1, | 2694 mock_quic_data.AddRead(ConstructServerDataPacket( |
2674 false, true, 0, "hello!")); | 2695 2, GetNthClientInitiatedStreamId(0), false, true, 0, "hello!")); |
2675 mock_quic_data.AddWrite(ConstructClientAckPacket(3, 2, 1, 1)); | 2696 mock_quic_data.AddWrite(ConstructClientAckPacket(3, 2, 1, 1)); |
2676 | 2697 |
2677 // Second request. | 2698 // Second request. |
2678 QuicTestPacketMaker client_maker2(version_, 0, &clock_, origin2.host(), | 2699 QuicTestPacketMaker client_maker2(version_, 0, &clock_, origin2.host(), |
2679 Perspective::IS_CLIENT); | 2700 Perspective::IS_CLIENT); |
2680 QuicTestPacketMaker server_maker2(version_, 0, &clock_, origin2.host(), | 2701 QuicTestPacketMaker server_maker2(version_, 0, &clock_, origin2.host(), |
2681 Perspective::IS_SERVER); | 2702 Perspective::IS_SERVER); |
2682 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( | 2703 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( |
2683 4, kClientDataStreamId2, false, true, | 2704 4, GetNthClientInitiatedStreamId(1), false, true, |
2684 GetRequestHeaders("GET", "https", "/", &client_maker2), | 2705 GetRequestHeaders("GET", "https", "/", &client_maker2), |
2685 &request_header_offset)); | 2706 &request_header_offset)); |
2686 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( | 2707 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( |
2687 3, kClientDataStreamId2, false, false, GetResponseHeaders("200 OK"), | 2708 3, GetNthClientInitiatedStreamId(1), false, false, |
2688 &response_header_offset)); | 2709 GetResponseHeaders("200 OK"), &response_header_offset)); |
2689 mock_quic_data.AddRead(ConstructServerDataPacket(4, kClientDataStreamId2, | 2710 mock_quic_data.AddRead(ConstructServerDataPacket( |
2690 false, true, 0, "hello!")); | 2711 4, GetNthClientInitiatedStreamId(1), false, true, 0, "hello!")); |
2691 mock_quic_data.AddWrite( | 2712 mock_quic_data.AddWrite( |
2692 ConstructClientAckAndConnectionClosePacket(5, 4, 3, 1)); | 2713 ConstructClientAckAndConnectionClosePacket(5, 4, 3, 1)); |
2693 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read | 2714 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read |
2694 mock_quic_data.AddRead(ASYNC, 0); // EOF | 2715 mock_quic_data.AddRead(ASYNC, 0); // EOF |
2695 | 2716 |
2696 mock_quic_data.AddSocketDataToFactory(&socket_factory_); | 2717 mock_quic_data.AddSocketDataToFactory(&socket_factory_); |
2697 | 2718 |
2698 AddHangingNonAlternateProtocolSocketData(); | 2719 AddHangingNonAlternateProtocolSocketData(); |
2699 AddHangingNonAlternateProtocolSocketData(); | 2720 AddHangingNonAlternateProtocolSocketData(); |
2700 | 2721 |
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2771 | 2792 |
2772 QuicTestPacketMaker client_maker(version_, 0, &clock_, "mail.example.org", | 2793 QuicTestPacketMaker client_maker(version_, 0, &clock_, "mail.example.org", |
2773 Perspective::IS_CLIENT); | 2794 Perspective::IS_CLIENT); |
2774 server_maker_.set_hostname("www.example.org"); | 2795 server_maker_.set_hostname("www.example.org"); |
2775 client_maker_.set_hostname("www.example.org"); | 2796 client_maker_.set_hostname("www.example.org"); |
2776 MockQuicData mock_quic_data; | 2797 MockQuicData mock_quic_data; |
2777 mock_quic_data.AddWrite( | 2798 mock_quic_data.AddWrite( |
2778 ConstructInitialSettingsPacket(1, &request_header_offset)); | 2799 ConstructInitialSettingsPacket(1, &request_header_offset)); |
2779 // First QUIC request data. | 2800 // First QUIC request data. |
2780 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( | 2801 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( |
2781 2, kClientDataStreamId1, true, true, | 2802 2, GetNthClientInitiatedStreamId(0), true, true, |
2782 GetRequestHeaders("GET", "https", "/"), &request_header_offset)); | 2803 GetRequestHeaders("GET", "https", "/"), &request_header_offset)); |
2783 | 2804 |
2784 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( | 2805 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( |
2785 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK"), | 2806 1, GetNthClientInitiatedStreamId(0), false, false, |
2786 &response_header_offset)); | 2807 GetResponseHeaders("200 OK"), &response_header_offset)); |
2787 mock_quic_data.AddRead(ConstructServerDataPacket( | 2808 mock_quic_data.AddRead( |
2788 2, kClientDataStreamId1, false, true, 0, "hello from mail QUIC!")); | 2809 ConstructServerDataPacket(2, GetNthClientInitiatedStreamId(0), false, |
| 2810 true, 0, "hello from mail QUIC!")); |
2789 mock_quic_data.AddWrite(ConstructClientAckPacket(3, 2, 1, 1)); | 2811 mock_quic_data.AddWrite(ConstructClientAckPacket(3, 2, 1, 1)); |
2790 // Second QUIC request data. | 2812 // Second QUIC request data. |
2791 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( | 2813 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( |
2792 4, kClientDataStreamId2, false, true, | 2814 4, GetNthClientInitiatedStreamId(1), false, true, |
2793 GetRequestHeaders("GET", "https", "/", &client_maker), | 2815 GetRequestHeaders("GET", "https", "/", &client_maker), |
2794 &request_header_offset)); | 2816 &request_header_offset)); |
2795 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( | 2817 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( |
2796 3, kClientDataStreamId2, false, false, GetResponseHeaders("200 OK"), | 2818 3, GetNthClientInitiatedStreamId(1), false, false, |
2797 &response_header_offset)); | 2819 GetResponseHeaders("200 OK"), &response_header_offset)); |
2798 mock_quic_data.AddRead(ConstructServerDataPacket( | 2820 mock_quic_data.AddRead( |
2799 4, kClientDataStreamId2, false, true, 0, "hello from mail QUIC!")); | 2821 ConstructServerDataPacket(4, GetNthClientInitiatedStreamId(1), false, |
| 2822 true, 0, "hello from mail QUIC!")); |
2800 mock_quic_data.AddWrite( | 2823 mock_quic_data.AddWrite( |
2801 ConstructClientAckAndConnectionClosePacket(5, 4, 3, 1)); | 2824 ConstructClientAckAndConnectionClosePacket(5, 4, 3, 1)); |
2802 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read | 2825 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read |
2803 mock_quic_data.AddRead(ASYNC, 0); // EOF | 2826 mock_quic_data.AddRead(ASYNC, 0); // EOF |
2804 | 2827 |
2805 mock_quic_data.AddSocketDataToFactory(&socket_factory_); | 2828 mock_quic_data.AddSocketDataToFactory(&socket_factory_); |
2806 | 2829 |
2807 AddHangingNonAlternateProtocolSocketData(); | 2830 AddHangingNonAlternateProtocolSocketData(); |
2808 CreateSession(); | 2831 CreateSession(); |
2809 | 2832 |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2861 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), nullptr, | 2884 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), nullptr, |
2862 0); | 2885 0); |
2863 socket_factory_.AddSocketDataProvider(&http_data); | 2886 socket_factory_.AddSocketDataProvider(&http_data); |
2864 socket_factory_.AddSSLSocketDataProvider(&ssl_data_); | 2887 socket_factory_.AddSSLSocketDataProvider(&ssl_data_); |
2865 | 2888 |
2866 MockQuicData mock_quic_data; | 2889 MockQuicData mock_quic_data; |
2867 QuicStreamOffset header_stream_offset = 0; | 2890 QuicStreamOffset header_stream_offset = 0; |
2868 mock_quic_data.AddWrite( | 2891 mock_quic_data.AddWrite( |
2869 ConstructInitialSettingsPacket(1, &header_stream_offset)); | 2892 ConstructInitialSettingsPacket(1, &header_stream_offset)); |
2870 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( | 2893 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( |
2871 2, kClientDataStreamId1, true, true, | 2894 2, GetNthClientInitiatedStreamId(0), true, true, |
2872 GetRequestHeaders("GET", "https", "/"), &header_stream_offset)); | 2895 GetRequestHeaders("GET", "https", "/"), &header_stream_offset)); |
2873 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( | 2896 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( |
2874 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK"))); | 2897 1, GetNthClientInitiatedStreamId(0), false, false, |
2875 mock_quic_data.AddRead(ConstructServerDataPacket(2, kClientDataStreamId1, | 2898 GetResponseHeaders("200 OK"))); |
2876 false, true, 0, "hello!")); | 2899 mock_quic_data.AddRead(ConstructServerDataPacket( |
| 2900 2, GetNthClientInitiatedStreamId(0), false, true, 0, "hello!")); |
2877 mock_quic_data.AddWrite(ConstructClientAckPacket(3, 2, 1, 1)); | 2901 mock_quic_data.AddWrite(ConstructClientAckPacket(3, 2, 1, 1)); |
2878 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read | 2902 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read |
2879 mock_quic_data.AddRead(ASYNC, 0); // EOF | 2903 mock_quic_data.AddRead(ASYNC, 0); // EOF |
2880 | 2904 |
2881 mock_quic_data.AddSocketDataToFactory(&socket_factory_); | 2905 mock_quic_data.AddSocketDataToFactory(&socket_factory_); |
2882 | 2906 |
2883 AddHangingNonAlternateProtocolSocketData(); | 2907 AddHangingNonAlternateProtocolSocketData(); |
2884 CreateSession(); | 2908 CreateSession(); |
2885 | 2909 |
2886 AlternativeService alternative_service(kProtoQUIC, | 2910 AlternativeService alternative_service(kProtoQUIC, |
(...skipping 25 matching lines...) Expand all Loading... |
2912 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), nullptr, | 2936 StaticSocketDataProvider http_data(http_reads, arraysize(http_reads), nullptr, |
2913 0); | 2937 0); |
2914 socket_factory_.AddSocketDataProvider(&http_data); | 2938 socket_factory_.AddSocketDataProvider(&http_data); |
2915 socket_factory_.AddSSLSocketDataProvider(&ssl_data_); | 2939 socket_factory_.AddSSLSocketDataProvider(&ssl_data_); |
2916 | 2940 |
2917 MockQuicData mock_quic_data; | 2941 MockQuicData mock_quic_data; |
2918 QuicStreamOffset header_stream_offset = 0; | 2942 QuicStreamOffset header_stream_offset = 0; |
2919 mock_quic_data.AddWrite( | 2943 mock_quic_data.AddWrite( |
2920 ConstructInitialSettingsPacket(1, &header_stream_offset)); | 2944 ConstructInitialSettingsPacket(1, &header_stream_offset)); |
2921 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( | 2945 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( |
2922 2, kClientDataStreamId1, true, true, | 2946 2, GetNthClientInitiatedStreamId(0), true, true, |
2923 GetRequestHeaders("GET", "https", "/"), &header_stream_offset)); | 2947 GetRequestHeaders("GET", "https", "/"), &header_stream_offset)); |
2924 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( | 2948 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( |
2925 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK"))); | 2949 1, GetNthClientInitiatedStreamId(0), false, false, |
2926 mock_quic_data.AddRead(ConstructServerDataPacket(2, kClientDataStreamId1, | 2950 GetResponseHeaders("200 OK"))); |
2927 false, true, 0, "hello!")); | 2951 mock_quic_data.AddRead(ConstructServerDataPacket( |
| 2952 2, GetNthClientInitiatedStreamId(0), false, true, 0, "hello!")); |
2928 mock_quic_data.AddWrite(ConstructClientAckPacket(3, 2, 1, 1)); | 2953 mock_quic_data.AddWrite(ConstructClientAckPacket(3, 2, 1, 1)); |
2929 mock_quic_data.AddRead(SYNCHRONOUS, 0); // EOF | 2954 mock_quic_data.AddRead(SYNCHRONOUS, 0); // EOF |
2930 | 2955 |
2931 mock_quic_data.AddSocketDataToFactory(&socket_factory_); | 2956 mock_quic_data.AddSocketDataToFactory(&socket_factory_); |
2932 | 2957 |
2933 AddHangingNonAlternateProtocolSocketData(); | 2958 AddHangingNonAlternateProtocolSocketData(); |
2934 CreateSession(); | 2959 CreateSession(); |
2935 | 2960 |
2936 // TODO(rtenneti): Test QUIC over HTTPS, GetSSLInfo(). | 2961 // TODO(rtenneti): Test QUIC over HTTPS, GetSSLInfo(). |
2937 SendRequestAndExpectHttpResponse("hello world"); | 2962 SendRequestAndExpectHttpResponse("hello world"); |
2938 } | 2963 } |
2939 | 2964 |
2940 // Tests that the connection to an HTTPS proxy is raced with an available | 2965 // Tests that the connection to an HTTPS proxy is raced with an available |
2941 // alternative proxy server. | 2966 // alternative proxy server. |
2942 TEST_P(QuicNetworkTransactionTest, QuicProxyWithRacing) { | 2967 TEST_P(QuicNetworkTransactionTest, QuicProxyWithRacing) { |
2943 base::HistogramTester histogram_tester; | 2968 base::HistogramTester histogram_tester; |
2944 proxy_service_ = | 2969 proxy_service_ = |
2945 ProxyService::CreateFixedFromPacResult("HTTPS mail.example.org:443"); | 2970 ProxyService::CreateFixedFromPacResult("HTTPS mail.example.org:443"); |
2946 | 2971 |
2947 MockQuicData mock_quic_data; | 2972 MockQuicData mock_quic_data; |
2948 QuicStreamOffset header_stream_offset = 0; | 2973 QuicStreamOffset header_stream_offset = 0; |
2949 mock_quic_data.AddWrite( | 2974 mock_quic_data.AddWrite( |
2950 ConstructInitialSettingsPacket(1, &header_stream_offset)); | 2975 ConstructInitialSettingsPacket(1, &header_stream_offset)); |
2951 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( | 2976 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( |
2952 2, kClientDataStreamId1, true, true, | 2977 2, GetNthClientInitiatedStreamId(0), true, true, |
2953 GetRequestHeaders("GET", "http", "/"), &header_stream_offset)); | 2978 GetRequestHeaders("GET", "http", "/"), &header_stream_offset)); |
2954 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( | 2979 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( |
2955 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK"))); | 2980 1, GetNthClientInitiatedStreamId(0), false, false, |
2956 mock_quic_data.AddRead(ConstructServerDataPacket(2, kClientDataStreamId1, | 2981 GetResponseHeaders("200 OK"))); |
2957 false, true, 0, "hello!")); | 2982 mock_quic_data.AddRead(ConstructServerDataPacket( |
| 2983 2, GetNthClientInitiatedStreamId(0), false, true, 0, "hello!")); |
2958 mock_quic_data.AddWrite(ConstructClientAckPacket(3, 2, 1, 1)); | 2984 mock_quic_data.AddWrite(ConstructClientAckPacket(3, 2, 1, 1)); |
2959 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read | 2985 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read |
2960 mock_quic_data.AddRead(ASYNC, 0); // EOF | 2986 mock_quic_data.AddRead(ASYNC, 0); // EOF |
2961 | 2987 |
2962 mock_quic_data.AddSocketDataToFactory(&socket_factory_); | 2988 mock_quic_data.AddSocketDataToFactory(&socket_factory_); |
2963 | 2989 |
2964 // There is no need to set up main job, because no attempt will be made to | 2990 // There is no need to set up main job, because no attempt will be made to |
2965 // speak to the proxy over TCP. | 2991 // speak to the proxy over TCP. |
2966 request_.url = GURL("http://mail.example.org/"); | 2992 request_.url = GURL("http://mail.example.org/"); |
2967 TestProxyDelegate test_proxy_delegate; | 2993 TestProxyDelegate test_proxy_delegate; |
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3038 | 3064 |
3039 ASSERT_TRUE(http_data2.AllReadDataConsumed()); | 3065 ASSERT_TRUE(http_data2.AllReadDataConsumed()); |
3040 ASSERT_TRUE(http_data2.AllWriteDataConsumed()); | 3066 ASSERT_TRUE(http_data2.AllWriteDataConsumed()); |
3041 ASSERT_TRUE(quic_data.AllReadDataConsumed()); | 3067 ASSERT_TRUE(quic_data.AllReadDataConsumed()); |
3042 } | 3068 } |
3043 | 3069 |
3044 TEST_P(QuicNetworkTransactionTest, ZeroRTTWithHttpRace) { | 3070 TEST_P(QuicNetworkTransactionTest, ZeroRTTWithHttpRace) { |
3045 MockQuicData mock_quic_data; | 3071 MockQuicData mock_quic_data; |
3046 QuicStreamOffset header_stream_offset = 0; | 3072 QuicStreamOffset header_stream_offset = 0; |
3047 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( | 3073 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( |
3048 1, kClientDataStreamId1, true, true, | 3074 1, GetNthClientInitiatedStreamId(0), true, true, |
3049 GetRequestHeaders("GET", "https", "/"), &header_stream_offset)); | 3075 GetRequestHeaders("GET", "https", "/"), &header_stream_offset)); |
3050 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( | 3076 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( |
3051 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK"))); | 3077 1, GetNthClientInitiatedStreamId(0), false, false, |
3052 mock_quic_data.AddRead(ConstructServerDataPacket(2, kClientDataStreamId1, | 3078 GetResponseHeaders("200 OK"))); |
3053 false, true, 0, "hello!")); | 3079 mock_quic_data.AddRead(ConstructServerDataPacket( |
| 3080 2, GetNthClientInitiatedStreamId(0), false, true, 0, "hello!")); |
3054 mock_quic_data.AddWrite(ConstructClientAckPacket(2, 2, 1, 1)); | 3081 mock_quic_data.AddWrite(ConstructClientAckPacket(2, 2, 1, 1)); |
3055 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read | 3082 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read |
3056 mock_quic_data.AddRead(ASYNC, 0); // EOF | 3083 mock_quic_data.AddRead(ASYNC, 0); // EOF |
3057 | 3084 |
3058 mock_quic_data.AddSocketDataToFactory(&socket_factory_); | 3085 mock_quic_data.AddSocketDataToFactory(&socket_factory_); |
3059 | 3086 |
3060 // The non-alternate protocol job needs to hang in order to guarantee that | 3087 // The non-alternate protocol job needs to hang in order to guarantee that |
3061 // the alternate-protocol job will "win". | 3088 // the alternate-protocol job will "win". |
3062 AddHangingNonAlternateProtocolSocketData(); | 3089 AddHangingNonAlternateProtocolSocketData(); |
3063 | 3090 |
3064 CreateSession(); | 3091 CreateSession(); |
3065 AddQuicAlternateProtocolMapping(MockCryptoClientStream::ZERO_RTT); | 3092 AddQuicAlternateProtocolMapping(MockCryptoClientStream::ZERO_RTT); |
3066 SendRequestAndExpectQuicResponse("hello!"); | 3093 SendRequestAndExpectQuicResponse("hello!"); |
3067 | 3094 |
3068 EXPECT_EQ(nullptr, | 3095 EXPECT_EQ(nullptr, |
3069 http_server_properties_.GetServerNetworkStats( | 3096 http_server_properties_.GetServerNetworkStats( |
3070 url::SchemeHostPort("https", request_.url.host(), 443))); | 3097 url::SchemeHostPort("https", request_.url.host(), 443))); |
3071 } | 3098 } |
3072 | 3099 |
3073 TEST_P(QuicNetworkTransactionTest, ZeroRTTWithNoHttpRace) { | 3100 TEST_P(QuicNetworkTransactionTest, ZeroRTTWithNoHttpRace) { |
3074 MockQuicData mock_quic_data; | 3101 MockQuicData mock_quic_data; |
3075 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( | 3102 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( |
3076 1, kClientDataStreamId1, true, true, | 3103 1, GetNthClientInitiatedStreamId(0), true, true, |
3077 GetRequestHeaders("GET", "https", "/"))); | 3104 GetRequestHeaders("GET", "https", "/"))); |
3078 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( | 3105 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( |
3079 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK"))); | 3106 1, GetNthClientInitiatedStreamId(0), false, false, |
3080 mock_quic_data.AddRead(ConstructServerDataPacket(2, kClientDataStreamId1, | 3107 GetResponseHeaders("200 OK"))); |
3081 false, true, 0, "hello!")); | 3108 mock_quic_data.AddRead(ConstructServerDataPacket( |
| 3109 2, GetNthClientInitiatedStreamId(0), false, true, 0, "hello!")); |
3082 mock_quic_data.AddWrite(ConstructClientAckPacket(2, 2, 1, 1)); | 3110 mock_quic_data.AddWrite(ConstructClientAckPacket(2, 2, 1, 1)); |
3083 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read | 3111 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read |
3084 mock_quic_data.AddRead(ASYNC, 0); // EOF | 3112 mock_quic_data.AddRead(ASYNC, 0); // EOF |
3085 mock_quic_data.AddSocketDataToFactory(&socket_factory_); | 3113 mock_quic_data.AddSocketDataToFactory(&socket_factory_); |
3086 | 3114 |
3087 // In order for a new QUIC session to be established via alternate-protocol | 3115 // In order for a new QUIC session to be established via alternate-protocol |
3088 // without racing an HTTP connection, we need the host resolution to happen | 3116 // without racing an HTTP connection, we need the host resolution to happen |
3089 // synchronously. | 3117 // synchronously. |
3090 host_resolver_.set_synchronous_mode(true); | 3118 host_resolver_.set_synchronous_mode(true); |
3091 host_resolver_.rules()->AddIPLiteralRule("mail.example.org", "192.168.0.1", | 3119 host_resolver_.rules()->AddIPLiteralRule("mail.example.org", "192.168.0.1", |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3137 AddQuicAlternateProtocolMapping(MockCryptoClientStream::ZERO_RTT); | 3165 AddQuicAlternateProtocolMapping(MockCryptoClientStream::ZERO_RTT); |
3138 SendRequestAndExpectHttpResponse("hello world"); | 3166 SendRequestAndExpectHttpResponse("hello world"); |
3139 } | 3167 } |
3140 | 3168 |
3141 TEST_P(QuicNetworkTransactionTest, ZeroRTTWithConfirmationRequired) { | 3169 TEST_P(QuicNetworkTransactionTest, ZeroRTTWithConfirmationRequired) { |
3142 MockQuicData mock_quic_data; | 3170 MockQuicData mock_quic_data; |
3143 QuicStreamOffset header_stream_offset = 0; | 3171 QuicStreamOffset header_stream_offset = 0; |
3144 mock_quic_data.AddWrite( | 3172 mock_quic_data.AddWrite( |
3145 ConstructInitialSettingsPacket(1, &header_stream_offset)); | 3173 ConstructInitialSettingsPacket(1, &header_stream_offset)); |
3146 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( | 3174 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( |
3147 2, kClientDataStreamId1, true, true, | 3175 2, GetNthClientInitiatedStreamId(0), true, true, |
3148 GetRequestHeaders("GET", "https", "/"), &header_stream_offset)); | 3176 GetRequestHeaders("GET", "https", "/"), &header_stream_offset)); |
3149 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( | 3177 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( |
3150 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK"))); | 3178 1, GetNthClientInitiatedStreamId(0), false, false, |
3151 mock_quic_data.AddRead(ConstructServerDataPacket(2, kClientDataStreamId1, | 3179 GetResponseHeaders("200 OK"))); |
3152 false, true, 0, "hello!")); | 3180 mock_quic_data.AddRead(ConstructServerDataPacket( |
| 3181 2, GetNthClientInitiatedStreamId(0), false, true, 0, "hello!")); |
3153 mock_quic_data.AddWrite(ConstructClientAckPacket(3, 2, 1, 1)); | 3182 mock_quic_data.AddWrite(ConstructClientAckPacket(3, 2, 1, 1)); |
3154 mock_quic_data.AddRead(SYNCHRONOUS, ERR_IO_PENDING); // No more data to read | 3183 mock_quic_data.AddRead(SYNCHRONOUS, ERR_IO_PENDING); // No more data to read |
3155 mock_quic_data.AddSocketDataToFactory(&socket_factory_); | 3184 mock_quic_data.AddSocketDataToFactory(&socket_factory_); |
3156 | 3185 |
3157 // The non-alternate protocol job needs to hang in order to guarantee that | 3186 // The non-alternate protocol job needs to hang in order to guarantee that |
3158 // the alternate-protocol job will "win". | 3187 // the alternate-protocol job will "win". |
3159 AddHangingNonAlternateProtocolSocketData(); | 3188 AddHangingNonAlternateProtocolSocketData(); |
3160 | 3189 |
3161 // In order for a new QUIC session to be established via alternate-protocol | 3190 // In order for a new QUIC session to be established via alternate-protocol |
3162 // without racing an HTTP connection, we need the host resolution to happen | 3191 // without racing an HTTP connection, we need the host resolution to happen |
(...skipping 26 matching lines...) Expand all Loading... |
3189 CheckResponseData(&trans, "hello!"); | 3218 CheckResponseData(&trans, "hello!"); |
3190 } | 3219 } |
3191 | 3220 |
3192 TEST_P(QuicNetworkTransactionTest, | 3221 TEST_P(QuicNetworkTransactionTest, |
3193 LogGranularQuicErrorCodeOnQuicProtocolErrorLocal) { | 3222 LogGranularQuicErrorCodeOnQuicProtocolErrorLocal) { |
3194 MockQuicData mock_quic_data; | 3223 MockQuicData mock_quic_data; |
3195 QuicStreamOffset header_stream_offset = 0; | 3224 QuicStreamOffset header_stream_offset = 0; |
3196 mock_quic_data.AddWrite( | 3225 mock_quic_data.AddWrite( |
3197 ConstructInitialSettingsPacket(1, &header_stream_offset)); | 3226 ConstructInitialSettingsPacket(1, &header_stream_offset)); |
3198 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( | 3227 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( |
3199 2, kClientDataStreamId1, true, true, | 3228 2, GetNthClientInitiatedStreamId(0), true, true, |
3200 GetRequestHeaders("GET", "https", "/"), &header_stream_offset)); | 3229 GetRequestHeaders("GET", "https", "/"), &header_stream_offset)); |
3201 // Read a close connection packet with | 3230 // Read a close connection packet with |
3202 // QuicErrorCode: QUIC_CRYPTO_VERSION_NOT_SUPPORTED from the peer. | 3231 // QuicErrorCode: QUIC_CRYPTO_VERSION_NOT_SUPPORTED from the peer. |
3203 mock_quic_data.AddRead(ConstructServerConnectionClosePacket(1)); | 3232 mock_quic_data.AddRead(ConstructServerConnectionClosePacket(1)); |
3204 mock_quic_data.AddSocketDataToFactory(&socket_factory_); | 3233 mock_quic_data.AddSocketDataToFactory(&socket_factory_); |
3205 | 3234 |
3206 // The non-alternate protocol job needs to hang in order to guarantee that | 3235 // The non-alternate protocol job needs to hang in order to guarantee that |
3207 // the alternate-protocol job will "win". | 3236 // the alternate-protocol job will "win". |
3208 AddHangingNonAlternateProtocolSocketData(); | 3237 AddHangingNonAlternateProtocolSocketData(); |
3209 | 3238 |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3242 EXPECT_EQ(QUIC_CRYPTO_VERSION_NOT_SUPPORTED, details.quic_connection_error); | 3271 EXPECT_EQ(QUIC_CRYPTO_VERSION_NOT_SUPPORTED, details.quic_connection_error); |
3243 } | 3272 } |
3244 | 3273 |
3245 TEST_P(QuicNetworkTransactionTest, | 3274 TEST_P(QuicNetworkTransactionTest, |
3246 LogGranularQuicErrorCodeOnQuicProtocolErrorRemote) { | 3275 LogGranularQuicErrorCodeOnQuicProtocolErrorRemote) { |
3247 MockQuicData mock_quic_data; | 3276 MockQuicData mock_quic_data; |
3248 QuicStreamOffset header_stream_offset = 0; | 3277 QuicStreamOffset header_stream_offset = 0; |
3249 mock_quic_data.AddWrite( | 3278 mock_quic_data.AddWrite( |
3250 ConstructInitialSettingsPacket(1, &header_stream_offset)); | 3279 ConstructInitialSettingsPacket(1, &header_stream_offset)); |
3251 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( | 3280 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( |
3252 2, kClientDataStreamId1, true, true, | 3281 2, GetNthClientInitiatedStreamId(0), true, true, |
3253 GetRequestHeaders("GET", "https", "/"), &header_stream_offset)); | 3282 GetRequestHeaders("GET", "https", "/"), &header_stream_offset)); |
3254 // Peer sending data from an non-existing stream causes this end to raise | 3283 // Peer sending data from an non-existing stream causes this end to raise |
3255 // error and close connection. | 3284 // error and close connection. |
3256 mock_quic_data.AddRead( | 3285 mock_quic_data.AddRead( |
3257 ConstructServerRstPacket(1, false, 99, QUIC_STREAM_LAST_ERROR)); | 3286 ConstructServerRstPacket(1, false, 99, QUIC_STREAM_LAST_ERROR)); |
3258 std::string quic_error_details = "Data for nonexistent stream"; | 3287 std::string quic_error_details = "Data for nonexistent stream"; |
3259 mock_quic_data.AddWrite(ConstructClientAckAndConnectionClosePacket( | 3288 mock_quic_data.AddWrite(ConstructClientAckAndConnectionClosePacket( |
3260 3, QuicTime::Delta::Zero(), 1, 1, 1, QUIC_INVALID_STREAM_ID, | 3289 3, QuicTime::Delta::Zero(), 1, 1, 1, QUIC_INVALID_STREAM_ID, |
3261 quic_error_details)); | 3290 quic_error_details)); |
3262 mock_quic_data.AddSocketDataToFactory(&socket_factory_); | 3291 mock_quic_data.AddSocketDataToFactory(&socket_factory_); |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3297 trans.PopulateNetErrorDetails(&details); | 3326 trans.PopulateNetErrorDetails(&details); |
3298 EXPECT_EQ(QUIC_INVALID_STREAM_ID, details.quic_connection_error); | 3327 EXPECT_EQ(QUIC_INVALID_STREAM_ID, details.quic_connection_error); |
3299 } | 3328 } |
3300 | 3329 |
3301 TEST_P(QuicNetworkTransactionTest, RstSteamErrorHandling) { | 3330 TEST_P(QuicNetworkTransactionTest, RstSteamErrorHandling) { |
3302 MockQuicData mock_quic_data; | 3331 MockQuicData mock_quic_data; |
3303 QuicStreamOffset header_stream_offset = 0; | 3332 QuicStreamOffset header_stream_offset = 0; |
3304 mock_quic_data.AddWrite( | 3333 mock_quic_data.AddWrite( |
3305 ConstructInitialSettingsPacket(1, &header_stream_offset)); | 3334 ConstructInitialSettingsPacket(1, &header_stream_offset)); |
3306 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( | 3335 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( |
3307 2, kClientDataStreamId1, true, true, | 3336 2, GetNthClientInitiatedStreamId(0), true, true, |
3308 GetRequestHeaders("GET", "https", "/"), &header_stream_offset)); | 3337 GetRequestHeaders("GET", "https", "/"), &header_stream_offset)); |
3309 // Read the response headers, then a RST_STREAM frame. | 3338 // Read the response headers, then a RST_STREAM frame. |
3310 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( | 3339 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( |
3311 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK"))); | 3340 1, GetNthClientInitiatedStreamId(0), false, false, |
| 3341 GetResponseHeaders("200 OK"))); |
3312 mock_quic_data.AddRead(ConstructServerRstPacket( | 3342 mock_quic_data.AddRead(ConstructServerRstPacket( |
3313 2, false, kClientDataStreamId1, QUIC_STREAM_CANCELLED)); | 3343 2, false, GetNthClientInitiatedStreamId(0), QUIC_STREAM_CANCELLED)); |
3314 mock_quic_data.AddWrite(ConstructClientAckPacket(3, 2, 1, 1)); | 3344 mock_quic_data.AddWrite(ConstructClientAckPacket(3, 2, 1, 1)); |
3315 mock_quic_data.AddRead(SYNCHRONOUS, ERR_IO_PENDING); // No more read data. | 3345 mock_quic_data.AddRead(SYNCHRONOUS, ERR_IO_PENDING); // No more read data. |
3316 mock_quic_data.AddSocketDataToFactory(&socket_factory_); | 3346 mock_quic_data.AddSocketDataToFactory(&socket_factory_); |
3317 | 3347 |
3318 // The non-alternate protocol job needs to hang in order to guarantee that | 3348 // The non-alternate protocol job needs to hang in order to guarantee that |
3319 // the alternate-protocol job will "win". | 3349 // the alternate-protocol job will "win". |
3320 AddHangingNonAlternateProtocolSocketData(); | 3350 AddHangingNonAlternateProtocolSocketData(); |
3321 | 3351 |
3322 // In order for a new QUIC session to be established via alternate-protocol | 3352 // In order for a new QUIC session to be established via alternate-protocol |
3323 // without racing an HTTP connection, we need the host resolution to happen | 3353 // without racing an HTTP connection, we need the host resolution to happen |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3359 std::string response_data; | 3389 std::string response_data; |
3360 ASSERT_EQ(ERR_QUIC_PROTOCOL_ERROR, ReadTransaction(&trans, &response_data)); | 3390 ASSERT_EQ(ERR_QUIC_PROTOCOL_ERROR, ReadTransaction(&trans, &response_data)); |
3361 } | 3391 } |
3362 | 3392 |
3363 TEST_P(QuicNetworkTransactionTest, RstSteamBeforeHeaders) { | 3393 TEST_P(QuicNetworkTransactionTest, RstSteamBeforeHeaders) { |
3364 MockQuicData mock_quic_data; | 3394 MockQuicData mock_quic_data; |
3365 QuicStreamOffset header_stream_offset = 0; | 3395 QuicStreamOffset header_stream_offset = 0; |
3366 mock_quic_data.AddWrite( | 3396 mock_quic_data.AddWrite( |
3367 ConstructInitialSettingsPacket(1, &header_stream_offset)); | 3397 ConstructInitialSettingsPacket(1, &header_stream_offset)); |
3368 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( | 3398 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( |
3369 2, kClientDataStreamId1, true, true, | 3399 2, GetNthClientInitiatedStreamId(0), true, true, |
3370 GetRequestHeaders("GET", "https", "/"), &header_stream_offset)); | 3400 GetRequestHeaders("GET", "https", "/"), &header_stream_offset)); |
3371 mock_quic_data.AddRead(ConstructServerRstPacket( | 3401 mock_quic_data.AddRead(ConstructServerRstPacket( |
3372 1, false, kClientDataStreamId1, QUIC_STREAM_CANCELLED)); | 3402 1, false, GetNthClientInitiatedStreamId(0), QUIC_STREAM_CANCELLED)); |
3373 mock_quic_data.AddRead(SYNCHRONOUS, ERR_IO_PENDING); // No more read data. | 3403 mock_quic_data.AddRead(SYNCHRONOUS, ERR_IO_PENDING); // No more read data. |
3374 mock_quic_data.AddSocketDataToFactory(&socket_factory_); | 3404 mock_quic_data.AddSocketDataToFactory(&socket_factory_); |
3375 | 3405 |
3376 // The non-alternate protocol job needs to hang in order to guarantee that | 3406 // The non-alternate protocol job needs to hang in order to guarantee that |
3377 // the alternate-protocol job will "win". | 3407 // the alternate-protocol job will "win". |
3378 AddHangingNonAlternateProtocolSocketData(); | 3408 AddHangingNonAlternateProtocolSocketData(); |
3379 | 3409 |
3380 // In order for a new QUIC session to be established via alternate-protocol | 3410 // In order for a new QUIC session to be established via alternate-protocol |
3381 // without racing an HTTP connection, we need the host resolution to happen | 3411 // without racing an HTTP connection, we need the host resolution to happen |
3382 // synchronously. Of course, even though QUIC *could* perform a 0-RTT | 3412 // synchronously. Of course, even though QUIC *could* perform a 0-RTT |
(...skipping 198 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3581 AddQuicAlternateProtocolMapping(MockCryptoClientStream::COLD_START); | 3611 AddQuicAlternateProtocolMapping(MockCryptoClientStream::COLD_START); |
3582 SendRequestAndExpectHttpResponse("hello from http"); | 3612 SendRequestAndExpectHttpResponse("hello from http"); |
3583 | 3613 |
3584 ExpectBrokenAlternateProtocolMapping(); | 3614 ExpectBrokenAlternateProtocolMapping(); |
3585 } | 3615 } |
3586 | 3616 |
3587 TEST_P(QuicNetworkTransactionTest, ConnectionCloseDuringConnect) { | 3617 TEST_P(QuicNetworkTransactionTest, ConnectionCloseDuringConnect) { |
3588 MockQuicData mock_quic_data; | 3618 MockQuicData mock_quic_data; |
3589 mock_quic_data.AddSynchronousRead(ConstructServerConnectionClosePacket(1)); | 3619 mock_quic_data.AddSynchronousRead(ConstructServerConnectionClosePacket(1)); |
3590 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( | 3620 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( |
3591 1, kClientDataStreamId1, true, true, | 3621 1, GetNthClientInitiatedStreamId(0), true, true, |
3592 GetRequestHeaders("GET", "https", "/"))); | 3622 GetRequestHeaders("GET", "https", "/"))); |
3593 mock_quic_data.AddWrite(ConstructClientAckPacket(2, 1, 1, 1)); | 3623 mock_quic_data.AddWrite(ConstructClientAckPacket(2, 1, 1, 1)); |
3594 mock_quic_data.AddSocketDataToFactory(&socket_factory_); | 3624 mock_quic_data.AddSocketDataToFactory(&socket_factory_); |
3595 | 3625 |
3596 // When the QUIC connection fails, we will try the request again over HTTP. | 3626 // When the QUIC connection fails, we will try the request again over HTTP. |
3597 MockRead http_reads[] = { | 3627 MockRead http_reads[] = { |
3598 MockRead("HTTP/1.1 200 OK\r\n"), MockRead(kQuicAlternativeServiceHeader), | 3628 MockRead("HTTP/1.1 200 OK\r\n"), MockRead(kQuicAlternativeServiceHeader), |
3599 MockRead("hello world"), | 3629 MockRead("hello world"), |
3600 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), | 3630 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), |
3601 MockRead(ASYNC, OK)}; | 3631 MockRead(ASYNC, OK)}; |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3647 TestAlternativeProxy(ERR_IO_PENDING); | 3677 TestAlternativeProxy(ERR_IO_PENDING); |
3648 } | 3678 } |
3649 TEST_P(QuicNetworkTransactionTest, BrokenAlternativeProxyAddressUnreachable) { | 3679 TEST_P(QuicNetworkTransactionTest, BrokenAlternativeProxyAddressUnreachable) { |
3650 TestAlternativeProxy(ERR_ADDRESS_UNREACHABLE); | 3680 TestAlternativeProxy(ERR_ADDRESS_UNREACHABLE); |
3651 } | 3681 } |
3652 | 3682 |
3653 TEST_P(QuicNetworkTransactionTest, ConnectionCloseDuringConnectProxy) { | 3683 TEST_P(QuicNetworkTransactionTest, ConnectionCloseDuringConnectProxy) { |
3654 MockQuicData mock_quic_data; | 3684 MockQuicData mock_quic_data; |
3655 mock_quic_data.AddSynchronousRead(ConstructServerConnectionClosePacket(1)); | 3685 mock_quic_data.AddSynchronousRead(ConstructServerConnectionClosePacket(1)); |
3656 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( | 3686 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( |
3657 1, kClientDataStreamId1, true, true, | 3687 1, GetNthClientInitiatedStreamId(0), true, true, |
3658 GetRequestHeaders("GET", "https", "/"))); | 3688 GetRequestHeaders("GET", "https", "/"))); |
3659 mock_quic_data.AddWrite(ConstructClientAckPacket(2, 1, 1, 1)); | 3689 mock_quic_data.AddWrite(ConstructClientAckPacket(2, 1, 1, 1)); |
3660 mock_quic_data.AddSocketDataToFactory(&socket_factory_); | 3690 mock_quic_data.AddSocketDataToFactory(&socket_factory_); |
3661 | 3691 |
3662 // When the QUIC connection fails, we will try the request again over HTTP. | 3692 // When the QUIC connection fails, we will try the request again over HTTP. |
3663 MockRead http_reads[] = { | 3693 MockRead http_reads[] = { |
3664 MockRead("HTTP/1.1 200 OK\r\n"), MockRead(kQuicAlternativeServiceHeader), | 3694 MockRead("HTTP/1.1 200 OK\r\n"), MockRead(kQuicAlternativeServiceHeader), |
3665 MockRead("hello world"), | 3695 MockRead("hello world"), |
3666 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), | 3696 MockRead(SYNCHRONOUS, ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ), |
3667 MockRead(ASYNC, OK)}; | 3697 MockRead(ASYNC, OK)}; |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3701 | 3731 |
3702 TEST_P(QuicNetworkTransactionTest, SecureResourceOverSecureQuic) { | 3732 TEST_P(QuicNetworkTransactionTest, SecureResourceOverSecureQuic) { |
3703 client_maker_.set_hostname("www.example.org"); | 3733 client_maker_.set_hostname("www.example.org"); |
3704 EXPECT_FALSE( | 3734 EXPECT_FALSE( |
3705 test_socket_performance_watcher_factory_.rtt_notification_received()); | 3735 test_socket_performance_watcher_factory_.rtt_notification_received()); |
3706 MockQuicData mock_quic_data; | 3736 MockQuicData mock_quic_data; |
3707 QuicStreamOffset header_stream_offset = 0; | 3737 QuicStreamOffset header_stream_offset = 0; |
3708 mock_quic_data.AddWrite( | 3738 mock_quic_data.AddWrite( |
3709 ConstructInitialSettingsPacket(1, &header_stream_offset)); | 3739 ConstructInitialSettingsPacket(1, &header_stream_offset)); |
3710 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( | 3740 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( |
3711 2, kClientDataStreamId1, true, true, | 3741 2, GetNthClientInitiatedStreamId(0), true, true, |
3712 GetRequestHeaders("GET", "https", "/"), &header_stream_offset)); | 3742 GetRequestHeaders("GET", "https", "/"), &header_stream_offset)); |
3713 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( | 3743 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( |
3714 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK"))); | 3744 1, GetNthClientInitiatedStreamId(0), false, false, |
3715 mock_quic_data.AddRead(ConstructServerDataPacket(2, kClientDataStreamId1, | 3745 GetResponseHeaders("200 OK"))); |
3716 false, true, 0, "hello!")); | 3746 mock_quic_data.AddRead(ConstructServerDataPacket( |
| 3747 2, GetNthClientInitiatedStreamId(0), false, true, 0, "hello!")); |
3717 mock_quic_data.AddWrite(ConstructClientAckPacket(3, 2, 1, 1)); | 3748 mock_quic_data.AddWrite(ConstructClientAckPacket(3, 2, 1, 1)); |
3718 mock_quic_data.AddRead(SYNCHRONOUS, ERR_IO_PENDING); // No more read data. | 3749 mock_quic_data.AddRead(SYNCHRONOUS, ERR_IO_PENDING); // No more read data. |
3719 mock_quic_data.AddSocketDataToFactory(&socket_factory_); | 3750 mock_quic_data.AddSocketDataToFactory(&socket_factory_); |
3720 | 3751 |
3721 request_.url = GURL("https://www.example.org:443"); | 3752 request_.url = GURL("https://www.example.org:443"); |
3722 AddHangingNonAlternateProtocolSocketData(); | 3753 AddHangingNonAlternateProtocolSocketData(); |
3723 CreateSession(); | 3754 CreateSession(); |
3724 AddQuicAlternateProtocolMapping(MockCryptoClientStream::CONFIRM_HANDSHAKE); | 3755 AddQuicAlternateProtocolMapping(MockCryptoClientStream::CONFIRM_HANDSHAKE); |
3725 SendRequestAndExpectQuicResponse("hello!"); | 3756 SendRequestAndExpectQuicResponse("hello!"); |
3726 EXPECT_TRUE( | 3757 EXPECT_TRUE( |
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3815 | 3846 |
3816 params_.origins_to_force_quic_on.insert( | 3847 params_.origins_to_force_quic_on.insert( |
3817 HostPortPair::FromString("mail.example.org:443")); | 3848 HostPortPair::FromString("mail.example.org:443")); |
3818 params_.quic_migrate_sessions_on_network_change = true; | 3849 params_.quic_migrate_sessions_on_network_change = true; |
3819 | 3850 |
3820 MockQuicData socket_data; | 3851 MockQuicData socket_data; |
3821 socket_data.AddRead(SYNCHRONOUS, ERR_IO_PENDING); | 3852 socket_data.AddRead(SYNCHRONOUS, ERR_IO_PENDING); |
3822 QuicStreamOffset offset = 0; | 3853 QuicStreamOffset offset = 0; |
3823 socket_data.AddWrite(ConstructInitialSettingsPacket(1, &offset)); | 3854 socket_data.AddWrite(ConstructInitialSettingsPacket(1, &offset)); |
3824 socket_data.AddWrite(ConstructClientRequestHeadersPacket( | 3855 socket_data.AddWrite(ConstructClientRequestHeadersPacket( |
3825 2, kClientDataStreamId1, true, false, | 3856 2, GetNthClientInitiatedStreamId(0), true, false, |
3826 GetRequestHeaders("POST", "https", "/"), &offset)); | 3857 GetRequestHeaders("POST", "https", "/"), &offset)); |
3827 socket_data.AddWrite(SYNCHRONOUS, ERR_FAILED); | 3858 socket_data.AddWrite(SYNCHRONOUS, ERR_FAILED); |
3828 socket_data.AddSocketDataToFactory(&socket_factory_); | 3859 socket_data.AddSocketDataToFactory(&socket_factory_); |
3829 | 3860 |
3830 MockQuicData socket_data2; | 3861 MockQuicData socket_data2; |
3831 socket_data2.AddConnect(SYNCHRONOUS, ERR_ADDRESS_INVALID); | 3862 socket_data2.AddConnect(SYNCHRONOUS, ERR_ADDRESS_INVALID); |
3832 socket_data2.AddSocketDataToFactory(&socket_factory_); | 3863 socket_data2.AddSocketDataToFactory(&socket_factory_); |
3833 | 3864 |
3834 // The non-alternate protocol job needs to hang in order to guarantee that | 3865 // The non-alternate protocol job needs to hang in order to guarantee that |
3835 // the alternate-protocol job will "win". | 3866 // the alternate-protocol job will "win". |
(...skipping 23 matching lines...) Expand all Loading... |
3859 // Adds coverage to catch regression such as https://crbug.com/622043 | 3890 // Adds coverage to catch regression such as https://crbug.com/622043 |
3860 TEST_P(QuicNetworkTransactionTest, QuicServerPush) { | 3891 TEST_P(QuicNetworkTransactionTest, QuicServerPush) { |
3861 params_.origins_to_force_quic_on.insert( | 3892 params_.origins_to_force_quic_on.insert( |
3862 HostPortPair::FromString("mail.example.org:443")); | 3893 HostPortPair::FromString("mail.example.org:443")); |
3863 | 3894 |
3864 MockQuicData mock_quic_data; | 3895 MockQuicData mock_quic_data; |
3865 QuicStreamOffset header_stream_offset = 0; | 3896 QuicStreamOffset header_stream_offset = 0; |
3866 mock_quic_data.AddWrite( | 3897 mock_quic_data.AddWrite( |
3867 ConstructInitialSettingsPacket(1, &header_stream_offset)); | 3898 ConstructInitialSettingsPacket(1, &header_stream_offset)); |
3868 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( | 3899 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( |
3869 2, kClientDataStreamId1, true, true, | 3900 2, GetNthClientInitiatedStreamId(0), true, true, |
3870 GetRequestHeaders("GET", "https", "/"), &header_stream_offset)); | 3901 GetRequestHeaders("GET", "https", "/"), &header_stream_offset)); |
3871 QuicStreamOffset server_header_offset = 0; | 3902 QuicStreamOffset server_header_offset = 0; |
3872 mock_quic_data.AddRead(ConstructServerPushPromisePacket( | 3903 mock_quic_data.AddRead(ConstructServerPushPromisePacket( |
3873 1, kClientDataStreamId1, kServerDataStreamId1, false, | 3904 1, GetNthClientInitiatedStreamId(0), GetNthServerInitiatedStreamId(0), |
3874 GetRequestHeaders("GET", "https", "/pushed.jpg"), &server_header_offset, | 3905 false, GetRequestHeaders("GET", "https", "/pushed.jpg"), |
3875 &server_maker_)); | 3906 &server_header_offset, &server_maker_)); |
3876 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( | 3907 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( |
3877 2, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK"), | 3908 2, GetNthClientInitiatedStreamId(0), false, false, |
3878 &server_header_offset)); | 3909 GetResponseHeaders("200 OK"), &server_header_offset)); |
3879 mock_quic_data.AddWrite(ConstructClientAckPacket(3, 2, 1, 1)); | 3910 mock_quic_data.AddWrite(ConstructClientAckPacket(3, 2, 1, 1)); |
3880 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( | 3911 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( |
3881 3, kServerDataStreamId1, false, false, GetResponseHeaders("200 OK"), | 3912 3, GetNthServerInitiatedStreamId(0), false, false, |
3882 &server_header_offset)); | 3913 GetResponseHeaders("200 OK"), &server_header_offset)); |
3883 mock_quic_data.AddRead(ConstructServerDataPacket(4, kClientDataStreamId1, | 3914 mock_quic_data.AddRead(ConstructServerDataPacket( |
3884 false, true, 0, "hello!")); | 3915 4, GetNthClientInitiatedStreamId(0), false, true, 0, "hello!")); |
3885 mock_quic_data.AddWrite(ConstructClientAckPacket(4, 4, 3, 1)); | 3916 mock_quic_data.AddWrite(ConstructClientAckPacket(4, 4, 3, 1)); |
3886 mock_quic_data.AddRead(ConstructServerDataPacket( | 3917 mock_quic_data.AddRead(ConstructServerDataPacket( |
3887 5, kServerDataStreamId1, false, true, 0, "and hello!")); | 3918 5, GetNthServerInitiatedStreamId(0), false, true, 0, "and hello!")); |
3888 mock_quic_data.AddWrite(ConstructClientAckAndRstPacket( | 3919 mock_quic_data.AddWrite(ConstructClientAckAndRstPacket( |
3889 5, kServerDataStreamId1, QUIC_RST_ACKNOWLEDGEMENT, 5, 5, 1)); | 3920 5, GetNthServerInitiatedStreamId(0), QUIC_RST_ACKNOWLEDGEMENT, 5, 5, 1)); |
3890 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read | 3921 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read |
3891 mock_quic_data.AddRead(ASYNC, 0); // EOF | 3922 mock_quic_data.AddRead(ASYNC, 0); // EOF |
3892 mock_quic_data.AddSocketDataToFactory(&socket_factory_); | 3923 mock_quic_data.AddSocketDataToFactory(&socket_factory_); |
3893 | 3924 |
3894 // The non-alternate protocol job needs to hang in order to guarantee that | 3925 // The non-alternate protocol job needs to hang in order to guarantee that |
3895 // the alternate-protocol job will "win". | 3926 // the alternate-protocol job will "win". |
3896 AddHangingNonAlternateProtocolSocketData(); | 3927 AddHangingNonAlternateProtocolSocketData(); |
3897 | 3928 |
3898 CreateSession(); | 3929 CreateSession(); |
3899 | 3930 |
(...skipping 18 matching lines...) Expand all Loading... |
3918 TEST_P(QuicNetworkTransactionTest, QuicForceHolBlocking) { | 3949 TEST_P(QuicNetworkTransactionTest, QuicForceHolBlocking) { |
3919 params_.quic_force_hol_blocking = true; | 3950 params_.quic_force_hol_blocking = true; |
3920 params_.origins_to_force_quic_on.insert( | 3951 params_.origins_to_force_quic_on.insert( |
3921 HostPortPair::FromString("mail.example.org:443")); | 3952 HostPortPair::FromString("mail.example.org:443")); |
3922 | 3953 |
3923 MockQuicData mock_quic_data; | 3954 MockQuicData mock_quic_data; |
3924 | 3955 |
3925 QuicStreamOffset offset = 0; | 3956 QuicStreamOffset offset = 0; |
3926 mock_quic_data.AddWrite(ConstructInitialSettingsPacket(1, &offset)); | 3957 mock_quic_data.AddWrite(ConstructInitialSettingsPacket(1, &offset)); |
3927 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( | 3958 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( |
3928 2, kClientDataStreamId1, true, false, | 3959 2, GetNthClientInitiatedStreamId(0), true, false, |
3929 GetRequestHeaders("POST", "https", "/"), &offset)); | 3960 GetRequestHeaders("POST", "https", "/"), &offset)); |
3930 | 3961 |
3931 std::unique_ptr<QuicEncryptedPacket> packet; | 3962 std::unique_ptr<QuicEncryptedPacket> packet; |
3932 if (version_ == QUIC_VERSION_36) { | 3963 if (version_ == QUIC_VERSION_36) { |
3933 packet = ConstructClientForceHolDataPacket(3, kClientDataStreamId1, true, | 3964 packet = ConstructClientForceHolDataPacket( |
3934 true, &offset, "1"); | 3965 3, GetNthClientInitiatedStreamId(0), true, true, &offset, "1"); |
3935 } else { | 3966 } else { |
3936 packet = | 3967 packet = ConstructClientDataPacket(3, GetNthClientInitiatedStreamId(0), |
3937 ConstructClientDataPacket(3, kClientDataStreamId1, true, true, 0, "1"); | 3968 true, true, 0, "1"); |
3938 } | 3969 } |
3939 mock_quic_data.AddWrite(std::move(packet)); | 3970 mock_quic_data.AddWrite(std::move(packet)); |
3940 | 3971 |
3941 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( | 3972 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( |
3942 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK"))); | 3973 1, GetNthClientInitiatedStreamId(0), false, false, |
| 3974 GetResponseHeaders("200 OK"))); |
3943 | 3975 |
3944 mock_quic_data.AddRead(ConstructServerDataPacket(2, kClientDataStreamId1, | 3976 mock_quic_data.AddRead(ConstructServerDataPacket( |
3945 false, true, 0, "hello!")); | 3977 2, GetNthClientInitiatedStreamId(0), false, true, 0, "hello!")); |
3946 | 3978 |
3947 mock_quic_data.AddWrite(ConstructClientAckPacket(4, 2, 1, 1)); | 3979 mock_quic_data.AddWrite(ConstructClientAckPacket(4, 2, 1, 1)); |
3948 | 3980 |
3949 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read | 3981 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read |
3950 mock_quic_data.AddRead(ASYNC, 0); // EOF | 3982 mock_quic_data.AddRead(ASYNC, 0); // EOF |
3951 mock_quic_data.AddSocketDataToFactory(&socket_factory_); | 3983 mock_quic_data.AddSocketDataToFactory(&socket_factory_); |
3952 | 3984 |
3953 // The non-alternate protocol job needs to hang in order to guarantee that | 3985 // The non-alternate protocol job needs to hang in order to guarantee that |
3954 // the alternate-protocol job will "win". | 3986 // the alternate-protocol job will "win". |
3955 AddHangingNonAlternateProtocolSocketData(); | 3987 AddHangingNonAlternateProtocolSocketData(); |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4002 HostPortPair::FromString("mail.example.org:443")); | 4034 HostPortPair::FromString("mail.example.org:443")); |
4003 | 4035 |
4004 MockQuicData mock_quic_data; | 4036 MockQuicData mock_quic_data; |
4005 QuicStreamOffset header_stream_offset = 0; | 4037 QuicStreamOffset header_stream_offset = 0; |
4006 mock_quic_data.AddWrite( | 4038 mock_quic_data.AddWrite( |
4007 ConstructInitialSettingsPacket(1, &header_stream_offset)); | 4039 ConstructInitialSettingsPacket(1, &header_stream_offset)); |
4008 SpdyHeaderBlock headers(GetRequestHeaders("GET", "https", "/")); | 4040 SpdyHeaderBlock headers(GetRequestHeaders("GET", "https", "/")); |
4009 headers["user-agent"] = ""; | 4041 headers["user-agent"] = ""; |
4010 headers["accept-encoding"] = "gzip, deflate"; | 4042 headers["accept-encoding"] = "gzip, deflate"; |
4011 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( | 4043 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( |
4012 2, kClientDataStreamId1, true, true, std::move(headers), | 4044 2, GetNthClientInitiatedStreamId(0), true, true, std::move(headers), |
4013 &header_stream_offset)); | 4045 &header_stream_offset)); |
4014 | 4046 |
4015 QuicStreamOffset expected_raw_header_response_size = 0; | 4047 QuicStreamOffset expected_raw_header_response_size = 0; |
4016 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( | 4048 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( |
4017 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK"), | 4049 1, GetNthClientInitiatedStreamId(0), false, false, |
4018 &expected_raw_header_response_size)); | 4050 GetResponseHeaders("200 OK"), &expected_raw_header_response_size)); |
4019 | 4051 |
4020 mock_quic_data.AddRead(ConstructServerDataPacket( | 4052 mock_quic_data.AddRead( |
4021 2, kClientDataStreamId1, false, true, 0, "Main Resource Data")); | 4053 ConstructServerDataPacket(2, GetNthClientInitiatedStreamId(0), false, |
| 4054 true, 0, "Main Resource Data")); |
4022 mock_quic_data.AddWrite(ConstructClientAckPacket(3, 2, 1, 1)); | 4055 mock_quic_data.AddWrite(ConstructClientAckPacket(3, 2, 1, 1)); |
4023 | 4056 |
4024 mock_quic_data.AddRead(ASYNC, 0); // EOF | 4057 mock_quic_data.AddRead(ASYNC, 0); // EOF |
4025 | 4058 |
4026 CreateSession(); | 4059 CreateSession(); |
4027 | 4060 |
4028 TestDelegate delegate; | 4061 TestDelegate delegate; |
4029 QuicURLRequestContext quic_url_request_context(std::move(session_), | 4062 QuicURLRequestContext quic_url_request_context(std::move(session_), |
4030 &socket_factory_); | 4063 &socket_factory_); |
4031 | 4064 |
(...skipping 28 matching lines...) Expand all Loading... |
4060 HostPortPair::FromString("mail.example.org:443")); | 4093 HostPortPair::FromString("mail.example.org:443")); |
4061 | 4094 |
4062 MockQuicData mock_quic_data; | 4095 MockQuicData mock_quic_data; |
4063 QuicStreamOffset header_stream_offset = 0; | 4096 QuicStreamOffset header_stream_offset = 0; |
4064 mock_quic_data.AddWrite( | 4097 mock_quic_data.AddWrite( |
4065 ConstructInitialSettingsPacket(1, &header_stream_offset)); | 4098 ConstructInitialSettingsPacket(1, &header_stream_offset)); |
4066 SpdyHeaderBlock headers(GetRequestHeaders("GET", "https", "/")); | 4099 SpdyHeaderBlock headers(GetRequestHeaders("GET", "https", "/")); |
4067 headers["user-agent"] = ""; | 4100 headers["user-agent"] = ""; |
4068 headers["accept-encoding"] = "gzip, deflate"; | 4101 headers["accept-encoding"] = "gzip, deflate"; |
4069 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( | 4102 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( |
4070 2, kClientDataStreamId1, true, true, std::move(headers), | 4103 2, GetNthClientInitiatedStreamId(0), true, true, std::move(headers), |
4071 &header_stream_offset)); | 4104 &header_stream_offset)); |
4072 | 4105 |
4073 QuicStreamOffset server_header_offset = 0; | 4106 QuicStreamOffset server_header_offset = 0; |
4074 QuicStreamOffset expected_raw_header_response_size = 0; | 4107 QuicStreamOffset expected_raw_header_response_size = 0; |
4075 | 4108 |
4076 mock_quic_data.AddRead(ConstructServerPushPromisePacket( | 4109 mock_quic_data.AddRead(ConstructServerPushPromisePacket( |
4077 1, kClientDataStreamId1, kServerDataStreamId1, false, | 4110 1, GetNthClientInitiatedStreamId(0), GetNthServerInitiatedStreamId(0), |
4078 GetRequestHeaders("GET", "https", "/pushed.jpg"), &server_header_offset, | 4111 false, GetRequestHeaders("GET", "https", "/pushed.jpg"), |
4079 &server_maker_)); | 4112 &server_header_offset, &server_maker_)); |
4080 | 4113 |
4081 expected_raw_header_response_size = server_header_offset; | 4114 expected_raw_header_response_size = server_header_offset; |
4082 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( | 4115 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( |
4083 2, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK"), | 4116 2, GetNthClientInitiatedStreamId(0), false, false, |
4084 &server_header_offset)); | 4117 GetResponseHeaders("200 OK"), &server_header_offset)); |
4085 expected_raw_header_response_size = | 4118 expected_raw_header_response_size = |
4086 server_header_offset - expected_raw_header_response_size; | 4119 server_header_offset - expected_raw_header_response_size; |
4087 | 4120 |
4088 mock_quic_data.AddWrite(ConstructClientAckPacket(3, 2, 1, 1)); | 4121 mock_quic_data.AddWrite(ConstructClientAckPacket(3, 2, 1, 1)); |
4089 | 4122 |
4090 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( | 4123 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( |
4091 3, kServerDataStreamId1, false, false, GetResponseHeaders("200 OK"), | 4124 3, GetNthServerInitiatedStreamId(0), false, false, |
4092 &server_header_offset)); | 4125 GetResponseHeaders("200 OK"), &server_header_offset)); |
4093 mock_quic_data.AddRead(ConstructServerDataPacket( | 4126 mock_quic_data.AddRead( |
4094 4, kServerDataStreamId1, false, true, 0, "Pushed Resource Data")); | 4127 ConstructServerDataPacket(4, GetNthServerInitiatedStreamId(0), false, |
| 4128 true, 0, "Pushed Resource Data")); |
4095 | 4129 |
4096 mock_quic_data.AddWrite(ConstructClientAckPacket(4, 4, 3, 1)); | 4130 mock_quic_data.AddWrite(ConstructClientAckPacket(4, 4, 3, 1)); |
4097 mock_quic_data.AddRead(ConstructServerDataPacket( | 4131 mock_quic_data.AddRead( |
4098 5, kClientDataStreamId1, false, true, 0, "Main Resource Data")); | 4132 ConstructServerDataPacket(5, GetNthClientInitiatedStreamId(0), false, |
| 4133 true, 0, "Main Resource Data")); |
4099 | 4134 |
4100 mock_quic_data.AddRead(ConstructServerConnectionClosePacket(6)); | 4135 mock_quic_data.AddRead(ConstructServerConnectionClosePacket(6)); |
4101 | 4136 |
4102 CreateSession(); | 4137 CreateSession(); |
4103 | 4138 |
4104 TestDelegate delegate; | 4139 TestDelegate delegate; |
4105 QuicURLRequestContext quic_url_request_context(std::move(session_), | 4140 QuicURLRequestContext quic_url_request_context(std::move(session_), |
4106 &socket_factory_); | 4141 &socket_factory_); |
4107 | 4142 |
4108 mock_quic_data.AddSocketDataToFactory( | 4143 mock_quic_data.AddSocketDataToFactory( |
(...skipping 215 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4324 ASSERT_TRUE(response != nullptr); | 4359 ASSERT_TRUE(response != nullptr); |
4325 ASSERT_TRUE(response->headers.get() != nullptr); | 4360 ASSERT_TRUE(response->headers.get() != nullptr); |
4326 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); | 4361 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); |
4327 EXPECT_TRUE(response->was_fetched_via_spdy); | 4362 EXPECT_TRUE(response->was_fetched_via_spdy); |
4328 EXPECT_TRUE(response->was_alpn_negotiated); | 4363 EXPECT_TRUE(response->was_alpn_negotiated); |
4329 EXPECT_EQ(QuicHttpStream::ConnectionInfoFromQuicVersion(version_), | 4364 EXPECT_EQ(QuicHttpStream::ConnectionInfoFromQuicVersion(version_), |
4330 response->connection_info); | 4365 response->connection_info); |
4331 EXPECT_EQ(443, response->socket_address.port()); | 4366 EXPECT_EQ(443, response->socket_address.port()); |
4332 } | 4367 } |
4333 | 4368 |
| 4369 QuicStreamId GetNthClientInitiatedStreamId(int n) { |
| 4370 return test::GetNthClientInitiatedStreamId(version_, n); |
| 4371 } |
| 4372 |
4334 MockClock clock_; | 4373 MockClock clock_; |
4335 QuicVersion version_; | 4374 QuicVersion version_; |
4336 DestinationType destination_type_; | 4375 DestinationType destination_type_; |
4337 std::string origin1_; | 4376 std::string origin1_; |
4338 std::string origin2_; | 4377 std::string origin2_; |
4339 std::unique_ptr<HttpNetworkSession> session_; | 4378 std::unique_ptr<HttpNetworkSession> session_; |
4340 MockClientSocketFactory socket_factory_; | 4379 MockClientSocketFactory socket_factory_; |
4341 MockHostResolver host_resolver_; | 4380 MockHostResolver host_resolver_; |
4342 MockCertVerifier cert_verifier_; | 4381 MockCertVerifier cert_verifier_; |
4343 TransportSecurityState transport_security_state_; | 4382 TransportSecurityState transport_security_state_; |
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4430 QuicTestPacketMaker server_maker1(version_, 0, &clock_, origin1_, | 4469 QuicTestPacketMaker server_maker1(version_, 0, &clock_, origin1_, |
4431 Perspective::IS_SERVER); | 4470 Perspective::IS_SERVER); |
4432 | 4471 |
4433 QuicStreamOffset request_header_offset(0); | 4472 QuicStreamOffset request_header_offset(0); |
4434 QuicStreamOffset response_header_offset(0); | 4473 QuicStreamOffset response_header_offset(0); |
4435 | 4474 |
4436 MockQuicData mock_quic_data; | 4475 MockQuicData mock_quic_data; |
4437 mock_quic_data.AddWrite(ConstructInitialSettingsPacket( | 4476 mock_quic_data.AddWrite(ConstructInitialSettingsPacket( |
4438 1, &request_header_offset, &client_maker1)); | 4477 1, &request_header_offset, &client_maker1)); |
4439 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( | 4478 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( |
4440 2, kClientDataStreamId1, true, &request_header_offset, &client_maker1)); | 4479 2, GetNthClientInitiatedStreamId(0), true, &request_header_offset, |
| 4480 &client_maker1)); |
4441 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( | 4481 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( |
4442 1, kClientDataStreamId1, &response_header_offset, &server_maker1)); | 4482 1, GetNthClientInitiatedStreamId(0), &response_header_offset, |
4443 mock_quic_data.AddRead( | 4483 &server_maker1)); |
4444 ConstructServerDataPacket(2, kClientDataStreamId1, &server_maker1)); | 4484 mock_quic_data.AddRead(ConstructServerDataPacket( |
| 4485 2, GetNthClientInitiatedStreamId(0), &server_maker1)); |
4445 mock_quic_data.AddWrite(ConstructClientAckPacket(3, 2, 1, 1, &client_maker1)); | 4486 mock_quic_data.AddWrite(ConstructClientAckPacket(3, 2, 1, 1, &client_maker1)); |
4446 | 4487 |
4447 QuicTestPacketMaker client_maker2(version_, 0, &clock_, origin2_, | 4488 QuicTestPacketMaker client_maker2(version_, 0, &clock_, origin2_, |
4448 Perspective::IS_CLIENT); | 4489 Perspective::IS_CLIENT); |
4449 QuicTestPacketMaker server_maker2(version_, 0, &clock_, origin2_, | 4490 QuicTestPacketMaker server_maker2(version_, 0, &clock_, origin2_, |
4450 Perspective::IS_SERVER); | 4491 Perspective::IS_SERVER); |
4451 | 4492 |
4452 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( | 4493 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( |
4453 4, kClientDataStreamId2, false, &request_header_offset, &client_maker2)); | 4494 4, GetNthClientInitiatedStreamId(1), false, &request_header_offset, |
| 4495 &client_maker2)); |
4454 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( | 4496 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( |
4455 3, kClientDataStreamId2, &response_header_offset, &server_maker2)); | 4497 3, GetNthClientInitiatedStreamId(1), &response_header_offset, |
4456 mock_quic_data.AddRead( | 4498 &server_maker2)); |
4457 ConstructServerDataPacket(4, kClientDataStreamId2, &server_maker2)); | 4499 mock_quic_data.AddRead(ConstructServerDataPacket( |
| 4500 4, GetNthClientInitiatedStreamId(1), &server_maker2)); |
4458 mock_quic_data.AddWrite(ConstructClientAckPacket(5, 4, 3, 1, &client_maker2)); | 4501 mock_quic_data.AddWrite(ConstructClientAckPacket(5, 4, 3, 1, &client_maker2)); |
4459 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read | 4502 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read |
4460 mock_quic_data.AddRead(ASYNC, 0); // EOF | 4503 mock_quic_data.AddRead(ASYNC, 0); // EOF |
4461 | 4504 |
4462 mock_quic_data.AddSocketDataToFactory(&socket_factory_); | 4505 mock_quic_data.AddSocketDataToFactory(&socket_factory_); |
4463 | 4506 |
4464 AddHangingSocketData(); | 4507 AddHangingSocketData(); |
4465 AddHangingSocketData(); | 4508 AddHangingSocketData(); |
4466 | 4509 |
4467 SendRequestAndExpectQuicResponse(origin1_); | 4510 SendRequestAndExpectQuicResponse(origin1_); |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4506 QuicTestPacketMaker client_maker1(version_, 0, &clock_, origin1_, | 4549 QuicTestPacketMaker client_maker1(version_, 0, &clock_, origin1_, |
4507 Perspective::IS_CLIENT); | 4550 Perspective::IS_CLIENT); |
4508 QuicTestPacketMaker server_maker1(version_, 0, &clock_, origin1_, | 4551 QuicTestPacketMaker server_maker1(version_, 0, &clock_, origin1_, |
4509 Perspective::IS_SERVER); | 4552 Perspective::IS_SERVER); |
4510 | 4553 |
4511 MockQuicData mock_quic_data1; | 4554 MockQuicData mock_quic_data1; |
4512 QuicStreamOffset header_stream_offset1 = 0; | 4555 QuicStreamOffset header_stream_offset1 = 0; |
4513 mock_quic_data1.AddWrite(ConstructInitialSettingsPacket( | 4556 mock_quic_data1.AddWrite(ConstructInitialSettingsPacket( |
4514 1, &header_stream_offset1, &client_maker1)); | 4557 1, &header_stream_offset1, &client_maker1)); |
4515 mock_quic_data1.AddWrite(ConstructClientRequestHeadersPacket( | 4558 mock_quic_data1.AddWrite(ConstructClientRequestHeadersPacket( |
4516 2, kClientDataStreamId1, true, &header_stream_offset1, &client_maker1)); | 4559 2, GetNthClientInitiatedStreamId(0), true, &header_stream_offset1, |
| 4560 &client_maker1)); |
4517 mock_quic_data1.AddRead(ConstructServerResponseHeadersPacket( | 4561 mock_quic_data1.AddRead(ConstructServerResponseHeadersPacket( |
4518 1, kClientDataStreamId1, &server_maker1)); | 4562 1, GetNthClientInitiatedStreamId(0), &server_maker1)); |
4519 mock_quic_data1.AddRead( | 4563 mock_quic_data1.AddRead(ConstructServerDataPacket( |
4520 ConstructServerDataPacket(2, kClientDataStreamId1, &server_maker1)); | 4564 2, GetNthClientInitiatedStreamId(0), &server_maker1)); |
4521 mock_quic_data1.AddWrite( | 4565 mock_quic_data1.AddWrite( |
4522 ConstructClientAckPacket(3, 2, 1, 1, &client_maker1)); | 4566 ConstructClientAckPacket(3, 2, 1, 1, &client_maker1)); |
4523 mock_quic_data1.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read | 4567 mock_quic_data1.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read |
4524 mock_quic_data1.AddRead(ASYNC, 0); // EOF | 4568 mock_quic_data1.AddRead(ASYNC, 0); // EOF |
4525 | 4569 |
4526 mock_quic_data1.AddSocketDataToFactory(&socket_factory_); | 4570 mock_quic_data1.AddSocketDataToFactory(&socket_factory_); |
4527 | 4571 |
4528 AddHangingSocketData(); | 4572 AddHangingSocketData(); |
4529 | 4573 |
4530 QuicTestPacketMaker client_maker2(version_, 0, &clock_, origin2_, | 4574 QuicTestPacketMaker client_maker2(version_, 0, &clock_, origin2_, |
4531 Perspective::IS_CLIENT); | 4575 Perspective::IS_CLIENT); |
4532 QuicTestPacketMaker server_maker2(version_, 0, &clock_, origin2_, | 4576 QuicTestPacketMaker server_maker2(version_, 0, &clock_, origin2_, |
4533 Perspective::IS_SERVER); | 4577 Perspective::IS_SERVER); |
4534 | 4578 |
4535 MockQuicData mock_quic_data2; | 4579 MockQuicData mock_quic_data2; |
4536 QuicStreamOffset header_stream_offset2 = 0; | 4580 QuicStreamOffset header_stream_offset2 = 0; |
4537 mock_quic_data2.AddWrite(ConstructInitialSettingsPacket( | 4581 mock_quic_data2.AddWrite(ConstructInitialSettingsPacket( |
4538 1, &header_stream_offset2, &client_maker2)); | 4582 1, &header_stream_offset2, &client_maker2)); |
4539 mock_quic_data2.AddWrite(ConstructClientRequestHeadersPacket( | 4583 mock_quic_data2.AddWrite(ConstructClientRequestHeadersPacket( |
4540 2, kClientDataStreamId1, true, &header_stream_offset2, &client_maker2)); | 4584 2, GetNthClientInitiatedStreamId(0), true, &header_stream_offset2, |
| 4585 &client_maker2)); |
4541 mock_quic_data2.AddRead(ConstructServerResponseHeadersPacket( | 4586 mock_quic_data2.AddRead(ConstructServerResponseHeadersPacket( |
4542 1, kClientDataStreamId1, &server_maker2)); | 4587 1, GetNthClientInitiatedStreamId(0), &server_maker2)); |
4543 mock_quic_data2.AddRead( | 4588 mock_quic_data2.AddRead(ConstructServerDataPacket( |
4544 ConstructServerDataPacket(2, kClientDataStreamId1, &server_maker2)); | 4589 2, GetNthClientInitiatedStreamId(0), &server_maker2)); |
4545 mock_quic_data2.AddWrite( | 4590 mock_quic_data2.AddWrite( |
4546 ConstructClientAckPacket(3, 2, 1, 1, &client_maker2)); | 4591 ConstructClientAckPacket(3, 2, 1, 1, &client_maker2)); |
4547 mock_quic_data2.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read | 4592 mock_quic_data2.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read |
4548 mock_quic_data2.AddRead(ASYNC, 0); // EOF | 4593 mock_quic_data2.AddRead(ASYNC, 0); // EOF |
4549 | 4594 |
4550 mock_quic_data2.AddSocketDataToFactory(&socket_factory_); | 4595 mock_quic_data2.AddSocketDataToFactory(&socket_factory_); |
4551 | 4596 |
4552 AddHangingSocketData(); | 4597 AddHangingSocketData(); |
4553 | 4598 |
4554 SendRequestAndExpectQuicResponse(origin1_); | 4599 SendRequestAndExpectQuicResponse(origin1_); |
4555 SendRequestAndExpectQuicResponse(origin2_); | 4600 SendRequestAndExpectQuicResponse(origin2_); |
4556 | 4601 |
4557 EXPECT_TRUE(AllDataConsumed()); | 4602 EXPECT_TRUE(AllDataConsumed()); |
4558 } | 4603 } |
4559 | 4604 |
4560 // crbug.com/705109 - this confirms that matching request with a body | 4605 // crbug.com/705109 - this confirms that matching request with a body |
4561 // triggers a crash (pre-fix). | 4606 // triggers a crash (pre-fix). |
4562 TEST_P(QuicNetworkTransactionTest, QuicServerPushMatchesRequestWithBody) { | 4607 TEST_P(QuicNetworkTransactionTest, QuicServerPushMatchesRequestWithBody) { |
4563 params_.origins_to_force_quic_on.insert( | 4608 params_.origins_to_force_quic_on.insert( |
4564 HostPortPair::FromString("mail.example.org:443")); | 4609 HostPortPair::FromString("mail.example.org:443")); |
4565 | 4610 |
4566 MockQuicData mock_quic_data; | 4611 MockQuicData mock_quic_data; |
4567 QuicStreamOffset header_stream_offset = 0; | 4612 QuicStreamOffset header_stream_offset = 0; |
4568 mock_quic_data.AddWrite( | 4613 mock_quic_data.AddWrite( |
4569 ConstructInitialSettingsPacket(1, &header_stream_offset)); | 4614 ConstructInitialSettingsPacket(1, &header_stream_offset)); |
4570 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( | 4615 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( |
4571 2, kClientDataStreamId1, true, true, | 4616 2, GetNthClientInitiatedStreamId(0), true, true, |
4572 GetRequestHeaders("GET", "https", "/"), &header_stream_offset)); | 4617 GetRequestHeaders("GET", "https", "/"), &header_stream_offset)); |
4573 QuicStreamOffset server_header_offset = 0; | 4618 QuicStreamOffset server_header_offset = 0; |
4574 mock_quic_data.AddRead(ConstructServerPushPromisePacket( | 4619 mock_quic_data.AddRead(ConstructServerPushPromisePacket( |
4575 1, kClientDataStreamId1, kServerDataStreamId1, false, | 4620 1, GetNthClientInitiatedStreamId(0), GetNthServerInitiatedStreamId(0), |
4576 GetRequestHeaders("GET", "https", "/pushed.jpg"), &server_header_offset, | 4621 false, GetRequestHeaders("GET", "https", "/pushed.jpg"), |
4577 &server_maker_)); | 4622 &server_header_offset, &server_maker_)); |
4578 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( | 4623 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( |
4579 2, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK"), | 4624 2, GetNthClientInitiatedStreamId(0), false, false, |
4580 &server_header_offset)); | 4625 GetResponseHeaders("200 OK"), &server_header_offset)); |
4581 mock_quic_data.AddWrite(ConstructClientAckPacket(3, 2, 1, 1)); | 4626 mock_quic_data.AddWrite(ConstructClientAckPacket(3, 2, 1, 1)); |
4582 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( | 4627 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( |
4583 3, kServerDataStreamId1, false, false, GetResponseHeaders("200 OK"), | 4628 3, GetNthServerInitiatedStreamId(0), false, false, |
4584 &server_header_offset)); | 4629 GetResponseHeaders("200 OK"), &server_header_offset)); |
4585 mock_quic_data.AddRead(ConstructServerDataPacket(4, kClientDataStreamId1, | 4630 mock_quic_data.AddRead(ConstructServerDataPacket( |
4586 false, true, 0, "hello!")); | 4631 4, GetNthClientInitiatedStreamId(0), false, true, 0, "hello!")); |
4587 mock_quic_data.AddWrite(ConstructClientAckPacket(4, 4, 3, 1)); | 4632 mock_quic_data.AddWrite(ConstructClientAckPacket(4, 4, 3, 1)); |
4588 mock_quic_data.AddRead(ConstructServerDataPacket( | 4633 mock_quic_data.AddRead(ConstructServerDataPacket( |
4589 5, kServerDataStreamId1, false, true, 0, "and hello!")); | 4634 5, GetNthServerInitiatedStreamId(0), false, true, 0, "and hello!")); |
4590 | 4635 |
4591 // Because the matching request has a body, we will see the push | 4636 // Because the matching request has a body, we will see the push |
4592 // stream get cancelled, and the matching request go out on the | 4637 // stream get cancelled, and the matching request go out on the |
4593 // wire. | 4638 // wire. |
4594 mock_quic_data.AddWrite(ConstructClientAckAndRstPacket( | 4639 mock_quic_data.AddWrite(ConstructClientAckAndRstPacket( |
4595 5, kServerDataStreamId1, QUIC_STREAM_CANCELLED, 5, 5, 1)); | 4640 5, GetNthServerInitiatedStreamId(0), QUIC_STREAM_CANCELLED, 5, 5, 1)); |
4596 const char kBody[] = "1"; | 4641 const char kBody[] = "1"; |
4597 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( | 4642 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( |
4598 6, kClientDataStreamId2, false, false, | 4643 6, GetNthClientInitiatedStreamId(1), false, false, |
4599 GetRequestHeaders("GET", "https", "/pushed.jpg"), &header_stream_offset)); | 4644 GetRequestHeaders("GET", "https", "/pushed.jpg"), &header_stream_offset)); |
4600 mock_quic_data.AddWrite(ConstructClientMultipleDataFramesPacket( | 4645 mock_quic_data.AddWrite(ConstructClientMultipleDataFramesPacket( |
4601 7, kClientDataStreamId2, false, true, {kBody}, 0)); | 4646 7, GetNthClientInitiatedStreamId(1), false, true, {kBody}, 0)); |
4602 | 4647 |
4603 // We see the same response as for the earlier pushed and cancelled | 4648 // We see the same response as for the earlier pushed and cancelled |
4604 // stream. | 4649 // stream. |
4605 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( | 4650 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( |
4606 6, kClientDataStreamId2, false, false, GetResponseHeaders("200 OK"), | 4651 6, GetNthClientInitiatedStreamId(1), false, false, |
4607 &server_header_offset)); | 4652 GetResponseHeaders("200 OK"), &server_header_offset)); |
4608 mock_quic_data.AddRead(ConstructServerDataPacket( | 4653 mock_quic_data.AddRead(ConstructServerDataPacket( |
4609 7, kClientDataStreamId2, false, true, 0, "and hello!")); | 4654 7, GetNthClientInitiatedStreamId(1), false, true, 0, "and hello!")); |
4610 | 4655 |
4611 mock_quic_data.AddWrite(ConstructClientAckPacket(8, 7, 6, 1)); | 4656 mock_quic_data.AddWrite(ConstructClientAckPacket(8, 7, 6, 1)); |
4612 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read | 4657 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read |
4613 mock_quic_data.AddRead(ASYNC, 0); // EOF | 4658 mock_quic_data.AddRead(ASYNC, 0); // EOF |
4614 mock_quic_data.AddSocketDataToFactory(&socket_factory_); | 4659 mock_quic_data.AddSocketDataToFactory(&socket_factory_); |
4615 | 4660 |
4616 // The non-alternate protocol job needs to hang in order to guarantee that | 4661 // The non-alternate protocol job needs to hang in order to guarantee that |
4617 // the alternate-protocol job will "win". | 4662 // the alternate-protocol job will "win". |
4618 AddHangingNonAlternateProtocolSocketData(); | 4663 AddHangingNonAlternateProtocolSocketData(); |
4619 | 4664 |
4620 CreateSession(); | 4665 CreateSession(); |
4621 | 4666 |
4622 // PUSH_PROMISE handling in the http layer gets exercised here. | 4667 // PUSH_PROMISE handling in the http layer gets exercised here. |
4623 SendRequestAndExpectQuicResponse("hello!"); | 4668 SendRequestAndExpectQuicResponse("hello!"); |
4624 | 4669 |
4625 request_.url = GURL("https://mail.example.org/pushed.jpg"); | 4670 request_.url = GURL("https://mail.example.org/pushed.jpg"); |
4626 ChunkedUploadDataStream upload_data(0); | 4671 ChunkedUploadDataStream upload_data(0); |
4627 upload_data.AppendData("1", 1, true); | 4672 upload_data.AppendData("1", 1, true); |
4628 request_.upload_data_stream = &upload_data; | 4673 request_.upload_data_stream = &upload_data; |
4629 SendRequestAndExpectQuicResponse("and hello!"); | 4674 SendRequestAndExpectQuicResponse("and hello!"); |
4630 } | 4675 } |
4631 | 4676 |
4632 } // namespace test | 4677 } // namespace test |
4633 } // namespace net | 4678 } // namespace net |
OLD | NEW |