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 198 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
209 | 209 |
210 Matcher<const std::tr1::tuple<const char*, int> > PublicResetPacketEq( | 210 Matcher<const std::tr1::tuple<const char*, int> > PublicResetPacketEq( |
211 QuicConnectionId connection_id, | 211 QuicConnectionId connection_id, |
212 QuicPacketSequenceNumber sequence_number) { | 212 QuicPacketSequenceNumber sequence_number) { |
213 return MakeMatcher(new ValidatePublicResetPacketPredicate(connection_id, | 213 return MakeMatcher(new ValidatePublicResetPacketPredicate(connection_id, |
214 sequence_number)); | 214 sequence_number)); |
215 } | 215 } |
216 | 216 |
217 TEST_F(QuicTimeWaitListManagerTest, CheckConnectionIdInTimeWait) { | 217 TEST_F(QuicTimeWaitListManagerTest, CheckConnectionIdInTimeWait) { |
218 EXPECT_FALSE(IsConnectionIdInTimeWait(connection_id_)); | 218 EXPECT_FALSE(IsConnectionIdInTimeWait(connection_id_)); |
| 219 EXPECT_CALL(visitor_, OnConnectionAddedToTimeWaitList(connection_id_)); |
219 AddConnectionId(connection_id_); | 220 AddConnectionId(connection_id_); |
220 EXPECT_TRUE(IsConnectionIdInTimeWait(connection_id_)); | 221 EXPECT_TRUE(IsConnectionIdInTimeWait(connection_id_)); |
221 } | 222 } |
222 | 223 |
223 TEST_F(QuicTimeWaitListManagerTest, SendConnectionClose) { | 224 TEST_F(QuicTimeWaitListManagerTest, SendConnectionClose) { |
224 size_t kConnectionCloseLength = 100; | 225 size_t kConnectionCloseLength = 100; |
| 226 EXPECT_CALL(visitor_, OnConnectionAddedToTimeWaitList(connection_id_)); |
225 AddConnectionId( | 227 AddConnectionId( |
226 connection_id_, | 228 connection_id_, |
227 QuicVersionMax(), | 229 QuicVersionMax(), |
228 new QuicEncryptedPacket( | 230 new QuicEncryptedPacket( |
229 new char[kConnectionCloseLength], kConnectionCloseLength, true)); | 231 new char[kConnectionCloseLength], kConnectionCloseLength, true)); |
230 const int kRandomSequenceNumber = 1; | 232 const int kRandomSequenceNumber = 1; |
231 EXPECT_CALL(writer_, WritePacket(_, kConnectionCloseLength, | 233 EXPECT_CALL(writer_, WritePacket(_, kConnectionCloseLength, |
232 server_address_.address(), | 234 server_address_.address(), |
233 client_address_)) | 235 client_address_)) |
234 .WillOnce(Return(WriteResult(WRITE_STATUS_OK, 1))); | 236 .WillOnce(Return(WriteResult(WRITE_STATUS_OK, 1))); |
235 | 237 |
236 ProcessPacket(connection_id_, kRandomSequenceNumber); | 238 ProcessPacket(connection_id_, kRandomSequenceNumber); |
237 } | 239 } |
238 | 240 |
239 TEST_F(QuicTimeWaitListManagerTest, SendPublicReset) { | 241 TEST_F(QuicTimeWaitListManagerTest, SendPublicReset) { |
| 242 EXPECT_CALL(visitor_, OnConnectionAddedToTimeWaitList(connection_id_)); |
240 AddConnectionId(connection_id_); | 243 AddConnectionId(connection_id_); |
241 const int kRandomSequenceNumber = 1; | 244 const int kRandomSequenceNumber = 1; |
242 EXPECT_CALL(writer_, WritePacket(_, _, | 245 EXPECT_CALL(writer_, WritePacket(_, _, |
243 server_address_.address(), | 246 server_address_.address(), |
244 client_address_)) | 247 client_address_)) |
245 .With(Args<0, 1>(PublicResetPacketEq(connection_id_, | 248 .With(Args<0, 1>(PublicResetPacketEq(connection_id_, |
246 kRandomSequenceNumber))) | 249 kRandomSequenceNumber))) |
247 .WillOnce(Return(WriteResult(WRITE_STATUS_OK, 0))); | 250 .WillOnce(Return(WriteResult(WRITE_STATUS_OK, 0))); |
248 | 251 |
249 ProcessPacket(connection_id_, kRandomSequenceNumber); | 252 ProcessPacket(connection_id_, kRandomSequenceNumber); |
250 } | 253 } |
251 | 254 |
252 TEST_F(QuicTimeWaitListManagerTest, SendPublicResetWithExponentialBackOff) { | 255 TEST_F(QuicTimeWaitListManagerTest, SendPublicResetWithExponentialBackOff) { |
| 256 EXPECT_CALL(visitor_, OnConnectionAddedToTimeWaitList(connection_id_)); |
253 AddConnectionId(connection_id_); | 257 AddConnectionId(connection_id_); |
254 for (int sequence_number = 1; sequence_number < 101; ++sequence_number) { | 258 for (int sequence_number = 1; sequence_number < 101; ++sequence_number) { |
255 if ((sequence_number & (sequence_number - 1)) == 0) { | 259 if ((sequence_number & (sequence_number - 1)) == 0) { |
256 EXPECT_CALL(writer_, WritePacket(_, _, _, _)) | 260 EXPECT_CALL(writer_, WritePacket(_, _, _, _)) |
257 .WillOnce(Return(WriteResult(WRITE_STATUS_OK, 1))); | 261 .WillOnce(Return(WriteResult(WRITE_STATUS_OK, 1))); |
258 } | 262 } |
259 ProcessPacket(connection_id_, sequence_number); | 263 ProcessPacket(connection_id_, sequence_number); |
260 // Send public reset with exponential back off. | 264 // Send public reset with exponential back off. |
261 if ((sequence_number & (sequence_number - 1)) == 0) { | 265 if ((sequence_number & (sequence_number - 1)) == 0) { |
262 EXPECT_TRUE(QuicTimeWaitListManagerPeer::ShouldSendResponse( | 266 EXPECT_TRUE(QuicTimeWaitListManagerPeer::ShouldSendResponse( |
263 &time_wait_list_manager_, sequence_number)); | 267 &time_wait_list_manager_, sequence_number)); |
264 } else { | 268 } else { |
265 EXPECT_FALSE(QuicTimeWaitListManagerPeer::ShouldSendResponse( | 269 EXPECT_FALSE(QuicTimeWaitListManagerPeer::ShouldSendResponse( |
266 &time_wait_list_manager_, sequence_number)); | 270 &time_wait_list_manager_, sequence_number)); |
267 } | 271 } |
268 } | 272 } |
269 } | 273 } |
270 | 274 |
271 TEST_F(QuicTimeWaitListManagerTest, CleanUpOldConnectionIds) { | 275 TEST_F(QuicTimeWaitListManagerTest, CleanUpOldConnectionIds) { |
272 const int kConnectionIdCount = 100; | 276 const int kConnectionIdCount = 100; |
273 const int kOldConnectionIdCount = 31; | 277 const int kOldConnectionIdCount = 31; |
274 | 278 |
275 // Add connection_ids such that their expiry time is kTimeWaitPeriod_. | 279 // Add connection_ids such that their expiry time is kTimeWaitPeriod_. |
276 epoll_server_.set_now_in_usec(0); | 280 epoll_server_.set_now_in_usec(0); |
277 for (int connection_id = 1; | 281 for (int connection_id = 1; |
278 connection_id <= kOldConnectionIdCount; | 282 connection_id <= kOldConnectionIdCount; |
279 ++connection_id) { | 283 ++connection_id) { |
| 284 EXPECT_CALL(visitor_, OnConnectionAddedToTimeWaitList(connection_id)); |
280 AddConnectionId(connection_id); | 285 AddConnectionId(connection_id); |
281 } | 286 } |
282 | 287 |
283 // Add remaining connection_ids such that their add time is | 288 // Add remaining connection_ids such that their add time is |
284 // 2 * kTimeWaitPeriod. | 289 // 2 * kTimeWaitPeriod. |
285 const QuicTime::Delta time_wait_period = | 290 const QuicTime::Delta time_wait_period = |
286 QuicTimeWaitListManagerPeer::time_wait_period(&time_wait_list_manager_); | 291 QuicTimeWaitListManagerPeer::time_wait_period(&time_wait_list_manager_); |
287 epoll_server_.set_now_in_usec(time_wait_period.ToMicroseconds()); | 292 epoll_server_.set_now_in_usec(time_wait_period.ToMicroseconds()); |
288 for (int connection_id = kOldConnectionIdCount + 1; | 293 for (int connection_id = kOldConnectionIdCount + 1; |
289 connection_id <= kConnectionIdCount; | 294 connection_id <= kConnectionIdCount; |
290 ++connection_id) { | 295 ++connection_id) { |
| 296 EXPECT_CALL(visitor_, OnConnectionAddedToTimeWaitList(connection_id)); |
291 AddConnectionId(connection_id); | 297 AddConnectionId(connection_id); |
292 } | 298 } |
293 | 299 |
294 QuicTime::Delta offset = QuicTime::Delta::FromMicroseconds(39); | 300 QuicTime::Delta offset = QuicTime::Delta::FromMicroseconds(39); |
295 // Now set the current time as time_wait_period + offset usecs. | 301 // Now set the current time as time_wait_period + offset usecs. |
296 epoll_server_.set_now_in_usec(time_wait_period.Add(offset).ToMicroseconds()); | 302 epoll_server_.set_now_in_usec(time_wait_period.Add(offset).ToMicroseconds()); |
297 // After all the old connection_ids are cleaned up, check the next alarm | 303 // After all the old connection_ids are cleaned up, check the next alarm |
298 // interval. | 304 // interval. |
299 int64 next_alarm_time = epoll_server_.ApproximateNowInUsec() + | 305 int64 next_alarm_time = epoll_server_.ApproximateNowInUsec() + |
300 time_wait_period.Subtract(offset).ToMicroseconds(); | 306 time_wait_period.Subtract(offset).ToMicroseconds(); |
301 EXPECT_CALL(epoll_server_, RegisterAlarm(next_alarm_time, _)); | 307 EXPECT_CALL(epoll_server_, RegisterAlarm(next_alarm_time, _)); |
302 | 308 |
| 309 for (int connection_id = 1; connection_id <= kConnectionIdCount; |
| 310 ++connection_id) { |
| 311 if (connection_id <= kOldConnectionIdCount) { |
| 312 EXPECT_CALL(visitor_, OnConnectionRemovedFromTimeWaitList(connection_id)); |
| 313 } |
| 314 } |
303 time_wait_list_manager_.CleanUpOldConnectionIds(); | 315 time_wait_list_manager_.CleanUpOldConnectionIds(); |
304 for (int connection_id = 1; | 316 for (int connection_id = 1; |
305 connection_id <= kConnectionIdCount; | 317 connection_id <= kConnectionIdCount; |
306 ++connection_id) { | 318 ++connection_id) { |
307 EXPECT_EQ(connection_id > kOldConnectionIdCount, | 319 EXPECT_EQ(connection_id > kOldConnectionIdCount, |
308 IsConnectionIdInTimeWait(connection_id)) | 320 IsConnectionIdInTimeWait(connection_id)) |
309 << "kOldConnectionIdCount: " << kOldConnectionIdCount | 321 << "kOldConnectionIdCount: " << kOldConnectionIdCount |
310 << " connection_id: " << connection_id; | 322 << " connection_id: " << connection_id; |
311 } | 323 } |
312 } | 324 } |
313 | 325 |
314 TEST_F(QuicTimeWaitListManagerTest, SendQueuedPackets) { | 326 TEST_F(QuicTimeWaitListManagerTest, SendQueuedPackets) { |
315 QuicConnectionId connection_id = 1; | 327 QuicConnectionId connection_id = 1; |
| 328 EXPECT_CALL(visitor_, OnConnectionAddedToTimeWaitList(connection_id)); |
316 AddConnectionId(connection_id); | 329 AddConnectionId(connection_id); |
317 QuicPacketSequenceNumber sequence_number = 234; | 330 QuicPacketSequenceNumber sequence_number = 234; |
318 scoped_ptr<QuicEncryptedPacket> packet(ConstructEncryptedPacket( | 331 scoped_ptr<QuicEncryptedPacket> packet(ConstructEncryptedPacket( |
319 ENCRYPTION_NONE, connection_id, sequence_number)); | 332 ENCRYPTION_NONE, connection_id, sequence_number)); |
320 // Let first write through. | 333 // Let first write through. |
321 EXPECT_CALL(writer_, WritePacket(_, _, | 334 EXPECT_CALL(writer_, WritePacket(_, _, |
322 server_address_.address(), | 335 server_address_.address(), |
323 client_address_)) | 336 client_address_)) |
324 .With(Args<0, 1>(PublicResetPacketEq(connection_id, | 337 .With(Args<0, 1>(PublicResetPacketEq(connection_id, |
325 sequence_number))) | 338 sequence_number))) |
(...skipping 10 matching lines...) Expand all Loading... |
336 Assign(&writer_is_blocked_, true), | 349 Assign(&writer_is_blocked_, true), |
337 Return(WriteResult(WRITE_STATUS_BLOCKED, EAGAIN)))); | 350 Return(WriteResult(WRITE_STATUS_BLOCKED, EAGAIN)))); |
338 EXPECT_CALL(visitor_, OnWriteBlocked(&time_wait_list_manager_)); | 351 EXPECT_CALL(visitor_, OnWriteBlocked(&time_wait_list_manager_)); |
339 ProcessPacket(connection_id, sequence_number); | 352 ProcessPacket(connection_id, sequence_number); |
340 // 3rd packet. No public reset should be sent; | 353 // 3rd packet. No public reset should be sent; |
341 ProcessPacket(connection_id, sequence_number); | 354 ProcessPacket(connection_id, sequence_number); |
342 | 355 |
343 // write packet should not be called since we are write blocked but the | 356 // write packet should not be called since we are write blocked but the |
344 // should be queued. | 357 // should be queued. |
345 QuicConnectionId other_connection_id = 2; | 358 QuicConnectionId other_connection_id = 2; |
| 359 EXPECT_CALL(visitor_, OnConnectionAddedToTimeWaitList(other_connection_id)); |
346 AddConnectionId(other_connection_id); | 360 AddConnectionId(other_connection_id); |
347 QuicPacketSequenceNumber other_sequence_number = 23423; | 361 QuicPacketSequenceNumber other_sequence_number = 23423; |
348 scoped_ptr<QuicEncryptedPacket> other_packet( | 362 scoped_ptr<QuicEncryptedPacket> other_packet( |
349 ConstructEncryptedPacket( | 363 ConstructEncryptedPacket( |
350 ENCRYPTION_NONE, other_connection_id, other_sequence_number)); | 364 ENCRYPTION_NONE, other_connection_id, other_sequence_number)); |
351 EXPECT_CALL(writer_, WritePacket(_, _, _, _)) | 365 EXPECT_CALL(writer_, WritePacket(_, _, _, _)) |
352 .Times(0); | 366 .Times(0); |
353 EXPECT_CALL(visitor_, OnWriteBlocked(&time_wait_list_manager_)); | 367 EXPECT_CALL(visitor_, OnWriteBlocked(&time_wait_list_manager_)); |
354 ProcessPacket(other_connection_id, other_sequence_number); | 368 ProcessPacket(other_connection_id, other_sequence_number); |
355 | 369 |
(...skipping 13 matching lines...) Expand all Loading... |
369 .WillOnce(Return(WriteResult(WRITE_STATUS_OK, | 383 .WillOnce(Return(WriteResult(WRITE_STATUS_OK, |
370 other_packet->length()))); | 384 other_packet->length()))); |
371 time_wait_list_manager_.OnCanWrite(); | 385 time_wait_list_manager_.OnCanWrite(); |
372 } | 386 } |
373 | 387 |
374 TEST_F(QuicTimeWaitListManagerTest, GetQuicVersionFromMap) { | 388 TEST_F(QuicTimeWaitListManagerTest, GetQuicVersionFromMap) { |
375 const int kConnectionId1 = 123; | 389 const int kConnectionId1 = 123; |
376 const int kConnectionId2 = 456; | 390 const int kConnectionId2 = 456; |
377 const int kConnectionId3 = 789; | 391 const int kConnectionId3 = 789; |
378 | 392 |
| 393 EXPECT_CALL(visitor_, OnConnectionAddedToTimeWaitList(kConnectionId1)); |
| 394 EXPECT_CALL(visitor_, OnConnectionAddedToTimeWaitList(kConnectionId2)); |
| 395 EXPECT_CALL(visitor_, OnConnectionAddedToTimeWaitList(kConnectionId3)); |
379 AddConnectionId(kConnectionId1, QuicVersionMin(), nullptr); | 396 AddConnectionId(kConnectionId1, QuicVersionMin(), nullptr); |
380 AddConnectionId(kConnectionId2, QuicVersionMax(), nullptr); | 397 AddConnectionId(kConnectionId2, QuicVersionMax(), nullptr); |
381 AddConnectionId(kConnectionId3, QuicVersionMax(), nullptr); | 398 AddConnectionId(kConnectionId3, QuicVersionMax(), nullptr); |
382 | 399 |
383 EXPECT_EQ(QuicVersionMin(), | 400 EXPECT_EQ(QuicVersionMin(), |
384 QuicTimeWaitListManagerPeer::GetQuicVersionFromConnectionId( | 401 QuicTimeWaitListManagerPeer::GetQuicVersionFromConnectionId( |
385 &time_wait_list_manager_, kConnectionId1)); | 402 &time_wait_list_manager_, kConnectionId1)); |
386 EXPECT_EQ(QuicVersionMax(), | 403 EXPECT_EQ(QuicVersionMax(), |
387 QuicTimeWaitListManagerPeer::GetQuicVersionFromConnectionId( | 404 QuicTimeWaitListManagerPeer::GetQuicVersionFromConnectionId( |
388 &time_wait_list_manager_, kConnectionId2)); | 405 &time_wait_list_manager_, kConnectionId2)); |
389 EXPECT_EQ(QuicVersionMax(), | 406 EXPECT_EQ(QuicVersionMax(), |
390 QuicTimeWaitListManagerPeer::GetQuicVersionFromConnectionId( | 407 QuicTimeWaitListManagerPeer::GetQuicVersionFromConnectionId( |
391 &time_wait_list_manager_, kConnectionId3)); | 408 &time_wait_list_manager_, kConnectionId3)); |
392 } | 409 } |
393 | 410 |
394 TEST_F(QuicTimeWaitListManagerTest, AddConnectionIdTwice) { | 411 TEST_F(QuicTimeWaitListManagerTest, AddConnectionIdTwice) { |
395 // Add connection_ids such that their expiry time is kTimeWaitPeriod_. | 412 // Add connection_ids such that their expiry time is kTimeWaitPeriod_. |
396 epoll_server_.set_now_in_usec(0); | 413 epoll_server_.set_now_in_usec(0); |
| 414 EXPECT_CALL(visitor_, OnConnectionAddedToTimeWaitList(connection_id_)); |
397 AddConnectionId(connection_id_); | 415 AddConnectionId(connection_id_); |
398 EXPECT_TRUE(IsConnectionIdInTimeWait(connection_id_)); | 416 EXPECT_TRUE(IsConnectionIdInTimeWait(connection_id_)); |
399 size_t kConnectionCloseLength = 100; | 417 size_t kConnectionCloseLength = 100; |
400 AddConnectionId( | 418 AddConnectionId( |
401 connection_id_, | 419 connection_id_, |
402 QuicVersionMax(), | 420 QuicVersionMax(), |
403 new QuicEncryptedPacket( | 421 new QuicEncryptedPacket( |
404 new char[kConnectionCloseLength], kConnectionCloseLength, true)); | 422 new char[kConnectionCloseLength], kConnectionCloseLength, true)); |
405 EXPECT_TRUE(IsConnectionIdInTimeWait(connection_id_)); | 423 EXPECT_TRUE(IsConnectionIdInTimeWait(connection_id_)); |
406 | 424 |
(...skipping 10 matching lines...) Expand all Loading... |
417 QuicTimeWaitListManagerPeer::time_wait_period(&time_wait_list_manager_); | 435 QuicTimeWaitListManagerPeer::time_wait_period(&time_wait_list_manager_); |
418 | 436 |
419 QuicTime::Delta offset = QuicTime::Delta::FromMicroseconds(39); | 437 QuicTime::Delta offset = QuicTime::Delta::FromMicroseconds(39); |
420 // Now set the current time as time_wait_period + offset usecs. | 438 // Now set the current time as time_wait_period + offset usecs. |
421 epoll_server_.set_now_in_usec(time_wait_period.Add(offset).ToMicroseconds()); | 439 epoll_server_.set_now_in_usec(time_wait_period.Add(offset).ToMicroseconds()); |
422 // After the connection_ids are cleaned up, check the next alarm interval. | 440 // After the connection_ids are cleaned up, check the next alarm interval. |
423 int64 next_alarm_time = epoll_server_.ApproximateNowInUsec() + | 441 int64 next_alarm_time = epoll_server_.ApproximateNowInUsec() + |
424 time_wait_period.ToMicroseconds(); | 442 time_wait_period.ToMicroseconds(); |
425 | 443 |
426 EXPECT_CALL(epoll_server_, RegisterAlarm(next_alarm_time, _)); | 444 EXPECT_CALL(epoll_server_, RegisterAlarm(next_alarm_time, _)); |
| 445 EXPECT_CALL(visitor_, OnConnectionRemovedFromTimeWaitList(connection_id_)); |
427 time_wait_list_manager_.CleanUpOldConnectionIds(); | 446 time_wait_list_manager_.CleanUpOldConnectionIds(); |
428 EXPECT_FALSE(IsConnectionIdInTimeWait(connection_id_)); | 447 EXPECT_FALSE(IsConnectionIdInTimeWait(connection_id_)); |
429 } | 448 } |
430 | 449 |
431 TEST_F(QuicTimeWaitListManagerTest, ConnectionIdsOrderedByTime) { | 450 TEST_F(QuicTimeWaitListManagerTest, ConnectionIdsOrderedByTime) { |
432 // Simple randomization: the values of connection_ids are swapped based on the | 451 // Simple randomization: the values of connection_ids are swapped based on the |
433 // current seconds on the clock. If the container is broken, the test will be | 452 // current seconds on the clock. If the container is broken, the test will be |
434 // 50% flaky. | 453 // 50% flaky. |
435 int odd_second = static_cast<int>(epoll_server_.ApproximateNowInUsec()) % 2; | 454 int odd_second = static_cast<int>(epoll_server_.ApproximateNowInUsec()) % 2; |
436 EXPECT_TRUE(odd_second == 0 || odd_second == 1); | 455 EXPECT_TRUE(odd_second == 0 || odd_second == 1); |
437 const QuicConnectionId kConnectionId1 = odd_second; | 456 const QuicConnectionId kConnectionId1 = odd_second; |
438 const QuicConnectionId kConnectionId2 = 1 - odd_second; | 457 const QuicConnectionId kConnectionId2 = 1 - odd_second; |
439 | 458 |
440 // 1 will hash lower than 2, but we add it later. They should come out in the | 459 // 1 will hash lower than 2, but we add it later. They should come out in the |
441 // add order, not hash order. | 460 // add order, not hash order. |
442 epoll_server_.set_now_in_usec(0); | 461 epoll_server_.set_now_in_usec(0); |
| 462 EXPECT_CALL(visitor_, OnConnectionAddedToTimeWaitList(kConnectionId1)); |
443 AddConnectionId(kConnectionId1); | 463 AddConnectionId(kConnectionId1); |
444 epoll_server_.set_now_in_usec(10); | 464 epoll_server_.set_now_in_usec(10); |
| 465 EXPECT_CALL(visitor_, OnConnectionAddedToTimeWaitList(kConnectionId2)); |
445 AddConnectionId(kConnectionId2); | 466 AddConnectionId(kConnectionId2); |
446 | 467 |
447 const QuicTime::Delta time_wait_period = | 468 const QuicTime::Delta time_wait_period = |
448 QuicTimeWaitListManagerPeer::time_wait_period(&time_wait_list_manager_); | 469 QuicTimeWaitListManagerPeer::time_wait_period(&time_wait_list_manager_); |
449 epoll_server_.set_now_in_usec(time_wait_period.ToMicroseconds() + 1); | 470 epoll_server_.set_now_in_usec(time_wait_period.ToMicroseconds() + 1); |
450 | 471 |
451 EXPECT_CALL(epoll_server_, RegisterAlarm(_, _)); | 472 EXPECT_CALL(epoll_server_, RegisterAlarm(_, _)); |
452 | 473 |
| 474 EXPECT_CALL(visitor_, OnConnectionRemovedFromTimeWaitList(kConnectionId1)); |
453 time_wait_list_manager_.CleanUpOldConnectionIds(); | 475 time_wait_list_manager_.CleanUpOldConnectionIds(); |
454 EXPECT_FALSE(IsConnectionIdInTimeWait(kConnectionId1)); | 476 EXPECT_FALSE(IsConnectionIdInTimeWait(kConnectionId1)); |
455 EXPECT_TRUE(IsConnectionIdInTimeWait(kConnectionId2)); | 477 EXPECT_TRUE(IsConnectionIdInTimeWait(kConnectionId2)); |
456 } | 478 } |
457 } // namespace | 479 } // namespace |
458 } // namespace test | 480 } // namespace test |
459 } // namespace tools | 481 } // namespace tools |
460 } // namespace net | 482 } // namespace net |
OLD | NEW |