OLD | NEW |
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 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 #include "base/logging.h" | 5 #include "base/logging.h" |
6 #include "base/memory/scoped_ptr.h" | 6 #include "base/memory/scoped_ptr.h" |
7 #include "net/quic/congestion_control/quic_congestion_manager.h" | 7 #include "net/quic/congestion_control/quic_congestion_manager.h" |
8 #include "net/quic/quic_protocol.h" | 8 #include "net/quic/quic_protocol.h" |
9 #include "net/quic/test_tools/mock_clock.h" | 9 #include "net/quic/test_tools/mock_clock.h" |
10 #include "net/quic/test_tools/quic_test_utils.h" | 10 #include "net/quic/test_tools/quic_test_utils.h" |
(...skipping 21 matching lines...) Expand all Loading... |
32 | 32 |
33 private: | 33 private: |
34 DISALLOW_COPY_AND_ASSIGN(QuicCongestionManagerPeer); | 34 DISALLOW_COPY_AND_ASSIGN(QuicCongestionManagerPeer); |
35 }; | 35 }; |
36 | 36 |
37 class QuicCongestionManagerTest : public ::testing::Test { | 37 class QuicCongestionManagerTest : public ::testing::Test { |
38 protected: | 38 protected: |
39 void SetUpCongestionType(CongestionFeedbackType congestion_type) { | 39 void SetUpCongestionType(CongestionFeedbackType congestion_type) { |
40 manager_.reset(new QuicCongestionManagerPeer(&clock_, congestion_type)); | 40 manager_.reset(new QuicCongestionManagerPeer(&clock_, congestion_type)); |
41 } | 41 } |
| 42 |
| 43 static const HasRetransmittableData kIgnored = HAS_RETRANSMITTABLE_DATA; |
| 44 |
42 MockClock clock_; | 45 MockClock clock_; |
43 scoped_ptr<QuicCongestionManagerPeer> manager_; | 46 scoped_ptr<QuicCongestionManagerPeer> manager_; |
44 }; | 47 }; |
45 | 48 |
46 TEST_F(QuicCongestionManagerTest, Bandwidth) { | 49 TEST_F(QuicCongestionManagerTest, Bandwidth) { |
47 SetUpCongestionType(kFixRate); | 50 SetUpCongestionType(kFixRate); |
48 QuicAckFrame ack; | 51 QuicAckFrame ack; |
49 manager_->OnIncomingAckFrame(ack, clock_.Now()); | 52 manager_->OnIncomingAckFrame(ack, clock_.Now()); |
50 | 53 |
51 QuicCongestionFeedbackFrame feedback; | 54 QuicCongestionFeedbackFrame feedback; |
52 feedback.type = kFixRate; | 55 feedback.type = kFixRate; |
53 feedback.fix_rate.bitrate = QuicBandwidth::FromKBytesPerSecond(100); | 56 feedback.fix_rate.bitrate = QuicBandwidth::FromKBytesPerSecond(100); |
54 manager_->OnIncomingQuicCongestionFeedbackFrame(feedback, clock_.Now()); | 57 manager_->OnIncomingQuicCongestionFeedbackFrame(feedback, clock_.Now()); |
55 | 58 |
56 for (int i = 1; i <= 100; ++i) { | 59 for (int i = 1; i <= 100; ++i) { |
57 QuicTime::Delta advance_time = manager_->TimeUntilSend( | 60 QuicTime::Delta advance_time = manager_->TimeUntilSend( |
58 clock_.Now(), NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA); | 61 clock_.Now(), NOT_RETRANSMISSION, kIgnored); |
59 clock_.AdvanceTime(advance_time); | 62 clock_.AdvanceTime(advance_time); |
60 EXPECT_TRUE(manager_->TimeUntilSend( | 63 EXPECT_TRUE(manager_->TimeUntilSend( |
61 clock_.Now(), NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA).IsZero()); | 64 clock_.Now(), NOT_RETRANSMISSION, kIgnored).IsZero()); |
62 manager_->SentPacket(i, clock_.Now(), 1000, NOT_RETRANSMISSION); | 65 manager_->SentPacket(i, clock_.Now(), 1000, NOT_RETRANSMISSION); |
63 // Ack the packet we sent. | 66 // Ack the packet we sent. |
64 ack.received_info.largest_observed = i; | 67 ack.received_info.largest_observed = i; |
65 manager_->OnIncomingAckFrame(ack, clock_.Now()); | 68 manager_->OnIncomingAckFrame(ack, clock_.Now()); |
66 } | 69 } |
67 EXPECT_EQ(100, manager_->BandwidthEstimate().ToKBytesPerSecond()); | 70 EXPECT_EQ(100, manager_->BandwidthEstimate().ToKBytesPerSecond()); |
68 EXPECT_NEAR(100, | 71 EXPECT_NEAR(100, |
69 manager_->SentBandwidth(clock_.Now()).ToKBytesPerSecond(), 4); | 72 manager_->SentBandwidth(clock_.Now()).ToKBytesPerSecond(), 4); |
70 } | 73 } |
71 | 74 |
72 TEST_F(QuicCongestionManagerTest, BandwidthWith1SecondGap) { | 75 TEST_F(QuicCongestionManagerTest, BandwidthWith1SecondGap) { |
73 SetUpCongestionType(kFixRate); | 76 SetUpCongestionType(kFixRate); |
74 QuicAckFrame ack; | 77 QuicAckFrame ack; |
75 manager_->OnIncomingAckFrame(ack, clock_.Now()); | 78 manager_->OnIncomingAckFrame(ack, clock_.Now()); |
76 | 79 |
77 QuicCongestionFeedbackFrame feedback; | 80 QuicCongestionFeedbackFrame feedback; |
78 feedback.type = kFixRate; | 81 feedback.type = kFixRate; |
79 feedback.fix_rate.bitrate = QuicBandwidth::FromKBytesPerSecond(100); | 82 feedback.fix_rate.bitrate = QuicBandwidth::FromKBytesPerSecond(100); |
80 manager_->OnIncomingQuicCongestionFeedbackFrame(feedback, clock_.Now()); | 83 manager_->OnIncomingQuicCongestionFeedbackFrame(feedback, clock_.Now()); |
81 | 84 |
82 for (QuicPacketSequenceNumber sequence_number = 1; sequence_number <= 100; | 85 for (QuicPacketSequenceNumber sequence_number = 1; sequence_number <= 100; |
83 ++sequence_number) { | 86 ++sequence_number) { |
84 clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(10)); | 87 clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(10)); |
85 EXPECT_TRUE(manager_->TimeUntilSend( | 88 EXPECT_TRUE(manager_->TimeUntilSend( |
86 clock_.Now(), NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA).IsZero()); | 89 clock_.Now(), NOT_RETRANSMISSION, kIgnored).IsZero()); |
87 manager_->SentPacket( | 90 manager_->SentPacket( |
88 sequence_number, clock_.Now(), 1000, NOT_RETRANSMISSION); | 91 sequence_number, clock_.Now(), 1000, NOT_RETRANSMISSION); |
89 // Ack the packet we sent. | 92 // Ack the packet we sent. |
90 ack.received_info.largest_observed = sequence_number; | 93 ack.received_info.largest_observed = sequence_number; |
91 manager_->OnIncomingAckFrame(ack, clock_.Now()); | 94 manager_->OnIncomingAckFrame(ack, clock_.Now()); |
92 } | 95 } |
93 EXPECT_EQ(100000, manager_->BandwidthEstimate().ToBytesPerSecond()); | 96 EXPECT_EQ(100000, manager_->BandwidthEstimate().ToBytesPerSecond()); |
94 EXPECT_NEAR(100000, | 97 EXPECT_NEAR(100000, |
95 manager_->SentBandwidth(clock_.Now()).ToBytesPerSecond(), 2000); | 98 manager_->SentBandwidth(clock_.Now()).ToBytesPerSecond(), 2000); |
96 clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(500)); | 99 clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(500)); |
97 EXPECT_NEAR(50000, | 100 EXPECT_NEAR(50000, |
98 manager_->SentBandwidth(clock_.Now()).ToBytesPerSecond(), 1000); | 101 manager_->SentBandwidth(clock_.Now()).ToBytesPerSecond(), 1000); |
99 clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(501)); | 102 clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(501)); |
100 EXPECT_NEAR(100000, manager_->BandwidthEstimate().ToBytesPerSecond(), 2000); | 103 EXPECT_NEAR(100000, manager_->BandwidthEstimate().ToBytesPerSecond(), 2000); |
101 EXPECT_TRUE(manager_->SentBandwidth(clock_.Now()).IsZero()); | 104 EXPECT_TRUE(manager_->SentBandwidth(clock_.Now()).IsZero()); |
102 for (int i = 1; i <= 150; ++i) { | 105 for (int i = 1; i <= 150; ++i) { |
103 EXPECT_TRUE(manager_->TimeUntilSend( | 106 EXPECT_TRUE(manager_->TimeUntilSend( |
104 clock_.Now(), NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA).IsZero()); | 107 clock_.Now(), NOT_RETRANSMISSION, kIgnored).IsZero()); |
105 manager_->SentPacket(i + 100, clock_.Now(), 1000, NOT_RETRANSMISSION); | 108 manager_->SentPacket(i + 100, clock_.Now(), 1000, NOT_RETRANSMISSION); |
106 clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(10)); | 109 clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(10)); |
107 // Ack the packet we sent. | 110 // Ack the packet we sent. |
108 ack.received_info.largest_observed = i + 100; | 111 ack.received_info.largest_observed = i + 100; |
109 manager_->OnIncomingAckFrame(ack, clock_.Now()); | 112 manager_->OnIncomingAckFrame(ack, clock_.Now()); |
110 } | 113 } |
111 EXPECT_EQ(100, manager_->BandwidthEstimate().ToKBytesPerSecond()); | 114 EXPECT_EQ(100, manager_->BandwidthEstimate().ToKBytesPerSecond()); |
112 EXPECT_NEAR(100, | 115 EXPECT_NEAR(100, |
113 manager_->SentBandwidth(clock_.Now()).ToKBytesPerSecond(), 2); | 116 manager_->SentBandwidth(clock_.Now()).ToKBytesPerSecond(), 2); |
114 } | 117 } |
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
208 | 211 |
209 QuicAckFrame ack; | 212 QuicAckFrame ack; |
210 ack.received_info.largest_observed = sequence_number; | 213 ack.received_info.largest_observed = sequence_number; |
211 ack.received_info.delta_time_largest_observed = QuicTime::Delta::Zero(); | 214 ack.received_info.delta_time_largest_observed = QuicTime::Delta::Zero(); |
212 manager_->OnIncomingAckFrame(ack, clock_.Now()); | 215 manager_->OnIncomingAckFrame(ack, clock_.Now()); |
213 EXPECT_EQ(manager_->rtt(), expected_rtt); | 216 EXPECT_EQ(manager_->rtt(), expected_rtt); |
214 } | 217 } |
215 | 218 |
216 } // namespace test | 219 } // namespace test |
217 } // namespace net | 220 } // namespace net |
OLD | NEW |