OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 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 "net/quic/quic_received_packet_manager.h" | 5 #include "net/quic/quic_received_packet_manager.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <vector> | 8 #include <vector> |
9 | 9 |
10 #include "net/quic/quic_connection_stats.h" | 10 #include "net/quic/quic_connection_stats.h" |
| 11 #include "net/quic/quic_flags.h" |
11 #include "net/quic/test_tools/quic_received_packet_manager_peer.h" | 12 #include "net/quic/test_tools/quic_received_packet_manager_peer.h" |
12 #include "testing/gmock/include/gmock/gmock.h" | 13 #include "testing/gmock/include/gmock/gmock.h" |
13 #include "testing/gtest/include/gtest/gtest.h" | 14 #include "testing/gtest/include/gtest/gtest.h" |
14 | 15 |
15 using std::pair; | 16 using std::pair; |
16 using std::vector; | 17 using std::vector; |
17 | 18 |
18 namespace net { | 19 namespace net { |
19 namespace test { | 20 namespace test { |
20 | 21 |
(...skipping 272 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
293 received_manager_.RecordPacketReceived(0u, header, QuicTime::Zero()); | 294 received_manager_.RecordPacketReceived(0u, header, QuicTime::Zero()); |
294 EXPECT_TRUE(received_manager_.IsAwaitingPacket(3u)); | 295 EXPECT_TRUE(received_manager_.IsAwaitingPacket(3u)); |
295 EXPECT_TRUE(received_manager_.IsAwaitingPacket(6u)); | 296 EXPECT_TRUE(received_manager_.IsAwaitingPacket(6u)); |
296 EXPECT_TRUE(QuicReceivedPacketManagerPeer::DontWaitForPacketsBefore( | 297 EXPECT_TRUE(QuicReceivedPacketManagerPeer::DontWaitForPacketsBefore( |
297 &received_manager_, 4)); | 298 &received_manager_, 4)); |
298 EXPECT_FALSE(received_manager_.IsAwaitingPacket(3u)); | 299 EXPECT_FALSE(received_manager_.IsAwaitingPacket(3u)); |
299 EXPECT_TRUE(received_manager_.IsAwaitingPacket(6u)); | 300 EXPECT_TRUE(received_manager_.IsAwaitingPacket(6u)); |
300 } | 301 } |
301 | 302 |
302 TEST_F(QuicReceivedPacketManagerTest, UpdateReceivedPacketInfo) { | 303 TEST_F(QuicReceivedPacketManagerTest, UpdateReceivedPacketInfo) { |
| 304 FLAGS_quic_dont_copy_acks = false; |
303 QuicPacketHeader header; | 305 QuicPacketHeader header; |
304 header.packet_number = 2u; | 306 header.packet_number = 2u; |
305 QuicTime two_ms = QuicTime::Zero().Add(QuicTime::Delta::FromMilliseconds(2)); | 307 QuicTime two_ms = QuicTime::Zero().Add(QuicTime::Delta::FromMilliseconds(2)); |
306 EXPECT_FALSE(received_manager_.ack_frame_updated()); | 308 EXPECT_FALSE(received_manager_.ack_frame_updated()); |
307 received_manager_.RecordPacketReceived(0u, header, two_ms); | 309 received_manager_.RecordPacketReceived(0u, header, two_ms); |
308 EXPECT_TRUE(received_manager_.ack_frame_updated()); | 310 EXPECT_TRUE(received_manager_.ack_frame_updated()); |
309 | 311 |
310 QuicAckFrame ack; | 312 QuicAckFrame ack; |
311 received_manager_.UpdateReceivedPacketInfo(&ack, QuicTime::Zero()); | 313 received_manager_.UpdateReceivedPacketInfo(&ack, QuicTime::Zero()); |
312 EXPECT_FALSE(received_manager_.ack_frame_updated()); | 314 EXPECT_FALSE(received_manager_.ack_frame_updated()); |
(...skipping 17 matching lines...) Expand all Loading... |
330 header.packet_number = 1000u; | 332 header.packet_number = 1000u; |
331 received_manager_.RecordPacketReceived(0u, header, two_ms); | 333 received_manager_.RecordPacketReceived(0u, header, two_ms); |
332 EXPECT_TRUE(received_manager_.ack_frame_updated()); | 334 EXPECT_TRUE(received_manager_.ack_frame_updated()); |
333 received_manager_.UpdateReceivedPacketInfo(&ack, two_ms); | 335 received_manager_.UpdateReceivedPacketInfo(&ack, two_ms); |
334 EXPECT_FALSE(received_manager_.ack_frame_updated()); | 336 EXPECT_FALSE(received_manager_.ack_frame_updated()); |
335 // UpdateReceivedPacketInfo should discard any times which can't be | 337 // UpdateReceivedPacketInfo should discard any times which can't be |
336 // expressed on the wire. | 338 // expressed on the wire. |
337 EXPECT_EQ(2ul, ack.received_packet_times.size()); | 339 EXPECT_EQ(2ul, ack.received_packet_times.size()); |
338 } | 340 } |
339 | 341 |
| 342 TEST_F(QuicReceivedPacketManagerTest, GetUpdatedAckFrame) { |
| 343 FLAGS_quic_dont_copy_acks = true; |
| 344 QuicPacketHeader header; |
| 345 header.packet_number = 2u; |
| 346 QuicTime two_ms = QuicTime::Zero().Add(QuicTime::Delta::FromMilliseconds(2)); |
| 347 EXPECT_FALSE(received_manager_.ack_frame_updated()); |
| 348 received_manager_.RecordPacketReceived(0u, header, two_ms); |
| 349 EXPECT_TRUE(received_manager_.ack_frame_updated()); |
| 350 |
| 351 QuicFrame ack = received_manager_.GetUpdatedAckFrame(QuicTime::Zero()); |
| 352 EXPECT_FALSE(received_manager_.ack_frame_updated()); |
| 353 // When UpdateReceivedPacketInfo with a time earlier than the time of the |
| 354 // largest observed packet, make sure that the delta is 0, not negative. |
| 355 EXPECT_EQ(QuicTime::Delta::Zero(), ack.ack_frame->ack_delay_time); |
| 356 EXPECT_EQ(1u, ack.ack_frame->received_packet_times.size()); |
| 357 |
| 358 QuicTime four_ms = QuicTime::Zero().Add(QuicTime::Delta::FromMilliseconds(4)); |
| 359 ack = received_manager_.GetUpdatedAckFrame(four_ms); |
| 360 EXPECT_FALSE(received_manager_.ack_frame_updated()); |
| 361 // When UpdateReceivedPacketInfo after not having received a new packet, |
| 362 // the delta should still be accurate. |
| 363 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(2), |
| 364 ack.ack_frame->ack_delay_time); |
| 365 // And received packet times won't have change. |
| 366 EXPECT_EQ(1u, ack.ack_frame->received_packet_times.size()); |
| 367 |
| 368 header.packet_number = 999u; |
| 369 received_manager_.RecordPacketReceived(0u, header, two_ms); |
| 370 header.packet_number = 4u; |
| 371 received_manager_.RecordPacketReceived(0u, header, two_ms); |
| 372 header.packet_number = 1000u; |
| 373 received_manager_.RecordPacketReceived(0u, header, two_ms); |
| 374 EXPECT_TRUE(received_manager_.ack_frame_updated()); |
| 375 ack = received_manager_.GetUpdatedAckFrame(two_ms); |
| 376 EXPECT_FALSE(received_manager_.ack_frame_updated()); |
| 377 // UpdateReceivedPacketInfo should discard any times which can't be |
| 378 // expressed on the wire. |
| 379 EXPECT_EQ(2u, ack.ack_frame->received_packet_times.size()); |
| 380 } |
| 381 |
340 TEST_F(QuicReceivedPacketManagerTest, UpdateReceivedConnectionStats) { | 382 TEST_F(QuicReceivedPacketManagerTest, UpdateReceivedConnectionStats) { |
341 EXPECT_FALSE(received_manager_.ack_frame_updated()); | 383 EXPECT_FALSE(received_manager_.ack_frame_updated()); |
342 RecordPacketReceipt(1, 0); | 384 RecordPacketReceipt(1, 0); |
343 EXPECT_TRUE(received_manager_.ack_frame_updated()); | 385 EXPECT_TRUE(received_manager_.ack_frame_updated()); |
344 RecordPacketReceipt(6, 0); | 386 RecordPacketReceipt(6, 0); |
345 RecordPacketReceipt( | 387 RecordPacketReceipt( |
346 2, 0, QuicTime::Zero().Add(QuicTime::Delta::FromMilliseconds(1))); | 388 2, 0, QuicTime::Zero().Add(QuicTime::Delta::FromMilliseconds(1))); |
347 | 389 |
348 EXPECT_EQ(4u, stats_.max_sequence_reordering); | 390 EXPECT_EQ(4u, stats_.max_sequence_reordering); |
349 EXPECT_EQ(1000, stats_.max_time_reordering_us); | 391 EXPECT_EQ(1000, stats_.max_time_reordering_us); |
350 EXPECT_EQ(1u, stats_.packets_reordered); | 392 EXPECT_EQ(1u, stats_.packets_reordered); |
351 } | 393 } |
352 | 394 |
353 } // namespace | 395 } // namespace |
354 } // namespace test | 396 } // namespace test |
355 } // namespace net | 397 } // namespace net |
OLD | NEW |