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

Side by Side Diff: net/quic/core/quic_stream_test.cc

Issue 2580393003: Replace QuicAckListenerInterface* with scoped_refptr<QuicAckListenerInterface>. (Closed)
Patch Set: Created 4 years 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/core/quic_stream.cc ('k') | net/quic/quartc/quartc_stream_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/core/quic_stream.h" 5 #include "net/quic/core/quic_stream.h"
6 6
7 #include <memory> 7 #include <memory>
8 8
9 #include "base/memory/ptr_util.h" 9 #include "base/memory/ptr_util.h"
10 #include "net/quic/core/quic_connection.h" 10 #include "net/quic/core/quic_connection.h"
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after
136 return write_blocked_list_->HasWriteBlockedCryptoOrHeadersStream() || 136 return write_blocked_list_->HasWriteBlockedCryptoOrHeadersStream() ||
137 write_blocked_list_->HasWriteBlockedDataStreams(); 137 write_blocked_list_->HasWriteBlockedDataStreams();
138 } 138 }
139 139
140 QuicConsumedData CloseStreamOnWriteError( 140 QuicConsumedData CloseStreamOnWriteError(
141 QuicStream* /*stream*/, 141 QuicStream* /*stream*/,
142 QuicStreamId id, 142 QuicStreamId id,
143 QuicIOVector /*iov*/, 143 QuicIOVector /*iov*/,
144 QuicStreamOffset /*offset*/, 144 QuicStreamOffset /*offset*/,
145 bool /*fin*/, 145 bool /*fin*/,
146 QuicAckListenerInterface* /*ack_notifier_delegate*/) { 146 const scoped_refptr<
147 QuicAckListenerInterface>& /*ack_notifier_delegate*/) {
147 session_->CloseStream(id); 148 session_->CloseStream(id);
148 return QuicConsumedData(1, false); 149 return QuicConsumedData(1, false);
149 } 150 }
150 151
151 protected: 152 protected:
152 MockQuicConnectionHelper helper_; 153 MockQuicConnectionHelper helper_;
153 MockAlarmFactory alarm_factory_; 154 MockAlarmFactory alarm_factory_;
154 MockQuicConnection* connection_; 155 MockQuicConnection* connection_;
155 std::unique_ptr<MockQuicSession> session_; 156 std::unique_ptr<MockQuicSession> session_;
156 TestStream* stream_; 157 TestStream* stream_;
(...skipping 223 matching lines...) Expand 10 before | Expand all | Expand 10 after
380 stream_->OnWindowUpdateFrame(window_update_3); 381 stream_->OnWindowUpdateFrame(window_update_3);
381 stream_->OnWindowUpdateFrame(window_update_4); 382 stream_->OnWindowUpdateFrame(window_update_4);
382 EXPECT_EQ( 383 EXPECT_EQ(
383 window_update_3.byte_offset, 384 window_update_3.byte_offset,
384 QuicFlowControllerPeer::SendWindowOffset(stream_->flow_controller())); 385 QuicFlowControllerPeer::SendWindowOffset(stream_->flow_controller()));
385 } 386 }
386 387
387 // TODO(ianswett): It's not clear this method is still needed now that 388 // TODO(ianswett): It's not clear this method is still needed now that
388 // ProxyAckNotifierDelegate has been removed. 389 // ProxyAckNotifierDelegate has been removed.
389 void SaveAckListener(scoped_refptr<QuicAckListenerInterface>* listener_out, 390 void SaveAckListener(scoped_refptr<QuicAckListenerInterface>* listener_out,
390 QuicAckListenerInterface* listener) { 391 scoped_refptr<QuicAckListenerInterface> listener) {
391 *listener_out = (listener); 392 *listener_out = std::move(listener);
392 } 393 }
393 394
394 TEST_F(QuicStreamTest, WriteOrBufferDataWithQuicAckNotifier) { 395 TEST_F(QuicStreamTest, WriteOrBufferDataWithQuicAckNotifier) {
395 Initialize(kShouldProcessData); 396 Initialize(kShouldProcessData);
396 397
397 scoped_refptr<MockAckListener> delegate(new StrictMock<MockAckListener>); 398 scoped_refptr<MockAckListener> delegate(new StrictMock<MockAckListener>);
398 399
399 const int kDataSize = 16 * 1024; 400 const int kDataSize = 16 * 1024;
400 const string kData(kDataSize, 'a'); 401 const string kData(kDataSize, 'a');
401 402
402 const int kFirstWriteSize = 100; 403 const int kFirstWriteSize = 100;
403 const int kSecondWriteSize = 50; 404 const int kSecondWriteSize = 50;
404 const int kLastWriteSize = kDataSize - kFirstWriteSize - kSecondWriteSize; 405 const int kLastWriteSize = kDataSize - kFirstWriteSize - kSecondWriteSize;
405 406
406 // Set a large flow control send window so this doesn't interfere with test. 407 // Set a large flow control send window so this doesn't interfere with test.
407 stream_->flow_controller()->UpdateSendWindowOffset(kDataSize + 1); 408 stream_->flow_controller()->UpdateSendWindowOffset(kDataSize + 1);
408 session_->flow_controller()->UpdateSendWindowOffset(kDataSize + 1); 409 session_->flow_controller()->UpdateSendWindowOffset(kDataSize + 1);
409 410
410 scoped_refptr<QuicAckListenerInterface> ack_listener; 411 scoped_refptr<QuicAckListenerInterface> ack_listener;
411 412
412 EXPECT_CALL(*session_, WritevData(_, kTestStreamId, _, _, _, _)) 413 EXPECT_CALL(*session_, WritevData(_, kTestStreamId, _, _, _, _))
413 .WillOnce(DoAll( 414 .WillOnce(DoAll(
414 WithArgs<5>(Invoke(CreateFunctor(SaveAckListener, &ack_listener))), 415 WithArgs<5>(Invoke(CreateFunctor(SaveAckListener, &ack_listener))),
415 Return(QuicConsumedData(kFirstWriteSize, false)))); 416 Return(QuicConsumedData(kFirstWriteSize, false))));
416 stream_->WriteOrBufferData(kData, false, delegate.get()); 417 stream_->WriteOrBufferData(kData, false, delegate);
417 EXPECT_TRUE(HasWriteBlockedStreams()); 418 EXPECT_TRUE(HasWriteBlockedStreams());
418 419
419 EXPECT_CALL(*session_, 420 EXPECT_CALL(*session_,
420 WritevData(stream_, kTestStreamId, _, _, _, ack_listener.get())) 421 WritevData(stream_, kTestStreamId, _, _, _, ack_listener))
421 .WillOnce(Return(QuicConsumedData(kSecondWriteSize, false))); 422 .WillOnce(Return(QuicConsumedData(kSecondWriteSize, false)));
422 stream_->OnCanWrite(); 423 stream_->OnCanWrite();
423 424
424 // No ack expected for an empty write. 425 // No ack expected for an empty write.
425 EXPECT_CALL(*session_, 426 EXPECT_CALL(*session_,
426 WritevData(stream_, kTestStreamId, _, _, _, ack_listener.get())) 427 WritevData(stream_, kTestStreamId, _, _, _, ack_listener))
427 .WillOnce(Return(QuicConsumedData(0, false))); 428 .WillOnce(Return(QuicConsumedData(0, false)));
428 stream_->OnCanWrite(); 429 stream_->OnCanWrite();
429 430
430 EXPECT_CALL(*session_, 431 EXPECT_CALL(*session_,
431 WritevData(stream_, kTestStreamId, _, _, _, ack_listener.get())) 432 WritevData(stream_, kTestStreamId, _, _, _, ack_listener))
432 .WillOnce(Return(QuicConsumedData(kLastWriteSize, false))); 433 .WillOnce(Return(QuicConsumedData(kLastWriteSize, false)));
433 stream_->OnCanWrite(); 434 stream_->OnCanWrite();
434 } 435 }
435 436
436 // Verify delegate behavior when packets are acked before the WritevData call 437 // Verify delegate behavior when packets are acked before the WritevData call
437 // that sends out the last byte. 438 // that sends out the last byte.
438 TEST_F(QuicStreamTest, WriteOrBufferDataAckNotificationBeforeFlush) { 439 TEST_F(QuicStreamTest, WriteOrBufferDataAckNotificationBeforeFlush) {
439 Initialize(kShouldProcessData); 440 Initialize(kShouldProcessData);
440 441
441 scoped_refptr<MockAckListener> ack_listener(new StrictMock<MockAckListener>); 442 scoped_refptr<MockAckListener> ack_listener(new StrictMock<MockAckListener>);
442 443
443 const int kDataSize = 16 * 1024; 444 const int kDataSize = 16 * 1024;
444 const string kData(kDataSize, 'a'); 445 const string kData(kDataSize, 'a');
445 446
446 const int kInitialWriteSize = 100; 447 const int kInitialWriteSize = 100;
447 448
448 // Set a large flow control send window so this doesn't interfere with test. 449 // Set a large flow control send window so this doesn't interfere with test.
449 stream_->flow_controller()->UpdateSendWindowOffset(kDataSize + 1); 450 stream_->flow_controller()->UpdateSendWindowOffset(kDataSize + 1);
450 session_->flow_controller()->UpdateSendWindowOffset(kDataSize + 1); 451 session_->flow_controller()->UpdateSendWindowOffset(kDataSize + 1);
451 452
452 scoped_refptr<QuicAckListenerInterface> proxy_delegate; 453 scoped_refptr<QuicAckListenerInterface> proxy_delegate;
453 454
454 EXPECT_CALL(*session_, WritevData(stream_, kTestStreamId, _, _, _, _)) 455 EXPECT_CALL(*session_, WritevData(stream_, kTestStreamId, _, _, _, _))
455 .WillOnce(DoAll( 456 .WillOnce(DoAll(
456 WithArgs<5>(Invoke(CreateFunctor(SaveAckListener, &proxy_delegate))), 457 WithArgs<5>(Invoke(CreateFunctor(SaveAckListener, &proxy_delegate))),
457 Return(QuicConsumedData(kInitialWriteSize, false)))); 458 Return(QuicConsumedData(kInitialWriteSize, false))));
458 stream_->WriteOrBufferData(kData, false, ack_listener.get()); 459 stream_->WriteOrBufferData(kData, false, ack_listener);
459 EXPECT_TRUE(HasWriteBlockedStreams()); 460 EXPECT_TRUE(HasWriteBlockedStreams());
460 461
461 EXPECT_CALL(*session_, WritevData(stream_, kTestStreamId, _, _, _, _)) 462 EXPECT_CALL(*session_, WritevData(stream_, kTestStreamId, _, _, _, _))
462 .WillOnce(DoAll( 463 .WillOnce(DoAll(
463 WithArgs<5>(Invoke(CreateFunctor(SaveAckListener, &proxy_delegate))), 464 WithArgs<5>(Invoke(CreateFunctor(SaveAckListener, &proxy_delegate))),
464 Return(QuicConsumedData(kDataSize - kInitialWriteSize, false)))); 465 Return(QuicConsumedData(kDataSize - kInitialWriteSize, false))));
465 stream_->OnCanWrite(); 466 stream_->OnCanWrite();
466 } 467 }
467 468
468 // Verify delegate behavior when WriteOrBufferData does not buffer. 469 // Verify delegate behavior when WriteOrBufferData does not buffer.
469 TEST_F(QuicStreamTest, WriteAndBufferDataWithAckNotiferNoBuffer) { 470 TEST_F(QuicStreamTest, WriteAndBufferDataWithAckNotiferNoBuffer) {
470 Initialize(kShouldProcessData); 471 Initialize(kShouldProcessData);
471 472
472 scoped_refptr<MockAckListener> delegate(new StrictMock<MockAckListener>); 473 scoped_refptr<MockAckListener> delegate(new StrictMock<MockAckListener>);
473 474
474 scoped_refptr<QuicAckListenerInterface> proxy_delegate; 475 scoped_refptr<QuicAckListenerInterface> proxy_delegate;
475 476
476 EXPECT_CALL(*session_, WritevData(stream_, kTestStreamId, _, _, _, _)) 477 EXPECT_CALL(*session_, WritevData(stream_, kTestStreamId, _, _, _, _))
477 .WillOnce(DoAll( 478 .WillOnce(DoAll(
478 WithArgs<5>(Invoke(CreateFunctor(SaveAckListener, &proxy_delegate))), 479 WithArgs<5>(Invoke(CreateFunctor(SaveAckListener, &proxy_delegate))),
479 Return(QuicConsumedData(kDataLen, true)))); 480 Return(QuicConsumedData(kDataLen, true))));
480 stream_->WriteOrBufferData(kData1, true, delegate.get()); 481 stream_->WriteOrBufferData(kData1, true, delegate);
481 EXPECT_FALSE(HasWriteBlockedStreams()); 482 EXPECT_FALSE(HasWriteBlockedStreams());
482 } 483 }
483 484
484 // Verify delegate behavior when WriteOrBufferData buffers all the data. 485 // Verify delegate behavior when WriteOrBufferData buffers all the data.
485 TEST_F(QuicStreamTest, BufferOnWriteAndBufferDataWithAckNotifer) { 486 TEST_F(QuicStreamTest, BufferOnWriteAndBufferDataWithAckNotifer) {
486 Initialize(kShouldProcessData); 487 Initialize(kShouldProcessData);
487 488
488 scoped_refptr<MockAckListener> delegate(new StrictMock<MockAckListener>); 489 scoped_refptr<MockAckListener> delegate(new StrictMock<MockAckListener>);
489 490
490 scoped_refptr<QuicAckListenerInterface> proxy_delegate; 491 scoped_refptr<QuicAckListenerInterface> proxy_delegate;
491 492
492 EXPECT_CALL(*session_, WritevData(stream_, kTestStreamId, _, _, _, _)) 493 EXPECT_CALL(*session_, WritevData(stream_, kTestStreamId, _, _, _, _))
493 .WillOnce(Return(QuicConsumedData(0, false))); 494 .WillOnce(Return(QuicConsumedData(0, false)));
494 stream_->WriteOrBufferData(kData1, true, delegate.get()); 495 stream_->WriteOrBufferData(kData1, true, delegate);
495 EXPECT_TRUE(HasWriteBlockedStreams()); 496 EXPECT_TRUE(HasWriteBlockedStreams());
496 497
497 EXPECT_CALL(*session_, WritevData(stream_, kTestStreamId, _, _, _, _)) 498 EXPECT_CALL(*session_, WritevData(stream_, kTestStreamId, _, _, _, _))
498 .WillOnce(DoAll( 499 .WillOnce(DoAll(
499 WithArgs<5>(Invoke(CreateFunctor(SaveAckListener, &proxy_delegate))), 500 WithArgs<5>(Invoke(CreateFunctor(SaveAckListener, &proxy_delegate))),
500 Return(QuicConsumedData(kDataLen, true)))); 501 Return(QuicConsumedData(kDataLen, true))));
501 stream_->OnCanWrite(); 502 stream_->OnCanWrite();
502 } 503 }
503 504
504 // Verify delegate behavior when WriteOrBufferData when the FIN is 505 // Verify delegate behavior when WriteOrBufferData when the FIN is
505 // sent out in a different packet. 506 // sent out in a different packet.
506 TEST_F(QuicStreamTest, WriteAndBufferDataWithAckNotiferOnlyFinRemains) { 507 TEST_F(QuicStreamTest, WriteAndBufferDataWithAckNotiferOnlyFinRemains) {
507 Initialize(kShouldProcessData); 508 Initialize(kShouldProcessData);
508 509
509 scoped_refptr<MockAckListener> delegate(new StrictMock<MockAckListener>); 510 scoped_refptr<MockAckListener> delegate(new StrictMock<MockAckListener>);
510 511
511 scoped_refptr<QuicAckListenerInterface> proxy_delegate; 512 scoped_refptr<QuicAckListenerInterface> proxy_delegate;
512 513
513 EXPECT_CALL(*session_, WritevData(stream_, kTestStreamId, _, _, _, _)) 514 EXPECT_CALL(*session_, WritevData(stream_, kTestStreamId, _, _, _, _))
514 .WillOnce(DoAll( 515 .WillOnce(DoAll(
515 WithArgs<5>(Invoke(CreateFunctor(SaveAckListener, &proxy_delegate))), 516 WithArgs<5>(Invoke(CreateFunctor(SaveAckListener, &proxy_delegate))),
516 Return(QuicConsumedData(kDataLen, false)))); 517 Return(QuicConsumedData(kDataLen, false))));
517 stream_->WriteOrBufferData(kData1, true, delegate.get()); 518 stream_->WriteOrBufferData(kData1, true, delegate);
518 EXPECT_TRUE(HasWriteBlockedStreams()); 519 EXPECT_TRUE(HasWriteBlockedStreams());
519 520
520 EXPECT_CALL(*session_, WritevData(stream_, kTestStreamId, _, _, _, _)) 521 EXPECT_CALL(*session_, WritevData(stream_, kTestStreamId, _, _, _, _))
521 .WillOnce(DoAll( 522 .WillOnce(DoAll(
522 WithArgs<5>(Invoke(CreateFunctor(SaveAckListener, &proxy_delegate))), 523 WithArgs<5>(Invoke(CreateFunctor(SaveAckListener, &proxy_delegate))),
523 Return(QuicConsumedData(0, true)))); 524 Return(QuicConsumedData(0, true))));
524 stream_->OnCanWrite(); 525 stream_->OnCanWrite();
525 } 526 }
526 527
527 // Verify that when we receive a packet which violates flow control (i.e. sends 528 // Verify that when we receive a packet which violates flow control (i.e. sends
(...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after
705 // Receive remaining data and FIN for the request. 706 // Receive remaining data and FIN for the request.
706 QuicStreamFrame frame2(stream_->id(), true, 0, StringPiece("End")); 707 QuicStreamFrame frame2(stream_->id(), true, 0, StringPiece("End"));
707 stream_->OnStreamFrame(frame2); 708 stream_->OnStreamFrame(frame2);
708 EXPECT_TRUE(stream_->fin_received()); 709 EXPECT_TRUE(stream_->fin_received());
709 EXPECT_TRUE(stream_->HasFinalReceivedByteOffset()); 710 EXPECT_TRUE(stream_->HasFinalReceivedByteOffset());
710 } 711 }
711 712
712 } // namespace 713 } // namespace
713 } // namespace test 714 } // namespace test
714 } // namespace net 715 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/core/quic_stream.cc ('k') | net/quic/quartc/quartc_stream_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698