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. |
| 6 |
5 #include "base/logging.h" | 7 #include "base/logging.h" |
6 #include "base/memory/scoped_ptr.h" | 8 #include "base/memory/scoped_ptr.h" |
7 #include "net/quic/congestion_control/fix_rate_receiver.h" | 9 #include "net/quic/congestion_control/fix_rate_receiver.h" |
8 #include "net/quic/congestion_control/fix_rate_sender.h" | 10 #include "net/quic/congestion_control/fix_rate_sender.h" |
9 #include "net/quic/test_tools/mock_clock.h" | 11 #include "net/quic/test_tools/mock_clock.h" |
10 #include "net/quic/quic_protocol.h" | 12 #include "net/quic/quic_protocol.h" |
11 #include "testing/gmock/include/gmock/gmock.h" | 13 #include "testing/gmock/include/gmock/gmock.h" |
12 #include "testing/gtest/include/gtest/gtest.h" | 14 #include "testing/gtest/include/gtest/gtest.h" |
13 | 15 |
14 namespace net { | 16 namespace net { |
15 namespace test { | 17 namespace test { |
16 | 18 |
17 class FixRateReceiverPeer : public FixRateReceiver { | 19 class FixRateReceiverPeer : public FixRateReceiver { |
18 public: | 20 public: |
19 FixRateReceiverPeer() | 21 FixRateReceiverPeer() |
20 : FixRateReceiver() { | 22 : FixRateReceiver() { |
21 } | 23 } |
22 void SetBitrate(QuicBandwidth fix_rate) { | 24 void SetBitrate(QuicBandwidth fix_rate) { |
23 FixRateReceiver::configured_rate_ = fix_rate; | 25 FixRateReceiver::configured_rate_ = fix_rate; |
24 } | 26 } |
25 }; | 27 }; |
26 | 28 |
27 const bool kHasRetransmittableData = true; | |
28 class FixRateTest : public ::testing::Test { | 29 class FixRateTest : public ::testing::Test { |
29 protected: | 30 protected: |
30 FixRateTest() | 31 FixRateTest() |
31 : rtt_(QuicTime::Delta::FromMilliseconds(30)), | 32 : rtt_(QuicTime::Delta::FromMilliseconds(30)), |
32 unused_bandwidth_(QuicBandwidth::Zero()), | 33 unused_bandwidth_(QuicBandwidth::Zero()), |
33 sender_(new FixRateSender(&clock_)), | 34 sender_(new FixRateSender(&clock_)), |
34 receiver_(new FixRateReceiverPeer()) { | 35 receiver_(new FixRateReceiverPeer()) { |
35 // Make sure clock does not start at 0. | 36 // Make sure clock does not start at 0. |
36 clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(2)); | 37 clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(2)); |
37 } | 38 } |
(...skipping 15 matching lines...) Expand all Loading... |
53 EXPECT_EQ(300000u, feedback.fix_rate.bitrate.ToBytesPerSecond()); | 54 EXPECT_EQ(300000u, feedback.fix_rate.bitrate.ToBytesPerSecond()); |
54 } | 55 } |
55 | 56 |
56 TEST_F(FixRateTest, SenderAPI) { | 57 TEST_F(FixRateTest, SenderAPI) { |
57 QuicCongestionFeedbackFrame feedback; | 58 QuicCongestionFeedbackFrame feedback; |
58 feedback.type = kFixRate; | 59 feedback.type = kFixRate; |
59 feedback.fix_rate.bitrate = QuicBandwidth::FromKBytesPerSecond(300); | 60 feedback.fix_rate.bitrate = QuicBandwidth::FromKBytesPerSecond(300); |
60 sender_->OnIncomingQuicCongestionFeedbackFrame(feedback, clock_.Now(), | 61 sender_->OnIncomingQuicCongestionFeedbackFrame(feedback, clock_.Now(), |
61 unused_bandwidth_, unused_packet_map_); | 62 unused_bandwidth_, unused_packet_map_); |
62 EXPECT_EQ(300000, sender_->BandwidthEstimate().ToBytesPerSecond()); | 63 EXPECT_EQ(300000, sender_->BandwidthEstimate().ToBytesPerSecond()); |
63 EXPECT_TRUE(sender_->TimeUntilSend(clock_.Now(), false).IsZero()); | 64 EXPECT_TRUE(sender_->TimeUntilSend(clock_.Now(), false, true).IsZero()); |
64 sender_->SentPacket(clock_.Now(), 1, kMaxPacketSize, false, | 65 sender_->SentPacket(clock_.Now(), 1, kMaxPacketSize, false); |
65 kHasRetransmittableData); | 66 EXPECT_TRUE(sender_->TimeUntilSend(clock_.Now(), false, true).IsZero()); |
66 EXPECT_TRUE(sender_->TimeUntilSend(clock_.Now(), false).IsZero()); | 67 sender_->SentPacket(clock_.Now(), 2, kMaxPacketSize, false); |
67 sender_->SentPacket(clock_.Now(), 2, kMaxPacketSize, false, | 68 sender_->SentPacket(clock_.Now(), 3, 600, false); |
68 kHasRetransmittableData); | |
69 sender_->SentPacket(clock_.Now(), 3, 600, false, | |
70 kHasRetransmittableData); | |
71 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(10), | 69 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(10), |
72 sender_->TimeUntilSend(clock_.Now(), false)); | 70 sender_->TimeUntilSend(clock_.Now(), false, true)); |
73 clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(2)); | 71 clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(2)); |
74 EXPECT_EQ(QuicTime::Delta::Infinite(), | 72 EXPECT_EQ(QuicTime::Delta::Infinite(), |
75 sender_->TimeUntilSend(clock_.Now(), false)); | 73 sender_->TimeUntilSend(clock_.Now(), false, true)); |
76 clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(8)); | 74 clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(8)); |
77 sender_->OnIncomingAck(1, kMaxPacketSize, rtt_); | 75 sender_->OnIncomingAck(1, kMaxPacketSize, rtt_); |
78 sender_->OnIncomingAck(2, kMaxPacketSize, rtt_); | 76 sender_->OnIncomingAck(2, kMaxPacketSize, rtt_); |
79 sender_->OnIncomingAck(3, 600, rtt_); | 77 sender_->OnIncomingAck(3, 600, rtt_); |
80 EXPECT_TRUE(sender_->TimeUntilSend(clock_.Now(), false).IsZero()); | 78 EXPECT_TRUE(sender_->TimeUntilSend(clock_.Now(), false, true).IsZero()); |
81 } | 79 } |
82 | 80 |
83 TEST_F(FixRateTest, FixRatePacing) { | 81 TEST_F(FixRateTest, FixRatePacing) { |
84 const QuicByteCount packet_size = 1200; | 82 const QuicByteCount packet_size = 1200; |
85 const QuicBandwidth bitrate = QuicBandwidth::FromKBytesPerSecond(240); | 83 const QuicBandwidth bitrate = QuicBandwidth::FromKBytesPerSecond(240); |
86 const int64 num_packets = 200; | 84 const int64 num_packets = 200; |
87 QuicCongestionFeedbackFrame feedback; | 85 QuicCongestionFeedbackFrame feedback; |
88 receiver_->SetBitrate(QuicBandwidth::FromKBytesPerSecond(240)); | 86 receiver_->SetBitrate(QuicBandwidth::FromKBytesPerSecond(240)); |
89 ASSERT_TRUE(receiver_->GenerateCongestionFeedback(&feedback)); | 87 ASSERT_TRUE(receiver_->GenerateCongestionFeedback(&feedback)); |
90 sender_->OnIncomingQuicCongestionFeedbackFrame(feedback, clock_.Now(), | 88 sender_->OnIncomingQuicCongestionFeedbackFrame(feedback, clock_.Now(), |
91 unused_bandwidth_, unused_packet_map_); | 89 unused_bandwidth_, unused_packet_map_); |
92 QuicTime acc_advance_time(QuicTime::Zero()); | 90 QuicTime acc_advance_time(QuicTime::Zero()); |
93 QuicPacketSequenceNumber sequence_number = 0; | 91 QuicPacketSequenceNumber sequence_number = 0; |
94 for (int i = 0; i < num_packets; i += 2) { | 92 for (int i = 0; i < num_packets; i += 2) { |
95 EXPECT_TRUE(sender_->TimeUntilSend(clock_.Now(), false).IsZero()); | 93 EXPECT_TRUE(sender_->TimeUntilSend(clock_.Now(), false, true).IsZero()); |
96 sender_->SentPacket(clock_.Now(), sequence_number++, packet_size, false, | 94 sender_->SentPacket(clock_.Now(), sequence_number++, packet_size, false); |
97 kHasRetransmittableData); | 95 EXPECT_TRUE(sender_->TimeUntilSend(clock_.Now(), false, true).IsZero()); |
98 EXPECT_TRUE(sender_->TimeUntilSend(clock_.Now(), false).IsZero()); | 96 sender_->SentPacket(clock_.Now(), sequence_number++, packet_size, false); |
99 sender_->SentPacket(clock_.Now(), sequence_number++, packet_size, false, | 97 QuicTime::Delta advance_time = sender_->TimeUntilSend(clock_.Now(), false, |
100 kHasRetransmittableData); | 98 true); |
101 QuicTime::Delta advance_time = sender_->TimeUntilSend(clock_.Now(), false); | |
102 clock_.AdvanceTime(advance_time); | 99 clock_.AdvanceTime(advance_time); |
103 sender_->OnIncomingAck(sequence_number - 1, packet_size, rtt_); | 100 sender_->OnIncomingAck(sequence_number - 1, packet_size, rtt_); |
104 sender_->OnIncomingAck(sequence_number - 2, packet_size, rtt_); | 101 sender_->OnIncomingAck(sequence_number - 2, packet_size, rtt_); |
105 acc_advance_time = acc_advance_time.Add(advance_time); | 102 acc_advance_time = acc_advance_time.Add(advance_time); |
106 } | 103 } |
107 EXPECT_EQ(num_packets * packet_size * 1000000 / bitrate.ToBytesPerSecond(), | 104 EXPECT_EQ(num_packets * packet_size * 1000000 / bitrate.ToBytesPerSecond(), |
108 static_cast<uint64>(acc_advance_time.ToMicroseconds())); | 105 static_cast<uint64>(acc_advance_time.ToMicroseconds())); |
109 } | 106 } |
110 | 107 |
111 } // namespace test | 108 } // namespace test |
112 } // namespace net | 109 } // namespace net |
OLD | NEW |