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/quic_unacked_packet_map_test.cc

Issue 411823002: Land Recent QUIC Changes (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase TOT Created 6 years, 4 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
« no previous file with comments | « net/quic/quic_unacked_packet_map.cc ('k') | net/quic/test_tools/quic_connection_peer.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 "net/quic/quic_unacked_packet_map.h" 5 #include "net/quic/quic_unacked_packet_map.h"
6 6
7 #include "net/quic/test_tools/quic_test_utils.h" 7 #include "net/quic/test_tools/quic_test_utils.h"
8 #include "testing/gtest/include/gtest/gtest.h" 8 #include "testing/gtest/include/gtest/gtest.h"
9 9
10 namespace net { 10 namespace net {
(...skipping 15 matching lines...) Expand all
26 return SerializedPacket(sequence_number, PACKET_1BYTE_SEQUENCE_NUMBER, NULL, 26 return SerializedPacket(sequence_number, PACKET_1BYTE_SEQUENCE_NUMBER, NULL,
27 0, new RetransmittableFrames()); 27 0, new RetransmittableFrames());
28 } 28 }
29 29
30 SerializedPacket CreateNonRetransmittablePacket( 30 SerializedPacket CreateNonRetransmittablePacket(
31 QuicPacketSequenceNumber sequence_number) { 31 QuicPacketSequenceNumber sequence_number) {
32 return SerializedPacket( 32 return SerializedPacket(
33 sequence_number, PACKET_1BYTE_SEQUENCE_NUMBER, NULL, 0, NULL); 33 sequence_number, PACKET_1BYTE_SEQUENCE_NUMBER, NULL, 0, NULL);
34 } 34 }
35 35
36 void VerifyPendingPackets(QuicPacketSequenceNumber* packets, 36 void VerifyInFlightPackets(QuicPacketSequenceNumber* packets,
37 size_t num_packets) { 37 size_t num_packets) {
38 if (num_packets == 0) { 38 if (num_packets == 0) {
39 EXPECT_FALSE(unacked_packets_.HasInFlightPackets()); 39 EXPECT_FALSE(unacked_packets_.HasInFlightPackets());
40 EXPECT_FALSE(unacked_packets_.HasMultipleInFlightPackets()); 40 EXPECT_FALSE(unacked_packets_.HasMultipleInFlightPackets());
41 return; 41 return;
42 } 42 }
43 if (num_packets == 1) { 43 if (num_packets == 1) {
44 EXPECT_TRUE(unacked_packets_.HasInFlightPackets()); 44 EXPECT_TRUE(unacked_packets_.HasInFlightPackets());
45 EXPECT_FALSE(unacked_packets_.HasMultipleInFlightPackets()); 45 EXPECT_FALSE(unacked_packets_.HasMultipleInFlightPackets());
46 ASSERT_TRUE(unacked_packets_.IsUnacked(packets[0]));
47 EXPECT_TRUE(unacked_packets_.GetTransmissionInfo(packets[0]).in_flight);
46 } 48 }
47 for (size_t i = 0; i < num_packets; ++i) { 49 for (size_t i = 0; i < num_packets; ++i) {
48 ASSERT_TRUE(unacked_packets_.IsUnacked(packets[i])); 50 ASSERT_TRUE(unacked_packets_.IsUnacked(packets[i]));
49 EXPECT_TRUE(unacked_packets_.GetTransmissionInfo(packets[i]).in_flight); 51 EXPECT_TRUE(unacked_packets_.GetTransmissionInfo(packets[i]).in_flight);
50 } 52 }
53 size_t in_flight_count = 0;
54 for (QuicUnackedPacketMap::const_iterator it = unacked_packets_.begin();
55 it != unacked_packets_.end(); ++it) {
56 if (it->second.in_flight) {
57 ++in_flight_count;
58 }
59 }
60 EXPECT_EQ(num_packets, in_flight_count);
51 } 61 }
52 62
53 void VerifyUnackedPackets(QuicPacketSequenceNumber* packets, 63 void VerifyUnackedPackets(QuicPacketSequenceNumber* packets,
54 size_t num_packets) { 64 size_t num_packets) {
55 if (num_packets == 0) { 65 if (num_packets == 0) {
56 EXPECT_FALSE(unacked_packets_.HasUnackedPackets()); 66 EXPECT_FALSE(unacked_packets_.HasUnackedPackets());
57 EXPECT_FALSE(unacked_packets_.HasUnackedRetransmittableFrames()); 67 EXPECT_FALSE(unacked_packets_.HasUnackedRetransmittableFrames());
58 return; 68 return;
59 } 69 }
60 EXPECT_TRUE(unacked_packets_.HasUnackedPackets()); 70 EXPECT_TRUE(unacked_packets_.HasUnackedPackets());
61 for (size_t i = 0; i < num_packets; ++i) { 71 for (size_t i = 0; i < num_packets; ++i) {
62 EXPECT_TRUE(unacked_packets_.IsUnacked(packets[i])) << packets[i]; 72 EXPECT_TRUE(unacked_packets_.IsUnacked(packets[i])) << packets[i];
63 } 73 }
74 size_t unacked_count = 0;
75 for (QuicUnackedPacketMap::const_iterator it = unacked_packets_.begin();
76 it != unacked_packets_.end(); ++it) {
77 ++unacked_count;
78 }
79 EXPECT_EQ(num_packets, unacked_count);
64 } 80 }
65 81
66 void VerifyRetransmittablePackets(QuicPacketSequenceNumber* packets, 82 void VerifyRetransmittablePackets(QuicPacketSequenceNumber* packets,
67 size_t num_packets) { 83 size_t num_packets) {
68 size_t num_retransmittable_packets = 0; 84 size_t num_retransmittable_packets = 0;
69 for (QuicUnackedPacketMap::const_iterator it = unacked_packets_.begin(); 85 for (QuicUnackedPacketMap::const_iterator it = unacked_packets_.begin();
70 it != unacked_packets_.end(); ++it) { 86 it != unacked_packets_.end(); ++it) {
71 if (it->second.retransmittable_frames != NULL) { 87 if (it->second.retransmittable_frames != NULL) {
72 ++num_retransmittable_packets; 88 ++num_retransmittable_packets;
73 } 89 }
74 } 90 }
75 EXPECT_EQ(num_packets, num_retransmittable_packets); 91 EXPECT_EQ(num_packets, num_retransmittable_packets);
76 for (size_t i = 0; i < num_packets; ++i) { 92 for (size_t i = 0; i < num_packets; ++i) {
77 EXPECT_TRUE(unacked_packets_.HasRetransmittableFrames(packets[i])) 93 EXPECT_TRUE(unacked_packets_.HasRetransmittableFrames(packets[i]))
78 << " packets[" << i << "]:" << packets[i]; 94 << " packets[" << i << "]:" << packets[i];
79 } 95 }
80 } 96 }
81 97
82 QuicUnackedPacketMap unacked_packets_; 98 QuicUnackedPacketMap unacked_packets_;
83 QuicTime now_; 99 QuicTime now_;
84 }; 100 };
85 101
86 TEST_F(QuicUnackedPacketMapTest, RttOnly) { 102 TEST_F(QuicUnackedPacketMapTest, RttOnly) {
87 // Acks are only tracked for RTT measurement purposes. 103 // Acks are only tracked for RTT measurement purposes.
88 unacked_packets_.AddPacket(CreateNonRetransmittablePacket(1)); 104 unacked_packets_.AddPacket(CreateNonRetransmittablePacket(1));
89 unacked_packets_.SetSent(1, now_, kDefaultAckLength, false); 105 unacked_packets_.SetSent(1, now_, kDefaultAckLength, false);
90 106
91 QuicPacketSequenceNumber unacked[] = { 1 }; 107 QuicPacketSequenceNumber unacked[] = { 1 };
92 VerifyUnackedPackets(unacked, arraysize(unacked)); 108 VerifyUnackedPackets(unacked, arraysize(unacked));
93 VerifyPendingPackets(NULL, 0); 109 VerifyInFlightPackets(NULL, 0);
94 VerifyRetransmittablePackets(NULL, 0); 110 VerifyRetransmittablePackets(NULL, 0);
95 111
96 unacked_packets_.IncreaseLargestObserved(1); 112 unacked_packets_.IncreaseLargestObserved(1);
97 VerifyUnackedPackets(NULL, 0); 113 VerifyUnackedPackets(NULL, 0);
98 VerifyPendingPackets(NULL, 0); 114 VerifyInFlightPackets(NULL, 0);
99 VerifyRetransmittablePackets(NULL, 0); 115 VerifyRetransmittablePackets(NULL, 0);
100 } 116 }
101 117
102 TEST_F(QuicUnackedPacketMapTest, RetransmittableInflightAndRtt) { 118 TEST_F(QuicUnackedPacketMapTest, RetransmittableInflightAndRtt) {
103 // Simulate a retransmittable packet being sent and acked. 119 // Simulate a retransmittable packet being sent and acked.
104 unacked_packets_.AddPacket(CreateRetransmittablePacket(1)); 120 unacked_packets_.AddPacket(CreateRetransmittablePacket(1));
105 unacked_packets_.SetSent(1, now_, kDefaultLength, true); 121 unacked_packets_.SetSent(1, now_, kDefaultLength, true);
106 122
107 QuicPacketSequenceNumber unacked[] = { 1 }; 123 QuicPacketSequenceNumber unacked[] = { 1 };
108 VerifyUnackedPackets(unacked, arraysize(unacked)); 124 VerifyUnackedPackets(unacked, arraysize(unacked));
109 VerifyPendingPackets(unacked, arraysize(unacked)); 125 VerifyInFlightPackets(unacked, arraysize(unacked));
110 VerifyRetransmittablePackets(unacked, arraysize(unacked)); 126 VerifyRetransmittablePackets(unacked, arraysize(unacked));
111 127
112 unacked_packets_.RemoveRetransmittability(1); 128 unacked_packets_.RemoveRetransmittability(1);
113 VerifyUnackedPackets(unacked, arraysize(unacked)); 129 VerifyUnackedPackets(unacked, arraysize(unacked));
114 VerifyPendingPackets(unacked, arraysize(unacked)); 130 VerifyInFlightPackets(unacked, arraysize(unacked));
115 VerifyRetransmittablePackets(NULL, 0); 131 VerifyRetransmittablePackets(NULL, 0);
116 132
117 unacked_packets_.IncreaseLargestObserved(1); 133 unacked_packets_.IncreaseLargestObserved(1);
118 VerifyUnackedPackets(unacked, arraysize(unacked)); 134 VerifyUnackedPackets(unacked, arraysize(unacked));
119 VerifyPendingPackets(unacked, arraysize(unacked)); 135 VerifyInFlightPackets(unacked, arraysize(unacked));
120 VerifyRetransmittablePackets(NULL, 0); 136 VerifyRetransmittablePackets(NULL, 0);
121 137
122 unacked_packets_.RemoveFromInFlight(1); 138 unacked_packets_.RemoveFromInFlight(1);
123 VerifyUnackedPackets(NULL, 0); 139 VerifyUnackedPackets(NULL, 0);
124 VerifyPendingPackets(NULL, 0); 140 VerifyInFlightPackets(NULL, 0);
125 VerifyRetransmittablePackets(NULL, 0); 141 VerifyRetransmittablePackets(NULL, 0);
126 } 142 }
127 143
128 TEST_F(QuicUnackedPacketMapTest, RetransmittedPacket) { 144 TEST_F(QuicUnackedPacketMapTest, RetransmittedPacket) {
129 // Simulate a retransmittable packet being sent, retransmitted, and the first 145 // Simulate a retransmittable packet being sent, retransmitted, and the first
130 // transmission being acked. 146 // transmission being acked.
131 unacked_packets_.AddPacket(CreateRetransmittablePacket(1)); 147 unacked_packets_.AddPacket(CreateRetransmittablePacket(1));
132 unacked_packets_.SetSent(1, now_, kDefaultLength, true); 148 unacked_packets_.SetSent(1, now_, kDefaultLength, true);
133 unacked_packets_.OnRetransmittedPacket(1, 2, LOSS_RETRANSMISSION); 149 unacked_packets_.OnRetransmittedPacket(1, 2, LOSS_RETRANSMISSION);
134 unacked_packets_.SetSent(2, now_, kDefaultLength, true); 150 unacked_packets_.SetSent(2, now_, kDefaultLength, true);
135 151
136 QuicPacketSequenceNumber unacked[] = { 1, 2 }; 152 QuicPacketSequenceNumber unacked[] = { 1, 2 };
137 VerifyUnackedPackets(unacked, arraysize(unacked)); 153 VerifyUnackedPackets(unacked, arraysize(unacked));
138 VerifyPendingPackets(unacked, arraysize(unacked)); 154 VerifyInFlightPackets(unacked, arraysize(unacked));
139 QuicPacketSequenceNumber retransmittable[] = { 2 }; 155 QuicPacketSequenceNumber retransmittable[] = { 2 };
140 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); 156 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable));
141 157
142 unacked_packets_.RemoveRetransmittability(1); 158 unacked_packets_.RemoveRetransmittability(1);
143 VerifyUnackedPackets(unacked, arraysize(unacked)); 159 VerifyUnackedPackets(unacked, arraysize(unacked));
144 VerifyPendingPackets(unacked, arraysize(unacked)); 160 VerifyInFlightPackets(unacked, arraysize(unacked));
145 VerifyRetransmittablePackets(NULL, 0); 161 VerifyRetransmittablePackets(NULL, 0);
146 162
147 unacked_packets_.IncreaseLargestObserved(2); 163 unacked_packets_.IncreaseLargestObserved(2);
148 VerifyUnackedPackets(unacked, arraysize(unacked)); 164 VerifyUnackedPackets(unacked, arraysize(unacked));
149 VerifyPendingPackets(unacked, arraysize(unacked)); 165 VerifyInFlightPackets(unacked, arraysize(unacked));
150 VerifyRetransmittablePackets(NULL, 0); 166 VerifyRetransmittablePackets(NULL, 0);
151 167
152 unacked_packets_.RemoveFromInFlight(2); 168 unacked_packets_.RemoveFromInFlight(2);
153 QuicPacketSequenceNumber unacked2[] = { 1 }; 169 QuicPacketSequenceNumber unacked2[] = { 1 };
154 VerifyUnackedPackets(unacked, arraysize(unacked2)); 170 VerifyUnackedPackets(unacked, arraysize(unacked2));
155 VerifyPendingPackets(unacked, arraysize(unacked2)); 171 VerifyInFlightPackets(unacked, arraysize(unacked2));
156 VerifyRetransmittablePackets(NULL, 0); 172 VerifyRetransmittablePackets(NULL, 0);
157 173
158 unacked_packets_.RemoveFromInFlight(1); 174 unacked_packets_.RemoveFromInFlight(1);
159 VerifyUnackedPackets(NULL, 0); 175 VerifyUnackedPackets(NULL, 0);
160 VerifyPendingPackets(NULL, 0); 176 VerifyInFlightPackets(NULL, 0);
161 VerifyRetransmittablePackets(NULL, 0); 177 VerifyRetransmittablePackets(NULL, 0);
162 } 178 }
163 179
180 TEST_F(QuicUnackedPacketMapTest, RetransmitTwice) {
181 // Simulate a retransmittable packet being sent and retransmitted twice.
182 unacked_packets_.AddPacket(CreateRetransmittablePacket(1));
183 unacked_packets_.SetSent(1, now_, kDefaultLength, true);
184 unacked_packets_.AddPacket(CreateRetransmittablePacket(2));
185 unacked_packets_.SetSent(2, now_, kDefaultLength, true);
186
187 QuicPacketSequenceNumber unacked[] = { 1, 2 };
188 VerifyUnackedPackets(unacked, arraysize(unacked));
189 VerifyInFlightPackets(unacked, arraysize(unacked));
190 QuicPacketSequenceNumber retransmittable[] = { 1, 2 };
191 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable));
192
193 // Early retransmit 1 as 3 and send new data as 4.
194 unacked_packets_.IncreaseLargestObserved(2);
195 unacked_packets_.RemoveFromInFlight(2);
196 unacked_packets_.RemoveRetransmittability(2);
197 unacked_packets_.RemoveFromInFlight(1);
198 unacked_packets_.OnRetransmittedPacket(1, 3, LOSS_RETRANSMISSION);
199 unacked_packets_.SetSent(3, now_, kDefaultLength, true);
200 unacked_packets_.AddPacket(CreateRetransmittablePacket(4));
201 unacked_packets_.SetSent(4, now_, kDefaultLength, true);
202
203 QuicPacketSequenceNumber unacked2[] = { 1, 3, 4 };
204 VerifyUnackedPackets(unacked2, arraysize(unacked2));
205 QuicPacketSequenceNumber pending2[] = { 3, 4, };
206 VerifyInFlightPackets(pending2, arraysize(pending2));
207 QuicPacketSequenceNumber retransmittable2[] = { 3, 4 };
208 VerifyRetransmittablePackets(retransmittable2, arraysize(retransmittable2));
209
210 // Early retransmit 3 (formerly 1) as 5, and remove 1 from unacked.
211 unacked_packets_.IncreaseLargestObserved(4);
212 unacked_packets_.RemoveFromInFlight(4);
213 unacked_packets_.RemoveRetransmittability(4);
214 unacked_packets_.RemoveFromInFlight(3);
215 unacked_packets_.OnRetransmittedPacket(3, 5, LOSS_RETRANSMISSION);
216 unacked_packets_.SetSent(5, now_, kDefaultLength, true);
217
218 QuicPacketSequenceNumber unacked3[] = { 3, 5 };
219 VerifyUnackedPackets(unacked3, arraysize(unacked3));
220 QuicPacketSequenceNumber pending3[] = { 5 };
221 VerifyInFlightPackets(pending3, arraysize(pending3));
222 QuicPacketSequenceNumber retransmittable3[] = { 5 };
223 VerifyRetransmittablePackets(retransmittable3, arraysize(retransmittable3));
224 }
225
164 } // namespace 226 } // namespace
165 } // namespace test 227 } // namespace test
166 } // namespace net 228 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/quic_unacked_packet_map.cc ('k') | net/quic/test_tools/quic_connection_peer.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698