Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(77)

Side by Side Diff: net/quic/congestion_control/fix_rate_test.cc

Issue 15937012: Land Recent QUIC changes. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Small bug fixes Created 7 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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 12 matching lines...) Expand all
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 : rtt_(QuicTime::Delta::FromMilliseconds(30)),
33 unused_bandwidth_(QuicBandwidth::Zero()),
34 sender_(new FixRateSender(&clock_)), 33 sender_(new FixRateSender(&clock_)),
35 receiver_(new FixRateReceiverPeer()), 34 receiver_(new FixRateReceiverPeer()),
36 start_(clock_.Now()) { 35 start_(clock_.Now()) {
37 // Make sure clock does not start at 0. 36 // Make sure clock does not start at 0.
38 clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(2)); 37 clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(2));
39 } 38 }
40 const QuicTime::Delta rtt_; 39 const QuicTime::Delta rtt_;
41 const QuicBandwidth unused_bandwidth_;
42 MockClock clock_; 40 MockClock clock_;
43 SendAlgorithmInterface::SentPacketsMap unused_packet_map_; 41 SendAlgorithmInterface::SentPacketsMap unused_packet_map_;
44 scoped_ptr<FixRateSender> sender_; 42 scoped_ptr<FixRateSender> sender_;
45 scoped_ptr<FixRateReceiverPeer> receiver_; 43 scoped_ptr<FixRateReceiverPeer> receiver_;
46 const QuicTime start_; 44 const QuicTime start_;
47 }; 45 };
48 46
49 TEST_F(FixRateTest, ReceiverAPI) { 47 TEST_F(FixRateTest, ReceiverAPI) {
50 QuicCongestionFeedbackFrame feedback; 48 QuicCongestionFeedbackFrame feedback;
51 QuicTime timestamp(QuicTime::Zero()); 49 QuicTime timestamp(QuicTime::Zero());
52 receiver_->SetBitrate(QuicBandwidth::FromKBytesPerSecond(300)); 50 receiver_->SetBitrate(QuicBandwidth::FromKBytesPerSecond(300));
53 receiver_->RecordIncomingPacket(1, 1, timestamp, false); 51 receiver_->RecordIncomingPacket(1, 1, timestamp, false);
54 ASSERT_TRUE(receiver_->GenerateCongestionFeedback(&feedback)); 52 ASSERT_TRUE(receiver_->GenerateCongestionFeedback(&feedback));
55 EXPECT_EQ(kFixRate, feedback.type); 53 EXPECT_EQ(kFixRate, feedback.type);
56 EXPECT_EQ(300000u, feedback.fix_rate.bitrate.ToBytesPerSecond()); 54 EXPECT_EQ(300000u, feedback.fix_rate.bitrate.ToBytesPerSecond());
57 } 55 }
58 56
59 TEST_F(FixRateTest, SenderAPI) { 57 TEST_F(FixRateTest, SenderAPI) {
60 QuicCongestionFeedbackFrame feedback; 58 QuicCongestionFeedbackFrame feedback;
61 feedback.type = kFixRate; 59 feedback.type = kFixRate;
62 feedback.fix_rate.bitrate = QuicBandwidth::FromKBytesPerSecond(300); 60 feedback.fix_rate.bitrate = QuicBandwidth::FromKBytesPerSecond(300);
63 sender_->OnIncomingQuicCongestionFeedbackFrame(feedback, clock_.Now(), 61 sender_->OnIncomingQuicCongestionFeedbackFrame(feedback, clock_.Now(),
64 unused_bandwidth_, unused_packet_map_); 62 unused_packet_map_);
65 EXPECT_EQ(300000, sender_->BandwidthEstimate().ToBytesPerSecond()); 63 EXPECT_EQ(300000, sender_->BandwidthEstimate().ToBytesPerSecond());
66 EXPECT_TRUE(sender_->TimeUntilSend( 64 EXPECT_TRUE(sender_->TimeUntilSend(
67 clock_.Now(), NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA).IsZero()); 65 clock_.Now(), NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA).IsZero());
68 sender_->SentPacket(clock_.Now(), 1, kMaxPacketSize, NOT_RETRANSMISSION); 66 sender_->SentPacket(clock_.Now(), 1, kMaxPacketSize, NOT_RETRANSMISSION);
69 EXPECT_TRUE(sender_->TimeUntilSend( 67 EXPECT_TRUE(sender_->TimeUntilSend(
70 clock_.Now(), NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA).IsZero()); 68 clock_.Now(), NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA).IsZero());
71 sender_->SentPacket(clock_.Now(), 2, kMaxPacketSize, NOT_RETRANSMISSION); 69 sender_->SentPacket(clock_.Now(), 2, kMaxPacketSize, NOT_RETRANSMISSION);
72 sender_->SentPacket(clock_.Now(), 3, 600, NOT_RETRANSMISSION); 70 sender_->SentPacket(clock_.Now(), 3, 600, NOT_RETRANSMISSION);
73 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(10), sender_->TimeUntilSend( 71 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(10), sender_->TimeUntilSend(
74 clock_.Now(), NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA)); 72 clock_.Now(), NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA));
75 clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(2)); 73 clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(2));
76 EXPECT_EQ(QuicTime::Delta::Infinite(), sender_->TimeUntilSend( 74 EXPECT_EQ(QuicTime::Delta::Infinite(), sender_->TimeUntilSend(
77 clock_.Now(), NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA)); 75 clock_.Now(), NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA));
78 clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(8)); 76 clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(8));
79 sender_->OnIncomingAck(1, kMaxPacketSize, rtt_); 77 sender_->OnIncomingAck(1, kMaxPacketSize, rtt_);
80 sender_->OnIncomingAck(2, kMaxPacketSize, rtt_); 78 sender_->OnIncomingAck(2, kMaxPacketSize, rtt_);
81 sender_->OnIncomingAck(3, 600, rtt_); 79 sender_->OnIncomingAck(3, 600, rtt_);
82 EXPECT_TRUE(sender_->TimeUntilSend( 80 EXPECT_TRUE(sender_->TimeUntilSend(
83 clock_.Now(), NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA).IsZero()); 81 clock_.Now(), NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA).IsZero());
84 } 82 }
85 83
86 TEST_F(FixRateTest, FixRatePacing) { 84 TEST_F(FixRateTest, FixRatePacing) {
87 const QuicByteCount packet_size = 1200; 85 const QuicByteCount packet_size = 1200;
88 const QuicBandwidth bitrate = QuicBandwidth::FromKBytesPerSecond(240); 86 const QuicBandwidth bitrate = QuicBandwidth::FromKBytesPerSecond(240);
89 const int64 num_packets = 200; 87 const int64 num_packets = 200;
90 QuicCongestionFeedbackFrame feedback; 88 QuicCongestionFeedbackFrame feedback;
91 receiver_->SetBitrate(QuicBandwidth::FromKBytesPerSecond(240)); 89 receiver_->SetBitrate(QuicBandwidth::FromKBytesPerSecond(240));
92 ASSERT_TRUE(receiver_->GenerateCongestionFeedback(&feedback)); 90 ASSERT_TRUE(receiver_->GenerateCongestionFeedback(&feedback));
93 sender_->OnIncomingQuicCongestionFeedbackFrame(feedback, clock_.Now(), 91 sender_->OnIncomingQuicCongestionFeedbackFrame(feedback, clock_.Now(),
94 unused_bandwidth_, unused_packet_map_); 92 unused_packet_map_);
95 QuicTime acc_advance_time(QuicTime::Zero()); 93 QuicTime acc_advance_time(QuicTime::Zero());
96 QuicPacketSequenceNumber sequence_number = 0; 94 QuicPacketSequenceNumber sequence_number = 0;
97 for (int i = 0; i < num_packets; i += 2) { 95 for (int i = 0; i < num_packets; i += 2) {
98 EXPECT_TRUE(sender_->TimeUntilSend( 96 EXPECT_TRUE(sender_->TimeUntilSend(
99 clock_.Now(), NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA).IsZero()); 97 clock_.Now(), NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA).IsZero());
100 sender_->SentPacket(clock_.Now(), sequence_number++, packet_size, 98 sender_->SentPacket(clock_.Now(), sequence_number++, packet_size,
101 NOT_RETRANSMISSION); 99 NOT_RETRANSMISSION);
102 EXPECT_TRUE(sender_->TimeUntilSend( 100 EXPECT_TRUE(sender_->TimeUntilSend(
103 clock_.Now(), NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA).IsZero()); 101 clock_.Now(), NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA).IsZero());
104 sender_->SentPacket(clock_.Now(), sequence_number++, packet_size, 102 sender_->SentPacket(clock_.Now(), sequence_number++, packet_size,
105 NOT_RETRANSMISSION); 103 NOT_RETRANSMISSION);
106 QuicTime::Delta advance_time = sender_->TimeUntilSend( 104 QuicTime::Delta advance_time = sender_->TimeUntilSend(
107 clock_.Now(), NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA); 105 clock_.Now(), NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA);
108 clock_.AdvanceTime(advance_time); 106 clock_.AdvanceTime(advance_time);
109 sender_->OnIncomingAck(sequence_number - 1, packet_size, rtt_); 107 sender_->OnIncomingAck(sequence_number - 1, packet_size, rtt_);
110 sender_->OnIncomingAck(sequence_number - 2, packet_size, rtt_); 108 sender_->OnIncomingAck(sequence_number - 2, packet_size, rtt_);
111 acc_advance_time = acc_advance_time.Add(advance_time); 109 acc_advance_time = acc_advance_time.Add(advance_time);
112 } 110 }
113 EXPECT_EQ(num_packets * packet_size * 1000000 / bitrate.ToBytesPerSecond(), 111 EXPECT_EQ(num_packets * packet_size * 1000000 / bitrate.ToBytesPerSecond(),
114 static_cast<uint64>(acc_advance_time.Subtract(start_) 112 static_cast<uint64>(acc_advance_time.Subtract(start_)
115 .ToMicroseconds())); 113 .ToMicroseconds()));
116 } 114 }
117 115
118 } // namespace test 116 } // namespace test
119 } // namespace net 117 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698