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

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

Issue 2862563003: Landing Recent QUIC changes until Sat Apr 29 00:22:04 2017 +0000 (Closed)
Patch Set: rebase and fix test bugs detected by swarm bot. Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <memory> 5 #include <memory>
6 #include <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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
OLDNEW
« no previous file with comments | « net/quic/chromium/quic_http_stream_test.cc ('k') | net/quic/chromium/quic_stream_factory_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698