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

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

Issue 23597045: Land Recent QUIC changes. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Merged QuicPriority to RequestPriority changes Created 7 years, 3 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) 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 // Test of the full congestion control chain. 5 // Test of the full congestion control chain.
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/quic_congestion_manager.h" 9 #include "net/quic/congestion_control/quic_congestion_manager.h"
10 #include "net/quic/quic_protocol.h" 10 #include "net/quic/quic_protocol.h"
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
42 42
43 TEST_F(QuicCongestionControlTest, FixedRateSenderAPI) { 43 TEST_F(QuicCongestionControlTest, FixedRateSenderAPI) {
44 SetUpCongestionType(kFixRate); 44 SetUpCongestionType(kFixRate);
45 QuicCongestionFeedbackFrame congestion_feedback; 45 QuicCongestionFeedbackFrame congestion_feedback;
46 congestion_feedback.type = kFixRate; 46 congestion_feedback.type = kFixRate;
47 congestion_feedback.fix_rate.bitrate = QuicBandwidth::FromKBytesPerSecond(30); 47 congestion_feedback.fix_rate.bitrate = QuicBandwidth::FromKBytesPerSecond(30);
48 manager_->OnIncomingQuicCongestionFeedbackFrame(congestion_feedback, 48 manager_->OnIncomingQuicCongestionFeedbackFrame(congestion_feedback,
49 clock_.Now()); 49 clock_.Now());
50 EXPECT_TRUE(manager_->TimeUntilSend(clock_.Now(), 50 EXPECT_TRUE(manager_->TimeUntilSend(clock_.Now(),
51 NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA, NOT_HANDSHAKE).IsZero()); 51 NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA, NOT_HANDSHAKE).IsZero());
52 manager_->SentPacket(1, clock_.Now(), kMaxPacketSize, NOT_RETRANSMISSION); 52 manager_->SentPacket(1, clock_.Now(), kMaxPacketSize, NOT_RETRANSMISSION,
53 HAS_RETRANSMITTABLE_DATA);
53 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(40), 54 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(40),
54 manager_->TimeUntilSend(clock_.Now(), 55 manager_->TimeUntilSend(clock_.Now(),
55 NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA, NOT_HANDSHAKE)); 56 NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA, NOT_HANDSHAKE));
56 clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(35)); 57 clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(35));
57 EXPECT_EQ(QuicTime::Delta::Infinite(), 58 EXPECT_EQ(QuicTime::Delta::Infinite(),
58 manager_->TimeUntilSend(clock_.Now(), 59 manager_->TimeUntilSend(clock_.Now(),
59 NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA, NOT_HANDSHAKE)); 60 NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA, NOT_HANDSHAKE));
60 clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(5)); 61 clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(5));
61 EXPECT_EQ(QuicTime::Delta::Infinite(), 62 EXPECT_EQ(QuicTime::Delta::Infinite(),
62 manager_->TimeUntilSend(clock_.Now(), 63 manager_->TimeUntilSend(clock_.Now(),
63 NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA, NOT_HANDSHAKE)); 64 NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA, NOT_HANDSHAKE));
64 } 65 }
65 66
66 TEST_F(QuicCongestionControlTest, FixedRatePacing) { 67 TEST_F(QuicCongestionControlTest, FixedRatePacing) {
67 SetUpCongestionType(kFixRate); 68 SetUpCongestionType(kFixRate);
68 QuicAckFrame ack; 69 QuicAckFrame ack;
69 ack.received_info.largest_observed = 0; 70 ack.received_info.largest_observed = 0;
70 manager_->OnIncomingAckFrame(ack, clock_.Now()); 71 manager_->OnIncomingAckFrame(ack, clock_.Now());
71 72
72 QuicCongestionFeedbackFrame feedback; 73 QuicCongestionFeedbackFrame feedback;
73 feedback.type = kFixRate; 74 feedback.type = kFixRate;
74 feedback.fix_rate.bitrate = QuicBandwidth::FromKBytesPerSecond(100); 75 feedback.fix_rate.bitrate = QuicBandwidth::FromKBytesPerSecond(100);
75 manager_->OnIncomingQuicCongestionFeedbackFrame(feedback, clock_.Now()); 76 manager_->OnIncomingQuicCongestionFeedbackFrame(feedback, clock_.Now());
76 77
77 QuicTime acc_advance_time(QuicTime::Zero()); 78 QuicTime acc_advance_time(QuicTime::Zero());
78 for (QuicPacketSequenceNumber i = 1; i <= 100; ++i) { 79 for (QuicPacketSequenceNumber i = 1; i <= 100; ++i) {
79 EXPECT_TRUE(manager_->TimeUntilSend(clock_.Now(), 80 EXPECT_TRUE(manager_->TimeUntilSend(clock_.Now(),
80 NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA, NOT_HANDSHAKE).IsZero()); 81 NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA, NOT_HANDSHAKE).IsZero());
81 manager_->SentPacket(i, clock_.Now(), kMaxPacketSize, NOT_RETRANSMISSION); 82 manager_->SentPacket(i, clock_.Now(), kMaxPacketSize, NOT_RETRANSMISSION,
83 HAS_RETRANSMITTABLE_DATA);
82 QuicTime::Delta advance_time = manager_->TimeUntilSend(clock_.Now(), 84 QuicTime::Delta advance_time = manager_->TimeUntilSend(clock_.Now(),
83 NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA, NOT_HANDSHAKE); 85 NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA, NOT_HANDSHAKE);
84 clock_.AdvanceTime(advance_time); 86 clock_.AdvanceTime(advance_time);
85 acc_advance_time = acc_advance_time.Add(advance_time); 87 acc_advance_time = acc_advance_time.Add(advance_time);
86 // Ack the packet we sent. 88 // Ack the packet we sent.
87 ack.received_info.largest_observed = max( 89 ack.received_info.largest_observed = max(
88 i, ack.received_info.largest_observed); 90 i, ack.received_info.largest_observed);
89 manager_->OnIncomingAckFrame(ack, clock_.Now()); 91 manager_->OnIncomingAckFrame(ack, clock_.Now());
90 } 92 }
91 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(1200), 93 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(1200),
92 acc_advance_time.Subtract(start_)); 94 acc_advance_time.Subtract(start_));
93 } 95 }
94 96
95 TEST_F(QuicCongestionControlTest, Pacing) { 97 TEST_F(QuicCongestionControlTest, Pacing) {
96 SetUpCongestionType(kFixRate); 98 SetUpCongestionType(kFixRate);
97 QuicAckFrame ack; 99 QuicAckFrame ack;
98 ack.received_info.largest_observed = 0; 100 ack.received_info.largest_observed = 0;
99 manager_->OnIncomingAckFrame(ack, clock_.Now()); 101 manager_->OnIncomingAckFrame(ack, clock_.Now());
100 102
101 QuicCongestionFeedbackFrame feedback; 103 QuicCongestionFeedbackFrame feedback;
102 feedback.type = kFixRate; 104 feedback.type = kFixRate;
103 // Test a high bitrate (8Mbit/s) to trigger pacing. 105 // Test a high bitrate (8Mbit/s) to trigger pacing.
104 feedback.fix_rate.bitrate = QuicBandwidth::FromKBytesPerSecond(1000); 106 feedback.fix_rate.bitrate = QuicBandwidth::FromKBytesPerSecond(1000);
105 manager_->OnIncomingQuicCongestionFeedbackFrame(feedback, clock_.Now()); 107 manager_->OnIncomingQuicCongestionFeedbackFrame(feedback, clock_.Now());
106 108
107 QuicTime acc_advance_time(QuicTime::Zero()); 109 QuicTime acc_advance_time(QuicTime::Zero());
108 for (QuicPacketSequenceNumber i = 1; i <= 100;) { 110 for (QuicPacketSequenceNumber i = 1; i <= 100;) {
109 EXPECT_TRUE(manager_->TimeUntilSend(clock_.Now(), 111 EXPECT_TRUE(manager_->TimeUntilSend(clock_.Now(),
110 NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA, NOT_HANDSHAKE).IsZero()); 112 NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA, NOT_HANDSHAKE).IsZero());
111 manager_->SentPacket(i++, clock_.Now(), kMaxPacketSize, NOT_RETRANSMISSION); 113 manager_->SentPacket(i++, clock_.Now(), kMaxPacketSize, NOT_RETRANSMISSION,
114 HAS_RETRANSMITTABLE_DATA);
112 EXPECT_TRUE(manager_->TimeUntilSend(clock_.Now(), 115 EXPECT_TRUE(manager_->TimeUntilSend(clock_.Now(),
113 NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA, NOT_HANDSHAKE).IsZero()); 116 NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA, NOT_HANDSHAKE).IsZero());
114 manager_->SentPacket(i++, clock_.Now(), kMaxPacketSize, NOT_RETRANSMISSION); 117 manager_->SentPacket(i++, clock_.Now(), kMaxPacketSize, NOT_RETRANSMISSION,
118 HAS_RETRANSMITTABLE_DATA);
115 QuicTime::Delta advance_time = manager_->TimeUntilSend(clock_.Now(), 119 QuicTime::Delta advance_time = manager_->TimeUntilSend(clock_.Now(),
116 NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA, NOT_HANDSHAKE); 120 NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA, NOT_HANDSHAKE);
117 clock_.AdvanceTime(advance_time); 121 clock_.AdvanceTime(advance_time);
118 acc_advance_time = acc_advance_time.Add(advance_time); 122 acc_advance_time = acc_advance_time.Add(advance_time);
119 // Ack the packets we sent. 123 // Ack the packets we sent.
120 ack.received_info.largest_observed = max( 124 ack.received_info.largest_observed = max(
121 i - 2, ack.received_info.largest_observed); 125 i - 2, ack.received_info.largest_observed);
122 manager_->OnIncomingAckFrame(ack, clock_.Now()); 126 manager_->OnIncomingAckFrame(ack, clock_.Now());
123 ack.received_info.largest_observed = max( 127 ack.received_info.largest_observed = max(
124 i - 1, ack.received_info.largest_observed); 128 i - 1, ack.received_info.largest_observed);
125 manager_->OnIncomingAckFrame(ack, clock_.Now()); 129 manager_->OnIncomingAckFrame(ack, clock_.Now());
126 } 130 }
127 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(120), 131 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(120),
128 acc_advance_time.Subtract(start_)); 132 acc_advance_time.Subtract(start_));
129 } 133 }
130 134
131 // TODO(pwestin): add TCP tests. 135 // TODO(pwestin): add TCP tests.
132 136
133 // TODO(pwestin): add InterArrival tests. 137 // TODO(pwestin): add InterArrival tests.
134 138
135 } // namespace test 139 } // namespace test
136 } // namespace net 140 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/congestion_control/inter_arrival_sender_test.cc ('k') | net/quic/congestion_control/quic_congestion_manager.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698