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

Side by Side Diff: net/quic/congestion_control/tcp_cubic_sender_test.cc

Issue 608003002: Add a test to ensure QUIC's TcpCubicSender always allows packets to be (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@Merge_QuicSentPacketManager_DebugDelegate_76088200
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 | « no previous file | no next file » | 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 <algorithm> 5 #include <algorithm>
6 6
7 #include "base/logging.h" 7 #include "base/logging.h"
8 #include "base/memory/scoped_ptr.h" 8 #include "base/memory/scoped_ptr.h"
9 #include "net/quic/congestion_control/rtt_stats.h" 9 #include "net/quic/congestion_control/rtt_stats.h"
10 #include "net/quic/congestion_control/tcp_cubic_sender.h" 10 #include "net/quic/congestion_control/tcp_cubic_sender.h"
11 #include "net/quic/congestion_control/tcp_receiver.h" 11 #include "net/quic/congestion_control/tcp_receiver.h"
12 #include "net/quic/crypto/crypto_protocol.h" 12 #include "net/quic/crypto/crypto_protocol.h"
13 #include "net/quic/quic_utils.h" 13 #include "net/quic/quic_utils.h"
14 #include "net/quic/test_tools/mock_clock.h" 14 #include "net/quic/test_tools/mock_clock.h"
15 #include "net/quic/test_tools/quic_config_peer.h" 15 #include "net/quic/test_tools/quic_config_peer.h"
16 #include "testing/gtest/include/gtest/gtest.h" 16 #include "testing/gtest/include/gtest/gtest.h"
17 17
18 using std::make_pair; 18 using std::make_pair;
19 using std::min; 19 using std::min;
20 20
21 namespace net { 21 namespace net {
22 namespace test { 22 namespace test {
23 23
24 const uint32 kDefaultWindowTCP = 10 * kDefaultTCPMSS; 24 const int64 kInitialCongestionWindow = 10;
25 const uint32 kDefaultWindowTCP = kInitialCongestionWindow * kDefaultTCPMSS;
25 26
26 // TODO(ianswett): Remove 10000 once b/10075719 is fixed. 27 // TODO(ianswett): Remove 10000 once b/10075719 is fixed.
27 const QuicTcpCongestionWindow kDefaultMaxCongestionWindowTCP = 10000; 28 const QuicTcpCongestionWindow kDefaultMaxCongestionWindowTCP = 10000;
28 29
29 class TcpCubicSenderPeer : public TcpCubicSender { 30 class TcpCubicSenderPeer : public TcpCubicSender {
30 public: 31 public:
31 TcpCubicSenderPeer(const QuicClock* clock, 32 TcpCubicSenderPeer(const QuicClock* clock,
32 bool reno, 33 bool reno,
33 QuicTcpCongestionWindow max_tcp_congestion_window) 34 QuicTcpCongestionWindow max_tcp_congestion_window)
34 : TcpCubicSender( 35 : TcpCubicSender(
(...skipping 257 matching lines...) Expand 10 before | Expand all | Expand 10 after
292 AckNPackets(1); 293 AckNPackets(1);
293 expected_send_window += kDefaultTCPMSS; 294 expected_send_window += kDefaultTCPMSS;
294 EXPECT_EQ(expected_send_window, sender_->GetCongestionWindow()); 295 EXPECT_EQ(expected_send_window, sender_->GetCongestionWindow());
295 296
296 // Now RTO and ensure slow start gets reset. 297 // Now RTO and ensure slow start gets reset.
297 EXPECT_TRUE(sender_->hybrid_slow_start().started()); 298 EXPECT_TRUE(sender_->hybrid_slow_start().started());
298 sender_->OnRetransmissionTimeout(true); 299 sender_->OnRetransmissionTimeout(true);
299 EXPECT_FALSE(sender_->hybrid_slow_start().started()); 300 EXPECT_FALSE(sender_->hybrid_slow_start().started());
300 } 301 }
301 302
303 TEST_F(TcpCubicSenderTest, NoPRRWhenLessThanOnePacketInFlight) {
304 SendAvailableSendWindow();
305 LoseNPackets(kInitialCongestionWindow - 1);
306 AckNPackets(1);
307 // PRR will allow 2 packets for every ack during recovery.
308 EXPECT_EQ(2, SendAvailableSendWindow());
309 // Simulate abandoning all packets by supplying a bytes_in_flight of 0.
310 // PRR should now allow a packet to be sent, even though prr's state
311 // variables believe it has sent enough packets.
312 EXPECT_EQ(QuicTime::Delta::Zero(),
313 sender_->TimeUntilSend(clock_.Now(), 0, HAS_RETRANSMITTABLE_DATA));
314 }
315
302 TEST_F(TcpCubicSenderTest, SlowStartPacketLossPRR) { 316 TEST_F(TcpCubicSenderTest, SlowStartPacketLossPRR) {
303 // Test based on the first example in RFC6937. 317 // Test based on the first example in RFC6937.
304 // Ack 10 packets in 5 acks to raise the CWND to 20, as in the example. 318 // Ack 10 packets in 5 acks to raise the CWND to 20, as in the example.
305 const int kNumberOfAcks = 5; 319 const int kNumberOfAcks = 5;
306 for (int i = 0; i < kNumberOfAcks; ++i) { 320 for (int i = 0; i < kNumberOfAcks; ++i) {
307 // Send our full send window. 321 // Send our full send window.
308 SendAvailableSendWindow(); 322 SendAvailableSendWindow();
309 AckNPackets(2); 323 AckNPackets(2);
310 } 324 }
311 SendAvailableSendWindow(); 325 SendAvailableSendWindow();
(...skipping 303 matching lines...) Expand 10 before | Expand all | Expand 10 after
615 } 629 }
616 630
617 // Next ack should cause congestion window to grow by 1MSS. 631 // Next ack should cause congestion window to grow by 1MSS.
618 AckNPackets(2); 632 AckNPackets(2);
619 expected_send_window += kDefaultTCPMSS; 633 expected_send_window += kDefaultTCPMSS;
620 EXPECT_EQ(expected_send_window, sender_->GetCongestionWindow()); 634 EXPECT_EQ(expected_send_window, sender_->GetCongestionWindow());
621 } 635 }
622 636
623 } // namespace test 637 } // namespace test
624 } // namespace net 638 } // namespace net
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698