Index: net/quic/quic_buffered_packet_store_test.cc |
diff --git a/net/quic/quic_buffered_packet_store_test.cc b/net/quic/quic_buffered_packet_store_test.cc |
deleted file mode 100644 |
index ba0b25f327b7c55e3d4b7969713f1773be26634c..0000000000000000000000000000000000000000 |
--- a/net/quic/quic_buffered_packet_store_test.cc |
+++ /dev/null |
@@ -1,230 +0,0 @@ |
-// Copyright (c) 2016 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include "net/quic/quic_buffered_packet_store.h" |
- |
-#include <list> |
-#include <string> |
- |
-#include "base/stl_util.h" |
-#include "net/quic/test_tools/mock_clock.h" |
-#include "net/quic/test_tools/quic_test_utils.h" |
-#include "testing/gmock/include/gmock/gmock.h" |
-#include "testing/gtest/include/gtest/gtest.h" |
- |
-using std::list; |
-using std::string; |
- |
-namespace net { |
- |
-typedef QuicBufferedPacketStore::BufferedPacket BufferedPacket; |
-typedef QuicBufferedPacketStore::EnqueuePacketResult EnqueuePacketResult; |
- |
-static const size_t kDefaultMaxConnectionsInStore = 100; |
- |
-namespace test { |
-class QuicBufferedPacketStorePeer { |
- public: |
- static QuicAlarm* expiration_alarm(QuicBufferedPacketStore* store) { |
- return store->expiration_alarm_.get(); |
- } |
-}; |
- |
-namespace { |
- |
-typedef QuicBufferedPacketStore::BufferedPacket BufferedPacket; |
-typedef QuicBufferedPacketStore::BufferedPacketList BufferedPacketList; |
- |
-class QuicBufferedPacketStoreVisitor |
- : public QuicBufferedPacketStore::VisitorInterface { |
- public: |
- QuicBufferedPacketStoreVisitor() {} |
- |
- ~QuicBufferedPacketStoreVisitor() override {} |
- |
- void OnExpiredPackets(QuicConnectionId connection_id, |
- BufferedPacketList early_arrived_packets) override { |
- last_expired_packet_queue_ = std::move(early_arrived_packets); |
- } |
- |
- // The packets queue for most recently expirect connection. |
- BufferedPacketList last_expired_packet_queue_; |
-}; |
- |
-class QuicBufferedPacketStoreTest : public ::testing::Test { |
- public: |
- QuicBufferedPacketStoreTest() |
- : store_(&visitor_, &clock_, &alarm_factory_), |
- server_address_(Loopback6(), 65535), |
- client_address_(Loopback6(), 65535), |
- packet_content_("some encrypted content"), |
- packet_time_(QuicTime::Zero() + QuicTime::Delta::FromMicroseconds(42)), |
- data_packet_(packet_content_.data(), |
- packet_content_.size(), |
- packet_time_) {} |
- |
- protected: |
- QuicBufferedPacketStoreVisitor visitor_; |
- MockClock clock_; |
- MockAlarmFactory alarm_factory_; |
- QuicBufferedPacketStore store_; |
- IPEndPoint server_address_; |
- IPEndPoint client_address_; |
- string packet_content_; |
- QuicTime packet_time_; |
- QuicReceivedPacket data_packet_; |
-}; |
- |
-TEST_F(QuicBufferedPacketStoreTest, SimpleEnqueueAndDeliverPacket) { |
- QuicConnectionId connection_id = 1; |
- store_.EnqueuePacket(connection_id, data_packet_, server_address_, |
- client_address_); |
- EXPECT_TRUE(store_.HasBufferedPackets(connection_id)); |
- list<BufferedPacket> queue = store_.DeliverPackets(connection_id); |
- ASSERT_EQ(1u, queue.size()); |
- // Check content of the only packet in the queue. |
- EXPECT_EQ(packet_content_, queue.front().packet->AsStringPiece()); |
- EXPECT_EQ(packet_time_, queue.front().packet->receipt_time()); |
- EXPECT_EQ(client_address_, queue.front().client_address); |
- EXPECT_EQ(server_address_, queue.front().server_address); |
- // No more packets on connection 1 should remain in the store. |
- EXPECT_TRUE(store_.DeliverPackets(connection_id).empty()); |
- EXPECT_FALSE(store_.HasBufferedPackets(connection_id)); |
-} |
- |
-TEST_F(QuicBufferedPacketStoreTest, DifferentPacketAddressOnOneConnection) { |
- IPEndPoint addr_with_new_port(Loopback4(), 256); |
- QuicConnectionId connection_id = 1; |
- store_.EnqueuePacket(connection_id, data_packet_, server_address_, |
- client_address_); |
- store_.EnqueuePacket(connection_id, data_packet_, server_address_, |
- addr_with_new_port); |
- list<BufferedPacket> queue = store_.DeliverPackets(connection_id); |
- ASSERT_EQ(2u, queue.size()); |
- // The address migration path should be preserved. |
- EXPECT_EQ(client_address_, queue.front().client_address); |
- EXPECT_EQ(addr_with_new_port, queue.back().client_address); |
-} |
- |
-TEST_F(QuicBufferedPacketStoreTest, |
- EnqueueAndDeliverMultiplePacketsOnMultipleConnections) { |
- size_t num_connections = 10; |
- for (QuicConnectionId connection_id = 1; connection_id <= num_connections; |
- ++connection_id) { |
- store_.EnqueuePacket(connection_id, data_packet_, server_address_, |
- client_address_); |
- store_.EnqueuePacket(connection_id, data_packet_, server_address_, |
- client_address_); |
- } |
- |
- // Deliver packets in reversed order. |
- for (QuicConnectionId connection_id = num_connections; connection_id > 0; |
- --connection_id) { |
- list<BufferedPacket> queue = store_.DeliverPackets(connection_id); |
- ASSERT_EQ(2u, queue.size()); |
- } |
-} |
- |
-TEST_F(QuicBufferedPacketStoreTest, |
- FailToBufferTooManyPacketsOnExistingConnection) { |
- // Tests that for one connection, only limited number of packets can be |
- // buffered. |
- size_t num_packets = kDefaultMaxUndecryptablePackets + 1; |
- QuicConnectionId connection_id = 1; |
- for (size_t i = 1; i <= num_packets; ++i) { |
- // Only first |kDefaultMaxUndecryptablePackets packets| will be buffered. |
- EnqueuePacketResult result = store_.EnqueuePacket( |
- connection_id, data_packet_, server_address_, client_address_); |
- if (i <= kDefaultMaxUndecryptablePackets) { |
- EXPECT_EQ(EnqueuePacketResult::SUCCESS, result); |
- } else { |
- EXPECT_EQ(EnqueuePacketResult::TOO_MANY_PACKETS, result); |
- } |
- } |
- |
- // Only first |kDefaultMaxUndecryptablePackets| packets are kept in the store |
- // and can be delivered. |
- EXPECT_EQ(kDefaultMaxUndecryptablePackets, |
- store_.DeliverPackets(connection_id).size()); |
-} |
- |
-TEST_F(QuicBufferedPacketStoreTest, FailToBufferPacketsForTooManyConnections) { |
- // Tests that store can only keep early arrived packets for limited number of |
- // connections. |
- size_t num_connections = kDefaultMaxConnectionsInStore + 1; |
- for (size_t connection_id = 1; connection_id <= num_connections; |
- ++connection_id) { |
- EnqueuePacketResult result = store_.EnqueuePacket( |
- connection_id, data_packet_, server_address_, client_address_); |
- if (connection_id <= kDefaultMaxConnectionsInStore) { |
- EXPECT_EQ(EnqueuePacketResult::SUCCESS, result); |
- } else { |
- EXPECT_EQ(EnqueuePacketResult::TOO_MANY_CONNECTIONS, result); |
- } |
- } |
- // Store only keeps early arrived packets upto |kDefaultMaxConnectionsInStore| |
- // connections. |
- for (size_t connection_id = 1; connection_id <= num_connections; |
- ++connection_id) { |
- list<BufferedPacket> queue = store_.DeliverPackets(connection_id); |
- if (connection_id <= kDefaultMaxConnectionsInStore) { |
- EXPECT_EQ(1u, queue.size()); |
- } else { |
- EXPECT_EQ(0u, queue.size()); |
- } |
- } |
-} |
- |
-TEST_F(QuicBufferedPacketStoreTest, PacketQueueExpiredBeforeDelivery) { |
- QuicConnectionId connection_id = 1; |
- store_.EnqueuePacket(connection_id, data_packet_, server_address_, |
- client_address_); |
- // Packet for another connection arrive 1ms later. |
- clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(1)); |
- QuicConnectionId connection_id2 = 2; |
- // Use different client address to differetiate packets from different |
- // connections. |
- IPEndPoint another_client_address(Loopback4(), 255); |
- store_.EnqueuePacket(connection_id2, data_packet_, server_address_, |
- another_client_address); |
- // Advance clock to the time when connection 1 expires. |
- clock_.AdvanceTime( |
- QuicBufferedPacketStorePeer::expiration_alarm(&store_)->deadline() - |
- clock_.ApproximateNow()); |
- ASSERT_GE(clock_.ApproximateNow(), |
- QuicBufferedPacketStorePeer::expiration_alarm(&store_)->deadline()); |
- // Fire alarm to remove long-staying connection 1 packets. |
- alarm_factory_.FireAlarm( |
- QuicBufferedPacketStorePeer::expiration_alarm(&store_)); |
- EXPECT_EQ(1u, visitor_.last_expired_packet_queue_.buffered_packets.size()); |
- // Try to deliver packets, but packet queue has been removed so no |
- // packets can be returned. |
- ASSERT_EQ(0u, store_.DeliverPackets(connection_id).size()); |
- |
- // Deliver packets on connection 2. And the queue for connection 2 should be |
- // returned. |
- list<BufferedPacket> queue = store_.DeliverPackets(connection_id2); |
- ASSERT_EQ(1u, queue.size()); |
- // Packets in connection 2 should use another client address. |
- EXPECT_EQ(another_client_address, queue.front().client_address); |
- |
- // Test the alarm is reset by enqueueing 2 packets for 3rd connection and wait |
- // for them to expire. |
- QuicConnectionId connection_id3 = 3; |
- store_.EnqueuePacket(connection_id3, data_packet_, server_address_, |
- client_address_); |
- store_.EnqueuePacket(connection_id3, data_packet_, server_address_, |
- client_address_); |
- clock_.AdvanceTime( |
- QuicBufferedPacketStorePeer::expiration_alarm(&store_)->deadline() - |
- clock_.ApproximateNow()); |
- alarm_factory_.FireAlarm( |
- QuicBufferedPacketStorePeer::expiration_alarm(&store_)); |
- // |last_expired_packet_queue_| should be updated. |
- EXPECT_EQ(2u, visitor_.last_expired_packet_queue_.buffered_packets.size()); |
-} |
- |
-} // namespace |
-} // namespace test |
-} // namespace net |