| 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 // Test for FixRate sender and receiver. | 5 // Test for FixRate sender and receiver. |
| 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/fix_rate_receiver.h" | 9 #include "net/quic/congestion_control/fix_rate_receiver.h" |
| 10 #include "net/quic/congestion_control/fix_rate_sender.h" | 10 #include "net/quic/congestion_control/fix_rate_sender.h" |
| (...skipping 11 matching lines...) Expand all Loading... |
| 22 : FixRateReceiver() { | 22 : FixRateReceiver() { |
| 23 } | 23 } |
| 24 void SetBitrate(QuicBandwidth fix_rate) { | 24 void SetBitrate(QuicBandwidth fix_rate) { |
| 25 FixRateReceiver::configured_rate_ = fix_rate; | 25 FixRateReceiver::configured_rate_ = fix_rate; |
| 26 } | 26 } |
| 27 }; | 27 }; |
| 28 | 28 |
| 29 class FixRateTest : public ::testing::Test { | 29 class FixRateTest : public ::testing::Test { |
| 30 protected: | 30 protected: |
| 31 FixRateTest() | 31 FixRateTest() |
| 32 : rtt_(QuicTime::Delta::FromMilliseconds(30)), | 32 : sender_(new FixRateSender(&clock_)), |
| 33 sender_(new FixRateSender(&clock_)), | |
| 34 receiver_(new FixRateReceiverPeer()), | 33 receiver_(new FixRateReceiverPeer()), |
| 35 start_(clock_.Now()) { | 34 start_(clock_.Now()) { |
| 36 // Make sure clock does not start at 0. | 35 // Make sure clock does not start at 0. |
| 37 clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(2)); | 36 clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(2)); |
| 38 } | 37 } |
| 39 const QuicTime::Delta rtt_; | |
| 40 MockClock clock_; | 38 MockClock clock_; |
| 41 SendAlgorithmInterface::SentPacketsMap unused_packet_map_; | 39 SendAlgorithmInterface::SentPacketsMap unused_packet_map_; |
| 42 scoped_ptr<FixRateSender> sender_; | 40 scoped_ptr<FixRateSender> sender_; |
| 43 scoped_ptr<FixRateReceiverPeer> receiver_; | 41 scoped_ptr<FixRateReceiverPeer> receiver_; |
| 44 const QuicTime start_; | 42 const QuicTime start_; |
| 45 }; | 43 }; |
| 46 | 44 |
| 47 TEST_F(FixRateTest, ReceiverAPI) { | 45 TEST_F(FixRateTest, ReceiverAPI) { |
| 48 QuicCongestionFeedbackFrame feedback; | 46 QuicCongestionFeedbackFrame feedback; |
| 49 QuicTime timestamp(QuicTime::Zero()); | 47 QuicTime timestamp(QuicTime::Zero()); |
| (...skipping 21 matching lines...) Expand all Loading... |
| 71 NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA); | 69 NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA); |
| 72 sender_->OnPacketSent(clock_.Now(), 3, 600, NOT_RETRANSMISSION, | 70 sender_->OnPacketSent(clock_.Now(), 3, 600, NOT_RETRANSMISSION, |
| 73 HAS_RETRANSMITTABLE_DATA); | 71 HAS_RETRANSMITTABLE_DATA); |
| 74 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(10), | 72 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(10), |
| 75 sender_->TimeUntilSend(clock_.Now(), | 73 sender_->TimeUntilSend(clock_.Now(), |
| 76 NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA, NOT_HANDSHAKE)); | 74 NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA, NOT_HANDSHAKE)); |
| 77 clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(2)); | 75 clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(2)); |
| 78 EXPECT_EQ(QuicTime::Delta::Infinite(), sender_->TimeUntilSend(clock_.Now(), | 76 EXPECT_EQ(QuicTime::Delta::Infinite(), sender_->TimeUntilSend(clock_.Now(), |
| 79 NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA, NOT_HANDSHAKE)); | 77 NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA, NOT_HANDSHAKE)); |
| 80 clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(8)); | 78 clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(8)); |
| 81 sender_->OnPacketAcked(1, kDefaultMaxPacketSize, rtt_); | 79 sender_->OnPacketAcked(1, kDefaultMaxPacketSize); |
| 82 sender_->OnPacketAcked(2, kDefaultMaxPacketSize, rtt_); | 80 sender_->OnPacketAcked(2, kDefaultMaxPacketSize); |
| 83 sender_->OnPacketAcked(3, 600, rtt_); | 81 sender_->OnPacketAcked(3, 600); |
| 84 EXPECT_TRUE(sender_->TimeUntilSend(clock_.Now(), | 82 EXPECT_TRUE(sender_->TimeUntilSend(clock_.Now(), |
| 85 NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA, NOT_HANDSHAKE).IsZero()); | 83 NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA, NOT_HANDSHAKE).IsZero()); |
| 86 } | 84 } |
| 87 | 85 |
| 88 TEST_F(FixRateTest, FixRatePacing) { | 86 TEST_F(FixRateTest, FixRatePacing) { |
| 89 const QuicByteCount packet_size = 1200; | 87 const QuicByteCount packet_size = 1200; |
| 90 const QuicBandwidth bitrate = QuicBandwidth::FromKBytesPerSecond(240); | 88 const QuicBandwidth bitrate = QuicBandwidth::FromKBytesPerSecond(240); |
| 91 const int64 num_packets = 200; | 89 const int64 num_packets = 200; |
| 92 QuicCongestionFeedbackFrame feedback; | 90 QuicCongestionFeedbackFrame feedback; |
| 93 receiver_->SetBitrate(QuicBandwidth::FromKBytesPerSecond(240)); | 91 receiver_->SetBitrate(QuicBandwidth::FromKBytesPerSecond(240)); |
| 94 ASSERT_TRUE(receiver_->GenerateCongestionFeedback(&feedback)); | 92 ASSERT_TRUE(receiver_->GenerateCongestionFeedback(&feedback)); |
| 95 sender_->OnIncomingQuicCongestionFeedbackFrame(feedback, clock_.Now(), | 93 sender_->OnIncomingQuicCongestionFeedbackFrame(feedback, clock_.Now(), |
| 96 unused_packet_map_); | 94 unused_packet_map_); |
| 97 QuicTime acc_advance_time(QuicTime::Zero()); | 95 QuicTime acc_advance_time(QuicTime::Zero()); |
| 98 QuicPacketSequenceNumber sequence_number = 0; | 96 QuicPacketSequenceNumber sequence_number = 0; |
| 99 for (int i = 0; i < num_packets; i += 2) { | 97 for (int i = 0; i < num_packets; i += 2) { |
| 100 EXPECT_TRUE(sender_->TimeUntilSend(clock_.Now(), | 98 EXPECT_TRUE(sender_->TimeUntilSend(clock_.Now(), |
| 101 NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA, | 99 NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA, |
| 102 NOT_HANDSHAKE).IsZero()); | 100 NOT_HANDSHAKE).IsZero()); |
| 103 sender_->OnPacketSent(clock_.Now(), sequence_number++, packet_size, | 101 sender_->OnPacketSent(clock_.Now(), sequence_number++, packet_size, |
| 104 NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA); | 102 NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA); |
| 105 EXPECT_TRUE(sender_->TimeUntilSend(clock_.Now(), | 103 EXPECT_TRUE(sender_->TimeUntilSend(clock_.Now(), |
| 106 NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA, | 104 NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA, |
| 107 NOT_HANDSHAKE).IsZero()); | 105 NOT_HANDSHAKE).IsZero()); |
| 108 sender_->OnPacketSent(clock_.Now(), sequence_number++, packet_size, | 106 sender_->OnPacketSent(clock_.Now(), sequence_number++, packet_size, |
| 109 NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA); | 107 NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA); |
| 110 QuicTime::Delta advance_time = sender_->TimeUntilSend(clock_.Now(), | 108 QuicTime::Delta advance_time = sender_->TimeUntilSend(clock_.Now(), |
| 111 NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA, NOT_HANDSHAKE); | 109 NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA, NOT_HANDSHAKE); |
| 112 clock_.AdvanceTime(advance_time); | 110 clock_.AdvanceTime(advance_time); |
| 113 sender_->OnPacketAcked(sequence_number - 1, packet_size, rtt_); | 111 sender_->OnPacketAcked(sequence_number - 1, packet_size); |
| 114 sender_->OnPacketAcked(sequence_number - 2, packet_size, rtt_); | 112 sender_->OnPacketAcked(sequence_number - 2, packet_size); |
| 115 acc_advance_time = acc_advance_time.Add(advance_time); | 113 acc_advance_time = acc_advance_time.Add(advance_time); |
| 116 } | 114 } |
| 117 EXPECT_EQ(num_packets * packet_size * 1000000 / bitrate.ToBytesPerSecond(), | 115 EXPECT_EQ(num_packets * packet_size * 1000000 / bitrate.ToBytesPerSecond(), |
| 118 static_cast<uint64>(acc_advance_time.Subtract(start_) | 116 static_cast<uint64>(acc_advance_time.Subtract(start_) |
| 119 .ToMicroseconds())); | 117 .ToMicroseconds())); |
| 120 } | 118 } |
| 121 | 119 |
| 122 } // namespace test | 120 } // namespace test |
| 123 } // namespace net | 121 } // namespace net |
| OLD | NEW |