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

Side by Side Diff: net/quic/quic_connection_test.cc

Issue 839143002: Roll Chrome into Mojo. (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Rebase Created 5 years, 11 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/quic_connection.cc ('k') | net/quic/quic_crypto_client_stream.h » ('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 "net/quic/quic_connection.h" 5 #include "net/quic/quic_connection.h"
6 6
7 #include "base/basictypes.h" 7 #include "base/basictypes.h"
8 #include "base/bind.h" 8 #include "base/bind.h"
9 #include "base/stl_util.h" 9 #include "base/stl_util.h"
10 #include "net/base/net_errors.h" 10 #include "net/base/net_errors.h"
11 #include "net/quic/congestion_control/loss_detection_interface.h" 11 #include "net/quic/congestion_control/loss_detection_interface.h"
12 #include "net/quic/congestion_control/receive_algorithm_interface.h" 12 #include "net/quic/congestion_control/receive_algorithm_interface.h"
13 #include "net/quic/congestion_control/send_algorithm_interface.h" 13 #include "net/quic/congestion_control/send_algorithm_interface.h"
14 #include "net/quic/crypto/null_encrypter.h" 14 #include "net/quic/crypto/null_encrypter.h"
15 #include "net/quic/crypto/quic_decrypter.h" 15 #include "net/quic/crypto/quic_decrypter.h"
16 #include "net/quic/crypto/quic_encrypter.h" 16 #include "net/quic/crypto/quic_encrypter.h"
17 #include "net/quic/quic_ack_notifier.h"
17 #include "net/quic/quic_flags.h" 18 #include "net/quic/quic_flags.h"
18 #include "net/quic/quic_protocol.h" 19 #include "net/quic/quic_protocol.h"
19 #include "net/quic/quic_utils.h" 20 #include "net/quic/quic_utils.h"
20 #include "net/quic/test_tools/mock_clock.h" 21 #include "net/quic/test_tools/mock_clock.h"
21 #include "net/quic/test_tools/mock_random.h" 22 #include "net/quic/test_tools/mock_random.h"
22 #include "net/quic/test_tools/quic_config_peer.h" 23 #include "net/quic/test_tools/quic_config_peer.h"
23 #include "net/quic/test_tools/quic_connection_peer.h" 24 #include "net/quic/test_tools/quic_connection_peer.h"
24 #include "net/quic/test_tools/quic_framer_peer.h" 25 #include "net/quic/test_tools/quic_framer_peer.h"
25 #include "net/quic/test_tools/quic_packet_creator_peer.h" 26 #include "net/quic/test_tools/quic_packet_creator_peer.h"
26 #include "net/quic/test_tools/quic_sent_packet_manager_peer.h" 27 #include "net/quic/test_tools/quic_sent_packet_manager_peer.h"
27 #include "net/quic/test_tools/quic_test_utils.h" 28 #include "net/quic/test_tools/quic_test_utils.h"
28 #include "net/quic/test_tools/simple_quic_framer.h" 29 #include "net/quic/test_tools/simple_quic_framer.h"
30 #include "net/test/gtest_util.h"
29 #include "testing/gmock/include/gmock/gmock.h" 31 #include "testing/gmock/include/gmock/gmock.h"
30 #include "testing/gtest/include/gtest/gtest.h" 32 #include "testing/gtest/include/gtest/gtest.h"
31 33
32 using base::StringPiece; 34 using base::StringPiece;
33 using std::map; 35 using std::map;
34 using std::string; 36 using std::string;
35 using std::vector; 37 using std::vector;
36 using testing::AnyNumber; 38 using testing::AnyNumber;
37 using testing::AtLeast; 39 using testing::AtLeast;
38 using testing::ContainerEq; 40 using testing::ContainerEq;
(...skipping 4090 matching lines...) Expand 10 before | Expand all | Expand 10 after
4129 ack_header.fec_group = 1; 4131 ack_header.fec_group = 1;
4130 4132
4131 QuicPacket* packet = 4133 QuicPacket* packet =
4132 BuildUnsizedDataPacket(&framer_, ack_header, frames).packet; 4134 BuildUnsizedDataPacket(&framer_, ack_header, frames).packet;
4133 4135
4134 // Take the packet which contains the ACK frame, and construct and deliver an 4136 // Take the packet which contains the ACK frame, and construct and deliver an
4135 // FEC packet which allows the ACK packet to be recovered. 4137 // FEC packet which allows the ACK packet to be recovered.
4136 ProcessFecPacket(2, 1, true, !kEntropyFlag, packet); 4138 ProcessFecPacket(2, 1, true, !kEntropyFlag, packet);
4137 } 4139 }
4138 4140
4139 TEST_P(QuicConnectionTest, NetworkChangeVisitorCallbacksChangeFecState) { 4141 TEST_P(QuicConnectionTest, NetworkChangeVisitorCwndCallbackChangesFecState) {
4140 QuicPacketCreator* creator = 4142 QuicPacketCreator* creator =
4141 QuicConnectionPeer::GetPacketCreator(&connection_); 4143 QuicConnectionPeer::GetPacketCreator(&connection_);
4142 size_t max_packets_per_fec_group = creator->max_packets_per_fec_group(); 4144 size_t max_packets_per_fec_group = creator->max_packets_per_fec_group();
4143 4145
4144 QuicSentPacketManager::NetworkChangeVisitor* visitor = 4146 QuicSentPacketManager::NetworkChangeVisitor* visitor =
4145 QuicSentPacketManagerPeer::GetNetworkChangeVisitor( 4147 QuicSentPacketManagerPeer::GetNetworkChangeVisitor(
4146 QuicConnectionPeer::GetSentPacketManager(&connection_)); 4148 QuicConnectionPeer::GetSentPacketManager(&connection_));
4147 EXPECT_TRUE(visitor); 4149 EXPECT_TRUE(visitor);
4148 4150
4149 // Increase FEC group size by increasing congestion window to a large number. 4151 // Increase FEC group size by increasing congestion window to a large number.
4150 EXPECT_CALL(*send_algorithm_, GetCongestionWindow()).WillRepeatedly( 4152 EXPECT_CALL(*send_algorithm_, GetCongestionWindow()).WillRepeatedly(
4151 Return(1000 * kDefaultTCPMSS)); 4153 Return(1000 * kDefaultTCPMSS));
4152 visitor->OnCongestionWindowChange(); 4154 visitor->OnCongestionWindowChange();
4153 EXPECT_LT(max_packets_per_fec_group, creator->max_packets_per_fec_group()); 4155 EXPECT_LT(max_packets_per_fec_group, creator->max_packets_per_fec_group());
4154 } 4156 }
4155 4157
4158 TEST_P(QuicConnectionTest, NetworkChangeVisitorConfigCallbackChangesFecState) {
4159 QuicSentPacketManager* sent_packet_manager =
4160 QuicConnectionPeer::GetSentPacketManager(&connection_);
4161 QuicSentPacketManager::NetworkChangeVisitor* visitor =
4162 QuicSentPacketManagerPeer::GetNetworkChangeVisitor(sent_packet_manager);
4163 EXPECT_TRUE(visitor);
4164
4165 QuicPacketGenerator* generator =
4166 QuicConnectionPeer::GetPacketGenerator(&connection_);
4167 EXPECT_EQ(QuicTime::Delta::Zero(), generator->fec_timeout());
4168
4169 // Verify that sending a config with a new initial rtt changes fec timeout.
4170 // Create and process a config with a non-zero initial RTT.
4171 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _, _));
4172 QuicConfig config;
4173 config.SetInitialRoundTripTimeUsToSend(300000);
4174 connection_.SetFromConfig(config);
4175 EXPECT_LT(QuicTime::Delta::Zero(), generator->fec_timeout());
4176 }
4177
4178 TEST_P(QuicConnectionTest, NetworkChangeVisitorRttCallbackChangesFecState) {
4179 // Verify that sending a config with a new initial rtt changes fec timeout.
4180 QuicSentPacketManager* sent_packet_manager =
4181 QuicConnectionPeer::GetSentPacketManager(&connection_);
4182 QuicSentPacketManager::NetworkChangeVisitor* visitor =
4183 QuicSentPacketManagerPeer::GetNetworkChangeVisitor(sent_packet_manager);
4184 EXPECT_TRUE(visitor);
4185
4186 QuicPacketGenerator* generator =
4187 QuicConnectionPeer::GetPacketGenerator(&connection_);
4188 EXPECT_EQ(QuicTime::Delta::Zero(), generator->fec_timeout());
4189
4190 // Increase FEC timeout by increasing RTT.
4191 RttStats* rtt_stats =
4192 QuicSentPacketManagerPeer::GetRttStats(sent_packet_manager);
4193 rtt_stats->UpdateRtt(QuicTime::Delta::FromMilliseconds(300),
4194 QuicTime::Delta::Zero(), QuicTime::Zero());
4195 visitor->OnRttChange();
4196 EXPECT_LT(QuicTime::Delta::Zero(), generator->fec_timeout());
4197 }
4198
4156 class MockQuicConnectionDebugVisitor 4199 class MockQuicConnectionDebugVisitor
4157 : public QuicConnectionDebugVisitor { 4200 : public QuicConnectionDebugVisitor {
4158 public: 4201 public:
4159 MOCK_METHOD1(OnFrameAddedToPacket, 4202 MOCK_METHOD1(OnFrameAddedToPacket,
4160 void(const QuicFrame&)); 4203 void(const QuicFrame&));
4161 4204
4162 MOCK_METHOD6(OnPacketSent, 4205 MOCK_METHOD6(OnPacketSent,
4163 void(const SerializedPacket&, 4206 void(const SerializedPacket&,
4164 QuicPacketSequenceNumber, 4207 QuicPacketSequenceNumber,
4165 EncryptionLevel, 4208 EncryptionLevel,
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
4241 4284
4242 // Cancel alarm, and try again with BLOCKED frame. 4285 // Cancel alarm, and try again with BLOCKED frame.
4243 ack_alarm->Cancel(); 4286 ack_alarm->Cancel();
4244 QuicBlockedFrame blocked; 4287 QuicBlockedFrame blocked;
4245 blocked.stream_id = 3; 4288 blocked.stream_id = 3;
4246 EXPECT_CALL(visitor_, OnBlockedFrames(_)); 4289 EXPECT_CALL(visitor_, OnBlockedFrames(_));
4247 ProcessFramePacket(QuicFrame(&blocked)); 4290 ProcessFramePacket(QuicFrame(&blocked));
4248 EXPECT_TRUE(ack_alarm->IsSet()); 4291 EXPECT_TRUE(ack_alarm->IsSet());
4249 } 4292 }
4250 4293
4294 TEST_P(QuicConnectionTest, NoDataNoFin) {
4295 ValueRestore<bool> old_flag(&FLAGS_quic_empty_data_no_fin_early_return, true);
4296 // Make sure that a call to SendStreamWithData, with no data and no FIN, does
4297 // not result in a QuicAckNotifier being used-after-free (fail under ASAN).
4298 // Regression test for b/18594622
4299 scoped_refptr<MockAckNotifierDelegate> delegate(new MockAckNotifierDelegate);
4300 EXPECT_DFATAL(
4301 connection_.SendStreamDataWithString(3, "", 0, !kFin, delegate.get()),
4302 "Attempt to send empty stream frame");
4303 }
4304
4251 } // namespace 4305 } // namespace
4252 } // namespace test 4306 } // namespace test
4253 } // namespace net 4307 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/quic_connection.cc ('k') | net/quic/quic_crypto_client_stream.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698