| OLD | NEW |
| 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 <string> |
| 8 |
| 7 #include "net/quic/quic_ack_notifier.h" | 9 #include "net/quic/quic_ack_notifier.h" |
| 8 #include "net/quic/quic_connection.h" | 10 #include "net/quic/quic_connection.h" |
| 9 #include "net/quic/quic_utils.h" | 11 #include "net/quic/quic_utils.h" |
| 10 #include "net/quic/quic_write_blocked_list.h" | 12 #include "net/quic/quic_write_blocked_list.h" |
| 11 #include "net/quic/spdy_utils.h" | 13 #include "net/quic/spdy_utils.h" |
| 12 #include "net/quic/test_tools/quic_config_peer.h" | 14 #include "net/quic/test_tools/quic_config_peer.h" |
| 13 #include "net/quic/test_tools/quic_connection_peer.h" | 15 #include "net/quic/test_tools/quic_connection_peer.h" |
| 14 #include "net/quic/test_tools/quic_flow_controller_peer.h" | 16 #include "net/quic/test_tools/quic_flow_controller_peer.h" |
| 15 #include "net/quic/test_tools/quic_session_peer.h" | 17 #include "net/quic/test_tools/quic_session_peer.h" |
| 16 #include "net/quic/test_tools/quic_test_utils.h" | 18 #include "net/quic/test_tools/quic_test_utils.h" |
| (...skipping 27 matching lines...) Expand all Loading... |
| 44 public: | 46 public: |
| 45 TestStream(QuicStreamId id, | 47 TestStream(QuicStreamId id, |
| 46 QuicSession* session, | 48 QuicSession* session, |
| 47 bool should_process_data) | 49 bool should_process_data) |
| 48 : ReliableQuicStream(id, session), | 50 : ReliableQuicStream(id, session), |
| 49 should_process_data_(should_process_data) {} | 51 should_process_data_(should_process_data) {} |
| 50 | 52 |
| 51 uint32 ProcessRawData(const char* data, uint32 data_len) override { | 53 uint32 ProcessRawData(const char* data, uint32 data_len) override { |
| 52 EXPECT_NE(0u, data_len); | 54 EXPECT_NE(0u, data_len); |
| 53 DVLOG(1) << "ProcessData data_len: " << data_len; | 55 DVLOG(1) << "ProcessData data_len: " << data_len; |
| 54 data_ += string(data, data_len); | 56 data_ += std::string(data, data_len); |
| 55 return should_process_data_ ? data_len : 0; | 57 return should_process_data_ ? data_len : 0; |
| 56 } | 58 } |
| 57 | 59 |
| 58 QuicPriority EffectivePriority() const override { | 60 QuicPriority EffectivePriority() const override { |
| 59 return QuicUtils::HighestPriority(); | 61 return QuicUtils::HighestPriority(); |
| 60 } | 62 } |
| 61 | 63 |
| 62 using ReliableQuicStream::WriteOrBufferData; | 64 using ReliableQuicStream::WriteOrBufferData; |
| 63 using ReliableQuicStream::CloseReadSide; | 65 using ReliableQuicStream::CloseReadSide; |
| 64 using ReliableQuicStream::CloseWriteSide; | 66 using ReliableQuicStream::CloseWriteSide; |
| 65 using ReliableQuicStream::OnClose; | 67 using ReliableQuicStream::OnClose; |
| 66 | 68 |
| 67 private: | 69 private: |
| 68 bool should_process_data_; | 70 bool should_process_data_; |
| 69 string data_; | 71 std::string data_; |
| 70 }; | 72 }; |
| 71 | 73 |
| 72 class ReliableQuicStreamTest : public ::testing::TestWithParam<bool> { | 74 class ReliableQuicStreamTest : public ::testing::TestWithParam<bool> { |
| 73 public: | 75 public: |
| 74 ReliableQuicStreamTest() | 76 ReliableQuicStreamTest() |
| 75 : initial_flow_control_window_bytes_(kMaxPacketSize), | 77 : initial_flow_control_window_bytes_(kMaxPacketSize), |
| 76 zero_(QuicTime::Delta::Zero()), | 78 zero_(QuicTime::Delta::Zero()), |
| 77 supported_versions_(QuicSupportedVersions()) { | 79 supported_versions_(QuicSupportedVersions()) { |
| 78 headers_[":host"] = "www.google.com"; | 80 headers_[":host"] = "www.google.com"; |
| 79 headers_[":path"] = "/index.hml"; | 81 headers_[":path"] = "/index.hml"; |
| (...skipping 352 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 432 *delegate_out = delegate; | 434 *delegate_out = delegate; |
| 433 } | 435 } |
| 434 | 436 |
| 435 TEST_F(ReliableQuicStreamTest, WriteOrBufferDataWithQuicAckNotifier) { | 437 TEST_F(ReliableQuicStreamTest, WriteOrBufferDataWithQuicAckNotifier) { |
| 436 Initialize(kShouldProcessData); | 438 Initialize(kShouldProcessData); |
| 437 | 439 |
| 438 scoped_refptr<MockAckNotifierDelegate> delegate( | 440 scoped_refptr<MockAckNotifierDelegate> delegate( |
| 439 new StrictMock<MockAckNotifierDelegate>); | 441 new StrictMock<MockAckNotifierDelegate>); |
| 440 | 442 |
| 441 const int kDataSize = 16 * 1024; | 443 const int kDataSize = 16 * 1024; |
| 442 const string kData(kDataSize, 'a'); | 444 const std::string kData(kDataSize, 'a'); |
| 443 | 445 |
| 444 const int kFirstWriteSize = 100; | 446 const int kFirstWriteSize = 100; |
| 445 const int kSecondWriteSize = 50; | 447 const int kSecondWriteSize = 50; |
| 446 const int kLastWriteSize = kDataSize - kFirstWriteSize - kSecondWriteSize; | 448 const int kLastWriteSize = kDataSize - kFirstWriteSize - kSecondWriteSize; |
| 447 | 449 |
| 448 // Set a large flow control send window so this doesn't interfere with test. | 450 // Set a large flow control send window so this doesn't interfere with test. |
| 449 stream_->flow_controller()->UpdateSendWindowOffset(kDataSize + 1); | 451 stream_->flow_controller()->UpdateSendWindowOffset(kDataSize + 1); |
| 450 session_->flow_controller()->UpdateSendWindowOffset(kDataSize + 1); | 452 session_->flow_controller()->UpdateSendWindowOffset(kDataSize + 1); |
| 451 | 453 |
| 452 scoped_refptr<QuicAckNotifier::DelegateInterface> proxy_delegate; | 454 scoped_refptr<QuicAckNotifier::DelegateInterface> proxy_delegate; |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 487 | 489 |
| 488 // Verify delegate behavior when packets are acked before the | 490 // Verify delegate behavior when packets are acked before the |
| 489 // WritevData call that sends out the last byte. | 491 // WritevData call that sends out the last byte. |
| 490 TEST_F(ReliableQuicStreamTest, WriteOrBufferDataAckNotificationBeforeFlush) { | 492 TEST_F(ReliableQuicStreamTest, WriteOrBufferDataAckNotificationBeforeFlush) { |
| 491 Initialize(kShouldProcessData); | 493 Initialize(kShouldProcessData); |
| 492 | 494 |
| 493 scoped_refptr<MockAckNotifierDelegate> delegate( | 495 scoped_refptr<MockAckNotifierDelegate> delegate( |
| 494 new StrictMock<MockAckNotifierDelegate>); | 496 new StrictMock<MockAckNotifierDelegate>); |
| 495 | 497 |
| 496 const int kDataSize = 16 * 1024; | 498 const int kDataSize = 16 * 1024; |
| 497 const string kData(kDataSize, 'a'); | 499 const std::string kData(kDataSize, 'a'); |
| 498 | 500 |
| 499 const int kInitialWriteSize = 100; | 501 const int kInitialWriteSize = 100; |
| 500 | 502 |
| 501 // Set a large flow control send window so this doesn't interfere with test. | 503 // Set a large flow control send window so this doesn't interfere with test. |
| 502 stream_->flow_controller()->UpdateSendWindowOffset(kDataSize + 1); | 504 stream_->flow_controller()->UpdateSendWindowOffset(kDataSize + 1); |
| 503 session_->flow_controller()->UpdateSendWindowOffset(kDataSize + 1); | 505 session_->flow_controller()->UpdateSendWindowOffset(kDataSize + 1); |
| 504 | 506 |
| 505 scoped_refptr<QuicAckNotifier::DelegateInterface> proxy_delegate; | 507 scoped_refptr<QuicAckNotifier::DelegateInterface> proxy_delegate; |
| 506 | 508 |
| 507 EXPECT_CALL(*session_, WritevData(kHeadersStreamId, _, _, _, _, _)) | 509 EXPECT_CALL(*session_, WritevData(kHeadersStreamId, _, _, _, _, _)) |
| (...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 643 | 645 |
| 644 EXPECT_FALSE(stream_->HasFinalReceivedByteOffset()); | 646 EXPECT_FALSE(stream_->HasFinalReceivedByteOffset()); |
| 645 QuicRstStreamFrame rst_frame(stream_->id(), QUIC_STREAM_CANCELLED, 1234); | 647 QuicRstStreamFrame rst_frame(stream_->id(), QUIC_STREAM_CANCELLED, 1234); |
| 646 stream_->OnStreamReset(rst_frame); | 648 stream_->OnStreamReset(rst_frame); |
| 647 EXPECT_TRUE(stream_->HasFinalReceivedByteOffset()); | 649 EXPECT_TRUE(stream_->HasFinalReceivedByteOffset()); |
| 648 } | 650 } |
| 649 | 651 |
| 650 } // namespace | 652 } // namespace |
| 651 } // namespace test | 653 } // namespace test |
| 652 } // namespace net | 654 } // namespace net |
| OLD | NEW |