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

Side by Side Diff: net/quic/quic_session_test.cc

Issue 1680643002: Refactor gmock_mutant.h (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 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
« no previous file with comments | « net/quic/quic_chromium_client_stream_test.cc ('k') | net/quic/quic_stream_sequencer_test.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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/quic/quic_session.h" 5 #include "net/quic/quic_session.h"
6 6
7 #include <set> 7 #include <set>
8 8
9 #include "base/containers/hash_tables.h" 9 #include "base/containers/hash_tables.h"
10 #include "base/rand_util.h" 10 #include "base/rand_util.h"
(...skipping 423 matching lines...) Expand 10 before | Expand all | Expand 10 after
434 434
435 StreamBlocker stream2_blocker(&session_, stream2->id()); 435 StreamBlocker stream2_blocker(&session_, stream2->id());
436 StreamBlocker stream4_blocker(&session_, stream4->id()); 436 StreamBlocker stream4_blocker(&session_, stream4->id());
437 StreamBlocker stream6_blocker(&session_, stream6->id()); 437 StreamBlocker stream6_blocker(&session_, stream6->id());
438 // With two sessions blocked, we should get two write calls. They should both 438 // With two sessions blocked, we should get two write calls. They should both
439 // go to the first stream as it will only write 6k and mark itself blocked 439 // go to the first stream as it will only write 6k and mark itself blocked
440 // again. 440 // again.
441 InSequence s; 441 InSequence s;
442 EXPECT_CALL(*stream2, OnCanWrite()) 442 EXPECT_CALL(*stream2, OnCanWrite())
443 .WillOnce(DoAll(testing::IgnoreResult(Invoke(CreateFunctor( 443 .WillOnce(DoAll(testing::IgnoreResult(Invoke(CreateFunctor(
444 &session_, &TestSession::SendLargeFakeData, 444 &TestSession::SendLargeFakeData,
445 base::Unretained(&session_),
445 stream2->id(), 6000))), 446 stream2->id(), 6000))),
446 Invoke(&stream2_blocker, 447 Invoke(&stream2_blocker,
447 &StreamBlocker::MarkConnectionLevelWriteBlocked))); 448 &StreamBlocker::MarkConnectionLevelWriteBlocked)));
448 EXPECT_CALL(*stream2, OnCanWrite()) 449 EXPECT_CALL(*stream2, OnCanWrite())
449 .WillOnce(DoAll(testing::IgnoreResult(Invoke(CreateFunctor( 450 .WillOnce(DoAll(testing::IgnoreResult(Invoke(CreateFunctor(
450 &session_, &TestSession::SendLargeFakeData, 451 &TestSession::SendLargeFakeData,
452 base::Unretained(&session_),
451 stream2->id(), 6000))), 453 stream2->id(), 6000))),
452 Invoke(&stream2_blocker, 454 Invoke(&stream2_blocker,
453 &StreamBlocker::MarkConnectionLevelWriteBlocked))); 455 &StreamBlocker::MarkConnectionLevelWriteBlocked)));
454 session_.OnCanWrite(); 456 session_.OnCanWrite();
455 457
456 // We should get one more call for stream2, at which point it has used its 458 // We should get one more call for stream2, at which point it has used its
457 // write quota and we move over to stream 4. 459 // write quota and we move over to stream 4.
458 EXPECT_CALL(*stream2, OnCanWrite()) 460 EXPECT_CALL(*stream2, OnCanWrite())
459 .WillOnce(DoAll(testing::IgnoreResult(Invoke(CreateFunctor( 461 .WillOnce(DoAll(testing::IgnoreResult(Invoke(CreateFunctor(
460 &session_, &TestSession::SendLargeFakeData, 462 &TestSession::SendLargeFakeData,
463 base::Unretained(&session_),
461 stream2->id(), 6000))), 464 stream2->id(), 6000))),
462 Invoke(&stream2_blocker, 465 Invoke(&stream2_blocker,
463 &StreamBlocker::MarkConnectionLevelWriteBlocked))); 466 &StreamBlocker::MarkConnectionLevelWriteBlocked)));
464 EXPECT_CALL(*stream4, OnCanWrite()) 467 EXPECT_CALL(*stream4, OnCanWrite())
465 .WillOnce(DoAll(testing::IgnoreResult(Invoke(CreateFunctor( 468 .WillOnce(DoAll(testing::IgnoreResult(Invoke(CreateFunctor(
466 &session_, &TestSession::SendLargeFakeData, 469 &TestSession::SendLargeFakeData,
470 base::Unretained(&session_),
467 stream4->id(), 6000))), 471 stream4->id(), 6000))),
468 Invoke(&stream4_blocker, 472 Invoke(&stream4_blocker,
469 &StreamBlocker::MarkConnectionLevelWriteBlocked))); 473 &StreamBlocker::MarkConnectionLevelWriteBlocked)));
470 session_.OnCanWrite(); 474 session_.OnCanWrite();
471 475
472 // Now let stream 4 do the 2nd of its 3 writes, but add a block for a high 476 // Now let stream 4 do the 2nd of its 3 writes, but add a block for a high
473 // priority stream 6. 4 should be preempted. 6 will write but *not* block so 477 // priority stream 6. 4 should be preempted. 6 will write but *not* block so
474 // will cede back to 4. 478 // will cede back to 4.
475 stream6->SetPriority(kHighestPriority); 479 stream6->SetPriority(kHighestPriority);
476 EXPECT_CALL(*stream4, OnCanWrite()) 480 EXPECT_CALL(*stream4, OnCanWrite())
477 .WillOnce(DoAll(testing::IgnoreResult(Invoke(CreateFunctor( 481 .WillOnce(DoAll(testing::IgnoreResult(Invoke(CreateFunctor(
478 &session_, &TestSession::SendLargeFakeData, 482 &TestSession::SendLargeFakeData,
483 base::Unretained(&session_),
479 stream4->id(), 6000))), 484 stream4->id(), 6000))),
480 Invoke(&stream4_blocker, 485 Invoke(&stream4_blocker,
481 &StreamBlocker::MarkConnectionLevelWriteBlocked), 486 &StreamBlocker::MarkConnectionLevelWriteBlocked),
482 Invoke(&stream6_blocker, 487 Invoke(&stream6_blocker,
483 &StreamBlocker::MarkHighPriorityWriteBlocked))); 488 &StreamBlocker::MarkHighPriorityWriteBlocked)));
484 EXPECT_CALL(*stream6, OnCanWrite()) 489 EXPECT_CALL(*stream6, OnCanWrite())
485 .WillOnce(testing::IgnoreResult(Invoke(CreateFunctor( 490 .WillOnce(testing::IgnoreResult(Invoke(CreateFunctor(
486 &session_, &TestSession::SendLargeFakeData, stream4->id(), 6000)))); 491 &TestSession::SendLargeFakeData,
492 base::Unretained(&session_), stream4->id(), 6000))));
487 session_.OnCanWrite(); 493 session_.OnCanWrite();
488 494
489 // Stream4 alread did 6k worth of writes, so after doing another 12k it should 495 // Stream4 alread did 6k worth of writes, so after doing another 12k it should
490 // cede and 2 should resume. 496 // cede and 2 should resume.
491 EXPECT_CALL(*stream4, OnCanWrite()) 497 EXPECT_CALL(*stream4, OnCanWrite())
492 .WillOnce(DoAll(testing::IgnoreResult(Invoke(CreateFunctor( 498 .WillOnce(DoAll(testing::IgnoreResult(Invoke(CreateFunctor(
493 &session_, &TestSession::SendLargeFakeData, 499 &TestSession::SendLargeFakeData,
500 base::Unretained(&session_),
494 stream4->id(), 12000))), 501 stream4->id(), 12000))),
495 Invoke(&stream4_blocker, 502 Invoke(&stream4_blocker,
496 &StreamBlocker::MarkConnectionLevelWriteBlocked))); 503 &StreamBlocker::MarkConnectionLevelWriteBlocked)));
497 EXPECT_CALL(*stream2, OnCanWrite()) 504 EXPECT_CALL(*stream2, OnCanWrite())
498 .WillOnce(DoAll(testing::IgnoreResult(Invoke(CreateFunctor( 505 .WillOnce(DoAll(testing::IgnoreResult(Invoke(CreateFunctor(
499 &session_, &TestSession::SendLargeFakeData, 506 &TestSession::SendLargeFakeData,
507 base::Unretained(&session_),
500 stream2->id(), 6000))), 508 stream2->id(), 6000))),
501 Invoke(&stream2_blocker, 509 Invoke(&stream2_blocker,
502 &StreamBlocker::MarkConnectionLevelWriteBlocked))); 510 &StreamBlocker::MarkConnectionLevelWriteBlocked)));
503 session_.OnCanWrite(); 511 session_.OnCanWrite();
504 } 512 }
505 513
506 TEST_P(QuicSessionTestServer, OnCanWriteBundlesStreams) { 514 TEST_P(QuicSessionTestServer, OnCanWriteBundlesStreams) {
507 // Encryption needs to be established before data can be sent. 515 // Encryption needs to be established before data can be sent.
508 CryptoHandshakeMessage msg; 516 CryptoHandshakeMessage msg;
509 session_.GetCryptoStream()->OnHandshakeMessage(msg); 517 session_.GetCryptoStream()->OnHandshakeMessage(msg);
510 518
511 // Drive congestion control manually. 519 // Drive congestion control manually.
512 MockSendAlgorithm* send_algorithm = new StrictMock<MockSendAlgorithm>; 520 MockSendAlgorithm* send_algorithm = new StrictMock<MockSendAlgorithm>;
513 QuicConnectionPeer::SetSendAlgorithm(session_.connection(), send_algorithm); 521 QuicConnectionPeer::SetSendAlgorithm(session_.connection(), send_algorithm);
514 522
515 TestStream* stream2 = session_.CreateOutgoingDynamicStream(kDefaultPriority); 523 TestStream* stream2 = session_.CreateOutgoingDynamicStream(kDefaultPriority);
516 TestStream* stream4 = session_.CreateOutgoingDynamicStream(kDefaultPriority); 524 TestStream* stream4 = session_.CreateOutgoingDynamicStream(kDefaultPriority);
517 TestStream* stream6 = session_.CreateOutgoingDynamicStream(kDefaultPriority); 525 TestStream* stream6 = session_.CreateOutgoingDynamicStream(kDefaultPriority);
518 526
519 session_.MarkConnectionLevelWriteBlocked(stream2->id(), kDefaultPriority); 527 session_.MarkConnectionLevelWriteBlocked(stream2->id(), kDefaultPriority);
520 session_.MarkConnectionLevelWriteBlocked(stream6->id(), kDefaultPriority); 528 session_.MarkConnectionLevelWriteBlocked(stream6->id(), kDefaultPriority);
521 session_.MarkConnectionLevelWriteBlocked(stream4->id(), kDefaultPriority); 529 session_.MarkConnectionLevelWriteBlocked(stream4->id(), kDefaultPriority);
522 530
523 EXPECT_CALL(*send_algorithm, TimeUntilSend(_, _, _)) 531 EXPECT_CALL(*send_algorithm, TimeUntilSend(_, _, _))
524 .WillRepeatedly(Return(QuicTime::Delta::Zero())); 532 .WillRepeatedly(Return(QuicTime::Delta::Zero()));
525 EXPECT_CALL(*send_algorithm, GetCongestionWindow()) 533 EXPECT_CALL(*send_algorithm, GetCongestionWindow())
526 .WillRepeatedly(Return(kMaxPacketSize * 10)); 534 .WillRepeatedly(Return(kMaxPacketSize * 10));
527 EXPECT_CALL(*stream2, OnCanWrite()) 535 EXPECT_CALL(*stream2, OnCanWrite())
528 .WillOnce(testing::IgnoreResult(Invoke(CreateFunctor( 536 .WillOnce(testing::IgnoreResult(Invoke(CreateFunctor(
529 &session_, &TestSession::SendStreamData, stream2->id())))); 537 &TestSession::SendStreamData,
538 base::Unretained(&session_), stream2->id()))));
530 EXPECT_CALL(*stream4, OnCanWrite()) 539 EXPECT_CALL(*stream4, OnCanWrite())
531 .WillOnce(testing::IgnoreResult(Invoke(CreateFunctor( 540 .WillOnce(testing::IgnoreResult(Invoke(CreateFunctor(
532 &session_, &TestSession::SendStreamData, stream4->id())))); 541 &TestSession::SendStreamData,
542 base::Unretained(&session_),
543 stream4->id()))));
533 EXPECT_CALL(*stream6, OnCanWrite()) 544 EXPECT_CALL(*stream6, OnCanWrite())
534 .WillOnce(testing::IgnoreResult(Invoke(CreateFunctor( 545 .WillOnce(testing::IgnoreResult(Invoke(CreateFunctor(
535 &session_, &TestSession::SendStreamData, stream6->id())))); 546 &TestSession::SendStreamData,
547 base::Unretained(&session_),
548 stream6->id()))));
536 549
537 // Expect that we only send one packet, the writes from different streams 550 // Expect that we only send one packet, the writes from different streams
538 // should be bundled together. 551 // should be bundled together.
539 MockPacketWriter* writer = static_cast<MockPacketWriter*>( 552 MockPacketWriter* writer = static_cast<MockPacketWriter*>(
540 QuicConnectionPeer::GetWriter(session_.connection())); 553 QuicConnectionPeer::GetWriter(session_.connection()));
541 EXPECT_CALL(*writer, WritePacket(_, _, _, _, _)) 554 EXPECT_CALL(*writer, WritePacket(_, _, _, _, _))
542 .WillOnce(Return(WriteResult(WRITE_STATUS_OK, 0))); 555 .WillOnce(Return(WriteResult(WRITE_STATUS_OK, 0)));
543 EXPECT_CALL(*send_algorithm, OnPacketSent(_, _, _, _, _)); 556 EXPECT_CALL(*send_algorithm, OnPacketSent(_, _, _, _, _));
544 session_.OnCanWrite(); 557 session_.OnCanWrite();
545 EXPECT_FALSE(session_.WillingAndAbleToWrite()); 558 EXPECT_FALSE(session_.WillingAndAbleToWrite());
(...skipping 690 matching lines...) Expand 10 before | Expand all | Expand 10 after
1236 session_.max_open_incoming_streams()); 1249 session_.max_open_incoming_streams());
1237 } 1250 }
1238 1251
1239 EXPECT_EQ(session_.max_open_outgoing_streams(), 1252 EXPECT_EQ(session_.max_open_outgoing_streams(),
1240 kDefaultMaxStreamsPerConnection); 1253 kDefaultMaxStreamsPerConnection);
1241 } 1254 }
1242 1255
1243 } // namespace 1256 } // namespace
1244 } // namespace test 1257 } // namespace test
1245 } // namespace net 1258 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/quic_chromium_client_stream_test.cc ('k') | net/quic/quic_stream_sequencer_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698