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 #include "net/quic/quic_fec_group.h" | 5 #include "net/quic/quic_fec_group.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <vector> | 8 #include <vector> |
9 | 9 |
10 #include "base/basictypes.h" | 10 #include "base/basictypes.h" |
(...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
165 | 165 |
166 QuicPacketHeader header; | 166 QuicPacketHeader header; |
167 header.fec_group = 1; | 167 header.fec_group = 1; |
168 header.packet_number = 3; | 168 header.packet_number = 3; |
169 group.Update(ENCRYPTION_FORWARD_SECURE, header, data1); | 169 group.Update(ENCRYPTION_FORWARD_SECURE, header, data1); |
170 | 170 |
171 header.packet_number = 2; | 171 header.packet_number = 2; |
172 ASSERT_FALSE(group.UpdateFec(ENCRYPTION_FORWARD_SECURE, header, redundancy)); | 172 ASSERT_FALSE(group.UpdateFec(ENCRYPTION_FORWARD_SECURE, header, redundancy)); |
173 } | 173 } |
174 | 174 |
175 TEST_F(QuicFecGroupTest, ProtectsPacketsBefore) { | 175 TEST_F(QuicFecGroupTest, IsWaitingForPacketBefore) { |
176 QuicPacketHeader header; | 176 QuicPacketHeader header; |
177 header.fec_group = 3; | 177 header.fec_group = 3; |
178 header.packet_number = 3; | 178 header.packet_number = 3; |
179 | 179 |
180 QuicFecGroup group(3); | 180 QuicFecGroup group(3); |
181 ASSERT_TRUE(group.Update(ENCRYPTION_FORWARD_SECURE, header, kDataSingle)); | 181 ASSERT_TRUE(group.Update(ENCRYPTION_FORWARD_SECURE, header, kDataSingle)); |
182 | 182 |
183 EXPECT_FALSE(group.ProtectsPacketsBefore(1)); | 183 EXPECT_FALSE(group.IsWaitingForPacketBefore(1)); |
184 EXPECT_FALSE(group.ProtectsPacketsBefore(2)); | 184 EXPECT_FALSE(group.IsWaitingForPacketBefore(2)); |
185 EXPECT_FALSE(group.ProtectsPacketsBefore(3)); | 185 EXPECT_FALSE(group.IsWaitingForPacketBefore(3)); |
186 EXPECT_TRUE(group.ProtectsPacketsBefore(4)); | 186 EXPECT_FALSE(group.IsWaitingForPacketBefore(4)); |
187 EXPECT_TRUE(group.ProtectsPacketsBefore(5)); | 187 EXPECT_TRUE(group.IsWaitingForPacketBefore(5)); |
188 EXPECT_TRUE(group.ProtectsPacketsBefore(50)); | 188 EXPECT_TRUE(group.IsWaitingForPacketBefore(50)); |
189 } | 189 } |
190 | 190 |
191 TEST_F(QuicFecGroupTest, ProtectsPacketsBeforeWithSeveralPackets) { | 191 TEST_F(QuicFecGroupTest, IsWaitingForPacketBeforeWithSeveralPackets) { |
192 QuicPacketHeader header; | 192 QuicPacketHeader header; |
193 header.fec_group = 3; | 193 header.fec_group = 3; |
194 header.packet_number = 3; | 194 header.packet_number = 3; |
195 | 195 |
196 QuicFecGroup group(3); | 196 QuicFecGroup group(3); |
197 ASSERT_TRUE(group.Update(ENCRYPTION_FORWARD_SECURE, header, kDataSingle)); | 197 ASSERT_TRUE(group.Update(ENCRYPTION_FORWARD_SECURE, header, kDataSingle)); |
198 | 198 |
199 header.packet_number = 7; | 199 header.packet_number = 7; |
200 ASSERT_TRUE(group.Update(ENCRYPTION_FORWARD_SECURE, header, kDataSingle)); | 200 ASSERT_TRUE(group.Update(ENCRYPTION_FORWARD_SECURE, header, kDataSingle)); |
201 | 201 |
202 header.packet_number = 5; | 202 header.packet_number = 5; |
203 ASSERT_TRUE(group.Update(ENCRYPTION_FORWARD_SECURE, header, kDataSingle)); | 203 ASSERT_TRUE(group.Update(ENCRYPTION_FORWARD_SECURE, header, kDataSingle)); |
204 | 204 |
205 EXPECT_FALSE(group.ProtectsPacketsBefore(1)); | 205 EXPECT_FALSE(group.IsWaitingForPacketBefore(1)); |
206 EXPECT_FALSE(group.ProtectsPacketsBefore(2)); | 206 EXPECT_FALSE(group.IsWaitingForPacketBefore(2)); |
207 EXPECT_FALSE(group.ProtectsPacketsBefore(3)); | 207 EXPECT_FALSE(group.IsWaitingForPacketBefore(3)); |
208 EXPECT_TRUE(group.ProtectsPacketsBefore(4)); | 208 EXPECT_FALSE(group.IsWaitingForPacketBefore(4)); |
209 EXPECT_TRUE(group.ProtectsPacketsBefore(5)); | 209 EXPECT_TRUE(group.IsWaitingForPacketBefore(5)); |
210 EXPECT_TRUE(group.ProtectsPacketsBefore(6)); | 210 EXPECT_TRUE(group.IsWaitingForPacketBefore(6)); |
211 EXPECT_TRUE(group.ProtectsPacketsBefore(7)); | 211 EXPECT_TRUE(group.IsWaitingForPacketBefore(7)); |
212 EXPECT_TRUE(group.ProtectsPacketsBefore(8)); | 212 EXPECT_TRUE(group.IsWaitingForPacketBefore(8)); |
213 EXPECT_TRUE(group.ProtectsPacketsBefore(9)); | 213 EXPECT_TRUE(group.IsWaitingForPacketBefore(9)); |
214 EXPECT_TRUE(group.ProtectsPacketsBefore(50)); | 214 EXPECT_TRUE(group.IsWaitingForPacketBefore(50)); |
215 } | 215 } |
216 | 216 |
217 TEST_F(QuicFecGroupTest, ProtectsPacketsBeforeWithFecData) { | 217 TEST_F(QuicFecGroupTest, IsWaitingForPacketBeforeWithFecData1) { |
218 QuicFecGroup group(2); | 218 QuicFecGroup group(3); |
| 219 |
219 QuicPacketHeader header; | 220 QuicPacketHeader header; |
220 header.fec_group = 2; | 221 header.fec_group = 3; |
221 header.packet_number = 3; | 222 header.packet_number = 4; |
222 ASSERT_TRUE(group.UpdateFec(ENCRYPTION_FORWARD_SECURE, header, kDataSingle)); | 223 ASSERT_TRUE(group.UpdateFec(ENCRYPTION_FORWARD_SECURE, header, kDataSingle)); |
223 | 224 |
224 EXPECT_FALSE(group.ProtectsPacketsBefore(1)); | 225 EXPECT_FALSE(group.IsWaitingForPacketBefore(1)); |
225 EXPECT_FALSE(group.ProtectsPacketsBefore(2)); | 226 EXPECT_FALSE(group.IsWaitingForPacketBefore(2)); |
226 EXPECT_TRUE(group.ProtectsPacketsBefore(3)); | 227 EXPECT_FALSE(group.IsWaitingForPacketBefore(3)); |
227 EXPECT_TRUE(group.ProtectsPacketsBefore(4)); | 228 EXPECT_TRUE(group.IsWaitingForPacketBefore(4)); |
228 EXPECT_TRUE(group.ProtectsPacketsBefore(5)); | 229 EXPECT_TRUE(group.IsWaitingForPacketBefore(5)); |
229 EXPECT_TRUE(group.ProtectsPacketsBefore(50)); | 230 EXPECT_TRUE(group.IsWaitingForPacketBefore(6)); |
| 231 EXPECT_TRUE(group.IsWaitingForPacketBefore(50)); |
| 232 } |
| 233 |
| 234 TEST_F(QuicFecGroupTest, IsWaitingForPacketBeforeWithFecData2) { |
| 235 QuicFecGroup group(3); |
| 236 |
| 237 QuicPacketHeader header; |
| 238 header.fec_group = 3; |
| 239 header.packet_number = 3; |
| 240 ASSERT_TRUE(group.Update(ENCRYPTION_FORWARD_SECURE, header, kDataSingle)); |
| 241 |
| 242 header.packet_number = 5; |
| 243 ASSERT_TRUE(group.UpdateFec(ENCRYPTION_FORWARD_SECURE, header, kDataSingle)); |
| 244 |
| 245 EXPECT_FALSE(group.IsWaitingForPacketBefore(1)); |
| 246 EXPECT_FALSE(group.IsWaitingForPacketBefore(2)); |
| 247 EXPECT_FALSE(group.IsWaitingForPacketBefore(3)); |
| 248 EXPECT_FALSE(group.IsWaitingForPacketBefore(4)); |
| 249 EXPECT_TRUE(group.IsWaitingForPacketBefore(5)); |
| 250 EXPECT_TRUE(group.IsWaitingForPacketBefore(6)); |
| 251 EXPECT_TRUE(group.IsWaitingForPacketBefore(50)); |
230 } | 252 } |
231 | 253 |
232 TEST_F(QuicFecGroupTest, EffectiveEncryptionLevel) { | 254 TEST_F(QuicFecGroupTest, EffectiveEncryptionLevel) { |
233 QuicFecGroup group(1); | 255 QuicFecGroup group(1); |
234 EXPECT_EQ(NUM_ENCRYPTION_LEVELS, group.EffectiveEncryptionLevel()); | 256 EXPECT_EQ(NUM_ENCRYPTION_LEVELS, group.EffectiveEncryptionLevel()); |
235 | 257 |
236 QuicPacketHeader header; | 258 QuicPacketHeader header; |
237 header.fec_group = 1; | 259 header.fec_group = 1; |
238 header.packet_number = 5; | 260 header.packet_number = 5; |
239 ASSERT_TRUE(group.Update(ENCRYPTION_INITIAL, header, kDataSingle)); | 261 ASSERT_TRUE(group.Update(ENCRYPTION_INITIAL, header, kDataSingle)); |
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
311 | 333 |
312 // XOR the buffers and compare the result with the reference. | 334 // XOR the buffers and compare the result with the reference. |
313 QuicFecGroup::XorBuffers(shorter.buffer(), shorter.size(), | 335 QuicFecGroup::XorBuffers(shorter.buffer(), shorter.size(), |
314 longer.buffer()); | 336 longer.buffer()); |
315 EXPECT_EQ(output_reference, longer.AsStringPiece()); | 337 EXPECT_EQ(output_reference, longer.AsStringPiece()); |
316 } | 338 } |
317 } | 339 } |
318 } | 340 } |
319 | 341 |
320 } // namespace net | 342 } // namespace net |
OLD | NEW |