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

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

Issue 340433002: Port QuicServer to Chrome network stack (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Address review comments and fix blocked writers using callbacks Created 6 years, 6 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
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 213 matching lines...) Expand 10 before | Expand all | Expand 10 after
224 TEST_F(QuicTimeWaitListManagerTest, SendConnectionClose) { 224 TEST_F(QuicTimeWaitListManagerTest, SendConnectionClose) {
225 size_t kConnectionCloseLength = 100; 225 size_t kConnectionCloseLength = 100;
226 AddConnectionId( 226 AddConnectionId(
227 connection_id_, 227 connection_id_,
228 QuicVersionMax(), 228 QuicVersionMax(),
229 new QuicEncryptedPacket( 229 new QuicEncryptedPacket(
230 new char[kConnectionCloseLength], kConnectionCloseLength, true)); 230 new char[kConnectionCloseLength], kConnectionCloseLength, true));
231 const int kRandomSequenceNumber = 1; 231 const int kRandomSequenceNumber = 1;
232 EXPECT_CALL(writer_, WritePacket(_, kConnectionCloseLength, 232 EXPECT_CALL(writer_, WritePacket(_, kConnectionCloseLength,
233 server_address_.address(), 233 server_address_.address(),
234 client_address_)) 234 client_address_,
235 _))
235 .WillOnce(Return(WriteResult(WRITE_STATUS_OK, 1))); 236 .WillOnce(Return(WriteResult(WRITE_STATUS_OK, 1)));
236 237
237 ProcessPacket(connection_id_, kRandomSequenceNumber); 238 ProcessPacket(connection_id_, kRandomSequenceNumber);
238 } 239 }
239 240
240 TEST_F(QuicTimeWaitListManagerTest, SendPublicReset) { 241 TEST_F(QuicTimeWaitListManagerTest, SendPublicReset) {
241 AddConnectionId(connection_id_); 242 AddConnectionId(connection_id_);
242 const int kRandomSequenceNumber = 1; 243 const int kRandomSequenceNumber = 1;
243 EXPECT_CALL(writer_, WritePacket(_, _, 244 EXPECT_CALL(writer_, WritePacket(_, _,
244 server_address_.address(), 245 server_address_.address(),
245 client_address_)) 246 client_address_,
247 _))
246 .With(Args<0, 1>(PublicResetPacketEq(connection_id_, 248 .With(Args<0, 1>(PublicResetPacketEq(connection_id_,
247 kRandomSequenceNumber))) 249 kRandomSequenceNumber)))
248 .WillOnce(Return(WriteResult(WRITE_STATUS_OK, 0))); 250 .WillOnce(Return(WriteResult(WRITE_STATUS_OK, 0)));
249 251
250 ProcessPacket(connection_id_, kRandomSequenceNumber); 252 ProcessPacket(connection_id_, kRandomSequenceNumber);
251 } 253 }
252 254
253 TEST_F(QuicTimeWaitListManagerTest, SendPublicResetWithExponentialBackOff) { 255 TEST_F(QuicTimeWaitListManagerTest, SendPublicResetWithExponentialBackOff) {
254 AddConnectionId(connection_id_); 256 AddConnectionId(connection_id_);
255 for (int sequence_number = 1; sequence_number < 101; ++sequence_number) { 257 for (int sequence_number = 1; sequence_number < 101; ++sequence_number) {
256 if ((sequence_number & (sequence_number - 1)) == 0) { 258 if ((sequence_number & (sequence_number - 1)) == 0) {
257 EXPECT_CALL(writer_, WritePacket(_, _, _, _)) 259 EXPECT_CALL(writer_, WritePacket(_, _, _, _, _))
258 .WillOnce(Return(WriteResult(WRITE_STATUS_OK, 1))); 260 .WillOnce(Return(WriteResult(WRITE_STATUS_OK, 1)));
259 } 261 }
260 ProcessPacket(connection_id_, sequence_number); 262 ProcessPacket(connection_id_, sequence_number);
261 // Send public reset with exponential back off. 263 // Send public reset with exponential back off.
262 if ((sequence_number & (sequence_number - 1)) == 0) { 264 if ((sequence_number & (sequence_number - 1)) == 0) {
263 EXPECT_TRUE(QuicTimeWaitListManagerPeer::ShouldSendResponse( 265 EXPECT_TRUE(QuicTimeWaitListManagerPeer::ShouldSendResponse(
264 &time_wait_list_manager_, sequence_number)); 266 &time_wait_list_manager_, sequence_number));
265 } else { 267 } else {
266 EXPECT_FALSE(QuicTimeWaitListManagerPeer::ShouldSendResponse( 268 EXPECT_FALSE(QuicTimeWaitListManagerPeer::ShouldSendResponse(
267 &time_wait_list_manager_, sequence_number)); 269 &time_wait_list_manager_, sequence_number));
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
314 316
315 TEST_F(QuicTimeWaitListManagerTest, SendQueuedPackets) { 317 TEST_F(QuicTimeWaitListManagerTest, SendQueuedPackets) {
316 QuicConnectionId connection_id = 1; 318 QuicConnectionId connection_id = 1;
317 AddConnectionId(connection_id); 319 AddConnectionId(connection_id);
318 QuicPacketSequenceNumber sequence_number = 234; 320 QuicPacketSequenceNumber sequence_number = 234;
319 scoped_ptr<QuicEncryptedPacket> packet(ConstructEncryptedPacket( 321 scoped_ptr<QuicEncryptedPacket> packet(ConstructEncryptedPacket(
320 ENCRYPTION_NONE, connection_id, sequence_number)); 322 ENCRYPTION_NONE, connection_id, sequence_number));
321 // Let first write through. 323 // Let first write through.
322 EXPECT_CALL(writer_, WritePacket(_, _, 324 EXPECT_CALL(writer_, WritePacket(_, _,
323 server_address_.address(), 325 server_address_.address(),
324 client_address_)) 326 client_address_,
327 _))
325 .With(Args<0, 1>(PublicResetPacketEq(connection_id, 328 .With(Args<0, 1>(PublicResetPacketEq(connection_id,
326 sequence_number))) 329 sequence_number)))
327 .WillOnce(Return(WriteResult(WRITE_STATUS_OK, packet->length()))); 330 .WillOnce(Return(WriteResult(WRITE_STATUS_OK, packet->length())));
328 ProcessPacket(connection_id, sequence_number); 331 ProcessPacket(connection_id, sequence_number);
329 332
330 // write block for the next packet. 333 // write block for the next packet.
331 EXPECT_CALL(writer_, WritePacket(_, _, 334 EXPECT_CALL(writer_, WritePacket(_, _,
332 server_address_.address(), 335 server_address_.address(),
333 client_address_)) 336 client_address_,
337 _))
334 .With(Args<0, 1>(PublicResetPacketEq(connection_id, 338 .With(Args<0, 1>(PublicResetPacketEq(connection_id,
335 sequence_number))) 339 sequence_number)))
336 .WillOnce(DoAll( 340 .WillOnce(DoAll(
337 Assign(&writer_is_blocked_, true), 341 Assign(&writer_is_blocked_, true),
338 Return(WriteResult(WRITE_STATUS_BLOCKED, EAGAIN)))); 342 Return(WriteResult(WRITE_STATUS_BLOCKED, EAGAIN))));
339 EXPECT_CALL(visitor_, OnWriteBlocked(&time_wait_list_manager_)); 343 EXPECT_CALL(visitor_, OnWriteBlocked(&time_wait_list_manager_));
340 ProcessPacket(connection_id, sequence_number); 344 ProcessPacket(connection_id, sequence_number);
341 // 3rd packet. No public reset should be sent; 345 // 3rd packet. No public reset should be sent;
342 ProcessPacket(connection_id, sequence_number); 346 ProcessPacket(connection_id, sequence_number);
343 347
344 // write packet should not be called since we are write blocked but the 348 // write packet should not be called since we are write blocked but the
345 // should be queued. 349 // should be queued.
346 QuicConnectionId other_connection_id = 2; 350 QuicConnectionId other_connection_id = 2;
347 AddConnectionId(other_connection_id); 351 AddConnectionId(other_connection_id);
348 QuicPacketSequenceNumber other_sequence_number = 23423; 352 QuicPacketSequenceNumber other_sequence_number = 23423;
349 scoped_ptr<QuicEncryptedPacket> other_packet( 353 scoped_ptr<QuicEncryptedPacket> other_packet(
350 ConstructEncryptedPacket( 354 ConstructEncryptedPacket(
351 ENCRYPTION_NONE, other_connection_id, other_sequence_number)); 355 ENCRYPTION_NONE, other_connection_id, other_sequence_number));
352 EXPECT_CALL(writer_, WritePacket(_, _, _, _)) 356 EXPECT_CALL(writer_, WritePacket(_, _, _, _, _))
353 .Times(0); 357 .Times(0);
354 EXPECT_CALL(visitor_, OnWriteBlocked(&time_wait_list_manager_)); 358 EXPECT_CALL(visitor_, OnWriteBlocked(&time_wait_list_manager_));
355 ProcessPacket(other_connection_id, other_sequence_number); 359 ProcessPacket(other_connection_id, other_sequence_number);
356 360
357 // Now expect all the write blocked public reset packets to be sent again. 361 // Now expect all the write blocked public reset packets to be sent again.
358 writer_is_blocked_ = false; 362 writer_is_blocked_ = false;
359 EXPECT_CALL(writer_, WritePacket(_, _, 363 EXPECT_CALL(writer_, WritePacket(_, _,
360 server_address_.address(), 364 server_address_.address(),
361 client_address_)) 365 client_address_,
366 _))
362 .With(Args<0, 1>(PublicResetPacketEq(connection_id, 367 .With(Args<0, 1>(PublicResetPacketEq(connection_id,
363 sequence_number))) 368 sequence_number)))
364 .WillOnce(Return(WriteResult(WRITE_STATUS_OK, packet->length()))); 369 .WillOnce(Return(WriteResult(WRITE_STATUS_OK, packet->length())));
365 EXPECT_CALL(writer_, WritePacket(_, _, 370 EXPECT_CALL(writer_, WritePacket(_, _,
366 server_address_.address(), 371 server_address_.address(),
367 client_address_)) 372 client_address_,
373 _))
368 .With(Args<0, 1>(PublicResetPacketEq(other_connection_id, 374 .With(Args<0, 1>(PublicResetPacketEq(other_connection_id,
369 other_sequence_number))) 375 other_sequence_number)))
370 .WillOnce(Return(WriteResult(WRITE_STATUS_OK, 376 .WillOnce(Return(WriteResult(WRITE_STATUS_OK,
371 other_packet->length()))); 377 other_packet->length())));
372 time_wait_list_manager_.OnCanWrite(); 378 time_wait_list_manager_.OnCanWrite();
373 } 379 }
374 380
375 TEST_F(QuicTimeWaitListManagerTest, GetQuicVersionFromMap) { 381 TEST_F(QuicTimeWaitListManagerTest, GetQuicVersionFromMap) {
376 const int kConnectionId1 = 123; 382 const int kConnectionId1 = 123;
377 const int kConnectionId2 = 456; 383 const int kConnectionId2 = 456;
(...skipping 23 matching lines...) Expand all
401 AddConnectionId( 407 AddConnectionId(
402 connection_id_, 408 connection_id_,
403 QuicVersionMax(), 409 QuicVersionMax(),
404 new QuicEncryptedPacket( 410 new QuicEncryptedPacket(
405 new char[kConnectionCloseLength], kConnectionCloseLength, true)); 411 new char[kConnectionCloseLength], kConnectionCloseLength, true));
406 EXPECT_TRUE(IsConnectionIdInTimeWait(connection_id_)); 412 EXPECT_TRUE(IsConnectionIdInTimeWait(connection_id_));
407 413
408 EXPECT_CALL(writer_, WritePacket(_, 414 EXPECT_CALL(writer_, WritePacket(_,
409 kConnectionCloseLength, 415 kConnectionCloseLength,
410 server_address_.address(), 416 server_address_.address(),
411 client_address_)) 417 client_address_,
418 _))
412 .WillOnce(Return(WriteResult(WRITE_STATUS_OK, 1))); 419 .WillOnce(Return(WriteResult(WRITE_STATUS_OK, 1)));
413 420
414 const int kRandomSequenceNumber = 1; 421 const int kRandomSequenceNumber = 1;
415 ProcessPacket(connection_id_, kRandomSequenceNumber); 422 ProcessPacket(connection_id_, kRandomSequenceNumber);
416 423
417 const QuicTime::Delta time_wait_period = 424 const QuicTime::Delta time_wait_period =
418 QuicTimeWaitListManagerPeer::time_wait_period(&time_wait_list_manager_); 425 QuicTimeWaitListManagerPeer::time_wait_period(&time_wait_list_manager_);
419 426
420 QuicTime::Delta offset = QuicTime::Delta::FromMicroseconds(39); 427 QuicTime::Delta offset = QuicTime::Delta::FromMicroseconds(39);
421 // Now set the current time as time_wait_period + offset usecs. 428 // Now set the current time as time_wait_period + offset usecs.
(...skipping 30 matching lines...) Expand all
452 EXPECT_CALL(epoll_server_, RegisterAlarm(_, _)); 459 EXPECT_CALL(epoll_server_, RegisterAlarm(_, _));
453 460
454 time_wait_list_manager_.CleanUpOldConnectionIds(); 461 time_wait_list_manager_.CleanUpOldConnectionIds();
455 EXPECT_FALSE(IsConnectionIdInTimeWait(kConnectionId1)); 462 EXPECT_FALSE(IsConnectionIdInTimeWait(kConnectionId1));
456 EXPECT_TRUE(IsConnectionIdInTimeWait(kConnectionId2)); 463 EXPECT_TRUE(IsConnectionIdInTimeWait(kConnectionId2));
457 } 464 }
458 } // namespace 465 } // namespace
459 } // namespace test 466 } // namespace test
460 } // namespace tools 467 } // namespace tools
461 } // namespace net 468 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698