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

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

Issue 1424653008: Make QUIC stateless rejects work in the face of packet loss by storing the SREJ packet(s) in the Qu… (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@106432163
Patch Set: Created 5 years, 1 month 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_connection_peer.cc ('k') | net/tools/quic/quic_dispatcher.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 456 matching lines...) Expand 10 before | Expand all | Expand 10 after
467 // Calls server_thread_ Pause() and Resume(), which may only be called once 467 // Calls server_thread_ Pause() and Resume(), which may only be called once
468 // per test. 468 // per test.
469 void VerifyCleanConnection(bool /*had_packet_loss*/) { 469 void VerifyCleanConnection(bool /*had_packet_loss*/) {
470 QuicConnectionStats client_stats = 470 QuicConnectionStats client_stats =
471 client_->client()->session()->connection()->GetStats(); 471 client_->client()->session()->connection()->GetStats();
472 // TODO(ianswett): Re-enable this check once b/19572432 is fixed. 472 // TODO(ianswett): Re-enable this check once b/19572432 is fixed.
473 // if (!had_packet_loss) { 473 // if (!had_packet_loss) {
474 // EXPECT_EQ(0u, client_stats.packets_lost); 474 // EXPECT_EQ(0u, client_stats.packets_lost);
475 // } 475 // }
476 EXPECT_EQ(0u, client_stats.packets_discarded); 476 EXPECT_EQ(0u, client_stats.packets_discarded);
477 EXPECT_EQ(0u, client_stats.packets_dropped); 477 // When doing 0-RTT with stateless rejects, the encrypted requests cause
478 // a retranmission of the SREJ packets which are dropped by the client.
479 if (!BothSidesSupportStatelessRejects()) {
480 EXPECT_EQ(0u, client_stats.packets_dropped);
481 }
478 EXPECT_EQ(client_stats.packets_received, client_stats.packets_processed); 482 EXPECT_EQ(client_stats.packets_received, client_stats.packets_processed);
479 483
480 const int num_expected_stateless_rejects = 484 const int num_expected_stateless_rejects =
481 (BothSidesSupportStatelessRejects() && 485 (BothSidesSupportStatelessRejects() &&
482 client_->client()->session()->GetNumSentClientHellos() > 0) 486 client_->client()->session()->GetNumSentClientHellos() > 0)
483 ? 1 487 ? 1
484 : 0; 488 : 0;
485 EXPECT_EQ(num_expected_stateless_rejects, 489 EXPECT_EQ(num_expected_stateless_rejects,
486 client_->client()->num_stateless_rejects_received()); 490 client_->client()->num_stateless_rejects_received());
487 491
(...skipping 431 matching lines...) Expand 10 before | Expand all | Expand 10 after
919 EXPECT_EQ(expected_num_hellos_latest_session, 923 EXPECT_EQ(expected_num_hellos_latest_session,
920 client_->client()->session()->GetNumSentClientHellos()); 924 client_->client()->session()->GetNumSentClientHellos());
921 EXPECT_EQ(2, client_->client()->GetNumSentClientHellos()); 925 EXPECT_EQ(2, client_->client()->GetNumSentClientHellos());
922 926
923 VerifyCleanConnection(false); 927 VerifyCleanConnection(false);
924 } 928 }
925 929
926 TEST_P(EndToEndTest, StatelessRejectWithPacketLoss) { 930 TEST_P(EndToEndTest, StatelessRejectWithPacketLoss) {
927 // In this test, we intentionally drop the first packet from the 931 // In this test, we intentionally drop the first packet from the
928 // server, which corresponds with the initial REJ/SREJ response from 932 // server, which corresponds with the initial REJ/SREJ response from
929 // the server. The REJ case will succeed, due to redundancy in the 933 // the server.
930 // stateful handshake. The SREJ will fail, because there is
931 // (currently) no way to recover from a loss of the first SREJ, and
932 // all remaining state for the first handshake is black-holed on the
933 // time-wait list.
934 // TODO(jokulik): Once redundant SREJ support is added, this test
935 // should succeed.
936 server_writer_->set_fake_drop_first_n_packets(1); 934 server_writer_->set_fake_drop_first_n_packets(1);
937 // If this test will involve version negotiation then the version 935 ASSERT_TRUE(Initialize());
938 // negotiation packet will be dropped, not the SREJ, and since the
939 // version negotiation packet will be retransmitted the test will
940 // succeed.
941 const bool will_succeed =
942 !BothSidesSupportStatelessRejects() ||
943 negotiated_version_ != client_supported_versions_.front();
944 ASSERT_EQ(will_succeed, Initialize());
945 } 936 }
946 937
947 TEST_P(EndToEndTest, SetInitialReceivedConnectionOptions) { 938 TEST_P(EndToEndTest, SetInitialReceivedConnectionOptions) {
948 QuicTagVector initial_received_options; 939 QuicTagVector initial_received_options;
949 initial_received_options.push_back(kTBBR); 940 initial_received_options.push_back(kTBBR);
950 initial_received_options.push_back(kIW10); 941 initial_received_options.push_back(kIW10);
951 initial_received_options.push_back(kPRST); 942 initial_received_options.push_back(kPRST);
952 EXPECT_TRUE(server_config_.SetInitialReceivedConnectionOptions( 943 EXPECT_TRUE(server_config_.SetInitialReceivedConnectionOptions(
953 initial_received_options)); 944 initial_received_options));
954 945
(...skipping 1155 matching lines...) Expand 10 before | Expand all | Expand 10 after
2110 // There will be buffered data to write in the client's stream. 2101 // There will be buffered data to write in the client's stream.
2111 ReliableQuicStream* stream = client_->client()->session()->GetStream(5); 2102 ReliableQuicStream* stream = client_->client()->session()->GetStream(5);
2112 EXPECT_TRUE(stream != nullptr && stream->HasBufferedData()); 2103 EXPECT_TRUE(stream != nullptr && stream->HasBufferedData());
2113 } 2104 }
2114 } 2105 }
2115 2106
2116 } // namespace 2107 } // namespace
2117 } // namespace test 2108 } // namespace test
2118 } // namespace tools 2109 } // namespace tools
2119 } // namespace net 2110 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/test_tools/quic_connection_peer.cc ('k') | net/tools/quic/quic_dispatcher.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698