OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include <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 259 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
270 | 270 |
271 class EndToEndTest : public ::testing::TestWithParam<TestParams> { | 271 class EndToEndTest : public ::testing::TestWithParam<TestParams> { |
272 protected: | 272 protected: |
273 EndToEndTest() | 273 EndToEndTest() |
274 : initialized_(false), | 274 : initialized_(false), |
275 server_address_(IPEndPoint(Loopback4(), 0)), | 275 server_address_(IPEndPoint(Loopback4(), 0)), |
276 server_hostname_("test.example.com"), | 276 server_hostname_("test.example.com"), |
277 client_writer_(nullptr), | 277 client_writer_(nullptr), |
278 server_writer_(nullptr), | 278 server_writer_(nullptr), |
279 server_started_(false), | 279 server_started_(false), |
280 strike_register_no_startup_period_(false), | |
281 chlo_multiplier_(0), | 280 chlo_multiplier_(0), |
282 stream_factory_(nullptr), | 281 stream_factory_(nullptr), |
283 support_server_push_(false) { | 282 support_server_push_(false) { |
284 client_supported_versions_ = GetParam().client_supported_versions; | 283 client_supported_versions_ = GetParam().client_supported_versions; |
285 server_supported_versions_ = GetParam().server_supported_versions; | 284 server_supported_versions_ = GetParam().server_supported_versions; |
286 negotiated_version_ = GetParam().negotiated_version; | 285 negotiated_version_ = GetParam().negotiated_version; |
287 | 286 |
288 VLOG(1) << "Using Configuration: " << GetParam(); | 287 VLOG(1) << "Using Configuration: " << GetParam(); |
289 | 288 |
290 // 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 Loading... |
426 StopServer(); | 425 StopServer(); |
427 } | 426 } |
428 | 427 |
429 void StartServer() { | 428 void StartServer() { |
430 FLAGS_quic_use_cheap_stateless_rejects = | 429 FLAGS_quic_use_cheap_stateless_rejects = |
431 GetParam().use_cheap_stateless_reject; | 430 GetParam().use_cheap_stateless_reject; |
432 | 431 |
433 auto test_server = | 432 auto test_server = |
434 new QuicTestServer(CryptoTestUtils::ProofSourceForTesting(), | 433 new QuicTestServer(CryptoTestUtils::ProofSourceForTesting(), |
435 server_config_, server_supported_versions_); | 434 server_config_, server_supported_versions_); |
436 server_thread_.reset(new ServerThread(test_server, server_address_, | 435 server_thread_.reset(new ServerThread(test_server, server_address_)); |
437 strike_register_no_startup_period_)); | |
438 if (chlo_multiplier_ != 0) { | 436 if (chlo_multiplier_ != 0) { |
439 server_thread_->server()->SetChloMultiplier(chlo_multiplier_); | 437 server_thread_->server()->SetChloMultiplier(chlo_multiplier_); |
440 } | 438 } |
441 server_thread_->Initialize(); | 439 server_thread_->Initialize(); |
442 server_address_ = | 440 server_address_ = |
443 IPEndPoint(server_address_.address(), server_thread_->GetPort()); | 441 IPEndPoint(server_address_.address(), server_thread_->GetPort()); |
444 QuicDispatcher* dispatcher = | 442 QuicDispatcher* dispatcher = |
445 QuicServerPeer::GetDispatcher(server_thread_->server()); | 443 QuicServerPeer::GetDispatcher(server_thread_->server()); |
446 QuicDispatcherPeer::UseWriter(dispatcher, server_writer_); | 444 QuicDispatcherPeer::UseWriter(dispatcher, server_writer_); |
447 | 445 |
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
564 std::unique_ptr<ServerThread> server_thread_; | 562 std::unique_ptr<ServerThread> server_thread_; |
565 std::unique_ptr<QuicTestClient> client_; | 563 std::unique_ptr<QuicTestClient> client_; |
566 PacketDroppingTestWriter* client_writer_; | 564 PacketDroppingTestWriter* client_writer_; |
567 PacketDroppingTestWriter* server_writer_; | 565 PacketDroppingTestWriter* server_writer_; |
568 bool server_started_; | 566 bool server_started_; |
569 QuicConfig client_config_; | 567 QuicConfig client_config_; |
570 QuicConfig server_config_; | 568 QuicConfig server_config_; |
571 QuicVersionVector client_supported_versions_; | 569 QuicVersionVector client_supported_versions_; |
572 QuicVersionVector server_supported_versions_; | 570 QuicVersionVector server_supported_versions_; |
573 QuicVersion negotiated_version_; | 571 QuicVersion negotiated_version_; |
574 bool strike_register_no_startup_period_; | |
575 size_t chlo_multiplier_; | 572 size_t chlo_multiplier_; |
576 QuicTestServer::StreamFactory* stream_factory_; | 573 QuicTestServer::StreamFactory* stream_factory_; |
577 bool support_server_push_; | 574 bool support_server_push_; |
578 bool force_hol_blocking_; | 575 bool force_hol_blocking_; |
579 }; | 576 }; |
580 | 577 |
581 // Run all end to end tests with all supported versions. | 578 // Run all end to end tests with all supported versions. |
582 INSTANTIATE_TEST_CASE_P(EndToEndTests, | 579 INSTANTIATE_TEST_CASE_P(EndToEndTests, |
583 EndToEndTest, | 580 EndToEndTest, |
584 ::testing::ValuesIn(GetTestParams())); | 581 ::testing::ValuesIn(GetTestParams())); |
(...skipping 258 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
843 headers[":method"] = "POST"; | 840 headers[":method"] = "POST"; |
844 headers[":path"] = "/foo"; | 841 headers[":path"] = "/foo"; |
845 headers[":scheme"] = "https"; | 842 headers[":scheme"] = "https"; |
846 headers[":authority"] = server_hostname_; | 843 headers[":authority"] = server_hostname_; |
847 | 844 |
848 EXPECT_EQ(kFooResponseBody, | 845 EXPECT_EQ(kFooResponseBody, |
849 client_->SendCustomSynchronousRequest(headers, body)); | 846 client_->SendCustomSynchronousRequest(headers, body)); |
850 } | 847 } |
851 | 848 |
852 TEST_P(EndToEndTest, LargePostZeroRTTFailure) { | 849 TEST_P(EndToEndTest, LargePostZeroRTTFailure) { |
853 // Have the server accept 0-RTT without waiting a startup period. | |
854 strike_register_no_startup_period_ = true; | |
855 | |
856 // 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 |
857 // a 0-RTT handshake for the next request. | 851 // a 0-RTT handshake for the next request. |
858 ASSERT_TRUE(Initialize()); | 852 ASSERT_TRUE(Initialize()); |
859 | 853 |
860 string body; | 854 string body; |
861 GenerateBody(&body, 20480); | 855 GenerateBody(&body, 20480); |
862 SpdyHeaderBlock headers; | 856 SpdyHeaderBlock headers; |
863 headers[":method"] = "POST"; | 857 headers[":method"] = "POST"; |
864 headers[":path"] = "/foo"; | 858 headers[":path"] = "/foo"; |
865 headers[":scheme"] = "https"; | 859 headers[":scheme"] = "https"; |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
907 // 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 |
908 // latest session is 1. | 902 // latest session is 1. |
909 EXPECT_EQ(expected_num_hellos_latest_session, | 903 EXPECT_EQ(expected_num_hellos_latest_session, |
910 client_->client()->session()->GetNumSentClientHellos()); | 904 client_->client()->session()->GetNumSentClientHellos()); |
911 EXPECT_EQ(2, client_->client()->GetNumSentClientHellos()); | 905 EXPECT_EQ(2, client_->client()->GetNumSentClientHellos()); |
912 | 906 |
913 VerifyCleanConnection(false); | 907 VerifyCleanConnection(false); |
914 } | 908 } |
915 | 909 |
916 TEST_P(EndToEndTest, SynchronousRequestZeroRTTFailure) { | 910 TEST_P(EndToEndTest, SynchronousRequestZeroRTTFailure) { |
917 // Have the server accept 0-RTT without waiting a startup period. | |
918 strike_register_no_startup_period_ = true; | |
919 | |
920 // 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 |
921 // a 0-RTT handshake for the next request. | 912 // a 0-RTT handshake for the next request. |
922 ASSERT_TRUE(Initialize()); | 913 ASSERT_TRUE(Initialize()); |
923 | 914 |
924 EXPECT_EQ(kFooResponseBody, client_->SendSynchronousRequest("/foo")); | 915 EXPECT_EQ(kFooResponseBody, client_->SendSynchronousRequest("/foo")); |
925 // 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 |
926 // 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 |
927 // the stateless case, the first client session will be completely | 918 // the stateless case, the first client session will be completely |
928 // 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 |
929 // latest session is 1. | 920 // latest session is 1. |
(...skipping 30 matching lines...) Expand all Loading... |
960 // 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 |
961 // latest session is 1. | 952 // latest session is 1. |
962 EXPECT_EQ(expected_num_hellos_latest_session, | 953 EXPECT_EQ(expected_num_hellos_latest_session, |
963 client_->client()->session()->GetNumSentClientHellos()); | 954 client_->client()->session()->GetNumSentClientHellos()); |
964 EXPECT_EQ(2, client_->client()->GetNumSentClientHellos()); | 955 EXPECT_EQ(2, client_->client()->GetNumSentClientHellos()); |
965 | 956 |
966 VerifyCleanConnection(false); | 957 VerifyCleanConnection(false); |
967 } | 958 } |
968 | 959 |
969 TEST_P(EndToEndTest, LargePostSynchronousRequest) { | 960 TEST_P(EndToEndTest, LargePostSynchronousRequest) { |
970 // Have the server accept 0-RTT without waiting a startup period. | |
971 strike_register_no_startup_period_ = true; | |
972 | |
973 // 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 |
974 // a 0-RTT handshake for the next request. | 962 // a 0-RTT handshake for the next request. |
975 ASSERT_TRUE(Initialize()); | 963 ASSERT_TRUE(Initialize()); |
976 | 964 |
977 string body; | 965 string body; |
978 GenerateBody(&body, 20480); | 966 GenerateBody(&body, 20480); |
979 SpdyHeaderBlock headers; | 967 SpdyHeaderBlock headers; |
980 headers[":method"] = "POST"; | 968 headers[":method"] = "POST"; |
981 headers[":path"] = "/foo"; | 969 headers[":path"] = "/foo"; |
982 headers[":scheme"] = "https"; | 970 headers[":scheme"] = "https"; |
(...skipping 1976 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2959 client_->WaitForResponse(); | 2947 client_->WaitForResponse(); |
2960 EXPECT_EQ(kBarResponseBody, client_->response_body()); | 2948 EXPECT_EQ(kBarResponseBody, client_->response_body()); |
2961 QuicConnectionStats client_stats = | 2949 QuicConnectionStats client_stats = |
2962 client_->client()->session()->connection()->GetStats(); | 2950 client_->client()->session()->connection()->GetStats(); |
2963 EXPECT_EQ(0u, client_stats.packets_lost); | 2951 EXPECT_EQ(0u, client_stats.packets_lost); |
2964 EXPECT_EQ(1, client_->client()->GetNumSentClientHellos()); | 2952 EXPECT_EQ(1, client_->client()->GetNumSentClientHellos()); |
2965 } | 2953 } |
2966 } // namespace | 2954 } // namespace |
2967 } // namespace test | 2955 } // namespace test |
2968 } // namespace net | 2956 } // namespace net |
OLD | NEW |