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 |