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 |