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

Side by Side Diff: net/tools/quic/quic_time_wait_list_manager_test.cc

Issue 181483006: PACKET_NBYTE_GUID -> PACKET_NBYTE_CONNECTION_ID (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: small comment fix Created 6 years, 10 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 | Annotate | Revision Log
OLDNEW
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 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
43 public: 43 public:
44 static bool ShouldSendResponse(QuicTimeWaitListManager* manager, 44 static bool ShouldSendResponse(QuicTimeWaitListManager* manager,
45 int received_packet_count) { 45 int received_packet_count) {
46 return manager->ShouldSendResponse(received_packet_count); 46 return manager->ShouldSendResponse(received_packet_count);
47 } 47 }
48 48
49 static QuicTime::Delta time_wait_period(QuicTimeWaitListManager* manager) { 49 static QuicTime::Delta time_wait_period(QuicTimeWaitListManager* manager) {
50 return manager->kTimeWaitPeriod_; 50 return manager->kTimeWaitPeriod_;
51 } 51 }
52 52
53 static QuicVersion GetQuicVersionFromGuid(QuicTimeWaitListManager* manager, 53 static QuicVersion GetQuicVersionFromConnectionId(
54 QuicGuid guid) { 54 QuicTimeWaitListManager* manager,
55 return manager->GetQuicVersionFromGuid(guid); 55 QuicConnectionId connection_id) {
56 return manager->GetQuicVersionFromConnectionId(connection_id);
56 } 57 }
57 }; 58 };
58 59
59 namespace { 60 namespace {
60 61
61 class MockFakeTimeEpollServer : public FakeTimeEpollServer { 62 class MockFakeTimeEpollServer : public FakeTimeEpollServer {
62 public: 63 public:
63 MOCK_METHOD2(RegisterAlarm, void(int64 timeout_in_us, 64 MOCK_METHOD2(RegisterAlarm, void(int64 timeout_in_us,
64 EpollAlarmCallbackInterface* alarm)); 65 EpollAlarmCallbackInterface* alarm));
65 }; 66 };
66 67
67 class QuicTimeWaitListManagerTest : public testing::Test { 68 class QuicTimeWaitListManagerTest : public testing::Test {
68 protected: 69 protected:
69 QuicTimeWaitListManagerTest() 70 QuicTimeWaitListManagerTest()
70 : time_wait_list_manager_(&writer_, &visitor_, 71 : time_wait_list_manager_(&writer_, &visitor_,
71 &epoll_server_, QuicSupportedVersions()), 72 &epoll_server_, QuicSupportedVersions()),
72 framer_(QuicSupportedVersions(), QuicTime::Zero(), true), 73 framer_(QuicSupportedVersions(), QuicTime::Zero(), true),
73 guid_(45), 74 connection_id_(45),
74 client_address_(net::test::TestPeerIPAddress(), kTestPort), 75 client_address_(net::test::TestPeerIPAddress(), kTestPort),
75 writer_is_blocked_(false) {} 76 writer_is_blocked_(false) {}
76 77
77 virtual ~QuicTimeWaitListManagerTest() {} 78 virtual ~QuicTimeWaitListManagerTest() {}
78 79
79 virtual void SetUp() { 80 virtual void SetUp() {
80 EXPECT_CALL(writer_, IsWriteBlocked()) 81 EXPECT_CALL(writer_, IsWriteBlocked())
81 .WillRepeatedly(ReturnPointee(&writer_is_blocked_)); 82 .WillRepeatedly(ReturnPointee(&writer_is_blocked_));
82 EXPECT_CALL(writer_, IsWriteBlockedDataBuffered()) 83 EXPECT_CALL(writer_, IsWriteBlockedDataBuffered())
83 .WillRepeatedly(Return(false)); 84 .WillRepeatedly(Return(false));
84 } 85 }
85 86
86 void AddGuid(QuicGuid guid) { 87 void AddConnectionId(QuicConnectionId connection_id) {
87 AddGuid(guid, net::test::QuicVersionMax(), NULL); 88 AddConnectionId(connection_id, net::test::QuicVersionMax(), NULL);
88 } 89 }
89 90
90 void AddGuid(QuicGuid guid, 91 void AddConnectionId(QuicConnectionId connection_id,
91 QuicVersion version, 92 QuicVersion version,
92 QuicEncryptedPacket* packet) { 93 QuicEncryptedPacket* packet) {
93 time_wait_list_manager_.AddGuidToTimeWait(guid, version, packet); 94 time_wait_list_manager_.AddConnectionIdToTimeWait(
95 connection_id, version, packet);
94 } 96 }
95 97
96 bool IsGuidInTimeWait(QuicGuid guid) { 98 bool IsConnectionIdInTimeWait(QuicConnectionId connection_id) {
97 return time_wait_list_manager_.IsGuidInTimeWait(guid); 99 return time_wait_list_manager_.IsConnectionIdInTimeWait(connection_id);
98 } 100 }
99 101
100 void ProcessPacket(QuicGuid guid, QuicPacketSequenceNumber sequence_number) { 102 void ProcessPacket(QuicConnectionId connection_id,
103 QuicPacketSequenceNumber sequence_number) {
101 time_wait_list_manager_.ProcessPacket(server_address_, 104 time_wait_list_manager_.ProcessPacket(server_address_,
102 client_address_, 105 client_address_,
103 guid, 106 connection_id,
104 sequence_number); 107 sequence_number);
105 } 108 }
106 109
107 QuicEncryptedPacket* ConstructEncryptedPacket( 110 QuicEncryptedPacket* ConstructEncryptedPacket(
108 EncryptionLevel level, 111 EncryptionLevel level,
109 QuicGuid guid, 112 QuicConnectionId connection_id,
110 QuicPacketSequenceNumber sequence_number) { 113 QuicPacketSequenceNumber sequence_number) {
111 QuicPacketHeader header; 114 QuicPacketHeader header;
112 header.public_header.guid = guid; 115 header.public_header.connection_id = connection_id;
113 header.public_header.guid_length = PACKET_8BYTE_GUID; 116 header.public_header.connection_id_length = PACKET_8BYTE_CONNECTION_ID;
114 header.public_header.version_flag = false; 117 header.public_header.version_flag = false;
115 header.public_header.reset_flag = false; 118 header.public_header.reset_flag = false;
116 header.public_header.sequence_number_length = PACKET_6BYTE_SEQUENCE_NUMBER; 119 header.public_header.sequence_number_length = PACKET_6BYTE_SEQUENCE_NUMBER;
117 header.packet_sequence_number = sequence_number; 120 header.packet_sequence_number = sequence_number;
118 header.entropy_flag = false; 121 header.entropy_flag = false;
119 header.entropy_hash = 0; 122 header.entropy_hash = 0;
120 header.fec_flag = false; 123 header.fec_flag = false;
121 header.is_in_fec_group = NOT_IN_FEC_GROUP; 124 header.is_in_fec_group = NOT_IN_FEC_GROUP;
122 header.fec_group = 0; 125 header.fec_group = 0;
123 QuicStreamFrame stream_frame(1, false, 0, MakeIOVector("data")); 126 QuicStreamFrame stream_frame(1, false, 0, MakeIOVector("data"));
124 QuicFrame frame(&stream_frame); 127 QuicFrame frame(&stream_frame);
125 QuicFrames frames; 128 QuicFrames frames;
126 frames.push_back(frame); 129 frames.push_back(frame);
127 scoped_ptr<QuicPacket> packet( 130 scoped_ptr<QuicPacket> packet(
128 framer_.BuildUnsizedDataPacket(header, frames).packet); 131 framer_.BuildUnsizedDataPacket(header, frames).packet);
129 EXPECT_TRUE(packet != NULL); 132 EXPECT_TRUE(packet != NULL);
130 QuicEncryptedPacket* encrypted = framer_.EncryptPacket(ENCRYPTION_NONE, 133 QuicEncryptedPacket* encrypted = framer_.EncryptPacket(ENCRYPTION_NONE,
131 sequence_number, 134 sequence_number,
132 *packet); 135 *packet);
133 EXPECT_TRUE(encrypted != NULL); 136 EXPECT_TRUE(encrypted != NULL);
134 return encrypted; 137 return encrypted;
135 } 138 }
136 139
137 NiceMock<MockFakeTimeEpollServer> epoll_server_; 140 NiceMock<MockFakeTimeEpollServer> epoll_server_;
138 StrictMock<MockPacketWriter> writer_; 141 StrictMock<MockPacketWriter> writer_;
139 StrictMock<MockQuicServerSessionVisitor> visitor_; 142 StrictMock<MockQuicServerSessionVisitor> visitor_;
140 QuicTimeWaitListManager time_wait_list_manager_; 143 QuicTimeWaitListManager time_wait_list_manager_;
141 QuicFramer framer_; 144 QuicFramer framer_;
142 QuicGuid guid_; 145 QuicConnectionId connection_id_;
143 IPEndPoint server_address_; 146 IPEndPoint server_address_;
144 IPEndPoint client_address_; 147 IPEndPoint client_address_;
145 bool writer_is_blocked_; 148 bool writer_is_blocked_;
146 }; 149 };
147 150
148 class ValidatePublicResetPacketPredicate 151 class ValidatePublicResetPacketPredicate
149 : public MatcherInterface<const std::tr1::tuple<const char*, int> > { 152 : public MatcherInterface<const std::tr1::tuple<const char*, int> > {
150 public: 153 public:
151 explicit ValidatePublicResetPacketPredicate(QuicGuid guid, 154 explicit ValidatePublicResetPacketPredicate(QuicConnectionId connection_id,
152 QuicPacketSequenceNumber number) 155 QuicPacketSequenceNumber number)
153 : guid_(guid), sequence_number_(number) { 156 : connection_id_(connection_id), sequence_number_(number) {
154 } 157 }
155 158
156 virtual bool MatchAndExplain( 159 virtual bool MatchAndExplain(
157 const std::tr1::tuple<const char*, int> packet_buffer, 160 const std::tr1::tuple<const char*, int> packet_buffer,
158 testing::MatchResultListener* /* listener */) const { 161 testing::MatchResultListener* /* listener */) const {
159 FramerVisitorCapturingPublicReset visitor; 162 FramerVisitorCapturingPublicReset visitor;
160 QuicFramer framer(QuicSupportedVersions(), 163 QuicFramer framer(QuicSupportedVersions(),
161 QuicTime::Zero(), 164 QuicTime::Zero(),
162 false); 165 false);
163 framer.set_visitor(&visitor); 166 framer.set_visitor(&visitor);
164 QuicEncryptedPacket encrypted(std::tr1::get<0>(packet_buffer), 167 QuicEncryptedPacket encrypted(std::tr1::get<0>(packet_buffer),
165 std::tr1::get<1>(packet_buffer)); 168 std::tr1::get<1>(packet_buffer));
166 framer.ProcessPacket(encrypted); 169 framer.ProcessPacket(encrypted);
167 QuicPublicResetPacket packet = visitor.public_reset_packet(); 170 QuicPublicResetPacket packet = visitor.public_reset_packet();
168 return guid_ == packet.public_header.guid && 171 return connection_id_ == packet.public_header.connection_id &&
169 packet.public_header.reset_flag && !packet.public_header.version_flag && 172 packet.public_header.reset_flag && !packet.public_header.version_flag &&
170 sequence_number_ == packet.rejected_sequence_number && 173 sequence_number_ == packet.rejected_sequence_number &&
171 net::test::TestPeerIPAddress() == packet.client_address.address() && 174 net::test::TestPeerIPAddress() == packet.client_address.address() &&
172 kTestPort == packet.client_address.port(); 175 kTestPort == packet.client_address.port();
173 } 176 }
174 177
175 virtual void DescribeTo(::std::ostream* os) const { } 178 virtual void DescribeTo(::std::ostream* os) const { }
176 179
177 virtual void DescribeNegationTo(::std::ostream* os) const { } 180 virtual void DescribeNegationTo(::std::ostream* os) const { }
178 181
179 private: 182 private:
180 QuicGuid guid_; 183 QuicConnectionId connection_id_;
181 QuicPacketSequenceNumber sequence_number_; 184 QuicPacketSequenceNumber sequence_number_;
182 }; 185 };
183 186
184 187
185 Matcher<const std::tr1::tuple<const char*, int> > PublicResetPacketEq( 188 Matcher<const std::tr1::tuple<const char*, int> > PublicResetPacketEq(
186 QuicGuid guid, 189 QuicConnectionId connection_id,
187 QuicPacketSequenceNumber sequence_number) { 190 QuicPacketSequenceNumber sequence_number) {
188 return MakeMatcher(new ValidatePublicResetPacketPredicate(guid, 191 return MakeMatcher(new ValidatePublicResetPacketPredicate(connection_id,
189 sequence_number)); 192 sequence_number));
190 } 193 }
191 194
192 TEST_F(QuicTimeWaitListManagerTest, CheckGuidInTimeWait) { 195 TEST_F(QuicTimeWaitListManagerTest, CheckConnectionIdInTimeWait) {
193 EXPECT_FALSE(IsGuidInTimeWait(guid_)); 196 EXPECT_FALSE(IsConnectionIdInTimeWait(connection_id_));
194 AddGuid(guid_); 197 AddConnectionId(connection_id_);
195 EXPECT_TRUE(IsGuidInTimeWait(guid_)); 198 EXPECT_TRUE(IsConnectionIdInTimeWait(connection_id_));
196 } 199 }
197 200
198 TEST_F(QuicTimeWaitListManagerTest, SendConnectionClose) { 201 TEST_F(QuicTimeWaitListManagerTest, SendConnectionClose) {
199 size_t kConnectionCloseLength = 100; 202 size_t kConnectionCloseLength = 100;
200 AddGuid(guid_, 203 AddConnectionId(
201 net::test::QuicVersionMax(), 204 connection_id_,
202 new QuicEncryptedPacket( 205 net::test::QuicVersionMax(),
203 new char[kConnectionCloseLength], kConnectionCloseLength, true)); 206 new QuicEncryptedPacket(
207 new char[kConnectionCloseLength], kConnectionCloseLength, true));
204 const int kRandomSequenceNumber = 1; 208 const int kRandomSequenceNumber = 1;
205 EXPECT_CALL(writer_, WritePacket(_, kConnectionCloseLength, 209 EXPECT_CALL(writer_, WritePacket(_, kConnectionCloseLength,
206 server_address_.address(), 210 server_address_.address(),
207 client_address_)) 211 client_address_))
208 .WillOnce(Return(WriteResult(WRITE_STATUS_OK, 1))); 212 .WillOnce(Return(WriteResult(WRITE_STATUS_OK, 1)));
209 213
210 ProcessPacket(guid_, kRandomSequenceNumber); 214 ProcessPacket(connection_id_, kRandomSequenceNumber);
211 } 215 }
212 216
213 TEST_F(QuicTimeWaitListManagerTest, SendPublicReset) { 217 TEST_F(QuicTimeWaitListManagerTest, SendPublicReset) {
214 AddGuid(guid_); 218 AddConnectionId(connection_id_);
215 const int kRandomSequenceNumber = 1; 219 const int kRandomSequenceNumber = 1;
216 EXPECT_CALL(writer_, WritePacket(_, _, 220 EXPECT_CALL(writer_, WritePacket(_, _,
217 server_address_.address(), 221 server_address_.address(),
218 client_address_)) 222 client_address_))
219 .With(Args<0, 1>(PublicResetPacketEq(guid_, 223 .With(Args<0, 1>(PublicResetPacketEq(connection_id_,
220 kRandomSequenceNumber))) 224 kRandomSequenceNumber)))
221 .WillOnce(Return(WriteResult(WRITE_STATUS_OK, 0))); 225 .WillOnce(Return(WriteResult(WRITE_STATUS_OK, 0)));
222 226
223 ProcessPacket(guid_, kRandomSequenceNumber); 227 ProcessPacket(connection_id_, kRandomSequenceNumber);
224 } 228 }
225 229
226 TEST_F(QuicTimeWaitListManagerTest, SendPublicResetWithExponentialBackOff) { 230 TEST_F(QuicTimeWaitListManagerTest, SendPublicResetWithExponentialBackOff) {
227 AddGuid(guid_); 231 AddConnectionId(connection_id_);
228 for (int sequence_number = 1; sequence_number < 101; ++sequence_number) { 232 for (int sequence_number = 1; sequence_number < 101; ++sequence_number) {
229 if ((sequence_number & (sequence_number - 1)) == 0) { 233 if ((sequence_number & (sequence_number - 1)) == 0) {
230 EXPECT_CALL(writer_, WritePacket(_, _, _, _)) 234 EXPECT_CALL(writer_, WritePacket(_, _, _, _))
231 .WillOnce(Return(WriteResult(WRITE_STATUS_OK, 1))); 235 .WillOnce(Return(WriteResult(WRITE_STATUS_OK, 1)));
232 } 236 }
233 ProcessPacket(guid_, sequence_number); 237 ProcessPacket(connection_id_, sequence_number);
234 // Send public reset with exponential back off. 238 // Send public reset with exponential back off.
235 if ((sequence_number & (sequence_number - 1)) == 0) { 239 if ((sequence_number & (sequence_number - 1)) == 0) {
236 EXPECT_TRUE(QuicTimeWaitListManagerPeer::ShouldSendResponse( 240 EXPECT_TRUE(QuicTimeWaitListManagerPeer::ShouldSendResponse(
237 &time_wait_list_manager_, sequence_number)); 241 &time_wait_list_manager_, sequence_number));
238 } else { 242 } else {
239 EXPECT_FALSE(QuicTimeWaitListManagerPeer::ShouldSendResponse( 243 EXPECT_FALSE(QuicTimeWaitListManagerPeer::ShouldSendResponse(
240 &time_wait_list_manager_, sequence_number)); 244 &time_wait_list_manager_, sequence_number));
241 } 245 }
242 } 246 }
243 } 247 }
244 248
245 TEST_F(QuicTimeWaitListManagerTest, CleanUpOldGuids) { 249 TEST_F(QuicTimeWaitListManagerTest, CleanUpOldConnectionIds) {
246 const int kGuidCount = 100; 250 const int kConnectionIdCount = 100;
247 const int kOldGuidCount = 31; 251 const int kOldConnectionIdCount = 31;
248 252
249 // Add guids such that their expiry time is kTimeWaitPeriod_. 253 // Add connection_ids such that their expiry time is kTimeWaitPeriod_.
250 epoll_server_.set_now_in_usec(0); 254 epoll_server_.set_now_in_usec(0);
251 for (int guid = 1; guid <= kOldGuidCount; ++guid) { 255 for (int connection_id = 1;
252 AddGuid(guid); 256 connection_id <= kOldConnectionIdCount;
257 ++connection_id) {
258 AddConnectionId(connection_id);
253 } 259 }
254 260
255 // Add remaining guids such that their add time is 2 * kTimeWaitPeriod. 261 // Add remaining connection_ids such that their add time is
262 // 2 * kTimeWaitPeriod.
256 const QuicTime::Delta time_wait_period = 263 const QuicTime::Delta time_wait_period =
257 QuicTimeWaitListManagerPeer::time_wait_period(&time_wait_list_manager_); 264 QuicTimeWaitListManagerPeer::time_wait_period(&time_wait_list_manager_);
258 epoll_server_.set_now_in_usec(time_wait_period.ToMicroseconds()); 265 epoll_server_.set_now_in_usec(time_wait_period.ToMicroseconds());
259 for (int guid = kOldGuidCount + 1; guid <= kGuidCount; ++guid) { 266 for (int connection_id = kOldConnectionIdCount + 1;
260 AddGuid(guid); 267 connection_id <= kConnectionIdCount;
268 ++connection_id) {
269 AddConnectionId(connection_id);
261 } 270 }
262 271
263 QuicTime::Delta offset = QuicTime::Delta::FromMicroseconds(39); 272 QuicTime::Delta offset = QuicTime::Delta::FromMicroseconds(39);
264 // Now set the current time as time_wait_period + offset usecs. 273 // Now set the current time as time_wait_period + offset usecs.
265 epoll_server_.set_now_in_usec(time_wait_period.Add(offset).ToMicroseconds()); 274 epoll_server_.set_now_in_usec(time_wait_period.Add(offset).ToMicroseconds());
266 // After all the old guids are cleaned up, check the next alarm interval. 275 // After all the old connection_ids are cleaned up, check the next alarm
276 // interval.
267 int64 next_alarm_time = epoll_server_.ApproximateNowInUsec() + 277 int64 next_alarm_time = epoll_server_.ApproximateNowInUsec() +
268 time_wait_period.Subtract(offset).ToMicroseconds(); 278 time_wait_period.Subtract(offset).ToMicroseconds();
269 EXPECT_CALL(epoll_server_, RegisterAlarm(next_alarm_time, _)); 279 EXPECT_CALL(epoll_server_, RegisterAlarm(next_alarm_time, _));
270 280
271 time_wait_list_manager_.CleanUpOldGuids(); 281 time_wait_list_manager_.CleanUpOldConnectionIds();
272 for (int guid = 1; guid <= kGuidCount; ++guid) { 282 for (int connection_id = 1;
273 EXPECT_EQ(guid > kOldGuidCount, IsGuidInTimeWait(guid)) 283 connection_id <= kConnectionIdCount;
274 << "kOldGuidCount: " << kOldGuidCount 284 ++connection_id) {
275 << " guid: " << guid; 285 EXPECT_EQ(connection_id > kOldConnectionIdCount,
286 IsConnectionIdInTimeWait(connection_id))
287 << "kOldConnectionIdCount: " << kOldConnectionIdCount
288 << " connection_id: " << connection_id;
276 } 289 }
277 } 290 }
278 291
279 TEST_F(QuicTimeWaitListManagerTest, SendQueuedPackets) { 292 TEST_F(QuicTimeWaitListManagerTest, SendQueuedPackets) {
280 QuicGuid guid = 1; 293 QuicConnectionId connection_id = 1;
281 AddGuid(guid); 294 AddConnectionId(connection_id);
282 QuicPacketSequenceNumber sequence_number = 234; 295 QuicPacketSequenceNumber sequence_number = 234;
283 scoped_ptr<QuicEncryptedPacket> packet( 296 scoped_ptr<QuicEncryptedPacket> packet(ConstructEncryptedPacket(
284 ConstructEncryptedPacket(ENCRYPTION_NONE, guid, sequence_number)); 297 ENCRYPTION_NONE, connection_id, sequence_number));
285 // Let first write through. 298 // Let first write through.
286 EXPECT_CALL(writer_, WritePacket(_, _, 299 EXPECT_CALL(writer_, WritePacket(_, _,
287 server_address_.address(), 300 server_address_.address(),
288 client_address_)) 301 client_address_))
289 .With(Args<0, 1>(PublicResetPacketEq(guid, 302 .With(Args<0, 1>(PublicResetPacketEq(connection_id,
290 sequence_number))) 303 sequence_number)))
291 .WillOnce(Return(WriteResult(WRITE_STATUS_OK, packet->length()))); 304 .WillOnce(Return(WriteResult(WRITE_STATUS_OK, packet->length())));
292 ProcessPacket(guid, sequence_number); 305 ProcessPacket(connection_id, sequence_number);
293 306
294 // write block for the next packet. 307 // write block for the next packet.
295 EXPECT_CALL(writer_, WritePacket(_, _, 308 EXPECT_CALL(writer_, WritePacket(_, _,
296 server_address_.address(), 309 server_address_.address(),
297 client_address_)) 310 client_address_))
298 .With(Args<0, 1>(PublicResetPacketEq(guid, 311 .With(Args<0, 1>(PublicResetPacketEq(connection_id,
299 sequence_number))) 312 sequence_number)))
300 .WillOnce(DoAll( 313 .WillOnce(DoAll(
301 Assign(&writer_is_blocked_, true), 314 Assign(&writer_is_blocked_, true),
302 Return(WriteResult(WRITE_STATUS_BLOCKED, EAGAIN)))); 315 Return(WriteResult(WRITE_STATUS_BLOCKED, EAGAIN))));
303 EXPECT_CALL(visitor_, OnWriteBlocked(&time_wait_list_manager_)); 316 EXPECT_CALL(visitor_, OnWriteBlocked(&time_wait_list_manager_));
304 ProcessPacket(guid, sequence_number); 317 ProcessPacket(connection_id, sequence_number);
305 // 3rd packet. No public reset should be sent; 318 // 3rd packet. No public reset should be sent;
306 ProcessPacket(guid, sequence_number); 319 ProcessPacket(connection_id, sequence_number);
307 320
308 // write packet should not be called since we are write blocked but the 321 // write packet should not be called since we are write blocked but the
309 // should be queued. 322 // should be queued.
310 QuicGuid other_guid = 2; 323 QuicConnectionId other_connection_id = 2;
311 AddGuid(other_guid); 324 AddConnectionId(other_connection_id);
312 QuicPacketSequenceNumber other_sequence_number = 23423; 325 QuicPacketSequenceNumber other_sequence_number = 23423;
313 scoped_ptr<QuicEncryptedPacket> other_packet( 326 scoped_ptr<QuicEncryptedPacket> other_packet(
314 ConstructEncryptedPacket( 327 ConstructEncryptedPacket(
315 ENCRYPTION_NONE, other_guid, other_sequence_number)); 328 ENCRYPTION_NONE, other_connection_id, other_sequence_number));
316 EXPECT_CALL(writer_, WritePacket(_, _, _, _)) 329 EXPECT_CALL(writer_, WritePacket(_, _, _, _))
317 .Times(0); 330 .Times(0);
318 EXPECT_CALL(visitor_, OnWriteBlocked(&time_wait_list_manager_)); 331 EXPECT_CALL(visitor_, OnWriteBlocked(&time_wait_list_manager_));
319 ProcessPacket(other_guid, other_sequence_number); 332 ProcessPacket(other_connection_id, other_sequence_number);
320 333
321 // Now expect all the write blocked public reset packets to be sent again. 334 // Now expect all the write blocked public reset packets to be sent again.
322 writer_is_blocked_ = false; 335 writer_is_blocked_ = false;
323 EXPECT_CALL(writer_, WritePacket(_, _, 336 EXPECT_CALL(writer_, WritePacket(_, _,
324 server_address_.address(), 337 server_address_.address(),
325 client_address_)) 338 client_address_))
326 .With(Args<0, 1>(PublicResetPacketEq(guid, 339 .With(Args<0, 1>(PublicResetPacketEq(connection_id,
327 sequence_number))) 340 sequence_number)))
328 .WillOnce(Return(WriteResult(WRITE_STATUS_OK, packet->length()))); 341 .WillOnce(Return(WriteResult(WRITE_STATUS_OK, packet->length())));
329 EXPECT_CALL(writer_, WritePacket(_, _, 342 EXPECT_CALL(writer_, WritePacket(_, _,
330 server_address_.address(), 343 server_address_.address(),
331 client_address_)) 344 client_address_))
332 .With(Args<0, 1>(PublicResetPacketEq(other_guid, 345 .With(Args<0, 1>(PublicResetPacketEq(other_connection_id,
333 other_sequence_number))) 346 other_sequence_number)))
334 .WillOnce(Return(WriteResult(WRITE_STATUS_OK, 347 .WillOnce(Return(WriteResult(WRITE_STATUS_OK,
335 other_packet->length()))); 348 other_packet->length())));
336 time_wait_list_manager_.OnCanWrite(); 349 time_wait_list_manager_.OnCanWrite();
337 } 350 }
338 351
339 TEST_F(QuicTimeWaitListManagerTest, GetQuicVersionFromMap) { 352 TEST_F(QuicTimeWaitListManagerTest, GetQuicVersionFromMap) {
340 const int kGuid1 = 123; 353 const int kConnectionId1 = 123;
341 const int kGuid2 = 456; 354 const int kConnectionId2 = 456;
342 const int kGuid3 = 789; 355 const int kConnectionId3 = 789;
343 356
344 AddGuid(kGuid1, net::test::QuicVersionMin(), NULL); 357 AddConnectionId(kConnectionId1, net::test::QuicVersionMin(), NULL);
345 AddGuid(kGuid2, net::test::QuicVersionMax(), NULL); 358 AddConnectionId(kConnectionId2, net::test::QuicVersionMax(), NULL);
346 AddGuid(kGuid3, net::test::QuicVersionMax(), NULL); 359 AddConnectionId(kConnectionId3, net::test::QuicVersionMax(), NULL);
347 360
348 EXPECT_EQ(net::test::QuicVersionMin(), 361 EXPECT_EQ(net::test::QuicVersionMin(),
349 QuicTimeWaitListManagerPeer::GetQuicVersionFromGuid( 362 QuicTimeWaitListManagerPeer::GetQuicVersionFromConnectionId(
350 &time_wait_list_manager_, kGuid1)); 363 &time_wait_list_manager_, kConnectionId1));
351 EXPECT_EQ(net::test::QuicVersionMax(), 364 EXPECT_EQ(net::test::QuicVersionMax(),
352 QuicTimeWaitListManagerPeer::GetQuicVersionFromGuid( 365 QuicTimeWaitListManagerPeer::GetQuicVersionFromConnectionId(
353 &time_wait_list_manager_, kGuid2)); 366 &time_wait_list_manager_, kConnectionId2));
354 EXPECT_EQ(net::test::QuicVersionMax(), 367 EXPECT_EQ(net::test::QuicVersionMax(),
355 QuicTimeWaitListManagerPeer::GetQuicVersionFromGuid( 368 QuicTimeWaitListManagerPeer::GetQuicVersionFromConnectionId(
356 &time_wait_list_manager_, kGuid3)); 369 &time_wait_list_manager_, kConnectionId3));
357 } 370 }
358 371
359 TEST_F(QuicTimeWaitListManagerTest, AddGuidTwice) { 372 TEST_F(QuicTimeWaitListManagerTest, AddConnectionIdTwice) {
360 // Add guids such that their expiry time is kTimeWaitPeriod_. 373 // Add connection_ids such that their expiry time is kTimeWaitPeriod_.
361 epoll_server_.set_now_in_usec(0); 374 epoll_server_.set_now_in_usec(0);
362 AddGuid(guid_); 375 AddConnectionId(connection_id_);
363 EXPECT_TRUE(IsGuidInTimeWait(guid_)); 376 EXPECT_TRUE(IsConnectionIdInTimeWait(connection_id_));
364 size_t kConnectionCloseLength = 100; 377 size_t kConnectionCloseLength = 100;
365 AddGuid(guid_, 378 AddConnectionId(
366 net::test::QuicVersionMax(), 379 connection_id_,
367 new QuicEncryptedPacket( 380 net::test::QuicVersionMax(),
368 new char[kConnectionCloseLength], kConnectionCloseLength, true)); 381 new QuicEncryptedPacket(
369 EXPECT_TRUE(IsGuidInTimeWait(guid_)); 382 new char[kConnectionCloseLength], kConnectionCloseLength, true));
383 EXPECT_TRUE(IsConnectionIdInTimeWait(connection_id_));
370 384
371 EXPECT_CALL(writer_, WritePacket(_, 385 EXPECT_CALL(writer_, WritePacket(_,
372 kConnectionCloseLength, 386 kConnectionCloseLength,
373 server_address_.address(), 387 server_address_.address(),
374 client_address_)) 388 client_address_))
375 .WillOnce(Return(WriteResult(WRITE_STATUS_OK, 1))); 389 .WillOnce(Return(WriteResult(WRITE_STATUS_OK, 1)));
376 390
377 const int kRandomSequenceNumber = 1; 391 const int kRandomSequenceNumber = 1;
378 ProcessPacket(guid_, kRandomSequenceNumber); 392 ProcessPacket(connection_id_, kRandomSequenceNumber);
379 393
380 const QuicTime::Delta time_wait_period = 394 const QuicTime::Delta time_wait_period =
381 QuicTimeWaitListManagerPeer::time_wait_period(&time_wait_list_manager_); 395 QuicTimeWaitListManagerPeer::time_wait_period(&time_wait_list_manager_);
382 396
383 QuicTime::Delta offset = QuicTime::Delta::FromMicroseconds(39); 397 QuicTime::Delta offset = QuicTime::Delta::FromMicroseconds(39);
384 // Now set the current time as time_wait_period + offset usecs. 398 // Now set the current time as time_wait_period + offset usecs.
385 epoll_server_.set_now_in_usec(time_wait_period.Add(offset).ToMicroseconds()); 399 epoll_server_.set_now_in_usec(time_wait_period.Add(offset).ToMicroseconds());
386 // After the guids are cleaned up, check the next alarm interval. 400 // After the connection_ids are cleaned up, check the next alarm interval.
387 int64 next_alarm_time = epoll_server_.ApproximateNowInUsec() + 401 int64 next_alarm_time = epoll_server_.ApproximateNowInUsec() +
388 time_wait_period.ToMicroseconds(); 402 time_wait_period.ToMicroseconds();
389 403
390 EXPECT_CALL(epoll_server_, RegisterAlarm(next_alarm_time, _)); 404 EXPECT_CALL(epoll_server_, RegisterAlarm(next_alarm_time, _));
391 time_wait_list_manager_.CleanUpOldGuids(); 405 time_wait_list_manager_.CleanUpOldConnectionIds();
392 EXPECT_FALSE(IsGuidInTimeWait(guid_)); 406 EXPECT_FALSE(IsConnectionIdInTimeWait(connection_id_));
393 } 407 }
394 408
395 TEST_F(QuicTimeWaitListManagerTest, GuidsOrderedByTime) { 409 TEST_F(QuicTimeWaitListManagerTest, ConnectionIdsOrderedByTime) {
396 // Simple randomization: the values of guids are swapped based on the current 410 // Simple randomization: the values of connection_ids are swapped based on the
397 // seconds on the clock. If the container is broken, the test will be 50% 411 // current seconds on the clock. If the container is broken, the test will be
398 // flaky. 412 // 50% flaky.
399 int odd_second = static_cast<int>(epoll_server_.ApproximateNowInUsec()) % 2; 413 int odd_second = static_cast<int>(epoll_server_.ApproximateNowInUsec()) % 2;
400 EXPECT_TRUE(odd_second == 0 || odd_second == 1); 414 EXPECT_TRUE(odd_second == 0 || odd_second == 1);
401 const QuicGuid kGuid1 = odd_second; 415 const QuicConnectionId kConnectionId1 = odd_second;
402 const QuicGuid kGuid2 = 1 - odd_second; 416 const QuicConnectionId kConnectionId2 = 1 - odd_second;
403 417
404 // 1 will hash lower than 2, but we add it later. They should come out in the 418 // 1 will hash lower than 2, but we add it later. They should come out in the
405 // add order, not hash order. 419 // add order, not hash order.
406 epoll_server_.set_now_in_usec(0); 420 epoll_server_.set_now_in_usec(0);
407 AddGuid(kGuid1); 421 AddConnectionId(kConnectionId1);
408 epoll_server_.set_now_in_usec(10); 422 epoll_server_.set_now_in_usec(10);
409 AddGuid(kGuid2); 423 AddConnectionId(kConnectionId2);
410 424
411 const QuicTime::Delta time_wait_period = 425 const QuicTime::Delta time_wait_period =
412 QuicTimeWaitListManagerPeer::time_wait_period(&time_wait_list_manager_); 426 QuicTimeWaitListManagerPeer::time_wait_period(&time_wait_list_manager_);
413 epoll_server_.set_now_in_usec(time_wait_period.ToMicroseconds() + 1); 427 epoll_server_.set_now_in_usec(time_wait_period.ToMicroseconds() + 1);
414 428
415 EXPECT_CALL(epoll_server_, RegisterAlarm(_, _)); 429 EXPECT_CALL(epoll_server_, RegisterAlarm(_, _));
416 430
417 time_wait_list_manager_.CleanUpOldGuids(); 431 time_wait_list_manager_.CleanUpOldConnectionIds();
418 EXPECT_FALSE(IsGuidInTimeWait(kGuid1)); 432 EXPECT_FALSE(IsConnectionIdInTimeWait(kConnectionId1));
419 EXPECT_TRUE(IsGuidInTimeWait(kGuid2)); 433 EXPECT_TRUE(IsConnectionIdInTimeWait(kConnectionId2));
420 } 434 }
421 } // namespace 435 } // namespace
422 } // namespace test 436 } // namespace test
423 } // namespace tools 437 } // namespace tools
424 } // namespace net 438 } // namespace net
OLDNEW
« no previous file with comments | « net/tools/quic/quic_time_wait_list_manager.cc ('k') | net/tools/quic/test_tools/quic_test_client.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698