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

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

Issue 2589983002: Create a QUIC wrapper around scoped_refptr. (Closed)
Patch Set: rm = nullptr 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/platform/api/quic_reference_counted.h » ('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 const scoped_refptr< 146 const QuicReferenceCountedPointer<
147 QuicAckListenerInterface>& /*ack_notifier_delegate*/) { 147 QuicAckListenerInterface>& /*ack_notifier_delegate*/) {
148 session_->CloseStream(id); 148 session_->CloseStream(id);
149 return QuicConsumedData(1, false); 149 return QuicConsumedData(1, false);
150 } 150 }
151 151
152 protected: 152 protected:
153 MockQuicConnectionHelper helper_; 153 MockQuicConnectionHelper helper_;
154 MockAlarmFactory alarm_factory_; 154 MockAlarmFactory alarm_factory_;
155 MockQuicConnection* connection_; 155 MockQuicConnection* connection_;
156 std::unique_ptr<MockQuicSession> session_; 156 std::unique_ptr<MockQuicSession> session_;
(...skipping 223 matching lines...) Expand 10 before | Expand all | Expand 10 after
380 stream_->OnWindowUpdateFrame(window_update_2); 380 stream_->OnWindowUpdateFrame(window_update_2);
381 stream_->OnWindowUpdateFrame(window_update_3); 381 stream_->OnWindowUpdateFrame(window_update_3);
382 stream_->OnWindowUpdateFrame(window_update_4); 382 stream_->OnWindowUpdateFrame(window_update_4);
383 EXPECT_EQ( 383 EXPECT_EQ(
384 window_update_3.byte_offset, 384 window_update_3.byte_offset,
385 QuicFlowControllerPeer::SendWindowOffset(stream_->flow_controller())); 385 QuicFlowControllerPeer::SendWindowOffset(stream_->flow_controller()));
386 } 386 }
387 387
388 // 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
389 // ProxyAckNotifierDelegate has been removed. 389 // ProxyAckNotifierDelegate has been removed.
390 void SaveAckListener(scoped_refptr<QuicAckListenerInterface>* listener_out, 390 void SaveAckListener(
391 scoped_refptr<QuicAckListenerInterface> listener) { 391 QuicReferenceCountedPointer<QuicAckListenerInterface>* listener_out,
392 QuicReferenceCountedPointer<QuicAckListenerInterface> listener) {
392 *listener_out = std::move(listener); 393 *listener_out = std::move(listener);
393 } 394 }
394 395
395 TEST_F(QuicStreamTest, WriteOrBufferDataWithQuicAckNotifier) { 396 TEST_F(QuicStreamTest, WriteOrBufferDataWithQuicAckNotifier) {
396 Initialize(kShouldProcessData); 397 Initialize(kShouldProcessData);
397 398
398 scoped_refptr<MockAckListener> delegate(new StrictMock<MockAckListener>); 399 QuicReferenceCountedPointer<MockAckListener> delegate(
400 new StrictMock<MockAckListener>);
399 401
400 const int kDataSize = 16 * 1024; 402 const int kDataSize = 16 * 1024;
401 const string kData(kDataSize, 'a'); 403 const string kData(kDataSize, 'a');
402 404
403 const int kFirstWriteSize = 100; 405 const int kFirstWriteSize = 100;
404 const int kSecondWriteSize = 50; 406 const int kSecondWriteSize = 50;
405 const int kLastWriteSize = kDataSize - kFirstWriteSize - kSecondWriteSize; 407 const int kLastWriteSize = kDataSize - kFirstWriteSize - kSecondWriteSize;
406 408
407 // Set a large flow control send window so this doesn't interfere with test. 409 // Set a large flow control send window so this doesn't interfere with test.
408 stream_->flow_controller()->UpdateSendWindowOffset(kDataSize + 1); 410 stream_->flow_controller()->UpdateSendWindowOffset(kDataSize + 1);
409 session_->flow_controller()->UpdateSendWindowOffset(kDataSize + 1); 411 session_->flow_controller()->UpdateSendWindowOffset(kDataSize + 1);
410 412
411 scoped_refptr<QuicAckListenerInterface> ack_listener; 413 QuicReferenceCountedPointer<QuicAckListenerInterface> ack_listener;
412 414
413 EXPECT_CALL(*session_, WritevData(_, kTestStreamId, _, _, _, _)) 415 EXPECT_CALL(*session_, WritevData(_, kTestStreamId, _, _, _, _))
414 .WillOnce(DoAll( 416 .WillOnce(DoAll(
415 WithArgs<5>(Invoke(CreateFunctor(SaveAckListener, &ack_listener))), 417 WithArgs<5>(Invoke(CreateFunctor(SaveAckListener, &ack_listener))),
416 Return(QuicConsumedData(kFirstWriteSize, false)))); 418 Return(QuicConsumedData(kFirstWriteSize, false))));
417 stream_->WriteOrBufferData(kData, false, delegate); 419 stream_->WriteOrBufferData(kData, false, delegate);
418 EXPECT_TRUE(HasWriteBlockedStreams()); 420 EXPECT_TRUE(HasWriteBlockedStreams());
419 421
420 EXPECT_CALL(*session_, 422 EXPECT_CALL(*session_,
421 WritevData(stream_, kTestStreamId, _, _, _, ack_listener)) 423 WritevData(stream_, kTestStreamId, _, _, _, ack_listener))
(...skipping 10 matching lines...) Expand all
432 WritevData(stream_, kTestStreamId, _, _, _, ack_listener)) 434 WritevData(stream_, kTestStreamId, _, _, _, ack_listener))
433 .WillOnce(Return(QuicConsumedData(kLastWriteSize, false))); 435 .WillOnce(Return(QuicConsumedData(kLastWriteSize, false)));
434 stream_->OnCanWrite(); 436 stream_->OnCanWrite();
435 } 437 }
436 438
437 // Verify delegate behavior when packets are acked before the WritevData call 439 // Verify delegate behavior when packets are acked before the WritevData call
438 // that sends out the last byte. 440 // that sends out the last byte.
439 TEST_F(QuicStreamTest, WriteOrBufferDataAckNotificationBeforeFlush) { 441 TEST_F(QuicStreamTest, WriteOrBufferDataAckNotificationBeforeFlush) {
440 Initialize(kShouldProcessData); 442 Initialize(kShouldProcessData);
441 443
442 scoped_refptr<MockAckListener> ack_listener(new StrictMock<MockAckListener>); 444 QuicReferenceCountedPointer<MockAckListener> ack_listener(
445 new StrictMock<MockAckListener>);
443 446
444 const int kDataSize = 16 * 1024; 447 const int kDataSize = 16 * 1024;
445 const string kData(kDataSize, 'a'); 448 const string kData(kDataSize, 'a');
446 449
447 const int kInitialWriteSize = 100; 450 const int kInitialWriteSize = 100;
448 451
449 // Set a large flow control send window so this doesn't interfere with test. 452 // Set a large flow control send window so this doesn't interfere with test.
450 stream_->flow_controller()->UpdateSendWindowOffset(kDataSize + 1); 453 stream_->flow_controller()->UpdateSendWindowOffset(kDataSize + 1);
451 session_->flow_controller()->UpdateSendWindowOffset(kDataSize + 1); 454 session_->flow_controller()->UpdateSendWindowOffset(kDataSize + 1);
452 455
453 scoped_refptr<QuicAckListenerInterface> proxy_delegate; 456 QuicReferenceCountedPointer<QuicAckListenerInterface> proxy_delegate;
454 457
455 EXPECT_CALL(*session_, WritevData(stream_, kTestStreamId, _, _, _, _)) 458 EXPECT_CALL(*session_, WritevData(stream_, kTestStreamId, _, _, _, _))
456 .WillOnce(DoAll( 459 .WillOnce(DoAll(
457 WithArgs<5>(Invoke(CreateFunctor(SaveAckListener, &proxy_delegate))), 460 WithArgs<5>(Invoke(CreateFunctor(SaveAckListener, &proxy_delegate))),
458 Return(QuicConsumedData(kInitialWriteSize, false)))); 461 Return(QuicConsumedData(kInitialWriteSize, false))));
459 stream_->WriteOrBufferData(kData, false, ack_listener); 462 stream_->WriteOrBufferData(kData, false, ack_listener);
460 EXPECT_TRUE(HasWriteBlockedStreams()); 463 EXPECT_TRUE(HasWriteBlockedStreams());
461 464
462 EXPECT_CALL(*session_, WritevData(stream_, kTestStreamId, _, _, _, _)) 465 EXPECT_CALL(*session_, WritevData(stream_, kTestStreamId, _, _, _, _))
463 .WillOnce(DoAll( 466 .WillOnce(DoAll(
464 WithArgs<5>(Invoke(CreateFunctor(SaveAckListener, &proxy_delegate))), 467 WithArgs<5>(Invoke(CreateFunctor(SaveAckListener, &proxy_delegate))),
465 Return(QuicConsumedData(kDataSize - kInitialWriteSize, false)))); 468 Return(QuicConsumedData(kDataSize - kInitialWriteSize, false))));
466 stream_->OnCanWrite(); 469 stream_->OnCanWrite();
467 } 470 }
468 471
469 // Verify delegate behavior when WriteOrBufferData does not buffer. 472 // Verify delegate behavior when WriteOrBufferData does not buffer.
470 TEST_F(QuicStreamTest, WriteAndBufferDataWithAckNotiferNoBuffer) { 473 TEST_F(QuicStreamTest, WriteAndBufferDataWithAckNotiferNoBuffer) {
471 Initialize(kShouldProcessData); 474 Initialize(kShouldProcessData);
472 475
473 scoped_refptr<MockAckListener> delegate(new StrictMock<MockAckListener>); 476 QuicReferenceCountedPointer<MockAckListener> delegate(
477 new StrictMock<MockAckListener>);
474 478
475 scoped_refptr<QuicAckListenerInterface> proxy_delegate; 479 QuicReferenceCountedPointer<QuicAckListenerInterface> proxy_delegate;
476 480
477 EXPECT_CALL(*session_, WritevData(stream_, kTestStreamId, _, _, _, _)) 481 EXPECT_CALL(*session_, WritevData(stream_, kTestStreamId, _, _, _, _))
478 .WillOnce(DoAll( 482 .WillOnce(DoAll(
479 WithArgs<5>(Invoke(CreateFunctor(SaveAckListener, &proxy_delegate))), 483 WithArgs<5>(Invoke(CreateFunctor(SaveAckListener, &proxy_delegate))),
480 Return(QuicConsumedData(kDataLen, true)))); 484 Return(QuicConsumedData(kDataLen, true))));
481 stream_->WriteOrBufferData(kData1, true, delegate); 485 stream_->WriteOrBufferData(kData1, true, delegate);
482 EXPECT_FALSE(HasWriteBlockedStreams()); 486 EXPECT_FALSE(HasWriteBlockedStreams());
483 } 487 }
484 488
485 // Verify delegate behavior when WriteOrBufferData buffers all the data. 489 // Verify delegate behavior when WriteOrBufferData buffers all the data.
486 TEST_F(QuicStreamTest, BufferOnWriteAndBufferDataWithAckNotifer) { 490 TEST_F(QuicStreamTest, BufferOnWriteAndBufferDataWithAckNotifer) {
487 Initialize(kShouldProcessData); 491 Initialize(kShouldProcessData);
488 492
489 scoped_refptr<MockAckListener> delegate(new StrictMock<MockAckListener>); 493 QuicReferenceCountedPointer<MockAckListener> delegate(
494 new StrictMock<MockAckListener>);
490 495
491 scoped_refptr<QuicAckListenerInterface> proxy_delegate; 496 QuicReferenceCountedPointer<QuicAckListenerInterface> proxy_delegate;
492 497
493 EXPECT_CALL(*session_, WritevData(stream_, kTestStreamId, _, _, _, _)) 498 EXPECT_CALL(*session_, WritevData(stream_, kTestStreamId, _, _, _, _))
494 .WillOnce(Return(QuicConsumedData(0, false))); 499 .WillOnce(Return(QuicConsumedData(0, false)));
495 stream_->WriteOrBufferData(kData1, true, delegate); 500 stream_->WriteOrBufferData(kData1, true, delegate);
496 EXPECT_TRUE(HasWriteBlockedStreams()); 501 EXPECT_TRUE(HasWriteBlockedStreams());
497 502
498 EXPECT_CALL(*session_, WritevData(stream_, kTestStreamId, _, _, _, _)) 503 EXPECT_CALL(*session_, WritevData(stream_, kTestStreamId, _, _, _, _))
499 .WillOnce(DoAll( 504 .WillOnce(DoAll(
500 WithArgs<5>(Invoke(CreateFunctor(SaveAckListener, &proxy_delegate))), 505 WithArgs<5>(Invoke(CreateFunctor(SaveAckListener, &proxy_delegate))),
501 Return(QuicConsumedData(kDataLen, true)))); 506 Return(QuicConsumedData(kDataLen, true))));
502 stream_->OnCanWrite(); 507 stream_->OnCanWrite();
503 } 508 }
504 509
505 // Verify delegate behavior when WriteOrBufferData when the FIN is 510 // Verify delegate behavior when WriteOrBufferData when the FIN is
506 // sent out in a different packet. 511 // sent out in a different packet.
507 TEST_F(QuicStreamTest, WriteAndBufferDataWithAckNotiferOnlyFinRemains) { 512 TEST_F(QuicStreamTest, WriteAndBufferDataWithAckNotiferOnlyFinRemains) {
508 Initialize(kShouldProcessData); 513 Initialize(kShouldProcessData);
509 514
510 scoped_refptr<MockAckListener> delegate(new StrictMock<MockAckListener>); 515 QuicReferenceCountedPointer<MockAckListener> delegate(
516 new StrictMock<MockAckListener>);
511 517
512 scoped_refptr<QuicAckListenerInterface> proxy_delegate; 518 QuicReferenceCountedPointer<QuicAckListenerInterface> proxy_delegate;
513 519
514 EXPECT_CALL(*session_, WritevData(stream_, kTestStreamId, _, _, _, _)) 520 EXPECT_CALL(*session_, WritevData(stream_, kTestStreamId, _, _, _, _))
515 .WillOnce(DoAll( 521 .WillOnce(DoAll(
516 WithArgs<5>(Invoke(CreateFunctor(SaveAckListener, &proxy_delegate))), 522 WithArgs<5>(Invoke(CreateFunctor(SaveAckListener, &proxy_delegate))),
517 Return(QuicConsumedData(kDataLen, false)))); 523 Return(QuicConsumedData(kDataLen, false))));
518 stream_->WriteOrBufferData(kData1, true, delegate); 524 stream_->WriteOrBufferData(kData1, true, delegate);
519 EXPECT_TRUE(HasWriteBlockedStreams()); 525 EXPECT_TRUE(HasWriteBlockedStreams());
520 526
521 EXPECT_CALL(*session_, WritevData(stream_, kTestStreamId, _, _, _, _)) 527 EXPECT_CALL(*session_, WritevData(stream_, kTestStreamId, _, _, _, _))
522 .WillOnce(DoAll( 528 .WillOnce(DoAll(
(...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after
706 // Receive remaining data and FIN for the request. 712 // Receive remaining data and FIN for the request.
707 QuicStreamFrame frame2(stream_->id(), true, 0, StringPiece("End")); 713 QuicStreamFrame frame2(stream_->id(), true, 0, StringPiece("End"));
708 stream_->OnStreamFrame(frame2); 714 stream_->OnStreamFrame(frame2);
709 EXPECT_TRUE(stream_->fin_received()); 715 EXPECT_TRUE(stream_->fin_received());
710 EXPECT_TRUE(stream_->HasFinalReceivedByteOffset()); 716 EXPECT_TRUE(stream_->HasFinalReceivedByteOffset());
711 } 717 }
712 718
713 } // namespace 719 } // namespace
714 } // namespace test 720 } // namespace test
715 } // namespace net 721 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/core/quic_stream.cc ('k') | net/quic/platform/api/quic_reference_counted.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698