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 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
57 } | 57 } |
58 | 58 |
59 TEST_F(FixRateTest, SenderAPI) { | 59 TEST_F(FixRateTest, SenderAPI) { |
60 QuicCongestionFeedbackFrame feedback; | 60 QuicCongestionFeedbackFrame feedback; |
61 feedback.type = kFixRate; | 61 feedback.type = kFixRate; |
62 feedback.fix_rate.bitrate = QuicBandwidth::FromKBytesPerSecond(300); | 62 feedback.fix_rate.bitrate = QuicBandwidth::FromKBytesPerSecond(300); |
63 sender_->OnIncomingQuicCongestionFeedbackFrame(feedback, clock_.Now(), | 63 sender_->OnIncomingQuicCongestionFeedbackFrame(feedback, clock_.Now(), |
64 unused_bandwidth_, unused_packet_map_); | 64 unused_bandwidth_, unused_packet_map_); |
65 EXPECT_EQ(300000, sender_->BandwidthEstimate().ToBytesPerSecond()); | 65 EXPECT_EQ(300000, sender_->BandwidthEstimate().ToBytesPerSecond()); |
66 EXPECT_TRUE(sender_->TimeUntilSend( | 66 EXPECT_TRUE(sender_->TimeUntilSend( |
67 clock_.Now(), NOT_RETRANSMISSION, NO_RETRANSMITTABLE_DATA).IsZero()); | 67 clock_.Now(), NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA).IsZero()); |
68 sender_->SentPacket(clock_.Now(), 1, kMaxPacketSize, NOT_RETRANSMISSION); | 68 sender_->SentPacket(clock_.Now(), 1, kMaxPacketSize, NOT_RETRANSMISSION); |
69 EXPECT_TRUE(sender_->TimeUntilSend( | 69 EXPECT_TRUE(sender_->TimeUntilSend( |
70 clock_.Now(), NOT_RETRANSMISSION, NO_RETRANSMITTABLE_DATA).IsZero()); | 70 clock_.Now(), NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA).IsZero()); |
71 sender_->SentPacket(clock_.Now(), 2, kMaxPacketSize, NOT_RETRANSMISSION); | 71 sender_->SentPacket(clock_.Now(), 2, kMaxPacketSize, NOT_RETRANSMISSION); |
72 sender_->SentPacket(clock_.Now(), 3, 600, NOT_RETRANSMISSION); | 72 sender_->SentPacket(clock_.Now(), 3, 600, NOT_RETRANSMISSION); |
73 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(10), sender_->TimeUntilSend( | 73 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(10), sender_->TimeUntilSend( |
74 clock_.Now(), NOT_RETRANSMISSION, NO_RETRANSMITTABLE_DATA)); | 74 clock_.Now(), NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA)); |
75 clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(2)); | 75 clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(2)); |
76 EXPECT_EQ(QuicTime::Delta::Infinite(), sender_->TimeUntilSend( | 76 EXPECT_EQ(QuicTime::Delta::Infinite(), sender_->TimeUntilSend( |
77 clock_.Now(), NOT_RETRANSMISSION, NO_RETRANSMITTABLE_DATA)); | 77 clock_.Now(), NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA)); |
78 clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(8)); | 78 clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(8)); |
79 sender_->OnIncomingAck(1, kMaxPacketSize, rtt_); | 79 sender_->OnIncomingAck(1, kMaxPacketSize, rtt_); |
80 sender_->OnIncomingAck(2, kMaxPacketSize, rtt_); | 80 sender_->OnIncomingAck(2, kMaxPacketSize, rtt_); |
81 sender_->OnIncomingAck(3, 600, rtt_); | 81 sender_->OnIncomingAck(3, 600, rtt_); |
82 EXPECT_TRUE(sender_->TimeUntilSend( | 82 EXPECT_TRUE(sender_->TimeUntilSend( |
83 clock_.Now(), NOT_RETRANSMISSION, NO_RETRANSMITTABLE_DATA).IsZero()); | 83 clock_.Now(), NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA).IsZero()); |
84 } | 84 } |
85 | 85 |
86 TEST_F(FixRateTest, FixRatePacing) { | 86 TEST_F(FixRateTest, FixRatePacing) { |
87 const QuicByteCount packet_size = 1200; | 87 const QuicByteCount packet_size = 1200; |
88 const QuicBandwidth bitrate = QuicBandwidth::FromKBytesPerSecond(240); | 88 const QuicBandwidth bitrate = QuicBandwidth::FromKBytesPerSecond(240); |
89 const int64 num_packets = 200; | 89 const int64 num_packets = 200; |
90 QuicCongestionFeedbackFrame feedback; | 90 QuicCongestionFeedbackFrame feedback; |
91 receiver_->SetBitrate(QuicBandwidth::FromKBytesPerSecond(240)); | 91 receiver_->SetBitrate(QuicBandwidth::FromKBytesPerSecond(240)); |
92 ASSERT_TRUE(receiver_->GenerateCongestionFeedback(&feedback)); | 92 ASSERT_TRUE(receiver_->GenerateCongestionFeedback(&feedback)); |
93 sender_->OnIncomingQuicCongestionFeedbackFrame(feedback, clock_.Now(), | 93 sender_->OnIncomingQuicCongestionFeedbackFrame(feedback, clock_.Now(), |
94 unused_bandwidth_, unused_packet_map_); | 94 unused_bandwidth_, unused_packet_map_); |
95 QuicTime acc_advance_time(QuicTime::Zero()); | 95 QuicTime acc_advance_time(QuicTime::Zero()); |
96 QuicPacketSequenceNumber sequence_number = 0; | 96 QuicPacketSequenceNumber sequence_number = 0; |
97 for (int i = 0; i < num_packets; i += 2) { | 97 for (int i = 0; i < num_packets; i += 2) { |
98 EXPECT_TRUE(sender_->TimeUntilSend( | 98 EXPECT_TRUE(sender_->TimeUntilSend( |
99 clock_.Now(), NOT_RETRANSMISSION, NO_RETRANSMITTABLE_DATA).IsZero()); | 99 clock_.Now(), NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA).IsZero()); |
100 sender_->SentPacket(clock_.Now(), sequence_number++, packet_size, | 100 sender_->SentPacket(clock_.Now(), sequence_number++, packet_size, |
101 NOT_RETRANSMISSION); | 101 NOT_RETRANSMISSION); |
102 EXPECT_TRUE(sender_->TimeUntilSend( | 102 EXPECT_TRUE(sender_->TimeUntilSend( |
103 clock_.Now(), NOT_RETRANSMISSION, NO_RETRANSMITTABLE_DATA).IsZero()); | 103 clock_.Now(), NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA).IsZero()); |
104 sender_->SentPacket(clock_.Now(), sequence_number++, packet_size, | 104 sender_->SentPacket(clock_.Now(), sequence_number++, packet_size, |
105 NOT_RETRANSMISSION); | 105 NOT_RETRANSMISSION); |
106 QuicTime::Delta advance_time = sender_->TimeUntilSend( | 106 QuicTime::Delta advance_time = sender_->TimeUntilSend( |
107 clock_.Now(), NOT_RETRANSMISSION, NO_RETRANSMITTABLE_DATA); | 107 clock_.Now(), NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA); |
108 clock_.AdvanceTime(advance_time); | 108 clock_.AdvanceTime(advance_time); |
109 sender_->OnIncomingAck(sequence_number - 1, packet_size, rtt_); | 109 sender_->OnIncomingAck(sequence_number - 1, packet_size, rtt_); |
110 sender_->OnIncomingAck(sequence_number - 2, packet_size, rtt_); | 110 sender_->OnIncomingAck(sequence_number - 2, packet_size, rtt_); |
111 acc_advance_time = acc_advance_time.Add(advance_time); | 111 acc_advance_time = acc_advance_time.Add(advance_time); |
112 } | 112 } |
113 EXPECT_EQ(num_packets * packet_size * 1000000 / bitrate.ToBytesPerSecond(), | 113 EXPECT_EQ(num_packets * packet_size * 1000000 / bitrate.ToBytesPerSecond(), |
114 static_cast<uint64>(acc_advance_time.Subtract(start_) | 114 static_cast<uint64>(acc_advance_time.Subtract(start_) |
115 .ToMicroseconds())); | 115 .ToMicroseconds())); |
116 } | 116 } |
117 | 117 |
118 } // namespace test | 118 } // namespace test |
119 } // namespace net | 119 } // namespace net |
OLD | NEW |