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

Side by Side Diff: net/tools/quic/end_to_end_test.cc

Issue 2516033003: Landing Recent QUIC changes until Mon Nov 14 04:43:50 2016 +0000 (Closed)
Patch Set: Remove unused UpdatePacketGapSentHistogram() function. Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « net/tools/quic/chlo_extractor_test.cc ('k') | net/tools/quic/quic_client_bin.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <stddef.h> 5 #include <stddef.h>
6 #include <sys/epoll.h> 6 #include <sys/epoll.h>
7 7
8 #include <cstdint> 8 #include <cstdint>
9 #include <list> 9 #include <list>
10 #include <memory> 10 #include <memory>
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
102 os << "{ server_supported_versions: " 102 os << "{ server_supported_versions: "
103 << QuicVersionVectorToString(p.server_supported_versions); 103 << QuicVersionVectorToString(p.server_supported_versions);
104 os << " client_supported_versions: " 104 os << " client_supported_versions: "
105 << QuicVersionVectorToString(p.client_supported_versions); 105 << QuicVersionVectorToString(p.client_supported_versions);
106 os << " negotiated_version: " << QuicVersionToString(p.negotiated_version); 106 os << " negotiated_version: " << QuicVersionToString(p.negotiated_version);
107 os << " client_supports_stateless_rejects: " 107 os << " client_supports_stateless_rejects: "
108 << p.client_supports_stateless_rejects; 108 << p.client_supports_stateless_rejects;
109 os << " server_uses_stateless_rejects_if_peer_supported: " 109 os << " server_uses_stateless_rejects_if_peer_supported: "
110 << p.server_uses_stateless_rejects_if_peer_supported; 110 << p.server_uses_stateless_rejects_if_peer_supported;
111 os << " congestion_control_tag: " 111 os << " congestion_control_tag: "
112 << QuicUtils::TagToString(p.congestion_control_tag); 112 << QuicTagToString(p.congestion_control_tag);
113 os << " disable_hpack_dynamic_table: " << p.disable_hpack_dynamic_table; 113 os << " disable_hpack_dynamic_table: " << p.disable_hpack_dynamic_table;
114 os << " force_hol_blocking: " << p.force_hol_blocking; 114 os << " force_hol_blocking: " << p.force_hol_blocking;
115 os << " use_cheap_stateless_reject: " << p.use_cheap_stateless_reject 115 os << " use_cheap_stateless_reject: " << p.use_cheap_stateless_reject
116 << " }"; 116 << " }";
117 return os; 117 return os;
118 } 118 }
119 119
120 QuicVersionVector client_supported_versions; 120 QuicVersionVector client_supported_versions;
121 QuicVersionVector server_supported_versions; 121 QuicVersionVector server_supported_versions;
122 QuicVersion negotiated_version; 122 QuicVersion negotiated_version;
123 bool client_supports_stateless_rejects; 123 bool client_supports_stateless_rejects;
124 bool server_uses_stateless_rejects_if_peer_supported; 124 bool server_uses_stateless_rejects_if_peer_supported;
125 QuicTag congestion_control_tag; 125 QuicTag congestion_control_tag;
126 bool disable_hpack_dynamic_table; 126 bool disable_hpack_dynamic_table;
127 bool force_hol_blocking; 127 bool force_hol_blocking;
128 bool use_cheap_stateless_reject; 128 bool use_cheap_stateless_reject;
129 }; 129 };
130 130
131 // Constructs various test permutations. 131 // Constructs various test permutations.
132 std::vector<TestParams> GetTestParams() { 132 std::vector<TestParams> GetTestParams() {
133 // Divide the versions into buckets in which the intra-frame format 133 // Divide the versions into buckets in which the intra-frame format
134 // is compatible. When clients encounter QUIC version negotiation 134 // is compatible. When clients encounter QUIC version negotiation
135 // they simply retransmit all packets using the new version's 135 // they simply retransmit all packets using the new version's
136 // QUIC framing. However, they are unable to change the intra-frame 136 // QUIC framing. However, they are unable to change the intra-frame
137 // layout (for example to change HTTP/2 headers to SPDY/3). So 137 // layout (for example to change HTTP/2 headers to SPDY/3). So
138 // these tests need to ensure that clients are never attempting 138 // these tests need to ensure that clients are never attempting
139 // to do 0-RTT across incompatible versions. Chromium only supports 139 // to do 0-RTT across incompatible versions. Chromium only supports
140 // a single version at a time anyway. :) 140 // a single version at a time anyway. :)
141 QuicVersionVector all_supported_versions = AllSupportedVersions(); 141 QuicVersionVector all_supported_versions = AllSupportedVersions();
142 QuicVersionVector version_buckets[3]; 142 // Even though this currently has one element, it may well get another
143 // with future versions of QUIC, so don't remove it.
144 QuicVersionVector version_buckets[1];
143 145
144 for (const QuicVersion version : all_supported_versions) { 146 for (const QuicVersion version : all_supported_versions) {
145 if (version <= QUIC_VERSION_32) { 147 // Versions: 34+
146 // Versions: 31-32 148 // QUIC_VERSION_34 deprecates entropy and uses new ack and stop waiting
147 // v31 adds a hash of the CHLO into the proof signature. 149 // wire formats.
148 version_buckets[0].push_back(version); 150 version_buckets[0].push_back(version);
149 } else if (version <= QUIC_VERSION_33) {
150 // Versions: 33
151 // v33 adds a diversification nonce into the hkdf.
152 version_buckets[1].push_back(version);
153 } else {
154 // Versions: 34+
155 // QUIC_VERSION_34 deprecates entropy and uses new ack and stop waiting
156 // wire formats.
157 version_buckets[2].push_back(version);
158 }
159 } 151 }
160 152
161 // This must be kept in sync with the number of nested for-loops below as it 153 // This must be kept in sync with the number of nested for-loops below as it
162 // is used to prune the number of tests that are run. 154 // is used to prune the number of tests that are run.
163 const int kMaxEnabledOptions = 5; 155 const int kMaxEnabledOptions = 5;
164 int max_enabled_options = 0; 156 int max_enabled_options = 0;
165 std::vector<TestParams> params; 157 std::vector<TestParams> params;
166 for (bool server_uses_stateless_rejects_if_peer_supported : {true, false}) { 158 for (bool server_uses_stateless_rejects_if_peer_supported : {true, false}) {
167 for (bool client_supports_stateless_rejects : {true, false}) { 159 for (bool client_supports_stateless_rejects : {true, false}) {
168 for (const QuicTag congestion_control_tag : {kRENO, kTBBR, kQBIC}) { 160 for (const QuicTag congestion_control_tag : {kRENO, kTBBR, kQBIC}) {
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after
278 270
279 class EndToEndTest : public ::testing::TestWithParam<TestParams> { 271 class EndToEndTest : public ::testing::TestWithParam<TestParams> {
280 protected: 272 protected:
281 EndToEndTest() 273 EndToEndTest()
282 : initialized_(false), 274 : initialized_(false),
283 server_address_(IPEndPoint(Loopback4(), 0)), 275 server_address_(IPEndPoint(Loopback4(), 0)),
284 server_hostname_("test.example.com"), 276 server_hostname_("test.example.com"),
285 client_writer_(nullptr), 277 client_writer_(nullptr),
286 server_writer_(nullptr), 278 server_writer_(nullptr),
287 server_started_(false), 279 server_started_(false),
288 strike_register_no_startup_period_(false),
289 chlo_multiplier_(0), 280 chlo_multiplier_(0),
290 stream_factory_(nullptr), 281 stream_factory_(nullptr),
291 support_server_push_(false) { 282 support_server_push_(false) {
292 client_supported_versions_ = GetParam().client_supported_versions; 283 client_supported_versions_ = GetParam().client_supported_versions;
293 server_supported_versions_ = GetParam().server_supported_versions; 284 server_supported_versions_ = GetParam().server_supported_versions;
294 negotiated_version_ = GetParam().negotiated_version; 285 negotiated_version_ = GetParam().negotiated_version;
295 286
296 VLOG(1) << "Using Configuration: " << GetParam(); 287 VLOG(1) << "Using Configuration: " << GetParam();
297 288
298 // Use different flow control windows for client/server. 289 // Use different flow control windows for client/server.
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after
434 StopServer(); 425 StopServer();
435 } 426 }
436 427
437 void StartServer() { 428 void StartServer() {
438 FLAGS_quic_use_cheap_stateless_rejects = 429 FLAGS_quic_use_cheap_stateless_rejects =
439 GetParam().use_cheap_stateless_reject; 430 GetParam().use_cheap_stateless_reject;
440 431
441 auto test_server = 432 auto test_server =
442 new QuicTestServer(CryptoTestUtils::ProofSourceForTesting(), 433 new QuicTestServer(CryptoTestUtils::ProofSourceForTesting(),
443 server_config_, server_supported_versions_); 434 server_config_, server_supported_versions_);
444 server_thread_.reset(new ServerThread(test_server, server_address_, 435 server_thread_.reset(new ServerThread(test_server, server_address_));
445 strike_register_no_startup_period_));
446 if (chlo_multiplier_ != 0) { 436 if (chlo_multiplier_ != 0) {
447 server_thread_->server()->SetChloMultiplier(chlo_multiplier_); 437 server_thread_->server()->SetChloMultiplier(chlo_multiplier_);
448 } 438 }
449 server_thread_->Initialize(); 439 server_thread_->Initialize();
450 server_address_ = 440 server_address_ =
451 IPEndPoint(server_address_.address(), server_thread_->GetPort()); 441 IPEndPoint(server_address_.address(), server_thread_->GetPort());
452 QuicDispatcher* dispatcher = 442 QuicDispatcher* dispatcher =
453 QuicServerPeer::GetDispatcher(server_thread_->server()); 443 QuicServerPeer::GetDispatcher(server_thread_->server());
454 QuicDispatcherPeer::UseWriter(dispatcher, server_writer_); 444 QuicDispatcherPeer::UseWriter(dispatcher, server_writer_);
455 445
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after
572 std::unique_ptr<ServerThread> server_thread_; 562 std::unique_ptr<ServerThread> server_thread_;
573 std::unique_ptr<QuicTestClient> client_; 563 std::unique_ptr<QuicTestClient> client_;
574 PacketDroppingTestWriter* client_writer_; 564 PacketDroppingTestWriter* client_writer_;
575 PacketDroppingTestWriter* server_writer_; 565 PacketDroppingTestWriter* server_writer_;
576 bool server_started_; 566 bool server_started_;
577 QuicConfig client_config_; 567 QuicConfig client_config_;
578 QuicConfig server_config_; 568 QuicConfig server_config_;
579 QuicVersionVector client_supported_versions_; 569 QuicVersionVector client_supported_versions_;
580 QuicVersionVector server_supported_versions_; 570 QuicVersionVector server_supported_versions_;
581 QuicVersion negotiated_version_; 571 QuicVersion negotiated_version_;
582 bool strike_register_no_startup_period_;
583 size_t chlo_multiplier_; 572 size_t chlo_multiplier_;
584 QuicTestServer::StreamFactory* stream_factory_; 573 QuicTestServer::StreamFactory* stream_factory_;
585 bool support_server_push_; 574 bool support_server_push_;
586 bool force_hol_blocking_; 575 bool force_hol_blocking_;
587 }; 576 };
588 577
589 // Run all end to end tests with all supported versions. 578 // Run all end to end tests with all supported versions.
590 INSTANTIATE_TEST_CASE_P(EndToEndTests, 579 INSTANTIATE_TEST_CASE_P(EndToEndTests,
591 EndToEndTest, 580 EndToEndTest,
592 ::testing::ValuesIn(GetTestParams())); 581 ::testing::ValuesIn(GetTestParams()));
(...skipping 258 matching lines...) Expand 10 before | Expand all | Expand 10 after
851 headers[":method"] = "POST"; 840 headers[":method"] = "POST";
852 headers[":path"] = "/foo"; 841 headers[":path"] = "/foo";
853 headers[":scheme"] = "https"; 842 headers[":scheme"] = "https";
854 headers[":authority"] = server_hostname_; 843 headers[":authority"] = server_hostname_;
855 844
856 EXPECT_EQ(kFooResponseBody, 845 EXPECT_EQ(kFooResponseBody,
857 client_->SendCustomSynchronousRequest(headers, body)); 846 client_->SendCustomSynchronousRequest(headers, body));
858 } 847 }
859 848
860 TEST_P(EndToEndTest, LargePostZeroRTTFailure) { 849 TEST_P(EndToEndTest, LargePostZeroRTTFailure) {
861 // Have the server accept 0-RTT without waiting a startup period.
862 strike_register_no_startup_period_ = true;
863
864 // Send a request and then disconnect. This prepares the client to attempt 850 // Send a request and then disconnect. This prepares the client to attempt
865 // a 0-RTT handshake for the next request. 851 // a 0-RTT handshake for the next request.
866 ASSERT_TRUE(Initialize()); 852 ASSERT_TRUE(Initialize());
867 853
868 string body; 854 string body;
869 GenerateBody(&body, 20480); 855 GenerateBody(&body, 20480);
870 SpdyHeaderBlock headers; 856 SpdyHeaderBlock headers;
871 headers[":method"] = "POST"; 857 headers[":method"] = "POST";
872 headers[":path"] = "/foo"; 858 headers[":path"] = "/foo";
873 headers[":scheme"] = "https"; 859 headers[":scheme"] = "https";
(...skipping 14 matching lines...) Expand all
888 874
889 client_->Disconnect(); 875 client_->Disconnect();
890 876
891 // The 0-RTT handshake should succeed. 877 // The 0-RTT handshake should succeed.
892 client_->Connect(); 878 client_->Connect();
893 client_->WaitForInitialResponse(); 879 client_->WaitForInitialResponse();
894 ASSERT_TRUE(client_->client()->connected()); 880 ASSERT_TRUE(client_->client()->connected());
895 EXPECT_EQ(kFooResponseBody, 881 EXPECT_EQ(kFooResponseBody,
896 client_->SendCustomSynchronousRequest(headers, body)); 882 client_->SendCustomSynchronousRequest(headers, body));
897 883
898 if (negotiated_version_ <= QUIC_VERSION_32) { 884 EXPECT_EQ(1, client_->client()->session()->GetNumSentClientHellos());
899 EXPECT_EQ(expected_num_hellos_latest_session, 885 EXPECT_EQ(1, client_->client()->GetNumSentClientHellos());
900 client_->client()->session()->GetNumSentClientHellos());
901 EXPECT_EQ(2, client_->client()->GetNumSentClientHellos());
902 } else {
903 EXPECT_EQ(1, client_->client()->session()->GetNumSentClientHellos());
904 EXPECT_EQ(1, client_->client()->GetNumSentClientHellos());
905 }
906 886
907 client_->Disconnect(); 887 client_->Disconnect();
908 888
909 // Restart the server so that the 0-RTT handshake will take 1 RTT. 889 // Restart the server so that the 0-RTT handshake will take 1 RTT.
910 StopServer(); 890 StopServer();
911 server_writer_ = new PacketDroppingTestWriter(); 891 server_writer_ = new PacketDroppingTestWriter();
912 StartServer(); 892 StartServer();
913 893
914 client_->Connect(); 894 client_->Connect();
915 ASSERT_TRUE(client_->client()->connected()); 895 ASSERT_TRUE(client_->client()->connected());
916 EXPECT_EQ(kFooResponseBody, 896 EXPECT_EQ(kFooResponseBody,
917 client_->SendCustomSynchronousRequest(headers, body)); 897 client_->SendCustomSynchronousRequest(headers, body));
918 // In the non-stateless case, the same session is used for both 898 // In the non-stateless case, the same session is used for both
919 // hellos, so the number of hellos sent on that session is 2. In 899 // hellos, so the number of hellos sent on that session is 2. In
920 // the stateless case, the first client session will be completely 900 // the stateless case, the first client session will be completely
921 // torn down after the reject. The number of hellos sent on the 901 // torn down after the reject. The number of hellos sent on the
922 // latest session is 1. 902 // latest session is 1.
923 EXPECT_EQ(expected_num_hellos_latest_session, 903 EXPECT_EQ(expected_num_hellos_latest_session,
924 client_->client()->session()->GetNumSentClientHellos()); 904 client_->client()->session()->GetNumSentClientHellos());
925 EXPECT_EQ(2, client_->client()->GetNumSentClientHellos()); 905 EXPECT_EQ(2, client_->client()->GetNumSentClientHellos());
926 906
927 VerifyCleanConnection(false); 907 VerifyCleanConnection(false);
928 } 908 }
929 909
930 TEST_P(EndToEndTest, SynchronousRequestZeroRTTFailure) { 910 TEST_P(EndToEndTest, SynchronousRequestZeroRTTFailure) {
931 // Have the server accept 0-RTT without waiting a startup period.
932 strike_register_no_startup_period_ = true;
933
934 // Send a request and then disconnect. This prepares the client to attempt 911 // Send a request and then disconnect. This prepares the client to attempt
935 // a 0-RTT handshake for the next request. 912 // a 0-RTT handshake for the next request.
936 ASSERT_TRUE(Initialize()); 913 ASSERT_TRUE(Initialize());
937 914
938 EXPECT_EQ(kFooResponseBody, client_->SendSynchronousRequest("/foo")); 915 EXPECT_EQ(kFooResponseBody, client_->SendSynchronousRequest("/foo"));
939 // In the non-stateless case, the same session is used for both 916 // In the non-stateless case, the same session is used for both
940 // hellos, so the number of hellos sent on that session is 2. In 917 // hellos, so the number of hellos sent on that session is 2. In
941 // the stateless case, the first client session will be completely 918 // the stateless case, the first client session will be completely
942 // torn down after the reject. The number of hellos on that second 919 // torn down after the reject. The number of hellos on that second
943 // latest session is 1. 920 // latest session is 1.
944 const int expected_num_hellos_latest_session = 921 const int expected_num_hellos_latest_session =
945 BothSidesSupportStatelessRejects() ? 1 : 2; 922 BothSidesSupportStatelessRejects() ? 1 : 2;
946 EXPECT_EQ(expected_num_hellos_latest_session, 923 EXPECT_EQ(expected_num_hellos_latest_session,
947 client_->client()->session()->GetNumSentClientHellos()); 924 client_->client()->session()->GetNumSentClientHellos());
948 EXPECT_EQ(2, client_->client()->GetNumSentClientHellos()); 925 EXPECT_EQ(2, client_->client()->GetNumSentClientHellos());
949 926
950 client_->Disconnect(); 927 client_->Disconnect();
951 928
952 // The 0-RTT handshake should succeed. 929 // The 0-RTT handshake should succeed.
953 client_->Connect(); 930 client_->Connect();
954 client_->WaitForInitialResponse(); 931 client_->WaitForInitialResponse();
955 ASSERT_TRUE(client_->client()->connected()); 932 ASSERT_TRUE(client_->client()->connected());
956 EXPECT_EQ(kFooResponseBody, client_->SendSynchronousRequest("/foo")); 933 EXPECT_EQ(kFooResponseBody, client_->SendSynchronousRequest("/foo"));
957 934
958 if (negotiated_version_ <= QUIC_VERSION_32) { 935 EXPECT_EQ(1, client_->client()->session()->GetNumSentClientHellos());
959 EXPECT_EQ(expected_num_hellos_latest_session, 936 EXPECT_EQ(1, client_->client()->GetNumSentClientHellos());
960 client_->client()->session()->GetNumSentClientHellos());
961 EXPECT_EQ(2, client_->client()->GetNumSentClientHellos());
962 } else {
963 EXPECT_EQ(1, client_->client()->session()->GetNumSentClientHellos());
964 EXPECT_EQ(1, client_->client()->GetNumSentClientHellos());
965 }
966 937
967 client_->Disconnect(); 938 client_->Disconnect();
968 939
969 // Restart the server so that the 0-RTT handshake will take 1 RTT. 940 // Restart the server so that the 0-RTT handshake will take 1 RTT.
970 StopServer(); 941 StopServer();
971 server_writer_ = new PacketDroppingTestWriter(); 942 server_writer_ = new PacketDroppingTestWriter();
972 StartServer(); 943 StartServer();
973 944
974 client_->Connect(); 945 client_->Connect();
975 ASSERT_TRUE(client_->client()->connected()); 946 ASSERT_TRUE(client_->client()->connected());
976 EXPECT_EQ(kFooResponseBody, client_->SendSynchronousRequest("/foo")); 947 EXPECT_EQ(kFooResponseBody, client_->SendSynchronousRequest("/foo"));
977 // In the non-stateless case, the same session is used for both 948 // In the non-stateless case, the same session is used for both
978 // hellos, so the number of hellos sent on that session is 2. In 949 // hellos, so the number of hellos sent on that session is 2. In
979 // the stateless case, the first client session will be completely 950 // the stateless case, the first client session will be completely
980 // torn down after the reject. The number of hellos sent on the 951 // torn down after the reject. The number of hellos sent on the
981 // latest session is 1. 952 // latest session is 1.
982 EXPECT_EQ(expected_num_hellos_latest_session, 953 EXPECT_EQ(expected_num_hellos_latest_session,
983 client_->client()->session()->GetNumSentClientHellos()); 954 client_->client()->session()->GetNumSentClientHellos());
984 EXPECT_EQ(2, client_->client()->GetNumSentClientHellos()); 955 EXPECT_EQ(2, client_->client()->GetNumSentClientHellos());
985 956
986 VerifyCleanConnection(false); 957 VerifyCleanConnection(false);
987 } 958 }
988 959
989 TEST_P(EndToEndTest, LargePostSynchronousRequest) { 960 TEST_P(EndToEndTest, LargePostSynchronousRequest) {
990 // Have the server accept 0-RTT without waiting a startup period.
991 strike_register_no_startup_period_ = true;
992
993 // Send a request and then disconnect. This prepares the client to attempt 961 // Send a request and then disconnect. This prepares the client to attempt
994 // a 0-RTT handshake for the next request. 962 // a 0-RTT handshake for the next request.
995 ASSERT_TRUE(Initialize()); 963 ASSERT_TRUE(Initialize());
996 964
997 string body; 965 string body;
998 GenerateBody(&body, 20480); 966 GenerateBody(&body, 20480);
999 SpdyHeaderBlock headers; 967 SpdyHeaderBlock headers;
1000 headers[":method"] = "POST"; 968 headers[":method"] = "POST";
1001 headers[":path"] = "/foo"; 969 headers[":path"] = "/foo";
1002 headers[":scheme"] = "https"; 970 headers[":scheme"] = "https";
(...skipping 14 matching lines...) Expand all
1017 985
1018 client_->Disconnect(); 986 client_->Disconnect();
1019 987
1020 // The 0-RTT handshake should succeed. 988 // The 0-RTT handshake should succeed.
1021 client_->Connect(); 989 client_->Connect();
1022 client_->WaitForInitialResponse(); 990 client_->WaitForInitialResponse();
1023 ASSERT_TRUE(client_->client()->connected()); 991 ASSERT_TRUE(client_->client()->connected());
1024 EXPECT_EQ(kFooResponseBody, 992 EXPECT_EQ(kFooResponseBody,
1025 client_->SendCustomSynchronousRequest(headers, body)); 993 client_->SendCustomSynchronousRequest(headers, body));
1026 994
1027 if (negotiated_version_ <= QUIC_VERSION_32) { 995 EXPECT_EQ(1, client_->client()->session()->GetNumSentClientHellos());
1028 EXPECT_EQ(expected_num_hellos_latest_session, 996 EXPECT_EQ(1, client_->client()->GetNumSentClientHellos());
1029 client_->client()->session()->GetNumSentClientHellos());
1030 EXPECT_EQ(2, client_->client()->GetNumSentClientHellos());
1031 } else {
1032 EXPECT_EQ(1, client_->client()->session()->GetNumSentClientHellos());
1033 EXPECT_EQ(1, client_->client()->GetNumSentClientHellos());
1034 }
1035 997
1036 client_->Disconnect(); 998 client_->Disconnect();
1037 999
1038 // Restart the server so that the 0-RTT handshake will take 1 RTT. 1000 // Restart the server so that the 0-RTT handshake will take 1 RTT.
1039 StopServer(); 1001 StopServer();
1040 server_writer_ = new PacketDroppingTestWriter(); 1002 server_writer_ = new PacketDroppingTestWriter();
1041 StartServer(); 1003 StartServer();
1042 1004
1043 client_->Connect(); 1005 client_->Connect();
1044 ASSERT_TRUE(client_->client()->connected()); 1006 ASSERT_TRUE(client_->client()->connected());
(...skipping 1909 matching lines...) Expand 10 before | Expand all | Expand 10 after
2954 protected: 2916 protected:
2955 PacketReorderingWriter* reorder_writer_; 2917 PacketReorderingWriter* reorder_writer_;
2956 }; 2918 };
2957 2919
2958 INSTANTIATE_TEST_CASE_P(EndToEndBufferedPacketsTests, 2920 INSTANTIATE_TEST_CASE_P(EndToEndBufferedPacketsTests,
2959 EndToEndBufferedPacketsTest, 2921 EndToEndBufferedPacketsTest,
2960 testing::ValuesIn(GetTestParams())); 2922 testing::ValuesIn(GetTestParams()));
2961 2923
2962 TEST_P(EndToEndBufferedPacketsTest, Buffer0RttRequest) { 2924 TEST_P(EndToEndBufferedPacketsTest, Buffer0RttRequest) {
2963 ASSERT_TRUE(Initialize()); 2925 ASSERT_TRUE(Initialize());
2964 if (negotiated_version_ <= QUIC_VERSION_32) {
2965 // Since no 0-rtt for v32 and under, and this test relies on 0-rtt, skip
2966 // this test if QUIC doesn't do 0-rtt.
2967 return;
2968 }
2969 // Finish one request to make sure handshake established. 2926 // Finish one request to make sure handshake established.
2970 client_->SendSynchronousRequest("/foo"); 2927 client_->SendSynchronousRequest("/foo");
2971 // Disconnect for next 0-rtt request. 2928 // Disconnect for next 0-rtt request.
2972 client_->Disconnect(); 2929 client_->Disconnect();
2973 2930
2974 // Client get valid STK now. Do a 0-rtt request. 2931 // Client get valid STK now. Do a 0-rtt request.
2975 // Buffer a CHLO till another packets sent out. 2932 // Buffer a CHLO till another packets sent out.
2976 reorder_writer_->SetDelay(1); 2933 reorder_writer_->SetDelay(1);
2977 // Only send out a CHLO. 2934 // Only send out a CHLO.
2978 client_->client()->Initialize(); 2935 client_->client()->Initialize();
(...skipping 11 matching lines...) Expand all
2990 client_->WaitForResponse(); 2947 client_->WaitForResponse();
2991 EXPECT_EQ(kBarResponseBody, client_->response_body()); 2948 EXPECT_EQ(kBarResponseBody, client_->response_body());
2992 QuicConnectionStats client_stats = 2949 QuicConnectionStats client_stats =
2993 client_->client()->session()->connection()->GetStats(); 2950 client_->client()->session()->connection()->GetStats();
2994 EXPECT_EQ(0u, client_stats.packets_lost); 2951 EXPECT_EQ(0u, client_stats.packets_lost);
2995 EXPECT_EQ(1, client_->client()->GetNumSentClientHellos()); 2952 EXPECT_EQ(1, client_->client()->GetNumSentClientHellos());
2996 } 2953 }
2997 } // namespace 2954 } // namespace
2998 } // namespace test 2955 } // namespace test
2999 } // namespace net 2956 } // namespace net
OLDNEW
« no previous file with comments | « net/tools/quic/chlo_extractor_test.cc ('k') | net/tools/quic/quic_client_bin.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698