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/tools/quic/quic_time_wait_list_manager.h" | 5 #include "net/tools/quic/quic_time_wait_list_manager.h" |
6 | 6 |
7 #include <errno.h> | 7 #include <errno.h> |
8 | 8 |
9 #include "net/quic/crypto/crypto_protocol.h" | 9 #include "net/quic/crypto/crypto_protocol.h" |
10 #include "net/quic/crypto/null_encrypter.h" | 10 #include "net/quic/crypto/null_encrypter.h" |
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
82 QuicConnectionId connection_id) { | 82 QuicConnectionId connection_id) { |
83 return manager->GetQuicVersionFromConnectionId(connection_id); | 83 return manager->GetQuicVersionFromConnectionId(connection_id); |
84 } | 84 } |
85 }; | 85 }; |
86 | 86 |
87 namespace { | 87 namespace { |
88 | 88 |
89 class MockFakeTimeEpollServer : public FakeTimeEpollServer { | 89 class MockFakeTimeEpollServer : public FakeTimeEpollServer { |
90 public: | 90 public: |
91 MOCK_METHOD2(RegisterAlarm, | 91 MOCK_METHOD2(RegisterAlarm, |
92 void(int64 timeout_in_us, EpollAlarmCallbackInterface* alarm)); | 92 void(int64_t timeout_in_us, EpollAlarmCallbackInterface* alarm)); |
93 }; | 93 }; |
94 | 94 |
95 class QuicTimeWaitListManagerTest : public ::testing::Test { | 95 class QuicTimeWaitListManagerTest : public ::testing::Test { |
96 protected: | 96 protected: |
97 QuicTimeWaitListManagerTest() | 97 QuicTimeWaitListManagerTest() |
98 : helper_(&epoll_server_), | 98 : helper_(&epoll_server_), |
99 time_wait_list_manager_(&writer_, &visitor_, &helper_), | 99 time_wait_list_manager_(&writer_, &visitor_, &helper_), |
100 connection_id_(45), | 100 connection_id_(45), |
101 client_address_(net::test::TestPeerIPAddress(), kTestPort), | 101 client_address_(net::test::TestPeerIPAddress(), kTestPort), |
102 writer_is_blocked_(false) {} | 102 writer_is_blocked_(false) {} |
(...skipping 221 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
324 EXPECT_CALL(visitor_, OnConnectionAddedToTimeWaitList(connection_id)); | 324 EXPECT_CALL(visitor_, OnConnectionAddedToTimeWaitList(connection_id)); |
325 AddConnectionId(connection_id); | 325 AddConnectionId(connection_id); |
326 } | 326 } |
327 EXPECT_EQ(kConnectionIdCount, time_wait_list_manager_.num_connections()); | 327 EXPECT_EQ(kConnectionIdCount, time_wait_list_manager_.num_connections()); |
328 | 328 |
329 QuicTime::Delta offset = QuicTime::Delta::FromMicroseconds(39); | 329 QuicTime::Delta offset = QuicTime::Delta::FromMicroseconds(39); |
330 // Now set the current time as time_wait_period + offset usecs. | 330 // Now set the current time as time_wait_period + offset usecs. |
331 epoll_server_.set_now_in_usec(time_wait_period.Add(offset).ToMicroseconds()); | 331 epoll_server_.set_now_in_usec(time_wait_period.Add(offset).ToMicroseconds()); |
332 // After all the old connection_ids are cleaned up, check the next alarm | 332 // After all the old connection_ids are cleaned up, check the next alarm |
333 // interval. | 333 // interval. |
334 int64 next_alarm_time = epoll_server_.ApproximateNowInUsec() + | 334 int64_t next_alarm_time = epoll_server_.ApproximateNowInUsec() + |
335 time_wait_period.Subtract(offset).ToMicroseconds(); | 335 time_wait_period.Subtract(offset).ToMicroseconds(); |
336 EXPECT_CALL(epoll_server_, RegisterAlarm(next_alarm_time, _)); | 336 EXPECT_CALL(epoll_server_, RegisterAlarm(next_alarm_time, _)); |
337 | 337 |
338 for (size_t connection_id = 1; connection_id <= kConnectionIdCount; | 338 for (size_t connection_id = 1; connection_id <= kConnectionIdCount; |
339 ++connection_id) { | 339 ++connection_id) { |
340 if (connection_id <= kOldConnectionIdCount) { | 340 if (connection_id <= kOldConnectionIdCount) { |
341 EXPECT_CALL(visitor_, OnConnectionRemovedFromTimeWaitList(connection_id)); | 341 EXPECT_CALL(visitor_, OnConnectionRemovedFromTimeWaitList(connection_id)); |
342 } | 342 } |
343 } | 343 } |
344 time_wait_list_manager_.CleanUpOldConnectionIds(); | 344 time_wait_list_manager_.CleanUpOldConnectionIds(); |
345 for (size_t connection_id = 1; connection_id <= kConnectionIdCount; | 345 for (size_t connection_id = 1; connection_id <= kConnectionIdCount; |
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
454 const int kRandomSequenceNumber = 1; | 454 const int kRandomSequenceNumber = 1; |
455 ProcessPacket(connection_id_, kRandomSequenceNumber); | 455 ProcessPacket(connection_id_, kRandomSequenceNumber); |
456 | 456 |
457 const QuicTime::Delta time_wait_period = | 457 const QuicTime::Delta time_wait_period = |
458 QuicTimeWaitListManagerPeer::time_wait_period(&time_wait_list_manager_); | 458 QuicTimeWaitListManagerPeer::time_wait_period(&time_wait_list_manager_); |
459 | 459 |
460 QuicTime::Delta offset = QuicTime::Delta::FromMicroseconds(39); | 460 QuicTime::Delta offset = QuicTime::Delta::FromMicroseconds(39); |
461 // Now set the current time as time_wait_period + offset usecs. | 461 // Now set the current time as time_wait_period + offset usecs. |
462 epoll_server_.set_now_in_usec(time_wait_period.Add(offset).ToMicroseconds()); | 462 epoll_server_.set_now_in_usec(time_wait_period.Add(offset).ToMicroseconds()); |
463 // After the connection_ids are cleaned up, check the next alarm interval. | 463 // After the connection_ids are cleaned up, check the next alarm interval. |
464 int64 next_alarm_time = | 464 int64_t next_alarm_time = |
465 epoll_server_.ApproximateNowInUsec() + time_wait_period.ToMicroseconds(); | 465 epoll_server_.ApproximateNowInUsec() + time_wait_period.ToMicroseconds(); |
466 | 466 |
467 EXPECT_CALL(epoll_server_, RegisterAlarm(next_alarm_time, _)); | 467 EXPECT_CALL(epoll_server_, RegisterAlarm(next_alarm_time, _)); |
468 EXPECT_CALL(visitor_, OnConnectionRemovedFromTimeWaitList(connection_id_)); | 468 EXPECT_CALL(visitor_, OnConnectionRemovedFromTimeWaitList(connection_id_)); |
469 time_wait_list_manager_.CleanUpOldConnectionIds(); | 469 time_wait_list_manager_.CleanUpOldConnectionIds(); |
470 EXPECT_FALSE(IsConnectionIdInTimeWait(connection_id_)); | 470 EXPECT_FALSE(IsConnectionIdInTimeWait(connection_id_)); |
471 EXPECT_EQ(0u, time_wait_list_manager_.num_connections()); | 471 EXPECT_EQ(0u, time_wait_list_manager_.num_connections()); |
472 } | 472 } |
473 | 473 |
474 TEST_F(QuicTimeWaitListManagerTest, ConnectionIdsOrderedByTime) { | 474 TEST_F(QuicTimeWaitListManagerTest, ConnectionIdsOrderedByTime) { |
(...skipping 28 matching lines...) Expand all Loading... |
503 EXPECT_EQ(1u, time_wait_list_manager_.num_connections()); | 503 EXPECT_EQ(1u, time_wait_list_manager_.num_connections()); |
504 } | 504 } |
505 | 505 |
506 TEST_F(QuicTimeWaitListManagerTest, MaxConnectionsTest) { | 506 TEST_F(QuicTimeWaitListManagerTest, MaxConnectionsTest) { |
507 // Basically, shut off time-based eviction. | 507 // Basically, shut off time-based eviction. |
508 FLAGS_quic_time_wait_list_seconds = 10000000000; | 508 FLAGS_quic_time_wait_list_seconds = 10000000000; |
509 FLAGS_quic_time_wait_list_max_connections = 5; | 509 FLAGS_quic_time_wait_list_max_connections = 5; |
510 | 510 |
511 QuicConnectionId current_connection_id = 0; | 511 QuicConnectionId current_connection_id = 0; |
512 // Add exactly the maximum number of connections | 512 // Add exactly the maximum number of connections |
513 for (int64 i = 0; i < FLAGS_quic_time_wait_list_max_connections; ++i) { | 513 for (int64_t i = 0; i < FLAGS_quic_time_wait_list_max_connections; ++i) { |
514 ++current_connection_id; | 514 ++current_connection_id; |
515 EXPECT_FALSE(IsConnectionIdInTimeWait(current_connection_id)); | 515 EXPECT_FALSE(IsConnectionIdInTimeWait(current_connection_id)); |
516 EXPECT_CALL(visitor_, | 516 EXPECT_CALL(visitor_, |
517 OnConnectionAddedToTimeWaitList(current_connection_id)); | 517 OnConnectionAddedToTimeWaitList(current_connection_id)); |
518 AddConnectionId(current_connection_id); | 518 AddConnectionId(current_connection_id); |
519 EXPECT_EQ(current_connection_id, time_wait_list_manager_.num_connections()); | 519 EXPECT_EQ(current_connection_id, time_wait_list_manager_.num_connections()); |
520 EXPECT_TRUE(IsConnectionIdInTimeWait(current_connection_id)); | 520 EXPECT_TRUE(IsConnectionIdInTimeWait(current_connection_id)); |
521 } | 521 } |
522 | 522 |
523 // Now keep adding. Since we're already at the max, every new connection-id | 523 // Now keep adding. Since we're already at the max, every new connection-id |
524 // will evict the oldest one. | 524 // will evict the oldest one. |
525 for (int64 i = 0; i < FLAGS_quic_time_wait_list_max_connections; ++i) { | 525 for (int64_t i = 0; i < FLAGS_quic_time_wait_list_max_connections; ++i) { |
526 ++current_connection_id; | 526 ++current_connection_id; |
527 const QuicConnectionId id_to_evict = | 527 const QuicConnectionId id_to_evict = |
528 current_connection_id - FLAGS_quic_time_wait_list_max_connections; | 528 current_connection_id - FLAGS_quic_time_wait_list_max_connections; |
529 EXPECT_TRUE(IsConnectionIdInTimeWait(id_to_evict)); | 529 EXPECT_TRUE(IsConnectionIdInTimeWait(id_to_evict)); |
530 EXPECT_FALSE(IsConnectionIdInTimeWait(current_connection_id)); | 530 EXPECT_FALSE(IsConnectionIdInTimeWait(current_connection_id)); |
531 EXPECT_CALL(visitor_, OnConnectionRemovedFromTimeWaitList(id_to_evict)); | 531 EXPECT_CALL(visitor_, OnConnectionRemovedFromTimeWaitList(id_to_evict)); |
532 EXPECT_CALL(visitor_, | 532 EXPECT_CALL(visitor_, |
533 OnConnectionAddedToTimeWaitList(current_connection_id)); | 533 OnConnectionAddedToTimeWaitList(current_connection_id)); |
534 AddConnectionId(current_connection_id); | 534 AddConnectionId(current_connection_id); |
535 EXPECT_EQ(static_cast<size_t>(FLAGS_quic_time_wait_list_max_connections), | 535 EXPECT_EQ(static_cast<size_t>(FLAGS_quic_time_wait_list_max_connections), |
536 time_wait_list_manager_.num_connections()); | 536 time_wait_list_manager_.num_connections()); |
537 EXPECT_FALSE(IsConnectionIdInTimeWait(id_to_evict)); | 537 EXPECT_FALSE(IsConnectionIdInTimeWait(id_to_evict)); |
538 EXPECT_TRUE(IsConnectionIdInTimeWait(current_connection_id)); | 538 EXPECT_TRUE(IsConnectionIdInTimeWait(current_connection_id)); |
539 } | 539 } |
540 } | 540 } |
541 | 541 |
542 } // namespace | 542 } // namespace |
543 } // namespace test | 543 } // namespace test |
544 } // namespace tools | 544 } // namespace tools |
545 } // namespace net | 545 } // namespace net |
OLD | NEW |