| 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" |
| 11 #include "net/quic/congestion_control/rtt_stats.h" | 11 #include "net/quic/congestion_control/rtt_stats.h" |
| 12 #include "net/quic/quic_protocol.h" | 12 #include "net/quic/quic_protocol.h" |
| 13 #include "net/quic/test_tools/mock_clock.h" | 13 #include "net/quic/test_tools/mock_clock.h" |
| 14 #include "testing/gmock/include/gmock/gmock.h" | 14 #include "testing/gmock/include/gmock/gmock.h" |
| 15 #include "testing/gtest/include/gtest/gtest.h" | 15 #include "testing/gtest/include/gtest/gtest.h" |
| 16 | 16 |
| 17 namespace net { | 17 namespace net { |
| 18 namespace test { | 18 namespace test { |
| 19 | 19 |
| 20 class FixRateReceiverPeer : public FixRateReceiver { | 20 class FixRateReceiverPeer : public FixRateReceiver { |
| 21 public: | 21 public: |
| 22 FixRateReceiverPeer() | 22 FixRateReceiverPeer() : FixRateReceiver() {} |
| 23 : FixRateReceiver() { | |
| 24 } | |
| 25 void SetBitrate(QuicBandwidth fix_rate) { | 23 void SetBitrate(QuicBandwidth fix_rate) { |
| 26 FixRateReceiver::configured_rate_ = fix_rate; | 24 FixRateReceiver::configured_rate_ = fix_rate; |
| 27 } | 25 } |
| 28 }; | 26 }; |
| 29 | 27 |
| 30 class FixRateTest : public ::testing::Test { | 28 class FixRateTest : public ::testing::Test { |
| 31 protected: | 29 protected: |
| 32 FixRateTest() | 30 FixRateTest() |
| 33 : sender_(new FixRateSender(&rtt_stats_)), | 31 : sender_(new FixRateSender(&rtt_stats_)), |
| 34 receiver_(new FixRateReceiverPeer()), | 32 receiver_(new FixRateReceiverPeer()), |
| (...skipping 15 matching lines...) Expand all Loading... |
| 50 receiver_->RecordIncomingPacket(1, 1, timestamp); | 48 receiver_->RecordIncomingPacket(1, 1, timestamp); |
| 51 ASSERT_TRUE(receiver_->GenerateCongestionFeedback(&feedback)); | 49 ASSERT_TRUE(receiver_->GenerateCongestionFeedback(&feedback)); |
| 52 EXPECT_EQ(kFixRate, feedback.type); | 50 EXPECT_EQ(kFixRate, feedback.type); |
| 53 EXPECT_EQ(300000u, feedback.fix_rate.bitrate.ToBytesPerSecond()); | 51 EXPECT_EQ(300000u, feedback.fix_rate.bitrate.ToBytesPerSecond()); |
| 54 } | 52 } |
| 55 | 53 |
| 56 TEST_F(FixRateTest, SenderAPI) { | 54 TEST_F(FixRateTest, SenderAPI) { |
| 57 QuicCongestionFeedbackFrame feedback; | 55 QuicCongestionFeedbackFrame feedback; |
| 58 feedback.type = kFixRate; | 56 feedback.type = kFixRate; |
| 59 feedback.fix_rate.bitrate = QuicBandwidth::FromKBytesPerSecond(300); | 57 feedback.fix_rate.bitrate = QuicBandwidth::FromKBytesPerSecond(300); |
| 60 sender_->OnIncomingQuicCongestionFeedbackFrame(feedback, clock_.Now()); | 58 sender_->OnIncomingQuicCongestionFeedbackFrame(feedback, clock_.Now()); |
| 61 EXPECT_EQ(300000, sender_->BandwidthEstimate().ToBytesPerSecond()); | 59 EXPECT_EQ(300000, sender_->BandwidthEstimate().ToBytesPerSecond()); |
| 62 EXPECT_TRUE(sender_->TimeUntilSend(clock_.Now(), | 60 EXPECT_TRUE( |
| 63 HAS_RETRANSMITTABLE_DATA).IsZero()); | 61 sender_->TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA).IsZero()); |
| 64 | 62 |
| 65 sender_->OnPacketSent(clock_.Now(), 1, kDefaultMaxPacketSize, | 63 sender_->OnPacketSent( |
| 66 HAS_RETRANSMITTABLE_DATA); | 64 clock_.Now(), 1, kDefaultMaxPacketSize, HAS_RETRANSMITTABLE_DATA); |
| 67 EXPECT_TRUE(sender_->TimeUntilSend(clock_.Now(), | 65 EXPECT_TRUE( |
| 68 HAS_RETRANSMITTABLE_DATA).IsZero()); | 66 sender_->TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA).IsZero()); |
| 69 sender_->OnPacketSent(clock_.Now(), 2, kDefaultMaxPacketSize, | 67 sender_->OnPacketSent( |
| 70 HAS_RETRANSMITTABLE_DATA); | 68 clock_.Now(), 2, kDefaultMaxPacketSize, HAS_RETRANSMITTABLE_DATA); |
| 71 sender_->OnPacketSent(clock_.Now(), 3, 600, | 69 sender_->OnPacketSent(clock_.Now(), 3, 600, HAS_RETRANSMITTABLE_DATA); |
| 72 HAS_RETRANSMITTABLE_DATA); | |
| 73 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(10), | 70 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(10), |
| 74 sender_->TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA)); | 71 sender_->TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA)); |
| 75 clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(2)); | 72 clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(2)); |
| 76 EXPECT_EQ(QuicTime::Delta::Infinite(), | 73 EXPECT_EQ(QuicTime::Delta::Infinite(), |
| 77 sender_->TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA)); | 74 sender_->TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA)); |
| 78 clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(8)); | 75 clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(8)); |
| 79 sender_->OnPacketAcked(1, kDefaultMaxPacketSize); | 76 sender_->OnPacketAcked(1, kDefaultMaxPacketSize); |
| 80 sender_->OnPacketAcked(2, kDefaultMaxPacketSize); | 77 sender_->OnPacketAcked(2, kDefaultMaxPacketSize); |
| 81 sender_->OnPacketAcked(3, 600); | 78 sender_->OnPacketAcked(3, 600); |
| 82 EXPECT_TRUE(sender_->TimeUntilSend(clock_.Now(), | 79 EXPECT_TRUE( |
| 83 HAS_RETRANSMITTABLE_DATA).IsZero()); | 80 sender_->TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA).IsZero()); |
| 84 } | 81 } |
| 85 | 82 |
| 86 TEST_F(FixRateTest, FixRatePacing) { | 83 TEST_F(FixRateTest, FixRatePacing) { |
| 87 const QuicByteCount packet_size = 1200; | 84 const QuicByteCount packet_size = 1200; |
| 88 const QuicBandwidth bitrate = QuicBandwidth::FromKBytesPerSecond(240); | 85 const QuicBandwidth bitrate = QuicBandwidth::FromKBytesPerSecond(240); |
| 89 const int64 num_packets = 200; | 86 const int64 num_packets = 200; |
| 90 QuicCongestionFeedbackFrame feedback; | 87 QuicCongestionFeedbackFrame feedback; |
| 91 receiver_->SetBitrate(QuicBandwidth::FromKBytesPerSecond(240)); | 88 receiver_->SetBitrate(QuicBandwidth::FromKBytesPerSecond(240)); |
| 92 ASSERT_TRUE(receiver_->GenerateCongestionFeedback(&feedback)); | 89 ASSERT_TRUE(receiver_->GenerateCongestionFeedback(&feedback)); |
| 93 sender_->OnIncomingQuicCongestionFeedbackFrame(feedback, clock_.Now()); | 90 sender_->OnIncomingQuicCongestionFeedbackFrame(feedback, clock_.Now()); |
| 94 QuicTime acc_advance_time(QuicTime::Zero()); | 91 QuicTime acc_advance_time(QuicTime::Zero()); |
| 95 QuicPacketSequenceNumber sequence_number = 0; | 92 QuicPacketSequenceNumber sequence_number = 0; |
| 96 for (int i = 0; i < num_packets; i += 2) { | 93 for (int i = 0; i < num_packets; i += 2) { |
| 97 EXPECT_TRUE(sender_->TimeUntilSend(clock_.Now(), | 94 EXPECT_TRUE(sender_->TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA) |
| 98 HAS_RETRANSMITTABLE_DATA).IsZero()); | 95 .IsZero()); |
| 99 sender_->OnPacketSent(clock_.Now(), sequence_number++, packet_size, | 96 sender_->OnPacketSent( |
| 100 HAS_RETRANSMITTABLE_DATA); | 97 clock_.Now(), sequence_number++, packet_size, HAS_RETRANSMITTABLE_DATA); |
| 101 EXPECT_TRUE(sender_->TimeUntilSend(clock_.Now(), | 98 EXPECT_TRUE(sender_->TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA) |
| 102 HAS_RETRANSMITTABLE_DATA).IsZero()); | 99 .IsZero()); |
| 103 sender_->OnPacketSent(clock_.Now(), sequence_number++, packet_size, | 100 sender_->OnPacketSent( |
| 104 HAS_RETRANSMITTABLE_DATA); | 101 clock_.Now(), sequence_number++, packet_size, HAS_RETRANSMITTABLE_DATA); |
| 105 QuicTime::Delta advance_time = | 102 QuicTime::Delta advance_time = |
| 106 sender_->TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA); | 103 sender_->TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA); |
| 107 clock_.AdvanceTime(advance_time); | 104 clock_.AdvanceTime(advance_time); |
| 108 sender_->OnPacketAcked(sequence_number - 1, packet_size); | 105 sender_->OnPacketAcked(sequence_number - 1, packet_size); |
| 109 sender_->OnPacketAcked(sequence_number - 2, packet_size); | 106 sender_->OnPacketAcked(sequence_number - 2, packet_size); |
| 110 acc_advance_time = acc_advance_time.Add(advance_time); | 107 acc_advance_time = acc_advance_time.Add(advance_time); |
| 111 } | 108 } |
| 112 EXPECT_EQ(num_packets * packet_size * 1000000 / bitrate.ToBytesPerSecond(), | 109 EXPECT_EQ( |
| 113 static_cast<uint64>(acc_advance_time.Subtract(start_) | 110 num_packets * packet_size * 1000000 / bitrate.ToBytesPerSecond(), |
| 114 .ToMicroseconds())); | 111 static_cast<uint64>(acc_advance_time.Subtract(start_).ToMicroseconds())); |
| 115 } | 112 } |
| 116 | 113 |
| 117 } // namespace test | 114 } // namespace test |
| 118 } // namespace net | 115 } // namespace net |
| OLD | NEW |