Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(343)

Side by Side Diff: net/quic/core/packet_number_indexed_queue_test.cc

Issue 2877783003: Add a data structure that is structured in the same way as the UnackedPacketMap, in hope we can rep… (Closed)
Patch Set: Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « net/quic/core/packet_number_indexed_queue.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(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
OLDNEW
« no previous file with comments | « net/quic/core/packet_number_indexed_queue.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698