| 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/quic_stream_sequencer.h" | 5 #include "net/quic/quic_stream_sequencer.h" |
| 6 | 6 |
| 7 #include <utility> | 7 #include <utility> |
| 8 #include <vector> | 8 #include <vector> |
| 9 | 9 |
| 10 #include "base/logging.h" | 10 #include "base/logging.h" |
| 11 #include "base/rand_util.h" | 11 #include "base/rand_util.h" |
| 12 #include "net/base/ip_endpoint.h" | 12 #include "net/base/ip_endpoint.h" |
| 13 #include "net/quic/quic_flags.h" | 13 #include "net/quic/quic_flags.h" |
| 14 #include "net/quic/quic_frame_list.h" | |
| 15 #include "net/quic/quic_utils.h" | 14 #include "net/quic/quic_utils.h" |
| 16 #include "net/quic/reliable_quic_stream.h" | 15 #include "net/quic/reliable_quic_stream.h" |
| 17 #include "net/quic/test_tools/mock_clock.h" | 16 #include "net/quic/test_tools/mock_clock.h" |
| 18 #include "net/quic/test_tools/quic_stream_sequencer_peer.h" | 17 #include "net/quic/test_tools/quic_stream_sequencer_peer.h" |
| 19 #include "net/quic/test_tools/quic_test_utils.h" | 18 #include "net/quic/test_tools/quic_test_utils.h" |
| 20 #include "net/test/gtest_util.h" | 19 #include "net/test/gtest_util.h" |
| 21 #include "testing/gmock/include/gmock/gmock.h" | 20 #include "testing/gmock/include/gmock/gmock.h" |
| 22 #include "testing/gmock_mutant.h" | 21 #include "testing/gmock_mutant.h" |
| 23 #include "testing/gtest/include/gtest/gtest.h" | 22 #include "testing/gtest/include/gtest/gtest.h" |
| 24 | 23 |
| (...skipping 524 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 549 OnFrame(3, "def"); | 548 OnFrame(3, "def"); |
| 550 // Missing packet: 6, ghi. | 549 // Missing packet: 6, ghi. |
| 551 OnFrame(9, "jkl"); | 550 OnFrame(9, "jkl"); |
| 552 | 551 |
| 553 vector<string> expected = {"abcdef"}; | 552 vector<string> expected = {"abcdef"}; |
| 554 ASSERT_TRUE(VerifyReadableRegions(expected)); | 553 ASSERT_TRUE(VerifyReadableRegions(expected)); |
| 555 | 554 |
| 556 sequencer_->MarkConsumed(6); | 555 sequencer_->MarkConsumed(6); |
| 557 } | 556 } |
| 558 | 557 |
| 559 TEST(QuicFrameListTest, FrameOverlapsBufferedData) { | |
| 560 QuicFrameList buffer; | |
| 561 | |
| 562 // Ensure that FrameOverlapsBufferedData returns appropriate responses when | |
| 563 // there is existing data buffered. | |
| 564 const int kBufferedOffset = 10; | |
| 565 const int kBufferedDataLength = 3; | |
| 566 const int kNewDataLength = 3; | |
| 567 string data(kNewDataLength, '.'); | |
| 568 | |
| 569 // No overlap if no buffered frames. | |
| 570 EXPECT_EQ(0u, buffer.BytesBuffered()); | |
| 571 size_t bytes_written; | |
| 572 // Add a buffered frame. | |
| 573 buffer.OnStreamData( | |
| 574 kBufferedOffset, | |
| 575 StringPiece(string(kBufferedDataLength, '.').data(), kBufferedDataLength), | |
| 576 QuicTime::Zero(), &bytes_written); | |
| 577 | |
| 578 // New byte range partially overlaps with buffered frame, start offset | |
| 579 // preceding buffered frame. | |
| 580 EXPECT_TRUE(QuicStreamSequencerPeer::FrameOverlapsBufferedData( | |
| 581 &buffer, QuicStreamFrame(1, false, kBufferedOffset - 1, data))); | |
| 582 EXPECT_TRUE(QuicStreamSequencerPeer::FrameOverlapsBufferedData( | |
| 583 &buffer, | |
| 584 QuicStreamFrame(1, false, kBufferedOffset - kNewDataLength + 1, data))); | |
| 585 | |
| 586 // New byte range partially overlaps with buffered frame, start offset inside | |
| 587 // existing buffered frame. | |
| 588 EXPECT_TRUE(QuicStreamSequencerPeer::FrameOverlapsBufferedData( | |
| 589 &buffer, QuicStreamFrame(1, false, kBufferedOffset + 1, data))); | |
| 590 EXPECT_TRUE(QuicStreamSequencerPeer::FrameOverlapsBufferedData( | |
| 591 &buffer, QuicStreamFrame( | |
| 592 1, false, kBufferedOffset + kBufferedDataLength - 1, data))); | |
| 593 | |
| 594 // New byte range entirely outside of buffered frames, start offset | |
| 595 // preceeding buffered frame. | |
| 596 EXPECT_FALSE(QuicStreamSequencerPeer::FrameOverlapsBufferedData( | |
| 597 &buffer, | |
| 598 QuicStreamFrame(1, false, kBufferedOffset - kNewDataLength, data))); | |
| 599 | |
| 600 // New byte range entirely outside of buffered frames, start offset later than | |
| 601 // buffered frame. | |
| 602 EXPECT_FALSE(QuicStreamSequencerPeer::FrameOverlapsBufferedData( | |
| 603 &buffer, | |
| 604 QuicStreamFrame(1, false, kBufferedOffset + kBufferedDataLength, data))); | |
| 605 } | |
| 606 | |
| 607 TEST_F(QuicStreamSequencerTest, DontAcceptOverlappingFrames) { | 558 TEST_F(QuicStreamSequencerTest, DontAcceptOverlappingFrames) { |
| 608 // The peer should never send us non-identical stream frames which contain | 559 // The peer should never send us non-identical stream frames which contain |
| 609 // overlapping byte ranges - if they do, we close the connection. | 560 // overlapping byte ranges - if they do, we close the connection. |
| 610 | 561 |
| 611 QuicStreamFrame frame1(kClientDataStreamId1, false, 1, StringPiece("hello")); | 562 QuicStreamFrame frame1(kClientDataStreamId1, false, 1, StringPiece("hello")); |
| 612 sequencer_->OnStreamFrame(frame1); | 563 sequencer_->OnStreamFrame(frame1); |
| 613 | 564 |
| 614 QuicStreamFrame frame2(kClientDataStreamId1, false, 2, StringPiece("hello")); | 565 QuicStreamFrame frame2(kClientDataStreamId1, false, 2, StringPiece("hello")); |
| 615 EXPECT_CALL(stream_, CloseConnectionWithDetails(QUIC_INVALID_STREAM_FRAME, _)) | 566 EXPECT_CALL(stream_, CloseConnectionWithDetails(QUIC_INVALID_STREAM_FRAME, _)) |
| 616 .Times(1); | 567 .Times(1); |
| (...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 695 EXPECT_EQ(timestamp, t1); | 646 EXPECT_EQ(timestamp, t1); |
| 696 QuicStreamSequencerTest::ConsumeData(3); | 647 QuicStreamSequencerTest::ConsumeData(3); |
| 697 EXPECT_EQ(0u, NumBufferedBytes()); | 648 EXPECT_EQ(0u, NumBufferedBytes()); |
| 698 EXPECT_EQ(6u, sequencer_->NumBytesConsumed()); | 649 EXPECT_EQ(6u, sequencer_->NumBytesConsumed()); |
| 699 EXPECT_EQ(0u, sequencer_->NumBytesBuffered()); | 650 EXPECT_EQ(0u, sequencer_->NumBytesBuffered()); |
| 700 } | 651 } |
| 701 | 652 |
| 702 } // namespace | 653 } // namespace |
| 703 } // namespace test | 654 } // namespace test |
| 704 } // namespace net | 655 } // namespace net |
| OLD | NEW |