| 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 "base/logging.h" | 5 #include "base/logging.h" |
| 6 #include "base/memory/scoped_ptr.h" | 6 #include "base/memory/scoped_ptr.h" |
| 7 #include "net/quic/congestion_control/tcp_cubic_sender.h" | 7 #include "net/quic/congestion_control/tcp_cubic_sender.h" |
| 8 #include "net/quic/congestion_control/tcp_receiver.h" | 8 #include "net/quic/congestion_control/tcp_receiver.h" |
| 9 #include "net/quic/test_tools/mock_clock.h" | 9 #include "net/quic/test_tools/mock_clock.h" |
| 10 #include "testing/gtest/include/gtest/gtest.h" | 10 #include "testing/gtest/include/gtest/gtest.h" |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 68 SendAlgorithmInterface::SentPacketsMap not_used_; | 68 SendAlgorithmInterface::SentPacketsMap not_used_; |
| 69 scoped_ptr<TcpCubicSenderPeer> sender_; | 69 scoped_ptr<TcpCubicSenderPeer> sender_; |
| 70 scoped_ptr<TcpReceiver> receiver_; | 70 scoped_ptr<TcpReceiver> receiver_; |
| 71 QuicPacketSequenceNumber sequence_number_; | 71 QuicPacketSequenceNumber sequence_number_; |
| 72 QuicPacketSequenceNumber acked_sequence_number_; | 72 QuicPacketSequenceNumber acked_sequence_number_; |
| 73 }; | 73 }; |
| 74 | 74 |
| 75 TEST_F(TcpCubicSenderTest, SimpleSender) { | 75 TEST_F(TcpCubicSenderTest, SimpleSender) { |
| 76 QuicCongestionFeedbackFrame feedback; | 76 QuicCongestionFeedbackFrame feedback; |
| 77 // At startup make sure we are at the default. | 77 // At startup make sure we are at the default. |
| 78 EXPECT_EQ(kDefaultWindowTCP, | 78 EXPECT_EQ(kDefaultWindowTCP, sender_->AvailableSendWindow()); |
| 79 sender_->AvailableSendWindow()); | 79 EXPECT_EQ(kDefaultWindowTCP, sender_->GetCongestionWindow()); |
| 80 // At startup make sure we can send. | 80 // At startup make sure we can send. |
| 81 EXPECT_TRUE(sender_->TimeUntilSend(clock_.Now(), | 81 EXPECT_TRUE(sender_->TimeUntilSend(clock_.Now(), |
| 82 NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA, NOT_HANDSHAKE).IsZero()); | 82 NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA, NOT_HANDSHAKE).IsZero()); |
| 83 // Get default QuicCongestionFeedbackFrame from receiver. | 83 // Get default QuicCongestionFeedbackFrame from receiver. |
| 84 ASSERT_TRUE(receiver_->GenerateCongestionFeedback(&feedback)); | 84 ASSERT_TRUE(receiver_->GenerateCongestionFeedback(&feedback)); |
| 85 sender_->OnIncomingQuicCongestionFeedbackFrame(feedback, clock_.Now(), | 85 sender_->OnIncomingQuicCongestionFeedbackFrame(feedback, clock_.Now(), |
| 86 not_used_); | 86 not_used_); |
| 87 // Make sure we can send. | 87 // Make sure we can send. |
| 88 EXPECT_TRUE(sender_->TimeUntilSend(clock_.Now(), | 88 EXPECT_TRUE(sender_->TimeUntilSend(clock_.Now(), |
| 89 NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA, NOT_HANDSHAKE).IsZero()); | 89 NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA, NOT_HANDSHAKE).IsZero()); |
| 90 // And that window is un-affected. | 90 // And that window is un-affected. |
| 91 EXPECT_EQ(kDefaultWindowTCP, sender_->AvailableSendWindow()); | 91 EXPECT_EQ(kDefaultWindowTCP, sender_->AvailableSendWindow()); |
| 92 EXPECT_EQ(kDefaultWindowTCP, sender_->GetCongestionWindow()); |
| 92 | 93 |
| 93 // A retransmit should always return 0. | 94 // A retransmit should always return 0. |
| 94 EXPECT_TRUE(sender_->TimeUntilSend(clock_.Now(), | 95 EXPECT_TRUE(sender_->TimeUntilSend(clock_.Now(), |
| 95 NACK_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA, NOT_HANDSHAKE).IsZero()); | 96 NACK_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA, NOT_HANDSHAKE).IsZero()); |
| 96 } | 97 } |
| 97 | 98 |
| 98 TEST_F(TcpCubicSenderTest, ExponentialSlowStart) { | 99 TEST_F(TcpCubicSenderTest, ExponentialSlowStart) { |
| 99 const int kNumberOfAck = 20; | 100 const int kNumberOfAck = 20; |
| 100 QuicCongestionFeedbackFrame feedback; | 101 QuicCongestionFeedbackFrame feedback; |
| 101 // At startup make sure we can send. | 102 // At startup make sure we can send. |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 139 NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA, NOT_HANDSHAKE).IsZero()); | 140 NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA, NOT_HANDSHAKE).IsZero()); |
| 140 | 141 |
| 141 for (int n = 0; n < kNumberOfAck; ++n) { | 142 for (int n = 0; n < kNumberOfAck; ++n) { |
| 142 // Send our full send window. | 143 // Send our full send window. |
| 143 SendAvailableSendWindow(); | 144 SendAvailableSendWindow(); |
| 144 AckNPackets(2); | 145 AckNPackets(2); |
| 145 } | 146 } |
| 146 QuicByteCount expected_send_window = | 147 QuicByteCount expected_send_window = |
| 147 kDefaultWindowTCP + (kDefaultTCPMSS * 2 * kNumberOfAck); | 148 kDefaultWindowTCP + (kDefaultTCPMSS * 2 * kNumberOfAck); |
| 148 EXPECT_EQ(expected_send_window, sender_->SendWindow()); | 149 EXPECT_EQ(expected_send_window, sender_->SendWindow()); |
| 150 EXPECT_EQ(expected_send_window, sender_->GetCongestionWindow()); |
| 149 // We should now have fallen out of slow start. | 151 // We should now have fallen out of slow start. |
| 150 SendAvailableSendWindow(); | 152 SendAvailableSendWindow(); |
| 151 AckNPackets(2); | 153 AckNPackets(2); |
| 152 expected_send_window += kDefaultTCPMSS; | 154 expected_send_window += kDefaultTCPMSS; |
| 153 EXPECT_EQ(expected_send_window, sender_->SendWindow()); | 155 EXPECT_EQ(expected_send_window, sender_->SendWindow()); |
| 154 | 156 |
| 155 // Testing Reno phase. | 157 // Testing Reno phase. |
| 156 // We should need 141(65*2+1+10) ACK:ed packets before increasing window by | 158 // We should need 141(65*2+1+10) ACK:ed packets before increasing window by |
| 157 // one. | 159 // one. |
| 158 for (int m = 0; m < 70; ++m) { | 160 for (int m = 0; m < 70; ++m) { |
| (...skipping 205 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 364 | 366 |
| 365 // Send a data packet with retransmittable data, and ensure that the | 367 // Send a data packet with retransmittable data, and ensure that the |
| 366 // congestion window has shrunk. | 368 // congestion window has shrunk. |
| 367 sender_->OnPacketSent(clock_.Now(), sequence_number_++, bytes_in_packet, | 369 sender_->OnPacketSent(clock_.Now(), sequence_number_++, bytes_in_packet, |
| 368 NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA); | 370 NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA); |
| 369 EXPECT_GT(send_window, sender_->AvailableSendWindow()); | 371 EXPECT_GT(send_window, sender_->AvailableSendWindow()); |
| 370 } | 372 } |
| 371 | 373 |
| 372 } // namespace test | 374 } // namespace test |
| 373 } // namespace net | 375 } // namespace net |
| OLD | NEW |