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

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

Issue 605163004: Land Recent QUIC Changes. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@Final_0925
Patch Set: Created 6 years, 2 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
« no previous file with comments | « net/quic/test_tools/quic_test_utils.h ('k') | net/tools/quic/quic_client_session_test.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 <string> 6 #include <string>
7 #include <sys/epoll.h> 7 #include <sys/epoll.h>
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/basictypes.h" 10 #include "base/basictypes.h"
(...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after
132 use_fec != 0, 132 use_fec != 0,
133 congestion_control_tag)); 133 congestion_control_tag));
134 134
135 // Test client supporting all versions and server supporting 1 version. 135 // Test client supporting all versions and server supporting 1 version.
136 // Simulate an old server and exercise version downgrade in the client. 136 // Simulate an old server and exercise version downgrade in the client.
137 // Protocol negotiation should occur. Skip the i = 0 case because it is 137 // Protocol negotiation should occur. Skip the i = 0 case because it is
138 // essentially the same as the default case. 138 // essentially the same as the default case.
139 for (size_t i = 1; i < all_supported_versions.size(); ++i) { 139 for (size_t i = 1; i < all_supported_versions.size(); ++i) {
140 QuicVersionVector server_supported_versions; 140 QuicVersionVector server_supported_versions;
141 server_supported_versions.push_back(all_supported_versions[i]); 141 server_supported_versions.push_back(all_supported_versions[i]);
142 if (all_supported_versions[i] >= QUIC_VERSION_18) {
143 // Until flow control is globally rolled out and we remove
144 // QUIC_VERSION_16, the server MUST support at least one QUIC
145 // version that does not use flow control.
146 server_supported_versions.push_back(QUIC_VERSION_16);
147 }
148 params.push_back(TestParams(all_supported_versions, 142 params.push_back(TestParams(all_supported_versions,
149 server_supported_versions, 143 server_supported_versions,
150 server_supported_versions[0], 144 server_supported_versions[0],
151 use_pacing != 0, 145 use_pacing != 0,
152 use_fec != 0, 146 use_fec != 0,
153 congestion_control_tag)); 147 congestion_control_tag));
154 } 148 }
155 } 149 }
156 } 150 }
157 } 151 }
(...skipping 528 matching lines...) Expand 10 before | Expand all | Expand 10 after
686 HttpConstants::POST, "/foo"); 680 HttpConstants::POST, "/foo");
687 request.AddBody(body, true); 681 request.AddBody(body, true);
688 682
689 EXPECT_EQ(kFooResponseBody, client_->SendCustomSynchronousRequest(request)); 683 EXPECT_EQ(kFooResponseBody, client_->SendCustomSynchronousRequest(request));
690 EXPECT_EQ(2, client_->client()->session()->GetNumSentClientHellos()); 684 EXPECT_EQ(2, client_->client()->session()->GetNumSentClientHellos());
691 685
692 client_->Disconnect(); 686 client_->Disconnect();
693 687
694 // The 0-RTT handshake should succeed. 688 // The 0-RTT handshake should succeed.
695 client_->Connect(); 689 client_->Connect();
696 if (client_supported_versions_[0] >= QUIC_VERSION_18 &&
697 negotiated_version_ <= QUIC_VERSION_16) {
698 // If the version negotiation has resulted in a downgrade, then the client
699 // must wait for the handshake to complete before sending any data.
700 // Otherwise it may have queued frames which will trigger a
701 // DFATAL when they are serialized after the downgrade.
702 client_->client()->WaitForCryptoHandshakeConfirmed();
703 }
704 client_->WaitForResponseForMs(-1); 690 client_->WaitForResponseForMs(-1);
705 ASSERT_TRUE(client_->client()->connected()); 691 ASSERT_TRUE(client_->client()->connected());
706 EXPECT_EQ(kFooResponseBody, client_->SendCustomSynchronousRequest(request)); 692 EXPECT_EQ(kFooResponseBody, client_->SendCustomSynchronousRequest(request));
707 EXPECT_EQ(1, client_->client()->session()->GetNumSentClientHellos()); 693 EXPECT_EQ(1, client_->client()->session()->GetNumSentClientHellos());
708 694
709 client_->Disconnect(); 695 client_->Disconnect();
710 696
711 // Restart the server so that the 0-RTT handshake will take 1 RTT. 697 // Restart the server so that the 0-RTT handshake will take 1 RTT.
712 StopServer(); 698 StopServer();
713 server_writer_ = new PacketDroppingTestWriter(); 699 server_writer_ = new PacketDroppingTestWriter();
714 StartServer(); 700 StartServer();
715 701
716 client_->Connect(); 702 client_->Connect();
717 if (client_supported_versions_[0] >= QUIC_VERSION_18 &&
718 negotiated_version_ <= QUIC_VERSION_16) {
719 // If the version negotiation has resulted in a downgrade, then the client
720 // must wait for the handshake to complete before sending any data.
721 // Otherwise it may have queued frames which will trigger a
722 // DFATAL when they are serialized after the downgrade.
723 client_->client()->WaitForCryptoHandshakeConfirmed();
724 }
725 ASSERT_TRUE(client_->client()->connected()); 703 ASSERT_TRUE(client_->client()->connected());
726 EXPECT_EQ(kFooResponseBody, client_->SendCustomSynchronousRequest(request)); 704 EXPECT_EQ(kFooResponseBody, client_->SendCustomSynchronousRequest(request));
727 EXPECT_EQ(2, client_->client()->session()->GetNumSentClientHellos()); 705 EXPECT_EQ(2, client_->client()->session()->GetNumSentClientHellos());
728 VerifyCleanConnection(false); 706 VerifyCleanConnection(false);
729 } 707 }
730 708
731 TEST_P(EndToEndTest, CorrectlyConfiguredFec) { 709 TEST_P(EndToEndTest, CorrectlyConfiguredFec) {
732 ASSERT_TRUE(Initialize()); 710 ASSERT_TRUE(Initialize());
733 client_->client()->WaitForCryptoHandshakeConfirmed(); 711 client_->client()->WaitForCryptoHandshakeConfirmed();
734 server_thread_->WaitForCryptoHandshakeConfirmed(); 712 server_thread_->WaitForCryptoHandshakeConfirmed();
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after
863 841
864 // By default the stream protects itself from writes after terminte is set. 842 // By default the stream protects itself from writes after terminte is set.
865 // Override this to test the server handling buggy clients. 843 // Override this to test the server handling buggy clients.
866 ReliableQuicStreamPeer::SetWriteSideClosed( 844 ReliableQuicStreamPeer::SetWriteSideClosed(
867 false, client_->GetOrCreateStream()); 845 false, client_->GetOrCreateStream());
868 846
869 EXPECT_DFATAL(client_->SendData("eep", true), "Fin already buffered"); 847 EXPECT_DFATAL(client_->SendData("eep", true), "Fin already buffered");
870 } 848 }
871 849
872 TEST_P(EndToEndTest, Timeout) { 850 TEST_P(EndToEndTest, Timeout) {
873 client_config_.set_idle_connection_state_lifetime( 851 client_config_.SetIdleConnectionStateLifetime(
874 QuicTime::Delta::FromMicroseconds(500), 852 QuicTime::Delta::FromMicroseconds(500),
875 QuicTime::Delta::FromMicroseconds(500)); 853 QuicTime::Delta::FromMicroseconds(500));
876 // Note: we do NOT ASSERT_TRUE: we may time out during initial handshake: 854 // Note: we do NOT ASSERT_TRUE: we may time out during initial handshake:
877 // that's enough to validate timeout in this case. 855 // that's enough to validate timeout in this case.
878 Initialize(); 856 Initialize();
879 while (client_->client()->connected()) { 857 while (client_->client()->connected()) {
880 client_->client()->WaitForEvents(); 858 client_->client()->WaitForEvents();
881 } 859 }
882 } 860 }
883 861
884 TEST_P(EndToEndTest, NegotiateMaxOpenStreams) { 862 TEST_P(EndToEndTest, NegotiateMaxOpenStreams) {
885 // Negotiate 1 max open stream. 863 // Negotiate 1 max open stream.
886 client_config_.set_max_streams_per_connection(1, 1); 864 client_config_.SetMaxStreamsPerConnection(1, 1);
887 ASSERT_TRUE(Initialize()); 865 ASSERT_TRUE(Initialize());
888 client_->client()->WaitForCryptoHandshakeConfirmed(); 866 client_->client()->WaitForCryptoHandshakeConfirmed();
889 867
890 // Make the client misbehave after negotiation. 868 // Make the client misbehave after negotiation.
891 QuicSessionPeer::SetMaxOpenStreams(client_->client()->session(), 10); 869 QuicSessionPeer::SetMaxOpenStreams(client_->client()->session(), 10);
892 870
893 HTTPMessage request(HttpConstants::HTTP_1_1, 871 HTTPMessage request(HttpConstants::HTTP_1_1,
894 HttpConstants::POST, "/foo"); 872 HttpConstants::POST, "/foo");
895 request.AddHeader("content-length", "3"); 873 request.AddHeader("content-length", "3");
896 request.set_has_complete_message(false); 874 request.set_has_complete_message(false);
(...skipping 28 matching lines...) Expand all
925 } 903 }
926 904
927 EXPECT_EQ(expected_congestion_control_type, 905 EXPECT_EQ(expected_congestion_control_type,
928 QuicSentPacketManagerPeer::GetCongestionControlAlgorithm( 906 QuicSentPacketManagerPeer::GetCongestionControlAlgorithm(
929 *GetSentPacketManagerFromFirstServerSession()) 907 *GetSentPacketManagerFromFirstServerSession())
930 ->GetCongestionControlType()); 908 ->GetCongestionControlType());
931 } 909 }
932 910
933 TEST_P(EndToEndTest, LimitMaxOpenStreams) { 911 TEST_P(EndToEndTest, LimitMaxOpenStreams) {
934 // Server limits the number of max streams to 2. 912 // Server limits the number of max streams to 2.
935 server_config_.set_max_streams_per_connection(2, 2); 913 server_config_.SetMaxStreamsPerConnection(2, 2);
936 // Client tries to negotiate for 10. 914 // Client tries to negotiate for 10.
937 client_config_.set_max_streams_per_connection(10, 5); 915 client_config_.SetMaxStreamsPerConnection(10, 5);
938 916
939 ASSERT_TRUE(Initialize()); 917 ASSERT_TRUE(Initialize());
940 client_->client()->WaitForCryptoHandshakeConfirmed(); 918 client_->client()->WaitForCryptoHandshakeConfirmed();
941 QuicConfig* client_negotiated_config = client_->client()->session()->config(); 919 QuicConfig* client_negotiated_config = client_->client()->session()->config();
942 EXPECT_EQ(2u, client_negotiated_config->max_streams_per_connection()); 920 EXPECT_EQ(2u, client_negotiated_config->MaxStreamsPerConnection());
943 } 921 }
944 922
945 TEST_P(EndToEndTest, LimitCongestionWindowAndRTT) { 923 TEST_P(EndToEndTest, LimitCongestionWindowAndRTT) {
946 // Client tries to request twice the server's max initial window, and the 924 // Client tries to request twice the server's max initial window, and the
947 // server limits it to the max. 925 // server limits it to the max.
948 client_config_.SetInitialCongestionWindowToSend(2 * kMaxInitialWindow); 926 client_config_.SetInitialCongestionWindowToSend(2 * kMaxInitialWindow);
949 client_config_.SetInitialRoundTripTimeUsToSend(1000); 927 client_config_.SetInitialRoundTripTimeUsToSend(1000);
950 928
951 ASSERT_TRUE(Initialize()); 929 ASSERT_TRUE(Initialize());
952 client_->client()->WaitForCryptoHandshakeConfirmed(); 930 client_->client()->WaitForCryptoHandshakeConfirmed();
(...skipping 432 matching lines...) Expand 10 before | Expand all | Expand 10 after
1385 QuicSession* session = dispatcher->session_map().begin()->second; 1363 QuicSession* session = dispatcher->session_map().begin()->second;
1386 EXPECT_EQ(0u, QuicSessionPeer::GetLocallyClosedStreamsHighestOffset( 1364 EXPECT_EQ(0u, QuicSessionPeer::GetLocallyClosedStreamsHighestOffset(
1387 session).size()); 1365 session).size());
1388 server_thread_->Resume(); 1366 server_thread_->Resume();
1389 } 1367 }
1390 1368
1391 } // namespace 1369 } // namespace
1392 } // namespace test 1370 } // namespace test
1393 } // namespace tools 1371 } // namespace tools
1394 } // namespace net 1372 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/test_tools/quic_test_utils.h ('k') | net/tools/quic/quic_client_session_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698