OLD | NEW |
(Empty) | |
| 1 // Copyright (c) 2017 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. |
| 4 |
| 5 #include "net/quic/core/packet_number_indexed_queue.h" |
| 6 |
| 7 #include <limits> |
| 8 #include <map> |
| 9 #include <string> |
| 10 |
| 11 #include "testing/gtest/include/gtest/gtest.h" |
| 12 |
| 13 using std::string; |
| 14 |
| 15 namespace net { |
| 16 namespace { |
| 17 |
| 18 class PacketNumberIndexedQueueTest : public ::testing::Test { |
| 19 public: |
| 20 PacketNumberIndexedQueueTest() {} |
| 21 |
| 22 protected: |
| 23 PacketNumberIndexedQueue<string> queue_; |
| 24 }; |
| 25 |
| 26 TEST_F(PacketNumberIndexedQueueTest, InitialState) { |
| 27 EXPECT_TRUE(queue_.IsEmpty()); |
| 28 EXPECT_EQ(0u, queue_.first_packet()); |
| 29 EXPECT_EQ(0u, queue_.last_packet()); |
| 30 EXPECT_EQ(0u, queue_.number_of_present_entries()); |
| 31 EXPECT_EQ(0u, queue_.entry_slots_used()); |
| 32 } |
| 33 |
| 34 TEST_F(PacketNumberIndexedQueueTest, InsertingContinuousElements) { |
| 35 ASSERT_TRUE(queue_.Emplace(1001, "one")); |
| 36 EXPECT_EQ("one", *queue_.GetEntry(1001)); |
| 37 |
| 38 ASSERT_TRUE(queue_.Emplace(1002, "two")); |
| 39 EXPECT_EQ("two", *queue_.GetEntry(1002)); |
| 40 |
| 41 EXPECT_FALSE(queue_.IsEmpty()); |
| 42 EXPECT_EQ(1001u, queue_.first_packet()); |
| 43 EXPECT_EQ(1002u, queue_.last_packet()); |
| 44 EXPECT_EQ(2u, queue_.number_of_present_entries()); |
| 45 EXPECT_EQ(2u, queue_.entry_slots_used()); |
| 46 } |
| 47 |
| 48 TEST_F(PacketNumberIndexedQueueTest, InsertingOutOfOrder) { |
| 49 queue_.Emplace(1001, "one"); |
| 50 |
| 51 ASSERT_TRUE(queue_.Emplace(1003, "three")); |
| 52 EXPECT_EQ(nullptr, queue_.GetEntry(1002)); |
| 53 EXPECT_EQ("three", *queue_.GetEntry(1003)); |
| 54 |
| 55 EXPECT_EQ(1001u, queue_.first_packet()); |
| 56 EXPECT_EQ(1003u, queue_.last_packet()); |
| 57 EXPECT_EQ(2u, queue_.number_of_present_entries()); |
| 58 EXPECT_EQ(3u, queue_.entry_slots_used()); |
| 59 |
| 60 ASSERT_FALSE(queue_.Emplace(1002, "two")); |
| 61 } |
| 62 |
| 63 TEST_F(PacketNumberIndexedQueueTest, InsertingIntoPast) { |
| 64 queue_.Emplace(1001, "one"); |
| 65 EXPECT_FALSE(queue_.Emplace(1000, "zero")); |
| 66 } |
| 67 |
| 68 TEST_F(PacketNumberIndexedQueueTest, InsertingDuplicate) { |
| 69 queue_.Emplace(1001, "one"); |
| 70 EXPECT_FALSE(queue_.Emplace(1001, "one")); |
| 71 } |
| 72 |
| 73 TEST_F(PacketNumberIndexedQueueTest, RemoveInTheMiddle) { |
| 74 queue_.Emplace(1001, "one"); |
| 75 queue_.Emplace(1002, "two"); |
| 76 queue_.Emplace(1003, "three"); |
| 77 |
| 78 ASSERT_TRUE(queue_.Remove(1002)); |
| 79 EXPECT_EQ(nullptr, queue_.GetEntry(1002)); |
| 80 |
| 81 EXPECT_EQ(1001u, queue_.first_packet()); |
| 82 EXPECT_EQ(1003u, queue_.last_packet()); |
| 83 EXPECT_EQ(2u, queue_.number_of_present_entries()); |
| 84 EXPECT_EQ(3u, queue_.entry_slots_used()); |
| 85 |
| 86 EXPECT_FALSE(queue_.Emplace(1002, "two")); |
| 87 EXPECT_TRUE(queue_.Emplace(1004, "four")); |
| 88 } |
| 89 |
| 90 TEST_F(PacketNumberIndexedQueueTest, RemoveAtImmediateEdges) { |
| 91 queue_.Emplace(1001, "one"); |
| 92 queue_.Emplace(1002, "two"); |
| 93 queue_.Emplace(1003, "three"); |
| 94 ASSERT_TRUE(queue_.Remove(1001)); |
| 95 EXPECT_EQ(nullptr, queue_.GetEntry(1001)); |
| 96 ASSERT_TRUE(queue_.Remove(1003)); |
| 97 EXPECT_EQ(nullptr, queue_.GetEntry(1003)); |
| 98 |
| 99 EXPECT_EQ(1002u, queue_.first_packet()); |
| 100 EXPECT_EQ(1003u, queue_.last_packet()); |
| 101 EXPECT_EQ(1u, queue_.number_of_present_entries()); |
| 102 EXPECT_EQ(2u, queue_.entry_slots_used()); |
| 103 |
| 104 EXPECT_TRUE(queue_.Emplace(1004, "four")); |
| 105 } |
| 106 |
| 107 TEST_F(PacketNumberIndexedQueueTest, RemoveAtDistantFront) { |
| 108 queue_.Emplace(1001, "one"); |
| 109 queue_.Emplace(1002, "one (kinda)"); |
| 110 queue_.Emplace(2001, "two"); |
| 111 |
| 112 EXPECT_EQ(1001u, queue_.first_packet()); |
| 113 EXPECT_EQ(2001u, queue_.last_packet()); |
| 114 EXPECT_EQ(3u, queue_.number_of_present_entries()); |
| 115 EXPECT_EQ(1001u, queue_.entry_slots_used()); |
| 116 |
| 117 ASSERT_TRUE(queue_.Remove(1002)); |
| 118 EXPECT_EQ(1001u, queue_.first_packet()); |
| 119 EXPECT_EQ(2001u, queue_.last_packet()); |
| 120 EXPECT_EQ(2u, queue_.number_of_present_entries()); |
| 121 EXPECT_EQ(1001u, queue_.entry_slots_used()); |
| 122 |
| 123 ASSERT_TRUE(queue_.Remove(1001)); |
| 124 EXPECT_EQ(2001u, queue_.first_packet()); |
| 125 EXPECT_EQ(2001u, queue_.last_packet()); |
| 126 EXPECT_EQ(1u, queue_.number_of_present_entries()); |
| 127 EXPECT_EQ(1u, queue_.entry_slots_used()); |
| 128 } |
| 129 |
| 130 TEST_F(PacketNumberIndexedQueueTest, RemoveAtDistantBack) { |
| 131 queue_.Emplace(1001, "one"); |
| 132 queue_.Emplace(2001, "two"); |
| 133 |
| 134 EXPECT_EQ(1001u, queue_.first_packet()); |
| 135 EXPECT_EQ(2001u, queue_.last_packet()); |
| 136 |
| 137 ASSERT_TRUE(queue_.Remove(2001)); |
| 138 EXPECT_EQ(1001u, queue_.first_packet()); |
| 139 EXPECT_EQ(2001u, queue_.last_packet()); |
| 140 } |
| 141 |
| 142 TEST_F(PacketNumberIndexedQueueTest, ClearAndRepopulate) { |
| 143 queue_.Emplace(1001, "one"); |
| 144 queue_.Emplace(2001, "two"); |
| 145 |
| 146 ASSERT_TRUE(queue_.Remove(1001)); |
| 147 ASSERT_TRUE(queue_.Remove(2001)); |
| 148 EXPECT_TRUE(queue_.IsEmpty()); |
| 149 EXPECT_EQ(0u, queue_.first_packet()); |
| 150 EXPECT_EQ(0u, queue_.last_packet()); |
| 151 |
| 152 EXPECT_TRUE(queue_.Emplace(101, "one")); |
| 153 EXPECT_TRUE(queue_.Emplace(201, "two")); |
| 154 EXPECT_EQ(101u, queue_.first_packet()); |
| 155 EXPECT_EQ(201u, queue_.last_packet()); |
| 156 } |
| 157 |
| 158 TEST_F(PacketNumberIndexedQueueTest, FailToRemoveElementsThatNeverExisted) { |
| 159 ASSERT_FALSE(queue_.Remove(1000)); |
| 160 queue_.Emplace(1001, "one"); |
| 161 ASSERT_FALSE(queue_.Remove(1000)); |
| 162 ASSERT_FALSE(queue_.Remove(1002)); |
| 163 } |
| 164 |
| 165 TEST_F(PacketNumberIndexedQueueTest, FailToRemoveElementsTwice) { |
| 166 queue_.Emplace(1001, "one"); |
| 167 ASSERT_TRUE(queue_.Remove(1001)); |
| 168 ASSERT_FALSE(queue_.Remove(1001)); |
| 169 ASSERT_FALSE(queue_.Remove(1001)); |
| 170 } |
| 171 |
| 172 } // namespace |
| 173 } // namespace net |
OLD | NEW |