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

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

Issue 1421853006: Landing Recent QUIC changes until: Fri Oct 30 22:23:58 2015 +0000 (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fix comments Created 5 years, 1 month 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
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 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
90 public: 90 public:
91 MOCK_METHOD2(RegisterAlarm, void(int64 timeout_in_us, 91 MOCK_METHOD2(RegisterAlarm, void(int64 timeout_in_us,
92 EpollAlarmCallbackInterface* alarm)); 92 EpollAlarmCallbackInterface* alarm));
93 }; 93 };
94 94
95 class QuicTimeWaitListManagerTest : public ::testing::Test { 95 class QuicTimeWaitListManagerTest : public ::testing::Test {
96 protected: 96 protected:
97 QuicTimeWaitListManagerTest() 97 QuicTimeWaitListManagerTest()
98 : helper_(&epoll_server_), 98 : helper_(&epoll_server_),
99 time_wait_list_manager_(&writer_, &visitor_, &helper_), 99 time_wait_list_manager_(&writer_, &visitor_, &helper_),
100 framer_(QuicSupportedVersions(),
101 QuicTime::Zero(),
102 Perspective::IS_SERVER),
103 connection_id_(45), 100 connection_id_(45),
104 client_address_(net::test::TestPeerIPAddress(), kTestPort), 101 client_address_(net::test::TestPeerIPAddress(), kTestPort),
105 writer_is_blocked_(false) {} 102 writer_is_blocked_(false) {}
106 103
107 ~QuicTimeWaitListManagerTest() override {} 104 ~QuicTimeWaitListManagerTest() override {}
108 105
109 void SetUp() override { 106 void SetUp() override {
110 EXPECT_CALL(writer_, IsWriteBlocked()) 107 EXPECT_CALL(writer_, IsWriteBlocked())
111 .WillRepeatedly(ReturnPointee(&writer_is_blocked_)); 108 .WillRepeatedly(ReturnPointee(&writer_is_blocked_));
112 EXPECT_CALL(writer_, IsWriteBlockedDataBuffered()) 109 EXPECT_CALL(writer_, IsWriteBlockedDataBuffered())
113 .WillRepeatedly(Return(false)); 110 .WillRepeatedly(Return(false));
114 } 111 }
115 112
116 void AddConnectionId(QuicConnectionId connection_id) { 113 void AddConnectionId(QuicConnectionId connection_id) {
117 AddConnectionId(connection_id, QuicVersionMax(), 114 AddConnectionId(connection_id, QuicVersionMax(),
118 /*connection_rejected_statelessly=*/false, nullptr); 115 /*connection_rejected_statelessly=*/false, nullptr);
119 } 116 }
120 117
121 void AddStatelessConnectionId(QuicConnectionId connection_id) { 118 void AddStatelessConnectionId(QuicConnectionId connection_id) {
119 std::vector<QuicEncryptedPacket*> termination_packets;
120 termination_packets.push_back(new QuicEncryptedPacket(nullptr, 0, false));
122 time_wait_list_manager_.AddConnectionIdToTimeWait( 121 time_wait_list_manager_.AddConnectionIdToTimeWait(
123 connection_id, QuicVersionMax(), 122 connection_id, QuicVersionMax(),
124 /*connection_rejected_statelessly=*/true, nullptr); 123 /*connection_rejected_statelessly=*/true, &termination_packets);
125 } 124 }
126 125
127 void AddConnectionId(QuicConnectionId connection_id, 126 void AddConnectionId(QuicConnectionId connection_id,
128 QuicVersion version, 127 QuicVersion version,
129 bool connection_rejected_statelessly, 128 bool connection_rejected_statelessly,
130 QuicEncryptedPacket* packet) { 129 std::vector<QuicEncryptedPacket*>* packets) {
131 time_wait_list_manager_.AddConnectionIdToTimeWait( 130 time_wait_list_manager_.AddConnectionIdToTimeWait(
132 connection_id, version, connection_rejected_statelessly, packet); 131 connection_id, version, connection_rejected_statelessly, packets);
133 } 132 }
134 133
135 bool IsConnectionIdInTimeWait(QuicConnectionId connection_id) { 134 bool IsConnectionIdInTimeWait(QuicConnectionId connection_id) {
136 return time_wait_list_manager_.IsConnectionIdInTimeWait(connection_id); 135 return time_wait_list_manager_.IsConnectionIdInTimeWait(connection_id);
137 } 136 }
138 137
139 void ProcessPacket(QuicConnectionId connection_id, 138 void ProcessPacket(QuicConnectionId connection_id,
140 QuicPacketNumber packet_number) { 139 QuicPacketNumber packet_number) {
141 QuicEncryptedPacket packet(nullptr, 0); 140 QuicEncryptedPacket packet(nullptr, 0);
142 time_wait_list_manager_.ProcessPacket(server_address_, client_address_, 141 time_wait_list_manager_.ProcessPacket(server_address_, client_address_,
143 connection_id, packet_number, packet); 142 connection_id, packet_number, packet);
144 } 143 }
145 144
146 QuicEncryptedPacket* ConstructEncryptedPacket( 145 QuicEncryptedPacket* ConstructEncryptedPacket(
147 EncryptionLevel level,
148 QuicConnectionId connection_id, 146 QuicConnectionId connection_id,
149 QuicPacketNumber packet_number) { 147 QuicPacketNumber packet_number) {
150 QuicPacketHeader header; 148 return net::test::ConstructEncryptedPacket(connection_id, false, false,
151 header.public_header.connection_id = connection_id; 149 packet_number, "data");
152 header.public_header.connection_id_length = PACKET_8BYTE_CONNECTION_ID;
153 header.public_header.version_flag = false;
154 header.public_header.reset_flag = false;
155 header.public_header.packet_number_length = PACKET_6BYTE_PACKET_NUMBER;
156 header.packet_number = packet_number;
157 header.entropy_flag = false;
158 header.entropy_hash = 0;
159 header.fec_flag = false;
160 header.is_in_fec_group = NOT_IN_FEC_GROUP;
161 header.fec_group = 0;
162 QuicStreamFrame stream_frame(1, false, 0, StringPiece("data"));
163 QuicFrame frame(&stream_frame);
164 QuicFrames frames;
165 frames.push_back(frame);
166 scoped_ptr<QuicPacket> packet(
167 BuildUnsizedDataPacket(&framer_, header, frames));
168 EXPECT_TRUE(packet != nullptr);
169 char buffer[kMaxPacketSize];
170 scoped_ptr<QuicEncryptedPacket> encrypted(framer_.EncryptPayload(
171 ENCRYPTION_NONE, packet_number, *packet, buffer, kMaxPacketSize));
172 EXPECT_TRUE(encrypted != nullptr);
173 return encrypted->Clone();
174 } 150 }
175 151
176 NiceMock<MockFakeTimeEpollServer> epoll_server_; 152 NiceMock<MockFakeTimeEpollServer> epoll_server_;
177 QuicEpollConnectionHelper helper_; 153 QuicEpollConnectionHelper helper_;
178 StrictMock<MockPacketWriter> writer_; 154 StrictMock<MockPacketWriter> writer_;
179 StrictMock<MockQuicServerSessionVisitor> visitor_; 155 StrictMock<MockQuicServerSessionVisitor> visitor_;
180 QuicTimeWaitListManager time_wait_list_manager_; 156 QuicTimeWaitListManager time_wait_list_manager_;
181 QuicFramer framer_;
182 QuicConnectionId connection_id_; 157 QuicConnectionId connection_id_;
183 IPEndPoint server_address_; 158 IPEndPoint server_address_;
184 IPEndPoint client_address_; 159 IPEndPoint client_address_;
185 bool writer_is_blocked_; 160 bool writer_is_blocked_;
186 }; 161 };
187 162
188 class ValidatePublicResetPacketPredicate 163 class ValidatePublicResetPacketPredicate
189 : public MatcherInterface<const std::tr1::tuple<const char*, int> > { 164 : public MatcherInterface<const std::tr1::tuple<const char*, int> > {
190 public: 165 public:
191 explicit ValidatePublicResetPacketPredicate(QuicConnectionId connection_id, 166 explicit ValidatePublicResetPacketPredicate(QuicConnectionId connection_id,
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
239 EXPECT_FALSE(IsConnectionIdInTimeWait(connection_id_)); 214 EXPECT_FALSE(IsConnectionIdInTimeWait(connection_id_));
240 EXPECT_CALL(visitor_, OnConnectionAddedToTimeWaitList(connection_id_)); 215 EXPECT_CALL(visitor_, OnConnectionAddedToTimeWaitList(connection_id_));
241 AddStatelessConnectionId(connection_id_); 216 AddStatelessConnectionId(connection_id_);
242 EXPECT_EQ(1u, time_wait_list_manager_.num_connections()); 217 EXPECT_EQ(1u, time_wait_list_manager_.num_connections());
243 EXPECT_TRUE(IsConnectionIdInTimeWait(connection_id_)); 218 EXPECT_TRUE(IsConnectionIdInTimeWait(connection_id_));
244 } 219 }
245 220
246 TEST_F(QuicTimeWaitListManagerTest, SendConnectionClose) { 221 TEST_F(QuicTimeWaitListManagerTest, SendConnectionClose) {
247 const size_t kConnectionCloseLength = 100; 222 const size_t kConnectionCloseLength = 100;
248 EXPECT_CALL(visitor_, OnConnectionAddedToTimeWaitList(connection_id_)); 223 EXPECT_CALL(visitor_, OnConnectionAddedToTimeWaitList(connection_id_));
224 std::vector<QuicEncryptedPacket*> termination_packets;
225 termination_packets.push_back(new QuicEncryptedPacket(
226 new char[kConnectionCloseLength], kConnectionCloseLength, true));
249 AddConnectionId(connection_id_, QuicVersionMax(), 227 AddConnectionId(connection_id_, QuicVersionMax(),
250 /*connection_rejected_statelessly=*/false, 228 /*connection_rejected_statelessly=*/false,
251 new QuicEncryptedPacket(new char[kConnectionCloseLength], 229 &termination_packets);
252 kConnectionCloseLength, true));
253 const int kRandomSequenceNumber = 1; 230 const int kRandomSequenceNumber = 1;
254 EXPECT_CALL(writer_, WritePacket(_, kConnectionCloseLength, 231 EXPECT_CALL(writer_, WritePacket(_, kConnectionCloseLength,
255 server_address_.address(), 232 server_address_.address(),
256 client_address_)) 233 client_address_))
257 .WillOnce(Return(WriteResult(WRITE_STATUS_OK, 1))); 234 .WillOnce(Return(WriteResult(WRITE_STATUS_OK, 1)));
258 235
259 ProcessPacket(connection_id_, kRandomSequenceNumber); 236 ProcessPacket(connection_id_, kRandomSequenceNumber);
260 } 237 }
261 238
239 TEST_F(QuicTimeWaitListManagerTest, SendTwoConnectionCloses) {
240 const size_t kConnectionCloseLength = 100;
241 EXPECT_CALL(visitor_, OnConnectionAddedToTimeWaitList(connection_id_));
242 std::vector<QuicEncryptedPacket*> termination_packets;
243 termination_packets.push_back(new QuicEncryptedPacket(
244 new char[kConnectionCloseLength], kConnectionCloseLength, true));
245 termination_packets.push_back(new QuicEncryptedPacket(
246 new char[kConnectionCloseLength], kConnectionCloseLength, true));
247 AddConnectionId(connection_id_, QuicVersionMax(),
248 /*connection_rejected_statelessly=*/false,
249 &termination_packets);
250 const int kRandomSequenceNumber = 1;
251 EXPECT_CALL(writer_, WritePacket(_, kConnectionCloseLength,
252 server_address_.address(), client_address_))
253 .Times(2)
254 .WillRepeatedly(Return(WriteResult(WRITE_STATUS_OK, 1)));
255
256 ProcessPacket(connection_id_, kRandomSequenceNumber);
257 }
258
262 TEST_F(QuicTimeWaitListManagerTest, SendPublicReset) { 259 TEST_F(QuicTimeWaitListManagerTest, SendPublicReset) {
263 EXPECT_CALL(visitor_, OnConnectionAddedToTimeWaitList(connection_id_)); 260 EXPECT_CALL(visitor_, OnConnectionAddedToTimeWaitList(connection_id_));
264 AddConnectionId(connection_id_); 261 AddConnectionId(connection_id_);
265 const int kRandomSequenceNumber = 1; 262 const int kRandomSequenceNumber = 1;
266 EXPECT_CALL(writer_, WritePacket(_, _, 263 EXPECT_CALL(writer_, WritePacket(_, _,
267 server_address_.address(), 264 server_address_.address(),
268 client_address_)) 265 client_address_))
269 .With(Args<0, 1>(PublicResetPacketEq(connection_id_, 266 .With(Args<0, 1>(PublicResetPacketEq(connection_id_,
270 kRandomSequenceNumber))) 267 kRandomSequenceNumber)))
271 .WillOnce(Return(WriteResult(WRITE_STATUS_OK, 0))); 268 .WillOnce(Return(WriteResult(WRITE_STATUS_OK, 0)));
(...skipping 19 matching lines...) Expand all
291 EXPECT_FALSE(QuicTimeWaitListManagerPeer::ShouldSendResponse( 288 EXPECT_FALSE(QuicTimeWaitListManagerPeer::ShouldSendResponse(
292 &time_wait_list_manager_, packet_number)); 289 &time_wait_list_manager_, packet_number));
293 } 290 }
294 } 291 }
295 } 292 }
296 293
297 TEST_F(QuicTimeWaitListManagerTest, NoPublicResetForStatelessConnections) { 294 TEST_F(QuicTimeWaitListManagerTest, NoPublicResetForStatelessConnections) {
298 EXPECT_CALL(visitor_, OnConnectionAddedToTimeWaitList(connection_id_)); 295 EXPECT_CALL(visitor_, OnConnectionAddedToTimeWaitList(connection_id_));
299 AddStatelessConnectionId(connection_id_); 296 AddStatelessConnectionId(connection_id_);
300 const int kRandomSequenceNumber = 1; 297 const int kRandomSequenceNumber = 1;
298
299 EXPECT_CALL(writer_,
300 WritePacket(_, _, server_address_.address(), client_address_))
301 .WillOnce(Return(WriteResult(WRITE_STATUS_OK, 1)));
302
301 ProcessPacket(connection_id_, kRandomSequenceNumber); 303 ProcessPacket(connection_id_, kRandomSequenceNumber);
302 } 304 }
303 305
304 TEST_F(QuicTimeWaitListManagerTest, CleanUpOldConnectionIds) { 306 TEST_F(QuicTimeWaitListManagerTest, CleanUpOldConnectionIds) {
305 const size_t kConnectionIdCount = 100; 307 const size_t kConnectionIdCount = 100;
306 const size_t kOldConnectionIdCount = 31; 308 const size_t kOldConnectionIdCount = 31;
307 309
308 // Add connection_ids such that their expiry time is time_wait_period_. 310 // Add connection_ids such that their expiry time is time_wait_period_.
309 epoll_server_.set_now_in_usec(0); 311 epoll_server_.set_now_in_usec(0);
310 for (size_t connection_id = 1; connection_id <= kOldConnectionIdCount; 312 for (size_t connection_id = 1; connection_id <= kOldConnectionIdCount;
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
352 EXPECT_EQ(kConnectionIdCount - kOldConnectionIdCount, 354 EXPECT_EQ(kConnectionIdCount - kOldConnectionIdCount,
353 time_wait_list_manager_.num_connections()); 355 time_wait_list_manager_.num_connections());
354 } 356 }
355 357
356 TEST_F(QuicTimeWaitListManagerTest, SendQueuedPackets) { 358 TEST_F(QuicTimeWaitListManagerTest, SendQueuedPackets) {
357 QuicConnectionId connection_id = 1; 359 QuicConnectionId connection_id = 1;
358 EXPECT_CALL(visitor_, OnConnectionAddedToTimeWaitList(connection_id)); 360 EXPECT_CALL(visitor_, OnConnectionAddedToTimeWaitList(connection_id));
359 AddConnectionId(connection_id); 361 AddConnectionId(connection_id);
360 QuicPacketNumber packet_number = 234; 362 QuicPacketNumber packet_number = 234;
361 scoped_ptr<QuicEncryptedPacket> packet( 363 scoped_ptr<QuicEncryptedPacket> packet(
362 ConstructEncryptedPacket(ENCRYPTION_NONE, connection_id, packet_number)); 364 ConstructEncryptedPacket(connection_id, packet_number));
363 // Let first write through. 365 // Let first write through.
364 EXPECT_CALL(writer_, 366 EXPECT_CALL(writer_,
365 WritePacket(_, _, server_address_.address(), client_address_)) 367 WritePacket(_, _, server_address_.address(), client_address_))
366 .With(Args<0, 1>(PublicResetPacketEq(connection_id, packet_number))) 368 .With(Args<0, 1>(PublicResetPacketEq(connection_id, packet_number)))
367 .WillOnce(Return(WriteResult(WRITE_STATUS_OK, packet->length()))); 369 .WillOnce(Return(WriteResult(WRITE_STATUS_OK, packet->length())));
368 ProcessPacket(connection_id, packet_number); 370 ProcessPacket(connection_id, packet_number);
369 371
370 // write block for the next packet. 372 // write block for the next packet.
371 EXPECT_CALL(writer_, 373 EXPECT_CALL(writer_,
372 WritePacket(_, _, server_address_.address(), client_address_)) 374 WritePacket(_, _, server_address_.address(), client_address_))
373 .With(Args<0, 1>(PublicResetPacketEq(connection_id, packet_number))) 375 .With(Args<0, 1>(PublicResetPacketEq(connection_id, packet_number)))
374 .WillOnce(DoAll(Assign(&writer_is_blocked_, true), 376 .WillOnce(DoAll(Assign(&writer_is_blocked_, true),
375 Return(WriteResult(WRITE_STATUS_BLOCKED, EAGAIN)))); 377 Return(WriteResult(WRITE_STATUS_BLOCKED, EAGAIN))));
376 EXPECT_CALL(visitor_, OnWriteBlocked(&time_wait_list_manager_)); 378 EXPECT_CALL(visitor_, OnWriteBlocked(&time_wait_list_manager_));
377 ProcessPacket(connection_id, packet_number); 379 ProcessPacket(connection_id, packet_number);
378 // 3rd packet. No public reset should be sent; 380 // 3rd packet. No public reset should be sent;
379 ProcessPacket(connection_id, packet_number); 381 ProcessPacket(connection_id, packet_number);
380 382
381 // write packet should not be called since we are write blocked but the 383 // write packet should not be called since we are write blocked but the
382 // should be queued. 384 // should be queued.
383 QuicConnectionId other_connection_id = 2; 385 QuicConnectionId other_connection_id = 2;
384 EXPECT_CALL(visitor_, OnConnectionAddedToTimeWaitList(other_connection_id)); 386 EXPECT_CALL(visitor_, OnConnectionAddedToTimeWaitList(other_connection_id));
385 AddConnectionId(other_connection_id); 387 AddConnectionId(other_connection_id);
386 QuicPacketNumber other_packet_number = 23423; 388 QuicPacketNumber other_packet_number = 23423;
387 scoped_ptr<QuicEncryptedPacket> other_packet(ConstructEncryptedPacket( 389 scoped_ptr<QuicEncryptedPacket> other_packet(
388 ENCRYPTION_NONE, other_connection_id, other_packet_number)); 390 ConstructEncryptedPacket(other_connection_id, other_packet_number));
389 EXPECT_CALL(writer_, WritePacket(_, _, _, _)) 391 EXPECT_CALL(writer_, WritePacket(_, _, _, _))
390 .Times(0); 392 .Times(0);
391 EXPECT_CALL(visitor_, OnWriteBlocked(&time_wait_list_manager_)); 393 EXPECT_CALL(visitor_, OnWriteBlocked(&time_wait_list_manager_));
392 ProcessPacket(other_connection_id, other_packet_number); 394 ProcessPacket(other_connection_id, other_packet_number);
393 EXPECT_EQ(2u, time_wait_list_manager_.num_connections()); 395 EXPECT_EQ(2u, time_wait_list_manager_.num_connections());
394 396
395 // Now expect all the write blocked public reset packets to be sent again. 397 // Now expect all the write blocked public reset packets to be sent again.
396 writer_is_blocked_ = false; 398 writer_is_blocked_ = false;
397 EXPECT_CALL(writer_, 399 EXPECT_CALL(writer_,
398 WritePacket(_, _, server_address_.address(), client_address_)) 400 WritePacket(_, _, server_address_.address(), client_address_))
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
432 &time_wait_list_manager_, kConnectionId3)); 434 &time_wait_list_manager_, kConnectionId3));
433 } 435 }
434 436
435 TEST_F(QuicTimeWaitListManagerTest, AddConnectionIdTwice) { 437 TEST_F(QuicTimeWaitListManagerTest, AddConnectionIdTwice) {
436 // Add connection_ids such that their expiry time is time_wait_period_. 438 // Add connection_ids such that their expiry time is time_wait_period_.
437 epoll_server_.set_now_in_usec(0); 439 epoll_server_.set_now_in_usec(0);
438 EXPECT_CALL(visitor_, OnConnectionAddedToTimeWaitList(connection_id_)); 440 EXPECT_CALL(visitor_, OnConnectionAddedToTimeWaitList(connection_id_));
439 AddConnectionId(connection_id_); 441 AddConnectionId(connection_id_);
440 EXPECT_TRUE(IsConnectionIdInTimeWait(connection_id_)); 442 EXPECT_TRUE(IsConnectionIdInTimeWait(connection_id_));
441 const size_t kConnectionCloseLength = 100; 443 const size_t kConnectionCloseLength = 100;
444 std::vector<QuicEncryptedPacket*> termination_packets;
445 termination_packets.push_back(new QuicEncryptedPacket(
446 new char[kConnectionCloseLength], kConnectionCloseLength, true));
442 AddConnectionId(connection_id_, QuicVersionMax(), 447 AddConnectionId(connection_id_, QuicVersionMax(),
443 /*connection_rejected_statelessly=*/false, 448 /*connection_rejected_statelessly=*/false,
444 new QuicEncryptedPacket(new char[kConnectionCloseLength], 449 &termination_packets);
445 kConnectionCloseLength, true));
446 EXPECT_TRUE(IsConnectionIdInTimeWait(connection_id_)); 450 EXPECT_TRUE(IsConnectionIdInTimeWait(connection_id_));
447 EXPECT_EQ(1u, time_wait_list_manager_.num_connections()); 451 EXPECT_EQ(1u, time_wait_list_manager_.num_connections());
448 452
449 EXPECT_CALL(writer_, WritePacket(_, 453 EXPECT_CALL(writer_, WritePacket(_,
450 kConnectionCloseLength, 454 kConnectionCloseLength,
451 server_address_.address(), 455 server_address_.address(),
452 client_address_)) 456 client_address_))
453 .WillOnce(Return(WriteResult(WRITE_STATUS_OK, 1))); 457 .WillOnce(Return(WriteResult(WRITE_STATUS_OK, 1)));
454 458
455 const int kRandomSequenceNumber = 1; 459 const int kRandomSequenceNumber = 1;
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
537 time_wait_list_manager_.num_connections()); 541 time_wait_list_manager_.num_connections());
538 EXPECT_FALSE(IsConnectionIdInTimeWait(id_to_evict)); 542 EXPECT_FALSE(IsConnectionIdInTimeWait(id_to_evict));
539 EXPECT_TRUE(IsConnectionIdInTimeWait(current_connection_id)); 543 EXPECT_TRUE(IsConnectionIdInTimeWait(current_connection_id));
540 } 544 }
541 } 545 }
542 546
543 } // namespace 547 } // namespace
544 } // namespace test 548 } // namespace test
545 } // namespace tools 549 } // namespace tools
546 } // namespace net 550 } // namespace net
OLDNEW
« no previous file with comments | « net/tools/quic/quic_time_wait_list_manager.cc ('k') | net/tools/quic/test_tools/mock_quic_time_wait_list_manager.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698