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

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

Issue 241783002: Plumbs through delta_largest_observed from (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 8 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 | Annotate | Revision Log
« no previous file with comments | « net/quic/reliable_quic_stream.cc ('k') | net/quic/test_tools/quic_test_utils.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/reliable_quic_stream.h" 5 #include "net/quic/reliable_quic_stream.h"
6 6
7 #include "net/quic/quic_ack_notifier.h" 7 #include "net/quic/quic_ack_notifier.h"
8 #include "net/quic/quic_connection.h" 8 #include "net/quic/quic_connection.h"
9 #include "net/quic/quic_flags.h" 9 #include "net/quic/quic_flags.h"
10 #include "net/quic/quic_utils.h" 10 #include "net/quic/quic_utils.h"
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
68 using ReliableQuicStream::OnClose; 68 using ReliableQuicStream::OnClose;
69 69
70 private: 70 private:
71 bool should_process_data_; 71 bool should_process_data_;
72 string data_; 72 string data_;
73 }; 73 };
74 74
75 class ReliableQuicStreamTest : public ::testing::TestWithParam<bool> { 75 class ReliableQuicStreamTest : public ::testing::TestWithParam<bool> {
76 public: 76 public:
77 ReliableQuicStreamTest() 77 ReliableQuicStreamTest()
78 : initial_flow_control_window_bytes_(kMaxPacketSize) { 78 : initial_flow_control_window_bytes_(kMaxPacketSize),
79 zero_(QuicTime::Delta::Zero()) {
79 headers_[":host"] = "www.google.com"; 80 headers_[":host"] = "www.google.com";
80 headers_[":path"] = "/index.hml"; 81 headers_[":path"] = "/index.hml";
81 headers_[":scheme"] = "https"; 82 headers_[":scheme"] = "https";
82 headers_["cookie"] = 83 headers_["cookie"] =
83 "__utma=208381060.1228362404.1372200928.1372200928.1372200928.1; " 84 "__utma=208381060.1228362404.1372200928.1372200928.1372200928.1; "
84 "__utmc=160408618; " 85 "__utmc=160408618; "
85 "GX=DQAAAOEAAACWJYdewdE9rIrW6qw3PtVi2-d729qaa-74KqOsM1NVQblK4VhX" 86 "GX=DQAAAOEAAACWJYdewdE9rIrW6qw3PtVi2-d729qaa-74KqOsM1NVQblK4VhX"
86 "hoALMsy6HOdDad2Sz0flUByv7etmo3mLMidGrBoljqO9hSVA40SLqpG_iuKKSHX" 87 "hoALMsy6HOdDad2Sz0flUByv7etmo3mLMidGrBoljqO9hSVA40SLqpG_iuKKSHX"
87 "RW3Np4bq0F0SDGDNsW0DSmTS9ufMRrlpARJDS7qAI6M3bghqJp4eABKZiRqebHT" 88 "RW3Np4bq0F0SDGDNsW0DSmTS9ufMRrlpARJDS7qAI6M3bghqJp4eABKZiRqebHT"
88 "pMU-RXvTI5D5oCF1vYxYofH_l1Kviuiy3oQ1kS1enqWgbhJ2t61_SNdv-1XJIS0" 89 "pMU-RXvTI5D5oCF1vYxYofH_l1Kviuiy3oQ1kS1enqWgbhJ2t61_SNdv-1XJIS0"
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
130 } 131 }
131 132
132 protected: 133 protected:
133 MockConnection* connection_; 134 MockConnection* connection_;
134 scoped_ptr<MockSession> session_; 135 scoped_ptr<MockSession> session_;
135 scoped_ptr<TestStream> stream_; 136 scoped_ptr<TestStream> stream_;
136 scoped_ptr<TestStream> stream2_; 137 scoped_ptr<TestStream> stream2_;
137 SpdyHeaderBlock headers_; 138 SpdyHeaderBlock headers_;
138 QuicWriteBlockedList* write_blocked_list_; 139 QuicWriteBlockedList* write_blocked_list_;
139 uint32 initial_flow_control_window_bytes_; 140 uint32 initial_flow_control_window_bytes_;
141 QuicTime::Delta zero_;
140 }; 142 };
141 143
142 TEST_F(ReliableQuicStreamTest, WriteAllData) { 144 TEST_F(ReliableQuicStreamTest, WriteAllData) {
143 Initialize(kShouldProcessData); 145 Initialize(kShouldProcessData);
144 146
145 connection_->options()->max_packet_length = 147 connection_->options()->max_packet_length =
146 1 + QuicPacketCreator::StreamFramePacketOverhead( 148 1 + QuicPacketCreator::StreamFramePacketOverhead(
147 connection_->version(), PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, 149 connection_->version(), PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion,
148 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP); 150 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP);
149 EXPECT_CALL(*session_, WritevData(kStreamId, _, _, _, _)).WillOnce( 151 EXPECT_CALL(*session_, WritevData(kStreamId, _, _, _, _)).WillOnce(
(...skipping 227 matching lines...) Expand 10 before | Expand all | Expand 10 after
377 Return(QuicConsumedData(0, false))); 379 Return(QuicConsumedData(0, false)));
378 stream_->OnCanWrite(); 380 stream_->OnCanWrite();
379 381
380 EXPECT_CALL(*session_, WritevData(kStreamId, _, _, _, proxy_delegate.get())). 382 EXPECT_CALL(*session_, WritevData(kStreamId, _, _, _, proxy_delegate.get())).
381 WillOnce( 383 WillOnce(
382 Return(QuicConsumedData(kLastWriteSize, false))); 384 Return(QuicConsumedData(kLastWriteSize, false)));
383 stream_->OnCanWrite(); 385 stream_->OnCanWrite();
384 386
385 // There were two writes, so OnAckNotification is not propagated 387 // There were two writes, so OnAckNotification is not propagated
386 // until the third Ack arrives. 388 // until the third Ack arrives.
387 proxy_delegate->OnAckNotification(1, 2, 3, 4); 389 proxy_delegate->OnAckNotification(1, 2, 3, 4, zero_);
388 proxy_delegate->OnAckNotification(10, 20, 30, 40); 390 proxy_delegate->OnAckNotification(10, 20, 30, 40, zero_);
389 391
390 // The arguments to delegate->OnAckNotification are the sum of the 392 // The arguments to delegate->OnAckNotification are the sum of the
391 // arguments to proxy_delegate OnAckNotification calls. 393 // arguments to proxy_delegate OnAckNotification calls.
392 EXPECT_CALL(*delegate, OnAckNotification(111, 222, 333, 444)); 394 EXPECT_CALL(*delegate, OnAckNotification(111, 222, 333, 444, zero_));
393 proxy_delegate->OnAckNotification(100, 200, 300, 400); 395 proxy_delegate->OnAckNotification(100, 200, 300, 400, zero_);
394 } 396 }
395 397
396 // Verify delegate behavior when packets are acked before the 398 // Verify delegate behavior when packets are acked before the
397 // WritevData call that sends out the last byte. 399 // WritevData call that sends out the last byte.
398 TEST_F(ReliableQuicStreamTest, WriteOrBufferDataAckNotificationBeforeFlush) { 400 TEST_F(ReliableQuicStreamTest, WriteOrBufferDataAckNotificationBeforeFlush) {
399 Initialize(kShouldProcessData); 401 Initialize(kShouldProcessData);
400 402
401 scoped_refptr<MockAckNotifierDelegate> delegate( 403 scoped_refptr<MockAckNotifierDelegate> delegate(
402 new StrictMock<MockAckNotifierDelegate>); 404 new StrictMock<MockAckNotifierDelegate>);
403 405
404 const int kDataSize = 16 * 1024; 406 const int kDataSize = 16 * 1024;
405 const string kData(kDataSize, 'a'); 407 const string kData(kDataSize, 'a');
406 408
407 const int kInitialWriteSize = 100; 409 const int kInitialWriteSize = 100;
408 410
409 scoped_refptr<QuicAckNotifier::DelegateInterface> proxy_delegate; 411 scoped_refptr<QuicAckNotifier::DelegateInterface> proxy_delegate;
410 412
411 EXPECT_CALL(*session_, WritevData(kStreamId, _, _, _, _)).WillOnce(DoAll( 413 EXPECT_CALL(*session_, WritevData(kStreamId, _, _, _, _)).WillOnce(DoAll(
412 WithArgs<4>(Invoke(CreateFunctor( 414 WithArgs<4>(Invoke(CreateFunctor(
413 &SaveProxyAckNotifierDelegate, &proxy_delegate))), 415 &SaveProxyAckNotifierDelegate, &proxy_delegate))),
414 Return(QuicConsumedData(kInitialWriteSize, false)))); 416 Return(QuicConsumedData(kInitialWriteSize, false))));
415 stream_->WriteOrBufferData(kData, false, delegate.get()); 417 stream_->WriteOrBufferData(kData, false, delegate.get());
416 EXPECT_TRUE(write_blocked_list_->HasWriteBlockedStreams()); 418 EXPECT_TRUE(write_blocked_list_->HasWriteBlockedStreams());
417 419
418 // Handle the ack of the first write. 420 // Handle the ack of the first write.
419 proxy_delegate->OnAckNotification(1, 2, 3, 4); 421 proxy_delegate->OnAckNotification(1, 2, 3, 4, zero_);
420 proxy_delegate = NULL; 422 proxy_delegate = NULL;
421 423
422 EXPECT_CALL(*session_, WritevData(kStreamId, _, _, _, _)).WillOnce(DoAll( 424 EXPECT_CALL(*session_, WritevData(kStreamId, _, _, _, _)).WillOnce(DoAll(
423 WithArgs<4>(Invoke(CreateFunctor( 425 WithArgs<4>(Invoke(CreateFunctor(
424 &SaveProxyAckNotifierDelegate, &proxy_delegate))), 426 &SaveProxyAckNotifierDelegate, &proxy_delegate))),
425 Return(QuicConsumedData(kDataSize - kInitialWriteSize, false)))); 427 Return(QuicConsumedData(kDataSize - kInitialWriteSize, false))));
426 stream_->OnCanWrite(); 428 stream_->OnCanWrite();
427 429
428 // Handle the ack for the second write. 430 // Handle the ack for the second write.
429 EXPECT_CALL(*delegate, OnAckNotification(101, 202, 303, 404)); 431 EXPECT_CALL(*delegate, OnAckNotification(101, 202, 303, 404, zero_));
430 proxy_delegate->OnAckNotification(100, 200, 300, 400); 432 proxy_delegate->OnAckNotification(100, 200, 300, 400, zero_);
431 } 433 }
432 434
433 // Verify delegate behavior when WriteOrBufferData does not buffer. 435 // Verify delegate behavior when WriteOrBufferData does not buffer.
434 TEST_F(ReliableQuicStreamTest, WriteAndBufferDataWithAckNotiferNoBuffer) { 436 TEST_F(ReliableQuicStreamTest, WriteAndBufferDataWithAckNotiferNoBuffer) {
435 Initialize(kShouldProcessData); 437 Initialize(kShouldProcessData);
436 438
437 scoped_refptr<MockAckNotifierDelegate> delegate( 439 scoped_refptr<MockAckNotifierDelegate> delegate(
438 new StrictMock<MockAckNotifierDelegate>); 440 new StrictMock<MockAckNotifierDelegate>);
439 441
440 scoped_refptr<QuicAckNotifier::DelegateInterface> proxy_delegate; 442 scoped_refptr<QuicAckNotifier::DelegateInterface> proxy_delegate;
441 443
442 EXPECT_CALL(*session_, WritevData(kStreamId, _, _, _, _)).WillOnce(DoAll( 444 EXPECT_CALL(*session_, WritevData(kStreamId, _, _, _, _)).WillOnce(DoAll(
443 WithArgs<4>(Invoke(CreateFunctor( 445 WithArgs<4>(Invoke(CreateFunctor(
444 &SaveProxyAckNotifierDelegate, &proxy_delegate))), 446 &SaveProxyAckNotifierDelegate, &proxy_delegate))),
445 Return(QuicConsumedData(kDataLen, true)))); 447 Return(QuicConsumedData(kDataLen, true))));
446 stream_->WriteOrBufferData(kData1, true, delegate.get()); 448 stream_->WriteOrBufferData(kData1, true, delegate.get());
447 EXPECT_FALSE(write_blocked_list_->HasWriteBlockedStreams()); 449 EXPECT_FALSE(write_blocked_list_->HasWriteBlockedStreams());
448 450
449 // Handle the ack. 451 // Handle the ack.
450 EXPECT_CALL(*delegate, OnAckNotification(1, 2, 3, 4)); 452 EXPECT_CALL(*delegate, OnAckNotification(1, 2, 3, 4, zero_));
451 proxy_delegate->OnAckNotification(1, 2, 3, 4); 453 proxy_delegate->OnAckNotification(1, 2, 3, 4, zero_);
452 } 454 }
453 455
454 // Verify delegate behavior when WriteOrBufferData buffers all the data. 456 // Verify delegate behavior when WriteOrBufferData buffers all the data.
455 TEST_F(ReliableQuicStreamTest, BufferOnWriteAndBufferDataWithAckNotifer) { 457 TEST_F(ReliableQuicStreamTest, BufferOnWriteAndBufferDataWithAckNotifer) {
456 Initialize(kShouldProcessData); 458 Initialize(kShouldProcessData);
457 459
458 scoped_refptr<MockAckNotifierDelegate> delegate( 460 scoped_refptr<MockAckNotifierDelegate> delegate(
459 new StrictMock<MockAckNotifierDelegate>); 461 new StrictMock<MockAckNotifierDelegate>);
460 462
461 scoped_refptr<QuicAckNotifier::DelegateInterface> proxy_delegate; 463 scoped_refptr<QuicAckNotifier::DelegateInterface> proxy_delegate;
462 464
463 EXPECT_CALL(*session_, WritevData(kStreamId, _, _, _, _)).WillOnce( 465 EXPECT_CALL(*session_, WritevData(kStreamId, _, _, _, _)).WillOnce(
464 Return(QuicConsumedData(0, false))); 466 Return(QuicConsumedData(0, false)));
465 stream_->WriteOrBufferData(kData1, true, delegate.get()); 467 stream_->WriteOrBufferData(kData1, true, delegate.get());
466 EXPECT_TRUE(write_blocked_list_->HasWriteBlockedStreams()); 468 EXPECT_TRUE(write_blocked_list_->HasWriteBlockedStreams());
467 469
468 EXPECT_CALL(*session_, WritevData(kStreamId, _, _, _, _)).WillOnce(DoAll( 470 EXPECT_CALL(*session_, WritevData(kStreamId, _, _, _, _)).WillOnce(DoAll(
469 WithArgs<4>(Invoke(CreateFunctor( 471 WithArgs<4>(Invoke(CreateFunctor(
470 &SaveProxyAckNotifierDelegate, &proxy_delegate))), 472 &SaveProxyAckNotifierDelegate, &proxy_delegate))),
471 Return(QuicConsumedData(kDataLen, true)))); 473 Return(QuicConsumedData(kDataLen, true))));
472 stream_->OnCanWrite(); 474 stream_->OnCanWrite();
473 475
474 // Handle the ack. 476 // Handle the ack.
475 EXPECT_CALL(*delegate, OnAckNotification(1, 2, 3, 4)); 477 EXPECT_CALL(*delegate, OnAckNotification(1, 2, 3, 4, zero_));
476 proxy_delegate->OnAckNotification(1, 2, 3, 4); 478 proxy_delegate->OnAckNotification(1, 2, 3, 4, zero_);
477 } 479 }
478 480
479 // Verify delegate behavior when WriteOrBufferData when the FIN is 481 // Verify delegate behavior when WriteOrBufferData when the FIN is
480 // sent out in a different packet. 482 // sent out in a different packet.
481 TEST_F(ReliableQuicStreamTest, WriteAndBufferDataWithAckNotiferOnlyFinRemains) { 483 TEST_F(ReliableQuicStreamTest, WriteAndBufferDataWithAckNotiferOnlyFinRemains) {
482 Initialize(kShouldProcessData); 484 Initialize(kShouldProcessData);
483 485
484 scoped_refptr<MockAckNotifierDelegate> delegate( 486 scoped_refptr<MockAckNotifierDelegate> delegate(
485 new StrictMock<MockAckNotifierDelegate>); 487 new StrictMock<MockAckNotifierDelegate>);
486 488
487 scoped_refptr<QuicAckNotifier::DelegateInterface> proxy_delegate; 489 scoped_refptr<QuicAckNotifier::DelegateInterface> proxy_delegate;
488 490
489 EXPECT_CALL(*session_, WritevData(kStreamId, _, _, _, _)).WillOnce(DoAll( 491 EXPECT_CALL(*session_, WritevData(kStreamId, _, _, _, _)).WillOnce(DoAll(
490 WithArgs<4>(Invoke(CreateFunctor( 492 WithArgs<4>(Invoke(CreateFunctor(
491 &SaveProxyAckNotifierDelegate, &proxy_delegate))), 493 &SaveProxyAckNotifierDelegate, &proxy_delegate))),
492 Return(QuicConsumedData(kDataLen, false)))); 494 Return(QuicConsumedData(kDataLen, false))));
493 stream_->WriteOrBufferData(kData1, true, delegate.get()); 495 stream_->WriteOrBufferData(kData1, true, delegate.get());
494 EXPECT_TRUE(write_blocked_list_->HasWriteBlockedStreams()); 496 EXPECT_TRUE(write_blocked_list_->HasWriteBlockedStreams());
495 497
496 EXPECT_CALL(*session_, WritevData(kStreamId, _, _, _, _)).WillOnce(DoAll( 498 EXPECT_CALL(*session_, WritevData(kStreamId, _, _, _, _)).WillOnce(DoAll(
497 WithArgs<4>(Invoke(CreateFunctor( 499 WithArgs<4>(Invoke(CreateFunctor(
498 &SaveProxyAckNotifierDelegate, &proxy_delegate))), 500 &SaveProxyAckNotifierDelegate, &proxy_delegate))),
499 Return(QuicConsumedData(0, true)))); 501 Return(QuicConsumedData(0, true))));
500 stream_->OnCanWrite(); 502 stream_->OnCanWrite();
501 503
502 // Handle the acks. 504 // Handle the acks.
503 proxy_delegate->OnAckNotification(1, 2, 3, 4); 505 proxy_delegate->OnAckNotification(1, 2, 3, 4, zero_);
504 EXPECT_CALL(*delegate, OnAckNotification(11, 22, 33, 44)); 506 EXPECT_CALL(*delegate, OnAckNotification(11, 22, 33, 44, zero_));
505 proxy_delegate->OnAckNotification(10, 20, 30, 40); 507 proxy_delegate->OnAckNotification(10, 20, 30, 40, zero_);
506 } 508 }
507 509
508 } // namespace 510 } // namespace
509 } // namespace test 511 } // namespace test
510 } // namespace net 512 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/reliable_quic_stream.cc ('k') | net/quic/test_tools/quic_test_utils.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698